diff --git a/README.md b/README.md index 16d4c81ba..4d2a9216d 100644 --- a/README.md +++ b/README.md @@ -7,15 +7,15 @@

- npm version + npm version - Weekly Downloads + Weekly Downloads Test Status

js-stellar-sdk is a JavaScript library for communicating with a -[Stellar Horizon server](https://github.com/stellar/go/tree/master/services/horizon) and [Soroban RPC](https://soroban.stellar.org/docs/reference/rpc). +[Stellar Horizon server](https://github.com/stellar/go/tree/master/services/horizon) and [Soroban RPC](https://developers.stellar.org/docs/data/rpc). It is used for building Stellar apps either on Node.js or in the browser, though it can be used in other environments with some tinkering. It provides: @@ -96,14 +96,14 @@ USE_AXIOS=false npm run build:browser The usage documentation for this library lives in a handful of places: - * across the [Stellar Developer Docs](), which includes tutorials and examples, + * across the [Stellar Developer Docs](https://developers.stellar.org), which includes tutorials and examples, * within [this repository itself](https://github.com/stellar/js-stellar-sdk/blob/master/docs/reference/readme.md), and * on the generated [API doc site](https://stellar.github.io/js-stellar-sdk/). You can also refer to: - * the [documentation](https://developers.stellar.org/network/horizon) for the Horizon REST API (if using the `Horizon` module) and - * the [documentation](https://soroban.stellar.org/docs/reference/rpc) for Soroban RPC's API (if using the `rpc` module) + * the [documentation](https://developers.stellar.org/docs/data/horizon) for the Horizon REST API (if using the `Horizon` module) and + * the [documentation](https://developers.stellar.org/docs/data/rpc) for Soroban RPC's API (if using the `rpc` module) ### Usage with React-Native diff --git a/config/.jsdoc.json b/config/.jsdoc.json index 55041dc28..e25576920 100644 --- a/config/.jsdoc.json +++ b/config/.jsdoc.json @@ -1,13 +1,51 @@ { + "tags": { + "allowUnknownTags": ["optional", "category", "warning", "note", "link"] + }, + "plugins": [ + "plugins/markdown", + "node_modules/better-docs/typescript", + "node_modules/better-docs/category" + ], "source": { "include": ["lib/", "js-stellar-base/src"], + "includePattern": "\\.(js|ts)$", "exclude": "js-stellar-base/src/generated" }, "opts": { + "encoding": "utf8", + "readme": "README.md", "destination": "jsdoc/", "recurse": true, - "template": "node_modules/minami", - "readme": "README.md" + "verbose": true, + "template": "node_modules/better-docs", + "private": true + }, + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "search": true, + "default": { + "useLongnameInNav": true + }, + "better-docs": { + "name": "@stellar/stellar-sdk", + "title": "@stellar/stellar-sdk Documentation", + "hideGenerator": false, + "navLinks": [ + { + "label": "GitHub", + "href": "https://github.com/stellar/js-stellar-sdk" + }, + { + "label": "npm", + "href": "https://www.npmjs.com/package/@stellar/stellar-sdk" + } + ] + } }, - "plugins": ["plugins/markdown"] + "markdown": { + "hardwrap": false, + "idInHeadings": true + } } diff --git a/config/.prettierignore b/config/.prettierignore index 644fef8aa..7738b9729 100644 --- a/config/.prettierignore +++ b/config/.prettierignore @@ -2,4 +2,5 @@ ../node_modules ../lib ../dist -../docs \ No newline at end of file +../docs +../test/unit/out/contract_spec.js diff --git a/docs/reference/readme.md b/docs/reference/readme.md index 12e0bdb56..5c049fb7d 100644 --- a/docs/reference/readme.md +++ b/docs/reference/readme.md @@ -1,7 +1,7 @@ --- title: Overview --- -The JavaScript Stellar SDK facilitates integration with the Stellar [Horizon API server](https://developers.stellar.org/api/), the Stellar [Soroban RPC server](https://soroban.stellar.org/docs/reference/rpc) and submission of Stellar transactions, either on Node.js or in the browser. It has three main uses: [querying Horizon](#querying-horizon), [interacting with Soroban RPC](), and [building, signing, and submitting transactions to the Stellar network](#building-transactions). +The JavaScript Stellar SDK facilitates integration with the Stellar [Horizon API server](https://developers.stellar.org/api/), the Stellar [Soroban RPC server](https://developers.stellar.org/network/soroban-rpc) and submission of Stellar transactions, either on Node.js or in the browser. It has three main uses: [querying Horizon](#querying-horizon), [interacting with Soroban RPC](), and [building, signing, and submitting transactions to the Stellar network](#building-transactions). * [Building and installing the SDK](https://github.com/stellar/js-stellar-sdk) * [Examples of using the SDK](./examples.md) diff --git a/package.json b/package.json index 5f48a2bf8..1b415dd9f 100644 --- a/package.json +++ b/package.json @@ -95,7 +95,7 @@ "build:browser:all": "yarn build:browser && cross-env no_clean=true yarn build:browser:no-axios && cross-env no_clean=true yarn build:browser:no-eventsource && cross-env no_clean=true yarn build:browser:minimal", "build:docs": "cross-env NODE_ENV=docs yarn _babel", "clean": "rm -rf lib/ dist/ coverage/ .nyc_output/ jsdoc/ test/e2e/.soroban", - "docs": "yarn build:docs && jsdoc -c ./config/.jsdoc.json --verbose", + "docs": "yarn build:docs && jsdoc -c ./config/.jsdoc.json", "test": "yarn build:test && yarn test:node && yarn test:integration && yarn test:browser", "test:e2e": "./test/e2e/initialize.sh && yarn _nyc mocha --recursive 'test/e2e/src/test-*.js'", "test:node": "yarn _nyc mocha --recursive 'test/unit/**/*.js'", @@ -166,6 +166,7 @@ "babel-loader": "^9.1.3", "babel-plugin-istanbul": "^7.0.0", "babel-plugin-transform-define": "^2.1.4", + "better-docs": "^2.7.3", "buffer": "^6.0.3", "chai": "^4.3.10", "chai-as-promised": "^7.1.1", @@ -196,7 +197,6 @@ "karma-webpack": "^5.0.1", "lint-staged": "^15.2.10", "lodash": "^4.17.21", - "minami": "^1.1.1", "mocha": "^10.6.0", "node-polyfill-webpack-plugin": "^3.0.0", "null-loader": "^4.0.1", diff --git a/src/config.ts b/src/config.ts index 4528a0a8a..8184da934 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,14 +1,15 @@ -interface Configuration { +/** + * Global config parameters. + */ +export interface Configuration { /** - * Allow connecting to http servers, default: `false`. This must be set to false in production deployments! - * - * @type {boolean} + * Allow connecting to http servers. This must be set to false in production deployments! + * @default false */ allowHttp: boolean; /** - * Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. You can also use {@link Config} class to set this globally. - * - * @type {number} + * Allow a timeout. Allows user to avoid nasty lag due network issues. + * @default 0 */ timeout: number; } @@ -23,26 +24,23 @@ let config = { ...defaultConfig}; /** * Global config class. * - * Usage node: - * ``` - * import {Config} from 'stellar-sdk'; + * @hideconstructor + * + * @example Usage in node + * import { Config } from '@stellar/stellar-sdk'; * Config.setAllowHttp(true); * Config.setTimeout(5000); - * ``` * - * Usage browser: - * ``` + * @example Usage in the browser * StellarSdk.Config.setAllowHttp(true); * StellarSdk.Config.setTimeout(5000); - * ``` - * @static */ class Config { /** - * Sets `allowHttp` flag globally. When set to `true`, connections to insecure http protocol servers will be allowed. - * Must be set to `false` in production. Default: `false`. - * @param {boolean} value new allowHttp value - * @returns {void} + * Sets `allowHttp` flag globally. When set to `true`, connections to insecure + * http protocol servers will be allowed. Must be set to `false` in + * production. + * @default false * @static */ public static setAllowHttp(value: boolean): void { @@ -50,10 +48,9 @@ class Config { } /** - * Sets `timeout` flag globally. When set to anything besides 0, the request will timeout after specified time (ms). - * Default: 0. - * @param {number} value new timeout value - * @returns {void} + * Sets `timeout` flag globally. When set to anything besides 0, the request + * will timeout after specified time (ms). + * @default 0 * @static */ public static setTimeout(value: number): void { @@ -61,16 +58,18 @@ class Config { } /** + * Returns the configured `allowHttp` flag. * @static - * @returns {boolean} allowHttp flag + * @returns {boolean} */ public static isAllowHttp(): boolean { return config.allowHttp; } /** + * Returns the configured `timeout` flag. * @static - * @returns {number} timeout flag + * @returns {number} */ public static getTimeout(): number { return config.timeout; @@ -79,7 +78,6 @@ class Config { /** * Sets all global config flags to default values. * @static - * @returns {void} */ public static setDefault(): void { config = { ...defaultConfig}; diff --git a/src/contract/assembled_transaction.ts b/src/contract/assembled_transaction.ts index c5df093e0..ffaa0f060 100644 --- a/src/contract/assembled_transaction.ts +++ b/src/contract/assembled_transaction.ts @@ -18,7 +18,7 @@ import type { Tx, XDR_BASE64, } from "./types"; -import { Server } from "../rpc/server"; +import { Server } from "../rpc"; import { Api } from "../rpc/api"; import { assembleTransaction } from "../rpc/transaction"; import type { Client } from "./client"; @@ -32,6 +32,8 @@ import { DEFAULT_TIMEOUT } from "./types"; import { SentTransaction } from "./sent_transaction"; import { Spec } from "./spec"; +/** @module contract */ + /** * The main workhorse of {@link Client}. This class is used to wrap a * transaction-under-construction and provide high-level interfaces to the most @@ -47,7 +49,7 @@ import { Spec } from "./spec"; * Let's look at examples of how to use `AssembledTransaction` for a variety of * use-cases: * - * # 1. Simple read call + * #### 1. Simple read call * * Since these only require simulation, you can get the `result` of the call * right after constructing your `AssembledTransaction`: @@ -80,7 +82,7 @@ import { Spec } from "./spec"; * }) * ``` * - * # 2. Simple write call + * #### 2. Simple write call * * For write calls that will be simulated and then sent to the network without * further manipulation, only one more step is needed: @@ -114,7 +116,7 @@ import { Spec } from "./spec"; * const { result } = await tx.signAndSend() * ``` * - * # 3. More fine-grained control over transaction construction + * #### 3. More fine-grained control over transaction construction * * If you need more control over the transaction before simulating it, you can * set various {@link MethodOptions} when constructing your @@ -147,7 +149,7 @@ import { Spec } from "./spec"; * If you need to inspect the simulation later, you can access it with * `tx.simulation`. * - * # 4. Multi-auth workflows + * #### 4. Multi-auth workflows * * Soroban, and Stellar in general, allows multiple parties to sign a * transaction. @@ -234,6 +236,8 @@ import { Spec } from "./spec"; * To see an even more complicated example, where Alice swaps with Bob but the * transaction is invoked by yet another party, check out * [test-swap.js](../../test/e2e/src/test-swap.js). + * + * @memberof module:contract */ export class AssembledTransaction { /** @@ -401,7 +405,7 @@ export class AssembledTransaction { } const method = invokeContractArgs.functionName().toString('utf-8'); const txn = new AssembledTransaction( - { ...options, + { ...options, method, parseResultXdr: (result: xdr.ScVal) => spec.funcResToNative(method, result), @@ -431,10 +435,11 @@ export class AssembledTransaction { * If you don't want to simulate the transaction, you can set `simulate` to * `false` in the options. * - * const tx = await AssembledTransaction.build({ - * ..., - * simulate: false, - * }) + * @example + * const tx = await AssembledTransaction.build({ + * ..., + * simulate: false, + * }) */ static async build( options: AssembledTransactionOptions, @@ -557,7 +562,7 @@ export class AssembledTransaction { if (Api.isSimulationRestore(simulation)) { throw new AssembledTransaction.Errors.ExpiredState( `You need to restore some contract state before you can invoke this method.\n` + - 'You can set `restore` to true in the method options in order to ' + + 'You can set `restore` to true in the method options in order to ' + 'automatically restore the contract state when needed.' ); } @@ -597,7 +602,7 @@ export class AssembledTransaction { } /** - * Sign the transaction with the signTransaction function included previously. + * Sign the transaction with the signTransaction function included previously. * If you did not previously include one, you need to include one now. */ sign = async ({ @@ -674,9 +679,9 @@ export class AssembledTransaction { } /** - * Sign the transaction with the `signTransaction` function included previously. - * If you did not previously include one, you need to include one now. - * After signing, this method will send the transaction to the network and + * Sign the transaction with the `signTransaction` function included previously. + * If you did not previously include one, you need to include one now. + * After signing, this method will send the transaction to the network and * return a `SentTransaction` that keeps track * of all the attempts to fetch the transaction. */ signAndSend = async ({ @@ -875,28 +880,28 @@ export class AssembledTransaction { } /** - * Restores the footprint (resource ledger entries that can be read or written) - * of an expired transaction. - * + * Restores the footprint (resource ledger entries that can be read or written) + * of an expired transaction. + * * The method will: * 1. Build a new transaction aimed at restoring the necessary resources. * 2. Sign this new transaction if a `signTransaction` handler is provided. * 3. Send the signed transaction to the network. * 4. Await and return the response from the network. - * + * * Preconditions: * - A `signTransaction` function must be provided during the Client initialization. * - The provided `restorePreamble` should include a minimum resource fee and valid * transaction data. - * - * @throws {Error} - Throws an error if no `signTransaction` function is provided during + * + * @throws {Error} - Throws an error if no `signTransaction` function is provided during * Client initialization. - * @throws {AssembledTransaction.Errors.RestoreFailure} - Throws a custom error if the + * @throws {AssembledTransaction.Errors.RestoreFailure} - Throws a custom error if the * restore transaction fails, providing the details of the failure. */ async restoreFootprint( /** - * The preamble object containing data required to + * The preamble object containing data required to * build the restore transaction. */ restorePreamble: { diff --git a/src/contract/basic_node_signer.ts b/src/contract/basic_node_signer.ts index 9e50327cd..bcd372a7e 100644 --- a/src/contract/basic_node_signer.ts +++ b/src/contract/basic_node_signer.ts @@ -1,18 +1,20 @@ import { Keypair, TransactionBuilder, hash } from "@stellar/stellar-base"; -import type { AssembledTransaction } from "./assembled_transaction"; import type { Client } from "./client"; /** - * For use with {@link Client} and {@link AssembledTransaction}. + * For use with {@link Client} and {@link module:contract.AssembledTransaction}. * Implements `signTransaction` and `signAuthEntry` with signatures expected by * those classes. This is useful for testing and maybe some simple Node * applications. Feel free to use this as a starting point for your own * Wallet/TransactionSigner implementation. + * + * @memberof module:contract + * + * @param {Keypair} keypair {@link Keypair} to use to sign the transaction or auth entry + * @param {string} networkPassphrase passphrase of network to sign for */ export const basicNodeSigner = ( - /** {@link Keypair} to use to sign the transaction or auth entry */ keypair: Keypair, - /** passphrase of network to sign for */ networkPassphrase: string, ) => ({ // eslint-disable-next-line require-await diff --git a/src/contract/client.ts b/src/contract/client.ts index f576762a6..2db5b4040 100644 --- a/src/contract/client.ts +++ b/src/contract/client.ts @@ -5,19 +5,23 @@ import { AssembledTransaction } from "./assembled_transaction"; import type { ClientOptions, MethodOptions } from "./types"; import { processSpecEntryStream } from './utils'; +/** + * Generate a class from the contract spec that where each contract method + * gets included with an identical name. + * + * Each method returns an {@link module:contract.AssembledTransaction | AssembledTransaction} that can + * be used to modify, simulate, decode results, and possibly sign, & submit the + * transaction. + * + * @memberof module:contract + * + * @class + * @param {module:contract.Spec} spec {@link Spec} to construct a Client for + * @param {ClientOptions} options see {@link ClientOptions} + */ export class Client { - /** - * Generate a class from the contract spec that where each contract method - * gets included with an identical name. - * - * Each method returns an {@link AssembledTransaction} that can be used to - * modify, simulate, decode results, and possibly sign, & submit the - * transaction. - */ constructor( - /** {@link Spec} to construct a Client for */ public readonly spec: Spec, - /** see {@link ClientOptions} */ public readonly options: ClientOptions, ) { this.spec.funcs().forEach((xdrFn) => { @@ -53,11 +57,11 @@ export class Client { /** * Generates a Client instance from the provided ClientOptions and the contract's wasm hash. * The wasmHash can be provided in either hex or base64 format. - * - * @param wasmHash The hash of the contract's wasm binary, in either hex or base64 format. - * @param options The ClientOptions object containing the necessary configuration, including the rpcUrl. - * @param format The format of the provided wasmHash, either "hex" or "base64". Defaults to "hex". - * @returns A Promise that resolves to a Client instance. + * + * @param {Buffer | string} wasmHash The hash of the contract's wasm binary, in either hex or base64 format. + * @param {ClientOptions} options The ClientOptions object containing the necessary configuration, including the rpcUrl. + * @param {('hex' | 'base64')} [format='hex'] The format of the provided wasmHash, either "hex" or "base64". Defaults to "hex". + * @returns {Promise} A Promise that resolves to a Client instance. * @throws {TypeError} If the provided options object does not contain an rpcUrl. */ static async fromWasmHash(wasmHash: Buffer | string, @@ -76,10 +80,10 @@ export class Client { /** * Generates a Client instance from the provided ClientOptions and the contract's wasm binary. - * - * @param wasm The contract's wasm binary as a Buffer. - * @param options The ClientOptions object containing the necessary configuration. - * @returns A Promise that resolves to a Client instance. + * + * @param {Buffer} wasm The contract's wasm binary as a Buffer. + * @param {ClientOptions} options The ClientOptions object containing the necessary configuration. + * @returns {Promise} A Promise that resolves to a Client instance. * @throws {Error} If the contract spec cannot be obtained from the provided wasm binary. */ static async fromWasm(wasm: Buffer, options: ClientOptions): Promise { @@ -96,9 +100,9 @@ export class Client { /** * Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl. - * - * @param options The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl. - * @returns A Promise that resolves to a Client instance. + * + * @param {ClientOptions} options The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl. + * @returns {Promise} A Promise that resolves to a Client instance. * @throws {TypeError} If the provided options object does not contain both rpcUrl and contractId. */ static async from(options: ClientOptions): Promise { diff --git a/src/contract/rust_result.ts b/src/contract/rust_result.ts index b3c160851..1a9e736b8 100644 --- a/src/contract/rust_result.ts +++ b/src/contract/rust_result.ts @@ -6,10 +6,11 @@ * methods that return Results, to maintain their distinction from methods * that simply either return a value or throw. * - * **Why is this needed?** + * #### Why is this needed? * - * This is used by `ContractSpec` and `AssembledTransaction` when parsing - * values return by contracts. + * This is used by {@link module:contract.Spec | `ContractSpec`} and + * {@link module:contract.AssembledTransaction | `AssembledTransaction`} when + * parsing values return by contracts. * * Contract methods can be implemented to return simple values, in which case * they can also throw errors. This matches JavaScript's most idiomatic @@ -30,6 +31,8 @@ * In the future, if this feels too un-idiomatic for JavaScript, we can always * remove this and flatten all JS calls to `try...catch`. Easier to remove this * logic later than it would be to add it. + * + * @memberof module:contract */ export interface Result { unwrap(): T; @@ -40,18 +43,23 @@ export interface Result { /** * Error interface containing the error message. Matches Rust's implementation. - * Part of implementing {@link Result}, a minimal implementation of Rust's - * `Result` type. Used for contract methods that return Results, to maintain - * their distinction from methods that simply either return a value or throw. + * Part of implementing {@link module:contract.Result | Result}, a minimal + * implementation of Rust's `Result` type. Used for contract methods that return + * Results, to maintain their distinction from methods that simply either return + * a value or throw. + * + * @memberof module:contract */ export interface ErrorMessage { message: string; } /** - * Part of implementing {@link Result}, a minimal implementation of Rust's - * `Result` type. Used for contract methods that return Results, to maintain - * their distinction from methods that simply either return a value or throw. + * Part of implementing {@link module:contract.Result | Result}, a minimal + * implementation of Rust's `Result` type. Used for contract methods that return + * Results, to maintain their distinction from methods that simply either return + * a value or throw. + * @private */ export class Ok implements Result { constructor(readonly value: T) {} @@ -74,9 +82,11 @@ export class Ok implements Result { } /** - * Part of implementing {@link Result}, a minimal implementation of Rust's - * `Result` type. Used for contract methods that return Results, to maintain - * their distinction from methods that simply either return a value or throw. + * Part of implementing {@link module:contract.Result | Result}, a minimal + * implementation of Rust's `Result` type. Used for contract methods that return + * Results, to maintain their distinction from methods that simply either return + * a value or throw. + * @private */ export class Err implements Result { constructor(readonly error: E) {} diff --git a/src/contract/sent_transaction.ts b/src/contract/sent_transaction.ts index 0014fa393..f04d37ee5 100644 --- a/src/contract/sent_transaction.ts +++ b/src/contract/sent_transaction.ts @@ -1,7 +1,7 @@ /* disable max-classes rule, because extending error shouldn't count! */ /* eslint max-classes-per-file: 0 */ import type { MethodOptions } from "./types"; -import { Server } from "../rpc/server" +import { Server } from "../rpc" import { Api } from "../rpc/api" import { withExponentialBackoff } from "./utils"; import { DEFAULT_TIMEOUT } from "./types"; @@ -20,6 +20,12 @@ import type { AssembledTransaction } from "./assembled_transaction"; * {@link MethodOptions.timeoutInSeconds} seconds. See all attempts in * `getTransactionResponseAll` and the most recent attempt in * `getTransactionResponse`. + * + * @memberof module:contract + * @class + * + * @param {Function} signTransaction More info in {@link MethodOptions} + * @param {module:contract.AssembledTransaction} assembled {@link AssembledTransaction} from which this SentTransaction was initialized */ export class SentTransaction { public server: Server; @@ -60,7 +66,7 @@ export class SentTransaction { } /** - * Initialize a `SentTransaction` from `options` and a `signed` + * Initialize a `SentTransaction` from `options` and a `signed` * AssembledTransaction. This will also send the transaction to the network. */ static init = async ( diff --git a/src/contract/spec.ts b/src/contract/spec.ts index 863fbac1d..d3a17b1a7 100644 --- a/src/contract/spec.ts +++ b/src/contract/spec.ts @@ -167,6 +167,7 @@ const PRIMITIVE_DEFINITONS: { [key: string]: JSONSchema7Definition } = { /** * @param typeDef type to convert to json schema reference * @returns {JSONSchema7} a schema describing the type + * @private */ function typeRef(typeDef: xdr.ScSpecTypeDef): JSONSchema7 { const t = typeDef.switch(); @@ -439,8 +440,13 @@ function unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any { * Provides a ContractSpec class which can contains the XDR types defined by the contract. * This allows the class to be used to convert between native and raw `xdr.ScVal`s. * + * Constructs a new ContractSpec from an array of XDR spec entries. + * + * @memberof module:contract + * @param {xdr.ScSpecEntry[] | string[]} entries the XDR spec entries + * @throws {Error} if entries is invalid + * * @example - * ```js * const specEntries = [...]; // XDR spec entries of a smart contract * const contractSpec = new ContractSpec(specEntries); * @@ -458,18 +464,13 @@ function unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any { * const result = contractSpec.funcResToNative('funcName', resultScv); * * console.log(result); // {success: true} - * ``` */ export class Spec { - public entries: xdr.ScSpecEntry[] = []; - /** - * Constructs a new ContractSpec from an array of XDR spec entries. - * - * @param {xdr.ScSpecEntry[] | string[]} entries the XDR spec entries - * - * @throws {Error} if entries is invalid + * The XDR spec entries. */ + public entries: xdr.ScSpecEntry[] = []; + constructor(entries: xdr.ScSpecEntry[] | string[]) { if (entries.length === 0) { throw new Error("Contract spec must have at least one entry"); @@ -486,9 +487,7 @@ export class Spec { /** * Gets the XDR functions from the spec. - * * @returns {xdr.ScSpecFunctionV0[]} all contract functions - * */ funcs(): xdr.ScSpecFunctionV0[] { return this.entries @@ -528,13 +527,11 @@ export class Spec { * @throws {Error} if argument is missing or incorrect type * * @example - * ```js * const args = { * arg1: 'value1', * arg2: 1234 * }; * const scArgs = contractSpec.funcArgsToScVals('funcName', args); - * ``` */ funcArgsToScVals(name: string, args: object): xdr.ScVal[] { const fn = this.getFunc(name); @@ -553,10 +550,8 @@ export class Spec { * @throws {Error} if return type mismatch or invalid input * * @example - * ```js * const resultScv = 'AAA=='; // Base64 encoded ScVal * const result = contractSpec.funcResToNative('funcName', resultScv); - * ``` */ funcResToNative(name: string, val_or_base64: xdr.ScVal | string): any { const val = diff --git a/src/contract/types.ts b/src/contract/types.ts index b97231b55..754046839 100644 --- a/src/contract/types.ts +++ b/src/contract/types.ts @@ -1,17 +1,48 @@ /* disable PascalCase naming convention, to avoid breaking change */ /* eslint-disable @typescript-eslint/naming-convention */ -import { BASE_FEE, Memo, MemoType, Operation, Transaction, xdr } from "@stellar/stellar-base"; +import { Memo, MemoType, Operation, Transaction, xdr } from "@stellar/stellar-base"; import type { Client } from "./client"; -import type { AssembledTransaction } from "./assembled_transaction"; export type XDR_BASE64 = string; +/** + * An unsigned 32-bit integer. + * @memberof module:contract + */ export type u32 = number; +/** + * A signed 32-bit integer. + * @memberof module:contract + */ export type i32 = number; +/** + * An unsigned 64-bit integer. + * @memberof module:contract + */ export type u64 = bigint; +/** + * A signed 64-bit integer. + * @memberof module:contract + */ export type i64 = bigint; +/** + * An unsigned 128-bit integer. + * @memberof module:contract + */ export type u128 = bigint; +/** + * A signed 128-bit integer. + * @memberof module:contract + */ export type i128 = bigint; +/** + * An unsigned 256-bit integer. + * @memberof module:contract + */ export type u256 = bigint; +/** + * A signed 256-bit integer. + * @memberof module:contract + */ export type i256 = bigint; export type Option = T | undefined; export type Typepoint = bigint; @@ -19,15 +50,21 @@ export type Duration = bigint; /** * A "regular" transaction, as opposed to a FeeBumpTransaction. + * @memberof module:contract + * @type {Transaction, Operation[]>} */ export type Tx = Transaction, Operation[]>; +/** + * Options for a smart contract client. + * @memberof module:contract + */ export type ClientOptions = { /** * The public key of the account that will send this transaction. You can * override this for specific methods later, like - * {@link AssembledTransaction#signAndSend} and - * {@link AssembledTransaction#signAuthEntries}. + * [signAndSend]{@link module:contract.AssembledTransaction#signAndSend} and + * [signAuthEntries]{@link module:contract.AssembledTransaction#signAuthEntries}. */ publicKey?: string; /** @@ -36,7 +73,7 @@ export type ClientOptions = { * calls, which only need to be simulated. If you do not need to sign and * send, there is no need to provide this. If you do not provide it during * initialization, you can provide it later when you call - * {@link AssembledTransaction#signAndSend}. + * {@link module:contract.AssembledTransaction#signAndSend signAndSend}. * * Matches signature of `signTransaction` from Freighter. */ @@ -53,7 +90,7 @@ export type ClientOptions = { * private key corresponding to the provided `publicKey`. This is only needed * for multi-auth transactions, in which one transaction is signed by * multiple parties. If you do not provide it during initialization, you can - * provide it later when you call {@link AssembledTransaction#signAuthEntries}. + * provide it later when you call {@link module:contract.AssembledTransaction#signAuthEntries signAuthEntries}. * * Matches signature of `signAuthEntry` from Freighter. */ @@ -63,12 +100,22 @@ export type ClientOptions = { accountToSign?: string; }, ) => Promise; + /** The address of the contract the client will interact with. */ contractId: string; + /** + * The network passphrase for the Stellar network this contract is deployed + * to. + */ networkPassphrase: string; + /** + * The URL of the RPC instance that will be used to interact with this + * contract. + */ rpcUrl: string; /** * If true, will allow HTTP requests to the Soroban network. If false, will - * only allow HTTPS requests. @default false + * only allow HTTPS requests. + * @default false */ allowHttp?: boolean; /** @@ -80,38 +127,46 @@ export type ClientOptions = { * on-chain XDR that also describes your contract's methods. Each error will * have a specific number. * - * A Client makes method calls with an {@link AssembledTransaction}. + * A Client makes method calls with an {@link module:contract.AssembledTransaction AssembledTransaction}. * When one of these method calls encounters an error, `AssembledTransaction` * will first attempt to parse the error as an "official" `contracterror` * error, by using this passed-in `errorTypes` object. See - * {@link AssembledTransaction#parseError}. If `errorTypes` is blank or no + * {@link module:contract.AssembledTransaction#parseError parseError}. If `errorTypes` is blank or no * matching error is found, then it will throw the raw error. * @default {} */ errorTypes?: Record; }; +/** + * Options for a smart contract method invocation. + * @memberof module:contract + */ export type MethodOptions = { /** - * The fee to pay for the transaction. Default: {@link BASE_FEE} + * The fee to pay for the transaction. + * @default 100 */ fee?: string; /** - * The maximum amount of time to wait for the transaction to complete. - * Default: {@link DEFAULT_TIMEOUT} + * The timebounds which should be set for transactions generated by this + * contract client. {@link module:contract#.DEFAULT_TIMEOUT} + * @default 300 */ timeoutInSeconds?: number; /** * Whether to automatically simulate the transaction when constructing the - * AssembledTransaction. Default: true + * AssembledTransaction. + * @default true */ simulate?: boolean; /** - * If true, will automatically attempt to restore the transaction if there - * are archived entries that need renewal. @default false + * If true, will automatically attempt to restore the transaction if there + * are archived entries that need renewal. + * @default false */ restore?: boolean; }; @@ -122,9 +177,22 @@ export type AssembledTransactionOptions = MethodOptions & args?: any[]; parseResultXdr: (xdr: xdr.ScVal) => T; }; - + /** - * The default timeout for waiting for a transaction to be included in a block. + * The default timebounds, in seconds, during which a transaction will be valid. + * This is attached to the transaction _before_ transaction simulation (it is + * needed for simulation to succeed). It is also re-calculated and re-added + * _before_ transaction signing. + * @constant {number} + * @default 300 + * @memberof module:contract */ export const DEFAULT_TIMEOUT = 5 * 60; + +/** + * An impossible account on the Stellar network + * @constant {string} + * @default GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF + * @memberof module:contract + */ export const NULL_ACCOUNT = "GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF"; diff --git a/src/contract/utils.ts b/src/contract/utils.ts index b3a131cb7..44b79c280 100644 --- a/src/contract/utils.ts +++ b/src/contract/utils.ts @@ -1,11 +1,12 @@ import { xdr, cereal, Account } from "@stellar/stellar-base"; -import { Server } from "../rpc/server"; +import { Server } from "../rpc"; import { type AssembledTransaction } from "./assembled_transaction"; import { NULL_ACCOUNT , AssembledTransactionOptions } from "./types"; /** * Keep calling a `fn` for `timeoutInSeconds` seconds, if `keepWaitingIf` is * true. Returns an array of all attempts to call the function. + * @private */ export async function withExponentialBackoff( /** Function to call repeatedly */ @@ -79,11 +80,16 @@ export async function withExponentialBackoff( * methods. Each error will have a specific number. This Regular Expression * matches these "expected error types" that a contract may throw, and helps * {@link AssembledTransaction} parse these errors. + * + * @constant {RegExp} + * @default "/Error\(Contract, #(\d+)\)/" + * @memberof module:contract.Client */ export const contractErrorPattern = /Error\(Contract, #(\d+)\)/; /** * A TypeScript type guard that checks if an object has a `toString` method. + * @private */ export function implementsToString( /** some object that may or may not have a `toString` method */ @@ -94,12 +100,13 @@ export function implementsToString( /** * Reads a binary stream of ScSpecEntries into an array for processing by ContractSpec + * @private */ export function processSpecEntryStream(buffer: Buffer) { const reader = new cereal.XdrReader(buffer); const res: xdr.ScSpecEntry[] = []; while (!reader.eof) { - // @ts-ignore + // @ts-ignore res.push(xdr.ScSpecEntry.read(reader)); } return res; diff --git a/src/errors.ts b/src/errors.ts deleted file mode 100644 index 21f877aff..000000000 --- a/src/errors.ts +++ /dev/null @@ -1,104 +0,0 @@ -/* eslint-disable max-classes-per-file */ -import { HorizonApi } from "./horizon/horizon_api"; - -// For ES5 compatibility (https://stackoverflow.com/a/55066280). -/* tslint:disable:variable-name max-classes-per-file */ -/* eslint-disable no-proto */ - -export class NetworkError extends Error { - public response: { - data?: HorizonApi.ErrorResponseData; - status?: number; - statusText?: string; - url?: string; - }; - - public __proto__: NetworkError; - - constructor(message: string, response: any) { - const trueProto = new.target.prototype; - super(message); - this.__proto__ = trueProto; - this.constructor = NetworkError; - this.response = response; - } - - public getResponse() { - return this.response; - } -} - -export class NotFoundError extends NetworkError { - constructor(message: string, response: any) { - const trueProto = new.target.prototype; - super(message, response); - this.__proto__ = trueProto; - this.constructor = NotFoundError; - this.name = "NotFoundError"; - } -} - -export class BadRequestError extends NetworkError { - constructor(message: string, response: any) { - const trueProto = new.target.prototype; - super(message, response); - this.__proto__ = trueProto; - this.constructor = BadRequestError; - this.name = "BadRequestError"; - } -} - -export class BadResponseError extends NetworkError { - constructor(message: string, response: any) { - const trueProto = new.target.prototype; - super(message, response); - this.__proto__ = trueProto; - this.constructor = BadResponseError; - this.name = "BadResponseError"; - } -} - -/** - * AccountRequiresMemoError is raised when a transaction is trying to submit an - * operation to an account which requires a memo. See - * [SEP0029](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0029.md) - * for more information. - * - * This error contains two attributes to help you identify the account requiring - * the memo and the operation where the account is the destination - * - * ``` - * console.log('The following account requires a memo ', err.accountId) - * console.log('The account is used in operation: ', err.operationIndex) - * ``` - * - */ -export class AccountRequiresMemoError extends Error { - public __proto__: AccountRequiresMemoError; - - /** - * accountId account which requires a memo. - */ - public accountId: string; - - /** - * operationIndex operation where accountId is the destination. - */ - public operationIndex: number; - - /** - * Create an AccountRequiresMemoError - * @param {message} message - error message - * @param {string} accountId - The account which requires a memo. - * @param {number} operationIndex - The index of the operation where `accountId` is the destination. - */ - constructor(message: string, accountId: string, operationIndex: number) { - const trueProto = new.target.prototype; - super(message); - this.__proto__ = trueProto; - this.constructor = AccountRequiresMemoError; - this.name = "AccountRequiresMemoError"; - this.accountId = accountId; - this.operationIndex = operationIndex; - } -} diff --git a/src/errors/account_requires_memo.ts b/src/errors/account_requires_memo.ts new file mode 100644 index 000000000..a9840550c --- /dev/null +++ b/src/errors/account_requires_memo.ts @@ -0,0 +1,42 @@ +/** + * AccountRequiresMemoError is raised when a transaction is trying to submit an + * operation to an account which requires a memo. See + * [SEP0029](https://github.com/stellar/stellar-protocol/blob/master/ecosystem/sep-0029.md) + * for more information. + * + * This error contains two attributes to help you identify the account requiring + * the memo and the operation where the account is the destination + * @category Errors + * + * @param {string} message Human-readable error message + * @param {string} accountId The account which requires a memo + * @param {number} operationIndex The index of the operation where `accountId` is the destination + * + * @example + * console.log('The following account requires a memo ', err.accountId) + * console.log('The account is used in operation: ', err.operationIndex) + */ +export class AccountRequiresMemoError extends Error { + public __proto__: AccountRequiresMemoError; + public accountId: string; + public operationIndex: number; + + constructor(message: string, accountId: string, operationIndex: number) { + const trueProto = new.target.prototype; + super(message); + this.__proto__ = trueProto; + this.constructor = AccountRequiresMemoError; + this.name = "AccountRequiresMemoError"; + + /** + * The account which requires a memo. + * @type {string} + */ + this.accountId = accountId; + /** + * Operation where accountId is the destination. + * @type {number} + */ + this.operationIndex = operationIndex; + } +} diff --git a/src/errors/bad_request.ts b/src/errors/bad_request.ts new file mode 100644 index 000000000..4ecc8a337 --- /dev/null +++ b/src/errors/bad_request.ts @@ -0,0 +1,21 @@ +import { NetworkError } from "./network"; + +/** + * BadRequestError is raised when a request made to Horizon is invalid in some + * way (incorrect timebounds for trade call builders, for example.) + * @augments NetworkError + * @inheritdoc + * @category Errors + * + * @param {string} message Human-readable error message + * @param {any} response Response details, received from the Horizon server + */ +export class BadRequestError extends NetworkError { + constructor(message: string, response: any) { + const trueProto = new.target.prototype; + super(message, response); + this.__proto__ = trueProto; + this.constructor = BadRequestError; + this.name = "BadRequestError"; + } +} diff --git a/src/errors/bad_response.ts b/src/errors/bad_response.ts new file mode 100644 index 000000000..758698105 --- /dev/null +++ b/src/errors/bad_response.ts @@ -0,0 +1,24 @@ +import { NetworkError } from "./network"; + +/** + * BadResponseError is raised when a response from a + * {@link module:Horizon | Horizon} or {@link module:Federation | Federation} + * server is invalid in some way. For example, a federation response may exceed + * the maximum allowed size, or a transaction submission may have failed with + * Horizon. + * @augments NetworkError + * @inheritdoc + * @category Errors + * + * @param {string} message Human-readable error message. + * @param {any} response Response details, received from the server. + */ +export class BadResponseError extends NetworkError { + constructor(message: string, response: any) { + const trueProto = new.target.prototype; + super(message, response); + this.__proto__ = trueProto; + this.constructor = BadResponseError; + this.name = "BadResponseError"; + } +} diff --git a/src/errors/index.ts b/src/errors/index.ts new file mode 100644 index 000000000..cb4f19458 --- /dev/null +++ b/src/errors/index.ts @@ -0,0 +1,5 @@ +export * from "./network"; +export * from "./not_found"; +export * from "./bad_request"; +export * from "./bad_response"; +export * from "./account_requires_memo"; diff --git a/src/errors/network.ts b/src/errors/network.ts new file mode 100644 index 000000000..81a10446b --- /dev/null +++ b/src/errors/network.ts @@ -0,0 +1,50 @@ +import { HorizonApi } from "../horizon/horizon_api"; + +// For ES5 compatibility (https://stackoverflow.com/a/55066280). + +/** + * NetworkError is raised when an interaction with a Horizon server has caused + * some kind of problem. + * @category Errors + * + * @param {string} message Human-readable error message + * @param {any} response Response details, received from the Horizon server. + * @param {HorizonApi.ErrorResponseData} [response.data] The data returned by Horizon as part of the error: {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/response | Error Response} + * @param {number} [response.status] HTTP status code describing the basic issue with a submitted transaction {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/http-status-codes/standard | Standard Status Codes} + * @param {string} [response.statusText] A human-readable description of what the status code means: {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/http-status-codes/horizon-specific | Horizon-Specific Status Codes} + * @param {string} [response.url] URL which can provide more information about the problem that occurred. + */ +export class NetworkError extends Error { + public response: { + data?: HorizonApi.ErrorResponseData; + status?: number; + statusText?: string; + url?: string; + }; + public __proto__: NetworkError; + + constructor(message: string, response: any) { + const trueProto = new.target.prototype; + super(message); + this.__proto__ = trueProto; + this.constructor = NetworkError; + /** + * The response sent by the Horizon server. + * @type {object} Response details, received from the Horizon server + * @property {HorizonApi.ErrorResponseData} [response.data] The data returned by Horizon as part of the error: {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/response | Error Response} + * @property {number} [response.status] HTTP status code describing the basic issue with a submitted transaction {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/http-status-codes/standard | Standard Status Codes} + * @property {string} [response.statusText] A human-readable description of what the status code means: {@link https://developers.stellar.org/docs/data/horizon/api-reference/errors/http-status-codes/horizon-specific | Horizon-Specific Status Codes} + * @property {string} [response.url] URL which can provide more information about the problem that occurred. + */ + this.response = response; + } + + /** + * Returns the error response sent by the Horizon server. + * @returns {any} + */ + public getResponse() { + return this.response; + } +} + diff --git a/src/errors/not_found.ts b/src/errors/not_found.ts new file mode 100644 index 000000000..2e7279691 --- /dev/null +++ b/src/errors/not_found.ts @@ -0,0 +1,21 @@ +import { NetworkError } from "./network"; + +/** + * NotFoundError is raised when the resource requested from Horizon is + * unavailable. + * @augments NetworkError + * @inheritdoc + * @category Errors + * + * @param {string} message Human-readable error message + * @param {any} response Response details, received from the Horizon server + */ +export class NotFoundError extends NetworkError { + constructor(message: string, response: any) { + const trueProto = new.target.prototype; + super(message, response); + this.__proto__ = trueProto; + this.constructor = NotFoundError; + this.name = "NotFoundError"; + } +} diff --git a/src/federation/api.ts b/src/federation/api.ts index 65c3e98c3..9f43c7880 100644 --- a/src/federation/api.ts +++ b/src/federation/api.ts @@ -1,13 +1,33 @@ -/* tslint:disable-next-line:no-namespace */ export namespace Api { - export interface Record { - account_id: string; - memo_type?: string; - memo?: string; - } +/** + * Record returned from a federation server. + */ +export interface Record { + /** + * The Stellar public key resolved from the federation lookup + */ + account_id: string; + /** + * The type of memo, if any, required to send payments to this user + */ + memo_type?: string; + /** + * The memo value, if any, required to send payments to this user + */ + memo?: string; +} - export interface Options { - allowHttp?: boolean; - timeout?: number; - } - } +/** + * Options for configuring connections to federation servers. You can also use {@link Config} class to set this globally. + */ +export interface Options { + /** + * Allow connecting to http servers, default: `false`. This must be set to false in production deployments! + */ + allowHttp?: boolean; + /** + * Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. + */ + timeout?: number; +} +} diff --git a/src/federation/index.ts b/src/federation/index.ts index b7c92ee06..4eaff4f80 100644 --- a/src/federation/index.ts +++ b/src/federation/index.ts @@ -1,2 +1,2 @@ export { FederationServer as Server, FEDERATION_RESPONSE_MAX_SIZE } from './server'; -export * as Api from './api'; \ No newline at end of file +export * from './api'; diff --git a/src/federation/server.ts b/src/federation/server.ts index e54aa4fb2..b20c9fe40 100644 --- a/src/federation/server.ts +++ b/src/federation/server.ts @@ -9,42 +9,39 @@ import { Resolver } from "../stellartoml"; import { Api } from "./api"; import { httpClient } from "../http-client"; -// FEDERATION_RESPONSE_MAX_SIZE is the maximum size of response from a federation server -export const FEDERATION_RESPONSE_MAX_SIZE = 100 * 1024; +/** @module Federation */ /** - * FederationServer handles a network connection to a - * [federation server](https://developers.stellar.org/docs/glossary/federation/) + * The maximum size of response from a federation server + * @default 102400 + */ +export const FEDERATION_RESPONSE_MAX_SIZE: number = 100 * 1024; + +/** + * Federation.Server handles a network connection to a + * [federation server](https://developers.stellar.org/docs/learn/encyclopedia/federation) * instance and exposes an interface for requests to that instance. - * @class + * + * @alias module:Federation.Server + * @memberof module:Federation * @param {string} serverURL The federation server URL (ex. `https://acme.com/federation`). * @param {string} domain Domain this server represents - * @param {object} [opts] options object - * @param {boolean} [opts.allowHttp] - Allow connecting to http servers, default: `false`. This must be set to false in production deployments! You can also use {@link Config} class to set this globally. - * @param {number} [opts.timeout] - Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. You can also use {@link Config} class to set this globally. + * @param {Api.Options} [opts] Options object * @returns {void} */ export class FederationServer { /** * The federation server URL (ex. `https://acme.com/federation`). - * - * @memberof FederationServer */ private readonly serverURL: URI; // TODO: public or private? readonly? /** * Domain this server represents. - * - * @type {string} - * @memberof FederationServer */ private readonly domain: string; // TODO: public or private? readonly? /** * Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. - * - * @type {number} - * @memberof FederationServer */ private readonly timeout: number; // TODO: public or private? readonly? @@ -59,8 +56,7 @@ export class FederationServer { * resolves if Account ID is valid and rejects in all other cases. Please note that this method does not check * if the account actually exists in a ledger. * - * Example: - * ```js + * @example * StellarSdk.FederationServer.resolve('bob*stellar.org') * .then(federationRecord => { * // { @@ -69,18 +65,13 @@ export class FederationServer { * // memo: 100 * // } * }); - * ``` * - * @see Federation doc - * @see Stellar.toml doc + * @see Federation doc + * @see Stellar.toml doc * @param {string} value Stellar Address (ex. `bob*stellar.org`) * @param {object} [opts] Options object - * @param {boolean} [opts.allowHttp] - Allow connecting to http servers, default: `false`. This must be set to false in production deployments! - * @param {number} [opts.timeout] - Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. - * @returns {Promise} `Promise` that resolves to a JSON object with this shape: - * * `account_id` - Account ID of the destination, - * * `memo_type` (optional) - Memo type that needs to be attached to a transaction, - * * `memo` (optional) - Memo value that needs to be attached to a transaction. + * @returns {Promise} A promise that resolves to the federation record + * @throws Will throw an error if the provided account ID is not a valid Ed25519 public key. */ public static async resolve( value: string, @@ -109,12 +100,13 @@ export class FederationServer { /** * Creates a `FederationServer` instance based on information from - * [stellar.toml](https://developers.stellar.org/docs/issuing-assets/publishing-asset-info/) + * [stellar.toml](https://developers.stellar.org/docs/issuing-assets/publishing-asset-info) * file for a given domain. * * If `stellar.toml` file does not exist for a given domain or it does not * contain information about a federation server Promise will reject. - * ```js + * + * @example * StellarSdk.FederationServer.createForDomain('acme.com') * .then(federationServer => { * // federationServer.resolveAddress('bob').then(...) @@ -122,13 +114,12 @@ export class FederationServer { * .catch(error => { * // stellar.toml does not exist or it does not contain information about federation server. * }); - * ``` - * @see Stellar.toml doc + * + * @see Stellar.toml doc * @param {string} domain Domain to get federation server for - * @param {object} [opts] Options object - * @param {boolean} [opts.allowHttp] - Allow connecting to http servers, default: `false`. This must be set to false in production deployments! - * @param {number} [opts.timeout] - Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. - * @returns {Promise} `Promise` that resolves to a FederationServer object + * @param {module:Federation.Api.Options} [opts] Options object + * @returns {Promise} A promise that resolves to the federation record + * @throws Will throw an error if the domain's stellar.toml file does not contain a federation server field. */ public static async createForDomain( domain: string, @@ -167,9 +158,10 @@ export class FederationServer { /** * Get the federation record if the user was found for a given Stellar address - * @see Federation doc + * @see Federation doc * @param {string} address Stellar address (ex. `bob*stellar.org`). If `FederationServer` was instantiated with `domain` param only username (ex. `bob`) can be passed. - * @returns {Promise} Promise that resolves to the federation record + * @returns {Promise} A promise that resolves to the federation record + * @throws Will throw an error if the federated address does not contain a domain, or if the server object was not instantiated with a `domain` parameter */ public async resolveAddress( address: string, @@ -191,9 +183,12 @@ export class FederationServer { /** * Given an account ID, get their federation record if the user was found - * @see Federation doc + * @see Federation doc * @param {string} accountId Account ID (ex. `GBYNR2QJXLBCBTRN44MRORCMI4YO7FZPFBCNOKTOBCAAFC7KC3LNPRYS`) - * @returns {Promise} A promise that resolves to the federation record + * @returns {Promise} A promise that resolves to the federation record + * @throws Will throw an error if the federation server returns an invalid memo value. + * @throws Will throw an error if the federation server's response exceeds the allowed maximum size. + * @throws {BadResponseError} Will throw an error if the server query fails with an improper response. */ public async resolveAccountId( accountId: string, @@ -206,7 +201,10 @@ export class FederationServer { * Given a transactionId, get the federation record if the sender of the transaction was found * @see Federation doc * @param {string} transactionId Transaction ID (ex. `3389e9f0f1a65f19736cacf544c2e825313e8447f569233bb8db39aa607c8889`) - * @returns {Promise} A promise that resolves to the federation record + * @returns {Promise} A promise that resolves to the federation record + * @throws Will throw an error if the federation server returns an invalid memo value. + * @throws Will throw an error if the federation server's response exceeds the allowed maximum size. + * @throws {BadResponseError} Will throw an error if the server query fails with an improper response. */ public async resolveTransactionId( transactionId: string, diff --git a/src/horizon/account_call_builder.ts b/src/horizon/account_call_builder.ts index 58b876c1a..f012c9b34 100644 --- a/src/horizon/account_call_builder.ts +++ b/src/horizon/account_call_builder.ts @@ -3,12 +3,14 @@ import { CallBuilder } from "./call_builder"; import { ServerApi } from "./server_api"; /** - * Creates a new {@link AccountCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#accounts}. + * Creates a new {@link AccountCallBuilder} pointed to server defined by `serverUrl`. + * + * Do not create this object directly, use {@link Horizon.Server#accounts}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-accounts|All Accounts} * - * @see [All Accounts](https://developers.stellar.org/api/resources/accounts/) - * @class AccountCallBuilder * @augments CallBuilder + * @private * @class * @param {string} serverUrl Horizon server URL. */ @@ -24,7 +26,7 @@ export class AccountCallBuilder extends CallBuilder< * Returns information and links relating to a single account. * The balances section in the returned JSON will also list all the trust lines this account has set up. * - * @see [Account Details](https://developers.stellar.org/api/resources/accounts/single/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-an-account|Account Details} * @param {string} id For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {CallBuilder} a new CallBuilder instance for the /accounts/:id endpoint */ @@ -36,7 +38,7 @@ export class AccountCallBuilder extends CallBuilder< /** * This endpoint filters accounts by signer account. - * @see [Accounts](https://developers.stellar.org/api/resources/accounts/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-accounts|Accounts} * @param {string} id For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {AccountCallBuilder} current AccountCallBuilder instance */ @@ -47,7 +49,7 @@ export class AccountCallBuilder extends CallBuilder< /** * This endpoint filters all accounts who are trustees to an asset. - * @see [Accounts](https://developers.stellar.org/api/resources/accounts/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-accounts|Accounts} * @see Asset * @param {Asset} asset For example: `new Asset('USD','GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD')` * @returns {AccountCallBuilder} current AccountCallBuilder instance @@ -59,7 +61,7 @@ export class AccountCallBuilder extends CallBuilder< /** * This endpoint filters accounts where the given account is sponsoring the account or any of its sub-entries.. - * @see [Accounts](https://developers.stellar.org/api/resources/accounts/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-accounts|Accounts} * @param {string} id For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {AccountCallBuilder} current AccountCallBuilder instance */ diff --git a/src/horizon/account_response.ts b/src/horizon/account_response.ts index def7ecccb..d26ca788e 100644 --- a/src/horizon/account_response.ts +++ b/src/horizon/account_response.ts @@ -6,13 +6,16 @@ import { HorizonApi } from "./horizon_api"; import { ServerApi } from "./server_api"; /** - * Do not create this object directly, use {@link Server#loadAccount}. + * Do not create this object directly, use {@link module:Horizon.Server#loadAccount | Horizon.Server#loadAccount}. * * Returns information and links relating to a single account. * The balances section in the returned JSON will also list all the trust lines this account has set up. * It also contains {@link BaseAccount} object and exposes it's methods so can be used in {@link TransactionBuilder}. * - * @see [Account Details](https://developers.stellar.org/api/resources/accounts/object/) + * @memberof module:Horizon + * @private + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/accounts/object|Account Details} * @param {string} response Response from horizon account endpoint. * @returns {AccountResponse} AccountResponse instance */ diff --git a/src/horizon/assets_call_builder.ts b/src/horizon/assets_call_builder.ts index 591bf7a37..587fbb39d 100644 --- a/src/horizon/assets_call_builder.ts +++ b/src/horizon/assets_call_builder.ts @@ -4,10 +4,11 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link AssetsCallBuilder} pointed to server defined by serverUrl. * - * Do not create this object directly, use {@link Server#assets}. - * @class AssetsCallBuilder + * Do not create this object directly, use {@link Horizon.Server#assets}. + * * @class * @augments CallBuilder + * @private * @param {string} serverUrl Horizon server URL. */ export class AssetsCallBuilder extends CallBuilder< diff --git a/src/horizon/call_builder.ts b/src/horizon/call_builder.ts index e7fba4495..49bdec810 100644 --- a/src/horizon/call_builder.ts +++ b/src/horizon/call_builder.ts @@ -6,7 +6,6 @@ import { BadRequestError, NetworkError, NotFoundError } from "../errors"; import { HorizonApi } from "./horizon_api"; import { AxiosClient, version } from "./horizon_axios_client"; import { ServerApi } from "./server_api"; -import type { Server } from "../federation"; // Resources which can be included in the Horizon response via the `join` // query-param. @@ -30,9 +29,12 @@ const EventSource: Constructable = anyGlobal.EventSource ?? /** * Creates a new {@link CallBuilder} pointed to server defined by serverUrl. * - * This is an **abstract** class. Do not create this object directly, use {@link Server} class. + * This is an **abstract** class. Do not create this object directly, use {@link module:Horizon.Server | Horizon.Server} class. + * + * @private + * @class + * * @param {string} serverUrl URL of Horizon server - * @class CallBuilder */ export class CallBuilder< T extends @@ -85,8 +87,8 @@ export class CallBuilder< /** * Creates an EventSource that listens for incoming messages from the server. To stop listening for new * events call the function returned by this method. - * @see [Horizon Response Format](https://developers.stellar.org/api/introduction/response-format/) - * @see [MDN EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/structure/response-format|Horizon Response Format} + * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/EventSource|MDN EventSource} * @param {object} [options] EventSource options. * @param {Function} [options.onmessage] Callback function to handle incoming messages. * @param {Function} [options.onerror] Callback function to handle errors. @@ -192,7 +194,7 @@ export class CallBuilder< /** * Sets `cursor` parameter for the current call. Returns the CallBuilder object on which this method has been called. - * @see [Paging](https://developers.stellar.org/api/introduction/pagination/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/structure/pagination|Paging} * @param {string} cursor A cursor is a value that points to a specific location in a collection of resources. * @returns {object} current CallBuilder instance */ @@ -203,7 +205,7 @@ export class CallBuilder< /** * Sets `limit` parameter for the current call. Returns the CallBuilder object on which this method has been called. - * @see [Paging](https://developers.stellar.org/api/introduction/pagination/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/structure/pagination|Paging} * @param {number} recordsNumber Number of records the server should return. * @returns {object} current CallBuilder instance */ diff --git a/src/horizon/claimable_balances_call_builder.ts b/src/horizon/claimable_balances_call_builder.ts index 3d94fd390..480badb45 100644 --- a/src/horizon/claimable_balances_call_builder.ts +++ b/src/horizon/claimable_balances_call_builder.ts @@ -4,12 +4,14 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link ClaimableBalanceCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#claimableBalances}. * - * @see [Claimable Balances](https://developers.stellar.org/api/resources/claimablebalances/) - * @class ClaimableBalanceCallBuilder - * @class + * Do not create this object directly, use {@link Horizon.Server#claimableBalances}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/claimablebalances|Claimable Balances} + * * @augments CallBuilder + * @private + * @class * @param {string} serverUrl Horizon server URL. */ export class ClaimableBalanceCallBuilder extends CallBuilder< @@ -23,7 +25,7 @@ export class ClaimableBalanceCallBuilder extends CallBuilder< /** * The claimable balance details endpoint provides information on a single claimable balance. * - * @see [Claimable Balance Details](https://developers.stellar.org/api/resources/claimablebalances/single/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-claimable-balance|Claimable Balance Details} * @param {string} claimableBalanceId Claimable balance ID * @returns {CallBuilder} CallBuilder OperationCallBuilder instance */ @@ -40,7 +42,7 @@ export class ClaimableBalanceCallBuilder extends CallBuilder< /** * Returns all claimable balances which are sponsored by the given account ID. * - * @see [Claimable Balances](https://developers.stellar.org/api/resources/claimablebalances/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-claimable-balances|Claimable Balances} * @param {string} sponsor For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {ClaimableBalanceCallBuilder} current ClaimableBalanceCallBuilder instance */ @@ -52,7 +54,7 @@ export class ClaimableBalanceCallBuilder extends CallBuilder< /** * Returns all claimable balances which can be claimed by the given account ID. * - * @see [Claimable Balances](https://developers.stellar.org/api/resources/claimablebalances/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-claimable-balances|Claimable Balances} * @param {string} claimant For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {ClaimableBalanceCallBuilder} current ClaimableBalanceCallBuilder instance */ @@ -64,7 +66,7 @@ export class ClaimableBalanceCallBuilder extends CallBuilder< /** * Returns all claimable balances which provide a balance for the given asset. * - * @see [Claimable Balances](https://developers.stellar.org/api/resources/claimablebalances/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-claimable-balances|Claimable Balances} * @param {Asset} asset The Asset held by the claimable balance * @returns {ClaimableBalanceCallBuilder} current ClaimableBalanceCallBuilder instance */ diff --git a/src/horizon/effect_call_builder.ts b/src/horizon/effect_call_builder.ts index 01ebaad71..ebaf48afe 100644 --- a/src/horizon/effect_call_builder.ts +++ b/src/horizon/effect_call_builder.ts @@ -3,11 +3,12 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link EffectCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#effects}. + * Do not create this object directly, use {@link Horizon.Server#effects}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/effects|All Effects} * - * @class EffectCallBuilder * @augments CallBuilder - * @see [All Effects](https://developers.stellar.org/api/resources/effects/) + * @private * @class * @param {string} serverUrl Horizon server URL. */ @@ -21,7 +22,7 @@ export class EffectCallBuilder extends CallBuilder< /** * This endpoint represents all effects that changed a given account. It will return relevant effects from the creation of the account to the current ledger. - * @see [Effects for Account](https://developers.stellar.org/api/resources/accounts/effects/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-effects-by-account-id|Effects for Account} * @param {string} accountId For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {EffectCallBuilder} this EffectCallBuilder instance */ @@ -33,7 +34,7 @@ export class EffectCallBuilder extends CallBuilder< * Effects are the specific ways that the ledger was changed by any operation. * * This endpoint represents all effects that occurred in the given ledger. - * @see [Effects for Ledger](https://developers.stellar.org/api/resources/ledgers/effects/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-ledgers-effects|Effects for Ledger} * @param {number|string} sequence Ledger sequence * @returns {EffectCallBuilder} this EffectCallBuilder instance */ @@ -43,7 +44,7 @@ export class EffectCallBuilder extends CallBuilder< /** * This endpoint represents all effects that occurred as a result of a given transaction. - * @see [Effects for Transaction](https://developers.stellar.org/api/resources/transactions/effects/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-transactions-effects|Effects for Transaction} * @param {string} transactionId Transaction ID * @returns {EffectCallBuilder} this EffectCallBuilder instance */ @@ -53,7 +54,7 @@ export class EffectCallBuilder extends CallBuilder< /** * This endpoint represents all effects that occurred as a result of a given operation. - * @see [Effects for Operation](https://developers.stellar.org/api/resources/operations/effects/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-an-operations-effects|Effects for Operation} * @param {number} operationId Operation ID * @returns {EffectCallBuilder} this EffectCallBuilder instance */ diff --git a/src/horizon/horizon_axios_client.ts b/src/horizon/horizon_axios_client.ts index f0d8d004b..3d7bdae22 100644 --- a/src/horizon/horizon_axios_client.ts +++ b/src/horizon/horizon_axios_client.ts @@ -18,10 +18,15 @@ export interface ServerTime { * each entry will map the server domain to the last-known time and the local * time it was recorded, ex: * - * "horizon-testnet.stellar.org": { - * serverTime: 1552513039, - * localTimeRecorded: 1552513052 - * } + * @example + * "horizon-testnet.stellar.org": { + * serverTime: 1552513039, + * localTimeRecorded: 1552513052 + * } + * + * @constant {Record.} + * @default {} + * @memberof module:Horizon */ export const SERVER_TIME_MAP: Record = {}; @@ -69,6 +74,8 @@ export default AxiosClient; * Given a hostname, get the current time of that server (i.e., use the last- * recorded server time and offset it by the time since then.) If there IS no * recorded server time, or it's been 5 minutes since the last, return null. + * @memberof module:Horizon + * * @param {string} hostname Hostname of a Horizon server. * @returns {number} The UNIX timestamp (in seconds, not milliseconds) * representing the current time on that server, or `null` if we don't have diff --git a/src/horizon/index.ts b/src/horizon/index.ts index 2a690dda7..6d425ace6 100644 --- a/src/horizon/index.ts +++ b/src/horizon/index.ts @@ -1,3 +1,5 @@ +/** @module Horizon */ + // Expose all types export * from "./horizon_api"; export * from "./server_api"; @@ -5,11 +7,11 @@ export * from "./server_api"; // stellar-sdk classes to expose export * from "./account_response"; -export { Server } from "./server"; +export { HorizonServer as Server } from "./server"; export { default as AxiosClient, SERVER_TIME_MAP, getCurrentServerTime } from "./horizon_axios_client"; -export default module.exports; \ No newline at end of file +export default module.exports; diff --git a/src/horizon/ledger_call_builder.ts b/src/horizon/ledger_call_builder.ts index 43ef4aa53..3422277a7 100644 --- a/src/horizon/ledger_call_builder.ts +++ b/src/horizon/ledger_call_builder.ts @@ -3,12 +3,14 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link LedgerCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#ledgers}. * - * @see [All Ledgers](https://developers.stellar.org/api/resources/ledgers/list/) - * @class - * @class LedgerCallBuilder + * Do not create this object directly, use {@link Horizon.Server#ledgers}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-ledgers|All Ledgers} + * * @augments CallBuilder + * @private + * @class * @param {string} serverUrl Horizon server URL. */ export class LedgerCallBuilder extends CallBuilder< diff --git a/src/horizon/liquidity_pool_call_builder.ts b/src/horizon/liquidity_pool_call_builder.ts index 25798988e..39e29c26f 100644 --- a/src/horizon/liquidity_pool_call_builder.ts +++ b/src/horizon/liquidity_pool_call_builder.ts @@ -5,10 +5,11 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link LiquidityPoolCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#liquidityPools}. * - * @class LiquidityPoolCallBuilder + * Do not create this object directly, use {@link Horizon.Server#liquidityPools}. + * * @augments CallBuilder + * @private * @class * @param {string} serverUrl Horizon server URL. */ diff --git a/src/horizon/offer_call_builder.ts b/src/horizon/offer_call_builder.ts index beeb5520f..c5d5c907e 100644 --- a/src/horizon/offer_call_builder.ts +++ b/src/horizon/offer_call_builder.ts @@ -4,12 +4,14 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link OfferCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#offers}. * - * @see [Offers](https://developers.stellar.org/api/resources/offers/) - * @class OfferCallBuilder - * @class + * Do not create this object directly, use {@link Horizon.Server#offers}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/offers/|Offers} + * * @augments CallBuilder + * @private + * @class * @param {string} serverUrl Horizon server URL. */ export class OfferCallBuilder extends CallBuilder< @@ -23,7 +25,7 @@ export class OfferCallBuilder extends CallBuilder< /** * The offer details endpoint provides information on a single offer. The offer ID provided in the id * argument specifies which offer to load. - * @see [Offer Details](https://developers.stellar.org/api/resources/offers/single/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/offers/single/|Offer Details} * @param {string} offerId Offer ID * @returns {CallBuilder} CallBuilder OperationCallBuilder instance */ @@ -36,7 +38,7 @@ export class OfferCallBuilder extends CallBuilder< /** * Returns all offers where the given account is involved. * - * @see [Offers](https://developers.stellar.org/api/resources/accounts/offers/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/accounts/offers/|Offers} * @param {string} id For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {OfferCallBuilder} current OfferCallBuilder instance */ @@ -46,7 +48,7 @@ export class OfferCallBuilder extends CallBuilder< /** * Returns all offers buying an asset. - * @see [Offers](https://developers.stellar.org/api/resources/offers/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/offers/list/|Offers} * @see Asset * @param {Asset} asset For example: `new Asset('USD','GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD')` * @returns {OfferCallBuilder} current OfferCallBuilder instance @@ -64,7 +66,7 @@ export class OfferCallBuilder extends CallBuilder< /** * Returns all offers selling an asset. - * @see [Offers](https://developers.stellar.org/api/resources/offers/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/offers/list/|Offers} * @see Asset * @param {Asset} asset For example: `new Asset('EUR','GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD')` * @returns {OfferCallBuilder} current OfferCallBuilder instance @@ -82,7 +84,7 @@ export class OfferCallBuilder extends CallBuilder< /** * This endpoint filters offers where the given account is sponsoring the offer entry. - * @see [Offers](https://developers.stellar.org/api/resources/offers/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-all-offers|Offers} * @param {string} id For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {OfferCallBuilder} current OfferCallBuilder instance */ @@ -94,7 +96,7 @@ export class OfferCallBuilder extends CallBuilder< /** * This endpoint filters offers where the given account is the seller. * - * @see [Offers](https://developers.stellar.org/api/resources/offers/list/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-all-offers|Offers} * @param {string} seller For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {OfferCallBuilder} current OfferCallBuilder instance */ diff --git a/src/horizon/operation_call_builder.ts b/src/horizon/operation_call_builder.ts index 04da7127f..6b57bc205 100644 --- a/src/horizon/operation_call_builder.ts +++ b/src/horizon/operation_call_builder.ts @@ -3,12 +3,14 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link OperationCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#operations}. * - * @see [All Operations](https://developers.stellar.org/api/resources/operations/) - * @class OperationCallBuilder - * @class + * Do not create this object directly, use {@link Horizon.Server#operations}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/operations|All Operations} + * * @augments CallBuilder + * @private + * @class * @param {string} serverUrl Horizon server URL. */ export class OperationCallBuilder extends CallBuilder< @@ -22,7 +24,7 @@ export class OperationCallBuilder extends CallBuilder< /** * The operation details endpoint provides information on a single operation. The operation ID provided in the id * argument specifies which operation to load. - * @see [Operation Details](https://developers.stellar.org/api/resources/operations/single/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-an-operation|Operation Details} * @param {number} operationId Operation ID * @returns {CallBuilder} this OperationCallBuilder instance */ @@ -38,7 +40,7 @@ export class OperationCallBuilder extends CallBuilder< /** * This endpoint represents all operations that were included in valid transactions that affected a particular account. - * @see [Operations for Account](https://developers.stellar.org/api/resources/accounts/operations/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-operations-by-account-id|Operations for Account} * @param {string} accountId For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {OperationCallBuilder} this OperationCallBuilder instance */ @@ -48,7 +50,7 @@ export class OperationCallBuilder extends CallBuilder< /** * This endpoint represents all operations that reference a given claimable_balance. - * @see [Operations for Claimable Balance](https://developers.stellar.org/api/resources/claimablebalances/operations/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/cb-retrieve-related-operations|Operations for Claimable Balance} * @param {string} claimableBalanceId Claimable Balance ID * @returns {OperationCallBuilder} this OperationCallBuilder instance */ @@ -59,7 +61,7 @@ export class OperationCallBuilder extends CallBuilder< /** * This endpoint returns all operations that occurred in a given ledger. * - * @see [Operations for Ledger](https://developers.stellar.org/api/resources/ledgers/operations/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-ledgers-operations|Operations for Ledger} * @param {number|string} sequence Ledger sequence * @returns {OperationCallBuilder} this OperationCallBuilder instance */ @@ -69,7 +71,7 @@ export class OperationCallBuilder extends CallBuilder< /** * This endpoint represents all operations that are part of a given transaction. - * @see [Operations for Transaction](https://developers.stellar.org/api/resources/transactions/operations/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-transactions-operations|Operations for Transaction} * @param {string} transactionId Transaction ID * @returns {OperationCallBuilder} this OperationCallBuilder instance */ diff --git a/src/horizon/orderbook_call_builder.ts b/src/horizon/orderbook_call_builder.ts index 0eb0bd72c..cf1f301aa 100644 --- a/src/horizon/orderbook_call_builder.ts +++ b/src/horizon/orderbook_call_builder.ts @@ -5,8 +5,13 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link OrderbookCallBuilder} pointed to server defined by serverUrl. * - * Do not create this object directly, use {@link Server#orderbook}. - * @see [Orderbook Details](https://developers.stellar.org/api/aggregations/order-books/) + * Do not create this object directly, use {@link Horizon.Server#orderbook}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/aggregations/order-books|Orderbook Details} + * + * @augments CallBuilder + * @private + * @class * @param {string} serverUrl serverUrl Horizon server URL. * @param {Asset} selling Asset being sold * @param {Asset} buying Asset being bought diff --git a/src/horizon/path_call_builder.ts b/src/horizon/path_call_builder.ts index 7b2d40b59..8675cda30 100644 --- a/src/horizon/path_call_builder.ts +++ b/src/horizon/path_call_builder.ts @@ -17,9 +17,14 @@ import { ServerApi } from "./server_api"; * payment paths from those source assets to the desired destination asset. The search's amount parameter will be * used to determine if there a given path can satisfy a payment of the desired amount. * - * Do not create this object directly, use {@link Server#paths}. - * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/) + * Do not create this object directly, use {@link Horizon.Server#paths}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/aggregations/paths|Find Payment Paths} + * * @augments CallBuilder + * @private + * @class + * * @param {string} serverUrl Horizon server URL. * @param {string} source The sender's account ID. Any returned path must use a source that the sender can hold. * @param {string} destination The destination account ID that any returned path should use. diff --git a/src/horizon/payment_call_builder.ts b/src/horizon/payment_call_builder.ts index 1e5c8cb6b..0550b0736 100644 --- a/src/horizon/payment_call_builder.ts +++ b/src/horizon/payment_call_builder.ts @@ -4,10 +4,14 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link PaymentCallBuilder} pointed to server defined by serverUrl. * - * Do not create this object directly, use {@link Server#payments}. - * @see [All Payments](https://developers.stellar.org/api/horizon/resources/list-all-payments/) - * @class + * Do not create this object directly, use {@link Horizon.Server#payments}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/horizon/resources/list-all-payments/|All Payments} + * * @augments CallBuilder + * @private + * @class + * * @param {string} serverUrl Horizon server URL. */ export class PaymentCallBuilder extends CallBuilder< @@ -27,7 +31,7 @@ export class PaymentCallBuilder extends CallBuilder< /** * This endpoint responds with a collection of Payment operations where the given account was either the sender or receiver. - * @see [Payments for Account](https://developers.stellar.org/api/horizon/resources/get-payments-by-account-id) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/horizon/resources/get-payments-by-account-id|Payments for Account} * @param {string} accountId For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {PaymentCallBuilder} this PaymentCallBuilder instance */ @@ -37,7 +41,7 @@ export class PaymentCallBuilder extends CallBuilder< /** * This endpoint represents all payment operations that are part of a valid transactions in a given ledger. - * @see [Payments for Ledger](https://developers.stellar.org/api/horizon/resources/retrieve-a-ledgers-payments) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/horizon/resources/retrieve-a-ledgers-payments|Payments for Ledger} * @param {number|string} sequence Ledger sequence * @returns {PaymentCallBuilder} this PaymentCallBuilder instance */ @@ -47,7 +51,7 @@ export class PaymentCallBuilder extends CallBuilder< /** * This endpoint represents all payment operations that are part of a given transaction. - * @see [Payments for Transaction](https://developers.stellar.org/api/resources/transactions/payments/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/transactions/payments/|Payments for Transaction} * @param {string} transactionId Transaction ID * @returns {PaymentCallBuilder} this PaymentCallBuilder instance */ diff --git a/src/horizon/server.ts b/src/horizon/server.ts index d1d3e7813..e509862d5 100644 --- a/src/horizon/server.ts +++ b/src/horizon/server.ts @@ -38,12 +38,18 @@ import { StrictSendPathCallBuilder } from "./strict_send_path_call_builder"; import { TradeAggregationCallBuilder } from "./trade_aggregation_call_builder"; import { TradesCallBuilder } from "./trades_call_builder"; import { TransactionCallBuilder } from "./transaction_call_builder"; -// eslint-disable-next-line import/no-named-as-default +// eslint-disable-next-line import/no-named-as-default import AxiosClient, { getCurrentServerTime, } from "./horizon_axios_client"; -export const SUBMIT_TRANSACTION_TIMEOUT = 60 * 1000; +/** + * Default transaction submission timeout for Horizon requests, in milliseconds + * @constant {number} + * @default 60000 + * @memberof module:Horizon.Server + */ +export const SUBMIT_TRANSACTION_TIMEOUT: number = 60 * 1000; const STROOPS_IN_LUMEN = 10000000; @@ -56,25 +62,24 @@ function getAmountInLumens(amt: BigNumber) { } /** - * Server handles the network connection to a [Horizon](https://developers.stellar.org/api/introduction/) + * Server handles the network connection to a [Horizon](https://developers.stellar.org/docs/data/horizon) * instance and exposes an interface for requests to that instance. * @class + * @alias module:Horizon.Server + * @memberof module:Horizon + * * @param {string} serverURL Horizon Server URL (ex. `https://horizon-testnet.stellar.org`). - * @param {object} [opts] Options object - * @param {boolean} [opts.allowHttp] - Allow connecting to http servers, default: `false`. This must be set to false in production deployments! You can also use {@link Config} class to set this globally. - * @param {string} [opts.appName] - Allow set custom header `X-App-Name`, default: `undefined`. - * @param {string} [opts.appVersion] - Allow set custom header `X-App-Version`, default: `undefined`. - * @param {string} [opts.authToken] - Allow set custom header `X-Auth-Token`, default: `undefined`. + * @param {module:Horizon.Server.Options} [opts] Options object */ -export class Server { +export class HorizonServer { /** - * serverURL Horizon Server URL (ex. `https://horizon-testnet.stellar.org`). + * Horizon Server URL (ex. `https://horizon-testnet.stellar.org`) * - * TODO: Solve `URI(this.serverURL as any)`. + * @todo Solve `URI(this.serverURL as any)`. */ public readonly serverURL: URI; - constructor(serverURL: string, opts: Server.Options = {}) { + constructor(serverURL: string, opts: HorizonServer.Options = {}) { this.serverURL = URI(serverURL); const allowHttp = @@ -124,28 +129,26 @@ export class Server { * not when you build or submit the transaction! So give yourself enough time to get * the transaction built and signed before submitting. * - * Example: - * - * ```javascript + * @example * const transaction = new StellarSdk.TransactionBuilder(accountId, { - * fee: await StellarSdk.Server.fetchBaseFee(), - * timebounds: await StellarSdk.Server.fetchTimebounds(100) + * fee: await StellarSdk.Server.fetchBaseFee(), + * timebounds: await StellarSdk.Server.fetchTimebounds(100) * }) - * .addOperation(operation) - * // normally we would need to call setTimeout here, but setting timebounds - * // earlier does the trick! - * .build(); - * ``` + * .addOperation(operation) + * // normally we would need to call setTimeout here, but setting timebounds + * // earlier does the trick! + * .build(); + * * @param {number} seconds Number of seconds past the current time to wait. * @param {boolean} [_isRetry] True if this is a retry. Only set this internally! * This is to avoid a scenario where Horizon is horking up the wrong date. - * @returns {Promise} Promise that resolves a `timebounds` object + * @returns {Promise} Promise that resolves a `timebounds` object * (with the shape `{ minTime: 0, maxTime: N }`) that you can set the `timebounds` option to. */ public async fetchTimebounds( seconds: number, _isRetry: boolean = false, - ): Promise { + ): Promise { // AxiosClient instead of this.ledgers so we can get at them headers const currentTime = getCurrentServerTime(this.serverURL.hostname()); @@ -184,7 +187,7 @@ export class Server { /** * Fetch the fee stats endpoint. - * @see [Fee Stats](https://developers.stellar.org/api/aggregations/fee-stats/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/aggregations/fee-stats|Fee Stats} * @returns {Promise} Promise that resolves to the fee stats returned by Horizon. */ // eslint-disable-next-line require-await @@ -199,15 +202,27 @@ export class Server { /** * Submits a transaction to the network. * - * By default this function calls {@link Server#checkMemoRequired}, you can + * By default this function calls {@link Horizon.Server#checkMemoRequired}, you can * skip this check by setting the option `skipMemoRequiredCheck` to `true`. * * If you submit any number of `manageOffer` operations, this will add an * attribute to the response that will help you analyze what happened with * your offers. * - * Ex: - * ```javascript + * For example, you'll want to examine `offerResults` to add affordances like + * these to your app: + * - If `wasImmediatelyFilled` is true, then no offer was created. So if you + * normally watch the `Server.offers` endpoint for offer updates, you + * instead need to check `Server.trades` to find the result of this filled + * offer. + * - If `wasImmediatelyDeleted` is true, then the offer you submitted was + * deleted without reaching the orderbook or being matched (possibly because + * your amounts were rounded down to zero). So treat the just-submitted + * offer request as if it never happened. + * - If `wasPartiallyFilled` is true, you can tell the user that + * `amountBought` or `amountSold` have already been transferred. + * + * @example * const res = { * ...response, * offerResults: [ @@ -275,22 +290,8 @@ export class Server { * } * ] * } - * ``` * - * For example, you'll want to examine `offerResults` to add affordances like - * these to your app: - * * If `wasImmediatelyFilled` is true, then no offer was created. So if you - * normally watch the `Server.offers` endpoint for offer updates, you - * instead need to check `Server.trades` to find the result of this filled - * offer. - * * If `wasImmediatelyDeleted` is true, then the offer you submitted was - * deleted without reaching the orderbook or being matched (possibly because - * your amounts were rounded down to zero). So treat the just-submitted - * offer request as if it never happened. - * * If `wasPartiallyFilled` is true, you can tell the user that - * `amountBought` or `amountSold` have already been transferred. - * - * @see [PostTransaction](https://developers.stellar.org/api/resources/transactions/post/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/submit-a-transaction|Submit a Transaction} * @param {Transaction|FeeBumpTransaction} transaction - The transaction to submit. * @param {object} [opts] Options object * @param {boolean} [opts.skipMemoRequiredCheck] - Allow skipping memo @@ -301,7 +302,7 @@ export class Server { */ public async submitTransaction( transaction: Transaction | FeeBumpTransaction, - opts: Server.SubmitTransactionOptions = { skipMemoRequiredCheck: false }, + opts: HorizonServer.SubmitTransactionOptions = { skipMemoRequiredCheck: false }, ): Promise { // only check for memo required if skipMemoRequiredCheck is false and the transaction doesn't include a memo. if (!opts.skipMemoRequiredCheck) { @@ -382,7 +383,7 @@ export class Server { // However, you can never be too careful. default: throw new Error( - `Invalid offer result type: ${ + `Invalid offer result type: ${ offerClaimedAtom.switch()}`, ); } @@ -513,7 +514,7 @@ export class Server { * and waits for the transaction to be ingested in Horizon, this endpoint relays the response from * core directly back to the user. * - * By default, this function calls {@link Server#checkMemoRequired}, you can + * By default, this function calls {@link HorizonServer#checkMemoRequired}, you can * skip this check by setting the option `skipMemoRequiredCheck` to `true`. * * @see [Submit-Async-Transaction](https://developers.stellar.org/docs/data/horizon/api-reference/resources/submit-async-transaction) @@ -527,7 +528,7 @@ export class Server { */ public async submitAsyncTransaction( transaction: Transaction | FeeBumpTransaction, - opts: Server.SubmitTransactionOptions = { skipMemoRequiredCheck: false } + opts: HorizonServer.SubmitTransactionOptions = { skipMemoRequiredCheck: false } ): Promise { // only check for memo required if skipMemoRequiredCheck is false and the transaction doesn't include a memo. if (!opts.skipMemoRequiredCheck) { @@ -591,15 +592,15 @@ export class Server { /** * People on the Stellar network can make offers to buy or sell assets. This endpoint represents all the offers on the DEX. * - * You can query all offers for account using the function `.accountId`: + * You can query all offers for account using the function `.accountId`. * - * ``` + * @example * server.offers() - * .forAccount(accountId).call() - * .then(function(offers) { - * console.log(offers); - * }); - * ``` + * .forAccount(accountId).call() + * .then(function(offers) { + * console.log(offers); + * }); + * * @returns {OfferCallBuilder} New {@link OfferCallBuilder} object */ public offers(): OfferCallBuilder { @@ -802,7 +803,7 @@ export class Server { * Each account is checked sequentially instead of loading multiple accounts * at the same time from Horizon. * - * @see https://stellar.org/protocol/sep-29 + * @see {@link https://stellar.org/protocol/sep-29|SEP-29: Account Memo Requirements} * @param {Transaction} transaction - The transaction to check. * @returns {Promise} - If any of the destination account * requires a memo, the promise will throw {@link AccountRequiresMemoError}. @@ -874,7 +875,17 @@ export class Server { } } -export namespace Server { +/** + * Options for configuring connections to Horizon servers. + * @typedef {object} Options + * @memberof module:Horizon.Server + * @property {boolean} [allowHttp] Allow connecting to http servers, default: `false`. This must be set to false in production deployments! You can also use {@link Config} class to set this globally. + * @property {string} [appName] Allow set custom header `X-App-Name`, default: `undefined`. + * @property {string} [appVersion] Allow set custom header `X-App-Version`, default: `undefined`. + * @property {string} [authToken] Allow set custom header `X-Auth-Token`, default: `undefined`. + */ + +export namespace HorizonServer { export interface Options { allowHttp?: boolean; appName?: string; diff --git a/src/horizon/strict_receive_path_call_builder.ts b/src/horizon/strict_receive_path_call_builder.ts index a809c8296..c520246d4 100644 --- a/src/horizon/strict_receive_path_call_builder.ts +++ b/src/horizon/strict_receive_path_call_builder.ts @@ -21,9 +21,14 @@ import { ServerApi } from "./server_api"; * If a list of assets is passed as the source, horizon will find any payment * paths from those source assets to the desired destination asset. * - * Do not create this object directly, use {@link Server#strictReceivePaths}. - * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/) + * Do not create this object directly, use {@link Horizon.Server#strictReceivePaths}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/aggregations/paths|Find Payment Paths} + * * @augments CallBuilder + * @private + * @class + * * @param {string} serverUrl Horizon server URL. * @param {string|Asset[]} source The sender's account ID or a list of Assets. Any returned path must use a source that the sender can hold. * @param {Asset} destinationAsset The destination asset. diff --git a/src/horizon/strict_send_path_call_builder.ts b/src/horizon/strict_send_path_call_builder.ts index 523e700de..ba732d1cc 100644 --- a/src/horizon/strict_send_path_call_builder.ts +++ b/src/horizon/strict_send_path_call_builder.ts @@ -20,9 +20,14 @@ import { ServerApi } from "./server_api"; * used to determine if there a given path can satisfy a payment of the desired * amount. * - * Do not create this object directly, use {@link Server#strictSendPaths}. - * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/) + * Do not create this object directly, use {@link Horizon.Server#strictSendPaths}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/aggregations/paths|Find Payment Paths} + * * @augments CallBuilder + * @private + * @class + * * @param {string} serverUrl Horizon server URL. * @param {Asset} sourceAsset The asset to be sent. * @param {string} sourceAmount The amount, denominated in the source asset, that any returned path should be able to satisfy. diff --git a/src/horizon/trade_aggregation_call_builder.ts b/src/horizon/trade_aggregation_call_builder.ts index f20d0a34a..01c946f15 100644 --- a/src/horizon/trade_aggregation_call_builder.ts +++ b/src/horizon/trade_aggregation_call_builder.ts @@ -16,11 +16,13 @@ const allowedResolutions = [ /** * Trade Aggregations facilitate efficient gathering of historical trade data. - * Do not create this object directly, use {@link Server#tradeAggregation}. * - * @class TradeAggregationCallBuilder + * Do not create this object directly, use {@link Horizon.Server#tradeAggregation}. + * * @augments CallBuilder + * @private * @class + * * @param {string} serverUrl serverUrl Horizon server URL. * @param {Asset} base base asset * @param {Asset} counter counter asset diff --git a/src/horizon/trades_call_builder.ts b/src/horizon/trades_call_builder.ts index afddd372c..ab30cb503 100644 --- a/src/horizon/trades_call_builder.ts +++ b/src/horizon/trades_call_builder.ts @@ -4,12 +4,15 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link TradesCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#trades}. * - * @class TradesCallBuilder + * Do not create this object directly, use {@link Horizon.Server#trades}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/trades|Trades} + * * @augments CallBuilder + * @private * @class - * @see [Trades](https://developers.stellar.org/api/resources/trades/) + * * @param {string} serverUrl serverUrl Horizon server URL. */ export class TradesCallBuilder extends CallBuilder< @@ -66,7 +69,7 @@ export class TradesCallBuilder extends CallBuilder< /** * Filter trades for a specific account - * @see [Trades for Account](https://developers.stellar.org/api/resources/accounts/trades/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-trades-by-account-id|Trades for Account} * @param {string} accountId For example: `GBYTR4MC5JAX4ALGUBJD7EIKZVM7CUGWKXIUJMRSMK573XH2O7VAK3SR` * @returns {TradesCallBuilder} current TradesCallBuilder instance */ @@ -76,7 +79,7 @@ export class TradesCallBuilder extends CallBuilder< /** * Filter trades for a specific liquidity pool - * @see [Trades for Liquidity Pool](https://developers.stellar.org/api/resources/liquiditypools/trades/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-related-trades|Trades for Liquidity Pool} * @param {string} liquidityPoolId For example: `3b476aff8a406a6ec3b61d5c038009cef85f2ddfaf616822dc4fec92845149b4` * @returns {TradesCallBuilder} current TradesCallBuilder instance */ diff --git a/src/horizon/transaction_call_builder.ts b/src/horizon/transaction_call_builder.ts index 5dd24a3eb..3650c4d55 100644 --- a/src/horizon/transaction_call_builder.ts +++ b/src/horizon/transaction_call_builder.ts @@ -3,12 +3,15 @@ import { ServerApi } from "./server_api"; /** * Creates a new {@link TransactionCallBuilder} pointed to server defined by serverUrl. - * Do not create this object directly, use {@link Server#transactions}. * - * @class TransactionCallBuilder + * Do not create this object directly, use {@link Horizon.Server#transactions}. + * + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/list-all-transactions|All Transactions} + * * @augments CallBuilder - * @see [All Transactions](https://developers.stellar.org/api/resources/transactions/) + * @private * @class + * * @param {string} serverUrl Horizon server URL. */ export class TransactionCallBuilder extends CallBuilder< @@ -21,7 +24,7 @@ export class TransactionCallBuilder extends CallBuilder< /** * The transaction details endpoint provides information on a single transaction. The transaction hash provided in the hash argument specifies which transaction to load. - * @see [Transaction Details](https://developers.stellar.org/api/resources/transactions/single/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-transaction|Transaction Details} * @param {string} transactionId Transaction ID * @returns {CallBuilder} a CallBuilder instance */ @@ -37,7 +40,7 @@ export class TransactionCallBuilder extends CallBuilder< /** * This endpoint represents all transactions that affected a given account. - * @see [Transactions for Account](https://developers.stellar.org/api/resources/accounts/transactions/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/get-transactions-by-account-id|Transactions for Account} * @param {string} accountId For example: `GDGQVOKHW4VEJRU2TETD6DBRKEO5ERCNF353LW5WBFW3JJWQ2BRQ6KDD` * @returns {TransactionCallBuilder} current TransactionCallBuilder instance */ @@ -47,7 +50,7 @@ export class TransactionCallBuilder extends CallBuilder< /** * This endpoint represents all transactions that reference a given claimable_balance. - * @see [Operations for Claimable Balance](https://developers.stellar.org/api/resources/claimablebalances/transactions/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/cb-retrieve-related-transactions|Transactions for Claimable Balance} * @param {string} claimableBalanceId Claimable Balance ID * @returns {TransactionCallBuilder} this TransactionCallBuilder instance */ @@ -57,7 +60,7 @@ export class TransactionCallBuilder extends CallBuilder< /** * This endpoint represents all transactions in a given ledger. - * @see [Transactions for Ledger](https://developers.stellar.org/api/resources/ledgers/transactions/) + * @see {@link https://developers.stellar.org/docs/data/horizon/api-reference/resources/retrieve-a-ledgers-transactions|Transactions for Ledger} * @param {number|string} sequence Ledger sequence * @returns {TransactionCallBuilder} current TransactionCallBuilder instance */ diff --git a/src/index.ts b/src/index.ts index 1147a414a..813ce6fc1 100644 --- a/src/index.ts +++ b/src/index.ts @@ -22,9 +22,8 @@ export * as Horizon from './horizon'; * `/rpc` entrypoint, if your version of Node and your TypeScript configuration * allow it: * - * ```ts + * @example * import { Server } from '@stellar/stellar-sdk/rpc'; - * ``` */ export * as rpc from './rpc'; @@ -39,9 +38,9 @@ export * as SorobanRpc from './rpc'; * entrypoint, if your version of Node and your TypeScript configuration allow * it: * - * ```ts + * @example * import { Client } from '@stellar/stellar-sdk/contract'; - * ``` + * @private */ export * as contract from './contract' diff --git a/src/rpc/api.ts b/src/rpc/api.ts index 8d65781c4..09a027b9a 100644 --- a/src/rpc/api.ts +++ b/src/rpc/api.ts @@ -1,7 +1,6 @@ import { Contract, SorobanDataBuilder, xdr } from '@stellar/stellar-base'; /* tslint:disable-next-line:no-namespace */ -/** @namespace Api */ export namespace Api { export interface Cost { diff --git a/src/rpc/index.ts b/src/rpc/index.ts index 99ee2ba2a..8564852bf 100644 --- a/src/rpc/index.ts +++ b/src/rpc/index.ts @@ -1,3 +1,5 @@ +/** @module rpc */ + // tslint:disable-next-line: no-reference /// @@ -5,7 +7,7 @@ export * from "./api"; // soroban-client classes to expose -export { Server, Durability } from "./server"; +export { RpcServer as Server, Durability } from "./server"; export { default as AxiosClient } from "./axios"; export { parseRawSimulation, parseRawEvents } from "./parsers"; export * from "./transaction"; diff --git a/src/rpc/jsonrpc.ts b/src/rpc/jsonrpc.ts index 24b3375f4..38662e569 100644 --- a/src/rpc/jsonrpc.ts +++ b/src/rpc/jsonrpc.ts @@ -36,7 +36,15 @@ function hasOwnProperty( return obj.hasOwnProperty(prop); } -/** Sends the jsonrpc 'params' as a single 'param' object (no array support). */ +/** + * Sends the jsonrpc 'params' as a single 'param' object (no array support). + * + * @param {string} url URL to the RPC instance + * @param {string} method RPC method name that should be called + * @param {(any | null)} [param=null] params that should be supplied to the method + * @returns {Promise} + * @private + */ export async function postObject( url: string, method: string, @@ -54,4 +62,4 @@ export async function postObject( } else { return response.data?.result; } -} \ No newline at end of file +} diff --git a/src/rpc/parsers.ts b/src/rpc/parsers.ts index ec590d719..c45a8cec6 100644 --- a/src/rpc/parsers.ts +++ b/src/rpc/parsers.ts @@ -1,16 +1,24 @@ import { xdr, Contract, SorobanDataBuilder } from '@stellar/stellar-base'; import { Api } from './api'; +/** + * Parse the response from invoking the `submitTransaction` method of a Soroban RPC server. + * @memberof module:rpc + * @private + * + * @param {Api.RawSendTransactionResponse} raw the raw `submitTransaction` response from the Soroban RPC server to parse + * @returns {Api.SendTransactionResponse} transaction response parsed from the Soroban RPC server's response + */ export function parseRawSendTransaction( - r: Api.RawSendTransactionResponse + raw: Api.RawSendTransactionResponse ): Api.SendTransactionResponse { - const { errorResultXdr, diagnosticEventsXdr } = r; - delete r.errorResultXdr; - delete r.diagnosticEventsXdr; + const { errorResultXdr, diagnosticEventsXdr } = raw; + delete raw.errorResultXdr; + delete raw.diagnosticEventsXdr; if (errorResultXdr) { return { - ...r, + ...raw, ...( diagnosticEventsXdr !== undefined && diagnosticEventsXdr.length > 0 && { @@ -23,7 +31,7 @@ export function parseRawSendTransaction( }; } - return { ...r } as Api.BaseSendTransactionResponse; + return { ...raw } as Api.BaseSendTransactionResponse; } export function parseTransactionInfo(raw: Api.RawTransactionInfo | Api.RawGetTransactionResponse): Omit { @@ -60,12 +68,19 @@ export function parseRawTransactions( }; } +/** + * Parse and return the retrieved events, if any, from a raw response from a Soroban RPC server. + * @memberof module:rpc + * + * @param {Api.RawGetEventsResponse} raw the raw `getEvents` response from the Soroban RPC server to parse + * @returns {Api.GetEventsResponse} events parsed from the Soroban RPC server's response + */ export function parseRawEvents( - r: Api.RawGetEventsResponse + raw: Api.RawGetEventsResponse ): Api.GetEventsResponse { return { - latestLedger: r.latestLedger, - events: (r.events ?? []).map((evt) => { + latestLedger: raw.latestLedger, + events: (raw.events ?? []).map((evt) => { const clone: Omit = { ...evt }; delete (clone as any).contractId; // `as any` hack because contractId field isn't optional @@ -80,6 +95,14 @@ export function parseRawEvents( }; } +/** + * Parse and return the retrieved ledger entries, if any, from a raw response from a Soroban RPC server. + * @memberof module:rpc + * @private + * + * @param {Api.RawGetLedgerEntriesResponse} raw he raw `getLedgerEntries` response from the Soroban RPC server to parse + * @returns {Api.GetLedgerEntriesResponse} ledger entries parsed from the Soroban RPC server's response + */ export function parseRawLedgerEntries( raw: Api.RawGetLedgerEntriesResponse ): Api.GetLedgerEntriesResponse { @@ -104,6 +127,15 @@ export function parseRawLedgerEntries( }; } +/** + * Parse whether or not the transaction simulation was successful, returning the relevant response. + * @memberof module:rpc + * @private + * + * @param {Api.RawSimulateTransactionResponse} sim a raw response from the `simulateTransaction` method of the Soroban RPC server to parse + * @param {Api.BaseSimulateTransactionResponse} partial a partially built simulate transaction response that will be used to build the return response + * @returns {Api.SimulateTransactionRestoreResponse | Api.SimulateTransactionSuccessResponse} Either a simulation response indicating what ledger entries should be restored, or if the simulation was successful. + */ function parseSuccessful( sim: Api.RawSimulateTransactionResponse, partial: Api.BaseSimulateTransactionResponse @@ -160,16 +192,13 @@ function parseSuccessful( } /** - * Converts a raw response schema into one with parsed XDR fields and a - * simplified interface. - * Warning: This API is only exported for testing purposes and should not be - * relied on or considered "stable". + * Converts a raw response schema into one with parsed XDR fields and a simplified interface. + * @warning This API is only exported for testing purposes and should not be relied on or considered "stable". + * @memberof module:rpc * - * @param {Api.SimulateTransactionResponse|Api.RawSimulateTransactionResponse} sim the raw response schema (parsed ones are allowed, best-effort + * @param {Api.SimulateTransactionResponse | Api.RawSimulateTransactionResponse} sim the raw response schema (parsed ones are allowed, best-effort * detected, and returned untouched) - * - * @returns the original parameter (if already parsed), parsed otherwise - * + * @returns {Api.SimulateTransactionResponse} the original parameter (if already parsed), parsed otherwise */ export function parseRawSimulation( sim: diff --git a/src/rpc/server.ts b/src/rpc/server.ts index 395a2cc79..982154b9c 100644 --- a/src/rpc/server.ts +++ b/src/rpc/server.ts @@ -31,16 +31,51 @@ import { parseTransactionInfo, } from './parsers'; +/** + * Default transaction submission timeout for RPC requests, in milliseconds + * @constant {number} + * @default 60000 + * @memberof module:rpc.Server + */ export const SUBMIT_TRANSACTION_TIMEOUT = 60 * 1000; -/** Specifies the durability namespace of contract-related ledger entries. */ +/** + * Specifies the durability namespace of contract-related ledger entries. + * @enum {('temporary' | 'persistent')} + * @memberof module:rpc + * + * @see {@link https://developers.stellar.org/docs/learn/smart-contract-internals/state-archival | State Archival docs} + * @see {@link https://docs.rs/soroban-sdk/latest/soroban_sdk/storage/struct.Storage.html | Rust SDK Storage docs} + */ export enum Durability { Temporary = 'temporary', Persistent = 'persistent' } -export namespace Server { - /** Describes the complex filter combinations available for event queries. */ +/** + * @typedef {object} GetEventsRequest Describes the complex filter combinations available for event queries. + * @property {Array.} filters Filters to use when querying events from the RPC server. + * @property {number} [startLedger] Ledger number (inclusive) to begin querying events. + * @property {string} [cursor] Page cursor (exclusive) to begin querying events. + * @property {number} [limit=100] The maximum number of events that should be returned in the RPC response. + * @memberof module:rpc.Server + */ + +/** + * @typedef {object} ResourceLeeway Describes additional resource leeways for transaction simulation. + * @property {number} cpuInstructions Simulate the transaction with more CPU instructions available. + * @memberof module:rpc.Server + */ + +/** + * @typedef {object} Options Options for configuring connections to RPC servers. + * @property {boolean} [allowHttp=false] Allow connecting to http servers, default: `false`. This must be set to false in production deployments! + * @property {number} [timeout=0] Allow a timeout, default: 0. Allows user to avoid nasty lag. You can also use {@link Config} class to set this globally. + * @property {Record} [headers] Additional headers that should be added to any requests to the RPC server. + * @memberof module:rpc.Server + */ + +export namespace RpcServer { export interface GetEventsRequest { filters: Api.EventFilter[]; startLedger?: number; // either this or cursor @@ -49,7 +84,6 @@ export namespace Server { limit?: number; } - /** Describes additional resource leeways for transaction simulation. */ export interface ResourceLeeway { cpuInstructions: number; } @@ -98,23 +132,26 @@ function findCreatedAccountSequenceInTransactionMeta( * Handles the network connection to a Soroban RPC instance, exposing an * interface for requests to that instance. * - * @class + * @alias module:rpc.Server + * @memberof module:rpc * - * @param {string} serverURL Soroban-RPC Server URL (ex. - * `http://localhost:8000/soroban/rpc`). - * @param {object} [opts] Options object - * @param {boolean} [opts.allowHttp] allows connecting to insecure http servers + * @param {string} serverURL Soroban-RPC Server URL (ex. `http://localhost:8000/soroban/rpc`). + * @param {module:rpc.Server.Options} [opts] Options object + * @param {boolean} [opts.allowHttp] Allows connecting to insecure http servers * (default: `false`). This must be set to false in production deployments! * You can also use {@link Config} class to set this globally. - * @param {Record} [opts.headers] allows setting custom headers + * @param {Record} [opts.headers] Allows setting custom headers * - * @see https://soroban.stellar.org/api/methods + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods | API reference docs} */ -export class Server { - /** Soroban RPC Server URL (ex. `http://localhost:8000/soroban/rpc`). */ +export class RpcServer { public readonly serverURL: URI; - constructor(serverURL: string, opts: Server.Options = {}) { + constructor(serverURL: string, opts: RpcServer.Options = {}) { + /** + * RPC Server URL (ex. `http://localhost:8000/soroban/rpc`). + * @member {URI} + */ this.serverURL = URI(serverURL); if (opts.headers && Object.keys(opts.headers).length !== 0) { @@ -138,12 +175,12 @@ export class Server { * Needed to get the current sequence number for the account so you can build * a successful transaction with {@link TransactionBuilder}. * - * @param {string} address - The public address of the account to load. + * @param {string} address The public address of the account to load. + * @returns {Promise} A promise which resolves to the {@link Account} + * object with a populated sequence number * - * @returns {Promise} a promise to the {@link Account} object with - * a populated sequence number + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries | getLedgerEntries docs} * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries * @example * const accountId = "GBZC6Y2Y7Q3ZQ2Y4QZJ2XZ3Z5YXZ6Z7Z2Y4QZJ2XZ3Z5YXZ6Z7Z2Y4"; * server.getAccount(accountId).then((account) => { @@ -173,11 +210,12 @@ export class Server { /** * General node health check. * - * @returns {Promise} a promise to the - * {@link Api.GetHealthResponse} object with the status of the - * server (e.g. "healthy"). + * @returns {Promise} A promise which resolves to the + * {@link Api.GetHealthResponse} object with the status of the + * server (e.g. "healthy"). + * + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getHealth | getLedgerEntries docs} * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getHealth * @example * server.getHealth().then((health) => { * console.log("status:", health.status); @@ -196,21 +234,22 @@ export class Server { * * Allows you to directly inspect the current state of a contract. This is a * backup way to access your contract data which may not be available via - * events or {@link Server.simulateTransaction}. - * Warning: If the data entry in question is a 'temporary' entry, it's - * entirely possible that it has expired out of existence. + * events or {@link module:rpc.Server#simulateTransaction}. * - * @param {string|Address|Contract} contract the contract ID containing the + * @param {string|Address|Contract} contract The contract ID containing the * data to load as a strkey (`C...` form), a {@link Contract}, or an * {@link Address} instance - * @param {xdr.ScVal} key the key of the contract data to load - * @param {Durability} [durability=Durability.Persistent] the "durability + * @param {xdr.ScVal} key The key of the contract data to load + * @param {module:rpc.Durability} [durability=Durability.Persistent] The "durability * keyspace" that this ledger key belongs to, which is either 'temporary' - * or 'persistent' (the default), see {@link Durability}. + * or 'persistent' (the default), see {@link module:rpc.Durability}. + * @returns {Promise} The current data value + * + * @warning If the data entry in question is a 'temporary' entry, it's + * entirely possible that it has expired out of existence. * - * @returns {Promise} the current data value + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries | getLedgerEntries docs} * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries * @example * const contractId = "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5"; * const key = xdr.ScVal.scvSymbol("counter"); @@ -287,13 +326,10 @@ export class Server { * deployed on the Soroban network. The WASM bytecode represents the executable * code of the contract. * - * @param {string} contractId the contract ID containing the - * WASM bytecode to retrieve - * - * @returns {Promise} a Buffer containing the WASM bytecode - * + * @param {string} contractId The contract ID containing the WASM bytecode to retrieve + * @returns {Promise} A Buffer containing the WASM bytecode * @throws {Error} If the contract or its associated WASM bytecode cannot be - * found on the network. + * found on the network. * * @example * const contractId = "CCJZ5DGASBWQXR5MPFCJXMBI333XE5U3FSJTNQU7RIKE3P5GN2K2WYD5"; @@ -331,12 +367,10 @@ export class Server { * deployed on the Soroban network using the contract's WASM hash. The WASM bytecode * represents the executable code of the contract. * - * @param {Buffer} wasmHash the WASM hash of the contract - * - * @returns {Promise} a Buffer containing the WASM bytecode - * + * @param {Buffer} wasmHash The WASM hash of the contract + * @returns {Promise} A Buffer containing the WASM bytecode * @throws {Error} If the contract or its associated WASM bytecode cannot be - * found on the network. + * found on the network. * * @example * const wasmHash = Buffer.from("..."); @@ -379,13 +413,12 @@ export class Server { * {@link xdr.LedgerKeyContractCode} ledger entry key (or see * {@link Contract.getFootprint}). * - * @param {xdr.ScVal[]} keys one or more ledger entry keys to load - * - * @returns {Promise} the current - * on-chain values for the given ledger keys + * @param {xdr.ScVal[]} keys One or more ledger entry keys to load + * @returns {Promise} The current on-chain + * values for the given ledger keys * - * @see Server._getLedgerEntries - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLedgerEntries | getLedgerEntries docs} + * @see RpcServer._getLedgerEntries * @example * const contractId = "CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2KM"; * const key = xdr.LedgerKey.contractData(new xdr.LedgerKeyContractData({ @@ -426,12 +459,12 @@ export class Server { * After submitting a transaction, clients should poll this to tell when the * transaction has completed. * - * @param {string} hash hex-encoded hash of the transaction to check - * - * @returns {Promise} the status, + * @param {string} hash Hex-encoded hash of the transaction to check + * @returns {Promise} The status, * result, and other details about the transaction * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getTransaction + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getTransaction | getTransaction docs} + * * @example * const transactionHash = "c4515e3bdc0897f21cc5dbec8c82cf0a936d4741cb74a8e158eb51b9fb00411a"; * server.getTransaction(transactionHash).then((tx) => { @@ -515,18 +548,19 @@ export class Server { /** * Fetch all events that match a given set of filters. * - * The given filters (see {@link Api.EventFilter} for detailed fields) - * are combined only in a logical OR fashion, and all of the fields in each - * filter are optional. + * The given filters (see {@link module:rpc.Api.EventFilter | Api.EventFilter} + * for detailed fields) are combined only in a logical OR fashion, and all of + * the fields in each filter are optional. * * To page through events, use the `pagingToken` field on the relevant * {@link Api.EventResponse} object to set the `cursor` parameter. * - * @param {Server.GetEventsRequest} request event filters - * @returns {Promise} a paginatable set of the - * events matching the given event filters + * @param {module:rpc.Server.GetEventsRequest} request Event filters + * @returns {Promise} A paginatable set of the events + * matching the given event filters + * + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getEvents | getEvents docs} * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getEvents * @example * server.getEvents({ * startLedger: 1000, @@ -553,14 +587,14 @@ export class Server { */ // eslint-disable-next-line require-await public async getEvents( - request: Server.GetEventsRequest + request: RpcServer.GetEventsRequest ): Promise { return this._getEvents(request).then(parseRawEvents); } // eslint-disable-next-line require-await public async _getEvents( - request: Server.GetEventsRequest + request: RpcServer.GetEventsRequest ): Promise { return jsonrpc.postObject(this.serverURL.toString(), 'getEvents', { filters: request.filters ?? [], @@ -580,10 +614,11 @@ export class Server { /** * Fetch metadata about the network this Soroban RPC server is connected to. * - * @returns {Promise} metadata about the - * current network this RPC server is connected to + * @returns {Promise} Metadata about the current + * network this RPC server is connected to + * + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getNetwork | getNetwork docs} * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getNetwork * @example * server.getNetwork().then((network) => { * console.log("friendbotUrl:", network.friendbotUrl); @@ -603,7 +638,8 @@ export class Server { * @returns {Promise} metadata about the * latest ledger on the network that this RPC server is connected to * - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLatestLedger + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/getLatestLedger | getLatestLedger docs} + * * @example * server.getLatestLedger().then((response) => { * console.log("hash:", response.id); @@ -625,15 +661,14 @@ export class Server { * {@link xdr.InvokeHostFunctionOp}, {@link xdr.ExtendFootprintTTLOp}, or * {@link xdr.RestoreFootprintOp}). Any provided footprint or auth * information will be ignored. - * - * @returns {Promise} an object with the + * @returns {Promise} An object with the * cost, footprint, result/auth requirements (if applicable), and error of * the transaction * - * @see https://developers.stellar.org/docs/glossary/transactions/ - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/simulateTransaction - * @see Server.prepareTransaction - * @see assembleTransaction + * @see {@link https://developers.stellar.org/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions | transaction docs} + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/simulateTransaction | simulateTransaction docs} + * @see module:rpc.Server#prepareTransaction + * @see module:rpc.assembleTransaction * * @example * const contractId = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE'; @@ -661,7 +696,7 @@ export class Server { // eslint-disable-next-line require-await public async simulateTransaction( tx: Transaction | FeeBumpTransaction, - addlResources?: Server.ResourceLeeway + addlResources?: RpcServer.ResourceLeeway ): Promise { return this._simulateTransaction(tx, addlResources) .then(parseRawSimulation); @@ -670,7 +705,7 @@ export class Server { // eslint-disable-next-line require-await public async _simulateTransaction( transaction: Transaction | FeeBumpTransaction, - addlResources?: Server.ResourceLeeway + addlResources?: RpcServer.ResourceLeeway ): Promise { return jsonrpc.postObject( this.serverURL.toString(), @@ -695,13 +730,14 @@ export class Server { * * The returned transaction will also have an updated fee that is the sum of * fee set on incoming transaction with the contract resource fees estimated - * from simulation. It is adviseable to check the fee on returned transaction + * from simulation. It is advisable to check the fee on returned transaction * and validate or take appropriate measures for interaction with user to * confirm it is acceptable. * - * You can call the {@link Server.simulateTransaction} method directly first - * if you want to inspect estimated fees for a given transaction in detail - * first, then re-assemble it manually or via {@link assembleTransaction}. + * You can call the {@link module:rpc.Server#simulateTransaction} method + * directly first if you want to inspect estimated fees for a given + * transaction in detail first, then re-assemble it manually or via + * {@link module:rpc.assembleTransaction}. * * @param {Transaction | FeeBumpTransaction} tx the transaction to * prepare. It should include exactly one operation, which must be one of @@ -713,17 +749,17 @@ export class Server { * from the simulation. In other words, if you include auth entries, you * don't care about the auth returned from the simulation. Other fields * (footprint, etc.) will be filled as normal. - * - * @returns {Promise} a copy of the + * @returns {Promise} A copy of the * transaction with the expected authorizations (in the case of * invocation), resources, and ledger footprints added. The transaction fee * will also automatically be padded with the contract's minimum resource * fees discovered from the simulation. - * - * @see assembleTransaction - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/simulateTransaction * @throws {jsonrpc.Error|Error|Api.SimulateTransactionErrorResponse} - * if simulation fails + * If simulation fails + * + * @see module:rpc.assembleTransaction + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/simulateTransaction | simulateTransaction docs} + * * @example * const contractId = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE'; * const contract = new StellarSdk.Contract(contractId); @@ -769,15 +805,16 @@ export class Server { * * Unlike Horizon, Soroban RPC does not wait for transaction completion. It * simply validates the transaction and enqueues it. Clients should call - * {@link Server.getTransactionStatus} to learn about transaction + * {@link module:rpc.Server#getTransaction} to learn about transaction * success/failure. * * @param {Transaction | FeeBumpTransaction} transaction to submit * @returns {Promise} the * transaction id, status, and any error if available * - * @see https://developers.stellar.org/docs/glossary/transactions/ - * @see https://developers.stellar.org/docs/data/rpc/api-reference/methods/sendTransaction + * @see {@link https://developers.stellar.org/docs/learn/fundamentals/stellar-data-structures/operations-and-transactions | transaction docs} + * @see {@link https://developers.stellar.org/docs/data/rpc/api-reference/methods/sendTransaction | sendTransaction docs} + * * @example * const contractId = 'CA3D5KRYM6CB7OWQ6TWYRR3Z4T7GNZLKERYNZGGA5SOAOPIFY6YQGAXE'; * const contract = new StellarSdk.Contract(contractId); @@ -826,25 +863,23 @@ export class Server { } /** - * Fund a new account using the network's friendbot faucet, if any. + * Fund a new account using the network's Friendbot faucet, if any. * - * @param {string | Account} address the address or account instance that we - * want to create and fund with friendbot - * @param {string} [friendbotUrl] optionally, an explicit address for + * @param {string | Account} address The address or account instance that we + * want to create and fund with Friendbot + * @param {string} [friendbotUrl] Optionally, an explicit address for * friendbot (by default: this calls the Soroban RPC - * {@link Server.getNetwork} method to try to discover this network's - * Friendbot url). - * - * @returns {Promise} an {@link Account} object for the created + * {@link module:rpc.Server#getNetwork | getNetwork} method to try to + * discover this network's Friendbot url). + * @returns {Promise} An {@link Account} object for the created * account, or the existing account if it's already funded with the * populated sequence number (note that the account will not be "topped * off" if it already exists) + * @throws If Friendbot is not configured on this network or request failure * - * @throws if Friendbot is not configured on this network or request failure + * @see {@link https://developers.stellar.org/docs/learn/networks#friendbot | Friendbot docs} + * @see {@link module:Friendbot.Api.Response} * - * @see - * https://developers.stellar.org/docs/fundamentals-and-concepts/testnet-and-pubnet#friendbot - * @see Friendbot.Response * @example * server * .requestAirdrop("GBZC6Y2Y7Q3ZQ2Y4QZJ2XZ3Z5YXZ6Z7Z2Y4QZJ2XZ3Z5YXZ6Z7Z2Y4") diff --git a/src/rpc/transaction.ts b/src/rpc/transaction.ts index 8ec79d252..6e7ec5250 100644 --- a/src/rpc/transaction.ts +++ b/src/rpc/transaction.ts @@ -7,7 +7,6 @@ import { import { Api } from './api'; import { parseRawSimulation } from './parsers'; -import type { Server } from './server'; function isSorobanTransaction(tx: Transaction): boolean { if (tx.operations.length !== 1) { @@ -29,18 +28,20 @@ function isSorobanTransaction(tx: Transaction): boolean { /** * Combines the given raw transaction alongside the simulation results. * If the given transaction already has authorization entries in a host - * function invocation (see {@link Operation.invokeHostFunction}), **the - * simulation entries are ignored**. + * function invocation (see {@link Operation.invokeHostFunction}), **the + * simulation entries are ignored**. * - * @param raw the initial transaction, w/o simulation applied - * @param simulation the Soroban RPC simulation result (see - * {@link Server.simulateTransaction}) + * If the given transaction already has authorization entries in a host function + * invocation (see {@link Operation.invokeHostFunction}), **the simulation + * entries are ignored**. * - * @returns a new, cloned transaction with the proper auth and resource (fee, - * footprint) simulation data applied + * @param {Transaction|FeeBumpTransaction} raw the initial transaction, w/o simulation applied + * @param {Api.SimulateTransactionResponse|Api.RawSimulateTransactionResponse} simulation the Soroban RPC simulation result (see {@link module:rpc.Server#simulateTransaction}) + * @returns {TransactionBuilder} a new, cloned transaction with the proper auth and resource (fee, footprint) simulation data applied * - * @see {Server.simulateTransaction} - * @see {Server.prepareTransaction} + * @memberof module:rpc + * @see {@link module:rpc.Server#simulateTransaction} + * @see {@link module:rpc.Server#prepareTransaction} */ export function assembleTransaction( raw: Transaction | FeeBumpTransaction, diff --git a/src/stellartoml/index.ts b/src/stellartoml/index.ts index d9c8af037..315d558fe 100644 --- a/src/stellartoml/index.ts +++ b/src/stellartoml/index.ts @@ -4,32 +4,43 @@ import { httpClient } from "../http-client"; import { Config } from "../config"; -/** the maximum size of stellar.toml file */ +/** @module StellarToml */ + +/** + * The maximum size of stellar.toml file, in bytes + * @constant {number} + * @default 102400 + */ export const STELLAR_TOML_MAX_SIZE = 100 * 1024; // axios timeout doesn't catch missing urls, e.g. those with no response // so we use the axios cancel token to ensure the timeout const CancelToken = httpClient.CancelToken; -/** Resolver allows resolving `stellar.toml` files. */ +/** + * Resolver allows resolving `stellar.toml` files. + * @memberof module:StellarToml + * @hideconstructor + */ export class Resolver { /** * Returns a parsed `stellar.toml` file for a given domain. - * ```js - * StellarSdk.Resolver.resolve('acme.com') + * @see {@link https://developers.stellar.org/docs/tokens/publishing-asset-info | Stellar.toml doc} + * + * @param {string} domain Domain to get stellar.toml file for + * @param {object} [opts] Options object + * @param {boolean} [opts.allowHttp=false] - Allow connecting to http servers. This must be set to false in production deployments! + * @param {number} [opts.timeout=0] - Allow a timeout. Allows user to avoid nasty lag due to TOML resolve issue. + * @returns {Promise} A `Promise` that resolves to the parsed stellar.toml object + * + * @example + * StellarSdk.StellarToml.Resolver.resolve('acme.com') * .then(stellarToml => { * // stellarToml in an object representing domain stellar.toml file. * }) * .catch(error => { * // stellar.toml does not exist or is invalid * }); - * ``` - * @see Stellar.toml doc - * @param {string} domain Domain to get stellar.toml file for - * @param {object} [opts] Options object - * @param {boolean} [opts.allowHttp] - Allow connecting to http servers, default: `false`. This must be set to false in production deployments! - * @param {number} [opts.timeout] - Allow a timeout, default: 0. Allows user to avoid nasty lag due to TOML resolve issue. - * @returns {Promise} A `Promise` that resolves to the parsed stellar.toml object */ // eslint-disable-next-line require-await public static async resolve( diff --git a/src/utils.ts b/src/utils.ts index 3186a51ff..9a2a46b3d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,13 +1,20 @@ import { Transaction } from "@stellar/stellar-base"; +/** + * Miscellaneous utilities. + * + * @hideconstructor + */ export class Utils { /** - * Verifies if the current date is within the transaction's timebonds + * Verifies if the current date is within the transaction's timebounds + * + * @param {Transaction} transaction The transaction whose timebounds will be validated. + * @param {number} [gracePeriod=0] An additional window of time that should be considered valid on either end of the transaction's time range. + * + * @returns {boolean} Returns true if the current time is within the transaction's [minTime, maxTime] range. * * @static - * @function - * @param {Transaction} transaction the transaction whose timebonds will be validated. - * @returns {boolean} returns true if the current time is within the transaction's [minTime, maxTime] range. */ static validateTimebounds( transaction: Transaction, diff --git a/src/webauth/errors.ts b/src/webauth/errors.ts index 4126ea6e0..6a97bbdd9 100644 --- a/src/webauth/errors.ts +++ b/src/webauth/errors.ts @@ -1,12 +1,20 @@ /* eslint-disable no-proto */ +/** + * InvalidChallengeError is raised when a challenge transaction does not meet + * the requirements for a SEP-10 challenge transaction (for example, a non-zero + * sequence number). + * @memberof module:WebAuth + * @category Errors + * + * @param {string} message Human-readable error message. + */ export class InvalidChallengeError extends Error { - public __proto__: InvalidChallengeError; - - constructor(message: string) { - const trueProto = new.target.prototype; - super(message); - this.__proto__ = trueProto; - this.constructor = InvalidChallengeError; - this.name = "InvalidChallengeError"; - } - } \ No newline at end of file + public __proto__: InvalidChallengeError; + constructor(message: string) { + const trueProto = new.target.prototype; + super(message); + this.__proto__ = trueProto; + this.constructor = InvalidChallengeError; + this.name = "InvalidChallengeError"; + } +} diff --git a/src/webauth/index.ts b/src/webauth/index.ts index b6a43f27f..e63282485 100644 --- a/src/webauth/index.ts +++ b/src/webauth/index.ts @@ -1,2 +1,2 @@ export * from './utils'; -export { InvalidChallengeError } from './errors'; \ No newline at end of file +export { InvalidChallengeError } from './errors'; diff --git a/src/webauth/utils.ts b/src/webauth/utils.ts index 163f419a2..01c289471 100644 --- a/src/webauth/utils.ts +++ b/src/webauth/utils.ts @@ -1,3 +1,9 @@ +/** + * Stellar Web Authentication + * @module WebAuth + * @see {@link https://stellar.org/protocol-10 | SEP-10 Specification} + */ + import randomBytes from "randombytes"; import { Account, @@ -18,11 +24,8 @@ import { InvalidChallengeError } from "./errors"; import { ServerApi } from "../horizon/server_api"; /** - * Returns a valid [SEP-10](https://stellar.org/protocol/sep-10) challenge - * transaction which you can use for Stellar Web Authentication. - * - * @function - * @memberof WebAuth + * Returns a valid {@link https://stellar.org/protocol/sep-10 | SEP-10} + * challenge transaction which you can use for Stellar Web Authentication. * * @param {Keypair} serverKeypair Keypair for server's signing account. * @param {string} clientAccountID The stellar account (G...) or muxed account @@ -43,13 +46,17 @@ import { ServerApi } from "../horizon/server_api"; * @param {string} [clientSigningKey] The public key assigned to the SIGNING_KEY * attribute specified on the stellar.toml hosted on the client domain. Only * necessary when the 'client_domain' parameter is passed. - * * @returns {string} A base64 encoded string of the raw TransactionEnvelope xdr * struct for the transaction. - * @see [SEP-10: Stellar Web Auth](https://stellar.org/protocol/sep-10). + * @throws {Error} Will throw if `clientAccountID is a muxed account, and `memo` + * is present. + * @throws {Error} Will throw if `clientDomain` is provided, but + * `clientSigningKey` is missing + * + * @see {@link https://stellar.org/protocol/sep-10 | SEP-10: Stellar Web Auth} * * @example - * import { Keypair, Networks, WebAuth } from 'stellar-sdk' + * import { Keypair, Networks, WebAuth } from 'stellar-sdk' * * let serverKeyPair = Keypair.fromSecret("server-secret") * let challenge = WebAuth.buildChallengeTx( @@ -134,7 +141,22 @@ export function buildChallengeTx( } /** - * Reads a SEP 10 challenge transaction and returns the decoded transaction and + * A parsed and validated challenge transaction, and some of its constituent details. + * @memberof module:WebAuth + */ +export type ChallengeTxDetails = { + /** The challenge transaction. */ + tx: Transaction; + /** The Stellar public key (master key) used to sign the Manage Data operation. */ + clientAccountId: string; + /** The matched home domain. */ + matchedHomeDomain: string; + /** The memo attached to the transaction, which will be null if not present */ + memo?: string; +} + +/** + * Reads a SEP-10 challenge transaction and returns the decoded transaction and * client account ID contained within. * * It also verifies that the transaction has been signed by the server. @@ -142,29 +164,26 @@ export function buildChallengeTx( * It does not verify that the transaction has been signed by the client or that * any signatures other than the server's on the transaction are valid. Use one * of the following functions to completely verify the transaction: - * - {@link verifyChallengeTxThreshold} - * - {@link verifyChallengeTxSigners} * - * @function - * @memberof WebAuth + * - {@link module:WebAuth~verifyChallengeTxThreshold} + * - {@link module:WebAuth~verifyChallengeTxSigners} * * @param {string} challengeTx SEP0010 challenge transaction in base64. * @param {string} serverAccountID The server's stellar account (public key). * @param {string} networkPassphrase The network passphrase, e.g.: 'Test SDF * Network ; September 2015' (see {@link Networks}) - * @param {string|string[]} [homeDomains] The home domain that is expected to be - * included in the first Manage Data operation's string key. If an array is - * provided, one of the domain names in the array must match. + * @param {string | Array.} homeDomains The home domain that is expected + * to be included in the first Manage Data operation's string key. If an + * array is provided, one of the domain names in the array must match. * @param {string} webAuthDomain The home domain that is expected to be included * as the value of the Manage Data operation with the 'web_auth_domain' key. * If no such operation is included, this parameter is not used. - * - * @returns {Transaction|string|string|string} The actual transaction and the - * stellar public key (master key) used to sign the Manage Data operation, + * @returns {module:WebAuth.ChallengeTxDetails} The actual transaction and the + * Stellar public key (master key) used to sign the Manage Data operation, * the matched home domain, and the memo attached to the transaction, which * will be null if not present. * - * @see [SEP-10: Stellar Web Auth](https://stellar.org/protocol/sep-10). + * @see {@link https://stellar.org/protocol/sep-10 | SEP-10: Stellar Web Auth} */ export function readChallengeTx( challengeTx: string, @@ -362,38 +381,39 @@ export function readChallengeTx( * ignored. * * Errors will be raised if: - * - The transaction is invalid according to {@link readChallengeTx}. + * - The transaction is invalid according to + * {@link module:WebAuth~readChallengeTx}. * - No client signatures are found on the transaction. * - One or more signatures in the transaction are not identifiable as the * server account or one of the signers provided in the arguments. * - The signatures are all valid but do not meet the threshold. * - * @function - * @memberof WebAuth - * * @param {string} challengeTx SEP0010 challenge transaction in base64. * @param {string} serverAccountID The server's stellar account (public key). * @param {string} networkPassphrase The network passphrase, e.g.: 'Test SDF * Network ; September 2015' (see {@link Networks}). * @param {number} threshold The required signatures threshold for verifying * this transaction. - * @param {ServerApi.AccountRecordSigners[]} signerSummary a map of all + * @param {Array.} signerSummary a map of all * authorized signers to their weights. It's used to validate if the * transaction signatures have met the given threshold. - * @param {string|string[]} [homeDomains] The home domain(s) that should be - * included in the first Manage Data operation's string key. Required in + * @param {string | Array.} homeDomains The home domain(s) that should + * be included in the first Manage Data operation's string key. Required in * verifyChallengeTxSigners() => readChallengeTx(). * @param {string} webAuthDomain The home domain that is expected to be included * as the value of the Manage Data operation with the 'web_auth_domain' key, * if present. Used in verifyChallengeTxSigners() => readChallengeTx(). + * @returns {Array.} The list of signers public keys that have signed + * the transaction, excluding the server account ID, given that the threshold + * was met. + * @throws {module:WebAuth.InvalidChallengeError} Will throw if the collective + * weight of the transaction's signers does not meet the necessary threshold + * to verify this transaction. * - * @returns {string[]} The list of signers public keys that have signed the - * transaction, excluding the server account ID, given that the threshold was - * met. + * @see {@link https://stellar.org/protocol/sep-10 | SEP-10: Stellar Web Auth} * - * @see [SEP-10: Stellar Web Auth](https://stellar.org/protocol/sep-10). * @example - * import { Networks, TransactionBuilder, WebAuth } from 'stellar-sdk'; + * import { Networks, TransactionBuilder, WebAuth } from 'stellar-sdk'; * * const serverKP = Keypair.random(); * const clientKP1 = Keypair.random(); @@ -490,30 +510,28 @@ export function verifyChallengeTxThreshold( * ignored. * * Errors will be raised if: - * - The transaction is invalid according to {@link readChallengeTx}. + * - The transaction is invalid according to + * {@link module:WebAuth~readChallengeTx}. * - No client signatures are found on the transaction. * - One or more signatures in the transaction are not identifiable as the * server account or one of the signers provided in the arguments. * - * @function - * @memberof WebAuth - * * @param {string} challengeTx SEP0010 challenge transaction in base64. * @param {string} serverAccountID The server's stellar account (public key). * @param {string} networkPassphrase The network passphrase, e.g.: 'Test SDF * Network ; September 2015' (see {@link Networks}). - * @param {string[]} signers The signers public keys. This list should contain - * the public keys for all signers that have signed the transaction. - * @param {string|string[]} [homeDomains] The home domain(s) that should be - * included in the first Manage Data operation's string key. Required in + * @param {Array.} signers The signers public keys. This list should + * contain the public keys for all signers that have signed the transaction. + * @param {string | Array.} [homeDomains] The home domain(s) that should + * be included in the first Manage Data operation's string key. Required in * readChallengeTx(). * @param {string} webAuthDomain The home domain that is expected to be included * as the value of the Manage Data operation with the 'web_auth_domain' key, * if present. Used in readChallengeTx(). - * @returns {string[]} The list of signers public keys that have signed the - * transaction, excluding the server account ID. + * @returns {Array.} The list of signers public keys that have signed + * the transaction, excluding the server account ID. * - * @see [SEP-10: Stellar Web Auth](https://stellar.org/protocol/sep-10). + * @see {@link https://stellar.org/protocol/sep-10|SEP-10: Stellar Web Auth} * @example * import { Networks, TransactionBuilder, WebAuth } from 'stellar-sdk'; * @@ -572,7 +590,7 @@ export function verifyChallengeTxSigners( serverKP = Keypair.fromPublicKey(serverAccountID); // can throw 'Invalid Stellar public key' } catch (err: any) { throw new Error( - `Couldn't infer keypair from the provided 'serverAccountID': ${ + `Couldn't infer keypair from the provided 'serverAccountID': ${ err.message}`, ); } @@ -684,11 +702,10 @@ export function verifyChallengeTxSigners( /** * Verifies if a transaction was signed by the given account id. * - * @function - * @memberof WebAuth - * @param {Transaction} transaction - * @param {string} accountID - * @returns {boolean}. + * @param {Transaction | FeeBumpTransaction} transaction The signed transaction. + * @param {string} accountID The signer's public key. + * @returns {boolean} Whether or not `accountID` was found to have signed the + * transaction. * * @example * let keypair = Keypair.random(); @@ -713,12 +730,10 @@ export function verifyTxSignedBy( * returning a list of non-repeated signers that were found to have signed the * given transaction. * - * @function - * @memberof WebAuth - * @param {Transaction} transaction the signed transaction. - * @param {string[]} signers The signers public keys. - * @returns {string[]} a list of signers that were found to have signed the - * transaction. + * @param {Transaction | FeeBumpTransaction} transaction The signed transaction. + * @param {Array.} signers The signer's public keys. + * @returns {Array.} A list of signers that were found to have signed + * the transaction. * * @example * let keypair1 = Keypair.random(); @@ -771,4 +786,4 @@ export function gatherTxSigners( } return Array.from(signersFound); -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 993753247..f50b454a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -69,7 +69,7 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.25.4.tgz#7d2a80ce229890edcf4cc259d4d696cb4dae2fcb" integrity sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ== -"@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.24.9": +"@babel/core@^7.12.3", "@babel/core@^7.23.9", "@babel/core@^7.24.9", "@babel/core@^7.7.5": version "7.25.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.25.2.tgz#ed8eec275118d7613e77a352894cd12ded8eba77" integrity sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA== @@ -97,7 +97,7 @@ dependencies: eslint-rule-composer "^0.3.0" -"@babel/generator@^7.25.0", "@babel/generator@^7.25.6": +"@babel/generator@^7.12.11", "@babel/generator@^7.25.0", "@babel/generator@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.25.6.tgz#0df1ad8cb32fe4d2b01d8bf437f153d19342a87c" integrity sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw== @@ -280,14 +280,7 @@ js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/parser@^7.14.7", "@babel/parser@^7.20.15", "@babel/parser@^7.25.0": - version "7.25.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.3.tgz#91fb126768d944966263f0657ab222a642b82065" - integrity sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw== - dependencies: - "@babel/types" "^7.25.2" - -"@babel/parser@^7.23.9", "@babel/parser@^7.25.6": +"@babel/parser@^7.14.7", "@babel/parser@^7.2.3", "@babel/parser@^7.20.15", "@babel/parser@^7.23.9", "@babel/parser@^7.25.0", "@babel/parser@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.25.6.tgz#85660c5ef388cbbf6e3d2a694ee97a38f18afe2f" integrity sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q== @@ -1008,7 +1001,7 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime@^7.8.4": +"@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== @@ -1024,7 +1017,7 @@ "@babel/parser" "^7.25.0" "@babel/types" "^7.25.0" -"@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.24.7", "@babel/traverse@^7.24.8", "@babel/traverse@^7.25.0", "@babel/traverse@^7.25.1", "@babel/traverse@^7.25.2", "@babel/traverse@^7.25.3", "@babel/traverse@^7.25.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.25.6.tgz#04fad980e444f182ecf1520504941940a90fea41" integrity sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ== @@ -1037,7 +1030,7 @@ debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.4.4": +"@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.24.7", "@babel/types@^7.24.8", "@babel/types@^7.25.0", "@babel/types@^7.25.2", "@babel/types@^7.25.6", "@babel/types@^7.4.4": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.25.6.tgz#893942ddb858f32ae7a004ec9d3a76b3463ef8e6" integrity sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw== @@ -1046,6 +1039,11 @@ "@babel/helper-validator-identifier" "^7.24.7" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@colors/colors@1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" @@ -1146,9 +1144,9 @@ eslint-visitor-keys "^3.3.0" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + version "4.11.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.1.tgz#a547badfc719eb3e5f4b556325e542fbe9d7a18f" + integrity sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1165,17 +1163,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" @@ -1184,7 +1182,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": +"@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== @@ -1269,7 +1267,7 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== @@ -1349,13 +1347,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== -"@sinonjs/commons@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-2.0.0.tgz#fd4ca5b063554307e8327b4564bd56d3b73924a3" - integrity sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg== - dependencies: - type-detect "4.0.8" - "@sinonjs/commons@^3.0.0", "@sinonjs/commons@^3.0.1": version "3.0.1" resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" @@ -1371,13 +1362,13 @@ "@sinonjs/commons" "^3.0.1" "@sinonjs/samsam@^8.0.0": - version "8.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.0.tgz#0d488c91efb3fa1442e26abea81759dfc8b5ac60" - integrity sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew== + version "8.0.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-8.0.2.tgz#e4386bf668ff36c95949e55a38dc5f5892fc2689" + integrity sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw== dependencies: - "@sinonjs/commons" "^2.0.0" + "@sinonjs/commons" "^3.0.1" lodash.get "^4.4.2" - type-detect "^4.0.8" + type-detect "^4.1.0" "@sinonjs/text-encoding@^0.7.2": version "0.7.3" @@ -1433,15 +1424,22 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/chai@4": - version "4.3.16" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.16.tgz#b1572967f0b8b60bf3f87fe1d854a5604ea70c82" - integrity sha512-PatH4iOdyh3MyWtmHVFXLWCCIhUbopaltqddG9BzB+gMIzee2MJrvd+jouii9Z3wzQJruGWAm7WOMjgfG8hQlQ== +"@types/babel-types@*", "@types/babel-types@^7.0.0": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/babel-types/-/babel-types-7.0.15.tgz#11fb1ab5a4f984d00d1c80a768f6fb8d59f96966" + integrity sha512-JUgfZHUOMbtjopxiOQaaF+Uovk5wpDqpXR+XLWiOivCWSy1FccO30lvNNpCt8geFwq8VmGT2y9OMkOpA0g5O5g== + +"@types/babylon@^6.16.2": + version "6.16.9" + resolved "https://registry.yarnpkg.com/@types/babylon/-/babylon-6.16.9.tgz#7abf03f6591a921fe3171af91433077cd2666e36" + integrity sha512-sEKyxMVEowhcr8WLfN0jJYe4gS4Z9KC2DGz0vqfC7+MXFbmvOF7jSjALC77thvAO2TLgFUPa9vDeOak+AcUrZA== + dependencies: + "@types/babel-types" "*" -"@types/chai@^4.3.19": - version "4.3.19" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.19.tgz#14519f437361d41e84102ed3fbc922ddace3e228" - integrity sha512-2hHHvQBVE2FiSK4eN0Br6snX9MtolHaTo/batnLjlGRhoQzlCL61iVpxoqO7SfFyOw+P/pwv+0zNHzKoGWz9Cw== +"@types/chai@4", "@types/chai@^4.3.19": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== "@types/cookie@^0.4.1": version "0.4.1" @@ -1474,16 +1472,16 @@ "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.5": - version "1.0.5" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" + integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/eventsource@^1.1.12": version "1.1.15" resolved "https://registry.yarnpkg.com/@types/eventsource/-/eventsource-1.1.15.tgz#949383d3482e20557cbecbf3b038368d94b6be27" integrity sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.6" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== @@ -1518,9 +1516,9 @@ integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== "@types/lodash@^4.17.7": - version "4.17.7" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.7.tgz#2f776bcb53adc9e13b2c0dfd493dfcbd7de43612" - integrity sha512-8wTvZawATi/lsmNu10/j2hk1KEP0IvjubqPE3cu1Xz7xfXXt5oCq3SNUz4fMIP4XGF9Ky+Ue2tBA3hcS7LSBlA== + version "4.17.9" + resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.17.9.tgz#0dc4902c229f6b8e2ac5456522104d7b1a230290" + integrity sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w== "@types/markdown-it@^14.1.1": version "14.1.2" @@ -1540,20 +1538,27 @@ resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.8.tgz#a7eff5816e070c3b4d803f1d3cd780c4e42934a1" integrity sha512-HfMcUmy9hTMJh66VNcmeC9iVErIZJli2bszuXc6julh5YGuRb/W5OnkHjwLNYdFlMis0sY3If5SEAp+PktdJjw== -"@types/node@*", "@types/node@>=10.0.0", "@types/node@^20.14.11": - version "20.14.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.11.tgz#09b300423343460455043ddd4d0ded6ac579b74b" - integrity sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA== +"@types/node@*", "@types/node@>=10.0.0": + version "22.6.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.6.1.tgz#e531a45f4d78f14a8468cb9cdc29dc9602afc7ac" + integrity sha512-V48tCfcKb/e6cVUigLAaJDAILdMP0fUW6BidkPK4GpGjXcfbnoHasCZDwz3N3yVt5we2RHm4XTQCpv0KJz9zqw== dependencies: - undici-types "~5.26.4" + undici-types "~6.19.2" "@types/node@^18.19.7": - version "18.19.41" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.41.tgz#27695cf2cac63f22c202b9217c0bcf3fb192a2f0" - integrity sha512-LX84pRJ+evD2e2nrgYCHObGWkiQJ1mL+meAgbvnwk/US6vmMY7S2ygBTGV2Jw91s9vUsLSXeDEkUHZIJGLrhsg== + version "18.19.50" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.50.tgz#8652b34ee7c0e7e2004b3f08192281808d41bf5a" + integrity sha512-xonK+NRrMBRtkL1hVCc3G+uXtjh1Al4opBLjqVmipe5ZAaBYWW6cNAiBVZ1BvmkBhep698rP3UM3aRAdSALuhg== dependencies: undici-types "~5.26.4" +"@types/node@^20.14.11": + version "20.16.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.16.6.tgz#0bf99fcebcee68ecdc2c45b160a10a0fe5c652b8" + integrity sha512-T7PpxM/6yeDE+AdlVysT62BX6/bECZOmQAgiFg5NoBd5MQheZ3tzal7f1wvzfiEcmrcJNRi2zRr2nY2zF+0uqw== + dependencies: + undici-types "~6.19.2" + "@types/randombytes@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/randombytes/-/randombytes-2.0.3.tgz#c83a107ef51ae7a8611a7b964f54b21cb782bbed" @@ -1845,6 +1850,18 @@ accepts@~1.3.4: mime-types "~2.1.34" negotiator "0.6.3" +ace-builds@^1.4.13: + version "1.36.2" + resolved "https://registry.yarnpkg.com/ace-builds/-/ace-builds-1.36.2.tgz#9499bd59e839a335ac4850e74549ca8d849dc554" + integrity sha512-eqqfbGwx/GKjM/EnFu4QtQ+d2NNBu84MGgxoG8R5iyFpcVeQ4p9YlTL+ZzdEJqhdkASqoqOxCSNNGyB6lvMm+A== + +acorn-globals@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf" + integrity sha512-uWttZCk96+7itPxK8xCzY86PnxKTMrReKDqrHzv42VQY0K30PUO8WY13WMOuI+cOdX4EIdzdvQ8k6jkuGRFMYw== + dependencies: + acorn "^4.0.4" + acorn-import-attributes@^1.9.5: version "1.9.5" resolved "https://registry.yarnpkg.com/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz#7eb1557b1ba05ef18b5ed0ec67591bfab04688ef" @@ -1862,6 +1879,16 @@ acorn-walk@^8.1.1: dependencies: acorn "^8.11.0" +acorn@^3.1.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw== + +acorn@^4.0.4, acorn@~4.0.2: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha512-fu2ygVGuMmlzG8ZeRJ0bvR41nsAkxxhbyk8bZ1SS521Z7vmgJFTQQlfz/Mp/nJexGBz+v8sC9bM6+lNgskt4Ug== + acorn@^8.11.0, acorn@^8.12.0, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2, acorn@^8.9.0: version "8.12.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" @@ -1914,6 +1941,15 @@ ajv@^8.0.0, ajv@^8.9.0: json-schema-traverse "^1.0.0" require-from-string "^2.0.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg== + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + ansi-colors@^4.1.3: version "4.1.3" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" @@ -2096,7 +2132,7 @@ arraybuffer.prototype.slice@^1.0.3: is-array-buffer "^3.0.4" is-shared-array-buffer "^1.0.2" -asap@^2.0.0: +asap@^2.0.0, asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== @@ -2138,6 +2174,18 @@ assertion-error@^1.1.0: resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +ast-types@0.12.4, ast-types@^0.12.2: + version "0.12.4" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.12.4.tgz#71ce6383800f24efc9a1a3308f3a6e420a0974d1" + integrity sha512-ky/YVYCbtVAS8TdMIaTiPFHwEpRB5z1hctepJplTr3UW5q8TDrpIMCILyk8pmLxGtn2KCtC/lSn7zOsaI7nzDw== + +ast-types@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2183,9 +2231,9 @@ b4a@^1.6.4: integrity sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg== babel-loader@^9.1.3: - version "9.1.3" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.1.3.tgz#3d0e01b4e69760cc694ee306fe16d358aa1c6f9a" - integrity sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw== + version "9.2.1" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-9.2.1.tgz#04c7835db16c246dd19ba0914418f3937797587b" + integrity sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA== dependencies: find-cache-dir "^4.0.0" schema-utils "^4.0.0" @@ -2233,15 +2281,38 @@ babel-plugin-transform-define@^2.1.4: lodash "^4.17.11" traverse "0.6.6" +babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g== + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g== + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== bare-events@^2.2.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.4.2.tgz#3140cca7a0e11d49b3edc5041ab560659fd8e1f8" - integrity sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q== + version "2.5.0" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.0.tgz#305b511e262ffd8b9d5616b056464f8e1b3329cc" + integrity sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A== base32.js@^0.1.0: version "0.1.0" @@ -2265,6 +2336,20 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" +better-docs@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/better-docs/-/better-docs-2.7.3.tgz#bdeec1b24514bc22562af2a277c2cf527abbe726" + integrity sha512-OEk9e7RQUQbo1DmVo0mdsALZ+mT0SwIen7/DGnN4xKNktXKgz1j7+KQ2pObNHHVSFGu8YMQW/Ig1v6eiTkdnbw== + dependencies: + brace "^0.11.1" + react-ace "^9.5.0" + react-docgen "^5.4.0" + react-frame-component "^5.2.1" + typescript "^4.5.4" + underscore "^1.13.2" + vue-docgen-api "^3.26.0" + vue2-ace-editor "^0.0.15" + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -2328,6 +2413,11 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" +brace@^0.11.0, brace@^0.11.1: + version "0.11.1" + resolved "https://registry.yarnpkg.com/brace/-/brace-0.11.1.tgz#4896fcc9d544eef45f4bb7660db320d3b379fe58" + integrity sha512-Fc8Ne62jJlKHiG/ajlonC4Sd66Pq68fFwK4ihJGNZpGqboc324SQk+lRvMzpPRuJOmfrJefdG8/7JdWX4bzJ2Q== + braces@^3.0.2, braces@^3.0.3, braces@~3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" @@ -2450,6 +2540,24 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== +c8@^7.6.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.14.0.tgz#f368184c73b125a80565e9ab2396ff0be4d732f3" + integrity sha512-i04rtkkcNcCf7zsQcSv/T9EbUn4RXQ6mropeMcjFOsQXQ0iGLAr/xT6TImQg4+U9hmNpN9XdvPkjUL1IzbgxJw== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + cachedir@^2.0.0: version "2.4.0" resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.4.0.tgz#7fef9cf7367233d7c88068fe6e34ed0d355a610d" @@ -2486,6 +2594,11 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g== + camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" @@ -2513,6 +2626,14 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ== + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + chai-as-promised@^7.1.1: version "7.1.2" resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" @@ -2574,6 +2695,13 @@ char-regex@^1.0.2: resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== +character-parser@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/character-parser/-/character-parser-2.2.0.tgz#c7ce28f36d4bcd9744e5ffc2c5fcde1c73261fc0" + integrity sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw== + dependencies: + is-regex "^1.0.3" + charm@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" @@ -2631,6 +2759,13 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +clean-css@^4.1.11: + version "4.2.4" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.4.tgz#733bf46eba4e607c6891ea57c24a989356831178" + integrity sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A== + dependencies: + source-map "~0.6.0" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2672,6 +2807,15 @@ cli-truncate@^4.0.0: slice-ansi "^5.0.0" string-width "^7.0.0" +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA== + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + cliui@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" @@ -2757,7 +2901,7 @@ commander@^10.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== -commander@^2.20.0: +commander@^2.19.0, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2837,6 +2981,16 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +constantinople@^3.0.1, constantinople@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/constantinople/-/constantinople-3.1.2.tgz#d45ed724f57d3d10500017a7d3a889c1381ae647" + integrity sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw== + dependencies: + "@types/babel-types" "^7.0.0" + "@types/babylon" "^6.16.2" + babel-types "^6.26.0" + babylon "^6.18.0" + constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -2874,6 +3028,11 @@ core-js-compat@^3.37.1, core-js-compat@^3.38.0: dependencies: browserslist "^4.23.3" +core-js@^2.4.0: + version "2.6.12" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.12.tgz#d9333dfa7b065e347cc5682219d6f690859cc2ec" + integrity sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ== + core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -3005,6 +3164,11 @@ date-format@^4.0.14: resolved "https://registry.yarnpkg.com/date-format/-/date-format-4.0.14.tgz#7a8e584434fb169a521c8b7aa481f355810d9400" integrity sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg== +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== + debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -3026,7 +3190,7 @@ debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3 dependencies: ms "^2.1.3" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== @@ -3114,6 +3278,11 @@ di@^0.0.1: resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" integrity sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA== +diff-match-patch@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/diff-match-patch/-/diff-match-patch-1.0.5.tgz#abb584d5f10cd1196dfc55aa03701592ae3f7b37" + integrity sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw== + diff@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" @@ -3154,6 +3323,11 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" +doctypes@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/doctypes/-/doctypes-1.1.0.tgz#ea80b106a87538774e8a3a4a5afe293de489e0a9" + integrity sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ== + dom-serialize@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" @@ -3235,10 +3409,10 @@ engine.io-parser@~5.2.1: resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.2.3.tgz#00dc5b97b1f233a23c9398d0209504cf5f94d92f" integrity sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q== -engine.io@~6.5.2: - version "6.5.5" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.5.5.tgz#430b80d8840caab91a50e9e23cb551455195fc93" - integrity sha512-C5Pn8Wk+1vKBoHghJODM63yk8MvrO9EWZUfkAt5HAqIgPE4/8FF0PEGHXtEd40l223+cE5ABWuPzm38PHFXfMA== +engine.io@~6.6.0: + version "6.6.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-6.6.1.tgz#a82b1e5511239a0e95fac14516870ee9138febc8" + integrity sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og== dependencies: "@types/cookie" "^0.4.1" "@types/cors" "^2.8.12" @@ -3272,9 +3446,9 @@ entities@^4.4.0: integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== envinfo@^7.7.3: - version "7.13.0" - resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.13.0.tgz#81fbb81e5da35d74e814941aeab7c325a606fb31" - integrity sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q== + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== environment@^1.0.0: version "1.1.0" @@ -3579,15 +3753,15 @@ eslint-webpack-plugin@^4.2.0: schema-utils "^4.2.0" eslint@^8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3640,7 +3814,7 @@ espree@^9.6.0, espree@^9.6.1: acorn-jsx "^5.3.2" eslint-visitor-keys "^3.4.1" -esprima@^4.0.0: +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -3669,6 +3843,15 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== +estree-to-babel@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/estree-to-babel/-/estree-to-babel-3.2.1.tgz#82e78315275c3ca74475fdc8ac1a5103c8a75bf5" + integrity sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== + dependencies: + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.2.0" + c8 "^7.6.0" + esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" @@ -3938,6 +4121,14 @@ foreground-child@^2.0.0: cross-spawn "^7.0.0" signal-exit "^3.0.2" +foreground-child@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" + integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^4.0.1" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -4285,6 +4476,11 @@ hash-base@~3.0: inherits "^2.0.1" safe-buffer "^5.0.1" +hash-sum@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hash-sum/-/hash-sum-1.0.2.tgz#33b40777754c6432573c120cc3808bbd10d47f04" + integrity sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA== + hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" @@ -4501,6 +4697,11 @@ is-boolean-object@^1.1.0: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-buffer@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" @@ -4537,6 +4738,14 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-expression@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-expression/-/is-expression-3.0.0.tgz#39acaa6be7fd1f3471dc42c7416e61c24317ac9f" + integrity sha512-vyMeQMq+AiH5uUnoBfMTwf18tO3bM6k1QXBE9D6ueAAquEfCZe3AJPtud9g6qS0+4X8xA7ndpZiDyeb2l2qOBw== + dependencies: + acorn "~4.0.2" + object-assign "^4.0.1" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" @@ -4629,7 +4838,12 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4: +is-promise@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-regex@^1.0.3, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -4808,7 +5022,7 @@ istanbul-lib-source-maps@^4.0.0, istanbul-lib-source-maps@^4.0.1: istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^3.0.2, istanbul-reports@^3.0.5: +istanbul-reports@^3.0.2, istanbul-reports@^3.0.5, istanbul-reports@^3.1.4: version "3.1.7" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== @@ -4847,7 +5061,12 @@ jest-worker@^29.7.0: merge-stream "^2.0.0" supports-color "^8.0.0" -js-tokens@^4.0.0: +js-stringify@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/js-stringify/-/js-stringify-1.0.2.tgz#1736fddfd9724f28a3682adc6230ae7e4e9679db" + integrity sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g== + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== @@ -5001,6 +5220,14 @@ jsprim@^1.2.2: json-schema "0.4.0" verror "1.10.0" +jstransformer@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3" + integrity sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A== + dependencies: + is-promise "^2.0.0" + promise "^7.0.1" + just-extend@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-6.2.0.tgz#b816abfb3d67ee860482e7401564672558163947" @@ -5096,6 +5323,13 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" @@ -5108,6 +5342,11 @@ klaw@^3.0.0: dependencies: graceful-fs "^4.1.9" +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -5231,12 +5470,17 @@ lodash.get@^4.4.2: resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" integrity sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ== +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21: +lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5271,6 +5515,18 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.5" +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg== + +loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + loupe@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" @@ -5278,6 +5534,14 @@ loupe@^2.3.6: dependencies: get-func-name "^2.0.1" +lru-cache@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5440,10 +5704,10 @@ mimic-function@^5.0.0: resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== -minami@^1.1.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/minami/-/minami-1.2.3.tgz#99b6dcdfb2f0a54da1c9c8f7aa3a327787aaf9f8" - integrity sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw== +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" @@ -5455,7 +5719,7 @@ minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== -minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: +minimatch@^3.0.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -5568,7 +5832,7 @@ negotiator@0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== -neo-async@^2.6.2: +neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -5584,6 +5848,13 @@ nise@^5.1.9: just-extend "^6.2.0" path-to-regexp "^6.2.1" +node-dir@^0.1.10: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg== + dependencies: + minimatch "^3.0.2" + node-emoji@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-2.1.3.tgz#93cfabb5cc7c3653aa52f29d6ffb7927d8047c06" @@ -5696,9 +5967,9 @@ number-is-nan@^1.0.0: integrity sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ== nyc@^17.0.0: - version "17.0.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-17.0.0.tgz#d8943407584242a448a70290b15bb72207fac9fd" - integrity sha512-ISp44nqNCaPugLLGGfknzQwSwt10SSS5IMoPR7GLoMAyS18Iw5js8U7ga2VF9lYuMZ42gOHr3UddZw4WZltxKg== + version "17.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-17.1.0.tgz#b6349a401a62ffeb912bd38ea9a018839fdb6eb1" + integrity sha512-U42vQ4czpKa0QdI1hu950XuNhYqgoM+ZF1HT+VuUHL9hPfDPVvNQyltmMqdE9bUHMVa+8yNbc3QKTj8zQhlVxQ== dependencies: "@istanbuljs/load-nyc-config" "^1.0.0" "@istanbuljs/schema" "^0.1.2" @@ -5707,7 +5978,7 @@ nyc@^17.0.0: decamelize "^1.2.0" find-cache-dir "^3.2.0" find-up "^4.1.0" - foreground-child "^2.0.0" + foreground-child "^3.3.0" get-package-type "^0.1.0" glob "^7.1.6" istanbul-lib-coverage "^3.0.0" @@ -5733,7 +6004,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== @@ -5968,9 +6239,9 @@ parse-asn1@^5.0.0, parse-asn1@^5.1.7: safe-buffer "^5.2.1" parse-imports@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.1.1.tgz#ce52141df24990065d72a446a364bffd595577f4" - integrity sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA== + version "2.2.1" + resolved "https://registry.yarnpkg.com/parse-imports/-/parse-imports-2.2.1.tgz#0a6e8b5316beb5c9905f50eb2bbb8c64a4805642" + integrity sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ== dependencies: es-module-lexer "^1.5.3" slashes "^3.0.12" @@ -6136,6 +6407,11 @@ prettier@^3.3.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.3.tgz#30c54fe0be0d8d12e6ae61dbb10109ea00d53105" integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew== +private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -6153,11 +6429,32 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== +promise@^7.0.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + psl@^1.1.28: version "1.9.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" @@ -6175,6 +6472,111 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" +pug-attrs@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.4.tgz#b2f44c439e4eb4ad5d4ef25cac20d18ad28cc336" + integrity sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ== + dependencies: + constantinople "^3.0.1" + js-stringify "^1.0.1" + pug-runtime "^2.0.5" + +pug-code-gen@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pug-code-gen/-/pug-code-gen-2.0.3.tgz#122eb9ada9b5bf601705fe15aaa0a7d26bc134ab" + integrity sha512-r9sezXdDuZJfW9J91TN/2LFbiqDhmltTFmGpHTsGdrNGp3p4SxAjjXEfnuK2e4ywYsRIVP0NeLbSAMHUcaX1EA== + dependencies: + constantinople "^3.1.2" + doctypes "^1.1.0" + js-stringify "^1.0.1" + pug-attrs "^2.0.4" + pug-error "^1.3.3" + pug-runtime "^2.0.5" + void-elements "^2.0.1" + with "^5.0.0" + +pug-error@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/pug-error/-/pug-error-1.3.3.tgz#f342fb008752d58034c185de03602dd9ffe15fa6" + integrity sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ== + +pug-filters@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pug-filters/-/pug-filters-3.1.1.tgz#ab2cc82db9eeccf578bda89130e252a0db026aa7" + integrity sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg== + dependencies: + clean-css "^4.1.11" + constantinople "^3.0.1" + jstransformer "1.0.0" + pug-error "^1.3.3" + pug-walk "^1.1.8" + resolve "^1.1.6" + uglify-js "^2.6.1" + +pug-lexer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/pug-lexer/-/pug-lexer-4.1.0.tgz#531cde48c7c0b1fcbbc2b85485c8665e31489cfd" + integrity sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA== + dependencies: + character-parser "^2.1.1" + is-expression "^3.0.0" + pug-error "^1.3.3" + +pug-linker@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/pug-linker/-/pug-linker-3.0.6.tgz#f5bf218b0efd65ce6670f7afc51658d0f82989fb" + integrity sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg== + dependencies: + pug-error "^1.3.3" + pug-walk "^1.1.8" + +pug-load@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/pug-load/-/pug-load-2.0.12.tgz#d38c85eb85f6e2f704dea14dcca94144d35d3e7b" + integrity sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg== + dependencies: + object-assign "^4.1.0" + pug-walk "^1.1.8" + +pug-parser@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/pug-parser/-/pug-parser-5.0.1.tgz#03e7ada48b6840bd3822f867d7d90f842d0ffdc9" + integrity sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA== + dependencies: + pug-error "^1.3.3" + token-stream "0.0.1" + +pug-runtime@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/pug-runtime/-/pug-runtime-2.0.5.tgz#6da7976c36bf22f68e733c359240d8ae7a32953a" + integrity sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw== + +pug-strip-comments@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz#cc1b6de1f6e8f5931cf02ec66cdffd3f50eaf8a8" + integrity sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw== + dependencies: + pug-error "^1.3.3" + +pug-walk@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pug-walk/-/pug-walk-1.1.8.tgz#b408f67f27912f8c21da2f45b7230c4bd2a5ea7a" + integrity sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA== + +pug@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pug/-/pug-2.0.4.tgz#ee7682ec0a60494b38d48a88f05f3b0ac931377d" + integrity sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw== + dependencies: + pug-code-gen "^2.0.2" + pug-filters "^3.1.1" + pug-lexer "^4.1.0" + pug-linker "^3.0.6" + pug-load "^2.0.12" + pug-parser "^5.0.1" + pug-runtime "^2.0.5" + pug-strip-comments "^1.0.4" + punycode.js@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" @@ -6195,20 +6597,13 @@ qjobs@^1.2.0: resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== -qs@6.13.0, qs@^6.12.3: +qs@6.13.0, qs@^6.11.0, qs@^6.11.2, qs@^6.12.3: version "6.13.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: side-channel "^1.0.6" -qs@^6.11.0, qs@^6.11.2: - version "6.12.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.3.tgz#e43ce03c8521b9c7fd7f1f13e514e5ca37727754" - integrity sha512-AWJm14H1vVaO/iNZ4/hO+HyaTehuy9nRqVdkTqlJt0HWvBiBIEXFmb4C0DGeYo3Xes9rrEW+TxHsaigCbN5ICQ== - dependencies: - side-channel "^1.0.6" - qs@~6.5.2: version "6.5.3" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" @@ -6259,6 +6654,43 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +react-ace@^9.5.0: + version "9.5.0" + resolved "https://registry.yarnpkg.com/react-ace/-/react-ace-9.5.0.tgz#b6c32b70d404dd821a7e01accc2d76da667ff1f7" + integrity sha512-4l5FgwGh6K7A0yWVMQlPIXDItM4Q9zzXRqOae8KkCl6MkOob7sC1CzHxZdOGvV+QioKWbX2p5HcdOVUv6cAdSg== + dependencies: + ace-builds "^1.4.13" + diff-match-patch "^1.0.5" + lodash.get "^4.4.2" + lodash.isequal "^4.5.0" + prop-types "^15.7.2" + +react-docgen@^5.4.0: + version "5.4.3" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.3.tgz#7d297f73b977d0c7611402e5fc2a168acf332b26" + integrity sha512-xlLJyOlnfr8lLEEeaDZ+X2J/KJoe6Nr9AzxnkdQWush5hz2ZSu66w6iLMOScMmxoSHWpWMn+k3v5ZiyCfcWsOA== + dependencies: + "@babel/core" "^7.7.5" + "@babel/generator" "^7.12.11" + "@babel/runtime" "^7.7.6" + ast-types "^0.14.2" + commander "^2.19.0" + doctrine "^3.0.0" + estree-to-babel "^3.1.0" + neo-async "^2.6.1" + node-dir "^0.1.10" + strip-indent "^3.0.0" + +react-frame-component@^5.2.1: + version "5.2.7" + resolved "https://registry.yarnpkg.com/react-frame-component/-/react-frame-component-5.2.7.tgz#e31c0943be95fdf667c59d6d7fcf18c1dda4d4b2" + integrity sha512-ROjHtSLoSVYUBfTieazj/nL8jIX9rZFmHC0yXEU+dx6Y82OcBEGgU9o7VyHMrBFUN9FuQ849MtIPNNLsb4krbg== + +react-is@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + readable-stream@^2.0.6, readable-stream@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" @@ -6299,6 +6731,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +recast@^0.17.3: + version "0.17.6" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.17.6.tgz#64ae98d0d2dfb10ff92ff5fb9ffb7371823b69fa" + integrity sha512-yoQRMRrK1lszNtbkGyM4kN45AwylV5hMiuEveUBlxytUViWevjvX6w+tzJt1LH4cfUhWt4NZvy3ThIhu6+m5wQ== + dependencies: + ast-types "0.12.4" + esprima "~4.0.0" + private "^0.1.8" + source-map "~0.6.1" + rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -6318,6 +6760,11 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== + regenerator-runtime@^0.14.0: version "0.14.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" @@ -6371,6 +6818,11 @@ release-zalgo@^1.0.0: dependencies: es6-error "^4.0.1" +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" @@ -6441,7 +6893,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.10.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: +resolve@^1.1.6, resolve@^1.10.1, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: version "1.22.8" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== @@ -6473,6 +6925,13 @@ rfdc@^1.3.0, rfdc@^1.4.1: resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.4.1.tgz#778f76c4fb731d93414e8f925fbecf64cce7f6ca" integrity sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA== +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg== + dependencies: + align-text "^0.1.1" + rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" @@ -6649,7 +7108,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.1.0: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -6731,22 +7190,22 @@ socket.io-parser@~4.2.4: debug "~4.3.1" socket.io@^4.7.2: - version "4.7.5" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.7.5.tgz#56eb2d976aef9d1445f373a62d781a41c7add8f8" - integrity sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA== + version "4.8.0" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-4.8.0.tgz#33d05ae0915fad1670bd0c4efcc07ccfabebe3b1" + integrity sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA== dependencies: accepts "~1.3.4" base64id "~2.0.0" cors "~2.8.5" debug "~4.3.2" - engine.io "~6.5.2" + engine.io "~6.6.0" socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" sodium-native@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-4.1.1.tgz#109bc924dd55c13db87c6dd30da047487595723c" - integrity sha512-LXkAfRd4FHtkQS4X6g+nRcVaN7mWVNepV06phIsC6+IZFvGh1voW5TNQiQp2twVaMf05gZqQjuS+uWLM6gHhNQ== + version "4.2.0" + resolved "https://registry.yarnpkg.com/sodium-native/-/sodium-native-4.2.0.tgz#d0bae0c90da22b3f8f4d879aff2d3dfadba3862d" + integrity sha512-rdJRAf/RE/IRFUUoUsz10slNAQDTGz5ChpIeR1Ti0BtGYstl6Uok4hHALPBdnFcLml6qXJ2pDd0/De09mPa6mg== dependencies: node-gyp-build "^4.8.0" @@ -6758,11 +7217,16 @@ source-map-support@^0.5.16, source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + spawn-command@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" @@ -6884,9 +7348,9 @@ streamroller@^3.1.5: fs-extra "^8.1.0" streamx@^2.15.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.18.0.tgz#5bc1a51eb412a667ebfdcd4e6cf6a6fc65721ac7" - integrity sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ== + version "2.20.1" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.20.1.tgz#471c4f8b860f7b696feb83d5b125caab2fdbb93c" + integrity sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA== dependencies: fast-fifo "^1.3.2" queue-tick "^1.0.1" @@ -7004,6 +7468,13 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -7110,9 +7581,9 @@ terser-webpack-plugin@^5.3.10: terser "^5.26.0" terser@^5.26.0: - version "5.31.3" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.31.3.tgz#b24b7beb46062f4653f049eea4f0cd165d0f0c38" - integrity sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA== + version "5.33.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.33.0.tgz#8f9149538c7468ffcb1246cfec603c16720d2db1" + integrity sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -7166,6 +7637,11 @@ tmp@^0.2.1: resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og== + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -7183,6 +7659,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +token-stream@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/token-stream/-/token-stream-0.0.1.tgz#ceeefc717a76c4316f126d0b9dbaa55d7e7df01a" + integrity sha512-nfjOAu/zAWmX9tgwi5NRp7O7zTDUD1miHiB40klUnAh9qnL1iXdgzcz/i5dMaL5jahcBAaSfmNOBBJBLJW8TEg== + toml@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" @@ -7211,6 +7692,11 @@ ts-expose-internals-conditionally@1.0.0-empty.0: resolved "https://registry.yarnpkg.com/ts-expose-internals-conditionally/-/ts-expose-internals-conditionally-1.0.0-empty.0.tgz#fd9e5acb481466b0f5936f6e246eb37d0c3ceb28" integrity sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw== +ts-map@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ts-map/-/ts-map-1.0.3.tgz#1c4d218dec813d2103b7e04e4bcf348e1471c1ff" + integrity sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w== + ts-node@^10.9.2: version "10.9.2" resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" @@ -7240,7 +7726,7 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.6.2: +tslib@^2.0.1, tslib@^2.6.2: version "2.7.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== @@ -7279,7 +7765,7 @@ type-detect@4.0.8: resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== -type-detect@^4.0.0, type-detect@^4.0.8, type-detect@^4.1.0: +type-detect@^4.0.0, type-detect@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== @@ -7295,9 +7781,9 @@ type-fest@^0.8.0: integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== type-fest@^4.4.0: - version "4.22.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.22.1.tgz#cc493ba0c1fb7faecb80d13a70525a75afd9d8d6" - integrity sha512-9tHNEa0Ov81YOopiVkcCJVz5TM6AEQ+CHHjFIktqPnE3NV0AHIkx+gh9tiCl58m/66wWxkOC9eltpa75J4lQPA== + version "4.26.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.26.1.tgz#a4a17fa314f976dd3e6d6675ef6c775c16d7955e" + integrity sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg== type-is@~1.6.18: version "1.6.18" @@ -7404,9 +7890,9 @@ typedarray@^0.0.6: integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== "typescript-5.6@npm:typescript@~5.6.0-0": - version "5.6.0-dev.20240719" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.0-dev.20240719.tgz#1bee8182303b6f4cdfb7a0b97d721aeea5ef7fc9" - integrity sha512-gwHt3fdLbe+LLgZJnPaGZ7v9MHTkjrqjf4NpxznO0SmFVSu7cEd8IwEsePtmQQZAX3FtPdgfwDmeNktid848Hw== + version "5.6.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" + integrity sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw== "typescript-5.7@npm:typescript@~5.7.0-0": version "5.7.0-dev.20240924" @@ -7418,6 +7904,16 @@ typescript@5.3.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@^3.2.2: + version "3.9.10" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" + integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== + +typescript@^4.5.4: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + typescript@^5.6.2: version "5.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.2.tgz#d1de67b6bef77c41823f822df8f0b3bcff60a5a0" @@ -7433,6 +7929,21 @@ uc.micro@^2.0.0, uc.micro@^2.1.0: resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== +uglify-js@^2.6.1: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w== + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q== + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" @@ -7443,7 +7954,7 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -underscore@~1.13.2: +underscore@^1.13.2, underscore@~1.13.2: version "1.13.7" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== @@ -7560,6 +8071,15 @@ v8-compile-cache-lib@^3.0.1: resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== +v8-to-istanbul@^9.0.0: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -7599,11 +8119,42 @@ vm-browserify@^1.1.2: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -void-elements@^2.0.0: +void-elements@^2.0.0, void-elements@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" integrity sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung== +vue-docgen-api@^3.26.0: + version "3.26.0" + resolved "https://registry.yarnpkg.com/vue-docgen-api/-/vue-docgen-api-3.26.0.tgz#2afc6a39e72862fbbc60ceb8510c681749f05460" + integrity sha512-ujdg4i5ZI/wE46RZQMFzKnDGyhEuPCu+fMA86CAd9EIek/6+OqraSVBm5ZkLrbEd5f8xxdnqMU4yiSGHHeao/Q== + dependencies: + "@babel/parser" "^7.2.3" + "@babel/types" "^7.0.0" + ast-types "^0.12.2" + hash-sum "^1.0.2" + lru-cache "^4.1.5" + pug "^2.0.3" + recast "^0.17.3" + ts-map "^1.0.3" + typescript "^3.2.2" + vue-template-compiler "^2.0.0" + +vue-template-compiler@^2.0.0: + version "2.7.16" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz#c81b2d47753264c77ac03b9966a46637482bb03b" + integrity sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ== + dependencies: + de-indent "^1.0.2" + he "^1.2.0" + +vue2-ace-editor@^0.0.15: + version "0.0.15" + resolved "https://registry.yarnpkg.com/vue2-ace-editor/-/vue2-ace-editor-0.0.15.tgz#569b208e54ae771ae1edd3b8902ac42f0edc74e3" + integrity sha512-e3TR9OGXc71cGpvYcW068lNpRcFt3+OONCC81oxHL/0vwl/V3OgqnNMw2/RRolgQkO/CA5AjqVHWmANWKOtNnQ== + dependencies: + brace "^0.11.0" + watchpack@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.2.tgz#2feeaed67412e7c33184e5a79ca738fbd38564da" @@ -7748,11 +8299,29 @@ wildcard@^2.0.0: resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg== + +with@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/with/-/with-5.1.1.tgz#fa4daa92daf32c4ea94ed453c81f04686b575dfe" + integrity sha512-uAnSsFGfSpF6DNhBXStvlZILfHJfJu4eUkfbRGk94kGO1Ta7bg6FwfvoOhhyHAJuFbCw+0xk4uJ3u57jLvlCJg== + dependencies: + acorn "^3.1.0" + acorn-globals "^3.0.0" + word-wrap@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q== + workerpool@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" @@ -7825,6 +8394,11 @@ y18n@^5.0.5: resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" @@ -7893,6 +8467,16 @@ yargs@^16.0.0, yargs@^16.1.1, yargs@^16.2.0: y18n "^5.0.5" yargs-parser "^20.2.2" +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A== + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"