├── .eslintrc.js
├── .gitignore
├── .prettierrc.js
├── LICENSE
├── README.md
├── out.log
├── package.json
├── src
├── ChainSync.ts
├── keyring.ts
├── main.ts
├── sidecar
│ ├── SidecarApi.ts
│ └── types
│ │ ├── AccountBalanceInfo.ts
│ │ ├── At.ts
│ │ ├── Block.ts
│ │ └── TransactionMaterial.ts
├── static
│ └── architecture.png
├── transaction
│ ├── TransactionConstruct.ts
│ └── types
│ │ ├── BaseInfo.ts
│ │ ├── MaybeTimepoint.ts
│ │ ├── TransactionOpts.ts
│ │ ├── UnsignedMaterial.ts
│ │ └── index.ts
└── util
│ ├── display.ts
│ ├── index.ts
│ ├── input.ts
│ ├── sleep.ts
│ └── sortAddreses.ts
├── tsconfig.json
└── yarn.lock
/.eslintrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: [
3 | 'eslint:recommended',
4 | 'plugin:@typescript-eslint/recommended',
5 | 'plugin:@typescript-eslint/recommended-requiring-type-checking',
6 | 'prettier/@typescript-eslint',
7 | 'plugin:prettier/recommended'
8 | ],
9 | parser: '@typescript-eslint/parser',
10 | parserOptions: {
11 | project: './tsconfig.json'
12 | },
13 | plugins: [
14 | '@typescript-eslint',
15 | 'prettier',
16 | 'simple-import-sort'
17 | ],
18 | rules: {
19 | // Sort imports
20 | 'simple-import-sort/sort': 'error',
21 | // https://github.com/eslint/eslint/issues/2321#issuecomment-134665757
22 | 'no-unused-vars': [2, { args: 'all', argsIgnorePattern: '^_' }],
23 | '@typescript-eslint/no-unused-vars': [
24 | 2,
25 | { args: 'all', argsIgnorePattern: '^_' }
26 | ],
27 | "@typescript-eslint/ban-types": 0,
28 | },
29 | };
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | build
3 | yarn-error.log
4 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | semi: true,
3 | singleQuote: true,
4 | tabWidth: 4,
5 | useTabs: true,
6 | };
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Apache License
2 | Version 2.0, January 2004
3 | http://www.apache.org/licenses/
4 |
5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6 |
7 | 1. Definitions.
8 |
9 | "License" shall mean the terms and conditions for use, reproduction,
10 | and distribution as defined by Sections 1 through 9 of this document.
11 |
12 | "Licensor" shall mean the copyright owner or entity authorized by
13 | the copyright owner that is granting the License.
14 |
15 | "Legal Entity" shall mean the union of the acting entity and all
16 | other entities that control, are controlled by, or are under common
17 | control with that entity. For the purposes of this definition,
18 | "control" means (i) the power, direct or indirect, to cause the
19 | direction or management of such entity, whether by contract or
20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
21 | outstanding shares, or (iii) beneficial ownership of such entity.
22 |
23 | "You" (or "Your") shall mean an individual or Legal Entity
24 | exercising permissions granted by this License.
25 |
26 | "Source" form shall mean the preferred form for making modifications,
27 | including but not limited to software source code, documentation
28 | source, and configuration files.
29 |
30 | "Object" form shall mean any form resulting from mechanical
31 | transformation or translation of a Source form, including but
32 | not limited to compiled object code, generated documentation,
33 | and conversions to other media types.
34 |
35 | "Work" shall mean the work of authorship, whether in Source or
36 | Object form, made available under the License, as indicated by a
37 | copyright notice that is included in or attached to the work
38 | (an example is provided in the Appendix below).
39 |
40 | "Derivative Works" shall mean any work, whether in Source or Object
41 | form, that is based on (or derived from) the Work and for which the
42 | editorial revisions, annotations, elaborations, or other modifications
43 | represent, as a whole, an original work of authorship. For the purposes
44 | of this License, Derivative Works shall not include works that remain
45 | separable from, or merely link (or bind by name) to the interfaces of,
46 | the Work and Derivative Works thereof.
47 |
48 | "Contribution" shall mean any work of authorship, including
49 | the original version of the Work and any modifications or additions
50 | to that Work or Derivative Works thereof, that is intentionally
51 | submitted to Licensor for inclusion in the Work by the copyright owner
52 | or by an individual or Legal Entity authorized to submit on behalf of
53 | the copyright owner. For the purposes of this definition, "submitted"
54 | means any form of electronic, verbal, or written communication sent
55 | to the Licensor or its representatives, including but not limited to
56 | communication on electronic mailing lists, source code control systems,
57 | and issue tracking systems that are managed by, or on behalf of, the
58 | Licensor for the purpose of discussing and improving the Work, but
59 | excluding communication that is conspicuously marked or otherwise
60 | designated in writing by the copyright owner as "Not a Contribution."
61 |
62 | "Contributor" shall mean Licensor and any individual or Legal Entity
63 | on behalf of whom a Contribution has been received by Licensor and
64 | subsequently incorporated within the Work.
65 |
66 | 2. Grant of Copyright License. Subject to the terms and conditions of
67 | this License, each Contributor hereby grants to You a perpetual,
68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69 | copyright license to reproduce, prepare Derivative Works of,
70 | publicly display, publicly perform, sublicense, and distribute the
71 | Work and such Derivative Works in Source or Object form.
72 |
73 | 3. Grant of Patent License. Subject to the terms and conditions of
74 | this License, each Contributor hereby grants to You a perpetual,
75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76 | (except as stated in this section) patent license to make, have made,
77 | use, offer to sell, sell, import, and otherwise transfer the Work,
78 | where such license applies only to those patent claims licensable
79 | by such Contributor that are necessarily infringed by their
80 | Contribution(s) alone or by combination of their Contribution(s)
81 | with the Work to which such Contribution(s) was submitted. If You
82 | institute patent litigation against any entity (including a
83 | cross-claim or counterclaim in a lawsuit) alleging that the Work
84 | or a Contribution incorporated within the Work constitutes direct
85 | or contributory patent infringement, then any patent licenses
86 | granted to You under this License for that Work shall terminate
87 | as of the date such litigation is filed.
88 |
89 | 4. Redistribution. You may reproduce and distribute copies of the
90 | Work or Derivative Works thereof in any medium, with or without
91 | modifications, and in Source or Object form, provided that You
92 | meet the following conditions:
93 |
94 | (a) You must give any other recipients of the Work or
95 | Derivative Works a copy of this License; and
96 |
97 | (b) You must cause any modified files to carry prominent notices
98 | stating that You changed the files; and
99 |
100 | (c) You must retain, in the Source form of any Derivative Works
101 | that You distribute, all copyright, patent, trademark, and
102 | attribution notices from the Source form of the Work,
103 | excluding those notices that do not pertain to any part of
104 | the Derivative Works; and
105 |
106 | (d) If the Work includes a "NOTICE" text file as part of its
107 | distribution, then any Derivative Works that You distribute must
108 | include a readable copy of the attribution notices contained
109 | within such NOTICE file, excluding those notices that do not
110 | pertain to any part of the Derivative Works, in at least one
111 | of the following places: within a NOTICE text file distributed
112 | as part of the Derivative Works; within the Source form or
113 | documentation, if provided along with the Derivative Works; or,
114 | within a display generated by the Derivative Works, if and
115 | wherever such third-party notices normally appear. The contents
116 | of the NOTICE file are for informational purposes only and
117 | do not modify the License. You may add Your own attribution
118 | notices within Derivative Works that You distribute, alongside
119 | or as an addendum to the NOTICE text from the Work, provided
120 | that such additional attribution notices cannot be construed
121 | as modifying the License.
122 |
123 | You may add Your own copyright statement to Your modifications and
124 | may provide additional or different license terms and conditions
125 | for use, reproduction, or distribution of Your modifications, or
126 | for any such Derivative Works as a whole, provided Your use,
127 | reproduction, and distribution of the Work otherwise complies with
128 | the conditions stated in this License.
129 |
130 | 5. Submission of Contributions. Unless You explicitly state otherwise,
131 | any Contribution intentionally submitted for inclusion in the Work
132 | by You to the Licensor shall be under the terms and conditions of
133 | this License, without any additional terms or conditions.
134 | Notwithstanding the above, nothing herein shall supersede or modify
135 | the terms of any separate license agreement you may have executed
136 | with Licensor regarding such Contributions.
137 |
138 | 6. Trademarks. This License does not grant permission to use the trade
139 | names, trademarks, service marks, or product names of the Licensor,
140 | except as required for reasonable and customary use in describing the
141 | origin of the Work and reproducing the content of the NOTICE file.
142 |
143 | 7. Disclaimer of Warranty. Unless required by applicable law or
144 | agreed to in writing, Licensor provides the Work (and each
145 | Contributor provides its Contributions) on an "AS IS" BASIS,
146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 | implied, including, without limitation, any warranties or conditions
148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 | PARTICULAR PURPOSE. You are solely responsible for determining the
150 | appropriateness of using or redistributing the Work and assume any
151 | risks associated with Your exercise of permissions under this License.
152 |
153 | 8. Limitation of Liability. In no event and under no legal theory,
154 | whether in tort (including negligence), contract, or otherwise,
155 | unless required by applicable law (such as deliberate and grossly
156 | negligent acts) or agreed to in writing, shall any Contributor be
157 | liable to You for damages, including any direct, indirect, special,
158 | incidental, or consequential damages of any character arising as a
159 | result of this License or out of the use or inability to use the
160 | Work (including but not limited to damages for loss of goodwill,
161 | work stoppage, computer failure or malfunction, or any and all
162 | other commercial damages or losses), even if such Contributor
163 | has been advised of the possibility of such damages.
164 |
165 | 9. Accepting Warranty or Additional Liability. While redistributing
166 | the Work or Derivative Works thereof, You may choose to offer,
167 | and charge a fee for, acceptance of support, warranty, indemnity,
168 | or other liability obligations and/or rights consistent with this
169 | License. However, in accepting such obligations, You may act only
170 | on Your own behalf and on Your sole responsibility, not on behalf
171 | of any other Contributor, and only if You agree to indemnify,
172 | defend, and hold each Contributor harmless for any liability
173 | incurred by, or claims asserted against, such Contributor by reason
174 | of your accepting any such warranty or additional liability.
175 |
176 | END OF TERMS AND CONDITIONS
177 |
178 | APPENDIX: How to apply the Apache License to your work.
179 |
180 | To apply the Apache License to your work, attach the following
181 | boilerplate notice, with the fields enclosed by brackets "[]"
182 | replaced with your own identifying information. (Don't include
183 | the brackets!) The text should be enclosed in the appropriate
184 | comment syntax for the file format. We also recommend that a
185 | file or class name and description of purpose be included on the
186 | same "printed page" as the copyright notice for easier
187 | identification within third-party archives.
188 |
189 | Copyright [yyyy] [name of copyright owner]
190 |
191 | Licensed under the Apache License, Version 2.0 (the "License");
192 | you may not use this file except in compliance with the License.
193 | You may obtain a copy of the License at
194 |
195 | http://www.apache.org/licenses/LICENSE-2.0
196 |
197 | Unless required by applicable law or agreed to in writing, software
198 | distributed under the License is distributed on an "AS IS" BASIS,
199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 | See the License for the specific language governing permissions and
201 | limitations under the License.
202 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Proxy hot wallet demo for Substrate (Polkadot & Kusama)
2 |
3 | Demo for a safe and effective custodial hot wallet architecture using features innovated by [Substrate](https://substrate.dev/) FRAME pallets and featured in production chains such [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/).
4 |
5 | By [@joepetrowski](https://github.com/joepetrowski) & [@emostov](https://github.com/emostov)
6 |
7 | **N.B.** This demo needs some updates to reflect best practices. Primarily, there should be NonTransfer proxies that have the ability to remove the Transfer proxies if a questionable proxy announcement is made. Please file an issue if would like clarification and/or see the updates reflected in the demo.
8 |
9 | ## Disclaimer
10 |
11 | This repo is for demonstration purposes only.
12 |
13 | ## Table of contents
14 |
15 | - [Background](#background)
16 | - [Technologies](#technologies)
17 | - [Architecture](#architecture)
18 | - [Demo outline](#demo-outline)
19 | - [Run](#run)
20 |
21 | ## Background
22 |
23 | When managing significant sums of funds on behalf of other entities, a major challenge is moving around funds without compromising the private key of the deposit addresses. In traditional block chains the private key must be "hot" (on a device exposed to the internet) in order to efficiently and programmatically move funds from the account (i.e. accounts that a user might deposit funds to). The moment this "hot" key is comprised the attacker has total control of funds.
24 |
25 | In this repo we demonstrate an architecture pattern enabled by the [Substrate FRAME](https://substrate.dev/docs/en/knowledgebase/runtime/frame) [`proxy`](https://github.com/paritytech/substrate/tree/master/frame/proxy), [`multisig`](https://github.com/paritytech/substrate/tree/master/frame/multisig) and [`utility`](https://github.com/paritytech/substrate/tree/master/frame/utility#for-pseudonymal-dispatch) (see pseudonymal dispatch) pallets, that minimizes attack vectors associated with operating a hot wallet as a custodian.
26 |
27 | The "hot" account is a multisig composite address that adds a proxy which announces transactions that can be executed after some delay. Pseudonymal accounts are derived from the multisig address and can be generated for every new deposit by a user to keep accounting clear. The proxy account can regularly transfer funds from the derivative accounts to a cold storage location(s). If the system detects a announcement by the proxy for a transfer to a non-certified address, then the multisig accounts can broadcast transactions to revoke the proxies privileges within the announcement period and prevent any of the proxies announced transactions from being executed.
28 |
29 | ## Technologies
30 |
31 | - [Parity Polkadot node implementation](https://github.com/paritytech/polkadot#polkadot)
32 | - [@substrate/txwrapper: offline transaction construction lib for Substrate](https://github.com/paritytech/txwrapper)
33 | - [@substrate/api-sidecar: RESTful api microservice for Substrate nodes](https://github.com/paritytech/substrate-api-sidecar)
34 | - [@polkadot/util-crypto: Substrate cryptography utility lib](https://github.com/polkadot-js/common/tree/master/packages/util-crypto)
35 |
36 | ## Architecture
37 |
38 | 
39 |
40 | ### Setup
41 |
42 | 1) Create m-of-n multisig MS from K = {k} keys, held by trusted parties (e.g. founders).
43 | 2) Set a proxy H with time delay T for MS.
44 | 3) Create derivative addresses D = {d} for user deposits.
45 | 4) Create cold storage S (not discussed here).
46 |
47 | #### Simple use
48 |
49 | 1) Proxy H announces call hash on-chain.
50 | 2) H sends actual call to backend system.
51 | 3) Backend ensures that call hash matches and parses call.
52 | 4) Applies internal rule (e.g. to whitelisted address).
53 | 5) If alerted, m-of-n K can reject the transaction.
54 | 6) If timeout, H broadcasts the actual call.
55 |
56 | #### Normal transaction flow
57 |
58 | 1) User i sends a deposit of v tokens to their addresses, di
59 | 2) Listener observes balances.Transfer event to address di
60 | 3) A machine** constructs the following call C***:
61 |
62 | ```c
63 | C = utility.as_derivative(
64 | index: i,
65 | call: balances.transfer(
66 | dest: S_pub,
67 | value: v,
68 | )
69 | )
70 | ```
71 |
72 | 4) Key H signs and broadcasts the transaction:
73 |
74 | ```c
75 | proxy.announce(real: MS_pub, call_hash: hash(C))
76 | ```
77 |
78 | 5) Listener observes announce transaction on-chain and asks for the call C. It verifies two things:
79 |
80 | 1) Its hash matches the announcement, and
81 | 2) Any internal rules, e.g. the transfer is to a whitelisted S.
82 |
83 | 6) Verifications pass, no alarm.
84 | 7) After time delay T, any account can broadcast the transaction:
85 |
86 | ```c
87 | proxy.proxy_announced(
88 | delegate: H_pub,
89 | real: MS_pub,
90 | force_proxy_type: Any,
91 | call: C,
92 | )
93 | ```
94 |
95 | 8) Listener verifies that the transfer was successful when it sees a `balances.Transfer` event to address MS.
96 |
97 | ** Can be any machine, even without access to key H.
98 | *** Note that it can transfer the full value v as the address H will pay the transaction fees.
99 |
100 | #### Call rejection
101 |
102 | 1) Verification does not pass.
103 | 2) Owners of K are alerted and have time T to react.
104 | 3) Construct the following call R**:
105 |
106 | ```c
107 | R = proxy.reject_announcement(
108 | delegate: H_pub,
109 | call_hash: hash(C),
110 | )
111 | ```
112 |
113 | 4) Owners of K broadcast the call R.
114 | 5) Fallback: owners cannot either override the flag or broadcast their multisig transactions in time.
115 | 6) System hold immortal transaction ready to remove H as a proxy for MS (`proxy.remove_proxies()`). The system can submit this at any point. Note: only the first multisig transaction can be immortal and stored; the remaining need the `TimePoint` of the first multisig transaction so they need to be constructed in real time.
116 |
117 | ** In the event of a malicious announcement it is always recommended to call `proxy.remove_proxies()` ASAP.
118 |
119 | #### Misc. optimizations
120 |
121 | 1) Use batch transactions, e.g.:
122 |
123 | ```c
124 | utility.batch(
125 | utility.as_derivative(index: 0, call: C0),
126 | utility.as_derivative(index: 1, call: C1),
127 | utility.as_derivative(index: 2, call: C2),
128 | …
129 | )
130 | ```
131 |
132 | 2) Reduce T and only use the fallback for faster settlement.
133 | 3) Use anonymous proxies for MS to allow member change, in case some Ki is compromised.
134 |
135 | ## Demo Outline
136 |
137 | 1) Generate 6 keyrings and make sure accounts have funds
138 | - 3 for multisig
139 | - 1 for proxy
140 | - 1 for stash
141 | - 1 for depositor
142 | 2) Generate a 2-of-3 multisig address and log it to console
143 | 3) Transfer funds from Alice to the multisig
144 | - `balances.transfer()`
145 | 4) Set the 4th key as a proxy for the multisig
146 | - `Call = proxy.addProxy(key4, Any, 10)` // 10 blocks = 1 min
147 | - `multisig.approve_as_multi(hash(Call))`
148 | - `multisig.as_multi(Call)`
149 | 5) Create derivative accounts from multisig address for depositor(s) to send tokens to
150 | 6) Transfer funds `v` from depositor to two derivative accounts
151 | - `balances.transfer()`
152 | 7) Create two calls: one good and one bad
153 | - `C0 = utility.as_derivative(0, balances.transfer(stash, v))`
154 | - `C1 = utility.as_derivative(1, balances.transfer(attacker, v))`
155 | 8) Demonstrate the happy path
156 | - `key4` broadcasts `proxy.announce(hash(C0))` and sends `C0` to another worker
157 | - safety worker decodes `C0` and ensures that destination address is `stash`
158 | - after 10 blocks, `key4` broadcasts `proxy.proxy_announced(C0)`
159 | 9) Demonstrate adversarial path
160 | - `key4` broadcasts `proxy.announce(hash(C1))` and sends `C1` to safety worker
161 | - safety worker decodes `C1` and sees that destination address is not `stash`
162 | - `multisig.approve_as_multi(proxy.remove_proxies(hash(C1)))`
163 | - `multisig.as_multi(proxy.reject_announcement(hash(C1)))`
164 |
165 | ## Run
166 |
167 | 1) This demo relies on using a parity polkadot development node; you can download the [source here](https://github.com/paritytech/polkadot). Follow the instructions to download and compile the code.
168 | 2) Make sure the node's database is empty by running: `./target/release/polkadot purge-chain --dev` (**N.B.** the nodes DB must be purged before every run of the demo script)
169 | 3) Start the node by running `./target/release/polkadot --dev`
170 | 4) In another terminal session change directories to this project and install dependencies by running `yarn`
171 | 5) Start up Sidecar by running `yarn sidecar`
172 | 6) In another terminal session, make sure you are in this project directory and start the demo by running `yarn start`
173 |
174 | Note: this script assumes the polkadot node and Sidecar are using the defualt development ports.
175 |
176 | [Sample demo output](/out.log)
177 |
--------------------------------------------------------------------------------
/out.log:
--------------------------------------------------------------------------------
1 | yarn run v1.22.5
2 | $ yarn run build && yarn run main
3 | $ tsc
4 | $ node ./build/main.js
5 | Multisig address generation info
6 | Addresses: 5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY 5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty 5DAAnrj7VHTznn2AWBemMuyBwZWs6FNFjdyVXUeYum3PTXFy
7 | Threshold: 2
8 | Multisig Address (SS58: 42): 5CGrv4qEk299n1UCcDiJSFQsa3yqgnQct8m4rpHq9eMrHrfd
9 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
10 |
11 | balances.transfer(origin: Alice, dest: multisig address)
12 | ...submiting transaction to the node 🚀
13 | Node response: 0x3bd7249258dbbb6745743a3703c0f1ff9283cfe7aca118076f19b61745adcfdf
14 | ...waiting for transaction inclusion ⌛️⌛⌛️
15 | Balances.transfer(origin: Alice, dest: multisig address) succesfully included at { height: 8, index: 2 }
16 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
17 |
18 | multisig.approveAsMulti(origin: Bob , callHash: h(proxy.addProxy(origin: multisig address, proxy: eve)))
19 | ...submiting transaction to the node 🚀
20 | Node response: 0x54034163ea524504ff0db9752ac44dbd18c45d99b5b4656c3711a2136857fbd2
21 | ...waiting for transaction inclusion ⌛️⌛⌛️
22 | multisig.approveAsMulti(origin: Bob , callHash: h(proxy.addProxy(origin: multisig address, proxy: eve))) succesfully included at { height: 13, index: 2 }
23 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
24 |
25 | multisig.asMulti(origin: Dave, call: proxy.addProxy(origin: multisig address, proxy: eve))
26 | ...submiting transaction to the node 🚀
27 | Node response: 0xca8a5d8b8a936ec78f54cb8396a778279c1d0b311d1c2582e80d18c20dd99b20
28 | ...waiting for transaction inclusion ⌛️⌛⌛️
29 | multisig.asMulti(origin: Dave, call: ${addProxyEveDisplay}) succsefully included at { height: 17, index: 2 }
30 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
31 |
32 | Created two derived addresses from the multisig address
33 | Multisig derive 0: 5Gis6jjHxRjr52UqcyE8AS1UXSWdisNH9ykvLnP76d7RzEoJ
34 | Multisig derive 1: 5DYJ9G7PsDAtNE6EzjnqhKfoezaLVF6JK1k1A441mAN2eTj8
35 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
36 |
37 | balances.transfer(origin: Charlie, dest: derive address 0)
38 | ...submiting transaction to the node 🚀
39 | Node response: 0x48ddc25cfd39fe4822ae2e87aa21a13d00f94c6c7f4c21d52211ebad4e5a288a
40 | ...waiting for transaction inclusion ⌛️⌛⌛️
41 | balances.transfer(origin: Charlie, dest: derive address 0) sucessfully included at { height: 22, index: 2 }
42 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
43 |
44 | balances.transfer(origin: Charlie, dest: derive address 1)
45 | ...submiting transaction to the node 🚀
46 | Node response: 0xdadf2207e0bb1e6d9957e606be114e3fe0ebff37f1f88ec6d7cda86b7124c83d
47 | ...waiting for transaction inclusion ⌛️⌛⌛️
48 | balances.transfer(origin: Charlie, dest: derive address 1) succesfully included at { height: 22, index: 2 }
49 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
50 |
51 | Now demonstrating the happy path of using the proxy to transfer funds from a multisig derivative account to cold storage.
52 |
53 | proxy.announce(origin: eve, callHash: h(utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage)))
54 | ...submiting transaction to the node 🚀
55 | Node response: 0x58d2383a2b542d891bff8a3a0fb0b5e520769dc0583a9e176daaceb3431cd6d6
56 | ...waiting for transaction inclusion ⌛️⌛⌛️
57 | proxy.announce(origin: eve, callHash: h(utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage))) sucessfully included at { height: 28, index: 2 }
58 |
59 | Now that the transaction was succesfuly submitted, we will wait 10 blocks after the announcement (until block 38) for the delay periood to pass and execute with proxyAnnounced.
60 | There is a process in the background that will fire proxyAnnounced to execute the actual balance transfer to cold storage once the delay period is over; the demo will keep moving forward
61 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
62 |
63 |
64 | Simultanously sending utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage)) to the safety worker for decoding and verification that the transfer is going to cold storage.
65 | Decoded attempt to transfer from derivative account:
66 | { dest: '5GNJqTPyNqANBkUVMN1LPPrxXnFouWXoe2wNSmmEoLctxiZY', value: 1 }
67 | Destination is correct cold storage: true
68 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
69 |
70 | Now demonstrating the adversarial path.
71 |
72 | proxy.announce(origin: Alice, callHash: h(utility.asDerivative(origin: multisig address, index: 1, call: balances.transfer(origin: derivate address 1, dest: Attacker))
73 | ...submiting transaction to the node 🚀
74 | Node response: 0xe91d6af9f08bba8927a39bcacd034e9ea55e51f8a116e342f1f48023d63300c6
75 | ...waiting for transaction inclusion ⌛️⌛⌛️
76 | proxy.announce of c1 sucessful at { height: 33, index: 2 }
77 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
78 |
79 | Now that the transacstion was succesfuly submitted, wait 10 blocks after announcement (until block43) for the delay periood to pass and execute with proxyAnnounced.
80 | ...but hopefully we can stop the Attacker before then!
81 | there is a process in the background that will fire proxyAnnounced to execute the actual balance transfer to the attacker if we do not act fast enough; the demo will keep moving forward
82 |
83 | Simultanously sending utility.asDerivative(origin: multisig address, index: 1, call: balances.transfer(origin: derivate address 1, dest: Attacker) to the safety worker for decoding and verification of the transfer - the system will catch the attacker here and kickoff the security procedure to stop the malicious transfer
84 | Decoded attempt to transfer from derivative account:
85 | {
86 | dest: '5FcMRihF5cwGEqLS2PWLGbebXCATwrUEzY1SJja7s4KtBYR6',
87 | value: 1234666
88 | }
89 | Destination is correct cold storage: false
90 |
91 | 🚧 Malicious proxy transfer detected, kicking off proxy removal protocol! 🚧
92 |
93 | multisig.approveAsMulti(origin: Alice, callHash: h(proxy.removeProxies(origin: multisig address)))
94 | ...submiting transaction to the node 🚀
95 | Node response: 0x6fe489f8286e278b48761a2b49071af8031426db258f8075dda006c2717e229f
96 | ...waiting for transaction inclusion ⌛️⌛⌛️
97 | multisig.approveAsMulti(origin: Alice, callHash: h(proxy.removeProxies(origin: multisig address))) succesfuly included at { height: 38, index: 2 }
98 |
99 | (💤 background task) proxy.proxyAnnounced(origin: Eve, call: utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage))))
100 | ...submiting transaction to the node 🚀
101 |
102 | multisig.asMulti(origin: Bob, call: proxy.removeProxies(origin: multisig address))
103 | ...submiting transaction to the node 🚀
104 | Node response: 0x3174e14984fa42802f0a38b9347137edcc51740ab4690f0ff488922fbb0d3751
105 | ...waiting for transaction inclusion ⌛️⌛⌛️
106 | Node response: 0x8cb6e2dcd01076580b5d229025074addc3df5e8d29d20547c8f965d64581b73c
107 | ...waiting for transaction inclusion ⌛️⌛⌛️
108 | proxy.proxyAnnounced(origin: Eve, call: utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage)))) succesfully included at { height: 43, index: 2 }
109 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
110 |
111 | multisig.asMulti(origin: Bob, call: proxy.removeProxies(origin: multisig address)) succsefully included at { height: 43, index: 2 }
112 | Crisis averted 👩🚒 attacker transfer cancelled 👌!
113 |
114 | (💤background task) proxy.proxyAnnounced(utility.asDerivative(origin: multisig address, index: 1, call: balances.transfer(origin: derivate address 1, dest: Attacker))
115 | ...submiting transaction to the node 🚀
116 | Node response: 0xe811903a17c073070fdccf9d389ba42dad78c2f4d28125acf070ed6edf2e2818
117 | ...waiting for transaction inclusion ⌛️⌛⌛️
118 | Attacker tranasction failed! The system worked succesfully!
119 | Done in 272.19s.
120 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "proxy-hot-wallet",
3 | "version": "0.1.0",
4 | "description": "Demo for a safe and effective custodial hot wallet using features unique to Substrate",
5 | "main": "build/main.js",
6 | "repository": "https://github.com/emostov/proxy-hot-wallet.git",
7 | "author": "Zeke Mostov <32168567+emostov@users.noreply.github.com>",
8 | "license": "Apache-2.0",
9 | "private": false,
10 | "scripts": {
11 | "lint": "tsc && eslint . --ext ts",
12 | "build": "tsc",
13 | "main": "node ./build/main.js",
14 | "start": "yarn run build && yarn run main",
15 | "demo": "yarn run main",
16 | "sidecar": "SAS_LOG_LEVEL=http ./node_modules/.bin/substrate-api-sidecar"
17 | },
18 | "dependencies": {
19 | "@polkadot/util": "^6.2.1",
20 | "@polkadot/util-crypto": "^6.2.1",
21 | "@substrate/api-sidecar": "^4.0.8",
22 | "@substrate/txwrapper": "^4.1.0",
23 | "@types/memoizee": "^0.4.5",
24 | "axios": "^0.21.1"
25 | },
26 | "devDependencies": {
27 | "@types/node": "^14.14.41",
28 | "@typescript-eslint/eslint-plugin": "^4.22.0",
29 | "@typescript-eslint/parser": "^4.22.0",
30 | "eslint": "^7.24.0",
31 | "eslint-config-prettier": "^8.2.0",
32 | "eslint-plugin-prettier": "^3.4.0",
33 | "eslint-plugin-simple-import-sort": "^7.0.0",
34 | "prettier": "^2.2.1",
35 | "typescript": "^4.2.4"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/src/ChainSync.ts:
--------------------------------------------------------------------------------
1 | import { SidecarApi } from './sidecar/SidecarApi';
2 | import { sleep } from './util';
3 |
4 | export class ChainSync {
5 | private sidecarApi: SidecarApi;
6 | private readonly SECOND = 1_000;
7 |
8 | constructor(sidecarURL: string) {
9 | this.sidecarApi = new SidecarApi(sidecarURL);
10 | }
11 |
12 | async pollingEventListener(
13 | pallet: string,
14 | method: string,
15 | // In real life you would need to check the events data, however for this demo we don't
16 | _data?: string[]
17 | ): Promise<{ height: number; index: number } | null> {
18 | const searching = true;
19 | while (searching) {
20 | const block = await this.sidecarApi.getBlock();
21 |
22 | for (const [idx, ext] of block.extrinsics.entries()) {
23 | for (const {
24 | method: { method: evMethod, pallet: evPallet },
25 | } of ext.events) {
26 | if (evMethod === 'ExtrinsicFailed') {
27 | throw `unexepcted extrinsic failure at block number ${block.number}`;
28 | }
29 |
30 | if (evMethod === method && evPallet === pallet) {
31 | await sleep(this.SECOND / 2);
32 | return {
33 | height: parseInt(block.number),
34 | index: idx,
35 | };
36 | }
37 |
38 | if (pallet === evPallet && method === evMethod)
39 | throw 'debug error';
40 | }
41 | }
42 |
43 | await sleep(this.SECOND);
44 | }
45 |
46 | return null;
47 | }
48 |
49 | async waitUntilHeight(height: number): Promise {
50 | const waiting = true;
51 | while (waiting) {
52 | const block = await this.sidecarApi.getBlock();
53 | const curHeight = parseInt(block.number);
54 | if (curHeight >= height) {
55 | return curHeight;
56 | }
57 | await sleep(this.SECOND);
58 | }
59 |
60 | return -1;
61 | }
62 |
63 | private eventDataEq(d1: string[], d2: string[]) {
64 | return (
65 | d1.length === d2.length && d1.every((ele, idx) => ele === d2[idx])
66 | );
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/src/keyring.ts:
--------------------------------------------------------------------------------
1 | import { Keyring } from '@polkadot/api';
2 | import { KeyringPair } from '@polkadot/keyring/types';
3 | import { cryptoWaitReady } from '@polkadot/util-crypto';
4 |
5 | export interface Keys {
6 | alice: KeyringPair;
7 | aliceStash: KeyringPair;
8 | bob: KeyringPair;
9 | dave: KeyringPair;
10 | eve: KeyringPair;
11 | charlie: KeyringPair;
12 | ferdie: KeyringPair;
13 | attacker: KeyringPair;
14 | }
15 |
16 | export async function createDemoKeyPairs(): Promise {
17 | // References
18 | // https://github.com/paritytech/substrate/blob/833fe6259115625f61347c8413bab29fded31210/primitives/core/src/crypto.rs#L52
19 | // Alice is 'bottom drive obey lake curtain smoke basket hold race lonely fit walk//Alice'
20 |
21 | await cryptoWaitReady();
22 |
23 | const keyring: Keyring = new Keyring();
24 |
25 | const alice = keyring.addFromUri('//Alice', { name: 'Alice' }, 'sr25519');
26 | const aliceStash = keyring.addFromUri(
27 | '//Alice//stash',
28 | { name: 'Alice Stash' },
29 | 'sr25519'
30 | );
31 | const bob = keyring.addFromUri('//Bob', { name: 'Bob' }, 'sr25519');
32 | const dave = keyring.addFromUri('//Dave', { name: 'Dave' }, 'sr25519');
33 | const eve = keyring.addFromUri('//Eve', { name: 'Eve' }, 'sr25519');
34 | const charlie = keyring.addFromUri(
35 | '//Charlie',
36 | { name: 'Charlie' },
37 | 'sr25519'
38 | );
39 | const ferdie = keyring.addFromUri(
40 | '//Ferdie',
41 | { name: 'Ferdie' },
42 | 'sr25519'
43 | );
44 | const attacker = keyring.addFromUri(
45 | '//Attacker',
46 | { name: 'Attacker' },
47 | 'sr25519'
48 | );
49 |
50 | return {
51 | // Comments represent roles in proxy + multisig hot wallet demo
52 | // stash
53 | aliceStash,
54 | // multisig
55 | alice,
56 | // multisig
57 | bob,
58 | // multisig
59 | dave,
60 | // proxy
61 | eve,
62 | // depositer
63 | charlie,
64 | // extra pair for convience
65 | ferdie,
66 | attacker,
67 | };
68 | }
69 |
--------------------------------------------------------------------------------
/src/main.ts:
--------------------------------------------------------------------------------
1 | import { blake2AsHex } from '@polkadot/util-crypto';
2 | import {
3 | encodeDerivedAddress,
4 | encodeMultiAddress,
5 | } from '@polkadot/util-crypto';
6 |
7 | import { ChainSync } from './ChainSync';
8 | import { createDemoKeyPairs, Keys } from './keyring';
9 | import { SidecarApi } from './sidecar/SidecarApi';
10 | import { TransactionConstruct } from './transaction/TransactionConstruct';
11 | import {
12 | logSeperator,
13 | sortAddresses,
14 | submiting,
15 | waiting,
16 | waitToContinue,
17 | } from './util';
18 |
19 | const sidecarUrl = 'http://127.0.0.1:8080';
20 |
21 | async function main() {
22 | const keys = await createDemoKeyPairs();
23 | const transactionConstruct = new TransactionConstruct(
24 | sidecarUrl,
25 | keys.aliceStash.address
26 | );
27 | const sidecarApi = new SidecarApi(sidecarUrl);
28 | const chainSync = new ChainSync(sidecarUrl);
29 |
30 | const addresses = [keys.alice.address, keys.bob.address, keys.dave.address];
31 | const threshold = 2;
32 | const ss58Prefix = 42;
33 | const multisigAddr = encodeMultiAddress(addresses, threshold, ss58Prefix);
34 |
35 | console.log('Multisig address generation info');
36 | console.log(`Addresses: ${addresses.join(' ')}`);
37 | console.log(`Threshold: ${threshold}`);
38 | console.log(`Multisig Address (SS58: ${ss58Prefix}): ${multisigAddr}`);
39 | logSeperator();
40 | await waitToContinue();
41 |
42 | // Load up multisig account with currency so it can make transactions
43 | const trasnferValue = '0123456789012345';
44 | const transferToMultiSigCall = await transactionConstruct.balancesTransfer(
45 | { origin: keys.alice.address },
46 | multisigAddr,
47 | trasnferValue
48 | );
49 | const signedTransferToMultiSigCall = transactionConstruct.createAndSignTransaction(
50 | keys.alice,
51 | transferToMultiSigCall
52 | );
53 | console.log(`balances.transfer(origin: Alice, dest: multisig address)`);
54 | submiting();
55 | const nodeRes1 = await sidecarApi.submitTransaction(
56 | signedTransferToMultiSigCall
57 | );
58 | console.log(`Node response: `, nodeRes1.hash);
59 | waiting();
60 | const inclusionPoint1 = await chainSync.pollingEventListener(
61 | 'balances',
62 | 'Transfer'
63 | );
64 | console.log(
65 | 'Balances.transfer(origin: Alice, dest: multisig address) succesfully included at ',
66 | inclusionPoint1
67 | );
68 | logSeperator();
69 | await waitToContinue();
70 |
71 | const delayPeriod = 10; // 10 blocks = 1 min
72 | const maxWeight = 1000000000;
73 | // Make Eve the proxy for the multisig address and set up the proxy with `delayPeriod`
74 | // delay between a proxied calls announcement and earliest possible point of execution
75 | await setupProxyForMultisig(
76 | multisigAddr,
77 | transactionConstruct,
78 | chainSync,
79 | sidecarApi,
80 | keys,
81 | ss58Prefix,
82 | delayPeriod,
83 | maxWeight
84 | );
85 |
86 | // Create derivative addresses from the multisig address.
87 | const deriveAddr0 = encodeDerivedAddress(multisigAddr, 0, ss58Prefix);
88 | const deriveAddr1 = encodeDerivedAddress(multisigAddr, 1, ss58Prefix);
89 | console.log('Created two derived addresses from the multisig address');
90 | console.log('Multisig derive 0: ', deriveAddr0);
91 | console.log('Multisig derive 1: ', deriveAddr1);
92 | logSeperator();
93 | await waitToContinue();
94 |
95 | // Depositer transfers money into multisig derive addresses 0 and 1.
96 | await depositerTransferToDeriv(
97 | transactionConstruct,
98 | chainSync,
99 | sidecarApi,
100 | keys,
101 | deriveAddr0,
102 | deriveAddr1
103 | );
104 |
105 | // the proxy transfers funds from multisig derive address 0 to cold storage
106 | await happyPath(
107 | transactionConstruct,
108 | chainSync,
109 | sidecarApi,
110 | keys,
111 | deriveAddr0,
112 | multisigAddr,
113 | delayPeriod
114 | );
115 |
116 | // An attacker compromises the proxy and uses the proxy to send funds from multisig
117 | // derive address 1 to the attackers address. The safety worker will see the announcement
118 | // for the proxy call and alert the system that there is a transfer from a derivative
119 | // address that does not go to cold storage. The system will the have two of the composite
120 | // addresses for the multisig create a transaction to remove all proxies from the multisig
121 | // address and thus prevent the attacker from making the call as a proxy.
122 | await adversarialPath(
123 | transactionConstruct,
124 | chainSync,
125 | sidecarApi,
126 | keys,
127 | deriveAddr1,
128 | multisigAddr,
129 | delayPeriod,
130 | maxWeight
131 | );
132 | }
133 |
134 | main().catch(console.log);
135 |
136 | async function adversarialPath(
137 | transactionConstruct: TransactionConstruct,
138 | chainSync: ChainSync,
139 | sidecarApi: SidecarApi,
140 | keys: Keys,
141 | deriveAddr1: string,
142 | multisigAddr: string,
143 | delayPeriod: number,
144 | maxWeight: number
145 | ): Promise {
146 | console.log('Now demonstrating the adversarial path.\n');
147 |
148 | const c1Display =
149 | 'utility.asDerivative(origin: multisig address, index: 1, call: balances.transfer(origin: derivate address 1, dest: Attacker)';
150 | const {
151 | unsigned: transferToAttacker,
152 | registry: transferToAttackerRegistry,
153 | metadataRpc: transferToAttackerMetadataRpc,
154 | } = await transactionConstruct.balancesTransfer(
155 | { origin: deriveAddr1 },
156 | keys.attacker.address,
157 | '01234666'
158 | );
159 | const { unsigned: c1 } = await transactionConstruct.utilityAsDerivative(
160 | { origin: multisigAddr },
161 | 1,
162 | transferToAttacker.method
163 | );
164 | const c1Method = c1.method;
165 | const c1Hash = blake2AsHex(c1Method, 256);
166 | const proxyAnnounceC1 = await transactionConstruct.proxyAnnounce(
167 | { origin: keys.eve.address },
168 | multisigAddr,
169 | c1Hash
170 | );
171 | const signedProxyAnnounceC1 = transactionConstruct.createAndSignTransaction(
172 | keys.eve,
173 | proxyAnnounceC1
174 | );
175 |
176 | console.log(`proxy.announce(origin: Alice, callHash: h(${c1Display})`);
177 | submiting();
178 | const result8 = await sidecarApi.submitTransaction(signedProxyAnnounceC1);
179 | console.log(`Node response: `, result8.hash);
180 | waiting();
181 | const inclusionPoint5 = await chainSync.pollingEventListener(
182 | 'proxy',
183 | 'Announced'
184 | );
185 | if (!inclusionPoint5) throw 'blockInclusionAnnounceC1 is null';
186 | console.log(
187 | `proxy.announce(origin: Alice, callHash: h(${c1Display}) succesfully included at`,
188 | inclusionPoint5
189 | );
190 | logSeperator();
191 | await waitToContinue();
192 |
193 | console.log(
194 | `Now that the transacstion was succesfuly submitted, wait ${delayPeriod} blocks after announcement (until block${
195 | inclusionPoint5?.height + delayPeriod
196 | }) ` +
197 | 'for the delay periood to pass and execute with proxyAnnounced.\n' +
198 | '...but hopefully we can stop the Attacker before then!'
199 | );
200 | console.log(
201 | 'There is a process in the background that will fire proxyAnnounced to execute the actual balance ' +
202 | 'transfer to the attacker if we do not act fast enough; the demo will keep moving forward.'
203 | );
204 | void chainSync
205 | .waitUntilHeight(inclusionPoint5?.height + delayPeriod)
206 | .then(async () => {
207 | const proxyAnnouncedCallC1 = await transactionConstruct.proxyProxyAnnounced(
208 | { origin: keys.eve.address },
209 | multisigAddr,
210 | keys.eve.address,
211 | 'Any',
212 | c1Method
213 | );
214 | const signedProxyAnnoucedTxC1 = transactionConstruct.createAndSignTransaction(
215 | keys.eve,
216 | proxyAnnouncedCallC1
217 | );
218 | console.log(
219 | `\n(💤background task) proxy.proxyAnnounced(${c1Display})`
220 | );
221 | submiting();
222 | const result7 = await sidecarApi.submitTransaction(
223 | signedProxyAnnoucedTxC1
224 | );
225 | console.log(`\nNode response: `, result7.hash);
226 | waiting();
227 | let inclusionPoint6;
228 | try {
229 | inclusionPoint6 = await chainSync.pollingEventListener(
230 | 'balances',
231 | 'Transfer'
232 | );
233 | } catch {
234 | console.log(
235 | '\nAttacker tranasction failed! The system worked succesfully!'
236 | );
237 | process.exit();
238 | }
239 | console.log(
240 | `\nproxy.proxyAnnounced(${c1Display}) succesfully included at `,
241 | inclusionPoint6
242 | );
243 | console.log('\nSecurity system failed!');
244 | process.exit();
245 | });
246 |
247 | console.log(
248 | `\nSimultanously sending ${c1Display} to the safety worker for decoding` +
249 | ' and verification of the transfer - the system will catch the attacker here and kickoff' +
250 | ' the security procedure to stop the malicious transfer'
251 | );
252 | const isSafe = transactionConstruct.safetyWorker({
253 | unsigned: transferToAttacker,
254 | registry: transferToAttackerRegistry,
255 | metadataRpc: transferToAttackerMetadataRpc,
256 | });
257 | if (isSafe) throw 'error when processing unsafe transaction';
258 | console.log(
259 | '\n🚧 Malicious proxy transfer detected, kicking off proxy removal protocol! 🚧\n'
260 | );
261 | const removeProxiesDisplay =
262 | 'proxy.removeProxies(origin: multisig address)';
263 | const {
264 | unsigned: { method: removeProxiesMethod },
265 | } = await transactionConstruct.proxyRemoveProxies({ origin: multisigAddr });
266 | const removeProxiesHash = blake2AsHex(removeProxiesMethod);
267 | const removeProxiesApproveAsMulti = await transactionConstruct.multiSigApproveAsMulti(
268 | { origin: keys.alice.address },
269 | 2,
270 | sortAddresses([keys.bob.address, keys.dave.address]),
271 | null,
272 | removeProxiesHash,
273 | maxWeight
274 | );
275 | const signedRemoveProxiesApproveAsMulti = transactionConstruct.createAndSignTransaction(
276 | keys.alice,
277 | removeProxiesApproveAsMulti
278 | );
279 |
280 | console.log(
281 | `multisig.approveAsMulti(origin: Alice, callHash: h(${removeProxiesDisplay}))`
282 | );
283 | submiting();
284 | const nodeRes4 = await sidecarApi.submitTransaction(
285 | signedRemoveProxiesApproveAsMulti
286 | );
287 | console.log(`Node response: `, nodeRes4.hash);
288 | waiting();
289 | const inclusionPoint7 = await chainSync.pollingEventListener(
290 | 'multisig',
291 | 'NewMultisig'
292 | );
293 | if (!inclusionPoint7) throw 'timepoint1 null';
294 | console.log(
295 | `multisig.approveAsMulti(origin: Alice, callHash: h(${removeProxiesDisplay})) succesfuly included at`,
296 | inclusionPoint7
297 | );
298 |
299 | const removeProxiesAsMulti = await transactionConstruct.multiSigAsMulti(
300 | { origin: keys.bob.address },
301 | 2,
302 | sortAddresses([keys.alice.address, keys.dave.address]),
303 | inclusionPoint7,
304 | removeProxiesMethod,
305 | true,
306 | maxWeight
307 | );
308 | const signedremoveProxiesAsMulti = transactionConstruct.createAndSignTransaction(
309 | keys.bob,
310 | removeProxiesAsMulti
311 | );
312 | console.log(
313 | `\nmultisig.asMulti(origin: Bob, call: ${removeProxiesDisplay})`
314 | );
315 | submiting();
316 | const nodeRes5 = await sidecarApi.submitTransaction(
317 | signedremoveProxiesAsMulti
318 | );
319 | console.log(`Node response: `, nodeRes5.hash);
320 | waiting();
321 | const inclusionPoint8 = await chainSync.pollingEventListener(
322 | 'proxy',
323 | 'ProxyExecuted'
324 | );
325 | if (!inclusionPoint8) throw 'inclusionPoint8 is null';
326 | console.log(
327 | `multisig.asMulti(origin: Bob, call: ${removeProxiesDisplay}) succsefully included at `,
328 | inclusionPoint8
329 | );
330 | console.log('Crisis averted 👩🚒 attacker transfer cancelled 👌!');
331 | }
332 |
333 | async function happyPath(
334 | transactionConstruct: TransactionConstruct,
335 | chainSync: ChainSync,
336 | sidecarApi: SidecarApi,
337 | keys: Keys,
338 | deriveAddr0: string,
339 | multisigAddr: string,
340 | delayPeriod: number
341 | ): Promise {
342 | console.log(
343 | 'Now demonstrating the happy path of using the proxy to transfer funds from a multisig derivative account to cold storage.\n'
344 | );
345 |
346 | const c0Display =
347 | 'utility.asDerivative(origin: multisig addres, index: 0, call: balances.transfer(origin: derive address 0, dest: cold storage))';
348 | const {
349 | unsigned: transferToColdStorage,
350 | registry: transferToColdStorageRegistry,
351 | metadataRpc: transferToColdStorageMetadataRpc,
352 | } = await transactionConstruct.balancesTransfer(
353 | { origin: deriveAddr0 },
354 | keys.aliceStash.address,
355 | '1'
356 | );
357 | const { unsigned: c0 } = await transactionConstruct.utilityAsDerivative(
358 | { origin: multisigAddr },
359 | 0,
360 | transferToColdStorage.method
361 | );
362 | const c0Method = c0.method;
363 | const c0Hash = blake2AsHex(c0Method, 256);
364 | const proxyAnnounceC0 = await transactionConstruct.proxyAnnounce(
365 | { origin: keys.eve.address },
366 | multisigAddr,
367 | c0Hash
368 | );
369 | const signedProxyAnnounceC0 = transactionConstruct.createAndSignTransaction(
370 | keys.eve,
371 | proxyAnnounceC0
372 | );
373 | console.log(`proxy.announce(origin: eve, callHash: h(${c0Display})`);
374 | submiting();
375 | const nodeRes3 = await sidecarApi.submitTransaction(signedProxyAnnounceC0);
376 | console.log(`Node response: `, nodeRes3.hash);
377 | waiting();
378 | const inclusionPoint3 = await chainSync.pollingEventListener(
379 | 'proxy',
380 | 'Announced'
381 | );
382 | if (!inclusionPoint3) throw 'inclusionPoint3 is null';
383 | console.log(
384 | `proxy.announce(origin: eve, callHash: h(${c0Display}) sucessfully included at `,
385 | inclusionPoint3
386 | );
387 | console.log(
388 | `\nNow that the transaction was succesfuly submitted, we will wait ${delayPeriod} blocks after the announcement (until block ${
389 | inclusionPoint3?.height + delayPeriod
390 | }) ` +
391 | 'for the delay periood to pass and execute with proxyAnnounced.' +
392 | '\nThere is a process in the background that will fire proxyAnnounced to execute the actual balance ' +
393 | 'transfer to cold storage once the delay period is over; the demo will keep moving forward'
394 | );
395 | logSeperator();
396 | await waitToContinue();
397 |
398 | // wait until the delay period has passed and then execute the announce call
399 | void chainSync
400 | .waitUntilHeight(inclusionPoint3?.height + delayPeriod)
401 | .then(async () => {
402 | const proxyAnnounced = await transactionConstruct.proxyProxyAnnounced(
403 | { origin: keys.eve.address },
404 | multisigAddr,
405 | keys.eve.address,
406 | 'Any',
407 | c0Method
408 | );
409 | const signedProxyAnnouced = transactionConstruct.createAndSignTransaction(
410 | keys.eve,
411 | proxyAnnounced
412 | );
413 | console.log(
414 | `\n(💤 background task) proxy.proxyAnnounced(origin: Eve, call: ${c0Display}))`
415 | );
416 | submiting();
417 | const result7 = await sidecarApi.submitTransaction(
418 | signedProxyAnnouced
419 | );
420 | console.log(`\n(💤 background task) Node response: `, result7.hash);
421 | waiting();
422 | const inclusionPoint4 = await chainSync.pollingEventListener(
423 | 'balances',
424 | 'Transfer'
425 | );
426 | console.log(
427 | `\n(💤 background task) proxy.proxyAnnounced(origin: Eve, call: ${c0Display})) succesfully included at`,
428 | inclusionPoint4
429 | );
430 | logSeperator();
431 | await waitToContinue();
432 | });
433 |
434 | console.log(
435 | `\nSimultanously sending ${c0Display} to the safety worker for decoding` +
436 | ' and verification that the transfer is going to cold storage.'
437 | );
438 | transactionConstruct.safetyWorker({
439 | unsigned: transferToColdStorage,
440 | registry: transferToColdStorageRegistry,
441 | metadataRpc: transferToColdStorageMetadataRpc,
442 | });
443 | logSeperator();
444 | await waitToContinue();
445 | }
446 |
447 | async function setupProxyForMultisig(
448 | multisigAddr: string,
449 | transactionConstruct: TransactionConstruct,
450 | chainSync: ChainSync,
451 | sidecarApi: SidecarApi,
452 | keys: Keys,
453 | ss58Prefix: number,
454 | delayPeriod: number,
455 | maxWeight: number
456 | ): Promise {
457 | // construct tx to add Eve as a proxy to multisig address
458 | const {
459 | unsigned: { method: addProxyEveMethod },
460 | } = await transactionConstruct.proxyAddProxy(
461 | { origin: multisigAddr },
462 | keys.eve.address,
463 | 'Any',
464 | delayPeriod
465 | );
466 | const addProxyEveDisplay =
467 | 'proxy.addProxy(origin: multisig address, proxy: eve)';
468 | const addProxyEveHash = blake2AsHex(addProxyEveMethod, 256);
469 |
470 | // construct tx for Bob to approve adding Eve as a proxy to the multi sig address
471 | const approveAsMulti = await transactionConstruct.multiSigApproveAsMulti(
472 | { origin: keys.bob.address },
473 | 2,
474 | sortAddresses([keys.alice.address, keys.dave.address], ss58Prefix),
475 | null,
476 | addProxyEveHash,
477 | maxWeight
478 | );
479 | const signedApproveAsMulti = transactionConstruct.createAndSignTransaction(
480 | keys.bob,
481 | approveAsMulti
482 | );
483 | console.log(
484 | `multisig.approveAsMulti(origin: Bob , callHash: h(${addProxyEveDisplay}))`
485 | );
486 | submiting();
487 | const nodeRes2 = await sidecarApi.submitTransaction(signedApproveAsMulti);
488 | console.log(`Node response: `, nodeRes2.hash);
489 | waiting();
490 | const inclusionPoint2 = await chainSync.pollingEventListener(
491 | 'multisig',
492 | 'NewMultisig'
493 | );
494 | console.log(
495 | `multisig.approveAsMulti(origin: Bob , callHash: h(${addProxyEveDisplay})) succesfully included at `,
496 | inclusionPoint2
497 | );
498 | logSeperator();
499 | await waitToContinue();
500 |
501 | // construct transaction for Dave to approve and execute adding Eve as a proxy to the multisig address
502 | const asMulti = await transactionConstruct.multiSigAsMulti(
503 | { origin: keys.dave.address },
504 | 2,
505 | sortAddresses([keys.alice.address, keys.bob.address], ss58Prefix),
506 | inclusionPoint2,
507 | addProxyEveMethod,
508 | false,
509 | maxWeight
510 | );
511 | const signedAsMulti = transactionConstruct.createAndSignTransaction(
512 | keys.dave,
513 | asMulti
514 | );
515 | console.log(`multisig.asMulti(origin: Dave, call: ${addProxyEveDisplay})`);
516 | submiting();
517 | const result3 = await sidecarApi.submitTransaction(signedAsMulti);
518 | console.log(`Node response: `, result3.hash);
519 | waiting();
520 | const inlusionPoint3 = await chainSync.pollingEventListener(
521 | 'multisig',
522 | 'MultisigExecuted'
523 | );
524 | console.log(
525 | 'multisig.asMulti(origin: Dave, call: ${addProxyEveDisplay}) succsefully included at ',
526 | inlusionPoint3
527 | );
528 | logSeperator();
529 | await waitToContinue();
530 | }
531 |
532 | async function depositerTransferToDeriv(
533 | transactionConstruct: TransactionConstruct,
534 | chainSync: ChainSync,
535 | sidecarApi: SidecarApi,
536 | keys: Keys,
537 | deriveAddr0: string,
538 | deriveAddr1: string
539 | ): Promise {
540 | // construct tx to transfer funds from charlie (depositer) to mulisig derive address 0
541 | const transferToD0 = await transactionConstruct.balancesTransfer(
542 | { origin: keys.charlie.address },
543 | deriveAddr0,
544 | '1234567890123450'
545 | );
546 | const signedTransferToD0 = transactionConstruct.createAndSignTransaction(
547 | keys.charlie,
548 | transferToD0
549 | );
550 | console.log('balances.transfer(origin: Charlie, dest: derive address 0)');
551 | submiting();
552 | const nodeRes1 = await sidecarApi.submitTransaction(signedTransferToD0);
553 | console.log(`Node response: `, nodeRes1.hash);
554 | waiting();
555 | const inclusionPoint1 = await chainSync.pollingEventListener(
556 | 'balances',
557 | 'Transfer'
558 | );
559 | if (!inclusionPoint1) throw 'inclusionPoint1 is null';
560 | console.log(
561 | 'balances.transfer(origin: Charlie, dest: derive address 0) sucessfully included at ',
562 | inclusionPoint1
563 | );
564 | logSeperator();
565 | await waitToContinue();
566 |
567 | // construct tx to transfer funds from charlie (depositer) to mulisig derive address 1
568 | const transferToD1 = await transactionConstruct.balancesTransfer(
569 | { origin: keys.charlie.address, height: inclusionPoint1.height + 1 },
570 | deriveAddr1,
571 | '1234567890123450'
572 | );
573 | const signedTransferToD1 = transactionConstruct.createAndSignTransaction(
574 | keys.charlie,
575 | transferToD1
576 | );
577 |
578 | console.log('balances.transfer(origin: Charlie, dest: derive address 1)');
579 | submiting();
580 | const nodeRes2 = await sidecarApi.submitTransaction(signedTransferToD1);
581 | console.log(`Node response: `, nodeRes2.hash);
582 | waiting();
583 | const inclusionPoint2 = await chainSync.pollingEventListener(
584 | 'balances',
585 | 'Transfer'
586 | );
587 | console.log(
588 | 'balances.transfer(origin: Charlie, dest: derive address 1) succesfully included at ',
589 | inclusionPoint2
590 | );
591 | logSeperator();
592 | await waitToContinue();
593 | }
594 |
--------------------------------------------------------------------------------
/src/sidecar/SidecarApi.ts:
--------------------------------------------------------------------------------
1 | import axios, { AxiosError, AxiosInstance } from 'axios';
2 |
3 | import { sleep } from '../util';
4 | import { AccountBalanceInfo } from './types/AccountBalanceInfo';
5 | import { Block } from './types/Block';
6 | import { TransactionMaterial } from './types/TransactionMaterial';
7 |
8 | type ApiResponse = {
9 | data: TransactionMaterial | Block | AccountBalanceInfo;
10 | };
11 |
12 | export class SidecarApi {
13 | private api: AxiosInstance;
14 | readonly SECOND = 1_000;
15 | constructor(sidecarBaseUrl: string) {
16 | this.api = axios.create({ baseURL: sidecarBaseUrl });
17 | }
18 |
19 | /**
20 | * Execute a get request to `uri` with exponential backoff for failed request
21 | * retry attempts.
22 | *
23 | * @param uri URI
24 | * @param attempts only for recursive cases
25 | */
26 | private async retryGet(uri: string, attempts = 0): Promise {
27 | try {
28 | return await this.api.get(uri);
29 | } catch (e) {
30 | // Exponential back for up to 3 trys
31 | if (attempts < 3) {
32 | console.error(
33 | `Attempt ${attempts} for sidecar endpoint ${uri}`
34 | );
35 | attempts += 1;
36 | await sleep(2 * attempts * this.SECOND);
37 | return await this.retryGet(uri, attempts);
38 | }
39 | // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
40 | if (e?.isAxiosError) {
41 | const {
42 | response,
43 | config: { url, method },
44 | } = e as AxiosError;
45 |
46 | throw {
47 | method,
48 | url,
49 | status: response?.status,
50 | statusText: response?.statusText,
51 | };
52 | }
53 |
54 | throw e;
55 | }
56 | }
57 |
58 | async getBlock(num?: number): Promise {
59 | const response = num
60 | ? await this.retryGet(`/blocks/${num}`)
61 | : await this.retryGet(`/blocks/head`);
62 |
63 | return response.data as Block;
64 | }
65 |
66 | async getAccountBalance(
67 | account: string,
68 | height?: number
69 | ): Promise {
70 | const response = height
71 | ? await this.retryGet(
72 | `/accounts/${account}/balance-info?at=${height}`
73 | )
74 | : await this.retryGet(`/accounts/${account}/balance-info`);
75 |
76 | return response.data as AccountBalanceInfo;
77 | }
78 |
79 | async getTransactionMaterial({
80 | height,
81 | noMeta,
82 | }: {
83 | height?: number;
84 | noMeta?: boolean;
85 | }): Promise {
86 | let uri = `transaction/material`;
87 | if (typeof height === 'number' || noMeta) {
88 | uri += '?';
89 | }
90 |
91 | if (typeof height === 'number') {
92 | uri += `at=${height}&`;
93 | }
94 |
95 | if (noMeta) {
96 | uri += 'noMeta=true';
97 | }
98 |
99 | const response = await this.retryGet(uri);
100 |
101 | return response.data as TransactionMaterial;
102 | }
103 |
104 | async submitTransaction(tx: string): Promise<{ hash: string }> {
105 | try {
106 | return (await this.api.post('/transaction', { tx })).data as {
107 | hash: string;
108 | };
109 | } catch (e) {
110 | // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
111 | if (e?.isAxiosError) {
112 | const {
113 | response,
114 | config: { url, method },
115 | } = e as AxiosError;
116 |
117 | throw {
118 | method,
119 | url,
120 | status: response?.status,
121 | statusText: response?.statusText,
122 | };
123 | }
124 |
125 | throw e;
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/src/sidecar/types/AccountBalanceInfo.ts:
--------------------------------------------------------------------------------
1 | import { At } from './At';
2 |
3 | export interface AccountBalanceInfo {
4 | at: At;
5 | nonce: string;
6 | free: string;
7 | reserved: string;
8 | miscFrozen: string;
9 | feeFrozen: string;
10 | locks: Array;
11 | }
12 |
--------------------------------------------------------------------------------
/src/sidecar/types/At.ts:
--------------------------------------------------------------------------------
1 | export interface At {
2 | hash: string;
3 | height: string;
4 | }
5 |
--------------------------------------------------------------------------------
/src/sidecar/types/Block.ts:
--------------------------------------------------------------------------------
1 | export interface Block {
2 | number: string;
3 | hash: string;
4 | parentHash: string;
5 | stateRoot: string;
6 | extrinsicsRoot: string;
7 | authorId: string;
8 | logs: Log[];
9 | onInitialize: IOnInitializeOrFinalize;
10 | extrinsics: Extrinsic[];
11 | onFinalize: IOnInitializeOrFinalize;
12 | }
13 |
14 | interface Log {
15 | type: string;
16 | index: string;
17 | value: string;
18 | }
19 |
20 | interface IOnInitializeOrFinalize {
21 | events: SanitizedEvent[];
22 | }
23 |
24 | interface SanitizedEvent {
25 | method: FrameMethod;
26 | data: string[];
27 | }
28 |
29 | interface FrameMethod {
30 | pallet: string;
31 | method: string;
32 | }
33 |
34 | interface Extrinsic {
35 | method: FrameMethod;
36 | signature: Signature | null;
37 | nonce: string | null;
38 | args: SanitizedArgs;
39 | tip: string | null;
40 | hash: string;
41 | info: RuntimeDispatchInfo | { error: string } | {};
42 | events: SanitizedEvent[];
43 | success: boolean;
44 | paysfee: boolean | null;
45 | }
46 |
47 | interface Signature {
48 | signature: string;
49 | signer: string;
50 | }
51 |
52 | interface SanitizedArgs {
53 | call?: ISanitizedCall;
54 | calls?: ISanitizedCall[];
55 | [key: string]: unknown;
56 | }
57 |
58 | export interface ISanitizedCall {
59 | [key: string]: unknown;
60 | method: FrameMethod;
61 | args: SanitizedArgs;
62 | }
63 |
64 | interface RuntimeDispatchInfo {
65 | weight: string;
66 | class: string;
67 | partialFee: string;
68 | }
69 |
--------------------------------------------------------------------------------
/src/sidecar/types/TransactionMaterial.ts:
--------------------------------------------------------------------------------
1 | import { At } from './At';
2 |
3 | export interface TransactionMaterial {
4 | at: At;
5 | genesisHash: string;
6 | chainName: string;
7 | specName: string;
8 | specVersion: string;
9 | txVersion: string;
10 | metadata: string;
11 | }
12 |
--------------------------------------------------------------------------------
/src/static/architecture.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/canontech/proxy-hot-wallet/c1fee91dd153ef67d6ff0c0c8418d7a52b862fa5/src/static/architecture.png
--------------------------------------------------------------------------------
/src/transaction/TransactionConstruct.ts:
--------------------------------------------------------------------------------
1 | import { TypeRegistry } from '@polkadot/types';
2 | import { EXTRINSIC_VERSION } from '@polkadot/types/extrinsic/v4/Extrinsic';
3 | import { AnyJson } from '@polkadot/types/types';
4 | import * as txwrapper from '@substrate/txwrapper';
5 | import { KeyringPair } from '@substrate/txwrapper';
6 | import { createMetadata } from '@substrate/txwrapper/lib/util';
7 | import { Args, createMethod } from '@substrate/txwrapper/lib/util/method';
8 | import {
9 | BaseTxInfo,
10 | OptionsWithMeta,
11 | } from '@substrate/txwrapper/lib/util/types';
12 |
13 | import { SidecarApi } from '../sidecar/SidecarApi';
14 | import {
15 | BaseInfo,
16 | MaybeTimepoint,
17 | TransactionOpts,
18 | UnsignedMaterial,
19 | } from './types';
20 |
21 | type ChainName = 'Kusama' | 'Polkadot' | 'Polkadot CC1' | 'Westend';
22 |
23 | type SpecName = 'kusama' | 'polkadot' | 'westend';
24 |
25 | export class TransactionConstruct {
26 | private sidecarApi: SidecarApi;
27 | private readonly ERA_PERIOD = 64;
28 |
29 | constructor(sidecarURL: string, readonly coldStorage: string) {
30 | this.sidecarApi = new SidecarApi(sidecarURL);
31 | }
32 |
33 | private async fetchTransactionMaterial({
34 | origin,
35 | height: heightParam,
36 | metadataRpc: metadataRpcParam,
37 | }: TransactionOpts): Promise<{
38 | baseInfo: BaseInfo;
39 | registry: TypeRegistry;
40 | }> {
41 | const {
42 | genesisHash,
43 | txVersion,
44 | specVersion,
45 | chainName,
46 | specName,
47 | metadata: metadataRpc,
48 | } = await this.sidecarApi.getTransactionMaterial({
49 | height: heightParam,
50 | noMeta: !!metadataRpcParam,
51 | });
52 |
53 | const {
54 | at: { hash: blockHash, height },
55 | nonce,
56 | } = await this.sidecarApi.getAccountBalance(origin);
57 |
58 | const registry = txwrapper.getRegistry(
59 | chainName as ChainName,
60 | specName as SpecName,
61 | parseInt(specVersion),
62 | metadataRpc || metadataRpcParam
63 | );
64 |
65 | const baseInfo = {
66 | nonce: parseInt(nonce),
67 | eraPeriod: this.ERA_PERIOD,
68 | blockHash,
69 | blockNumber: parseInt(height),
70 | specVersion: parseInt(specVersion),
71 | genesisHash,
72 | metadataRpc,
73 | transactionVersion: parseInt(txVersion),
74 | };
75 |
76 | return { baseInfo, registry };
77 | }
78 |
79 | async multiSigApproveAsMulti(
80 | { origin, tip, height, metadataRpc }: TransactionOpts,
81 | threshold: number,
82 | otherSignatories: string[],
83 | maybeTimepointArg: MaybeTimepoint | null,
84 | callHash: string,
85 | maxWeight: number
86 | ): Promise {
87 | interface ApproveAsMultiArgs extends Args {
88 | threshold: number;
89 | otherSignatories: string[];
90 | maybeTimepoint: AnyJson;
91 | callHash: string;
92 | maxWeight: number;
93 | }
94 |
95 | const approveAsMulti = function (
96 | args: ApproveAsMultiArgs,
97 | info: BaseTxInfo,
98 | options: OptionsWithMeta
99 | ): txwrapper.UnsignedTransaction {
100 | return createMethod(
101 | {
102 | method: {
103 | args,
104 | name: 'approveAsMulti',
105 | pallet: 'multisig',
106 | },
107 | ...info,
108 | },
109 | options
110 | );
111 | };
112 |
113 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
114 | origin,
115 | height,
116 | metadataRpc,
117 | });
118 |
119 | const unsigned = approveAsMulti(
120 | {
121 | threshold,
122 | otherSignatories,
123 | maybeTimepoint:
124 | maybeTimepointArg === null
125 | ? null
126 | : registry
127 | .createType(
128 | 'Option',
129 | maybeTimepointArg
130 | )
131 | .toJSON(),
132 | callHash,
133 | maxWeight,
134 | },
135 | {
136 | address: origin,
137 | tip,
138 | ...baseInfo,
139 | },
140 | { metadataRpc: baseInfo.metadataRpc, registry }
141 | );
142 |
143 | return { unsigned, metadataRpc: baseInfo.metadataRpc, registry };
144 | }
145 |
146 | async multiSigAsMulti(
147 | { origin, tip, height, metadataRpc }: TransactionOpts,
148 | threshold: number,
149 | otherSignatories: string[],
150 | maybeTimepointArg: MaybeTimepoint | null,
151 | call: string,
152 | storeCall: boolean,
153 | maxWeight: number
154 | ): Promise {
155 | interface AsMultiArgs extends Args {
156 | threshold: number;
157 | otherSignatories: string[];
158 | maybeTimepoint: AnyJson;
159 | call: string;
160 | storeCall: boolean;
161 | maxWeight: number;
162 | }
163 |
164 | const asMulti = function (
165 | args: AsMultiArgs,
166 | info: BaseTxInfo,
167 | options: OptionsWithMeta
168 | ): txwrapper.UnsignedTransaction {
169 | return createMethod(
170 | {
171 | method: {
172 | args,
173 | name: 'asMulti',
174 | pallet: 'multisig',
175 | },
176 | ...info,
177 | },
178 | options
179 | );
180 | };
181 |
182 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
183 | origin,
184 | height,
185 | metadataRpc,
186 | });
187 |
188 | const unsigned = asMulti(
189 | {
190 | threshold,
191 | otherSignatories,
192 | maybeTimepoint: registry
193 | .createType('Option', maybeTimepointArg)
194 | .toJSON(),
195 | call,
196 | storeCall,
197 | maxWeight,
198 | },
199 | {
200 | address: origin,
201 | tip,
202 | ...baseInfo,
203 | },
204 | { metadataRpc: baseInfo.metadataRpc, registry }
205 | );
206 |
207 | return { unsigned, metadataRpc: baseInfo.metadataRpc, registry };
208 | }
209 |
210 | async proxyAddProxy(
211 | { origin, tip, height, metadataRpc }: TransactionOpts,
212 | delegate: string,
213 | proxyType: string,
214 | delay: number
215 | ): Promise {
216 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
217 | origin,
218 | height,
219 | metadataRpc,
220 | });
221 |
222 | const unsigned = txwrapper.proxy.addProxy(
223 | { delegate, proxyType, delay },
224 | {
225 | address: origin,
226 | tip,
227 | ...baseInfo,
228 | },
229 | { metadataRpc: baseInfo.metadataRpc, registry }
230 | );
231 |
232 | return {
233 | unsigned,
234 | metadataRpc: baseInfo.metadataRpc,
235 | registry,
236 | };
237 | }
238 |
239 | async proxyProxyAnnounced(
240 | { origin, tip, height, metadataRpc }: TransactionOpts,
241 | real: string,
242 | delegate: string,
243 | forceProxyType: string,
244 | call: string
245 | ): Promise {
246 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
247 | origin,
248 | height,
249 | metadataRpc,
250 | });
251 |
252 | const unsigned = txwrapper.proxy.proxyAnnounced(
253 | {
254 | real,
255 | delegate,
256 | forceProxyType,
257 | call,
258 | },
259 | {
260 | address: origin,
261 | tip,
262 | ...baseInfo,
263 | },
264 | { metadataRpc: baseInfo.metadataRpc, registry }
265 | );
266 |
267 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
268 | }
269 |
270 | async proxyProxy(
271 | { origin, tip, height, metadataRpc }: TransactionOpts,
272 | real: string,
273 | forceProxyType: string,
274 | call: string
275 | ): Promise {
276 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
277 | origin,
278 | height,
279 | metadataRpc,
280 | });
281 |
282 | const unsigned = txwrapper.proxy.proxy(
283 | {
284 | real,
285 | forceProxyType,
286 | call,
287 | },
288 | {
289 | address: origin,
290 | tip,
291 | ...baseInfo,
292 | },
293 | { metadataRpc: baseInfo.metadataRpc, registry }
294 | );
295 |
296 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
297 | }
298 |
299 | async proxyAnnounce(
300 | { origin, tip, height, metadataRpc }: TransactionOpts,
301 | real: string,
302 | callHash: string
303 | ): Promise {
304 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
305 | origin,
306 | height,
307 | metadataRpc,
308 | });
309 |
310 | const unsigned = txwrapper.proxy.announce(
311 | { real, callHash },
312 | {
313 | address: origin,
314 | tip,
315 | ...baseInfo,
316 | },
317 | { metadataRpc: baseInfo.metadataRpc, registry }
318 | );
319 |
320 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
321 | }
322 |
323 | async proxyRemoveProxies({
324 | origin,
325 | tip,
326 | height,
327 | metadataRpc,
328 | }: TransactionOpts): Promise {
329 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
330 | origin,
331 | height,
332 | metadataRpc,
333 | });
334 |
335 | const unsigned = txwrapper.proxy.removeProxies(
336 | {},
337 | {
338 | address: origin,
339 | tip,
340 | ...baseInfo,
341 | },
342 | { metadataRpc: baseInfo.metadataRpc, registry }
343 | );
344 |
345 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
346 | }
347 |
348 | async proxyRejectAnnouncement(
349 | { origin, tip, height, metadataRpc }: TransactionOpts,
350 | delegate: string,
351 | callHash: string
352 | ): Promise {
353 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
354 | origin,
355 | height,
356 | metadataRpc,
357 | });
358 |
359 | const unsigned = txwrapper.proxy.rejectAnnouncement(
360 | { delegate, callHash },
361 | {
362 | address: origin,
363 | tip,
364 | ...baseInfo,
365 | },
366 | { metadataRpc: baseInfo.metadataRpc, registry }
367 | );
368 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
369 | }
370 |
371 | async proxyAnonymous(
372 | { origin, tip, height, metadataRpc }: TransactionOpts,
373 | proxyType: string,
374 | delay: number,
375 | index: number,
376 | ): Promise {
377 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
378 | origin,
379 | height,
380 | metadataRpc,
381 | });
382 |
383 | const unsigned = txwrapper.proxy.anonymous(
384 | { proxyType, delay, index },
385 | {
386 | address: origin,
387 | tip,
388 | ...baseInfo,
389 | },
390 | { metadataRpc: baseInfo.metadataRpc, registry }
391 | );
392 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
393 | }
394 |
395 | async balancesTransfer(
396 | { origin, tip, height, metadataRpc }: TransactionOpts,
397 | dest: string,
398 | value: string
399 | ): Promise {
400 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
401 | origin,
402 | height,
403 | metadataRpc,
404 | });
405 |
406 | const unsigned = txwrapper.balances.transfer(
407 | { dest, value },
408 | {
409 | address: origin,
410 | tip,
411 | ...baseInfo,
412 | },
413 | { metadataRpc: baseInfo.metadataRpc, registry }
414 | );
415 |
416 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
417 | }
418 |
419 | async utilityAsDerivative(
420 | { origin, tip, height, metadataRpc }: TransactionOpts,
421 | index: number,
422 | call: string
423 | ): Promise {
424 | const { baseInfo, registry } = await this.fetchTransactionMaterial({
425 | origin,
426 | height,
427 | metadataRpc,
428 | });
429 |
430 | const unsigned = txwrapper.utility.asDerivative(
431 | { index, call },
432 | {
433 | address: origin,
434 | tip,
435 | ...baseInfo,
436 | },
437 | { metadataRpc: baseInfo.metadataRpc, registry }
438 | );
439 |
440 | return { unsigned, registry, metadataRpc: baseInfo.metadataRpc };
441 | }
442 |
443 | /**
444 | * Create the signing payload, create a signature from the payload, and then
445 | * returned the payload with the signature attached
446 | *
447 | * @param origin
448 | * @param unsignedMaterial
449 | */
450 | createAndSignTransaction(
451 | origin: KeyringPair,
452 | { unsigned, registry, metadataRpc }: UnsignedMaterial
453 | ): string {
454 | registry.setMetadata(createMetadata(registry, metadataRpc));
455 |
456 | const signingPayload = txwrapper.createSigningPayload(unsigned, {
457 | registry,
458 | });
459 |
460 | const { signature } = registry
461 | .createType('ExtrinsicPayload', signingPayload, {
462 | version: EXTRINSIC_VERSION,
463 | })
464 | .sign(origin);
465 |
466 | return txwrapper.createSignedTx(unsigned, signature, {
467 | registry,
468 | metadataRpc,
469 | });
470 | }
471 |
472 | /**
473 | * Simple function to check if a call is balance transfer to the cold storage
474 | * address given on instance initizilation.
475 | */
476 | safetyWorker({
477 | unsigned,
478 | registry,
479 | metadataRpc,
480 | }: UnsignedMaterial): boolean {
481 | const decodedC0 = txwrapper.decode(unsigned, {
482 | registry,
483 | metadataRpc,
484 | });
485 | console.log(
486 | 'Decoded attempt to transfer from derivative account:\n',
487 | decodedC0.method.args
488 | );
489 | const isColdStorageAddress =
490 | decodedC0.method.args.dest === this.coldStorage;
491 | console.log(
492 | 'Destination is correct cold storage: ',
493 | isColdStorageAddress
494 | );
495 |
496 | return isColdStorageAddress;
497 | }
498 | }
499 |
--------------------------------------------------------------------------------
/src/transaction/types/BaseInfo.ts:
--------------------------------------------------------------------------------
1 | export interface BaseInfo {
2 | nonce: number;
3 | eraPeriod: number;
4 | blockHash: string;
5 | blockNumber: number;
6 | specVersion: number;
7 | genesisHash: string;
8 | metadataRpc: string;
9 | transactionVersion: number;
10 | }
11 |
--------------------------------------------------------------------------------
/src/transaction/types/MaybeTimepoint.ts:
--------------------------------------------------------------------------------
1 | export interface MaybeTimepoint {
2 | height: number;
3 | index: number;
4 | }
5 |
--------------------------------------------------------------------------------
/src/transaction/types/TransactionOpts.ts:
--------------------------------------------------------------------------------
1 | export interface TransactionOpts {
2 | /**
3 | * Address of the signer
4 | */
5 | origin: string;
6 | /**
7 | * Value of tip in native currency
8 | */
9 | tip?: number;
10 | /**
11 | * Block height to fetch tranaction material at
12 | */
13 | height?: number;
14 | /**
15 | * Scale encoded hex metadata blob. Optional performance enhancement that reduces payload size
16 | * from `transaction/material` endpoint. Should only be used if it is known that there will be no
17 | * runtime upgrade between transaction contruction and submission.
18 | */
19 | metadataRpc?: string;
20 | }
21 |
--------------------------------------------------------------------------------
/src/transaction/types/UnsignedMaterial.ts:
--------------------------------------------------------------------------------
1 | import { TypeRegistry } from '@polkadot/types';
2 | import * as txwrapper from '@substrate/txwrapper';
3 |
4 | export interface UnsignedMaterial {
5 | unsigned: txwrapper.UnsignedTransaction;
6 | metadataRpc: string;
7 | registry: TypeRegistry;
8 | }
9 |
--------------------------------------------------------------------------------
/src/transaction/types/index.ts:
--------------------------------------------------------------------------------
1 | export * from './BaseInfo';
2 | export * from './UnsignedMaterial';
3 | export * from './MaybeTimepoint';
4 | export * from './TransactionOpts';
5 |
--------------------------------------------------------------------------------
/src/util/display.ts:
--------------------------------------------------------------------------------
1 | export function logSeperator(): void {
2 | console.log(Array(80).fill('━').join(''), '\n');
3 | }
4 |
5 | export function submiting(): void {
6 | console.log('...submiting transaction to the node 🚀');
7 | }
8 |
9 | export function waiting(): void {
10 | console.log('...waiting for transaction inclusion ⌛️⌛⌛️');
11 | }
12 |
--------------------------------------------------------------------------------
/src/util/index.ts:
--------------------------------------------------------------------------------
1 | export * from './display';
2 | export * from './sleep';
3 | export * from './sortAddreses';
4 | export * from './input';
5 |
--------------------------------------------------------------------------------
/src/util/input.ts:
--------------------------------------------------------------------------------
1 | import readline from 'readline';
2 |
3 | export function waitToContinue(): Promise {
4 | const rl = readline.createInterface({
5 | input: process.stdin,
6 | output: process.stdout,
7 | });
8 |
9 | return new Promise((resolve, _reject) => {
10 | rl.question('Press enter to continue:\n', (_answer) => {
11 | console.log(_answer);
12 | rl.close();
13 | resolve(undefined);
14 | });
15 | });
16 | }
17 |
--------------------------------------------------------------------------------
/src/util/sleep.ts:
--------------------------------------------------------------------------------
1 | import { promisify } from 'util';
2 |
3 | export async function sleep(ms: number): Promise {
4 | const s = promisify(setTimeout);
5 | await s(ms);
6 | return;
7 | }
8 |
--------------------------------------------------------------------------------
/src/util/sortAddreses.ts:
--------------------------------------------------------------------------------
1 | import { decodeAddress, encodeAddress } from '@polkadot/keyring';
2 | import { u8aSorted } from '@polkadot/util';
3 |
4 | export function sortAddresses(
5 | addresses: string[],
6 | ss58Prefix?: number
7 | ): string[] {
8 | return u8aSorted(
9 | addresses.map((addr) => decodeAddress(addr))
10 | ).map((pubkey) => encodeAddress(pubkey, ss58Prefix));
11 | }
12 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "declaration": true,
4 | "module": "CommonJS",
5 | "target": "ES6",
6 | "outDir": "build",
7 | "esModuleInterop": true,
8 | "strict": true,
9 | "sourceMap": true,
10 | "pretty": true
11 | },
12 | "include": [
13 | "src"
14 | ]
15 | }
16 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@acala-network/type-definitions@^0.7.2-4":
6 | version "0.7.3"
7 | resolved "https://registry.yarnpkg.com/@acala-network/type-definitions/-/type-definitions-0.7.3.tgz#e03872a79a48a39e3055ce5fdf20adc6a9b7ca65"
8 | integrity sha512-ZSlBgvUNBhVKCDKFrAoI8EMW3GUfEsmzbTzuXnT/CbI4fiTomiqyZ3LOCP7Mh+N6gkd58xr1nUHRzs8LZ1nsig==
9 | dependencies:
10 | "@open-web3/orml-type-definitions" "^0.9.3"
11 |
12 | "@babel/code-frame@7.12.11":
13 | version "7.12.11"
14 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f"
15 | integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==
16 | dependencies:
17 | "@babel/highlight" "^7.10.4"
18 |
19 | "@babel/helper-validator-identifier@^7.12.11":
20 | version "7.12.11"
21 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed"
22 | integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==
23 |
24 | "@babel/highlight@^7.10.4":
25 | version "7.13.10"
26 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1"
27 | integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg==
28 | dependencies:
29 | "@babel/helper-validator-identifier" "^7.12.11"
30 | chalk "^2.0.0"
31 | js-tokens "^4.0.0"
32 |
33 | "@babel/runtime@7.10.4":
34 | version "7.10.4"
35 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99"
36 | integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==
37 | dependencies:
38 | regenerator-runtime "^0.13.4"
39 |
40 | "@babel/runtime@^7.13.10", "@babel/runtime@^7.13.9", "@babel/runtime@^7.9.6":
41 | version "7.13.17"
42 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec"
43 | integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==
44 | dependencies:
45 | regenerator-runtime "^0.13.4"
46 |
47 | "@crustio/type-definitions@0.0.5":
48 | version "0.0.5"
49 | resolved "https://registry.yarnpkg.com/@crustio/type-definitions/-/type-definitions-0.0.5.tgz#6be9cd9ed8ee34d6b67176f8860793b94ed72699"
50 | integrity sha512-MhozPIjg4iFelKebCgQKSlz+Nm/swbdZpAeJkw+Q6IHxDws57sodpy5EMDBEgszTsB71XDouSmQzgh3or1XrsQ==
51 | dependencies:
52 | "@open-web3/orml-type-definitions" "^0.8.2-9"
53 |
54 | "@dabh/diagnostics@^2.0.2":
55 | version "2.0.2"
56 | resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31"
57 | integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==
58 | dependencies:
59 | colorspace "1.1.x"
60 | enabled "2.0.x"
61 | kuler "^2.0.0"
62 |
63 | "@darwinia/types-known@^1.1.0-alpha.8":
64 | version "1.1.0-alpha.8"
65 | resolved "https://registry.yarnpkg.com/@darwinia/types-known/-/types-known-1.1.0-alpha.8.tgz#0139dae5fb6c4d7451cf6be22abefb4d6d954894"
66 | integrity sha512-1Vo3/UE1HQZheUfbuJi8bmJajoY7PMuIpo65DRAT96UGfZm/MYf9/8y6DFFrhLe4cyoCAb+ni1Q+/O9Uh6mQag==
67 | dependencies:
68 | "@babel/runtime" "^7.9.6"
69 | "@polkadot/types" "4.0.4-5"
70 | "@polkadot/util" "6.0.5"
71 | bn.js "^5.1.2"
72 |
73 | "@darwinia/types@^1.1.0-alpha.7":
74 | version "1.1.0-alpha.8"
75 | resolved "https://registry.yarnpkg.com/@darwinia/types/-/types-1.1.0-alpha.8.tgz#138851b82d57a1b9cf20fdceaab383c76ab294ca"
76 | integrity sha512-225XlOYSai1QkpPOTWBTrEidRitcXHSptzNgvZ5RO1qVwbgb8Q0++SNsD0ikkDRpn1g5/ySDQFExWSfRcTi6bg==
77 | dependencies:
78 | "@darwinia/types-known" "^1.1.0-alpha.8"
79 |
80 | "@edgeware/node-types@^3.3.4":
81 | version "3.3.4"
82 | resolved "https://registry.yarnpkg.com/@edgeware/node-types/-/node-types-3.3.4.tgz#6666cc636a11dc197813b6f56bc54f9db0a200d4"
83 | integrity sha512-wCud1L4hmVeu2dkBsP3f89lWIwtg87Hh6t1AT6KvFlpR0vGWR1HLAe2ITmB9RhJdWy8NR5rLoCAEzaq4TDcctA==
84 |
85 | "@equilab/definitions@1.0.3":
86 | version "1.0.3"
87 | resolved "https://registry.yarnpkg.com/@equilab/definitions/-/definitions-1.0.3.tgz#4cd92830d811dbb29dff58f81d6ddead869b8980"
88 | integrity sha512-9Dn4kCRmyc0Jxg9TDXDkQYods0HgT0pTqlD2II7CejUY3J8G4jbVTmTgZqb5izoUw+Ei1YCDUBmNl8gt9TecSA==
89 |
90 | "@eslint/eslintrc@^0.4.0":
91 | version "0.4.0"
92 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547"
93 | integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog==
94 | dependencies:
95 | ajv "^6.12.4"
96 | debug "^4.1.1"
97 | espree "^7.3.0"
98 | globals "^12.1.0"
99 | ignore "^4.0.6"
100 | import-fresh "^3.2.1"
101 | js-yaml "^3.13.1"
102 | minimatch "^3.0.4"
103 | strip-json-comments "^3.1.1"
104 |
105 | "@interlay/polkabtc-types@^0.6.2":
106 | version "0.6.2"
107 | resolved "https://registry.yarnpkg.com/@interlay/polkabtc-types/-/polkabtc-types-0.6.2.tgz#0eeef460850e4b82abd58aa2ebbd8b92497d7e7a"
108 | integrity sha512-uhlzcp9rcwGtsEWStzcWrKWVIQtmnQTVgpXL2RdWSF2Ed4cF+Y2fQe5SsKBSR56T6GImHTYds0Psare+HzI0vw==
109 |
110 | "@laminar/type-definitions@^0.3.1":
111 | version "0.3.1"
112 | resolved "https://registry.yarnpkg.com/@laminar/type-definitions/-/type-definitions-0.3.1.tgz#e1b62ab353245f9b3454cb5d909a329f66aaac8f"
113 | integrity sha512-QWC2qtvbPIxal+gMfUocZmwK0UsD7Sb0RUm4Hallkp+OXXL+3uBLwztYDLS5LtocOn0tfR//sgpnfsEIEb71Lw==
114 | dependencies:
115 | "@open-web3/orml-type-definitions" "^0.8.2-9"
116 |
117 | "@nodelib/fs.scandir@2.1.4":
118 | version "2.1.4"
119 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69"
120 | integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==
121 | dependencies:
122 | "@nodelib/fs.stat" "2.0.4"
123 | run-parallel "^1.1.9"
124 |
125 | "@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2":
126 | version "2.0.4"
127 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655"
128 | integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==
129 |
130 | "@nodelib/fs.walk@^1.2.3":
131 | version "1.2.6"
132 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063"
133 | integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==
134 | dependencies:
135 | "@nodelib/fs.scandir" "2.1.4"
136 | fastq "^1.6.0"
137 |
138 | "@open-web3/orml-type-definitions@^0.8.2-9":
139 | version "0.8.2-11"
140 | resolved "https://registry.yarnpkg.com/@open-web3/orml-type-definitions/-/orml-type-definitions-0.8.2-11.tgz#56358d371b63f83761234a7b1283ac9008e6dddd"
141 | integrity sha512-cUv5+mprnaGNt0tu3FhK1nFRBK7SGjPhA1O0nxWWeRmuuH5fjkr0glbHE9kcKuCBfsh7nt6NGwxwl9emQtUDSA==
142 |
143 | "@open-web3/orml-type-definitions@^0.9.3":
144 | version "0.9.3"
145 | resolved "https://registry.yarnpkg.com/@open-web3/orml-type-definitions/-/orml-type-definitions-0.9.3.tgz#6bf2ff02c108fa0b4416798f27449f14b16f420f"
146 | integrity sha512-Sq88InH7Ca5XbPP2xIzXaZukw0lHG9prpK/y/UA51owscJYQr1y3f6+x8qSUVXMQwowajtODKVVZr4a9wBWi/w==
147 |
148 | "@polkadot/api-derive@4.6.2":
149 | version "4.6.2"
150 | resolved "https://registry.yarnpkg.com/@polkadot/api-derive/-/api-derive-4.6.2.tgz#a456cf10b4db39be2f17b568e7d863a1dce01891"
151 | integrity sha512-wDcg4qOo0uWJrUoDadApJnPApZbzJSq8huXokbev4AfaGGN8HDnW3XesOBfhW7S1Fga0ZJZMXkrVyrfQH1UzyA==
152 | dependencies:
153 | "@babel/runtime" "^7.13.10"
154 | "@polkadot/api" "4.6.2"
155 | "@polkadot/rpc-core" "4.6.2"
156 | "@polkadot/types" "4.6.2"
157 | "@polkadot/util" "^6.2.1"
158 | "@polkadot/util-crypto" "^6.2.1"
159 | "@polkadot/x-rxjs" "^6.2.1"
160 | bn.js "^4.11.9"
161 |
162 | "@polkadot/api@4.6.2", "@polkadot/api@^4.6.2":
163 | version "4.6.2"
164 | resolved "https://registry.yarnpkg.com/@polkadot/api/-/api-4.6.2.tgz#945ae56c2a83ce88d7db62c7320cd8828a2c751f"
165 | integrity sha512-QGLD+K/IcmYIMZklxM//1SUW4s83CHiSm5wplz2Lmasy6uEnM14UGdJ2O9MbObb9ZopSBNsLsMfnvM3JePQ44w==
166 | dependencies:
167 | "@babel/runtime" "^7.13.10"
168 | "@polkadot/api-derive" "4.6.2"
169 | "@polkadot/keyring" "^6.2.1"
170 | "@polkadot/metadata" "4.6.2"
171 | "@polkadot/rpc-core" "4.6.2"
172 | "@polkadot/rpc-provider" "4.6.2"
173 | "@polkadot/types" "4.6.2"
174 | "@polkadot/types-known" "4.6.2"
175 | "@polkadot/util" "^6.2.1"
176 | "@polkadot/util-crypto" "^6.2.1"
177 | "@polkadot/x-rxjs" "^6.2.1"
178 | bn.js "^4.11.9"
179 | eventemitter3 "^4.0.7"
180 |
181 | "@polkadot/apps-config@^0.88.1":
182 | version "0.88.1"
183 | resolved "https://registry.yarnpkg.com/@polkadot/apps-config/-/apps-config-0.88.1.tgz#82fa313403eaa1dcc56e9fd7113367f0d87e79fa"
184 | integrity sha512-kQ6o9IQaU73Dp9JoCLQ0PKa4stpE/iNtIAZV+kbsl44VvdxRron4VzQZsrRj9F+UNG63vBd2gY7R2grRbpYflA==
185 | dependencies:
186 | "@acala-network/type-definitions" "^0.7.2-4"
187 | "@babel/runtime" "^7.13.10"
188 | "@crustio/type-definitions" "0.0.5"
189 | "@darwinia/types" "^1.1.0-alpha.7"
190 | "@edgeware/node-types" "^3.3.4"
191 | "@equilab/definitions" "1.0.3"
192 | "@interlay/polkabtc-types" "^0.6.2"
193 | "@laminar/type-definitions" "^0.3.1"
194 | "@polkadot/networks" "^6.2.1"
195 | "@snowfork/snowbridge-types" "^0.2.3"
196 | "@sora-substrate/type-definitions" "^0.8.0"
197 | "@subsocial/types" "^0.4.36"
198 | "@zeitgeistpm/type-defs" "^0.1.36"
199 | moonbeam-types-bundle "1.1.12"
200 |
201 | "@polkadot/keyring@^6.2.1":
202 | version "6.2.1"
203 | resolved "https://registry.yarnpkg.com/@polkadot/keyring/-/keyring-6.2.1.tgz#8074b19e96c9722214fecbc31b9e9877868b42ff"
204 | integrity sha512-0suOIagCC6p6fJw3pEZaXpDP1tPXDGUIQXZaArh+t+TKAG5OJ2HUmeGv3FeiljGnnI7iZmrjrrshx1GSp0B+gA==
205 | dependencies:
206 | "@babel/runtime" "^7.13.10"
207 | "@polkadot/util" "6.2.1"
208 | "@polkadot/util-crypto" "6.2.1"
209 |
210 | "@polkadot/metadata@4.0.4-5":
211 | version "4.0.4-5"
212 | resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.0.4-5.tgz#397b446ebc9270472688a4899caf25728548ffb7"
213 | integrity sha512-aVmgR56Qn+sexI9hL9pOiTT91ZppNbnx/SXjMvPQDQsbJjODe6An8t1q5Y+qm3HNjryv+xM17Bekzl5zihBXfg==
214 | dependencies:
215 | "@babel/runtime" "^7.13.9"
216 | "@polkadot/types" "4.0.4-5"
217 | "@polkadot/types-known" "4.0.4-5"
218 | "@polkadot/util" "^6.0.5"
219 | "@polkadot/util-crypto" "^6.0.5"
220 | bn.js "^4.11.9"
221 |
222 | "@polkadot/metadata@4.6.2":
223 | version "4.6.2"
224 | resolved "https://registry.yarnpkg.com/@polkadot/metadata/-/metadata-4.6.2.tgz#9806157af86f3571607a7d64d66e6d573160b141"
225 | integrity sha512-0v1j0xenHed06sUI8RbWspbSvPH38z4F8RzS4h24z5PaWq4sKwTSqXJjBAeYNRDYSX8WyTACUZsrWinfTQivHA==
226 | dependencies:
227 | "@babel/runtime" "^7.13.10"
228 | "@polkadot/types" "4.6.2"
229 | "@polkadot/types-known" "4.6.2"
230 | "@polkadot/util" "^6.2.1"
231 | "@polkadot/util-crypto" "^6.2.1"
232 | bn.js "^4.11.9"
233 |
234 | "@polkadot/networks@6.2.1", "@polkadot/networks@^6.0.5", "@polkadot/networks@^6.2.1":
235 | version "6.2.1"
236 | resolved "https://registry.yarnpkg.com/@polkadot/networks/-/networks-6.2.1.tgz#9c4d6d34cc6a4a8cd66a00ed13ec01b898f84cf3"
237 | integrity sha512-q6qJ5UWea+NICg5tX3cLhBPsfUvQnE4SLnux66zfZcnRdhKNqw34dd2SrVdAW1oIYOm36br/wyQ8oK/MP5URiw==
238 | dependencies:
239 | "@babel/runtime" "^7.13.10"
240 |
241 | "@polkadot/rpc-core@4.6.2":
242 | version "4.6.2"
243 | resolved "https://registry.yarnpkg.com/@polkadot/rpc-core/-/rpc-core-4.6.2.tgz#664c492b49bd0b56c813d3ea305cb69bcd34f174"
244 | integrity sha512-WHfDtTJANxT8SPiOy+619Z9vd6HvbQe7XPo6Dv7WCqcMdBRmF1ZDb28UEoT+5fasixe8rVADek5536NOkbqXBQ==
245 | dependencies:
246 | "@babel/runtime" "^7.13.10"
247 | "@polkadot/metadata" "4.6.2"
248 | "@polkadot/rpc-provider" "4.6.2"
249 | "@polkadot/types" "4.6.2"
250 | "@polkadot/util" "^6.2.1"
251 | "@polkadot/x-rxjs" "^6.2.1"
252 |
253 | "@polkadot/rpc-provider@4.6.2":
254 | version "4.6.2"
255 | resolved "https://registry.yarnpkg.com/@polkadot/rpc-provider/-/rpc-provider-4.6.2.tgz#1625fc084c5053967d5265cbfcb11c54e0d5bc90"
256 | integrity sha512-yCdBCQWhQ/RS8ooUAN67w2OZarFI+TrQ196j2LmVacKPjT8+fxXOIcqKwQs+6pYh0svX3v6FJINOc0c9B87tZw==
257 | dependencies:
258 | "@babel/runtime" "^7.13.10"
259 | "@polkadot/types" "4.6.2"
260 | "@polkadot/util" "^6.2.1"
261 | "@polkadot/util-crypto" "^6.2.1"
262 | "@polkadot/x-fetch" "^6.2.1"
263 | "@polkadot/x-global" "^6.2.1"
264 | "@polkadot/x-ws" "^6.2.1"
265 | bn.js "^4.11.9"
266 | eventemitter3 "^4.0.7"
267 |
268 | "@polkadot/types-known@4.0.4-5":
269 | version "4.0.4-5"
270 | resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.0.4-5.tgz#f6ccefc679e12071b8ca0e40ff88a03994ed4d54"
271 | integrity sha512-e3s69I79xyR81AuVfw1vEiPLjDveRwbDCggA4xp/Vw9NmdennB4CLYNl3xiegaXJjW+gsnVGER9phJ0jTExXuQ==
272 | dependencies:
273 | "@babel/runtime" "^7.13.9"
274 | "@polkadot/networks" "^6.0.5"
275 | "@polkadot/types" "4.0.4-5"
276 | "@polkadot/util" "^6.0.5"
277 | bn.js "^4.11.9"
278 |
279 | "@polkadot/types-known@4.6.2":
280 | version "4.6.2"
281 | resolved "https://registry.yarnpkg.com/@polkadot/types-known/-/types-known-4.6.2.tgz#121e5c3f929f305af0c2853ed257ab271a69bbbf"
282 | integrity sha512-rRrs9z1Jz6KdV/j26e7PeSy3TcNVbQ7ESwJhouCF9WDeHzam9eACTJY3eZoYBVEXwthUK9OyyzcJQFhjJyumoQ==
283 | dependencies:
284 | "@babel/runtime" "^7.13.10"
285 | "@polkadot/networks" "^6.2.1"
286 | "@polkadot/types" "4.6.2"
287 | "@polkadot/util" "^6.2.1"
288 | bn.js "^4.11.9"
289 |
290 | "@polkadot/types@4.0.4-5":
291 | version "4.0.4-5"
292 | resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.0.4-5.tgz#f157a3d32b84ac7d7c1356bc5a55d4c31c10cfd5"
293 | integrity sha512-atDPNtdTChPlt8kLpdMWjAH1eL+Zc74iTgqB4no9Ir6FkgM/RAIOUuD660JydCRkFCHvJJ+HO9vN9oh3G6qcOw==
294 | dependencies:
295 | "@babel/runtime" "^7.13.9"
296 | "@polkadot/metadata" "4.0.4-5"
297 | "@polkadot/util" "^6.0.5"
298 | "@polkadot/util-crypto" "^6.0.5"
299 | "@polkadot/x-rxjs" "^6.0.5"
300 | "@types/bn.js" "^4.11.6"
301 | bn.js "^4.11.9"
302 |
303 | "@polkadot/types@4.6.2", "@polkadot/types@^4.2.1":
304 | version "4.6.2"
305 | resolved "https://registry.yarnpkg.com/@polkadot/types/-/types-4.6.2.tgz#b7f37fa7e8c8c8ad165d7b07604bae98ac7b0763"
306 | integrity sha512-iH/fdrFmO8qgZmJwRPgYM2AZWde6Et2mlNLejWm9gwqxsTy/2c/Jgf3pWyNqiy46tQOfIeJSwfiVWgRaju9nmA==
307 | dependencies:
308 | "@babel/runtime" "^7.13.10"
309 | "@polkadot/metadata" "4.6.2"
310 | "@polkadot/util" "^6.2.1"
311 | "@polkadot/util-crypto" "^6.2.1"
312 | "@polkadot/x-rxjs" "^6.2.1"
313 | "@types/bn.js" "^4.11.6"
314 | bn.js "^4.11.9"
315 |
316 | "@polkadot/util-crypto@6.2.1", "@polkadot/util-crypto@^6.0.5", "@polkadot/util-crypto@^6.2.1":
317 | version "6.2.1"
318 | resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-6.2.1.tgz#a713f5e354354f73984eef7b192106e0d93466ec"
319 | integrity sha512-tj1FsIQoQdXZpGnnptqhoY2aJkHQWHMy6une2CG9qEZ4Ur8X64Yg6sh1DyOgiXjORf3iGlTBed+7zDWXIp0Nxw==
320 | dependencies:
321 | "@babel/runtime" "^7.13.10"
322 | "@polkadot/networks" "6.2.1"
323 | "@polkadot/util" "6.2.1"
324 | "@polkadot/wasm-crypto" "^4.0.2"
325 | "@polkadot/x-randomvalues" "6.2.1"
326 | base-x "^3.0.8"
327 | base64-js "^1.5.1"
328 | blakejs "^1.1.0"
329 | bn.js "^4.11.9"
330 | create-hash "^1.2.0"
331 | elliptic "^6.5.4"
332 | hash.js "^1.1.7"
333 | js-sha3 "^0.8.0"
334 | scryptsy "^2.1.0"
335 | tweetnacl "^1.0.3"
336 | xxhashjs "^0.2.2"
337 |
338 | "@polkadot/util@6.0.5":
339 | version "6.0.5"
340 | resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.0.5.tgz#aa52995d3fe998eed218d26b243832a7a3e2944d"
341 | integrity sha512-0EnYdGAXx/Y2MLgCKtlfdKVcURV+Twx+M+auljTeMK8226pR7xMblYuVuO5bxhPWBa1W7+iQloEZ0VRQrIoMDw==
342 | dependencies:
343 | "@babel/runtime" "^7.13.9"
344 | "@polkadot/x-textdecoder" "6.0.5"
345 | "@polkadot/x-textencoder" "6.0.5"
346 | "@types/bn.js" "^4.11.6"
347 | bn.js "^4.11.9"
348 | camelcase "^5.3.1"
349 | ip-regex "^4.3.0"
350 |
351 | "@polkadot/util@6.2.1", "@polkadot/util@^6.0.5", "@polkadot/util@^6.2.1":
352 | version "6.2.1"
353 | resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-6.2.1.tgz#67ca7573782263cf6a833ebe2d040e012df7b5ff"
354 | integrity sha512-+r70J4s7b0Mmdz4AxQPO2wYbTJ9/hbKXbtLQzjz7X7T7PcKqWHDzue+b3CGgGq65n2My4PEzVw7qHGAyPdtRVw==
355 | dependencies:
356 | "@babel/runtime" "^7.13.10"
357 | "@polkadot/x-textdecoder" "6.2.1"
358 | "@polkadot/x-textencoder" "6.2.1"
359 | "@types/bn.js" "^4.11.6"
360 | bn.js "^4.11.9"
361 | camelcase "^5.3.1"
362 | ip-regex "^4.3.0"
363 |
364 | "@polkadot/wasm-crypto-asmjs@^4.0.2":
365 | version "4.0.2"
366 | resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-asmjs/-/wasm-crypto-asmjs-4.0.2.tgz#f42c353a64e1243841daf90e4bd54eff01a4e3cf"
367 | integrity sha512-hlebqtGvfjg2ZNm4scwBGVHwOwfUhy2yw5RBHmPwkccUif3sIy4SAzstpcVBIVMdAEvo746bPWEInA8zJRcgJA==
368 | dependencies:
369 | "@babel/runtime" "^7.13.9"
370 |
371 | "@polkadot/wasm-crypto-wasm@^4.0.2":
372 | version "4.0.2"
373 | resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto-wasm/-/wasm-crypto-wasm-4.0.2.tgz#89f9e0a1e4d076784d4a42bea37fc8b06bdd8bb6"
374 | integrity sha512-de/AfNPZ0uDKFWzOZ1rJCtaUbakGN29ks6IRYu6HZTRg7+RtqvE1rIkxabBvYgQVHIesmNwvEA9DlIkS6hYRFQ==
375 | dependencies:
376 | "@babel/runtime" "^7.13.9"
377 |
378 | "@polkadot/wasm-crypto@^4.0.2":
379 | version "4.0.2"
380 | resolved "https://registry.yarnpkg.com/@polkadot/wasm-crypto/-/wasm-crypto-4.0.2.tgz#9649057adee8383cc86433d107ba526b718c5a3b"
381 | integrity sha512-2h9FuQFkBc+B3TwSapt6LtyPvgtd0Hq9QsHW8g8FrmKBFRiiFKYRpfJKHCk0aCZzuRf9h95bQl/X6IXAIWF2ng==
382 | dependencies:
383 | "@babel/runtime" "^7.13.9"
384 | "@polkadot/wasm-crypto-asmjs" "^4.0.2"
385 | "@polkadot/wasm-crypto-wasm" "^4.0.2"
386 |
387 | "@polkadot/x-fetch@^6.2.1":
388 | version "6.2.1"
389 | resolved "https://registry.yarnpkg.com/@polkadot/x-fetch/-/x-fetch-6.2.1.tgz#531815ab5e4272a3a3d68fff3ed36339d3b15f7e"
390 | integrity sha512-CnPGO/GlqmGPp/BGmMBmW1NKrwZJqVilMmxzSp85XbyxcK3QlRZDU5TtQ1r1MKAEfutLapqX9Ki8S+jzK4GRuA==
391 | dependencies:
392 | "@babel/runtime" "^7.13.10"
393 | "@polkadot/x-global" "6.2.1"
394 | "@types/node-fetch" "^2.5.10"
395 | node-fetch "^2.6.1"
396 |
397 | "@polkadot/x-global@6.0.5":
398 | version "6.0.5"
399 | resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.0.5.tgz#eb2a0980e4c2012f251e7b61832e185f5037ae80"
400 | integrity sha512-KjQvICngNdB2Gno0TYJlgjKI0Ia0NPhN1BG6YzcKLO/5ZNzNHkLmowdNb5gprE8uCBnOFXXHwgZAE/nTYya2dg==
401 | dependencies:
402 | "@babel/runtime" "^7.13.9"
403 | "@types/node-fetch" "^2.5.8"
404 | node-fetch "^2.6.1"
405 |
406 | "@polkadot/x-global@6.2.1", "@polkadot/x-global@^6.2.1":
407 | version "6.2.1"
408 | resolved "https://registry.yarnpkg.com/@polkadot/x-global/-/x-global-6.2.1.tgz#bed7240317769b507f8afbaa9390e68ec5509aae"
409 | integrity sha512-j1Hg9ZIujvXjNnTtbWio6E5YX8hMb9zfBq/vevlNa0OrMsCadqEFaM4poMhfYcjFSenSsZlnIBvqfP0zOx8w+A==
410 | dependencies:
411 | "@babel/runtime" "^7.13.10"
412 | "@types/node-fetch" "^2.5.10"
413 | node-fetch "^2.6.1"
414 |
415 | "@polkadot/x-randomvalues@6.2.1":
416 | version "6.2.1"
417 | resolved "https://registry.yarnpkg.com/@polkadot/x-randomvalues/-/x-randomvalues-6.2.1.tgz#219adde1feea0a2b45b757effd21643fd171a2b4"
418 | integrity sha512-l9K6W44i62e2i5nKJ3/E/f1pd8yuVaMvbf1A4wuvLCgZv37vH1+dZrdSnHXN6i/ZuuixjlmqUNrBW8Bu9HZLpg==
419 | dependencies:
420 | "@babel/runtime" "^7.13.10"
421 | "@polkadot/x-global" "6.2.1"
422 |
423 | "@polkadot/x-rxjs@^6.0.5", "@polkadot/x-rxjs@^6.2.1":
424 | version "6.2.1"
425 | resolved "https://registry.yarnpkg.com/@polkadot/x-rxjs/-/x-rxjs-6.2.1.tgz#5118498ed7736e6e84494d0a2129d498a63c360a"
426 | integrity sha512-NcGC/GKZnbEz2FTdvGiJICfQW+J4wGrK1EAJSjwz2VY/st9SrQOIH1Uzq98Evx1lP8wmmL3RLDw7aNxDUE+rrA==
427 | dependencies:
428 | "@babel/runtime" "^7.13.10"
429 | rxjs "^6.6.7"
430 |
431 | "@polkadot/x-textdecoder@6.0.5":
432 | version "6.0.5"
433 | resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.0.5.tgz#919a8991c9e81610a3c4f6bf314331071f2f8345"
434 | integrity sha512-Vd2OftcEYxg2jG37lJw5NcZotnOidinN84m1HJszLIQT9vZDnFfN60gobHsuzHaGjEDexe4wqe0PfbgA4MfWIQ==
435 | dependencies:
436 | "@babel/runtime" "^7.13.9"
437 | "@polkadot/x-global" "6.0.5"
438 |
439 | "@polkadot/x-textdecoder@6.2.1":
440 | version "6.2.1"
441 | resolved "https://registry.yarnpkg.com/@polkadot/x-textdecoder/-/x-textdecoder-6.2.1.tgz#e9f3092d7d485e491ef25d1b70d4ea841c55b215"
442 | integrity sha512-fS8CeQGWSWvUyJXleHWGfP4T8Uv4IOWfSdP8+zQE0E++wMR7ZDQqFIHPdMEoj35YKwEGGscAU1GTEz1V/H5brA==
443 | dependencies:
444 | "@babel/runtime" "^7.13.10"
445 | "@polkadot/x-global" "6.2.1"
446 |
447 | "@polkadot/x-textencoder@6.0.5":
448 | version "6.0.5"
449 | resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.0.5.tgz#fc851259de97a98f3417e51807c1f5ebe265fdf0"
450 | integrity sha512-wAheP9/kzpfBw5uU/jCnHtd9uN9XzUPYH81aPbx3X026dXNMa4xpOoroCfEuNu2RtFXm0ONuYfpHxvHUsst9lA==
451 | dependencies:
452 | "@babel/runtime" "^7.13.9"
453 | "@polkadot/x-global" "6.0.5"
454 |
455 | "@polkadot/x-textencoder@6.2.1":
456 | version "6.2.1"
457 | resolved "https://registry.yarnpkg.com/@polkadot/x-textencoder/-/x-textencoder-6.2.1.tgz#95a35f8b3d24ab742f193f663d2345fe117611ff"
458 | integrity sha512-uhmY+SGaC5zkOl2Q9YXlWi5Y2FZu3UCezOs8rjwH1N2kP/OdCML1WeSrga4l763DS0xmhLL4B89OGVcX6i4ijA==
459 | dependencies:
460 | "@babel/runtime" "^7.13.10"
461 | "@polkadot/x-global" "6.2.1"
462 |
463 | "@polkadot/x-ws@^6.2.1":
464 | version "6.2.1"
465 | resolved "https://registry.yarnpkg.com/@polkadot/x-ws/-/x-ws-6.2.1.tgz#10e4956b259999558dd77c957fc5ef20bde012b6"
466 | integrity sha512-n2dVOak1xlLEyBrTygP+Njt9WYVORQGpXeMlqTcRbgJSeYChS8WqCgLUyVzfkqeuYPeS1gG2Op7m2Rxx9Ve9Nw==
467 | dependencies:
468 | "@babel/runtime" "^7.13.10"
469 | "@polkadot/x-global" "6.2.1"
470 | "@types/websocket" "^1.0.2"
471 | websocket "^1.0.34"
472 |
473 | "@sindresorhus/slugify@^1.1.0":
474 | version "1.1.2"
475 | resolved "https://registry.yarnpkg.com/@sindresorhus/slugify/-/slugify-1.1.2.tgz#c2c0129298b8caace2d9156176fe244d0e83156c"
476 | integrity sha512-V9nR/W0Xd9TSGXpZ4iFUcFGhuOJtZX82Fzxj1YISlbSgKvIiNa7eLEZrT0vAraPOt++KHauIVNYgGRgjc13dXA==
477 | dependencies:
478 | "@sindresorhus/transliterate" "^0.1.1"
479 | escape-string-regexp "^4.0.0"
480 |
481 | "@sindresorhus/transliterate@^0.1.1":
482 | version "0.1.2"
483 | resolved "https://registry.yarnpkg.com/@sindresorhus/transliterate/-/transliterate-0.1.2.tgz#ffce368271d153550e87de81486004f2637425af"
484 | integrity sha512-5/kmIOY9FF32nicXH+5yLNTX4NJ4atl7jRgqAJuIn/iyDFXBktOKDxCvyGE/EzmF4ngSUvjXxQUQlQiZ5lfw+w==
485 | dependencies:
486 | escape-string-regexp "^2.0.0"
487 | lodash.deburr "^4.1.0"
488 |
489 | "@snowfork/snowbridge-types@^0.2.3":
490 | version "0.2.3"
491 | resolved "https://registry.yarnpkg.com/@snowfork/snowbridge-types/-/snowbridge-types-0.2.3.tgz#f562d4acb9aa75217c6183abc140daa8030723fb"
492 | integrity sha512-utxjBiUhtUY/O9dDsnABP6NwF9i4z71/Ywa7cFjohO/8xFxabjRppvE2QLwOIOuBp6OBsvNPtXAaUSUAsrOYRA==
493 |
494 | "@sora-substrate/type-definitions@^0.8.0":
495 | version "0.8.12"
496 | resolved "https://registry.yarnpkg.com/@sora-substrate/type-definitions/-/type-definitions-0.8.12.tgz#91090ed97f7b4702a5b26325a35c118b863e3bf7"
497 | integrity sha512-enCKSxUnDdWtvaM7KoqS93xJS2CK/WTiHLSlsMGpKjOk7aP48uOTfziIuzA2kNSG2DmzABOpq8nscTOd1nqrqg==
498 | dependencies:
499 | "@open-web3/orml-type-definitions" "^0.8.2-9"
500 |
501 | "@subsocial/types@^0.4.36":
502 | version "0.4.36"
503 | resolved "https://registry.yarnpkg.com/@subsocial/types/-/types-0.4.36.tgz#0abf5e422c3a90faeaf9e615ad98d7aa3da0d9a7"
504 | integrity sha512-+hqI/BCKEfW7VeIbz0R0FF7stILb+zjOsBRS5MJGh4eQGN2I4vNX9Gus134VwufPSb0Y+SrnIgQFIv1ePK3RVQ==
505 | dependencies:
506 | "@subsocial/utils" "^0.4.33"
507 | cids "^0.7.1"
508 |
509 | "@subsocial/utils@^0.4.33":
510 | version "0.4.39"
511 | resolved "https://registry.yarnpkg.com/@subsocial/utils/-/utils-0.4.39.tgz#0b069a0e55950ffef6ceb002aea1cdec96d5f133"
512 | integrity sha512-pvD5f5r0W8dGVNCmEO2LV4vWY3dvThgABMvzHmtIAXHAo7aixyz5vSc+t0x8kDRVEEAYL09URaL32bVKnAyaxw==
513 | dependencies:
514 | "@sindresorhus/slugify" "^1.1.0"
515 | bn.js "^5.1.1"
516 | chalk "^3.0.0"
517 | dotenv "^8.0.0"
518 | lodash.isempty "^4.4.0"
519 | lodash.truncate "^4.4.2"
520 | loglevel "^1.7.0"
521 | loglevel-plugin-prefix "^0.8.4"
522 | remark "^13.0.0"
523 | strip-markdown "^4.0.0"
524 |
525 | "@substrate/api-sidecar@^4.0.8":
526 | version "4.0.8"
527 | resolved "https://registry.yarnpkg.com/@substrate/api-sidecar/-/api-sidecar-4.0.8.tgz#870103068533e8338e2825bf075d88de4e3c45ab"
528 | integrity sha512-4ghrYSe11NzsOFBI7uHRV5EYApb2KNUcQilCRG0uzLpS6/QzTW1NHmS3EByzXsB0ZrSg8j87l9+IosKsKXFxOQ==
529 | dependencies:
530 | "@polkadot/api" "^4.6.2"
531 | "@polkadot/apps-config" "^0.88.1"
532 | "@polkadot/util-crypto" "^6.2.1"
533 | "@substrate/calc" "^0.2.0"
534 | confmgr "^1.0.6"
535 | express "^4.17.1"
536 | express-winston "^4.1.0"
537 | http-errors "^1.8.0"
538 | winston "^3.3.3"
539 |
540 | "@substrate/calc@^0.2.0":
541 | version "0.2.0"
542 | resolved "https://registry.yarnpkg.com/@substrate/calc/-/calc-0.2.0.tgz#f558d3059d43f52cd911e1107abf9094d295b910"
543 | integrity sha512-LymmCHIUhN3KD/70CYs0XwUldu0UHg+D1xxdFxEtCzPPeTcyhmlOm2c9EhBjImwb2OiIvpEUONkppxvHMXkNvg==
544 |
545 | "@substrate/txwrapper@^4.1.0":
546 | version "4.1.0"
547 | resolved "https://registry.yarnpkg.com/@substrate/txwrapper/-/txwrapper-4.1.0.tgz#2589052c0a6d4ab315da3c1eddc7f478c8d2bbf5"
548 | integrity sha512-mwf2MgI/1Oz4ENOifNbYe3LOfnuvdWrV+T3qx+Ze1FvAhXCeBfyvd9FArGUnO1yeuZTRos/iayYVJIhHbFPuZg==
549 | dependencies:
550 | "@polkadot/api" "4.6.2"
551 | memoizee "^0.4.14"
552 |
553 | "@types/bn.js@^4.11.6":
554 | version "4.11.6"
555 | resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c"
556 | integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==
557 | dependencies:
558 | "@types/node" "*"
559 |
560 | "@types/json-schema@^7.0.3":
561 | version "7.0.7"
562 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
563 | integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
564 |
565 | "@types/mdast@^3.0.0":
566 | version "3.0.3"
567 | resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.3.tgz#2d7d671b1cd1ea3deb306ea75036c2a0407d2deb"
568 | integrity sha512-SXPBMnFVQg1s00dlMCc/jCdvPqdE4mXaMMCeRlxLDmTAEoegHT53xKtkDnzDTOcmMHUfcjyf36/YYZ6SxRdnsw==
569 | dependencies:
570 | "@types/unist" "*"
571 |
572 | "@types/memoizee@^0.4.5":
573 | version "0.4.5"
574 | resolved "https://registry.yarnpkg.com/@types/memoizee/-/memoizee-0.4.5.tgz#cb4e7031decf698c52c4f57c348180b0385aa7da"
575 | integrity sha512-+ZzZZ3+0a7/ajBPeAAD4+LxrBsCat0EFZQtO3o0rwpIeLmDmSaM8KF/oYPuFxeUFAMiHIHFcGucFnY/8S4Hszg==
576 |
577 | "@types/node-fetch@^2.5.10", "@types/node-fetch@^2.5.8":
578 | version "2.5.10"
579 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.10.tgz#9b4d4a0425562f9fcea70b12cb3fcdd946ca8132"
580 | integrity sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==
581 | dependencies:
582 | "@types/node" "*"
583 | form-data "^3.0.0"
584 |
585 | "@types/node@*", "@types/node@^14.14.41":
586 | version "14.14.41"
587 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.41.tgz#d0b939d94c1d7bd53d04824af45f1139b8c45615"
588 | integrity sha512-dueRKfaJL4RTtSa7bWeTK1M+VH+Gns73oCgzvYfHZywRCoPSd8EkXBL0mZ9unPTveBn+D9phZBaxuzpwjWkW0g==
589 |
590 | "@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2":
591 | version "2.0.3"
592 | resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e"
593 | integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==
594 |
595 | "@types/websocket@^1.0.2":
596 | version "1.0.2"
597 | resolved "https://registry.yarnpkg.com/@types/websocket/-/websocket-1.0.2.tgz#d2855c6a312b7da73ed16ba6781815bf30c6187a"
598 | integrity sha512-B5m9aq7cbbD/5/jThEr33nUY8WEfVi6A2YKCTOvw5Ldy7mtsOkqRvGjnzy6g7iMMDsgu7xREuCzqATLDLQVKcQ==
599 | dependencies:
600 | "@types/node" "*"
601 |
602 | "@types/yaml@1.9.7":
603 | version "1.9.7"
604 | resolved "https://registry.yarnpkg.com/@types/yaml/-/yaml-1.9.7.tgz#2331f36e0aac91311a63d33eb026c21687729679"
605 | integrity sha512-8WMXRDD1D+wCohjfslHDgICd2JtMATZU8CkhH8LVJqcJs6dyYj5TGptzP8wApbmEullGBSsCEzzap73DQ1HJaA==
606 | dependencies:
607 | yaml "*"
608 |
609 | "@typescript-eslint/eslint-plugin@^4.22.0":
610 | version "4.22.0"
611 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.22.0.tgz#3d5f29bb59e61a9dba1513d491b059e536e16dbc"
612 | integrity sha512-U8SP9VOs275iDXaL08Ln1Fa/wLXfj5aTr/1c0t0j6CdbOnxh+TruXu1p4I0NAvdPBQgoPjHsgKn28mOi0FzfoA==
613 | dependencies:
614 | "@typescript-eslint/experimental-utils" "4.22.0"
615 | "@typescript-eslint/scope-manager" "4.22.0"
616 | debug "^4.1.1"
617 | functional-red-black-tree "^1.0.1"
618 | lodash "^4.17.15"
619 | regexpp "^3.0.0"
620 | semver "^7.3.2"
621 | tsutils "^3.17.1"
622 |
623 | "@typescript-eslint/experimental-utils@4.22.0":
624 | version "4.22.0"
625 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-4.22.0.tgz#68765167cca531178e7b650a53456e6e0bef3b1f"
626 | integrity sha512-xJXHHl6TuAxB5AWiVrGhvbGL8/hbiCQ8FiWwObO3r0fnvBdrbWEDy1hlvGQOAWc6qsCWuWMKdVWlLAEMpxnddg==
627 | dependencies:
628 | "@types/json-schema" "^7.0.3"
629 | "@typescript-eslint/scope-manager" "4.22.0"
630 | "@typescript-eslint/types" "4.22.0"
631 | "@typescript-eslint/typescript-estree" "4.22.0"
632 | eslint-scope "^5.0.0"
633 | eslint-utils "^2.0.0"
634 |
635 | "@typescript-eslint/parser@^4.22.0":
636 | version "4.22.0"
637 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.22.0.tgz#e1637327fcf796c641fe55f73530e90b16ac8fe8"
638 | integrity sha512-z/bGdBJJZJN76nvAY9DkJANYgK3nlRstRRi74WHm3jjgf2I8AglrSY+6l7ogxOmn55YJ6oKZCLLy+6PW70z15Q==
639 | dependencies:
640 | "@typescript-eslint/scope-manager" "4.22.0"
641 | "@typescript-eslint/types" "4.22.0"
642 | "@typescript-eslint/typescript-estree" "4.22.0"
643 | debug "^4.1.1"
644 |
645 | "@typescript-eslint/scope-manager@4.22.0":
646 | version "4.22.0"
647 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.22.0.tgz#ed411545e61161a8d702e703a4b7d96ec065b09a"
648 | integrity sha512-OcCO7LTdk6ukawUM40wo61WdeoA7NM/zaoq1/2cs13M7GyiF+T4rxuA4xM+6LeHWjWbss7hkGXjFDRcKD4O04Q==
649 | dependencies:
650 | "@typescript-eslint/types" "4.22.0"
651 | "@typescript-eslint/visitor-keys" "4.22.0"
652 |
653 | "@typescript-eslint/types@4.22.0":
654 | version "4.22.0"
655 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.22.0.tgz#0ca6fde5b68daf6dba133f30959cc0688c8dd0b6"
656 | integrity sha512-sW/BiXmmyMqDPO2kpOhSy2Py5w6KvRRsKZnV0c4+0nr4GIcedJwXAq+RHNK4lLVEZAJYFltnnk1tJSlbeS9lYA==
657 |
658 | "@typescript-eslint/typescript-estree@4.22.0":
659 | version "4.22.0"
660 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.22.0.tgz#b5d95d6d366ff3b72f5168c75775a3e46250d05c"
661 | integrity sha512-TkIFeu5JEeSs5ze/4NID+PIcVjgoU3cUQUIZnH3Sb1cEn1lBo7StSV5bwPuJQuoxKXlzAObjYTilOEKRuhR5yg==
662 | dependencies:
663 | "@typescript-eslint/types" "4.22.0"
664 | "@typescript-eslint/visitor-keys" "4.22.0"
665 | debug "^4.1.1"
666 | globby "^11.0.1"
667 | is-glob "^4.0.1"
668 | semver "^7.3.2"
669 | tsutils "^3.17.1"
670 |
671 | "@typescript-eslint/visitor-keys@4.22.0":
672 | version "4.22.0"
673 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.22.0.tgz#169dae26d3c122935da7528c839f42a8a42f6e47"
674 | integrity sha512-nnMu4F+s4o0sll6cBSsTeVsT4cwxB7zECK3dFxzEjPBii9xLpq4yqqsy/FU5zMfan6G60DKZSCXAa3sHJZrcYw==
675 | dependencies:
676 | "@typescript-eslint/types" "4.22.0"
677 | eslint-visitor-keys "^2.0.0"
678 |
679 | "@zeitgeistpm/type-defs@^0.1.36":
680 | version "0.1.45"
681 | resolved "https://registry.yarnpkg.com/@zeitgeistpm/type-defs/-/type-defs-0.1.45.tgz#75262786b14a8cbd7b3cd5b37752b35a5cc8219a"
682 | integrity sha512-nJp/1MDhUEiZibKMBUei5bX1SwbXShEwu/Od8Jp7aad+/OFz9TtETmESFc5o+pYOPFV3mJqu82vek1y7S9+FUw==
683 |
684 | accepts@~1.3.7:
685 | version "1.3.7"
686 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
687 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==
688 | dependencies:
689 | mime-types "~2.1.24"
690 | negotiator "0.6.2"
691 |
692 | acorn-jsx@^5.3.1:
693 | version "5.3.1"
694 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b"
695 | integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==
696 |
697 | acorn@^7.4.0:
698 | version "7.4.1"
699 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
700 | integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
701 |
702 | ajv@^6.10.0, ajv@^6.12.4:
703 | version "6.12.6"
704 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
705 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
706 | dependencies:
707 | fast-deep-equal "^3.1.1"
708 | fast-json-stable-stringify "^2.0.0"
709 | json-schema-traverse "^0.4.1"
710 | uri-js "^4.2.2"
711 |
712 | ajv@^8.0.1:
713 | version "8.1.0"
714 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.1.0.tgz#45d5d3d36c7cdd808930cc3e603cf6200dbeb736"
715 | integrity sha512-B/Sk2Ix7A36fs/ZkuGLIR86EdjbgR6fsAcbx9lOP/QBSXujDNbVmIS/U4Itz5k8fPFDeVZl/zQ/gJW4Jrq6XjQ==
716 | dependencies:
717 | fast-deep-equal "^3.1.1"
718 | json-schema-traverse "^1.0.0"
719 | require-from-string "^2.0.2"
720 | uri-js "^4.2.2"
721 |
722 | ansi-colors@^4.1.1:
723 | version "4.1.1"
724 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348"
725 | integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==
726 |
727 | ansi-regex@^5.0.0:
728 | version "5.0.0"
729 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
730 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
731 |
732 | ansi-styles@^3.2.1:
733 | version "3.2.1"
734 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
735 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
736 | dependencies:
737 | color-convert "^1.9.0"
738 |
739 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
740 | version "4.3.0"
741 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
742 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
743 | dependencies:
744 | color-convert "^2.0.1"
745 |
746 | argparse@^1.0.7:
747 | version "1.0.10"
748 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
749 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
750 | dependencies:
751 | sprintf-js "~1.0.2"
752 |
753 | array-flatten@1.1.1:
754 | version "1.1.1"
755 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
756 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
757 |
758 | array-union@^2.1.0:
759 | version "2.1.0"
760 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
761 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
762 |
763 | astral-regex@^2.0.0:
764 | version "2.0.0"
765 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31"
766 | integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==
767 |
768 | async@^3.1.0:
769 | version "3.2.0"
770 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
771 | integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
772 |
773 | asynckit@^0.4.0:
774 | version "0.4.0"
775 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
776 | integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
777 |
778 | axios@^0.21.1:
779 | version "0.21.1"
780 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
781 | integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
782 | dependencies:
783 | follow-redirects "^1.10.0"
784 |
785 | bail@^1.0.0:
786 | version "1.0.5"
787 | resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776"
788 | integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==
789 |
790 | balanced-match@^1.0.0:
791 | version "1.0.2"
792 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
793 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
794 |
795 | base-x@^3.0.8:
796 | version "3.0.8"
797 | resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d"
798 | integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA==
799 | dependencies:
800 | safe-buffer "^5.0.1"
801 |
802 | base64-js@^1.3.1, base64-js@^1.5.1:
803 | version "1.5.1"
804 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
805 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
806 |
807 | blakejs@^1.1.0:
808 | version "1.1.0"
809 | resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5"
810 | integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U=
811 |
812 | bn.js@^4.11.9:
813 | version "4.12.0"
814 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
815 | integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
816 |
817 | bn.js@^5.1.1, bn.js@^5.1.2:
818 | version "5.2.0"
819 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002"
820 | integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==
821 |
822 | body-parser@1.19.0:
823 | version "1.19.0"
824 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a"
825 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==
826 | dependencies:
827 | bytes "3.1.0"
828 | content-type "~1.0.4"
829 | debug "2.6.9"
830 | depd "~1.1.2"
831 | http-errors "1.7.2"
832 | iconv-lite "0.4.24"
833 | on-finished "~2.3.0"
834 | qs "6.7.0"
835 | raw-body "2.4.0"
836 | type-is "~1.6.17"
837 |
838 | brace-expansion@^1.1.7:
839 | version "1.1.11"
840 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
841 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
842 | dependencies:
843 | balanced-match "^1.0.0"
844 | concat-map "0.0.1"
845 |
846 | braces@^3.0.1:
847 | version "3.0.2"
848 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
849 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
850 | dependencies:
851 | fill-range "^7.0.1"
852 |
853 | brorand@^1.1.0:
854 | version "1.1.0"
855 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
856 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=
857 |
858 | buffer@^5.5.0, buffer@^5.6.0:
859 | version "5.7.1"
860 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
861 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
862 | dependencies:
863 | base64-js "^1.3.1"
864 | ieee754 "^1.1.13"
865 |
866 | bufferutil@^4.0.1:
867 | version "4.0.3"
868 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b"
869 | integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw==
870 | dependencies:
871 | node-gyp-build "^4.2.0"
872 |
873 | bytes@3.1.0:
874 | version "3.1.0"
875 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6"
876 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==
877 |
878 | call-bind@^1.0.0:
879 | version "1.0.2"
880 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
881 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
882 | dependencies:
883 | function-bind "^1.1.1"
884 | get-intrinsic "^1.0.2"
885 |
886 | callsites@^3.0.0:
887 | version "3.1.0"
888 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
889 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
890 |
891 | camelcase@^5.3.1:
892 | version "5.3.1"
893 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
894 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
895 |
896 | chalk@4.1.0:
897 | version "4.1.0"
898 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
899 | integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
900 | dependencies:
901 | ansi-styles "^4.1.0"
902 | supports-color "^7.1.0"
903 |
904 | chalk@^2.0.0, chalk@^2.4.2:
905 | version "2.4.2"
906 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
907 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
908 | dependencies:
909 | ansi-styles "^3.2.1"
910 | escape-string-regexp "^1.0.5"
911 | supports-color "^5.3.0"
912 |
913 | chalk@^3.0.0:
914 | version "3.0.0"
915 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
916 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
917 | dependencies:
918 | ansi-styles "^4.1.0"
919 | supports-color "^7.1.0"
920 |
921 | chalk@^4.0.0:
922 | version "4.1.1"
923 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad"
924 | integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==
925 | dependencies:
926 | ansi-styles "^4.1.0"
927 | supports-color "^7.1.0"
928 |
929 | character-entities-legacy@^1.0.0:
930 | version "1.1.4"
931 | resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1"
932 | integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==
933 |
934 | character-entities@^1.0.0:
935 | version "1.2.4"
936 | resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b"
937 | integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==
938 |
939 | character-reference-invalid@^1.0.0:
940 | version "1.1.4"
941 | resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560"
942 | integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==
943 |
944 | cids@^0.7.1:
945 | version "0.7.5"
946 | resolved "https://registry.yarnpkg.com/cids/-/cids-0.7.5.tgz#60a08138a99bfb69b6be4ceb63bfef7a396b28b2"
947 | integrity sha512-zT7mPeghoWAu+ppn8+BS1tQ5qGmbMfB4AregnQjA/qHY3GC1m1ptI9GkWNlgeu38r7CuRdXB47uY2XgAYt6QVA==
948 | dependencies:
949 | buffer "^5.5.0"
950 | class-is "^1.1.0"
951 | multibase "~0.6.0"
952 | multicodec "^1.0.0"
953 | multihashes "~0.4.15"
954 |
955 | cipher-base@^1.0.1:
956 | version "1.0.4"
957 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de"
958 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==
959 | dependencies:
960 | inherits "^2.0.1"
961 | safe-buffer "^5.0.1"
962 |
963 | class-is@^1.1.0:
964 | version "1.1.0"
965 | resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825"
966 | integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==
967 |
968 | color-convert@^1.9.0, color-convert@^1.9.1:
969 | version "1.9.3"
970 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
971 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
972 | dependencies:
973 | color-name "1.1.3"
974 |
975 | color-convert@^2.0.1:
976 | version "2.0.1"
977 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
978 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
979 | dependencies:
980 | color-name "~1.1.4"
981 |
982 | color-name@1.1.3:
983 | version "1.1.3"
984 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
985 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
986 |
987 | color-name@^1.0.0, color-name@~1.1.4:
988 | version "1.1.4"
989 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
990 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
991 |
992 | color-string@^1.5.2:
993 | version "1.5.5"
994 | resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014"
995 | integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==
996 | dependencies:
997 | color-name "^1.0.0"
998 | simple-swizzle "^0.2.2"
999 |
1000 | color@3.0.x:
1001 | version "3.0.0"
1002 | resolved "https://registry.yarnpkg.com/color/-/color-3.0.0.tgz#d920b4328d534a3ac8295d68f7bd4ba6c427be9a"
1003 | integrity sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==
1004 | dependencies:
1005 | color-convert "^1.9.1"
1006 | color-string "^1.5.2"
1007 |
1008 | colors@^1.2.1:
1009 | version "1.4.0"
1010 | resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
1011 | integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==
1012 |
1013 | colorspace@1.1.x:
1014 | version "1.1.2"
1015 | resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.2.tgz#e0128950d082b86a2168580796a0aa5d6c68d8c5"
1016 | integrity sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==
1017 | dependencies:
1018 | color "3.0.x"
1019 | text-hex "1.0.x"
1020 |
1021 | combined-stream@^1.0.8:
1022 | version "1.0.8"
1023 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
1024 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
1025 | dependencies:
1026 | delayed-stream "~1.0.0"
1027 |
1028 | concat-map@0.0.1:
1029 | version "0.0.1"
1030 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1031 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
1032 |
1033 | confmgr@^1.0.6:
1034 | version "1.0.6"
1035 | resolved "https://registry.yarnpkg.com/confmgr/-/confmgr-1.0.6.tgz#d94e58dca6e9b6054a89c28eab50a93acb2b9741"
1036 | integrity sha512-acY0rWPHJCEruIxYQUUK17iwB1SAundkBAi47N16RIxdgLuEfbJO6flJUui0l1HeX2HvVupaz7iT1yVnzSFU1A==
1037 | dependencies:
1038 | "@babel/runtime" "7.10.4"
1039 | "@types/yaml" "1.9.7"
1040 | chalk "4.1.0"
1041 | dotenv "8.2.0"
1042 | typescript "3.9.6"
1043 | yaml "1.10.0"
1044 |
1045 | content-disposition@0.5.3:
1046 | version "0.5.3"
1047 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd"
1048 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==
1049 | dependencies:
1050 | safe-buffer "5.1.2"
1051 |
1052 | content-type@~1.0.4:
1053 | version "1.0.4"
1054 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
1055 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
1056 |
1057 | cookie-signature@1.0.6:
1058 | version "1.0.6"
1059 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
1060 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
1061 |
1062 | cookie@0.4.0:
1063 | version "0.4.0"
1064 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
1065 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
1066 |
1067 | core-util-is@~1.0.0:
1068 | version "1.0.2"
1069 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
1070 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=
1071 |
1072 | create-hash@^1.2.0:
1073 | version "1.2.0"
1074 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196"
1075 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==
1076 | dependencies:
1077 | cipher-base "^1.0.1"
1078 | inherits "^2.0.1"
1079 | md5.js "^1.3.4"
1080 | ripemd160 "^2.0.1"
1081 | sha.js "^2.4.0"
1082 |
1083 | cross-spawn@^7.0.2:
1084 | version "7.0.3"
1085 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
1086 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
1087 | dependencies:
1088 | path-key "^3.1.0"
1089 | shebang-command "^2.0.0"
1090 | which "^2.0.1"
1091 |
1092 | cuint@^0.2.2:
1093 | version "0.2.2"
1094 | resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
1095 | integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
1096 |
1097 | d@1, d@^1.0.1:
1098 | version "1.0.1"
1099 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
1100 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
1101 | dependencies:
1102 | es5-ext "^0.10.50"
1103 | type "^1.0.1"
1104 |
1105 | debug@2.6.9, debug@^2.2.0:
1106 | version "2.6.9"
1107 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
1108 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
1109 | dependencies:
1110 | ms "2.0.0"
1111 |
1112 | debug@^4.0.0, debug@^4.0.1, debug@^4.1.1:
1113 | version "4.3.1"
1114 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee"
1115 | integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==
1116 | dependencies:
1117 | ms "2.1.2"
1118 |
1119 | deep-is@^0.1.3:
1120 | version "0.1.3"
1121 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
1122 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
1123 |
1124 | delayed-stream@~1.0.0:
1125 | version "1.0.0"
1126 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
1127 | integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
1128 |
1129 | depd@~1.1.2:
1130 | version "1.1.2"
1131 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9"
1132 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=
1133 |
1134 | destroy@~1.0.4:
1135 | version "1.0.4"
1136 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
1137 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=
1138 |
1139 | dir-glob@^3.0.1:
1140 | version "3.0.1"
1141 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
1142 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
1143 | dependencies:
1144 | path-type "^4.0.0"
1145 |
1146 | doctrine@^3.0.0:
1147 | version "3.0.0"
1148 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
1149 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
1150 | dependencies:
1151 | esutils "^2.0.2"
1152 |
1153 | dotenv@8.2.0, dotenv@^8.0.0:
1154 | version "8.2.0"
1155 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a"
1156 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
1157 |
1158 | ee-first@1.1.1:
1159 | version "1.1.1"
1160 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
1161 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
1162 |
1163 | elliptic@^6.5.4:
1164 | version "6.5.4"
1165 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
1166 | integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
1167 | dependencies:
1168 | bn.js "^4.11.9"
1169 | brorand "^1.1.0"
1170 | hash.js "^1.0.0"
1171 | hmac-drbg "^1.0.1"
1172 | inherits "^2.0.4"
1173 | minimalistic-assert "^1.0.1"
1174 | minimalistic-crypto-utils "^1.0.1"
1175 |
1176 | emoji-regex@^8.0.0:
1177 | version "8.0.0"
1178 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
1179 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
1180 |
1181 | enabled@2.0.x:
1182 | version "2.0.0"
1183 | resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
1184 | integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
1185 |
1186 | encodeurl@~1.0.2:
1187 | version "1.0.2"
1188 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
1189 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
1190 |
1191 | enquirer@^2.3.5:
1192 | version "2.3.6"
1193 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
1194 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==
1195 | dependencies:
1196 | ansi-colors "^4.1.1"
1197 |
1198 | es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@^0.10.53, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46:
1199 | version "0.10.53"
1200 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1"
1201 | integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==
1202 | dependencies:
1203 | es6-iterator "~2.0.3"
1204 | es6-symbol "~3.1.3"
1205 | next-tick "~1.0.0"
1206 |
1207 | es6-iterator@^2.0.3, es6-iterator@~2.0.3:
1208 | version "2.0.3"
1209 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
1210 | integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c=
1211 | dependencies:
1212 | d "1"
1213 | es5-ext "^0.10.35"
1214 | es6-symbol "^3.1.1"
1215 |
1216 | es6-symbol@^3.1.1, es6-symbol@~3.1.3:
1217 | version "3.1.3"
1218 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
1219 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
1220 | dependencies:
1221 | d "^1.0.1"
1222 | ext "^1.1.2"
1223 |
1224 | es6-weak-map@^2.0.3:
1225 | version "2.0.3"
1226 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53"
1227 | integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==
1228 | dependencies:
1229 | d "1"
1230 | es5-ext "^0.10.46"
1231 | es6-iterator "^2.0.3"
1232 | es6-symbol "^3.1.1"
1233 |
1234 | escape-html@~1.0.3:
1235 | version "1.0.3"
1236 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
1237 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
1238 |
1239 | escape-string-regexp@^1.0.5:
1240 | version "1.0.5"
1241 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1242 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
1243 |
1244 | escape-string-regexp@^2.0.0:
1245 | version "2.0.0"
1246 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
1247 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
1248 |
1249 | escape-string-regexp@^4.0.0:
1250 | version "4.0.0"
1251 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
1252 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
1253 |
1254 | eslint-config-prettier@^8.2.0:
1255 | version "8.2.0"
1256 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.2.0.tgz#78de77d63bca8e9e59dae75a614b5299925bb7b3"
1257 | integrity sha512-dWV9EVeSo2qodOPi1iBYU/x6F6diHv8uujxbxr77xExs3zTAlNXvVZKiyLsQGNz7yPV2K49JY5WjPzNIuDc2Bw==
1258 |
1259 | eslint-plugin-prettier@^3.4.0:
1260 | version "3.4.0"
1261 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7"
1262 | integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==
1263 | dependencies:
1264 | prettier-linter-helpers "^1.0.0"
1265 |
1266 | eslint-plugin-simple-import-sort@^7.0.0:
1267 | version "7.0.0"
1268 | resolved "https://registry.yarnpkg.com/eslint-plugin-simple-import-sort/-/eslint-plugin-simple-import-sort-7.0.0.tgz#a1dad262f46d2184a90095a60c66fef74727f0f8"
1269 | integrity sha512-U3vEDB5zhYPNfxT5TYR7u01dboFZp+HNpnGhkDB2g/2E4wZ/g1Q9Ton8UwCLfRV9yAKyYqDh62oHOamvkFxsvw==
1270 |
1271 | eslint-scope@^5.0.0, eslint-scope@^5.1.1:
1272 | version "5.1.1"
1273 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
1274 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
1275 | dependencies:
1276 | esrecurse "^4.3.0"
1277 | estraverse "^4.1.1"
1278 |
1279 | eslint-utils@^2.0.0, eslint-utils@^2.1.0:
1280 | version "2.1.0"
1281 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27"
1282 | integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==
1283 | dependencies:
1284 | eslint-visitor-keys "^1.1.0"
1285 |
1286 | eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0:
1287 | version "1.3.0"
1288 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
1289 | integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
1290 |
1291 | eslint-visitor-keys@^2.0.0:
1292 | version "2.0.0"
1293 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8"
1294 | integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ==
1295 |
1296 | eslint@^7.24.0:
1297 | version "7.24.0"
1298 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.24.0.tgz#2e44fa62d93892bfdb100521f17345ba54b8513a"
1299 | integrity sha512-k9gaHeHiFmGCDQ2rEfvULlSLruz6tgfA8DEn+rY9/oYPFFTlz55mM/Q/Rij1b2Y42jwZiK3lXvNTw6w6TXzcKQ==
1300 | dependencies:
1301 | "@babel/code-frame" "7.12.11"
1302 | "@eslint/eslintrc" "^0.4.0"
1303 | ajv "^6.10.0"
1304 | chalk "^4.0.0"
1305 | cross-spawn "^7.0.2"
1306 | debug "^4.0.1"
1307 | doctrine "^3.0.0"
1308 | enquirer "^2.3.5"
1309 | eslint-scope "^5.1.1"
1310 | eslint-utils "^2.1.0"
1311 | eslint-visitor-keys "^2.0.0"
1312 | espree "^7.3.1"
1313 | esquery "^1.4.0"
1314 | esutils "^2.0.2"
1315 | file-entry-cache "^6.0.1"
1316 | functional-red-black-tree "^1.0.1"
1317 | glob-parent "^5.0.0"
1318 | globals "^13.6.0"
1319 | ignore "^4.0.6"
1320 | import-fresh "^3.0.0"
1321 | imurmurhash "^0.1.4"
1322 | is-glob "^4.0.0"
1323 | js-yaml "^3.13.1"
1324 | json-stable-stringify-without-jsonify "^1.0.1"
1325 | levn "^0.4.1"
1326 | lodash "^4.17.21"
1327 | minimatch "^3.0.4"
1328 | natural-compare "^1.4.0"
1329 | optionator "^0.9.1"
1330 | progress "^2.0.0"
1331 | regexpp "^3.1.0"
1332 | semver "^7.2.1"
1333 | strip-ansi "^6.0.0"
1334 | strip-json-comments "^3.1.0"
1335 | table "^6.0.4"
1336 | text-table "^0.2.0"
1337 | v8-compile-cache "^2.0.3"
1338 |
1339 | espree@^7.3.0, espree@^7.3.1:
1340 | version "7.3.1"
1341 | resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6"
1342 | integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==
1343 | dependencies:
1344 | acorn "^7.4.0"
1345 | acorn-jsx "^5.3.1"
1346 | eslint-visitor-keys "^1.3.0"
1347 |
1348 | esprima@^4.0.0:
1349 | version "4.0.1"
1350 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
1351 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
1352 |
1353 | esquery@^1.4.0:
1354 | version "1.4.0"
1355 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
1356 | integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
1357 | dependencies:
1358 | estraverse "^5.1.0"
1359 |
1360 | esrecurse@^4.3.0:
1361 | version "4.3.0"
1362 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
1363 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
1364 | dependencies:
1365 | estraverse "^5.2.0"
1366 |
1367 | estraverse@^4.1.1:
1368 | version "4.3.0"
1369 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
1370 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
1371 |
1372 | estraverse@^5.1.0, estraverse@^5.2.0:
1373 | version "5.2.0"
1374 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880"
1375 | integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==
1376 |
1377 | esutils@^2.0.2:
1378 | version "2.0.3"
1379 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
1380 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
1381 |
1382 | etag@~1.8.1:
1383 | version "1.8.1"
1384 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
1385 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
1386 |
1387 | event-emitter@^0.3.5:
1388 | version "0.3.5"
1389 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
1390 | integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=
1391 | dependencies:
1392 | d "1"
1393 | es5-ext "~0.10.14"
1394 |
1395 | eventemitter3@^4.0.7:
1396 | version "4.0.7"
1397 | resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
1398 | integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
1399 |
1400 | express-winston@^4.1.0:
1401 | version "4.1.0"
1402 | resolved "https://registry.yarnpkg.com/express-winston/-/express-winston-4.1.0.tgz#3fd3ecea55d50ff6aee49a66e1aaa3cba8b67c93"
1403 | integrity sha512-0DaIjvNADBzC/K4Qw3UwEQc8HRjbajTaP/M43rw0LJpZcQ7SQTPfxkLsnx3ABHEO7EFNQXTpqL0BZPiwkGV8hg==
1404 | dependencies:
1405 | chalk "^2.4.2"
1406 | lodash "^4.17.20"
1407 |
1408 | express@^4.17.1:
1409 | version "4.17.1"
1410 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134"
1411 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==
1412 | dependencies:
1413 | accepts "~1.3.7"
1414 | array-flatten "1.1.1"
1415 | body-parser "1.19.0"
1416 | content-disposition "0.5.3"
1417 | content-type "~1.0.4"
1418 | cookie "0.4.0"
1419 | cookie-signature "1.0.6"
1420 | debug "2.6.9"
1421 | depd "~1.1.2"
1422 | encodeurl "~1.0.2"
1423 | escape-html "~1.0.3"
1424 | etag "~1.8.1"
1425 | finalhandler "~1.1.2"
1426 | fresh "0.5.2"
1427 | merge-descriptors "1.0.1"
1428 | methods "~1.1.2"
1429 | on-finished "~2.3.0"
1430 | parseurl "~1.3.3"
1431 | path-to-regexp "0.1.7"
1432 | proxy-addr "~2.0.5"
1433 | qs "6.7.0"
1434 | range-parser "~1.2.1"
1435 | safe-buffer "5.1.2"
1436 | send "0.17.1"
1437 | serve-static "1.14.1"
1438 | setprototypeof "1.1.1"
1439 | statuses "~1.5.0"
1440 | type-is "~1.6.18"
1441 | utils-merge "1.0.1"
1442 | vary "~1.1.2"
1443 |
1444 | ext@^1.1.2:
1445 | version "1.4.0"
1446 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244"
1447 | integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==
1448 | dependencies:
1449 | type "^2.0.0"
1450 |
1451 | extend@^3.0.0:
1452 | version "3.0.2"
1453 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
1454 | integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
1455 |
1456 | fast-deep-equal@^3.1.1:
1457 | version "3.1.3"
1458 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1459 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1460 |
1461 | fast-diff@^1.1.2:
1462 | version "1.2.0"
1463 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03"
1464 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==
1465 |
1466 | fast-glob@^3.1.1:
1467 | version "3.2.5"
1468 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661"
1469 | integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==
1470 | dependencies:
1471 | "@nodelib/fs.stat" "^2.0.2"
1472 | "@nodelib/fs.walk" "^1.2.3"
1473 | glob-parent "^5.1.0"
1474 | merge2 "^1.3.0"
1475 | micromatch "^4.0.2"
1476 | picomatch "^2.2.1"
1477 |
1478 | fast-json-stable-stringify@^2.0.0:
1479 | version "2.1.0"
1480 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
1481 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
1482 |
1483 | fast-levenshtein@^2.0.6:
1484 | version "2.0.6"
1485 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
1486 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
1487 |
1488 | fast-safe-stringify@^2.0.4:
1489 | version "2.0.7"
1490 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743"
1491 | integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==
1492 |
1493 | fastq@^1.6.0:
1494 | version "1.11.0"
1495 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858"
1496 | integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==
1497 | dependencies:
1498 | reusify "^1.0.4"
1499 |
1500 | fecha@^4.2.0:
1501 | version "4.2.1"
1502 | resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.1.tgz#0a83ad8f86ef62a091e22bb5a039cd03d23eecce"
1503 | integrity sha512-MMMQ0ludy/nBs1/o0zVOiKTpG7qMbonKUzjJgQFEuvq6INZ1OraKPRAWkBq5vlKLOUMpmNYG1JoN3oDPUQ9m3Q==
1504 |
1505 | file-entry-cache@^6.0.1:
1506 | version "6.0.1"
1507 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
1508 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
1509 | dependencies:
1510 | flat-cache "^3.0.4"
1511 |
1512 | fill-range@^7.0.1:
1513 | version "7.0.1"
1514 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1515 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1516 | dependencies:
1517 | to-regex-range "^5.0.1"
1518 |
1519 | finalhandler@~1.1.2:
1520 | version "1.1.2"
1521 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d"
1522 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==
1523 | dependencies:
1524 | debug "2.6.9"
1525 | encodeurl "~1.0.2"
1526 | escape-html "~1.0.3"
1527 | on-finished "~2.3.0"
1528 | parseurl "~1.3.3"
1529 | statuses "~1.5.0"
1530 | unpipe "~1.0.0"
1531 |
1532 | flat-cache@^3.0.4:
1533 | version "3.0.4"
1534 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
1535 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
1536 | dependencies:
1537 | flatted "^3.1.0"
1538 | rimraf "^3.0.2"
1539 |
1540 | flatted@^3.1.0:
1541 | version "3.1.1"
1542 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
1543 | integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
1544 |
1545 | fn.name@1.x.x:
1546 | version "1.1.0"
1547 | resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
1548 | integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
1549 |
1550 | follow-redirects@^1.10.0:
1551 | version "1.13.3"
1552 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267"
1553 | integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==
1554 |
1555 | form-data@^3.0.0:
1556 | version "3.0.1"
1557 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
1558 | integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==
1559 | dependencies:
1560 | asynckit "^0.4.0"
1561 | combined-stream "^1.0.8"
1562 | mime-types "^2.1.12"
1563 |
1564 | forwarded@~0.1.2:
1565 | version "0.1.2"
1566 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
1567 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
1568 |
1569 | fresh@0.5.2:
1570 | version "0.5.2"
1571 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
1572 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
1573 |
1574 | fs.realpath@^1.0.0:
1575 | version "1.0.0"
1576 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1577 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
1578 |
1579 | function-bind@^1.1.1:
1580 | version "1.1.1"
1581 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1582 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1583 |
1584 | functional-red-black-tree@^1.0.1:
1585 | version "1.0.1"
1586 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
1587 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
1588 |
1589 | get-intrinsic@^1.0.2:
1590 | version "1.1.1"
1591 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6"
1592 | integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==
1593 | dependencies:
1594 | function-bind "^1.1.1"
1595 | has "^1.0.3"
1596 | has-symbols "^1.0.1"
1597 |
1598 | glob-parent@^5.0.0, glob-parent@^5.1.0:
1599 | version "5.1.2"
1600 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1601 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1602 | dependencies:
1603 | is-glob "^4.0.1"
1604 |
1605 | glob@^7.1.3:
1606 | version "7.1.6"
1607 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6"
1608 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
1609 | dependencies:
1610 | fs.realpath "^1.0.0"
1611 | inflight "^1.0.4"
1612 | inherits "2"
1613 | minimatch "^3.0.4"
1614 | once "^1.3.0"
1615 | path-is-absolute "^1.0.0"
1616 |
1617 | globals@^12.1.0:
1618 | version "12.4.0"
1619 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8"
1620 | integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==
1621 | dependencies:
1622 | type-fest "^0.8.1"
1623 |
1624 | globals@^13.6.0:
1625 | version "13.8.0"
1626 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.8.0.tgz#3e20f504810ce87a8d72e55aecf8435b50f4c1b3"
1627 | integrity sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==
1628 | dependencies:
1629 | type-fest "^0.20.2"
1630 |
1631 | globby@^11.0.1:
1632 | version "11.0.3"
1633 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.3.tgz#9b1f0cb523e171dd1ad8c7b2a9fb4b644b9593cb"
1634 | integrity sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==
1635 | dependencies:
1636 | array-union "^2.1.0"
1637 | dir-glob "^3.0.1"
1638 | fast-glob "^3.1.1"
1639 | ignore "^5.1.4"
1640 | merge2 "^1.3.0"
1641 | slash "^3.0.0"
1642 |
1643 | has-flag@^3.0.0:
1644 | version "3.0.0"
1645 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1646 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
1647 |
1648 | has-flag@^4.0.0:
1649 | version "4.0.0"
1650 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1651 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1652 |
1653 | has-symbols@^1.0.1:
1654 | version "1.0.2"
1655 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423"
1656 | integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==
1657 |
1658 | has@^1.0.3:
1659 | version "1.0.3"
1660 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1661 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1662 | dependencies:
1663 | function-bind "^1.1.1"
1664 |
1665 | hash-base@^3.0.0:
1666 | version "3.1.0"
1667 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33"
1668 | integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==
1669 | dependencies:
1670 | inherits "^2.0.4"
1671 | readable-stream "^3.6.0"
1672 | safe-buffer "^5.2.0"
1673 |
1674 | hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7:
1675 | version "1.1.7"
1676 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
1677 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
1678 | dependencies:
1679 | inherits "^2.0.3"
1680 | minimalistic-assert "^1.0.1"
1681 |
1682 | hmac-drbg@^1.0.1:
1683 | version "1.0.1"
1684 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
1685 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=
1686 | dependencies:
1687 | hash.js "^1.0.3"
1688 | minimalistic-assert "^1.0.0"
1689 | minimalistic-crypto-utils "^1.0.1"
1690 |
1691 | http-errors@1.7.2:
1692 | version "1.7.2"
1693 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f"
1694 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==
1695 | dependencies:
1696 | depd "~1.1.2"
1697 | inherits "2.0.3"
1698 | setprototypeof "1.1.1"
1699 | statuses ">= 1.5.0 < 2"
1700 | toidentifier "1.0.0"
1701 |
1702 | http-errors@^1.8.0:
1703 | version "1.8.0"
1704 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507"
1705 | integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A==
1706 | dependencies:
1707 | depd "~1.1.2"
1708 | inherits "2.0.4"
1709 | setprototypeof "1.2.0"
1710 | statuses ">= 1.5.0 < 2"
1711 | toidentifier "1.0.0"
1712 |
1713 | http-errors@~1.7.2:
1714 | version "1.7.3"
1715 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06"
1716 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==
1717 | dependencies:
1718 | depd "~1.1.2"
1719 | inherits "2.0.4"
1720 | setprototypeof "1.1.1"
1721 | statuses ">= 1.5.0 < 2"
1722 | toidentifier "1.0.0"
1723 |
1724 | iconv-lite@0.4.24:
1725 | version "0.4.24"
1726 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1727 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1728 | dependencies:
1729 | safer-buffer ">= 2.1.2 < 3"
1730 |
1731 | ieee754@^1.1.13:
1732 | version "1.2.1"
1733 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
1734 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
1735 |
1736 | ignore@^4.0.6:
1737 | version "4.0.6"
1738 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
1739 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
1740 |
1741 | ignore@^5.1.4:
1742 | version "5.1.8"
1743 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
1744 | integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
1745 |
1746 | import-fresh@^3.0.0, import-fresh@^3.2.1:
1747 | version "3.3.0"
1748 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1749 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1750 | dependencies:
1751 | parent-module "^1.0.0"
1752 | resolve-from "^4.0.0"
1753 |
1754 | imurmurhash@^0.1.4:
1755 | version "0.1.4"
1756 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
1757 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o=
1758 |
1759 | inflight@^1.0.4:
1760 | version "1.0.6"
1761 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1762 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
1763 | dependencies:
1764 | once "^1.3.0"
1765 | wrappy "1"
1766 |
1767 | inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3:
1768 | version "2.0.4"
1769 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1770 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1771 |
1772 | inherits@2.0.3:
1773 | version "2.0.3"
1774 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
1775 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=
1776 |
1777 | ip-regex@^4.3.0:
1778 | version "4.3.0"
1779 | resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-4.3.0.tgz#687275ab0f57fa76978ff8f4dddc8a23d5990db5"
1780 | integrity sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==
1781 |
1782 | ipaddr.js@1.9.1:
1783 | version "1.9.1"
1784 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
1785 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
1786 |
1787 | is-alphabetical@^1.0.0:
1788 | version "1.0.4"
1789 | resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d"
1790 | integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==
1791 |
1792 | is-alphanumerical@^1.0.0:
1793 | version "1.0.4"
1794 | resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf"
1795 | integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==
1796 | dependencies:
1797 | is-alphabetical "^1.0.0"
1798 | is-decimal "^1.0.0"
1799 |
1800 | is-arrayish@^0.3.1:
1801 | version "0.3.2"
1802 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03"
1803 | integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==
1804 |
1805 | is-boolean-object@^1.1.0:
1806 | version "1.1.0"
1807 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0"
1808 | integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA==
1809 | dependencies:
1810 | call-bind "^1.0.0"
1811 |
1812 | is-buffer@^2.0.0:
1813 | version "2.0.5"
1814 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191"
1815 | integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==
1816 |
1817 | is-decimal@^1.0.0:
1818 | version "1.0.4"
1819 | resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5"
1820 | integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==
1821 |
1822 | is-extglob@^2.1.1:
1823 | version "2.1.1"
1824 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1825 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=
1826 |
1827 | is-fullwidth-code-point@^3.0.0:
1828 | version "3.0.0"
1829 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1830 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1831 |
1832 | is-glob@^4.0.0, is-glob@^4.0.1:
1833 | version "4.0.1"
1834 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc"
1835 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==
1836 | dependencies:
1837 | is-extglob "^2.1.1"
1838 |
1839 | is-hexadecimal@^1.0.0:
1840 | version "1.0.4"
1841 | resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7"
1842 | integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==
1843 |
1844 | is-number-object@^1.0.4:
1845 | version "1.0.4"
1846 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197"
1847 | integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw==
1848 |
1849 | is-number@^7.0.0:
1850 | version "7.0.0"
1851 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1852 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1853 |
1854 | is-plain-obj@^2.0.0:
1855 | version "2.1.0"
1856 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287"
1857 | integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==
1858 |
1859 | is-promise@^2.2.2:
1860 | version "2.2.2"
1861 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1"
1862 | integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==
1863 |
1864 | is-stream@^2.0.0:
1865 | version "2.0.0"
1866 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3"
1867 | integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==
1868 |
1869 | is-string@^1.0.5:
1870 | version "1.0.5"
1871 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6"
1872 | integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==
1873 |
1874 | is-typedarray@^1.0.0:
1875 | version "1.0.0"
1876 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
1877 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
1878 |
1879 | isarray@~1.0.0:
1880 | version "1.0.0"
1881 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
1882 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=
1883 |
1884 | isexe@^2.0.0:
1885 | version "2.0.0"
1886 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1887 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1888 |
1889 | js-sha3@^0.8.0:
1890 | version "0.8.0"
1891 | resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
1892 | integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
1893 |
1894 | js-tokens@^4.0.0:
1895 | version "4.0.0"
1896 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1897 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1898 |
1899 | js-yaml@^3.13.1:
1900 | version "3.14.1"
1901 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
1902 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
1903 | dependencies:
1904 | argparse "^1.0.7"
1905 | esprima "^4.0.0"
1906 |
1907 | json-schema-traverse@^0.4.1:
1908 | version "0.4.1"
1909 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
1910 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
1911 |
1912 | json-schema-traverse@^1.0.0:
1913 | version "1.0.0"
1914 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1915 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1916 |
1917 | json-stable-stringify-without-jsonify@^1.0.1:
1918 | version "1.0.1"
1919 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
1920 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
1921 |
1922 | kuler@^2.0.0:
1923 | version "2.0.0"
1924 | resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
1925 | integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
1926 |
1927 | levn@^0.4.1:
1928 | version "0.4.1"
1929 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
1930 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
1931 | dependencies:
1932 | prelude-ls "^1.2.1"
1933 | type-check "~0.4.0"
1934 |
1935 | lodash.clonedeep@^4.5.0:
1936 | version "4.5.0"
1937 | resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
1938 | integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
1939 |
1940 | lodash.deburr@^4.1.0:
1941 | version "4.1.0"
1942 | resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b"
1943 | integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=
1944 |
1945 | lodash.flatten@^4.4.0:
1946 | version "4.4.0"
1947 | resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f"
1948 | integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=
1949 |
1950 | lodash.isempty@^4.4.0:
1951 | version "4.4.0"
1952 | resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
1953 | integrity sha1-b4bL7di+TsmHvpqvM8loTbGzHn4=
1954 |
1955 | lodash.truncate@^4.4.2:
1956 | version "4.4.2"
1957 | resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193"
1958 | integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=
1959 |
1960 | lodash@^4.17.15, lodash@^4.17.20, lodash@^4.17.21:
1961 | version "4.17.21"
1962 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1963 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1964 |
1965 | logform@^2.2.0:
1966 | version "2.2.0"
1967 | resolved "https://registry.yarnpkg.com/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2"
1968 | integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==
1969 | dependencies:
1970 | colors "^1.2.1"
1971 | fast-safe-stringify "^2.0.4"
1972 | fecha "^4.2.0"
1973 | ms "^2.1.1"
1974 | triple-beam "^1.3.0"
1975 |
1976 | loglevel-plugin-prefix@^0.8.4:
1977 | version "0.8.4"
1978 | resolved "https://registry.yarnpkg.com/loglevel-plugin-prefix/-/loglevel-plugin-prefix-0.8.4.tgz#2fe0e05f1a820317d98d8c123e634c1bd84ff644"
1979 | integrity sha512-WpG9CcFAOjz/FtNht+QJeGpvVl/cdR6P0z6OcXSkr8wFJOsV2GRj2j10JLfjuA4aYkcKCNIEqRGCyTife9R8/g==
1980 |
1981 | loglevel@^1.7.0:
1982 | version "1.7.1"
1983 | resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.1.tgz#005fde2f5e6e47068f935ff28573e125ef72f197"
1984 | integrity sha512-Hesni4s5UkWkwCGJMQGAh71PaLUmKFM60dHvq0zi/vDhhrzuk+4GgNbTXJ12YYQJn6ZKBDNIjYcuQGKudvqrIw==
1985 |
1986 | longest-streak@^2.0.0:
1987 | version "2.0.4"
1988 | resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4"
1989 | integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==
1990 |
1991 | lru-cache@^6.0.0:
1992 | version "6.0.0"
1993 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1994 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1995 | dependencies:
1996 | yallist "^4.0.0"
1997 |
1998 | lru-queue@^0.1.0:
1999 | version "0.1.0"
2000 | resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3"
2001 | integrity sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=
2002 | dependencies:
2003 | es5-ext "~0.10.2"
2004 |
2005 | md5.js@^1.3.4:
2006 | version "1.3.5"
2007 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f"
2008 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==
2009 | dependencies:
2010 | hash-base "^3.0.0"
2011 | inherits "^2.0.1"
2012 | safe-buffer "^5.1.2"
2013 |
2014 | mdast-util-from-markdown@^0.8.0:
2015 | version "0.8.5"
2016 | resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz#d1ef2ca42bc377ecb0463a987910dae89bd9a28c"
2017 | integrity sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==
2018 | dependencies:
2019 | "@types/mdast" "^3.0.0"
2020 | mdast-util-to-string "^2.0.0"
2021 | micromark "~2.11.0"
2022 | parse-entities "^2.0.0"
2023 | unist-util-stringify-position "^2.0.0"
2024 |
2025 | mdast-util-to-markdown@^0.6.0:
2026 | version "0.6.5"
2027 | resolved "https://registry.yarnpkg.com/mdast-util-to-markdown/-/mdast-util-to-markdown-0.6.5.tgz#b33f67ca820d69e6cc527a93d4039249b504bebe"
2028 | integrity sha512-XeV9sDE7ZlOQvs45C9UKMtfTcctcaj/pGwH8YLbMHoMOXNNCn2LsqVQOqrF1+/NU8lKDAqozme9SCXWyo9oAcQ==
2029 | dependencies:
2030 | "@types/unist" "^2.0.0"
2031 | longest-streak "^2.0.0"
2032 | mdast-util-to-string "^2.0.0"
2033 | parse-entities "^2.0.0"
2034 | repeat-string "^1.0.0"
2035 | zwitch "^1.0.0"
2036 |
2037 | mdast-util-to-string@^2.0.0:
2038 | version "2.0.0"
2039 | resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b"
2040 | integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==
2041 |
2042 | media-typer@0.3.0:
2043 | version "0.3.0"
2044 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
2045 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
2046 |
2047 | memoizee@^0.4.14:
2048 | version "0.4.15"
2049 | resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.15.tgz#e6f3d2da863f318d02225391829a6c5956555b72"
2050 | integrity sha512-UBWmJpLZd5STPm7PMUlOw/TSy972M+z8gcyQ5veOnSDRREz/0bmpyTfKt3/51DhEBqCZQn1udM/5flcSPYhkdQ==
2051 | dependencies:
2052 | d "^1.0.1"
2053 | es5-ext "^0.10.53"
2054 | es6-weak-map "^2.0.3"
2055 | event-emitter "^0.3.5"
2056 | is-promise "^2.2.2"
2057 | lru-queue "^0.1.0"
2058 | next-tick "^1.1.0"
2059 | timers-ext "^0.1.7"
2060 |
2061 | merge-descriptors@1.0.1:
2062 | version "1.0.1"
2063 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
2064 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
2065 |
2066 | merge2@^1.3.0:
2067 | version "1.4.1"
2068 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
2069 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
2070 |
2071 | methods@~1.1.2:
2072 | version "1.1.2"
2073 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
2074 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
2075 |
2076 | micromark@~2.11.0:
2077 | version "2.11.4"
2078 | resolved "https://registry.yarnpkg.com/micromark/-/micromark-2.11.4.tgz#d13436138eea826383e822449c9a5c50ee44665a"
2079 | integrity sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==
2080 | dependencies:
2081 | debug "^4.0.0"
2082 | parse-entities "^2.0.0"
2083 |
2084 | micromatch@^4.0.2:
2085 | version "4.0.4"
2086 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
2087 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==
2088 | dependencies:
2089 | braces "^3.0.1"
2090 | picomatch "^2.2.3"
2091 |
2092 | mime-db@1.47.0:
2093 | version "1.47.0"
2094 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
2095 | integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
2096 |
2097 | mime-types@^2.1.12, mime-types@~2.1.24:
2098 | version "2.1.30"
2099 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
2100 | integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
2101 | dependencies:
2102 | mime-db "1.47.0"
2103 |
2104 | mime@1.6.0:
2105 | version "1.6.0"
2106 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
2107 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
2108 |
2109 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
2110 | version "1.0.1"
2111 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
2112 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
2113 |
2114 | minimalistic-crypto-utils@^1.0.1:
2115 | version "1.0.1"
2116 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
2117 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=
2118 |
2119 | minimatch@^3.0.4:
2120 | version "3.0.4"
2121 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
2122 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
2123 | dependencies:
2124 | brace-expansion "^1.1.7"
2125 |
2126 | moonbeam-types-bundle@1.1.12:
2127 | version "1.1.12"
2128 | resolved "https://registry.yarnpkg.com/moonbeam-types-bundle/-/moonbeam-types-bundle-1.1.12.tgz#1385cc5faf975ffba17167d04ffd68dc8579e238"
2129 | integrity sha512-Ns03F3gYWTJeSVFXtfWbVVBu/k2L+oPsM6V9yHzIV4111nSRJAT8h0aa6oexIhnKG9FIBwFfcQhPPNKBmD5VkA==
2130 | dependencies:
2131 | "@polkadot/types" "^4.2.1"
2132 | typescript "^4.1.3"
2133 |
2134 | ms@2.0.0:
2135 | version "2.0.0"
2136 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
2137 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
2138 |
2139 | ms@2.1.1:
2140 | version "2.1.1"
2141 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
2142 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
2143 |
2144 | ms@2.1.2:
2145 | version "2.1.2"
2146 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
2147 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
2148 |
2149 | ms@^2.1.1:
2150 | version "2.1.3"
2151 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
2152 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
2153 |
2154 | multibase@^0.7.0:
2155 | version "0.7.0"
2156 | resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.7.0.tgz#1adfc1c50abe05eefeb5091ac0c2728d6b84581b"
2157 | integrity sha512-TW8q03O0f6PNFTQDvh3xxH03c8CjGaaYrjkl9UQPG6rz53TQzzxJVCIWVjzcbN/Q5Y53Zd0IBQBMVktVgNx4Fg==
2158 | dependencies:
2159 | base-x "^3.0.8"
2160 | buffer "^5.5.0"
2161 |
2162 | multibase@~0.6.0:
2163 | version "0.6.1"
2164 | resolved "https://registry.yarnpkg.com/multibase/-/multibase-0.6.1.tgz#b76df6298536cc17b9f6a6db53ec88f85f8cc12b"
2165 | integrity sha512-pFfAwyTjbbQgNc3G7D48JkJxWtoJoBMaR4xQUOuB8RnCgRqaYmWNFeJTTvrJ2w51bjLq2zTby6Rqj9TQ9elSUw==
2166 | dependencies:
2167 | base-x "^3.0.8"
2168 | buffer "^5.5.0"
2169 |
2170 | multicodec@^1.0.0:
2171 | version "1.0.4"
2172 | resolved "https://registry.yarnpkg.com/multicodec/-/multicodec-1.0.4.tgz#46ac064657c40380c28367c90304d8ed175a714f"
2173 | integrity sha512-NDd7FeS3QamVtbgfvu5h7fd1IlbaC4EQ0/pgU4zqE2vdHCmBGsUa0TiM8/TdSeG6BMPC92OOCf8F1ocE/Wkrrg==
2174 | dependencies:
2175 | buffer "^5.6.0"
2176 | varint "^5.0.0"
2177 |
2178 | multihashes@~0.4.15:
2179 | version "0.4.21"
2180 | resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"
2181 | integrity sha512-uVSvmeCWf36pU2nB4/1kzYZjsXD9vofZKpgudqkceYY5g2aZZXJ5r9lxuzoRLl1OAp28XljXsEJ/X/85ZsKmKw==
2182 | dependencies:
2183 | buffer "^5.5.0"
2184 | multibase "^0.7.0"
2185 | varint "^5.0.0"
2186 |
2187 | natural-compare@^1.4.0:
2188 | version "1.4.0"
2189 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
2190 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
2191 |
2192 | negotiator@0.6.2:
2193 | version "0.6.2"
2194 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
2195 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==
2196 |
2197 | next-tick@1, next-tick@^1.1.0:
2198 | version "1.1.0"
2199 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
2200 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
2201 |
2202 | next-tick@~1.0.0:
2203 | version "1.0.0"
2204 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
2205 | integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
2206 |
2207 | node-fetch@^2.6.1:
2208 | version "2.6.1"
2209 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052"
2210 | integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==
2211 |
2212 | node-gyp-build@^4.2.0:
2213 | version "4.2.3"
2214 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739"
2215 | integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg==
2216 |
2217 | on-finished@~2.3.0:
2218 | version "2.3.0"
2219 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
2220 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=
2221 | dependencies:
2222 | ee-first "1.1.1"
2223 |
2224 | once@^1.3.0:
2225 | version "1.4.0"
2226 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
2227 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
2228 | dependencies:
2229 | wrappy "1"
2230 |
2231 | one-time@^1.0.0:
2232 | version "1.0.0"
2233 | resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45"
2234 | integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==
2235 | dependencies:
2236 | fn.name "1.x.x"
2237 |
2238 | optionator@^0.9.1:
2239 | version "0.9.1"
2240 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
2241 | integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
2242 | dependencies:
2243 | deep-is "^0.1.3"
2244 | fast-levenshtein "^2.0.6"
2245 | levn "^0.4.1"
2246 | prelude-ls "^1.2.1"
2247 | type-check "^0.4.0"
2248 | word-wrap "^1.2.3"
2249 |
2250 | parent-module@^1.0.0:
2251 | version "1.0.1"
2252 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
2253 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
2254 | dependencies:
2255 | callsites "^3.0.0"
2256 |
2257 | parse-entities@^2.0.0:
2258 | version "2.0.0"
2259 | resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8"
2260 | integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==
2261 | dependencies:
2262 | character-entities "^1.0.0"
2263 | character-entities-legacy "^1.0.0"
2264 | character-reference-invalid "^1.0.0"
2265 | is-alphanumerical "^1.0.0"
2266 | is-decimal "^1.0.0"
2267 | is-hexadecimal "^1.0.0"
2268 |
2269 | parseurl@~1.3.3:
2270 | version "1.3.3"
2271 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
2272 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
2273 |
2274 | path-is-absolute@^1.0.0:
2275 | version "1.0.1"
2276 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
2277 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
2278 |
2279 | path-key@^3.1.0:
2280 | version "3.1.1"
2281 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
2282 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
2283 |
2284 | path-to-regexp@0.1.7:
2285 | version "0.1.7"
2286 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
2287 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
2288 |
2289 | path-type@^4.0.0:
2290 | version "4.0.0"
2291 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
2292 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
2293 |
2294 | picomatch@^2.2.1, picomatch@^2.2.3:
2295 | version "2.2.3"
2296 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.3.tgz#465547f359ccc206d3c48e46a1bcb89bf7ee619d"
2297 | integrity sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==
2298 |
2299 | prelude-ls@^1.2.1:
2300 | version "1.2.1"
2301 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
2302 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
2303 |
2304 | prettier-linter-helpers@^1.0.0:
2305 | version "1.0.0"
2306 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b"
2307 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==
2308 | dependencies:
2309 | fast-diff "^1.1.2"
2310 |
2311 | prettier@^2.2.1:
2312 | version "2.2.1"
2313 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
2314 | integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
2315 |
2316 | process-nextick-args@~2.0.0:
2317 | version "2.0.1"
2318 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
2319 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
2320 |
2321 | progress@^2.0.0:
2322 | version "2.0.3"
2323 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
2324 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
2325 |
2326 | proxy-addr@~2.0.5:
2327 | version "2.0.6"
2328 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
2329 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==
2330 | dependencies:
2331 | forwarded "~0.1.2"
2332 | ipaddr.js "1.9.1"
2333 |
2334 | punycode@^2.1.0:
2335 | version "2.1.1"
2336 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
2337 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
2338 |
2339 | qs@6.7.0:
2340 | version "6.7.0"
2341 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc"
2342 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==
2343 |
2344 | queue-microtask@^1.2.2:
2345 | version "1.2.3"
2346 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
2347 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
2348 |
2349 | range-parser@~1.2.1:
2350 | version "1.2.1"
2351 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
2352 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
2353 |
2354 | raw-body@2.4.0:
2355 | version "2.4.0"
2356 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332"
2357 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==
2358 | dependencies:
2359 | bytes "3.1.0"
2360 | http-errors "1.7.2"
2361 | iconv-lite "0.4.24"
2362 | unpipe "1.0.0"
2363 |
2364 | readable-stream@^2.3.7:
2365 | version "2.3.7"
2366 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
2367 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
2368 | dependencies:
2369 | core-util-is "~1.0.0"
2370 | inherits "~2.0.3"
2371 | isarray "~1.0.0"
2372 | process-nextick-args "~2.0.0"
2373 | safe-buffer "~5.1.1"
2374 | string_decoder "~1.1.1"
2375 | util-deprecate "~1.0.1"
2376 |
2377 | readable-stream@^3.4.0, readable-stream@^3.6.0:
2378 | version "3.6.0"
2379 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
2380 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
2381 | dependencies:
2382 | inherits "^2.0.3"
2383 | string_decoder "^1.1.1"
2384 | util-deprecate "^1.0.1"
2385 |
2386 | regenerator-runtime@^0.13.4:
2387 | version "0.13.7"
2388 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55"
2389 | integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==
2390 |
2391 | regexpp@^3.0.0, regexpp@^3.1.0:
2392 | version "3.1.0"
2393 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2"
2394 | integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==
2395 |
2396 | remark-parse@^9.0.0:
2397 | version "9.0.0"
2398 | resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-9.0.0.tgz#4d20a299665880e4f4af5d90b7c7b8a935853640"
2399 | integrity sha512-geKatMwSzEXKHuzBNU1z676sGcDcFoChMK38TgdHJNAYfFtsfHDQG7MoJAjs6sgYMqyLduCYWDIWZIxiPeafEw==
2400 | dependencies:
2401 | mdast-util-from-markdown "^0.8.0"
2402 |
2403 | remark-stringify@^9.0.0:
2404 | version "9.0.1"
2405 | resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-9.0.1.tgz#576d06e910548b0a7191a71f27b33f1218862894"
2406 | integrity sha512-mWmNg3ZtESvZS8fv5PTvaPckdL4iNlCHTt8/e/8oN08nArHRHjNZMKzA/YW3+p7/lYqIw4nx1XsjCBo/AxNChg==
2407 | dependencies:
2408 | mdast-util-to-markdown "^0.6.0"
2409 |
2410 | remark@^13.0.0:
2411 | version "13.0.0"
2412 | resolved "https://registry.yarnpkg.com/remark/-/remark-13.0.0.tgz#d15d9bf71a402f40287ebe36067b66d54868e425"
2413 | integrity sha512-HDz1+IKGtOyWN+QgBiAT0kn+2s6ovOxHyPAFGKVE81VSzJ+mq7RwHFledEvB5F1p4iJvOah/LOKdFuzvRnNLCA==
2414 | dependencies:
2415 | remark-parse "^9.0.0"
2416 | remark-stringify "^9.0.0"
2417 | unified "^9.1.0"
2418 |
2419 | repeat-string@^1.0.0:
2420 | version "1.6.1"
2421 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
2422 | integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc=
2423 |
2424 | require-from-string@^2.0.2:
2425 | version "2.0.2"
2426 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
2427 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
2428 |
2429 | resolve-from@^4.0.0:
2430 | version "4.0.0"
2431 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
2432 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
2433 |
2434 | reusify@^1.0.4:
2435 | version "1.0.4"
2436 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2437 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2438 |
2439 | rimraf@^3.0.2:
2440 | version "3.0.2"
2441 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
2442 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
2443 | dependencies:
2444 | glob "^7.1.3"
2445 |
2446 | ripemd160@^2.0.1:
2447 | version "2.0.2"
2448 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
2449 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==
2450 | dependencies:
2451 | hash-base "^3.0.0"
2452 | inherits "^2.0.1"
2453 |
2454 | run-parallel@^1.1.9:
2455 | version "1.2.0"
2456 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2457 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2458 | dependencies:
2459 | queue-microtask "^1.2.2"
2460 |
2461 | rxjs@^6.6.7:
2462 | version "6.6.7"
2463 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9"
2464 | integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==
2465 | dependencies:
2466 | tslib "^1.9.0"
2467 |
2468 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
2469 | version "5.1.2"
2470 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
2471 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
2472 |
2473 | safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0:
2474 | version "5.2.1"
2475 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2476 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2477 |
2478 | "safer-buffer@>= 2.1.2 < 3":
2479 | version "2.1.2"
2480 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2481 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2482 |
2483 | scryptsy@^2.1.0:
2484 | version "2.1.0"
2485 | resolved "https://registry.yarnpkg.com/scryptsy/-/scryptsy-2.1.0.tgz#8d1e8d0c025b58fdd25b6fa9a0dc905ee8faa790"
2486 | integrity sha512-1CdSqHQowJBnMAFyPEBRfqag/YP9OF394FV+4YREIJX4ljD7OxvQRDayyoyyCk+senRjSkP6VnUNQmVQqB6g7w==
2487 |
2488 | semver@^7.2.1, semver@^7.3.2:
2489 | version "7.3.5"
2490 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
2491 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==
2492 | dependencies:
2493 | lru-cache "^6.0.0"
2494 |
2495 | send@0.17.1:
2496 | version "0.17.1"
2497 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8"
2498 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==
2499 | dependencies:
2500 | debug "2.6.9"
2501 | depd "~1.1.2"
2502 | destroy "~1.0.4"
2503 | encodeurl "~1.0.2"
2504 | escape-html "~1.0.3"
2505 | etag "~1.8.1"
2506 | fresh "0.5.2"
2507 | http-errors "~1.7.2"
2508 | mime "1.6.0"
2509 | ms "2.1.1"
2510 | on-finished "~2.3.0"
2511 | range-parser "~1.2.1"
2512 | statuses "~1.5.0"
2513 |
2514 | serve-static@1.14.1:
2515 | version "1.14.1"
2516 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
2517 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
2518 | dependencies:
2519 | encodeurl "~1.0.2"
2520 | escape-html "~1.0.3"
2521 | parseurl "~1.3.3"
2522 | send "0.17.1"
2523 |
2524 | setprototypeof@1.1.1:
2525 | version "1.1.1"
2526 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683"
2527 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==
2528 |
2529 | setprototypeof@1.2.0:
2530 | version "1.2.0"
2531 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
2532 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
2533 |
2534 | sha.js@^2.4.0:
2535 | version "2.4.11"
2536 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7"
2537 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==
2538 | dependencies:
2539 | inherits "^2.0.1"
2540 | safe-buffer "^5.0.1"
2541 |
2542 | shebang-command@^2.0.0:
2543 | version "2.0.0"
2544 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2545 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2546 | dependencies:
2547 | shebang-regex "^3.0.0"
2548 |
2549 | shebang-regex@^3.0.0:
2550 | version "3.0.0"
2551 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2552 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2553 |
2554 | simple-swizzle@^0.2.2:
2555 | version "0.2.2"
2556 | resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a"
2557 | integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=
2558 | dependencies:
2559 | is-arrayish "^0.3.1"
2560 |
2561 | slash@^3.0.0:
2562 | version "3.0.0"
2563 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2564 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2565 |
2566 | slice-ansi@^4.0.0:
2567 | version "4.0.0"
2568 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b"
2569 | integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==
2570 | dependencies:
2571 | ansi-styles "^4.0.0"
2572 | astral-regex "^2.0.0"
2573 | is-fullwidth-code-point "^3.0.0"
2574 |
2575 | sprintf-js@~1.0.2:
2576 | version "1.0.3"
2577 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2578 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
2579 |
2580 | stack-trace@0.0.x:
2581 | version "0.0.10"
2582 | resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0"
2583 | integrity sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=
2584 |
2585 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0:
2586 | version "1.5.0"
2587 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c"
2588 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=
2589 |
2590 | string-width@^4.2.0:
2591 | version "4.2.2"
2592 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5"
2593 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==
2594 | dependencies:
2595 | emoji-regex "^8.0.0"
2596 | is-fullwidth-code-point "^3.0.0"
2597 | strip-ansi "^6.0.0"
2598 |
2599 | string_decoder@^1.1.1:
2600 | version "1.3.0"
2601 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
2602 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
2603 | dependencies:
2604 | safe-buffer "~5.2.0"
2605 |
2606 | string_decoder@~1.1.1:
2607 | version "1.1.1"
2608 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
2609 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
2610 | dependencies:
2611 | safe-buffer "~5.1.0"
2612 |
2613 | strip-ansi@^6.0.0:
2614 | version "6.0.0"
2615 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
2616 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
2617 | dependencies:
2618 | ansi-regex "^5.0.0"
2619 |
2620 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
2621 | version "3.1.1"
2622 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
2623 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
2624 |
2625 | strip-markdown@^4.0.0:
2626 | version "4.0.0"
2627 | resolved "https://registry.yarnpkg.com/strip-markdown/-/strip-markdown-4.0.0.tgz#1f48aeb5ce81b646487d9f8fbdc18f8bf1416ba2"
2628 | integrity sha512-jwoS5zwHNFjergQjg4RFzmdS4n5WOd5DXDIwRY0jye9ALYMscLWfwZVBMt4P/va5aRmm7Dlj6O4NjMuaD7609Q==
2629 |
2630 | supports-color@^5.3.0:
2631 | version "5.5.0"
2632 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2633 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2634 | dependencies:
2635 | has-flag "^3.0.0"
2636 |
2637 | supports-color@^7.1.0:
2638 | version "7.2.0"
2639 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2640 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2641 | dependencies:
2642 | has-flag "^4.0.0"
2643 |
2644 | table@^6.0.4:
2645 | version "6.3.2"
2646 | resolved "https://registry.yarnpkg.com/table/-/table-6.3.2.tgz#afa86bee5cfe305f9328f89bb3e5454132cdea28"
2647 | integrity sha512-I9/Ca6Huf2oxFag7crD0DhA+arIdfLtWunSn0NIXSzjtUlDgIBGVZY7SsMkNPNT3Psd/z4gza0nuEpmra9eRbg==
2648 | dependencies:
2649 | ajv "^8.0.1"
2650 | is-boolean-object "^1.1.0"
2651 | is-number-object "^1.0.4"
2652 | is-string "^1.0.5"
2653 | lodash.clonedeep "^4.5.0"
2654 | lodash.flatten "^4.4.0"
2655 | lodash.truncate "^4.4.2"
2656 | slice-ansi "^4.0.0"
2657 | string-width "^4.2.0"
2658 |
2659 | text-hex@1.0.x:
2660 | version "1.0.0"
2661 | resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
2662 | integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==
2663 |
2664 | text-table@^0.2.0:
2665 | version "0.2.0"
2666 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
2667 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
2668 |
2669 | timers-ext@^0.1.7:
2670 | version "0.1.7"
2671 | resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6"
2672 | integrity sha512-b85NUNzTSdodShTIbky6ZF02e8STtVVfD+fu4aXXShEELpozH+bCpJLYMPZbsABN2wDH7fJpqIoXxJpzbf0NqQ==
2673 | dependencies:
2674 | es5-ext "~0.10.46"
2675 | next-tick "1"
2676 |
2677 | to-regex-range@^5.0.1:
2678 | version "5.0.1"
2679 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2680 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2681 | dependencies:
2682 | is-number "^7.0.0"
2683 |
2684 | toidentifier@1.0.0:
2685 | version "1.0.0"
2686 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553"
2687 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==
2688 |
2689 | triple-beam@^1.2.0, triple-beam@^1.3.0:
2690 | version "1.3.0"
2691 | resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.3.0.tgz#a595214c7298db8339eeeee083e4d10bd8cb8dd9"
2692 | integrity sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==
2693 |
2694 | trough@^1.0.0:
2695 | version "1.0.5"
2696 | resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406"
2697 | integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==
2698 |
2699 | tslib@^1.8.1, tslib@^1.9.0:
2700 | version "1.14.1"
2701 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
2702 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
2703 |
2704 | tsutils@^3.17.1:
2705 | version "3.21.0"
2706 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
2707 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
2708 | dependencies:
2709 | tslib "^1.8.1"
2710 |
2711 | tweetnacl@^1.0.3:
2712 | version "1.0.3"
2713 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596"
2714 | integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==
2715 |
2716 | type-check@^0.4.0, type-check@~0.4.0:
2717 | version "0.4.0"
2718 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
2719 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
2720 | dependencies:
2721 | prelude-ls "^1.2.1"
2722 |
2723 | type-fest@^0.20.2:
2724 | version "0.20.2"
2725 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
2726 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
2727 |
2728 | type-fest@^0.8.1:
2729 | version "0.8.1"
2730 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
2731 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
2732 |
2733 | type-is@~1.6.17, type-is@~1.6.18:
2734 | version "1.6.18"
2735 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
2736 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
2737 | dependencies:
2738 | media-typer "0.3.0"
2739 | mime-types "~2.1.24"
2740 |
2741 | type@^1.0.1:
2742 | version "1.2.0"
2743 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
2744 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
2745 |
2746 | type@^2.0.0:
2747 | version "2.5.0"
2748 | resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d"
2749 | integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==
2750 |
2751 | typedarray-to-buffer@^3.1.5:
2752 | version "3.1.5"
2753 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
2754 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
2755 | dependencies:
2756 | is-typedarray "^1.0.0"
2757 |
2758 | typescript@3.9.6:
2759 | version "3.9.6"
2760 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a"
2761 | integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==
2762 |
2763 | typescript@^4.1.3, typescript@^4.2.4:
2764 | version "4.2.4"
2765 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.2.4.tgz#8610b59747de028fda898a8aef0e103f156d0961"
2766 | integrity sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==
2767 |
2768 | unified@^9.1.0:
2769 | version "9.2.1"
2770 | resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.1.tgz#ae18d5674c114021bfdbdf73865ca60f410215a3"
2771 | integrity sha512-juWjuI8Z4xFg8pJbnEZ41b5xjGUWGHqXALmBZ3FC3WX0PIx1CZBIIJ6mXbYMcf6Yw4Fi0rFUTA1cdz/BglbOhA==
2772 | dependencies:
2773 | bail "^1.0.0"
2774 | extend "^3.0.0"
2775 | is-buffer "^2.0.0"
2776 | is-plain-obj "^2.0.0"
2777 | trough "^1.0.0"
2778 | vfile "^4.0.0"
2779 |
2780 | unist-util-stringify-position@^2.0.0:
2781 | version "2.0.3"
2782 | resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da"
2783 | integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==
2784 | dependencies:
2785 | "@types/unist" "^2.0.2"
2786 |
2787 | unpipe@1.0.0, unpipe@~1.0.0:
2788 | version "1.0.0"
2789 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
2790 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2791 |
2792 | uri-js@^4.2.2:
2793 | version "4.4.1"
2794 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2795 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2796 | dependencies:
2797 | punycode "^2.1.0"
2798 |
2799 | utf-8-validate@^5.0.2:
2800 | version "5.0.4"
2801 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8"
2802 | integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q==
2803 | dependencies:
2804 | node-gyp-build "^4.2.0"
2805 |
2806 | util-deprecate@^1.0.1, util-deprecate@~1.0.1:
2807 | version "1.0.2"
2808 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2809 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2810 |
2811 | utils-merge@1.0.1:
2812 | version "1.0.1"
2813 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
2814 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
2815 |
2816 | v8-compile-cache@^2.0.3:
2817 | version "2.3.0"
2818 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
2819 | integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
2820 |
2821 | varint@^5.0.0:
2822 | version "5.0.2"
2823 | resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4"
2824 | integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==
2825 |
2826 | vary@~1.1.2:
2827 | version "1.1.2"
2828 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
2829 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
2830 |
2831 | vfile-message@^2.0.0:
2832 | version "2.0.4"
2833 | resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a"
2834 | integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==
2835 | dependencies:
2836 | "@types/unist" "^2.0.0"
2837 | unist-util-stringify-position "^2.0.0"
2838 |
2839 | vfile@^4.0.0:
2840 | version "4.2.1"
2841 | resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624"
2842 | integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==
2843 | dependencies:
2844 | "@types/unist" "^2.0.0"
2845 | is-buffer "^2.0.0"
2846 | unist-util-stringify-position "^2.0.0"
2847 | vfile-message "^2.0.0"
2848 |
2849 | websocket@^1.0.34:
2850 | version "1.0.34"
2851 | resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
2852 | integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
2853 | dependencies:
2854 | bufferutil "^4.0.1"
2855 | debug "^2.2.0"
2856 | es5-ext "^0.10.50"
2857 | typedarray-to-buffer "^3.1.5"
2858 | utf-8-validate "^5.0.2"
2859 | yaeti "^0.0.6"
2860 |
2861 | which@^2.0.1:
2862 | version "2.0.2"
2863 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2864 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2865 | dependencies:
2866 | isexe "^2.0.0"
2867 |
2868 | winston-transport@^4.4.0:
2869 | version "4.4.0"
2870 | resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59"
2871 | integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==
2872 | dependencies:
2873 | readable-stream "^2.3.7"
2874 | triple-beam "^1.2.0"
2875 |
2876 | winston@^3.3.3:
2877 | version "3.3.3"
2878 | resolved "https://registry.yarnpkg.com/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170"
2879 | integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==
2880 | dependencies:
2881 | "@dabh/diagnostics" "^2.0.2"
2882 | async "^3.1.0"
2883 | is-stream "^2.0.0"
2884 | logform "^2.2.0"
2885 | one-time "^1.0.0"
2886 | readable-stream "^3.4.0"
2887 | stack-trace "0.0.x"
2888 | triple-beam "^1.3.0"
2889 | winston-transport "^4.4.0"
2890 |
2891 | word-wrap@^1.2.3:
2892 | version "1.2.3"
2893 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
2894 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
2895 |
2896 | wrappy@1:
2897 | version "1.0.2"
2898 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2899 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2900 |
2901 | xxhashjs@^0.2.2:
2902 | version "0.2.2"
2903 | resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8"
2904 | integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==
2905 | dependencies:
2906 | cuint "^0.2.2"
2907 |
2908 | yaeti@^0.0.6:
2909 | version "0.0.6"
2910 | resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
2911 | integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc=
2912 |
2913 | yallist@^4.0.0:
2914 | version "4.0.0"
2915 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2916 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2917 |
2918 | yaml@*:
2919 | version "1.10.2"
2920 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
2921 | integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
2922 |
2923 | yaml@1.10.0:
2924 | version "1.10.0"
2925 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e"
2926 | integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==
2927 |
2928 | zwitch@^1.0.0:
2929 | version "1.0.5"
2930 | resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"
2931 | integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==
2932 |
--------------------------------------------------------------------------------