├── .github
└── workflows
│ └── npm-publish.yml
├── .gitignore
├── .npmignore
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── src
├── ClockworkProvider.ts
├── accounts
│ ├── Thread.ts
│ └── index.ts
├── constants
│ └── index.ts
├── index.ts
├── models
│ ├── ClockData.ts
│ ├── CrateInfo.ts
│ ├── ExecContext.ts
│ ├── SerializableInstruction.ts
│ ├── ThreadSettings.ts
│ ├── Trigger.ts
│ ├── TriggerContext.ts
│ └── index.ts
├── programs
│ └── thread
│ │ ├── idl.json
│ │ └── types.ts
└── utils.ts
├── tests
└── ThreadProgram.test.ts
├── tsconfig.json
└── yarn.lock
/.github/workflows/npm-publish.yml:
--------------------------------------------------------------------------------
1 | name: Publish Package to npmjs
2 | on:
3 | workflow_dispatch:
4 | # on:
5 | # push:
6 | # branches:
7 | # - main
8 |
9 | jobs:
10 | publish:
11 | name: Publish
12 | runs-on: ubuntu-latest
13 | steps:
14 | - name: Checkout
15 | uses: actions/checkout@v3
16 | - name: Setup Node
17 | uses: actions/setup-node@v3
18 | with:
19 | node-version: '16.x'
20 | registry-url: https://registry.npmjs.org/
21 | - name: Install Dependencies
22 | run: npm install
23 | - name: Build Library
24 | run: npm run build
25 | - name: Publish
26 | run: npm publish --access public
27 | env:
28 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
29 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | lib
3 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | src
2 | tests
3 | tsconfig.json
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Clockwork
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Clockwork SDK
2 | Clockwork Typescript SDK
3 |
4 |
9 |
10 | ## Getting Started
11 |
12 | For a quickstart guide and in depth tutorials, see the [Clockwork Docs](https://docs.clockwork.xyz/about/readme).
13 | To jump straight to examples, go [here](https://github.com/clockwork-xyz/sdk/tree/main/tests). For the latest Rust API documentation, see [Clockwork Rust SDK](https://docs.rs/clockwork-sdk/latest/clockwork_sdk/).
14 |
15 | ## Note
16 |
17 | - **Clockwork SDK is in active development, so all APIs are subject to change.**
18 | - **This code is unaudited. Use at your own risk.**
19 |
20 | ## Usage
21 |
22 | First, initialize a `ClockworkProvider`
23 |
24 | ```rust
25 | const wallet = new NodeWallet(new Keypair());
26 | const connection = new Connection(clusterApiUrl("devnet"));
27 | const clockworkProvider = new ClockworkProvider(wallet, connection);
28 |
29 | #or
30 | const anchorProvider = new anchor.AnchorProvider(
31 | connection,
32 | wallet,
33 | anchor.AnchorProvider.defaultOptions()
34 | );
35 | const provider = new ClockworkProvider.fromAnchorProvider(provider);
36 | ```
37 |
38 | Get Thread Address
39 |
40 | ```rust
41 | const [pubkey, bump] = provider.getThreadPDA(
42 | wallet.publicKey,
43 | "ThreadProgramTest"
44 | );
45 | ```
46 |
47 | Initialize a Thread
48 |
49 | ```rust
50 | const ix = await provider.threadCreate(
51 | wallet.publicKey, // authority
52 | "ThreadProgramTest", // id
53 | [], // instructions to execute
54 | { now: {} }, // thread trigger
55 | 0.1 * LAMPORTS_PER_SOL // amount to send to the thread
56 | );
57 | const tx = new Transaction().add(ix);
58 | const signature = await provider.anchorProvider.sendAndConfirm(tx);
59 | ```
60 |
61 | Get Thread Data Deserialized
62 |
63 | ```rust
64 | const threadAccount = await provider.getThreadAccount(threadPubkey);
65 | ```
66 |
67 | Pause/Resume/Reset/Delete/ Thread
68 |
69 | ```rust
70 | const ix = await provider.threadPause(wallet.publicKey, threadPubkey);
71 | const ix = await provider.threadResume(wallet.publicKey, threadPubkey);
72 | const ix = await provider.threadReset(wallet.publicKey, threadPubkey);
73 | const ix = await provider.threadDelete(wallet.publicKey, threadPubkey);
74 | ```
75 |
76 | Update a Thread
77 |
78 | ```rust
79 | const ix = await provider.threadUpdate(wallet.publicKey, threadPubkey, {
80 | name: "TestUpdateThread",
81 | rateLimit: new BN(32),
82 | trigger: { now: {} },
83 | });
84 | const tx = new Transaction().add(ix);
85 | const signature = await provider.anchorProvider.sendAndConfirm(tx);
86 | ```
87 |
88 | Withdraw from Thread
89 |
90 | ```rust
91 | const ix = await provider.threadWithdraw(
92 | wallet.publicKey,
93 | threadPubkey,
94 | 0.01 * LAMPORTS_PER_SOL
95 | );
96 | const tx = new Transaction().add(ix);
97 | const signature = await provider.anchorProvider.sendAndConfirm(tx);
98 | ```
99 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@clockwork-xyz/sdk",
3 | "author": "Clockwork",
4 | "version": "0.3.4",
5 | "description": "Clockwork Typescript SDK",
6 | "license": "MIT",
7 | "homepage": "https://github.com/clockwork-xyz/sdk",
8 | "bugs": {
9 | "url": "https://github.com/clockwork-xyz/sdk/issues"
10 | },
11 | "repository": {
12 | "type": "git",
13 | "url": "https://github.com/clockwork-xyz/sdk.git"
14 | },
15 | "publishConfig": {
16 | "access": "public"
17 | },
18 | "keywords": [
19 | "Solana",
20 | "Clockwork",
21 | "SDK"
22 | ],
23 | "main": "lib/index.js",
24 | "types": "lib/index.d.ts",
25 | "declaration": true,
26 | "strict": true,
27 | "outDir": "./lib",
28 | "scripts": {
29 | "start": "ts-node src/index.ts",
30 | "build": "tsc",
31 | "test": "mocha --timeout 600000 --reporter spec --require ts-node/register tests/**/*.test.ts",
32 | "test:thread": "mocha --timeout 600000 --reporter spec --require ts-node/register tests/ThreadProgram.test.ts"
33 | },
34 | "devDependencies": {
35 | "@types/chai": "^4.3.4",
36 | "@types/mocha": "^10.0.1",
37 | "@types/node": "^18.14.0",
38 | "chai": "^4.3.7",
39 | "mocha": "^10.2.0",
40 | "nodemon": "^2.0.20",
41 | "ts-node": "^10.9.1",
42 | "typescript": "^4.9.5"
43 | },
44 | "dependencies": {
45 | "@coral-xyz/anchor": "^0.26.0",
46 | "@solana/web3.js": "^1.73.2"
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/src/ClockworkProvider.ts:
--------------------------------------------------------------------------------
1 | import * as anchor from "@coral-xyz/anchor";
2 | import {
3 | ConfirmOptions,
4 | Connection,
5 | PublicKey,
6 | Transaction,
7 | TransactionInstruction,
8 | } from "@solana/web3.js";
9 |
10 | import { ThreadProgram } from "./programs/thread/types";
11 | import ThreadProgramIdl from "./programs/thread/idl.json";
12 |
13 | import { Thread } from "./accounts";
14 | import { ThreadSettingsInput, TriggerInput } from "./models";
15 | import {
16 | parseThreadSettingsInput,
17 | parseTransactionInstruction,
18 | parseTransactionInstructions,
19 | } from "./utils";
20 |
21 | /**
22 | * Wallet interface for objects that can be used to sign provider transactions.
23 | */
24 | export interface ClockworkProviderWallet {
25 | signTransaction(tx: Transaction): Promise;
26 | signAllTransactions(txs: Transaction[]): Promise;
27 | publicKey: PublicKey;
28 | }
29 |
30 | class ClockworkProvider {
31 | threadProgram: anchor.Program;
32 | anchorProvider: anchor.AnchorProvider;
33 |
34 | constructor(
35 | wallet: ClockworkProviderWallet,
36 | connection: Connection,
37 | opts: ConfirmOptions = anchor.AnchorProvider.defaultOptions()
38 | ) {
39 | this.anchorProvider = new anchor.AnchorProvider(connection, wallet, opts);
40 | this.threadProgram = new anchor.Program(
41 | ThreadProgramIdl as anchor.Idl as ThreadProgram,
42 | ThreadProgramIdl.metadata.address,
43 | this.anchorProvider
44 | );
45 | }
46 |
47 | /**
48 | * Build a ClockworkProvider from an AnchorProvider
49 | *
50 | * @param authority thread authority
51 | */
52 | static fromAnchorProvider(provider: anchor.AnchorProvider): ClockworkProvider {
53 | const clockworkProvider = new ClockworkProvider(
54 | provider.wallet,
55 | provider.connection,
56 | provider.opts
57 | );
58 | return clockworkProvider;
59 | }
60 |
61 | /**
62 | * Get Thread PDA. Returns the public key and bump.
63 | *
64 | * @param authority thread authority
65 | * @param id thread id
66 | */
67 | getThreadPDA(authority: PublicKey, id: string): [PublicKey, number] {
68 | return PublicKey.findProgramAddressSync(
69 | [Buffer.from("thread"), authority.toBuffer(), Buffer.from(id)],
70 | this.threadProgram.programId
71 | );
72 | }
73 |
74 | /**
75 | * Get Thread Account Data Deserialized.
76 | *
77 | * @param threadPubkey thread public key
78 | */
79 | async getThreadAccount(threadPubkey: PublicKey): Promise {
80 | const threadAccount = await this.threadProgram.account.thread.fetch(
81 | threadPubkey
82 | );
83 | return threadAccount;
84 | }
85 |
86 | /**
87 | * Create a new thread.
88 | *
89 | * @param authority thread authority
90 | * @param id thread id
91 | * @param instructions thread instructions
92 | * @param trigger thread trigger
93 | * @param amount amount to transfer to the thread in lamports (default 0)
94 | */
95 | async threadCreate(
96 | authority: PublicKey,
97 | id: string,
98 | instructions: TransactionInstruction[],
99 | trigger: TriggerInput,
100 | amount: number = 0
101 | ): Promise {
102 | const threadPubkey = this.getThreadPDA(authority, id.toString())[0];
103 | return await this.threadProgram.methods
104 | .threadCreate(
105 | new anchor.BN(amount),
106 | Buffer.from(id),
107 | // TODO: parsing can be removed accounts => keys
108 | parseTransactionInstructions(instructions),
109 | trigger
110 | )
111 | .accounts({
112 | authority: authority,
113 | payer: authority,
114 | systemProgram: anchor.web3.SystemProgram.programId,
115 | thread: threadPubkey,
116 | })
117 | .instruction();
118 | }
119 |
120 | /**
121 | * Delete a thread.
122 | *
123 | * @param authority The authority (owner) of the thread.
124 | * @param threadPubkey thread to delete.
125 | * @param closeTo The address to return the data rent lamports to (default payer).
126 | */
127 | async threadDelete(
128 | authority: PublicKey,
129 | threadPubkey: PublicKey,
130 | closeTo: PublicKey = this.threadProgram.provider.publicKey
131 | ): Promise {
132 | return await this.threadProgram.methods
133 | .threadDelete()
134 | .accounts({
135 | authority: authority,
136 | thread: threadPubkey,
137 | closeTo,
138 | })
139 | .instruction();
140 | }
141 |
142 | /**
143 | * Pause a thread.
144 | *
145 | * @param authority The authority (owner) of the thread.
146 | * @param threadPubkey thread to pause.
147 | */
148 | async threadPause(
149 | authority: PublicKey,
150 | threadPubkey: PublicKey
151 | ): Promise {
152 | return await this.threadProgram.methods
153 | .threadPause()
154 | .accounts({
155 | authority: authority,
156 | thread: threadPubkey,
157 | })
158 | .instruction();
159 | }
160 |
161 | /**
162 | * Resume a thread.
163 | *
164 | * @param authority The authority (owner) of the thread.
165 | * @param threadPubkey thread to resume.
166 | */
167 | async threadResume(
168 | authority: PublicKey,
169 | threadPubkey: PublicKey
170 | ): Promise {
171 | return await this.threadProgram.methods
172 | .threadResume()
173 | .accounts({
174 | authority: authority,
175 | thread: threadPubkey,
176 | })
177 | .instruction();
178 | }
179 |
180 | /**
181 | * Reset a thread.
182 | *
183 | * @param authority The authority (owner) of the thread.
184 | * @param threadPubkey thread to reset.
185 | */
186 | async threadReset(authority: PublicKey, threadPubkey: PublicKey): Promise {
187 | return await this.threadProgram.methods
188 | .threadReset()
189 | .accounts({
190 | authority: authority,
191 | thread: threadPubkey,
192 | })
193 | .instruction();
194 | }
195 |
196 | /**
197 | * Withdraw from thread.
198 | *
199 | * @param authority The authority (owner) of the thread.
200 | * @param threadPubkey thread to withdraw from.
201 | * @param payTo The account to withdraw lamports to (default payer)
202 | */
203 | async threadWithdraw(
204 | authority: PublicKey,
205 | threadPubkey: PublicKey,
206 | amount: number,
207 | payTo: PublicKey = this.threadProgram.provider.publicKey
208 | ): Promise {
209 | return await this.threadProgram.methods
210 | .threadWithdraw(new anchor.BN(amount))
211 | .accounts({
212 | authority: authority,
213 | thread: threadPubkey,
214 | payTo,
215 | })
216 | .instruction();
217 | }
218 |
219 | /**
220 | * Update a thread.
221 | *
222 | * @param authority The authority (owner) of the thread.
223 | * @param threadPubkey thread to update.
224 | * @param settings new thread settings.
225 | */
226 | async threadUpdate(
227 | authority: PublicKey,
228 | threadPubkey: PublicKey,
229 | settings: ThreadSettingsInput
230 | ): Promise {
231 | return await this.threadProgram.methods
232 | .threadUpdate(parseThreadSettingsInput(settings))
233 | .accounts({
234 | authority: authority,
235 | thread: threadPubkey,
236 | })
237 | .instruction();
238 | }
239 |
240 | /**
241 | * Add instruction to a thread.
242 | *
243 | * @param authority The authority (owner) of the thread.
244 | * @param threadPubkey thread to add instruction to.
245 | * @param instructions instructions to add.
246 | */
247 | async threadInstructionAdd(
248 | authority: PublicKey,
249 | threadPubkey: PublicKey,
250 | instruction: TransactionInstruction
251 | ): Promise {
252 | return await this.threadProgram.methods
253 | .threadInstructionAdd(parseTransactionInstruction(instruction))
254 | .accounts({
255 | authority: authority,
256 | thread: threadPubkey,
257 | })
258 | .instruction();
259 | }
260 |
261 | /**
262 | * Remove an instruction from a thread.
263 | *
264 | * @param authority The authority (owner) of the thread.
265 | * @param threadPubkey thread to remove instruction from.
266 | * @param index instruction index to be removed.
267 | */
268 | async threadInstructionRemove(
269 | authority: PublicKey,
270 | threadPubkey: PublicKey,
271 | index: number
272 | ): Promise {
273 | return await this.threadProgram.methods
274 | .threadInstructionRemove(new anchor.BN(index))
275 | .accounts({
276 | authority: authority,
277 | thread: threadPubkey,
278 | })
279 | .instruction();
280 | }
281 |
282 | /**
283 | * Get Crate Info.
284 | *
285 | */
286 | async getCrateInfo(): Promise {
287 | return await this.threadProgram.methods.getCrateInfo().accounts({}).instruction();
288 | }
289 | }
290 |
291 | export default ClockworkProvider;
292 |
--------------------------------------------------------------------------------
/src/accounts/Thread.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 | import { PublicKey } from "@solana/web3.js";
3 | import {
4 | ExecContext,
5 | ClockData,
6 | SerializableInstruction,
7 | Trigger,
8 | } from "../models";
9 |
10 | type Thread = {
11 | authority: PublicKey;
12 | bump: number;
13 | createdAt: ClockData;
14 | execContext: null | ExecContext;
15 | fee: BN;
16 | id: Buffer;
17 | instructions: SerializableInstruction[];
18 | name: string;
19 | nextInstruction: null | SerializableInstruction;
20 | paused: boolean;
21 | rateLimit: BN;
22 | trigger: Trigger;
23 | };
24 |
25 | export default Thread;
26 |
--------------------------------------------------------------------------------
/src/accounts/index.ts:
--------------------------------------------------------------------------------
1 | import Thread from "./Thread";
2 |
3 | export { Thread };
4 |
--------------------------------------------------------------------------------
/src/constants/index.ts:
--------------------------------------------------------------------------------
1 | import { PublicKey } from "@solana/web3.js";
2 |
3 | /**
4 | * The stand-in pubkey for delegating a payer address to a worker.
5 | * All workers are re-imbursed by the user for lamports spent during this delegation.
6 | * https://docs.rs/clockwork-utils/latest/clockwork_utils/static.PAYER_PUBKEY.html
7 | */
8 | const PAYER_PUBKEY = new PublicKey(
9 | "C1ockworkPayer11111111111111111111111111111"
10 | );
11 |
12 | export { PAYER_PUBKEY };
13 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import ClockworkProvider from "./ClockworkProvider";
2 | import { Thread } from "./accounts";
3 | import { PAYER_PUBKEY } from "./constants";
4 | import {
5 | ClockData,
6 | ExecContext,
7 | SerializableInstruction,
8 | SerializableAccount,
9 | Trigger,
10 | TriggerInput,
11 | Cron,
12 | Account,
13 | Now,
14 | Epoch,
15 | Slot,
16 | Timestamp,
17 | Pyth,
18 | Equality,
19 | EqualityInput,
20 | GreaterThanOrEqual,
21 | LessThanOrEqual,
22 | ThreadSettings,
23 | ThreadSettingsInput,
24 | CrateInfo,
25 | TriggerContext,
26 | } from "./models";
27 |
28 | import { ThreadProgram } from "./programs/thread/types";
29 | import ThreadProgramIdl from "./programs/thread/idl.json";
30 |
31 | import {
32 | parseThreadSettingsInput,
33 | parseTransactionInstruction,
34 | parseTransactionInstructions,
35 | } from "./utils";
36 |
37 | export {
38 | ClockworkProvider,
39 | Thread,
40 | PAYER_PUBKEY,
41 | ThreadProgram,
42 | ThreadProgramIdl,
43 | parseThreadSettingsInput,
44 | parseTransactionInstruction,
45 | parseTransactionInstructions,
46 | ClockData,
47 | ExecContext,
48 | SerializableInstruction,
49 | SerializableAccount,
50 | Trigger,
51 | TriggerInput,
52 | Cron,
53 | Account,
54 | Now,
55 | Epoch,
56 | Slot,
57 | Timestamp,
58 | Pyth,
59 | Equality,
60 | EqualityInput,
61 | GreaterThanOrEqual,
62 | LessThanOrEqual,
63 | ThreadSettings,
64 | ThreadSettingsInput,
65 | CrateInfo,
66 | TriggerContext,
67 | };
68 |
--------------------------------------------------------------------------------
/src/models/ClockData.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 |
3 | type ClockData = {
4 | /// The current slot.
5 | slot: BN;
6 | /// The bank epoch.
7 | epoch: BN;
8 | /// The current unix timestamp.
9 | unixTimestamp: BN;
10 | };
11 |
12 | export default ClockData;
13 |
--------------------------------------------------------------------------------
/src/models/CrateInfo.ts:
--------------------------------------------------------------------------------
1 | type CrateInfo = {
2 | spec: string;
3 | blob: string;
4 | };
5 |
6 | export default CrateInfo;
7 |
--------------------------------------------------------------------------------
/src/models/ExecContext.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 | import TriggerContext from "./TriggerContext";
3 |
4 | type ExecContext = {
5 | /**
6 | * Index of the next instruction to be executed.
7 | */
8 | execIndex: BN;
9 | /**
10 | * Number of execs since the last tx reimbursement.
11 | */
12 | execsSinceReimbursement: BN;
13 | /**
14 | * Number of execs in this slot.
15 | */
16 | execsSinceSlot: BN;
17 |
18 | /**
19 | * Slot of the last exec
20 | */
21 | lastExecAt: BN;
22 |
23 | /**
24 | * Context for the triggering condition
25 | */
26 | triggerContext: TriggerContext;
27 | };
28 |
29 | export default ExecContext;
30 |
--------------------------------------------------------------------------------
/src/models/SerializableInstruction.ts:
--------------------------------------------------------------------------------
1 | import { PublicKey } from "@solana/web3.js";
2 |
3 | type SerializableAccount = {
4 | /// An account's public key
5 | pubkey: PublicKey;
6 | /// True if an Instruction requires a Transaction signature matching `pubkey`.
7 | isSigner: boolean;
8 | /// True if the `pubkey` can be loaded as a read-write account.
9 | isWritable: boolean;
10 | };
11 |
12 | type SerializableInstruction = {
13 | /// Pubkey of the instruction processor that executes this instruction
14 | programId: PublicKey;
15 | /// Metadata for what accounts should be passed to the instruction processor
16 | accounts: SerializableAccount[];
17 | /// Opaque data passed to the instruction processor
18 | data: Buffer;
19 | };
20 |
21 | export { SerializableInstruction, SerializableAccount };
22 |
--------------------------------------------------------------------------------
/src/models/ThreadSettings.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 | import { SerializableInstruction } from "./SerializableInstruction";
3 | import { TriggerInput } from "./Trigger";
4 |
5 | type ThreadSettings = {
6 | fee: BN | null;
7 | instructions: SerializableInstruction[] | null;
8 | name: string | null;
9 | rateLimit: BN | null;
10 | trigger: TriggerInput | null;
11 | };
12 |
13 | type ThreadSettingsInput = {
14 | fee?: number;
15 | instructions?: SerializableInstruction[];
16 | name?: string;
17 | rateLimit?: number;
18 | trigger?: TriggerInput;
19 | };
20 |
21 | export { ThreadSettings, ThreadSettingsInput };
22 |
--------------------------------------------------------------------------------
/src/models/Trigger.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 | import { PublicKey } from "@solana/web3.js";
3 |
4 | type Account = {
5 | /// The address of the account to monitor.
6 | address: PublicKey;
7 | /// The byte offset of the account data to monitor.
8 | offset: BN;
9 | /// The size of the byte slice to monitor (must be less than 1kb)
10 | size: BN;
11 | };
12 |
13 | /// Allows an thread to be kicked off according to a one-time or recurring schedule.
14 | type Cron = {
15 | /// The schedule in cron syntax. Value must be parsable by the `clockwork_cron` package.
16 | schedule: string;
17 |
18 | /// Boolean value indicating whether triggering moments may be skipped if they are missed (e.g. due to network downtime).
19 | /// If false, any "missed" triggering moments will simply be executed as soon as the network comes back online.
20 | skippable: boolean;
21 | };
22 |
23 | /// Allows an thread to be kicked off as soon as it's created.
24 | type Now = {};
25 |
26 | /// Allows a thread to be kicked off according to a slot.
27 | type Slot = {
28 | slot: BN;
29 | };
30 |
31 | /// Allows a thread to be kicked off according to an epoch number.
32 | type Epoch = {
33 | epoch: BN;
34 | };
35 |
36 | /// Allows a thread to be kicked off accounting to a unix timestamp.
37 | type Timestamp = {
38 | unixTs: BN
39 | };
40 |
41 | /// Allows a thread to be kicked off accounting to a Pyth price feed movement.
42 | type Pyth = {
43 | /// The address of the price feed to monitor.
44 | priceFeed: PublicKey;
45 | /// The equality operator (gte or lte) used to compare prices.
46 | equality: EqualityInput;
47 | /// The limit price to compare the Pyth feed to.
48 | limit: BN;
49 | }
50 |
51 | type GreaterThanOrEqual = {};
52 | type LessThanOrEqual = {};
53 | type Equality = GreaterThanOrEqual | LessThanOrEqual;
54 | type EqualityInput =
55 | | { greaterThanOrEqual: GreaterThanOrEqual }
56 | | { lessThanOrEqual: LessThanOrEqual };
57 |
58 | type Trigger = Account | Cron | Now | Slot | Epoch | Timestamp | Pyth;
59 | type TriggerInput =
60 | | { account: Account }
61 | | { cron: Cron }
62 | | { now: Now }
63 | | { slot: Slot }
64 | | { epoch: Epoch }
65 | | { timestamp: Timestamp }
66 | | { pyth: Pyth };
67 |
68 | export {
69 | Trigger,
70 | TriggerInput,
71 | Account,
72 | Cron,
73 | Now,
74 | Slot,
75 | Epoch,
76 | Timestamp,
77 | Pyth,
78 | GreaterThanOrEqual,
79 | LessThanOrEqual,
80 | Equality,
81 | EqualityInput,
82 | };
83 |
--------------------------------------------------------------------------------
/src/models/TriggerContext.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 |
3 | type AccountTriggerContext = {
4 | dataHash: BN;
5 | };
6 |
7 | type CronTriggerContext = {
8 | startedAt: BN;
9 | };
10 |
11 | type NowTriggerContext = {};
12 |
13 | type SlotTriggerContext = {
14 | startedAt: BN;
15 | };
16 |
17 | type EpochTriggerContext = {
18 | startedAt: BN;
19 | };
20 |
21 | type TimestampTriggerContext = {
22 | startedAt: BN;
23 | };
24 |
25 | type PythTriggerContext = {
26 | price: BN;
27 | };
28 |
29 | type TriggerContext =
30 | | AccountTriggerContext
31 | | CronTriggerContext
32 | | NowTriggerContext
33 | | SlotTriggerContext
34 | | EpochTriggerContext
35 | | TimestampTriggerContext
36 | | PythTriggerContext;
37 |
38 | export default TriggerContext;
39 |
--------------------------------------------------------------------------------
/src/models/index.ts:
--------------------------------------------------------------------------------
1 | import ExecContext from "./ExecContext";
2 | import ClockData from "./ClockData";
3 | import {
4 | SerializableInstruction,
5 | SerializableAccount,
6 | } from "./SerializableInstruction";
7 | import {
8 | Trigger,
9 | TriggerInput,
10 | Cron,
11 | Account,
12 | Now,
13 | Epoch,
14 | Slot,
15 | Timestamp,
16 | Pyth,
17 | Equality,
18 | EqualityInput,
19 | GreaterThanOrEqual,
20 | LessThanOrEqual,
21 | } from "./Trigger";
22 | import { ThreadSettings, ThreadSettingsInput } from "./ThreadSettings";
23 | import CrateInfo from "./CrateInfo";
24 | import TriggerContext from "./TriggerContext";
25 |
26 | export {
27 | ClockData,
28 | ExecContext,
29 | SerializableInstruction,
30 | SerializableAccount,
31 | Trigger,
32 | TriggerInput,
33 | Cron,
34 | Account,
35 | Now,
36 | Epoch,
37 | Slot,
38 | Timestamp,
39 | Pyth,
40 | Equality,
41 | EqualityInput,
42 | GreaterThanOrEqual,
43 | LessThanOrEqual,
44 | ThreadSettings,
45 | ThreadSettingsInput,
46 | CrateInfo,
47 | TriggerContext,
48 | };
49 |
--------------------------------------------------------------------------------
/src/programs/thread/idl.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.16",
3 | "name": "thread_program",
4 | "docs": ["Program for creating transaction threads on Solana."],
5 | "instructions": [
6 | {
7 | "name": "getCrateInfo",
8 | "docs": [
9 | "Return the crate information via `sol_set_return_data/sol_get_return_data`"
10 | ],
11 | "accounts": [
12 | {
13 | "name": "systemProgram",
14 | "isMut": false,
15 | "isSigner": false
16 | }
17 | ],
18 | "args": [],
19 | "returns": {
20 | "defined": "CrateInfo"
21 | }
22 | },
23 | {
24 | "name": "threadExec",
25 | "docs": ["Executes the next instruction on thread."],
26 | "accounts": [
27 | {
28 | "name": "fee",
29 | "isMut": true,
30 | "isSigner": false,
31 | "docs": ["The worker's fee account."]
32 | },
33 | {
34 | "name": "pool",
35 | "isMut": false,
36 | "isSigner": false,
37 | "docs": ["The active worker pool."]
38 | },
39 | {
40 | "name": "signatory",
41 | "isMut": true,
42 | "isSigner": true,
43 | "docs": ["The signatory."]
44 | },
45 | {
46 | "name": "thread",
47 | "isMut": true,
48 | "isSigner": false,
49 | "docs": ["The thread to execute."]
50 | },
51 | {
52 | "name": "worker",
53 | "isMut": false,
54 | "isSigner": false,
55 | "docs": ["The worker."]
56 | }
57 | ],
58 | "args": []
59 | },
60 | {
61 | "name": "threadCreate",
62 | "docs": ["Creates a new transaction thread."],
63 | "accounts": [
64 | {
65 | "name": "authority",
66 | "isMut": false,
67 | "isSigner": true,
68 | "docs": ["The authority (owner) of the thread."]
69 | },
70 | {
71 | "name": "payer",
72 | "isMut": true,
73 | "isSigner": true,
74 | "docs": ["The payer for account initializations."]
75 | },
76 | {
77 | "name": "systemProgram",
78 | "isMut": false,
79 | "isSigner": false,
80 | "docs": ["The Solana system program."]
81 | },
82 | {
83 | "name": "thread",
84 | "isMut": true,
85 | "isSigner": false,
86 | "docs": ["The thread to be created."]
87 | }
88 | ],
89 | "args": [
90 | {
91 | "name": "amount",
92 | "type": "u64"
93 | },
94 | {
95 | "name": "id",
96 | "type": "bytes"
97 | },
98 | {
99 | "name": "instructions",
100 | "type": {
101 | "vec": {
102 | "defined": "SerializableInstruction"
103 | }
104 | }
105 | },
106 | {
107 | "name": "trigger",
108 | "type": {
109 | "defined": "Trigger"
110 | }
111 | }
112 | ]
113 | },
114 | {
115 | "name": "threadDelete",
116 | "docs": [
117 | "Closes an existing thread account and returns the lamports to the owner."
118 | ],
119 | "accounts": [
120 | {
121 | "name": "authority",
122 | "isMut": false,
123 | "isSigner": true,
124 | "docs": ["The authority (owner) of the thread."]
125 | },
126 | {
127 | "name": "closeTo",
128 | "isMut": true,
129 | "isSigner": false,
130 | "docs": ["The address to return the data rent lamports to."]
131 | },
132 | {
133 | "name": "thread",
134 | "isMut": true,
135 | "isSigner": false,
136 | "docs": ["The thread to be delete."]
137 | }
138 | ],
139 | "args": []
140 | },
141 | {
142 | "name": "threadInstructionAdd",
143 | "docs": ["Appends a new instruction to the thread's instruction set."],
144 | "accounts": [
145 | {
146 | "name": "authority",
147 | "isMut": true,
148 | "isSigner": true,
149 | "docs": ["The authority (owner) of the thread."]
150 | },
151 | {
152 | "name": "systemProgram",
153 | "isMut": false,
154 | "isSigner": false,
155 | "docs": ["The Solana system program"]
156 | },
157 | {
158 | "name": "thread",
159 | "isMut": true,
160 | "isSigner": false,
161 | "docs": ["The thread to be paused."]
162 | }
163 | ],
164 | "args": [
165 | {
166 | "name": "instruction",
167 | "type": {
168 | "defined": "SerializableInstruction"
169 | }
170 | }
171 | ]
172 | },
173 | {
174 | "name": "threadInstructionRemove",
175 | "docs": [
176 | "Removes an instruction to the thread's instruction set at the provied index."
177 | ],
178 | "accounts": [
179 | {
180 | "name": "authority",
181 | "isMut": false,
182 | "isSigner": true,
183 | "docs": ["The authority (owner) of the thread."]
184 | },
185 | {
186 | "name": "thread",
187 | "isMut": true,
188 | "isSigner": false,
189 | "docs": ["The thread to be edited."]
190 | }
191 | ],
192 | "args": [
193 | {
194 | "name": "index",
195 | "type": "u64"
196 | }
197 | ]
198 | },
199 | {
200 | "name": "threadKickoff",
201 | "docs": ["Kicks off a thread if its trigger condition is active."],
202 | "accounts": [
203 | {
204 | "name": "signatory",
205 | "isMut": true,
206 | "isSigner": true,
207 | "docs": ["The signatory."]
208 | },
209 | {
210 | "name": "thread",
211 | "isMut": true,
212 | "isSigner": false,
213 | "docs": ["The thread to kickoff."]
214 | },
215 | {
216 | "name": "worker",
217 | "isMut": false,
218 | "isSigner": false,
219 | "docs": ["The worker."]
220 | }
221 | ],
222 | "args": []
223 | },
224 | {
225 | "name": "threadPause",
226 | "docs": ["Pauses an active thread."],
227 | "accounts": [
228 | {
229 | "name": "authority",
230 | "isMut": false,
231 | "isSigner": true,
232 | "docs": ["The authority (owner) of the thread."]
233 | },
234 | {
235 | "name": "thread",
236 | "isMut": true,
237 | "isSigner": false,
238 | "docs": ["The thread to be paused."]
239 | }
240 | ],
241 | "args": []
242 | },
243 | {
244 | "name": "threadResume",
245 | "docs": ["Resumes a paused thread."],
246 | "accounts": [
247 | {
248 | "name": "authority",
249 | "isMut": false,
250 | "isSigner": true,
251 | "docs": ["The authority (owner) of the thread."]
252 | },
253 | {
254 | "name": "thread",
255 | "isMut": true,
256 | "isSigner": false,
257 | "docs": ["The thread to be resumed."]
258 | }
259 | ],
260 | "args": []
261 | },
262 | {
263 | "name": "threadReset",
264 | "docs": ["Resets a thread's next instruction."],
265 | "accounts": [
266 | {
267 | "name": "authority",
268 | "isMut": false,
269 | "isSigner": true,
270 | "docs": ["The authority (owner) of the thread."]
271 | },
272 | {
273 | "name": "thread",
274 | "isMut": true,
275 | "isSigner": false,
276 | "docs": ["The thread to be paused."]
277 | }
278 | ],
279 | "args": []
280 | },
281 | {
282 | "name": "threadUpdate",
283 | "docs": ["Allows an owner to update the mutable properties of a thread."],
284 | "accounts": [
285 | {
286 | "name": "authority",
287 | "isMut": true,
288 | "isSigner": true,
289 | "docs": ["The authority (owner) of the thread."]
290 | },
291 | {
292 | "name": "systemProgram",
293 | "isMut": false,
294 | "isSigner": false,
295 | "docs": ["The Solana system program"]
296 | },
297 | {
298 | "name": "thread",
299 | "isMut": true,
300 | "isSigner": false,
301 | "docs": ["The thread to be updated."]
302 | }
303 | ],
304 | "args": [
305 | {
306 | "name": "settings",
307 | "type": {
308 | "defined": "ThreadSettings"
309 | }
310 | }
311 | ]
312 | },
313 | {
314 | "name": "threadWithdraw",
315 | "docs": ["Allows an owner to withdraw from a thread's lamport balance."],
316 | "accounts": [
317 | {
318 | "name": "authority",
319 | "isMut": false,
320 | "isSigner": true,
321 | "docs": ["The authority (owner) of the thread."]
322 | },
323 | {
324 | "name": "payTo",
325 | "isMut": true,
326 | "isSigner": false,
327 | "docs": ["The account to withdraw lamports to."]
328 | },
329 | {
330 | "name": "thread",
331 | "isMut": true,
332 | "isSigner": false,
333 | "docs": ["The thread to be."]
334 | }
335 | ],
336 | "args": [
337 | {
338 | "name": "amount",
339 | "type": "u64"
340 | }
341 | ]
342 | }
343 | ],
344 | "accounts": [
345 | {
346 | "name": "Thread",
347 | "docs": ["Tracks the current state of a transaction thread on Solana."],
348 | "type": {
349 | "kind": "struct",
350 | "fields": [
351 | {
352 | "name": "authority",
353 | "docs": ["The owner of this thread."],
354 | "type": "publicKey"
355 | },
356 | {
357 | "name": "bump",
358 | "docs": ["The bump, used for PDA validation."],
359 | "type": "u8"
360 | },
361 | {
362 | "name": "createdAt",
363 | "docs": ["The cluster clock at the moment the thread was created."],
364 | "type": {
365 | "defined": "ClockData"
366 | }
367 | },
368 | {
369 | "name": "execContext",
370 | "docs": ["The context of the thread's current execution state."],
371 | "type": {
372 | "option": {
373 | "defined": "ExecContext"
374 | }
375 | }
376 | },
377 | {
378 | "name": "fee",
379 | "docs": [
380 | "The number of lamports to payout to workers per execution."
381 | ],
382 | "type": "u64"
383 | },
384 | {
385 | "name": "id",
386 | "docs": ["The id of the thread, given by the authority."],
387 | "type": "bytes"
388 | },
389 | {
390 | "name": "instructions",
391 | "docs": ["The instructions to be executed."],
392 | "type": {
393 | "vec": {
394 | "defined": "SerializableInstruction"
395 | }
396 | }
397 | },
398 | {
399 | "name": "name",
400 | "docs": ["The name of the thread."],
401 | "type": "string"
402 | },
403 | {
404 | "name": "nextInstruction",
405 | "docs": ["The next instruction to be executed."],
406 | "type": {
407 | "option": {
408 | "defined": "SerializableInstruction"
409 | }
410 | }
411 | },
412 | {
413 | "name": "paused",
414 | "docs": ["Whether or not the thread is currently paused."],
415 | "type": "bool"
416 | },
417 | {
418 | "name": "rateLimit",
419 | "docs": ["The maximum number of execs allowed per slot."],
420 | "type": "u64"
421 | },
422 | {
423 | "name": "trigger",
424 | "docs": ["The triggering event to kickoff a thread."],
425 | "type": {
426 | "defined": "Trigger"
427 | }
428 | }
429 | ]
430 | }
431 | }
432 | ],
433 | "types": [
434 | {
435 | "name": "Trigger",
436 | "docs": ["Trigger"],
437 | "type": {
438 | "kind": "enum",
439 | "variants": [
440 | {
441 | "name": "Account",
442 | "fields": [
443 | {
444 | "name": "address",
445 | "docs": ["The address of the account to monitor"],
446 | "type": "publicKey"
447 | },
448 | {
449 | "name": "offset",
450 | "docs": ["The byte offset of the account data to monitor"],
451 | "type": "u64"
452 | },
453 | {
454 | "name": "size",
455 | "docs": [
456 | "The size of the byte slice to monitor (must be less than 1kb)"
457 | ],
458 | "type": "u64"
459 | }
460 | ]
461 | },
462 | {
463 | "name": "Cron",
464 | "fields": [
465 | {
466 | "name": "schedule",
467 | "docs": [
468 | "The schedule in cron syntax. Value must be parsable by the `clockwork_cron` package"
469 | ],
470 | "type": "string"
471 | },
472 | {
473 | "name": "skippable",
474 | "docs": [
475 | "Boolean value indicating whether triggering moments may be skipped if they are missed (e.g. due to network downtime) If false, any 'missed' triggering moments will simply be executed as soon as the network comes back online."
476 | ],
477 | "type": "bool"
478 | }
479 | ]
480 | },
481 | {
482 | "name": "Now"
483 | },
484 | {
485 | "name": "Slot",
486 | "fields": [
487 | {
488 | "name": "slot",
489 | "docs": ["Slot"],
490 | "type": "u64"
491 | }
492 | ]
493 | },
494 | {
495 | "name": "Epoch",
496 | "fields": [
497 | {
498 | "name": "epoch",
499 | "docs": ["Epoch"],
500 | "type": "u64"
501 | }
502 | ]
503 | },
504 | {
505 | "name": "Timestamp",
506 | "fields": [
507 | {
508 | "name": "unixTs",
509 | "docs": ["Unix timestamp"],
510 | "type": "i64"
511 | }
512 | ]
513 | },
514 | {
515 | "name": "Pyth",
516 | "fields": [
517 | {
518 | "name": "priceFeed",
519 | "docs": ["The address of the price feed to monitor."],
520 | "type": "publicKey"
521 | },
522 | {
523 | "name": "equality",
524 | "docs": ["The equality operator (gte or lte) used to compare prices."],
525 | "type": {
526 | "defined": "Equality"
527 | }
528 | },
529 | {
530 | "name": "limit",
531 | "docs": ["The limit price to compare the Pyth feed to."],
532 | "type": "i64"
533 | }
534 | ]
535 | }
536 | ]
537 | }
538 | },
539 | {
540 | "name": "SerializableInstruction",
541 | "docs": ["Serializable Instruction"],
542 | "type": {
543 | "kind": "struct",
544 | "fields": [
545 | {
546 | "name": "programId",
547 | "docs": [
548 | "Pubkey of the instruction processor that executes this instruction"
549 | ],
550 | "type": "publicKey"
551 | },
552 | {
553 | "name": "accounts",
554 | "docs": [
555 | "Metadata for what accounts should be passed to the instruction processor"
556 | ],
557 | "type": {
558 | "vec": { "defined": "SerializableAccount" }
559 | }
560 | },
561 | {
562 | "name": "data",
563 | "docs": ["Opaque data passed to the instruction processor"],
564 | "type": "bytes"
565 | }
566 | ]
567 | }
568 | },
569 | {
570 | "name": "SerializableAccount",
571 | "docs": ["Serializable Account"],
572 | "type": {
573 | "kind": "struct",
574 | "fields": [
575 | {
576 | "name": "pubkey",
577 | "docs": ["An account's public key"],
578 | "type": "publicKey"
579 | },
580 | {
581 | "name": "isSigner",
582 | "docs": [
583 | "True if an Instruction requires a Transaction signature matching `pubkey`"
584 | ],
585 | "type": "bool"
586 | },
587 | {
588 | "name": "isWritable",
589 | "docs": [
590 | "True if the `pubkey` can be loaded as a read-write account"
591 | ],
592 | "type": "bool"
593 | }
594 | ]
595 | }
596 | },
597 | {
598 | "name": "ClockData",
599 | "docs": ["Clock Data"],
600 | "type": {
601 | "kind": "struct",
602 | "fields": [
603 | {
604 | "name": "slot",
605 | "docs": ["The Current Slot"],
606 | "type": "u64"
607 | },
608 | {
609 | "name": "epoch",
610 | "docs": ["The Bank Epoch"],
611 | "type": "u64"
612 | },
613 | {
614 | "name": "unixTimestamp",
615 | "docs": ["The Current Unix Timestamp"],
616 | "type": "i64"
617 | }
618 | ]
619 | }
620 | },
621 | {
622 | "name": "ExecContext",
623 | "docs": ["The execution context of a particular transaction thread."],
624 | "type": {
625 | "kind": "struct",
626 | "fields": [
627 | {
628 | "name": "execIndex",
629 | "docs": ["Index of the next instruction to be executed."],
630 | "type": "u64"
631 | },
632 | {
633 | "name": "execsSinceReimbursement",
634 | "docs": ["Number of execs since the last tx reimbursement."],
635 | "type": "u64"
636 | },
637 | {
638 | "name": "execsSinceSlot",
639 | "docs": ["Number of execs in this slot."],
640 | "type": "u64"
641 | },
642 | {
643 | "name": "lastExecAt",
644 | "docs": ["Slot of the last exec"],
645 | "type": "u64"
646 | },
647 | {
648 | "name": "triggerContext",
649 | "docs": ["Context for the triggering condition"],
650 | "type": {
651 | "defined": "TriggerContext"
652 | }
653 | }
654 | ]
655 | }
656 | },
657 | {
658 | "name": "ThreadSettings",
659 | "docs": ["The properties of threads which are updatable."],
660 | "type": {
661 | "kind": "struct",
662 | "fields": [
663 | {
664 | "name": "fee",
665 | "type": {
666 | "option": "u64"
667 | }
668 | },
669 | {
670 | "name": "instructions",
671 | "type": {
672 | "option": {
673 | "vec": {
674 | "defined": "SerializableInstruction"
675 | }
676 | }
677 | }
678 | },
679 | {
680 | "name": "name",
681 | "type": {
682 | "option": "string"
683 | }
684 | },
685 | {
686 | "name": "rateLimit",
687 | "type": {
688 | "option": "u64"
689 | }
690 | },
691 | {
692 | "name": "trigger",
693 | "type": {
694 | "option": {
695 | "defined": "Trigger"
696 | }
697 | }
698 | }
699 | ]
700 | }
701 | },
702 | {
703 | "name": "TriggerContext",
704 | "docs": [
705 | "The event which allowed a particular transaction thread to be triggered."
706 | ],
707 | "type": {
708 | "kind": "enum",
709 | "variants": [
710 | {
711 | "name": "Account",
712 | "fields": [
713 | {
714 | "name": "data_hash",
715 | "docs": ["The account's data hash."],
716 | "type": "u64"
717 | }
718 | ]
719 | },
720 | {
721 | "name": "Cron",
722 | "fields": [
723 | {
724 | "name": "started_at",
725 | "docs": ["The threshold moment the schedule was waiting for."],
726 | "type": "i64"
727 | }
728 | ]
729 | },
730 | {
731 | "name": "Now"
732 | },
733 | {
734 | "name": "Slot",
735 | "fields": [
736 | {
737 | "name": "started_at",
738 | "docs": ["The threshold slot the schedule was waiting for."],
739 | "type": "u64"
740 | }
741 | ]
742 | },
743 | {
744 | "name": "Epoch",
745 | "fields": [
746 | {
747 | "name": "started_at",
748 | "docs": ["The threshold epoch the schedule was waiting for."],
749 | "type": "u64"
750 | }
751 | ]
752 | },
753 | {
754 | "name": "Timestamp",
755 | "fields": [
756 | {
757 | "name": "started_at",
758 | "docs": [
759 | "The threshold moment the schedule was waiting for."
760 | ],
761 | "type": "i64"
762 | }
763 | ]
764 | },
765 | {
766 | "name": "Pyth",
767 | "fields": [
768 | {
769 | "name": "price",
770 | "docs": [
771 | "The limit price that the trigger was waiting for."
772 | ],
773 | "type": "i64"
774 | }
775 | ]
776 | }
777 | ]
778 | }
779 | },
780 | {
781 | "name": "Equality",
782 | "docs": ["Equality"],
783 | "type": {
784 | "kind": "enum",
785 | "variants": [
786 | {
787 | "name": "GreaterThanOrEqual"
788 | },
789 | {
790 | "name": "LessThanOrEqual"
791 | }
792 | ]
793 | }
794 | }
795 | ],
796 | "errors": [
797 | {
798 | "code": 6000,
799 | "name": "InvalidThreadResponse",
800 | "msg": "The exec response could not be parsed"
801 | },
802 | {
803 | "code": 6001,
804 | "name": "InvalidThreadState",
805 | "msg": "The thread is in an invalid state"
806 | },
807 | {
808 | "code": 6002,
809 | "name": "InvalidTriggerVariant",
810 | "msg": "The trigger variant cannot be changed"
811 | },
812 | {
813 | "code": 6003,
814 | "name": "TriggerNotActive",
815 | "msg": "The trigger condition has not been activated"
816 | },
817 | {
818 | "code": 6004,
819 | "name": "ThreadBusy",
820 | "msg": "This operation cannot be processes because the thread is currently busy"
821 | },
822 | {
823 | "code": 6005,
824 | "name": "ThreadPaused",
825 | "msg": "The thread is currently paused"
826 | },
827 | {
828 | "code": 6006,
829 | "name": "RateLimitExeceeded",
830 | "msg": "The thread's rate limit has been reached"
831 | },
832 | {
833 | "code": 6007,
834 | "name": "MaxRateLimitExceeded",
835 | "msg": "Thread rate limits cannot exceed the maximum allowed value"
836 | },
837 | {
838 | "code": 6008,
839 | "name": "UnauthorizedWrite",
840 | "msg": "Inner instruction attempted to write to an unauthorized address"
841 | },
842 | {
843 | "code": 6009,
844 | "name": "WithdrawalTooLarge",
845 | "msg": "Withdrawing this amount would leave the thread with less than the minimum required SOL for rent exemption"
846 | }
847 | ],
848 | "metadata": {
849 | "address": "CLoCKyJ6DXBJqqu2VWx9RLbgnwwR6BMHHuyasVmfMzBh"
850 | }
851 | }
852 |
--------------------------------------------------------------------------------
/src/programs/thread/types.ts:
--------------------------------------------------------------------------------
1 | export type ThreadProgram = {
2 | version: "2.0.16";
3 | name: "thread_program";
4 | docs: ["Program for creating transaction threads on Solana."];
5 | instructions: [
6 | {
7 | name: "getCrateInfo";
8 | docs: [
9 | "Return the crate information via `sol_set_return_data/sol_get_return_data`"
10 | ];
11 | accounts: [
12 | {
13 | name: "systemProgram";
14 | isMut: false;
15 | isSigner: false;
16 | }
17 | ];
18 | args: [];
19 | returns: {
20 | defined: "CrateInfo";
21 | };
22 | },
23 | {
24 | name: "threadExec";
25 | docs: ["Executes the next instruction on thread."];
26 | accounts: [
27 | {
28 | name: "fee";
29 | isMut: true;
30 | isSigner: false;
31 | docs: ["The worker's fee account."];
32 | },
33 | {
34 | name: "pool";
35 | isMut: false;
36 | isSigner: false;
37 | docs: ["The active worker pool."];
38 | },
39 | {
40 | name: "signatory";
41 | isMut: true;
42 | isSigner: true;
43 | docs: ["The signatory."];
44 | },
45 | {
46 | name: "thread";
47 | isMut: true;
48 | isSigner: false;
49 | docs: ["The thread to execute."];
50 | },
51 | {
52 | name: "worker";
53 | isMut: false;
54 | isSigner: false;
55 | docs: ["The worker."];
56 | }
57 | ];
58 | args: [];
59 | },
60 | {
61 | name: "threadCreate";
62 | docs: ["Creates a new transaction thread."];
63 | accounts: [
64 | {
65 | name: "authority";
66 | isMut: false;
67 | isSigner: true;
68 | docs: ["The authority (owner) of the thread."];
69 | },
70 | {
71 | name: "payer";
72 | isMut: true;
73 | isSigner: true;
74 | docs: ["The payer for account initializations."];
75 | },
76 | {
77 | name: "systemProgram";
78 | isMut: false;
79 | isSigner: false;
80 | docs: ["The Solana system program."];
81 | },
82 | {
83 | name: "thread";
84 | isMut: true;
85 | isSigner: false;
86 | docs: ["The thread to be created."];
87 | }
88 | ];
89 | args: [
90 | {
91 | name: "amount";
92 | type: "u64";
93 | },
94 | {
95 | name: "id";
96 | type: "bytes";
97 | },
98 | {
99 | name: "instructions";
100 | type: {
101 | vec: {
102 | defined: "SerializableInstruction";
103 | };
104 | };
105 | },
106 | {
107 | name: "trigger";
108 | type: {
109 | defined: "Trigger";
110 | };
111 | }
112 | ];
113 | },
114 | {
115 | name: "threadDelete";
116 | docs: [
117 | "Closes an existing thread account and returns the lamports to the owner."
118 | ];
119 | accounts: [
120 | {
121 | name: "authority";
122 | isMut: false;
123 | isSigner: true;
124 | docs: ["The authority (owner) of the thread."];
125 | },
126 | {
127 | name: "closeTo";
128 | isMut: true;
129 | isSigner: false;
130 | docs: ["The address to return the data rent lamports to."];
131 | },
132 | {
133 | name: "thread";
134 | isMut: true;
135 | isSigner: false;
136 | docs: ["The thread to be delete."];
137 | }
138 | ];
139 | args: [];
140 | },
141 | {
142 | name: "threadInstructionAdd";
143 | docs: ["Appends a new instruction to the thread's instruction set."];
144 | accounts: [
145 | {
146 | name: "authority";
147 | isMut: true;
148 | isSigner: true;
149 | docs: ["The authority (owner) of the thread."];
150 | },
151 | {
152 | name: "systemProgram";
153 | isMut: false;
154 | isSigner: false;
155 | docs: ["The Solana system program"];
156 | },
157 | {
158 | name: "thread";
159 | isMut: true;
160 | isSigner: false;
161 | docs: ["The thread to be paused."];
162 | }
163 | ];
164 | args: [
165 | {
166 | name: "instruction";
167 | type: {
168 | defined: "SerializableInstruction";
169 | };
170 | }
171 | ];
172 | },
173 | {
174 | name: "threadInstructionRemove";
175 | docs: [
176 | "Removes an instruction to the thread's instruction set at the provied index."
177 | ];
178 | accounts: [
179 | {
180 | name: "authority";
181 | isMut: false;
182 | isSigner: true;
183 | docs: ["The authority (owner) of the thread."];
184 | },
185 | {
186 | name: "thread";
187 | isMut: true;
188 | isSigner: false;
189 | docs: ["The thread to be edited."];
190 | }
191 | ];
192 | args: [
193 | {
194 | name: "index";
195 | type: "u64";
196 | }
197 | ];
198 | },
199 | {
200 | name: "threadKickoff";
201 | docs: ["Kicks off a thread if its trigger condition is active."];
202 | accounts: [
203 | {
204 | name: "signatory";
205 | isMut: true;
206 | isSigner: true;
207 | docs: ["The signatory."];
208 | },
209 | {
210 | name: "thread";
211 | isMut: true;
212 | isSigner: false;
213 | docs: ["The thread to kickoff."];
214 | },
215 | {
216 | name: "worker";
217 | isMut: false;
218 | isSigner: false;
219 | docs: ["The worker."];
220 | }
221 | ];
222 | args: [];
223 | },
224 | {
225 | name: "threadPause";
226 | docs: ["Pauses an active thread."];
227 | accounts: [
228 | {
229 | name: "authority";
230 | isMut: false;
231 | isSigner: true;
232 | docs: ["The authority (owner) of the thread."];
233 | },
234 | {
235 | name: "thread";
236 | isMut: true;
237 | isSigner: false;
238 | docs: ["The thread to be paused."];
239 | }
240 | ];
241 | args: [];
242 | },
243 | {
244 | name: "threadResume";
245 | docs: ["Resumes a paused thread."];
246 | accounts: [
247 | {
248 | name: "authority";
249 | isMut: false;
250 | isSigner: true;
251 | docs: ["The authority (owner) of the thread."];
252 | },
253 | {
254 | name: "thread";
255 | isMut: true;
256 | isSigner: false;
257 | docs: ["The thread to be resumed."];
258 | }
259 | ];
260 | args: [];
261 | },
262 | {
263 | name: "threadReset";
264 | docs: ["Resets a thread's next instruction."];
265 | accounts: [
266 | {
267 | name: "authority";
268 | isMut: false;
269 | isSigner: true;
270 | docs: ["The authority (owner) of the thread."];
271 | },
272 | {
273 | name: "thread";
274 | isMut: true;
275 | isSigner: false;
276 | docs: ["The thread to be paused."];
277 | }
278 | ];
279 | args: [];
280 | },
281 | {
282 | name: "threadUpdate";
283 | docs: ["Allows an owner to update the mutable properties of a thread."];
284 | accounts: [
285 | {
286 | name: "authority";
287 | isMut: true;
288 | isSigner: true;
289 | docs: ["The authority (owner) of the thread."];
290 | },
291 | {
292 | name: "systemProgram";
293 | isMut: false;
294 | isSigner: false;
295 | docs: ["The Solana system program"];
296 | },
297 | {
298 | name: "thread";
299 | isMut: true;
300 | isSigner: false;
301 | docs: ["The thread to be updated."];
302 | }
303 | ];
304 | args: [
305 | {
306 | name: "settings";
307 | type: {
308 | defined: "ThreadSettings";
309 | };
310 | }
311 | ];
312 | },
313 | {
314 | name: "threadWithdraw";
315 | docs: ["Allows an owner to withdraw from a thread's lamport balance."];
316 | accounts: [
317 | {
318 | name: "authority";
319 | isMut: false;
320 | isSigner: true;
321 | docs: ["The authority (owner) of the thread."];
322 | },
323 | {
324 | name: "payTo";
325 | isMut: true;
326 | isSigner: false;
327 | docs: ["The account to withdraw lamports to."];
328 | },
329 | {
330 | name: "thread";
331 | isMut: true;
332 | isSigner: false;
333 | docs: ["The thread to be."];
334 | }
335 | ];
336 | args: [
337 | {
338 | name: "amount";
339 | type: "u64";
340 | }
341 | ];
342 | }
343 | ];
344 | accounts: [
345 | {
346 | name: "thread";
347 | docs: ["Tracks the current state of a transaction thread on Solana."];
348 | type: {
349 | kind: "struct";
350 | fields: [
351 | {
352 | name: "authority";
353 | docs: ["The owner of this thread."];
354 | type: "publicKey";
355 | },
356 | {
357 | name: "bump";
358 | docs: ["The bump, used for PDA validation."];
359 | type: "u8";
360 | },
361 | {
362 | name: "createdAt";
363 | docs: ["The cluster clock at the moment the thread was created."];
364 | type: {
365 | defined: "ClockData";
366 | };
367 | },
368 | {
369 | name: "execContext";
370 | docs: ["The context of the thread's current execution state."];
371 | type: {
372 | option: {
373 | defined: "ExecContext";
374 | };
375 | };
376 | },
377 | {
378 | name: "fee";
379 | docs: [
380 | "The number of lamports to payout to workers per execution."
381 | ];
382 | type: "u64";
383 | },
384 | {
385 | name: "id";
386 | docs: ["The id of the thread, given by the authority."];
387 | type: "bytes";
388 | },
389 | {
390 | name: "instructions";
391 | docs: ["The instructions to be executed."];
392 | type: {
393 | vec: {
394 | defined: "SerializableInstruction";
395 | };
396 | };
397 | },
398 | {
399 | name: "name";
400 | docs: ["The name of the thread."];
401 | type: "string";
402 | },
403 | {
404 | name: "nextInstruction";
405 | docs: ["The next instruction to be executed."];
406 | type: {
407 | option: {
408 | defined: "SerializableInstruction";
409 | };
410 | };
411 | },
412 | {
413 | name: "paused";
414 | docs: ["Whether or not the thread is currently paused."];
415 | type: "bool";
416 | },
417 | {
418 | name: "rateLimit";
419 | docs: ["The maximum number of execs allowed per slot."];
420 | type: "u64";
421 | },
422 | {
423 | name: "trigger";
424 | docs: ["The triggering event to kickoff a thread."];
425 | type: {
426 | defined: "Trigger";
427 | };
428 | }
429 | ];
430 | };
431 | }
432 | ];
433 | types: [
434 | {
435 | name: "Trigger";
436 | docs: ["Trigger"];
437 | type: {
438 | kind: "enum";
439 | variants: [
440 | {
441 | name: "Account";
442 | fields: [
443 | {
444 | name: "address";
445 | docs: ["The address of the account to monitor"];
446 | type: "publicKey";
447 | },
448 | {
449 | name: "offset";
450 | docs: ["The byte offset of the account data to monitor"];
451 | type: "u64";
452 | },
453 | {
454 | name: "size";
455 | docs: [
456 | "The size of the byte slice to monitor (must be less than 1kb)"
457 | ];
458 | type: "u64";
459 | }
460 | ];
461 | },
462 | {
463 | name: "Cron";
464 | fields: [
465 | {
466 | name: "schedule";
467 | docs: [
468 | "The schedule in cron syntax. Value must be parsable by the `clockwork_cron` package"
469 | ];
470 | type: "string";
471 | },
472 | {
473 | name: "skippable";
474 | docs: [
475 | "Boolean value indicating whether triggering moments may be skipped if they are missed (e.g. due to network downtime) If false, any missed triggering moments will simply be executed as soon as the network comes back online."
476 | ];
477 | type: "bool";
478 | }
479 | ];
480 | },
481 | {
482 | name: "Now";
483 | },
484 | {
485 | name: "Slot";
486 | fields: [
487 | {
488 | name: "slot";
489 | docs: ["Slot"];
490 | type: "u64";
491 | }
492 | ];
493 | },
494 | {
495 | name: "Epoch";
496 | fields: [
497 | {
498 | name: "epoch";
499 | docs: ["Epoch"];
500 | type: "u64";
501 | }
502 | ];
503 | },
504 | {
505 | name: "Timestamp";
506 | fields: [
507 | {
508 | name: "unixTs";
509 | docs: ["Unix timestamp"];
510 | type: "i64";
511 | }
512 | ];
513 | },
514 | {
515 | name: "Pyth";
516 | fields: [
517 | {
518 | name: "priceFeed";
519 | docs: ["The address of the price feed to monitor."];
520 | type: "publicKey";
521 | },
522 | {
523 | name: "equality";
524 | docs: ["The equality operator (gte or lte) used to compare prices."];
525 | type: { defined: "Equality" }
526 | },
527 | {
528 | name: "limit";
529 | docs: ["The limit price to compare the Pyth feed to."];
530 | type: "i64";
531 | },
532 | ];
533 | }
534 | ];
535 | };
536 | },
537 | {
538 | name: "SerializableInstruction";
539 | docs: ["Serializable Instruction"];
540 | type: {
541 | kind: "struct";
542 | fields: [
543 | {
544 | name: "programId";
545 | docs: [
546 | "Pubkey of the instruction processor that executes this instruction"
547 | ];
548 | type: "publicKey";
549 | },
550 | {
551 | name: "accounts";
552 | docs: [
553 | "Metadata for what accounts should be passed to the instruction processor"
554 | ];
555 | type: {
556 | vec: { defined: "SerializableAccount" };
557 | };
558 | },
559 | {
560 | name: "data";
561 | docs: ["Opaque data passed to the instruction processor"];
562 | type: "bytes";
563 | }
564 | ];
565 | };
566 | },
567 | {
568 | name: "SerializableAccount";
569 | docs: ["Serializable Account"];
570 | type: {
571 | kind: "struct";
572 | fields: [
573 | {
574 | name: "pubkey";
575 | docs: ["An account's public key"];
576 | type: "publicKey";
577 | },
578 | {
579 | name: "isSigner";
580 | docs: [
581 | "True if an Instruction requires a Transaction signature matching `pubkey`"
582 | ];
583 | type: "bool";
584 | },
585 | {
586 | name: "isWritable";
587 | docs: [
588 | "True if the `pubkey` can be loaded as a read-write account"
589 | ];
590 | type: "bool";
591 | }
592 | ];
593 | };
594 | },
595 | {
596 | name: "ClockData";
597 | docs: ["Clock Data"];
598 | type: {
599 | kind: "struct";
600 | fields: [
601 | {
602 | name: "slot";
603 | docs: ["The Current Slot"];
604 | type: "u64";
605 | },
606 | {
607 | name: "epoch";
608 | docs: ["The Bank Epoch"];
609 | type: "u64";
610 | },
611 | {
612 | name: "unixTimestamp";
613 | docs: ["The Current Unix Timestamp"];
614 | type: "i64";
615 | }
616 | ];
617 | };
618 | },
619 | {
620 | name: "ExecContext";
621 | docs: ["The execution context of a particular transaction thread."];
622 | type: {
623 | kind: "struct";
624 | fields: [
625 | {
626 | name: "execIndex";
627 | docs: ["Index of the next instruction to be executed."];
628 | type: "u64";
629 | },
630 | {
631 | name: "execsSinceReimbursement";
632 | docs: ["Number of execs since the last tx reimbursement."];
633 | type: "u64";
634 | },
635 | {
636 | name: "execsSinceSlot";
637 | docs: ["Number of execs in this slot."];
638 | type: "u64";
639 | },
640 | {
641 | name: "lastExecAt";
642 | docs: ["Slot of the last exec"];
643 | type: "u64";
644 | },
645 | {
646 | name: "triggerContext";
647 | docs: ["Context for the triggering condition"];
648 | type: {
649 | defined: "TriggerContext";
650 | };
651 | }
652 | ];
653 | };
654 | },
655 | {
656 | name: "ThreadSettings";
657 | docs: ["The properties of threads which are updatable."];
658 | type: {
659 | kind: "struct";
660 | fields: [
661 | {
662 | name: "fee";
663 | type: {
664 | option: "u64";
665 | };
666 | },
667 | {
668 | name: "instructions";
669 | type: {
670 | option: {
671 | vec: {
672 | defined: "SerializableInstruction";
673 | };
674 | };
675 | };
676 | },
677 | {
678 | name: "name";
679 | type: {
680 | option: "string";
681 | };
682 | },
683 | {
684 | name: "rateLimit";
685 | type: {
686 | option: "u64";
687 | };
688 | },
689 | {
690 | name: "trigger";
691 | type: {
692 | option: {
693 | defined: "Trigger";
694 | };
695 | };
696 | }
697 | ];
698 | };
699 | },
700 | {
701 | name: "TriggerContext";
702 | docs: [
703 | "The event which allowed a particular transaction thread to be triggered."
704 | ];
705 | type: {
706 | kind: "enum";
707 | variants: [
708 | {
709 | name: "Account";
710 | fields: [
711 | {
712 | name: "data_hash";
713 | docs: ["The account's data hash."];
714 | type: "u64";
715 | }
716 | ];
717 | },
718 | {
719 | name: "Cron";
720 | fields: [
721 | {
722 | name: "started_at";
723 | docs: ["The threshold moment the schedule was waiting for."];
724 | type: "i64";
725 | }
726 | ];
727 | },
728 | {
729 | name: "Now";
730 | },
731 | {
732 | name: "Slot";
733 | fields: [
734 | {
735 | name: "started_at";
736 | docs: ["The threshold slot the schedule was waiting for."];
737 | type: "u64";
738 | }
739 | ];
740 | },
741 | {
742 | name: "Epoch";
743 | fields: [
744 | {
745 | name: "started_at";
746 | docs: ["The threshold epoch the schedule was waiting for."];
747 | type: "u64";
748 | }
749 | ];
750 | },
751 | {
752 | name: "Timestamp",
753 | fields: [
754 | {
755 | name: "started_at",
756 | docs: [
757 | "The threshold moment the schedule was waiting for."
758 | ],
759 | type: "i64"
760 | }
761 | ]
762 | },
763 | {
764 | name: "Pyth",
765 | fields: [
766 | {
767 | name: "price",
768 | docs: [
769 | "The limit price the trigger was waiting for."
770 | ],
771 | type: "i64"
772 | }
773 | ]
774 | }
775 | ];
776 | };
777 | },
778 | {
779 | name: "Equality";
780 | docs: ["Equality"];
781 | type: {
782 | kind: "enum";
783 | variants: [
784 | {
785 | name: "GreaterThanOrEqual";
786 | },
787 | {
788 | name: "LessThanOrEqual";
789 | }
790 | ];
791 | };
792 | }
793 | ];
794 | errors: [
795 | {
796 | code: 6000;
797 | name: "InvalidThreadResponse";
798 | msg: "The exec response could not be parsed";
799 | },
800 | {
801 | code: 6001;
802 | name: "InvalidThreadState";
803 | msg: "The thread is in an invalid state";
804 | },
805 | {
806 | code: 6002;
807 | name: "InvalidTriggerVariant";
808 | msg: "The trigger variant cannot be changed";
809 | },
810 | {
811 | code: 6003;
812 | name: "TriggerNotActive";
813 | msg: "The trigger condition has not been activated";
814 | },
815 | {
816 | code: 6004;
817 | name: "ThreadBusy";
818 | msg: "This operation cannot be processes because the thread is currently busy";
819 | },
820 | {
821 | code: 6005;
822 | name: "ThreadPaused";
823 | msg: "The thread is currently paused";
824 | },
825 | {
826 | code: 6006;
827 | name: "RateLimitExeceeded";
828 | msg: "The thread's rate limit has been reached";
829 | },
830 | {
831 | code: 6007;
832 | name: "MaxRateLimitExceeded";
833 | msg: "Thread rate limits cannot exceed the maximum allowed value";
834 | },
835 | {
836 | code: 6008;
837 | name: "UnauthorizedWrite";
838 | msg: "Inner instruction attempted to write to an unauthorized address";
839 | },
840 | {
841 | code: 6009;
842 | name: "WithdrawalTooLarge";
843 | msg: "Withdrawing this amount would leave the thread with less than the minimum required SOL for rent exemption";
844 | }
845 | ];
846 | };
847 |
848 | export const IDL: ThreadProgram = {
849 | version: "2.0.16",
850 | name: "thread_program",
851 | docs: ["Program for creating transaction threads on Solana."],
852 | instructions: [
853 | {
854 | name: "getCrateInfo",
855 | docs: [
856 | "Return the crate information via `sol_set_return_data/sol_get_return_data`",
857 | ],
858 | accounts: [
859 | {
860 | name: "systemProgram",
861 | isMut: false,
862 | isSigner: false,
863 | },
864 | ],
865 | args: [],
866 | returns: {
867 | defined: "CrateInfo",
868 | },
869 | },
870 | {
871 | name: "threadExec",
872 | docs: ["Executes the next instruction on thread."],
873 | accounts: [
874 | {
875 | name: "fee",
876 | isMut: true,
877 | isSigner: false,
878 | docs: ["The worker's fee account."],
879 | },
880 | {
881 | name: "pool",
882 | isMut: false,
883 | isSigner: false,
884 | docs: ["The active worker pool."],
885 | },
886 | {
887 | name: "signatory",
888 | isMut: true,
889 | isSigner: true,
890 | docs: ["The signatory."],
891 | },
892 | {
893 | name: "thread",
894 | isMut: true,
895 | isSigner: false,
896 | docs: ["The thread to execute."],
897 | },
898 | {
899 | name: "worker",
900 | isMut: false,
901 | isSigner: false,
902 | docs: ["The worker."],
903 | },
904 | ],
905 | args: [],
906 | },
907 | {
908 | name: "threadCreate",
909 | docs: ["Creates a new transaction thread."],
910 | accounts: [
911 | {
912 | name: "authority",
913 | isMut: false,
914 | isSigner: true,
915 | docs: ["The authority (owner) of the thread."],
916 | },
917 | {
918 | name: "payer",
919 | isMut: true,
920 | isSigner: true,
921 | docs: ["The payer for account initializations."],
922 | },
923 | {
924 | name: "systemProgram",
925 | isMut: false,
926 | isSigner: false,
927 | docs: ["The Solana system program."],
928 | },
929 | {
930 | name: "thread",
931 | isMut: true,
932 | isSigner: false,
933 | docs: ["The thread to be created."],
934 | },
935 | ],
936 | args: [
937 | {
938 | name: "amount",
939 | type: "u64",
940 | },
941 | {
942 | name: "id",
943 | type: "bytes",
944 | },
945 | {
946 | name: "instructions",
947 | type: {
948 | vec: {
949 | defined: "SerializableInstruction",
950 | },
951 | },
952 | },
953 | {
954 | name: "trigger",
955 | type: {
956 | defined: "Trigger",
957 | },
958 | },
959 | ],
960 | },
961 | {
962 | name: "threadDelete",
963 | docs: [
964 | "Closes an existing thread account and returns the lamports to the owner.",
965 | ],
966 | accounts: [
967 | {
968 | name: "authority",
969 | isMut: false,
970 | isSigner: true,
971 | docs: ["The authority (owner) of the thread."],
972 | },
973 | {
974 | name: "closeTo",
975 | isMut: true,
976 | isSigner: false,
977 | docs: ["The address to return the data rent lamports to."],
978 | },
979 | {
980 | name: "thread",
981 | isMut: true,
982 | isSigner: false,
983 | docs: ["The thread to be delete."],
984 | },
985 | ],
986 | args: [],
987 | },
988 | {
989 | name: "threadInstructionAdd",
990 | docs: ["Appends a new instruction to the thread's instruction set."],
991 | accounts: [
992 | {
993 | name: "authority",
994 | isMut: true,
995 | isSigner: true,
996 | docs: ["The authority (owner) of the thread."],
997 | },
998 | {
999 | name: "systemProgram",
1000 | isMut: false,
1001 | isSigner: false,
1002 | docs: ["The Solana system program"],
1003 | },
1004 | {
1005 | name: "thread",
1006 | isMut: true,
1007 | isSigner: false,
1008 | docs: ["The thread to be paused."],
1009 | },
1010 | ],
1011 | args: [
1012 | {
1013 | name: "instruction",
1014 | type: {
1015 | defined: "SerializableInstruction",
1016 | },
1017 | },
1018 | ],
1019 | },
1020 | {
1021 | name: "threadInstructionRemove",
1022 | docs: [
1023 | "Removes an instruction to the thread's instruction set at the provied index.",
1024 | ],
1025 | accounts: [
1026 | {
1027 | name: "authority",
1028 | isMut: false,
1029 | isSigner: true,
1030 | docs: ["The authority (owner) of the thread."],
1031 | },
1032 | {
1033 | name: "thread",
1034 | isMut: true,
1035 | isSigner: false,
1036 | docs: ["The thread to be edited."],
1037 | },
1038 | ],
1039 | args: [
1040 | {
1041 | name: "index",
1042 | type: "u64",
1043 | },
1044 | ],
1045 | },
1046 | {
1047 | name: "threadKickoff",
1048 | docs: ["Kicks off a thread if its trigger condition is active."],
1049 | accounts: [
1050 | {
1051 | name: "signatory",
1052 | isMut: true,
1053 | isSigner: true,
1054 | docs: ["The signatory."],
1055 | },
1056 | {
1057 | name: "thread",
1058 | isMut: true,
1059 | isSigner: false,
1060 | docs: ["The thread to kickoff."],
1061 | },
1062 | {
1063 | name: "worker",
1064 | isMut: false,
1065 | isSigner: false,
1066 | docs: ["The worker."],
1067 | },
1068 | ],
1069 | args: [],
1070 | },
1071 | {
1072 | name: "threadPause",
1073 | docs: ["Pauses an active thread."],
1074 | accounts: [
1075 | {
1076 | name: "authority",
1077 | isMut: false,
1078 | isSigner: true,
1079 | docs: ["The authority (owner) of the thread."],
1080 | },
1081 | {
1082 | name: "thread",
1083 | isMut: true,
1084 | isSigner: false,
1085 | docs: ["The thread to be paused."],
1086 | },
1087 | ],
1088 | args: [],
1089 | },
1090 | {
1091 | name: "threadResume",
1092 | docs: ["Resumes a paused thread."],
1093 | accounts: [
1094 | {
1095 | name: "authority",
1096 | isMut: false,
1097 | isSigner: true,
1098 | docs: ["The authority (owner) of the thread."],
1099 | },
1100 | {
1101 | name: "thread",
1102 | isMut: true,
1103 | isSigner: false,
1104 | docs: ["The thread to be resumed."],
1105 | },
1106 | ],
1107 | args: [],
1108 | },
1109 | {
1110 | name: "threadReset",
1111 | docs: ["Resets a thread's next instruction."],
1112 | accounts: [
1113 | {
1114 | name: "authority",
1115 | isMut: false,
1116 | isSigner: true,
1117 | docs: ["The authority (owner) of the thread."],
1118 | },
1119 | {
1120 | name: "thread",
1121 | isMut: true,
1122 | isSigner: false,
1123 | docs: ["The thread to be paused."],
1124 | },
1125 | ],
1126 | args: [],
1127 | },
1128 | {
1129 | name: "threadUpdate",
1130 | docs: ["Allows an owner to update the mutable properties of a thread."],
1131 | accounts: [
1132 | {
1133 | name: "authority",
1134 | isMut: true,
1135 | isSigner: true,
1136 | docs: ["The authority (owner) of the thread."],
1137 | },
1138 | {
1139 | name: "systemProgram",
1140 | isMut: false,
1141 | isSigner: false,
1142 | docs: ["The Solana system program"],
1143 | },
1144 | {
1145 | name: "thread",
1146 | isMut: true,
1147 | isSigner: false,
1148 | docs: ["The thread to be updated."],
1149 | },
1150 | ],
1151 | args: [
1152 | {
1153 | name: "settings",
1154 | type: {
1155 | defined: "ThreadSettings",
1156 | },
1157 | },
1158 | ],
1159 | },
1160 | {
1161 | name: "threadWithdraw",
1162 | docs: ["Allows an owner to withdraw from a thread's lamport balance."],
1163 | accounts: [
1164 | {
1165 | name: "authority",
1166 | isMut: false,
1167 | isSigner: true,
1168 | docs: ["The authority (owner) of the thread."],
1169 | },
1170 | {
1171 | name: "payTo",
1172 | isMut: true,
1173 | isSigner: false,
1174 | docs: ["The account to withdraw lamports to."],
1175 | },
1176 | {
1177 | name: "thread",
1178 | isMut: true,
1179 | isSigner: false,
1180 | docs: ["The thread to be."],
1181 | },
1182 | ],
1183 | args: [
1184 | {
1185 | name: "amount",
1186 | type: "u64",
1187 | },
1188 | ],
1189 | },
1190 | ],
1191 | accounts: [
1192 | {
1193 | name: "thread",
1194 | docs: ["Tracks the current state of a transaction thread on Solana."],
1195 | type: {
1196 | kind: "struct",
1197 | fields: [
1198 | {
1199 | name: "authority",
1200 | docs: ["The owner of this thread."],
1201 | type: "publicKey",
1202 | },
1203 | {
1204 | name: "bump",
1205 | docs: ["The bump, used for PDA validation."],
1206 | type: "u8",
1207 | },
1208 | {
1209 | name: "createdAt",
1210 | docs: ["The cluster clock at the moment the thread was created."],
1211 | type: {
1212 | defined: "ClockData",
1213 | },
1214 | },
1215 | {
1216 | name: "execContext",
1217 | docs: ["The context of the thread's current execution state."],
1218 | type: {
1219 | option: {
1220 | defined: "ExecContext",
1221 | },
1222 | },
1223 | },
1224 | {
1225 | name: "fee",
1226 | docs: [
1227 | "The number of lamports to payout to workers per execution.",
1228 | ],
1229 | type: "u64",
1230 | },
1231 | {
1232 | name: "id",
1233 | docs: ["The id of the thread, given by the authority."],
1234 | type: "bytes",
1235 | },
1236 | {
1237 | name: "instructions",
1238 | docs: ["The instructions to be executed."],
1239 | type: {
1240 | vec: {
1241 | defined: "SerializableInstruction",
1242 | },
1243 | },
1244 | },
1245 | {
1246 | name: "name",
1247 | docs: ["The name of the thread."],
1248 | type: "string",
1249 | },
1250 | {
1251 | name: "nextInstruction",
1252 | docs: ["The next instruction to be executed."],
1253 | type: {
1254 | option: {
1255 | defined: "SerializableInstruction",
1256 | },
1257 | },
1258 | },
1259 | {
1260 | name: "paused",
1261 | docs: ["Whether or not the thread is currently paused."],
1262 | type: "bool",
1263 | },
1264 | {
1265 | name: "rateLimit",
1266 | docs: ["The maximum number of execs allowed per slot."],
1267 | type: "u64",
1268 | },
1269 | {
1270 | name: "trigger",
1271 | docs: ["The triggering event to kickoff a thread."],
1272 | type: {
1273 | defined: "Trigger",
1274 | },
1275 | },
1276 | ],
1277 | },
1278 | },
1279 | ],
1280 | types: [
1281 | {
1282 | name: "Trigger",
1283 | docs: ["Trigger"],
1284 | type: {
1285 | kind: "enum",
1286 | variants: [
1287 | {
1288 | name: "Account",
1289 | fields: [
1290 | {
1291 | name: "address",
1292 | docs: ["The address of the account to monitor"],
1293 | type: "publicKey",
1294 | },
1295 | {
1296 | name: "offset",
1297 | docs: ["The byte offset of the account data to monitor"],
1298 | type: "u64",
1299 | },
1300 | {
1301 | name: "size",
1302 | docs: [
1303 | "The size of the byte slice to monitor (must be less than 1kb)",
1304 | ],
1305 | type: "u64",
1306 | },
1307 | ],
1308 | },
1309 | {
1310 | name: "Cron",
1311 | fields: [
1312 | {
1313 | name: "schedule",
1314 | docs: [
1315 | "The schedule in cron syntax. Value must be parsable by the `clockwork_cron` package",
1316 | ],
1317 | type: "string",
1318 | },
1319 | {
1320 | name: "skippable",
1321 | docs: [
1322 | "Boolean value indicating whether triggering moments may be skipped if they are missed (e.g. due to network downtime) If false, any missed triggering moments will simply be executed as soon as the network comes back online.",
1323 | ],
1324 | type: "bool",
1325 | },
1326 | ],
1327 | },
1328 | {
1329 | name: "Now",
1330 | },
1331 | {
1332 | name: "Slot",
1333 | fields: [
1334 | {
1335 | name: "slot",
1336 | docs: ["Slot"],
1337 | type: "u64",
1338 | },
1339 | ],
1340 | },
1341 | {
1342 | name: "Epoch",
1343 | fields: [
1344 | {
1345 | name: "epoch",
1346 | docs: ["Epoch"],
1347 | type: "u64",
1348 | },
1349 | ],
1350 | },
1351 | {
1352 | name: "Timestamp",
1353 | fields: [
1354 | {
1355 | name: "unixTs",
1356 | docs: ["Unix timestamp"],
1357 | type: "i64",
1358 | },
1359 | ],
1360 | },
1361 | {
1362 | name: "Pyth",
1363 | fields: [
1364 | {
1365 | name: "priceFeed",
1366 | docs: ["The address of the price feed to monitor."],
1367 | type: "publicKey",
1368 | },
1369 | {
1370 | name: "equality",
1371 | docs: ["The equality operator (gte or lte) used to compare prices."],
1372 | type: { defined: "Equality" }
1373 | },
1374 | {
1375 | name: "limit",
1376 | docs: ["The limit price to compare the Pyth feed to."],
1377 | type: "i64",
1378 | },
1379 | ],
1380 | }
1381 | ],
1382 | },
1383 | },
1384 | {
1385 | name: "SerializableInstruction",
1386 | docs: ["Serializable Instruction"],
1387 | type: {
1388 | kind: "struct",
1389 | fields: [
1390 | {
1391 | name: "programId",
1392 | docs: [
1393 | "Pubkey of the instruction processor that executes this instruction",
1394 | ],
1395 | type: "publicKey",
1396 | },
1397 | {
1398 | name: "accounts",
1399 | docs: [
1400 | "Metadata for what accounts should be passed to the instruction processor",
1401 | ],
1402 | type: {
1403 | vec: { defined: "SerializableAccount" },
1404 | },
1405 | },
1406 | {
1407 | name: "data",
1408 | docs: ["Opaque data passed to the instruction processor"],
1409 | type: "bytes",
1410 | },
1411 | ],
1412 | },
1413 | },
1414 | {
1415 | name: "SerializableAccount",
1416 | docs: ["Serializable Account"],
1417 | type: {
1418 | kind: "struct",
1419 | fields: [
1420 | {
1421 | name: "pubkey",
1422 | docs: ["An account's public key"],
1423 | type: "publicKey",
1424 | },
1425 | {
1426 | name: "isSigner",
1427 | docs: [
1428 | "True if an Instruction requires a Transaction signature matching `pubkey`",
1429 | ],
1430 | type: "bool",
1431 | },
1432 | {
1433 | name: "isWritable",
1434 | docs: [
1435 | "True if the `pubkey` can be loaded as a read-write account",
1436 | ],
1437 | type: "bool",
1438 | },
1439 | ],
1440 | },
1441 | },
1442 | {
1443 | name: "ClockData",
1444 | docs: ["Clock Data"],
1445 | type: {
1446 | kind: "struct",
1447 | fields: [
1448 | {
1449 | name: "slot",
1450 | docs: ["The Current Slot"],
1451 | type: "u64",
1452 | },
1453 | {
1454 | name: "epoch",
1455 | docs: ["The Bank Epoch"],
1456 | type: "u64",
1457 | },
1458 | {
1459 | name: "unixTimestamp",
1460 | docs: ["The Current Unix Timestamp"],
1461 | type: "i64",
1462 | },
1463 | ],
1464 | },
1465 | },
1466 | {
1467 | name: "ExecContext",
1468 | docs: ["The execution context of a particular transaction thread."],
1469 | type: {
1470 | kind: "struct",
1471 | fields: [
1472 | {
1473 | name: "execIndex",
1474 | docs: ["Index of the next instruction to be executed."],
1475 | type: "u64",
1476 | },
1477 | {
1478 | name: "execsSinceReimbursement",
1479 | docs: ["Number of execs since the last tx reimbursement."],
1480 | type: "u64",
1481 | },
1482 | {
1483 | name: "execsSinceSlot",
1484 | docs: ["Number of execs in this slot."],
1485 | type: "u64",
1486 | },
1487 | {
1488 | name: "lastExecAt",
1489 | docs: ["Slot of the last exec"],
1490 | type: "u64",
1491 | },
1492 | {
1493 | name: "triggerContext",
1494 | docs: ["Context for the triggering condition"],
1495 | type: {
1496 | defined: "TriggerContext",
1497 | },
1498 | },
1499 | ],
1500 | },
1501 | },
1502 | {
1503 | name: "ThreadSettings",
1504 | docs: ["The properties of threads which are updatable."],
1505 | type: {
1506 | kind: "struct",
1507 | fields: [
1508 | {
1509 | name: "fee",
1510 | type: {
1511 | option: "u64",
1512 | },
1513 | },
1514 | {
1515 | name: "instructions",
1516 | type: {
1517 | option: {
1518 | vec: {
1519 | defined: "SerializableInstruction",
1520 | },
1521 | },
1522 | },
1523 | },
1524 | {
1525 | name: "name",
1526 | type: {
1527 | option: "string",
1528 | },
1529 | },
1530 | {
1531 | name: "rateLimit",
1532 | type: {
1533 | option: "u64",
1534 | },
1535 | },
1536 | {
1537 | name: "trigger",
1538 | type: {
1539 | option: {
1540 | defined: "Trigger",
1541 | },
1542 | },
1543 | },
1544 | ],
1545 | },
1546 | },
1547 | {
1548 | name: "TriggerContext",
1549 | docs: [
1550 | "The event which allowed a particular transaction thread to be triggered.",
1551 | ],
1552 | type: {
1553 | kind: "enum",
1554 | variants: [
1555 | {
1556 | name: "Account",
1557 | fields: [
1558 | {
1559 | name: "data_hash",
1560 | docs: ["The account's data hash."],
1561 | type: "u64",
1562 | },
1563 | ],
1564 | },
1565 | {
1566 | name: "Cron",
1567 | fields: [
1568 | {
1569 | name: "started_at",
1570 | docs: ["The threshold moment the schedule was waiting for."],
1571 | type: "i64",
1572 | },
1573 | ],
1574 | },
1575 | {
1576 | name: "Now",
1577 | },
1578 | {
1579 | name: "Slot",
1580 | fields: [
1581 | {
1582 | name: "started_at",
1583 | docs: ["The threshold slot the schedule was waiting for."],
1584 | type: "u64",
1585 | },
1586 | ],
1587 | },
1588 | {
1589 | name: "Epoch",
1590 | fields: [
1591 | {
1592 | name: "started_at",
1593 | docs: ["The threshold epoch the schedule was waiting for."],
1594 | type: "u64",
1595 | },
1596 | ],
1597 | },
1598 | {
1599 | name: "Timestamp",
1600 | fields: [
1601 | {
1602 | name: "started_at",
1603 | docs: [
1604 | "The threshold moment the schedule was waiting for."
1605 | ],
1606 | type: "i64"
1607 | }
1608 | ]
1609 | },
1610 | {
1611 | name: "Pyth",
1612 | fields: [
1613 | {
1614 | name: "price",
1615 | docs: [
1616 | "The limit price the trigger was waiting for."
1617 | ],
1618 | type: "i64"
1619 | }
1620 | ]
1621 | }
1622 | ],
1623 | },
1624 | },
1625 | {
1626 | name: "Equality",
1627 | docs: ["Equality"],
1628 | type: {
1629 | kind: "enum",
1630 | variants: [
1631 | {
1632 | name: "GreaterThanOrEqual"
1633 | },
1634 | {
1635 | name: "LessThanOrEqual"
1636 | },
1637 | ],
1638 | },
1639 | },
1640 | ],
1641 | errors: [
1642 | {
1643 | code: 6000,
1644 | name: "InvalidThreadResponse",
1645 | msg: "The exec response could not be parsed",
1646 | },
1647 | {
1648 | code: 6001,
1649 | name: "InvalidThreadState",
1650 | msg: "The thread is in an invalid state",
1651 | },
1652 | {
1653 | code: 6002,
1654 | name: "InvalidTriggerVariant",
1655 | msg: "The trigger variant cannot be changed",
1656 | },
1657 | {
1658 | code: 6003,
1659 | name: "TriggerNotActive",
1660 | msg: "The trigger condition has not been activated",
1661 | },
1662 | {
1663 | code: 6004,
1664 | name: "ThreadBusy",
1665 | msg: "This operation cannot be processes because the thread is currently busy",
1666 | },
1667 | {
1668 | code: 6005,
1669 | name: "ThreadPaused",
1670 | msg: "The thread is currently paused",
1671 | },
1672 | {
1673 | code: 6006,
1674 | name: "RateLimitExeceeded",
1675 | msg: "The thread's rate limit has been reached",
1676 | },
1677 | {
1678 | code: 6007,
1679 | name: "MaxRateLimitExceeded",
1680 | msg: "Thread rate limits cannot exceed the maximum allowed value",
1681 | },
1682 | {
1683 | code: 6008,
1684 | name: "UnauthorizedWrite",
1685 | msg: "Inner instruction attempted to write to an unauthorized address",
1686 | },
1687 | {
1688 | code: 6009,
1689 | name: "WithdrawalTooLarge",
1690 | msg: "Withdrawing this amount would leave the thread with less than the minimum required SOL for rent exemption",
1691 | },
1692 | ],
1693 | };
1694 |
--------------------------------------------------------------------------------
/src/utils.ts:
--------------------------------------------------------------------------------
1 | import { BN } from "@coral-xyz/anchor";
2 | import { TransactionInstruction } from "@solana/web3.js";
3 | import {
4 | SerializableInstruction,
5 | ThreadSettings,
6 | ThreadSettingsInput,
7 | } from "./models";
8 |
9 | function parseTransactionInstructions(
10 | instructions: TransactionInstruction[]
11 | ): SerializableInstruction[] {
12 | let _instructions: SerializableInstruction[] = [];
13 | instructions.forEach((instruction) => {
14 | _instructions.push(parseTransactionInstruction(instruction));
15 | });
16 | return _instructions;
17 | }
18 |
19 | function parseTransactionInstruction(
20 | instruction: TransactionInstruction
21 | ): SerializableInstruction {
22 | return {
23 | programId: instruction.programId,
24 | accounts: instruction.keys,
25 | data: instruction.data,
26 | };
27 | }
28 |
29 | function parseThreadSettingsInput(
30 | settings: ThreadSettingsInput
31 | ): ThreadSettings {
32 | return {
33 | fee: settings.fee ? new BN(settings.fee) : null,
34 | rateLimit: settings.rateLimit ? new BN(settings.rateLimit) : null,
35 | instructions: settings.instructions ? settings.instructions : null,
36 | name: settings.name ? settings.name : null,
37 | trigger: settings.trigger ? settings.trigger : null,
38 | };
39 | }
40 |
41 | export {
42 | parseTransactionInstructions,
43 | parseTransactionInstruction,
44 | parseThreadSettingsInput,
45 | };
46 |
--------------------------------------------------------------------------------
/tests/ThreadProgram.test.ts:
--------------------------------------------------------------------------------
1 | import NodeWallet from "@coral-xyz/anchor/dist/cjs/nodewallet";
2 | import {
3 | clusterApiUrl,
4 | Connection,
5 | Keypair,
6 | LAMPORTS_PER_SOL,
7 | PublicKey,
8 | Transaction,
9 | TransactionInstruction,
10 | } from "@solana/web3.js";
11 | import { ClockworkProvider } from "../src";
12 | import { assert } from "chai";
13 | import { AnchorProvider } from "@coral-xyz/anchor";
14 |
15 |
16 | describe("Testing Thread Program", () => {
17 | const wallet = new NodeWallet(new Keypair());
18 | const connection = new Connection(clusterApiUrl("devnet"));
19 | const anchorProvider = new AnchorProvider(connection, wallet, AnchorProvider.defaultOptions());
20 | const provider = ClockworkProvider.fromAnchorProvider(anchorProvider);
21 | let threadPubkey: PublicKey;
22 |
23 | it("Airdrop", async () => {
24 | const tx = await connection.requestAirdrop(
25 | wallet.publicKey,
26 | 1 * LAMPORTS_PER_SOL
27 | );
28 | await new Promise((r) => setTimeout(r, 5000));
29 | console.log(tx);
30 | });
31 |
32 | it("Initialize Thread", async () => {
33 | let ix = await provider.threadCreate(
34 | wallet.publicKey,
35 | "ThreadProgramTest",
36 | [],
37 | { now: {} },
38 | 0.1 * LAMPORTS_PER_SOL
39 | );
40 | await sendTransaction(ix, provider);
41 | });
42 |
43 | it("Get Thread Address", async () => {
44 | let [pubkey, _] = provider.getThreadPDA(
45 | wallet.publicKey,
46 | "ThreadProgramTest"
47 | );
48 | threadPubkey = pubkey;
49 | });
50 |
51 | it("Get Thread Account", async () => {
52 | let i = 1;
53 | while (true) {
54 | try {
55 | let threadAccount = await provider.getThreadAccount(threadPubkey);
56 | assert.equal(threadAccount.id.toString(), "ThreadProgramTest");
57 | break;
58 | } catch (e) {
59 | console.log(
60 | "retrying in " + i + " seconds... max retries [" + i + "/10]"
61 | );
62 | if (i == 10) throw e;
63 | await new Promise((r) => setTimeout(r, i * 1000));
64 | i += 1;
65 | }
66 | }
67 | });
68 |
69 | it("Pause Thread", async () => {
70 | let ix = await provider.threadPause(wallet.publicKey, threadPubkey);
71 | await sendTransaction(ix, provider);
72 | });
73 |
74 | it("Resume Thread", async () => {
75 | let ix = await provider.threadResume(wallet.publicKey, threadPubkey);
76 | await sendTransaction(ix, provider);
77 | });
78 |
79 | it("Reset Thread", async () => {
80 | let ix = await provider.threadReset(wallet.publicKey, threadPubkey);
81 | await sendTransaction(ix, provider);
82 | });
83 |
84 | it("Update Thread", async () => {
85 | let ix = await provider.threadUpdate(wallet.publicKey, threadPubkey, {
86 | name: "TestUpdateThread",
87 | rateLimit: 32,
88 | trigger: { now: {} },
89 | });
90 | await sendTransaction(ix, provider);
91 | });
92 |
93 | //it("Thread Instruction Add", async () => {
94 | // let transfer_ix = SystemProgram.transfer({
95 | // fromPubkey: wallet.publicKey,
96 | // toPubkey: wallet.publicKey,
97 | // lamports: 1000,
98 | // });
99 | // let tx = await provider.threadInstructionAdd(
100 | // wallet.publicKey,
101 | // threadPubkey,
102 | // transfer_ix
103 | // );
104 | // console.log(tx);
105 | //});
106 |
107 | //it("Thread Instruction Remove", async () => {
108 | // let tx = await provider.threadInstructionRemove(
109 | // wallet.publicKey,
110 | // threadPubkey,
111 | // 0
112 | // );
113 | // console.loggjggjtx);
114 | //});
115 |
116 | it("Get Crate Info", async () => {
117 | let ix = await provider.getCrateInfo();
118 | await sendTransaction(ix, provider);
119 | });
120 |
121 | it("Withdraw Thread", async () => {
122 | let ix = await provider.threadWithdraw(
123 | wallet.publicKey,
124 | threadPubkey,
125 | 0.01 * LAMPORTS_PER_SOL
126 | );
127 | await sendTransaction(ix, provider);
128 | });
129 |
130 | it("Delete Thread", async () => {
131 | const ix = await provider.threadDelete(wallet.publicKey, threadPubkey);
132 | await sendTransaction(ix, provider);
133 | });
134 | });
135 |
136 | const sendTransaction = async (ix: TransactionInstruction, provider: ClockworkProvider) => {
137 | const tx = new Transaction().add(ix);
138 | const signature = await provider.anchorProvider.sendAndConfirm(tx);
139 | console.log(signature);
140 | }
141 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "include": ["src"],
3 | "compilerOptions": {
4 | "moduleResolution": "node",
5 | "target": "es2015",
6 | "module": "commonjs",
7 | "lib": ["es2020"],
8 | "outDir": "lib/",
9 | "rootDir": "./src",
10 | "declaration": true,
11 | "resolveJsonModule": true,
12 | "allowSyntheticDefaultImports": true,
13 | "esModuleInterop": true
14 | },
15 | "exclude": ["node_modules", "tests"]
16 | }
17 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/runtime@^7.12.5", "@babel/runtime@^7.17.2":
6 | version "7.21.5"
7 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.5.tgz#8492dddda9644ae3bda3b45eabe87382caee7200"
8 | integrity sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==
9 | dependencies:
10 | regenerator-runtime "^0.13.11"
11 |
12 | "@coral-xyz/anchor@^0.26.0":
13 | version "0.26.0"
14 | resolved "https://registry.yarnpkg.com/@coral-xyz/anchor/-/anchor-0.26.0.tgz#c8e4f7177e93441afd030f22d777d54d0194d7d1"
15 | integrity sha512-PxRl+wu5YyptWiR9F2MBHOLLibm87Z4IMUBPreX+DYBtPM+xggvcPi0KAN7+kIL4IrIhXI8ma5V0MCXxSN1pHg==
16 | dependencies:
17 | "@coral-xyz/borsh" "^0.26.0"
18 | "@solana/web3.js" "^1.68.0"
19 | base64-js "^1.5.1"
20 | bn.js "^5.1.2"
21 | bs58 "^4.0.1"
22 | buffer-layout "^1.2.2"
23 | camelcase "^6.3.0"
24 | cross-fetch "^3.1.5"
25 | crypto-hash "^1.3.0"
26 | eventemitter3 "^4.0.7"
27 | js-sha256 "^0.9.0"
28 | pako "^2.0.3"
29 | snake-case "^3.0.4"
30 | superstruct "^0.15.4"
31 | toml "^3.0.0"
32 |
33 | "@coral-xyz/borsh@^0.26.0":
34 | version "0.26.0"
35 | resolved "https://registry.yarnpkg.com/@coral-xyz/borsh/-/borsh-0.26.0.tgz#d054f64536d824634969e74138f9f7c52bbbc0d5"
36 | integrity sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==
37 | dependencies:
38 | bn.js "^5.1.2"
39 | buffer-layout "^1.2.0"
40 |
41 | "@cspotcode/source-map-support@^0.8.0":
42 | version "0.8.1"
43 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
44 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
45 | dependencies:
46 | "@jridgewell/trace-mapping" "0.3.9"
47 |
48 | "@jridgewell/resolve-uri@^3.0.3":
49 | version "3.1.1"
50 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
51 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
52 |
53 | "@jridgewell/sourcemap-codec@^1.4.10":
54 | version "1.4.15"
55 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
56 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
57 |
58 | "@jridgewell/trace-mapping@0.3.9":
59 | version "0.3.9"
60 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
61 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
62 | dependencies:
63 | "@jridgewell/resolve-uri" "^3.0.3"
64 | "@jridgewell/sourcemap-codec" "^1.4.10"
65 |
66 | "@noble/ed25519@^1.7.0":
67 | version "1.7.3"
68 | resolved "https://registry.yarnpkg.com/@noble/ed25519/-/ed25519-1.7.3.tgz#57e1677bf6885354b466c38e2b620c62f45a7123"
69 | integrity sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==
70 |
71 | "@noble/hashes@^1.1.2":
72 | version "1.3.0"
73 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.0.tgz#085fd70f6d7d9d109671090ccae1d3bec62554a1"
74 | integrity sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==
75 |
76 | "@noble/secp256k1@^1.6.3":
77 | version "1.7.1"
78 | resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c"
79 | integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==
80 |
81 | "@solana/buffer-layout@^4.0.0":
82 | version "4.0.1"
83 | resolved "https://registry.yarnpkg.com/@solana/buffer-layout/-/buffer-layout-4.0.1.tgz#b996235eaec15b1e0b5092a8ed6028df77fa6c15"
84 | integrity sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==
85 | dependencies:
86 | buffer "~6.0.3"
87 |
88 | "@solana/web3.js@^1.68.0", "@solana/web3.js@^1.73.2":
89 | version "1.75.0"
90 | resolved "https://registry.yarnpkg.com/@solana/web3.js/-/web3.js-1.75.0.tgz#824c6f78865007bca758ca18f268d6f7363b42e5"
91 | integrity sha512-rHQgdo1EWfb+nPUpHe4O7i8qJPELHKNR5PAZRK+a7XxiykqOfbaAlPt5boDWAGPnYbSv0ziWZv5mq9DlFaQCxg==
92 | dependencies:
93 | "@babel/runtime" "^7.12.5"
94 | "@noble/ed25519" "^1.7.0"
95 | "@noble/hashes" "^1.1.2"
96 | "@noble/secp256k1" "^1.6.3"
97 | "@solana/buffer-layout" "^4.0.0"
98 | agentkeepalive "^4.2.1"
99 | bigint-buffer "^1.1.5"
100 | bn.js "^5.0.0"
101 | borsh "^0.7.0"
102 | bs58 "^4.0.1"
103 | buffer "6.0.3"
104 | fast-stable-stringify "^1.0.0"
105 | jayson "^3.4.4"
106 | node-fetch "^2.6.7"
107 | rpc-websockets "^7.5.1"
108 | superstruct "^0.14.2"
109 |
110 | "@tsconfig/node10@^1.0.7":
111 | version "1.0.9"
112 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
113 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
114 |
115 | "@tsconfig/node12@^1.0.7":
116 | version "1.0.11"
117 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
118 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
119 |
120 | "@tsconfig/node14@^1.0.0":
121 | version "1.0.3"
122 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
123 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
124 |
125 | "@tsconfig/node16@^1.0.2":
126 | version "1.0.3"
127 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
128 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
129 |
130 | "@types/chai@^4.3.4":
131 | version "4.3.5"
132 | resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.5.tgz#ae69bcbb1bebb68c4ac0b11e9d8ed04526b3562b"
133 | integrity sha512-mEo1sAde+UCE6b2hxn332f1g1E8WfYRu6p5SvTKr2ZKC1f7gFJXk4h5PyGP9Dt6gCaG8y8XhwnXWC6Iy2cmBng==
134 |
135 | "@types/connect@^3.4.33":
136 | version "3.4.35"
137 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
138 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
139 | dependencies:
140 | "@types/node" "*"
141 |
142 | "@types/mocha@^10.0.1":
143 | version "10.0.1"
144 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.1.tgz#2f4f65bb08bc368ac39c96da7b2f09140b26851b"
145 | integrity sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==
146 |
147 | "@types/node@*", "@types/node@^18.14.0":
148 | version "18.16.3"
149 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.3.tgz#6bda7819aae6ea0b386ebc5b24bdf602f1b42b01"
150 | integrity sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==
151 |
152 | "@types/node@^12.12.54":
153 | version "12.20.55"
154 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
155 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
156 |
157 | "@types/ws@^7.4.4":
158 | version "7.4.7"
159 | resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702"
160 | integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==
161 | dependencies:
162 | "@types/node" "*"
163 |
164 | JSONStream@^1.3.5:
165 | version "1.3.5"
166 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
167 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
168 | dependencies:
169 | jsonparse "^1.2.0"
170 | through ">=2.2.7 <3"
171 |
172 | abbrev@1:
173 | version "1.1.1"
174 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
175 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
176 |
177 | acorn-walk@^8.1.1:
178 | version "8.2.0"
179 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
180 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
181 |
182 | acorn@^8.4.1:
183 | version "8.8.2"
184 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a"
185 | integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==
186 |
187 | agentkeepalive@^4.2.1:
188 | version "4.3.0"
189 | resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255"
190 | integrity sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==
191 | dependencies:
192 | debug "^4.1.0"
193 | depd "^2.0.0"
194 | humanize-ms "^1.2.1"
195 |
196 | ansi-colors@4.1.1:
197 | version "4.1.1"
198 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
199 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
200 |
201 | ansi-regex@^5.0.1:
202 | version "5.0.1"
203 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
204 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
205 |
206 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
207 | version "4.3.0"
208 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
209 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
210 | dependencies:
211 | color-convert "^2.0.1"
212 |
213 | anymatch@~3.1.2:
214 | version "3.1.3"
215 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e"
216 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
217 | dependencies:
218 | normalize-path "^3.0.0"
219 | picomatch "^2.0.4"
220 |
221 | arg@^4.1.0:
222 | version "4.1.3"
223 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
224 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
225 |
226 | argparse@^2.0.1:
227 | version "2.0.1"
228 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
229 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
230 |
231 | assertion-error@^1.1.0:
232 | version "1.1.0"
233 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
234 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
235 |
236 | balanced-match@^1.0.0:
237 | version "1.0.2"
238 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
239 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
240 |
241 | base-x@^3.0.2:
242 | version "3.0.9"
243 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320"
244 | integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==
245 | dependencies:
246 | safe-buffer "^5.0.1"
247 |
248 | base64-js@^1.3.1, base64-js@^1.5.1:
249 | version "1.5.1"
250 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
251 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
252 |
253 | bigint-buffer@^1.1.5:
254 | version "1.1.5"
255 | resolved "https://registry.yarnpkg.com/bigint-buffer/-/bigint-buffer-1.1.5.tgz#d038f31c8e4534c1f8d0015209bf34b4fa6dd442"
256 | integrity sha512-trfYco6AoZ+rKhKnxA0hgX0HAbVP/s808/EuDSe2JDzUnCp/xAsli35Orvk67UrTEcwuxZqYZDmfA2RXJgxVvA==
257 | dependencies:
258 | bindings "^1.3.0"
259 |
260 | binary-extensions@^2.0.0:
261 | version "2.2.0"
262 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
263 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
264 |
265 | bindings@^1.3.0:
266 | version "1.5.0"
267 | resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df"
268 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
269 | dependencies:
270 | file-uri-to-path "1.0.0"
271 |
272 | bn.js@^5.0.0, bn.js@^5.1.2, bn.js@^5.2.0:
273 | version "5.2.1"
274 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
275 | integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
276 |
277 | borsh@^0.7.0:
278 | version "0.7.0"
279 | resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.7.0.tgz#6e9560d719d86d90dc589bca60ffc8a6c51fec2a"
280 | integrity sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==
281 | dependencies:
282 | bn.js "^5.2.0"
283 | bs58 "^4.0.0"
284 | text-encoding-utf-8 "^1.0.2"
285 |
286 | brace-expansion@^1.1.7:
287 | version "1.1.11"
288 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
289 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
290 | dependencies:
291 | balanced-match "^1.0.0"
292 | concat-map "0.0.1"
293 |
294 | brace-expansion@^2.0.1:
295 | version "2.0.1"
296 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae"
297 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==
298 | dependencies:
299 | balanced-match "^1.0.0"
300 |
301 | braces@~3.0.2:
302 | version "3.0.2"
303 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
304 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
305 | dependencies:
306 | fill-range "^7.0.1"
307 |
308 | browser-stdout@1.3.1:
309 | version "1.3.1"
310 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60"
311 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==
312 |
313 | bs58@^4.0.0, bs58@^4.0.1:
314 | version "4.0.1"
315 | resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a"
316 | integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==
317 | dependencies:
318 | base-x "^3.0.2"
319 |
320 | buffer-layout@^1.2.0, buffer-layout@^1.2.2:
321 | version "1.2.2"
322 | resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.2.tgz#b9814e7c7235783085f9ca4966a0cfff112259d5"
323 | integrity sha512-kWSuLN694+KTk8SrYvCqwP2WcgQjoRCiF5b4QDvkkz8EmgD+aWAIceGFKMIAdmF/pH+vpgNV3d3kAKorcdAmWA==
324 |
325 | buffer@6.0.3, buffer@~6.0.3:
326 | version "6.0.3"
327 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
328 | integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==
329 | dependencies:
330 | base64-js "^1.3.1"
331 | ieee754 "^1.2.1"
332 |
333 | bufferutil@^4.0.1:
334 | version "4.0.7"
335 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad"
336 | integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==
337 | dependencies:
338 | node-gyp-build "^4.3.0"
339 |
340 | camelcase@^6.0.0, camelcase@^6.3.0:
341 | version "6.3.0"
342 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a"
343 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==
344 |
345 | chai@^4.3.7:
346 | version "4.3.7"
347 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.7.tgz#ec63f6df01829088e8bf55fca839bcd464a8ec51"
348 | integrity sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==
349 | dependencies:
350 | assertion-error "^1.1.0"
351 | check-error "^1.0.2"
352 | deep-eql "^4.1.2"
353 | get-func-name "^2.0.0"
354 | loupe "^2.3.1"
355 | pathval "^1.1.1"
356 | type-detect "^4.0.5"
357 |
358 | chalk@^4.1.0:
359 | version "4.1.2"
360 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
361 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
362 | dependencies:
363 | ansi-styles "^4.1.0"
364 | supports-color "^7.1.0"
365 |
366 | check-error@^1.0.2:
367 | version "1.0.2"
368 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82"
369 | integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==
370 |
371 | chokidar@3.5.3, chokidar@^3.5.2:
372 | version "3.5.3"
373 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
374 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==
375 | dependencies:
376 | anymatch "~3.1.2"
377 | braces "~3.0.2"
378 | glob-parent "~5.1.2"
379 | is-binary-path "~2.1.0"
380 | is-glob "~4.0.1"
381 | normalize-path "~3.0.0"
382 | readdirp "~3.6.0"
383 | optionalDependencies:
384 | fsevents "~2.3.2"
385 |
386 | cliui@^7.0.2:
387 | version "7.0.4"
388 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
389 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
390 | dependencies:
391 | string-width "^4.2.0"
392 | strip-ansi "^6.0.0"
393 | wrap-ansi "^7.0.0"
394 |
395 | color-convert@^2.0.1:
396 | version "2.0.1"
397 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
398 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
399 | dependencies:
400 | color-name "~1.1.4"
401 |
402 | color-name@~1.1.4:
403 | version "1.1.4"
404 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
405 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
406 |
407 | commander@^2.20.3:
408 | version "2.20.3"
409 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
410 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
411 |
412 | concat-map@0.0.1:
413 | version "0.0.1"
414 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
415 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
416 |
417 | create-require@^1.1.0:
418 | version "1.1.1"
419 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
420 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
421 |
422 | cross-fetch@^3.1.5:
423 | version "3.1.5"
424 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
425 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
426 | dependencies:
427 | node-fetch "2.6.7"
428 |
429 | crypto-hash@^1.3.0:
430 | version "1.3.0"
431 | resolved "https://registry.yarnpkg.com/crypto-hash/-/crypto-hash-1.3.0.tgz#b402cb08f4529e9f4f09346c3e275942f845e247"
432 | integrity sha512-lyAZ0EMyjDkVvz8WOeVnuCPvKVBXcMv1l5SVqO1yC7PzTwrD/pPje/BIRbWhMoPe436U+Y2nD7f5bFx0kt+Sbg==
433 |
434 | debug@4.3.4, debug@^4.1.0:
435 | version "4.3.4"
436 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
437 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
438 | dependencies:
439 | ms "2.1.2"
440 |
441 | debug@^3.2.7:
442 | version "3.2.7"
443 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
444 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
445 | dependencies:
446 | ms "^2.1.1"
447 |
448 | decamelize@^4.0.0:
449 | version "4.0.0"
450 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837"
451 | integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==
452 |
453 | deep-eql@^4.1.2:
454 | version "4.1.3"
455 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d"
456 | integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==
457 | dependencies:
458 | type-detect "^4.0.0"
459 |
460 | delay@^5.0.0:
461 | version "5.0.0"
462 | resolved "https://registry.yarnpkg.com/delay/-/delay-5.0.0.tgz#137045ef1b96e5071060dd5be60bf9334436bd1d"
463 | integrity sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==
464 |
465 | depd@^2.0.0:
466 | version "2.0.0"
467 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
468 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
469 |
470 | diff@5.0.0:
471 | version "5.0.0"
472 | resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b"
473 | integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==
474 |
475 | diff@^4.0.1:
476 | version "4.0.2"
477 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
478 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
479 |
480 | dot-case@^3.0.4:
481 | version "3.0.4"
482 | resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751"
483 | integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==
484 | dependencies:
485 | no-case "^3.0.4"
486 | tslib "^2.0.3"
487 |
488 | emoji-regex@^8.0.0:
489 | version "8.0.0"
490 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
491 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
492 |
493 | es6-promise@^4.0.3:
494 | version "4.2.8"
495 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a"
496 | integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==
497 |
498 | es6-promisify@^5.0.0:
499 | version "5.0.0"
500 | resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203"
501 | integrity sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==
502 | dependencies:
503 | es6-promise "^4.0.3"
504 |
505 | escalade@^3.1.1:
506 | version "3.1.1"
507 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
508 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
509 |
510 | escape-string-regexp@4.0.0:
511 | version "4.0.0"
512 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
513 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
514 |
515 | eventemitter3@^4.0.7:
516 | version "4.0.7"
517 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
518 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
519 |
520 | eyes@^0.1.8:
521 | version "0.1.8"
522 | resolved "https://registry.yarnpkg.com/eyes/-/eyes-0.1.8.tgz#62cf120234c683785d902348a800ef3e0cc20bc0"
523 | integrity sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==
524 |
525 | fast-stable-stringify@^1.0.0:
526 | version "1.0.0"
527 | resolved "https://registry.yarnpkg.com/fast-stable-stringify/-/fast-stable-stringify-1.0.0.tgz#5c5543462b22aeeefd36d05b34e51c78cb86d313"
528 | integrity sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==
529 |
530 | file-uri-to-path@1.0.0:
531 | version "1.0.0"
532 | resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd"
533 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
534 |
535 | fill-range@^7.0.1:
536 | version "7.0.1"
537 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
538 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
539 | dependencies:
540 | to-regex-range "^5.0.1"
541 |
542 | find-up@5.0.0:
543 | version "5.0.0"
544 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
545 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
546 | dependencies:
547 | locate-path "^6.0.0"
548 | path-exists "^4.0.0"
549 |
550 | flat@^5.0.2:
551 | version "5.0.2"
552 | resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
553 | integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
554 |
555 | fs.realpath@^1.0.0:
556 | version "1.0.0"
557 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
558 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
559 |
560 | fsevents@~2.3.2:
561 | version "2.3.2"
562 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
563 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
564 |
565 | get-caller-file@^2.0.5:
566 | version "2.0.5"
567 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
568 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
569 |
570 | get-func-name@^2.0.0:
571 | version "2.0.0"
572 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41"
573 | integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==
574 |
575 | glob-parent@~5.1.2:
576 | version "5.1.2"
577 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
578 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
579 | dependencies:
580 | is-glob "^4.0.1"
581 |
582 | glob@7.2.0:
583 | version "7.2.0"
584 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
585 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
586 | dependencies:
587 | fs.realpath "^1.0.0"
588 | inflight "^1.0.4"
589 | inherits "2"
590 | minimatch "^3.0.4"
591 | once "^1.3.0"
592 | path-is-absolute "^1.0.0"
593 |
594 | has-flag@^3.0.0:
595 | version "3.0.0"
596 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
597 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
598 |
599 | has-flag@^4.0.0:
600 | version "4.0.0"
601 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
602 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
603 |
604 | he@1.2.0:
605 | version "1.2.0"
606 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
607 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
608 |
609 | humanize-ms@^1.2.1:
610 | version "1.2.1"
611 | resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed"
612 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
613 | dependencies:
614 | ms "^2.0.0"
615 |
616 | ieee754@^1.2.1:
617 | version "1.2.1"
618 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
619 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
620 |
621 | ignore-by-default@^1.0.1:
622 | version "1.0.1"
623 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
624 | integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==
625 |
626 | inflight@^1.0.4:
627 | version "1.0.6"
628 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
629 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
630 | dependencies:
631 | once "^1.3.0"
632 | wrappy "1"
633 |
634 | inherits@2:
635 | version "2.0.4"
636 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
637 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
638 |
639 | is-binary-path@~2.1.0:
640 | version "2.1.0"
641 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09"
642 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
643 | dependencies:
644 | binary-extensions "^2.0.0"
645 |
646 | is-extglob@^2.1.1:
647 | version "2.1.1"
648 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
649 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
650 |
651 | is-fullwidth-code-point@^3.0.0:
652 | version "3.0.0"
653 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
654 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
655 |
656 | is-glob@^4.0.1, is-glob@~4.0.1:
657 | version "4.0.3"
658 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
659 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
660 | dependencies:
661 | is-extglob "^2.1.1"
662 |
663 | is-number@^7.0.0:
664 | version "7.0.0"
665 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
666 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
667 |
668 | is-plain-obj@^2.1.0:
669 | version "2.1.0"
670 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
671 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
672 |
673 | is-unicode-supported@^0.1.0:
674 | version "0.1.0"
675 | resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
676 | integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
677 |
678 | isomorphic-ws@^4.0.1:
679 | version "4.0.1"
680 | resolved "https://registry.yarnpkg.com/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#55fd4cd6c5e6491e76dc125938dd863f5cd4f2dc"
681 | integrity sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==
682 |
683 | jayson@^3.4.4:
684 | version "3.7.0"
685 | resolved "https://registry.yarnpkg.com/jayson/-/jayson-3.7.0.tgz#b735b12d06d348639ae8230d7a1e2916cb078f25"
686 | integrity sha512-tfy39KJMrrXJ+mFcMpxwBvFDetS8LAID93+rycFglIQM4kl3uNR3W4lBLE/FFhsoUCEox5Dt2adVpDm/XtebbQ==
687 | dependencies:
688 | "@types/connect" "^3.4.33"
689 | "@types/node" "^12.12.54"
690 | "@types/ws" "^7.4.4"
691 | JSONStream "^1.3.5"
692 | commander "^2.20.3"
693 | delay "^5.0.0"
694 | es6-promisify "^5.0.0"
695 | eyes "^0.1.8"
696 | isomorphic-ws "^4.0.1"
697 | json-stringify-safe "^5.0.1"
698 | lodash "^4.17.20"
699 | uuid "^8.3.2"
700 | ws "^7.4.5"
701 |
702 | js-sha256@^0.9.0:
703 | version "0.9.0"
704 | resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966"
705 | integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==
706 |
707 | js-yaml@4.1.0:
708 | version "4.1.0"
709 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
710 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
711 | dependencies:
712 | argparse "^2.0.1"
713 |
714 | json-stringify-safe@^5.0.1:
715 | version "5.0.1"
716 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
717 | integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==
718 |
719 | jsonparse@^1.2.0:
720 | version "1.3.1"
721 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
722 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
723 |
724 | locate-path@^6.0.0:
725 | version "6.0.0"
726 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
727 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
728 | dependencies:
729 | p-locate "^5.0.0"
730 |
731 | lodash@^4.17.20:
732 | version "4.17.21"
733 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
734 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
735 |
736 | log-symbols@4.1.0:
737 | version "4.1.0"
738 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
739 | integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
740 | dependencies:
741 | chalk "^4.1.0"
742 | is-unicode-supported "^0.1.0"
743 |
744 | loupe@^2.3.1:
745 | version "2.3.6"
746 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.6.tgz#76e4af498103c532d1ecc9be102036a21f787b53"
747 | integrity sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==
748 | dependencies:
749 | get-func-name "^2.0.0"
750 |
751 | lower-case@^2.0.2:
752 | version "2.0.2"
753 | resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28"
754 | integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==
755 | dependencies:
756 | tslib "^2.0.3"
757 |
758 | make-error@^1.1.1:
759 | version "1.3.6"
760 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
761 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
762 |
763 | minimatch@5.0.1:
764 | version "5.0.1"
765 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b"
766 | integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==
767 | dependencies:
768 | brace-expansion "^2.0.1"
769 |
770 | minimatch@^3.0.4, minimatch@^3.1.2:
771 | version "3.1.2"
772 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
773 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
774 | dependencies:
775 | brace-expansion "^1.1.7"
776 |
777 | mocha@^10.2.0:
778 | version "10.2.0"
779 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.2.0.tgz#1fd4a7c32ba5ac372e03a17eef435bd00e5c68b8"
780 | integrity sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==
781 | dependencies:
782 | ansi-colors "4.1.1"
783 | browser-stdout "1.3.1"
784 | chokidar "3.5.3"
785 | debug "4.3.4"
786 | diff "5.0.0"
787 | escape-string-regexp "4.0.0"
788 | find-up "5.0.0"
789 | glob "7.2.0"
790 | he "1.2.0"
791 | js-yaml "4.1.0"
792 | log-symbols "4.1.0"
793 | minimatch "5.0.1"
794 | ms "2.1.3"
795 | nanoid "3.3.3"
796 | serialize-javascript "6.0.0"
797 | strip-json-comments "3.1.1"
798 | supports-color "8.1.1"
799 | workerpool "6.2.1"
800 | yargs "16.2.0"
801 | yargs-parser "20.2.4"
802 | yargs-unparser "2.0.0"
803 |
804 | ms@2.1.2:
805 | version "2.1.2"
806 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
807 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
808 |
809 | ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
810 | version "2.1.3"
811 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
812 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
813 |
814 | nanoid@3.3.3:
815 | version "3.3.3"
816 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
817 | integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
818 |
819 | no-case@^3.0.4:
820 | version "3.0.4"
821 | resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d"
822 | integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==
823 | dependencies:
824 | lower-case "^2.0.2"
825 | tslib "^2.0.3"
826 |
827 | node-fetch@2.6.7:
828 | version "2.6.7"
829 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
830 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
831 | dependencies:
832 | whatwg-url "^5.0.0"
833 |
834 | node-fetch@^2.6.7:
835 | version "2.6.9"
836 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6"
837 | integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==
838 | dependencies:
839 | whatwg-url "^5.0.0"
840 |
841 | node-gyp-build@^4.3.0:
842 | version "4.6.0"
843 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
844 | integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
845 |
846 | nodemon@^2.0.20:
847 | version "2.0.22"
848 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.22.tgz#182c45c3a78da486f673d6c1702e00728daf5258"
849 | integrity sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==
850 | dependencies:
851 | chokidar "^3.5.2"
852 | debug "^3.2.7"
853 | ignore-by-default "^1.0.1"
854 | minimatch "^3.1.2"
855 | pstree.remy "^1.1.8"
856 | semver "^5.7.1"
857 | simple-update-notifier "^1.0.7"
858 | supports-color "^5.5.0"
859 | touch "^3.1.0"
860 | undefsafe "^2.0.5"
861 |
862 | nopt@~1.0.10:
863 | version "1.0.10"
864 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee"
865 | integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==
866 | dependencies:
867 | abbrev "1"
868 |
869 | normalize-path@^3.0.0, normalize-path@~3.0.0:
870 | version "3.0.0"
871 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65"
872 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
873 |
874 | once@^1.3.0:
875 | version "1.4.0"
876 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
877 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
878 | dependencies:
879 | wrappy "1"
880 |
881 | p-limit@^3.0.2:
882 | version "3.1.0"
883 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
884 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
885 | dependencies:
886 | yocto-queue "^0.1.0"
887 |
888 | p-locate@^5.0.0:
889 | version "5.0.0"
890 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
891 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
892 | dependencies:
893 | p-limit "^3.0.2"
894 |
895 | pako@^2.0.3:
896 | version "2.1.0"
897 | resolved "https://registry.yarnpkg.com/pako/-/pako-2.1.0.tgz#266cc37f98c7d883545d11335c00fbd4062c9a86"
898 | integrity sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==
899 |
900 | path-exists@^4.0.0:
901 | version "4.0.0"
902 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
903 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
904 |
905 | path-is-absolute@^1.0.0:
906 | version "1.0.1"
907 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
908 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
909 |
910 | pathval@^1.1.1:
911 | version "1.1.1"
912 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
913 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
914 |
915 | picomatch@^2.0.4, picomatch@^2.2.1:
916 | version "2.3.1"
917 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
918 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
919 |
920 | pstree.remy@^1.1.8:
921 | version "1.1.8"
922 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a"
923 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==
924 |
925 | randombytes@^2.1.0:
926 | version "2.1.0"
927 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a"
928 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==
929 | dependencies:
930 | safe-buffer "^5.1.0"
931 |
932 | readdirp@~3.6.0:
933 | version "3.6.0"
934 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7"
935 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
936 | dependencies:
937 | picomatch "^2.2.1"
938 |
939 | regenerator-runtime@^0.13.11:
940 | version "0.13.11"
941 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9"
942 | integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==
943 |
944 | require-directory@^2.1.1:
945 | version "2.1.1"
946 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
947 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
948 |
949 | rpc-websockets@^7.5.1:
950 | version "7.5.1"
951 | resolved "https://registry.yarnpkg.com/rpc-websockets/-/rpc-websockets-7.5.1.tgz#e0a05d525a97e7efc31a0617f093a13a2e10c401"
952 | integrity sha512-kGFkeTsmd37pHPMaHIgN1LVKXMi0JD782v4Ds9ZKtLlwdTKjn+CxM9A9/gLT2LaOuEcEFGL98h1QWQtlOIdW0w==
953 | dependencies:
954 | "@babel/runtime" "^7.17.2"
955 | eventemitter3 "^4.0.7"
956 | uuid "^8.3.2"
957 | ws "^8.5.0"
958 | optionalDependencies:
959 | bufferutil "^4.0.1"
960 | utf-8-validate "^5.0.2"
961 |
962 | safe-buffer@^5.0.1, safe-buffer@^5.1.0:
963 | version "5.2.1"
964 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
965 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
966 |
967 | semver@^5.7.1:
968 | version "5.7.1"
969 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
970 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
971 |
972 | semver@~7.0.0:
973 | version "7.0.0"
974 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"
975 | integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==
976 |
977 | serialize-javascript@6.0.0:
978 | version "6.0.0"
979 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8"
980 | integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==
981 | dependencies:
982 | randombytes "^2.1.0"
983 |
984 | simple-update-notifier@^1.0.7:
985 | version "1.1.0"
986 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz#67694c121de354af592b347cdba798463ed49c82"
987 | integrity sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==
988 | dependencies:
989 | semver "~7.0.0"
990 |
991 | snake-case@^3.0.4:
992 | version "3.0.4"
993 | resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-3.0.4.tgz#4f2bbd568e9935abdfd593f34c691dadb49c452c"
994 | integrity sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==
995 | dependencies:
996 | dot-case "^3.0.4"
997 | tslib "^2.0.3"
998 |
999 | string-width@^4.1.0, string-width@^4.2.0:
1000 | version "4.2.3"
1001 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
1002 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1003 | dependencies:
1004 | emoji-regex "^8.0.0"
1005 | is-fullwidth-code-point "^3.0.0"
1006 | strip-ansi "^6.0.1"
1007 |
1008 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
1009 | version "6.0.1"
1010 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
1011 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1012 | dependencies:
1013 | ansi-regex "^5.0.1"
1014 |
1015 | strip-json-comments@3.1.1:
1016 | version "3.1.1"
1017 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
1018 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
1019 |
1020 | superstruct@^0.14.2:
1021 | version "0.14.2"
1022 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.14.2.tgz#0dbcdf3d83676588828f1cf5ed35cda02f59025b"
1023 | integrity sha512-nPewA6m9mR3d6k7WkZ8N8zpTWfenFH3q9pA2PkuiZxINr9DKB2+40wEQf0ixn8VaGuJ78AB6iWOtStI+/4FKZQ==
1024 |
1025 | superstruct@^0.15.4:
1026 | version "0.15.5"
1027 | resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab"
1028 | integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ==
1029 |
1030 | supports-color@8.1.1:
1031 | version "8.1.1"
1032 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c"
1033 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==
1034 | dependencies:
1035 | has-flag "^4.0.0"
1036 |
1037 | supports-color@^5.5.0:
1038 | version "5.5.0"
1039 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
1040 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
1041 | dependencies:
1042 | has-flag "^3.0.0"
1043 |
1044 | supports-color@^7.1.0:
1045 | version "7.2.0"
1046 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
1047 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
1048 | dependencies:
1049 | has-flag "^4.0.0"
1050 |
1051 | text-encoding-utf-8@^1.0.2:
1052 | version "1.0.2"
1053 | resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13"
1054 | integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==
1055 |
1056 | "through@>=2.2.7 <3":
1057 | version "2.3.8"
1058 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
1059 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
1060 |
1061 | to-regex-range@^5.0.1:
1062 | version "5.0.1"
1063 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
1064 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1065 | dependencies:
1066 | is-number "^7.0.0"
1067 |
1068 | toml@^3.0.0:
1069 | version "3.0.0"
1070 | resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee"
1071 | integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==
1072 |
1073 | touch@^3.1.0:
1074 | version "3.1.0"
1075 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b"
1076 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==
1077 | dependencies:
1078 | nopt "~1.0.10"
1079 |
1080 | tr46@~0.0.3:
1081 | version "0.0.3"
1082 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
1083 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
1084 |
1085 | ts-node@^10.9.1:
1086 | version "10.9.1"
1087 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
1088 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
1089 | dependencies:
1090 | "@cspotcode/source-map-support" "^0.8.0"
1091 | "@tsconfig/node10" "^1.0.7"
1092 | "@tsconfig/node12" "^1.0.7"
1093 | "@tsconfig/node14" "^1.0.0"
1094 | "@tsconfig/node16" "^1.0.2"
1095 | acorn "^8.4.1"
1096 | acorn-walk "^8.1.1"
1097 | arg "^4.1.0"
1098 | create-require "^1.1.0"
1099 | diff "^4.0.1"
1100 | make-error "^1.1.1"
1101 | v8-compile-cache-lib "^3.0.1"
1102 | yn "3.1.1"
1103 |
1104 | tslib@^2.0.3:
1105 | version "2.5.0"
1106 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf"
1107 | integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==
1108 |
1109 | type-detect@^4.0.0, type-detect@^4.0.5:
1110 | version "4.0.8"
1111 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
1112 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
1113 |
1114 | typescript@^4.9.5:
1115 | version "4.9.5"
1116 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a"
1117 | integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==
1118 |
1119 | undefsafe@^2.0.5:
1120 | version "2.0.5"
1121 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
1122 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==
1123 |
1124 | utf-8-validate@^5.0.2:
1125 | version "5.0.10"
1126 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
1127 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
1128 | dependencies:
1129 | node-gyp-build "^4.3.0"
1130 |
1131 | uuid@^8.3.2:
1132 | version "8.3.2"
1133 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
1134 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
1135 |
1136 | v8-compile-cache-lib@^3.0.1:
1137 | version "3.0.1"
1138 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
1139 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
1140 |
1141 | webidl-conversions@^3.0.0:
1142 | version "3.0.1"
1143 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
1144 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
1145 |
1146 | whatwg-url@^5.0.0:
1147 | version "5.0.0"
1148 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
1149 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
1150 | dependencies:
1151 | tr46 "~0.0.3"
1152 | webidl-conversions "^3.0.0"
1153 |
1154 | workerpool@6.2.1:
1155 | version "6.2.1"
1156 | resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343"
1157 | integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==
1158 |
1159 | wrap-ansi@^7.0.0:
1160 | version "7.0.0"
1161 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
1162 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
1163 | dependencies:
1164 | ansi-styles "^4.0.0"
1165 | string-width "^4.1.0"
1166 | strip-ansi "^6.0.0"
1167 |
1168 | wrappy@1:
1169 | version "1.0.2"
1170 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1171 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
1172 |
1173 | ws@^7.4.5:
1174 | version "7.5.9"
1175 | resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
1176 | integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==
1177 |
1178 | ws@^8.5.0:
1179 | version "8.13.0"
1180 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
1181 | integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
1182 |
1183 | y18n@^5.0.5:
1184 | version "5.0.8"
1185 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
1186 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
1187 |
1188 | yargs-parser@20.2.4:
1189 | version "20.2.4"
1190 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54"
1191 | integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==
1192 |
1193 | yargs-parser@^20.2.2:
1194 | version "20.2.9"
1195 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
1196 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
1197 |
1198 | yargs-unparser@2.0.0:
1199 | version "2.0.0"
1200 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb"
1201 | integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==
1202 | dependencies:
1203 | camelcase "^6.0.0"
1204 | decamelize "^4.0.0"
1205 | flat "^5.0.2"
1206 | is-plain-obj "^2.1.0"
1207 |
1208 | yargs@16.2.0:
1209 | version "16.2.0"
1210 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
1211 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
1212 | dependencies:
1213 | cliui "^7.0.2"
1214 | escalade "^3.1.1"
1215 | get-caller-file "^2.0.5"
1216 | require-directory "^2.1.1"
1217 | string-width "^4.2.0"
1218 | y18n "^5.0.5"
1219 | yargs-parser "^20.2.2"
1220 |
1221 | yn@3.1.1:
1222 | version "3.1.1"
1223 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
1224 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
1225 |
1226 | yocto-queue@^0.1.0:
1227 | version "0.1.0"
1228 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
1229 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
1230 |
--------------------------------------------------------------------------------