├── .gitignore
├── .nojekyll
├── 404.html
├── README.md
├── _sidebar.md
├── authentication.md
├── changelog.md
├── community.md
├── index.html
├── package-lock.json
├── package.json
├── private_channels.md
├── private_channels_mwallet.md
├── public_channels.md
├── public_kline.md
├── public_market_status.md
├── public_mwallet_pool_quota.md
├── public_orderbook.md
├── public_ticker.md
├── public_trade.md
└── upcoming_changes.md
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
--------------------------------------------------------------------------------
/.nojekyll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/maicoin/max-websocket-docs/c6ad65b8b1b3dd6d77ba54c44ec1defb890fbbb1/.nojekyll
--------------------------------------------------------------------------------
/404.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Document
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MAX Exchange WebSocket API
2 |
3 | ## Introduction
4 |
5 | Official documentation for the new redesign MAX Exchange websocket service
6 |
7 | __Endpoint__: `wss://max-stream.maicoin.com/ws`
8 |
9 | __Important note__
10 | > * price and volume should be string
11 | > * timestamp and depth should be number
12 | > * rate limit when your request message over 20 per second
13 | > * rate limit when your request message over 200 per minute
14 | > * rate limit when your ip connection over 600 per hour
15 |
16 | ## Keep connection
17 |
18 | You need to use ping frame to keep connection with server. If server doesn't receive your ping for 130 seconds, the connection will be closed by server side. Some libraries will do this for you, so please check your library first.
19 |
20 | ```javascript
21 | const WebSocket = require('ws');
22 | const url = "wss://max-stream.maicoin.com/ws"
23 | const ws = new WebSocket(url);
24 |
25 | ws.on('open', function open() {
26 | setInterval(() => {
27 | ws.ping("test")
28 | }, 30000);
29 | })
30 | ws.on('pong', function incoming(data) {
31 | // it will show "server pong test" on the screen
32 | console.log('server pong', data.toString());
33 | });
34 | ```
35 |
36 | ## IP Rate limit
37 | - Receiving a 429 response will result in an automatic IP ban; it is your responsibility to refrain from spamming.
38 | - A `Retry-After` header is included in 429 responses, indicating the Unix timestamp in seconds for when you can reconnect.
39 | - Rate limit violations will result in a penalty. You must wait for the full period of the penalty before making any subsequent requests. Otherwise, the penalty time will be reset and the period of being banned will be prolonged.
40 |
41 | ## Response key alias
42 | We use short keys to reduce response size, please check out mappings below.
43 |
44 | | abbr | meaning | comment |
45 | |-------|--------------------| ------------------- |
46 | | `e` | `event` |
47 | | `E` | `errors` |
48 | | `c` | `channel` |
49 | | `i` | `id` |
50 | | `s` | `subscription` |
51 | | `T` | `at` | // or `created_at` |
52 | | `TU` | `updated_at` |
53 | | `ST` | `startTime` |
54 | | `ET` | `endTime` |
55 | | `k` | `kline` |
56 | | `a` | `asks` |
57 | | `b` | `bids` |
58 | | `M` | `market` |
59 | | `ms` | `markets` |
60 | | `m` | `maker` |
61 | | `p` | `price` |
62 | | `v` | `volume` |
63 | | `O` | `open` |
64 | | `C` | `close` |
65 | | `H` | `high` |
66 | | `L` | `low` |
67 | | `V` | `volume in BTC` |
68 | | `tk` | `ticker` |
69 | | `o` | `orders` |
70 | | `t` | `trades` |
71 | | `sd` | `side` |
72 | | `ot` | `ord_type` |
73 | | `sp` | `stop_price` |
74 | | `ap` | `avg_price` |
75 | | `aps` | |
76 | | `ps` | |
77 | | `tc` | `trade_count` |
78 | | `B` | `balances` |
79 | | `rv` | `remaining_volume` |
80 | | `ev` | `executed_volume` | or `filled` |
81 | | `qv` | `quote_volume` | quote volume used in kline |
82 | | `S` | `state` |
83 | | `R` | `resolution` | kline resolution |
84 | | `cu` | `currency` |
85 | | `fc` | `fee currency` |
86 | | `fd` | `fee discounted` | fee is discounted or not (e.g. use MAX TOKEN to pay fee) |
87 | | `av` | `available` |
88 | | `l` | `locked` |
89 | | `f` | `fee` |
90 | | `oi` | `order id` | in trade |
91 | | `ti` | `trade id` |
92 | | `ci` | `client oid` |
93 | | `gi` | `group id` |
94 | | `tr` | `trend` |
95 | | `co` | `code` |
96 | | `_q` | |
97 | | `_t` | |
98 | | `fi` | `first id` | in book |
99 | | `li` | `last id` | in book |
100 | | `v` | `version` | in book |
101 |
102 |
103 | ## Error response
104 |
105 | If you get any error response, it will be concentrated in an array.
106 |
107 | ```json
108 | {
109 | "e": "error",
110 | "E": ["...."],
111 | "i": "client1",
112 | "T": 1234567890000
113 | }
114 | ```
115 |
116 | ### Example
117 |
118 | When you send a command with invalid action, you will get following error message:
119 |
120 | ```json
121 | {
122 | "e": "error",
123 | "E": [ "E-1004: invalid action"],
124 | "i": "client1",
125 | "T": 1678096431125
126 | }
127 | ```
128 |
129 | ### Error type
130 |
131 | | code | error message | description
132 | | ---- | ------------------------------------------------ | -------------------
133 | | 1004 | invalid action | The action in `action` field is not supported.
134 | | 1005 | invalid json | The command is not in a valid JSON format.
135 | | 1006 | invalid nonce (difference of 30 seconds or more) | The difference between the nonce you provided and the server's nonce is more than 30 seconds.
136 | | 1007 | authentication failed | Not authenticated. Might need to check your api key/secret or the way you send auth command.
137 | | 1012 | nonce has already been used | The nonce you provided has already been used.
138 |
--------------------------------------------------------------------------------
/_sidebar.md:
--------------------------------------------------------------------------------
1 | * [Introduction](/)
2 | * [Keep connection](/#keep-connection)
3 | * [Response key alias](/#response-key-alias)
4 | * [Error response](/#error-response)
5 | * [Public Channels](public_channels.md)
6 | * [Subscribe](public_channels.md#subscribe)
7 | * [UnSubscribe](public_channels.md#unsubscribe)
8 | * [Orderbook](public_orderbook.md#orderbook-subscription)
9 | * [Trade](public_trade.md#trade-subscription)
10 | * [Ticker](public_ticker.md#ticker-subscription)
11 | * [Kline](public_kline.md#kline-subscription)
12 | * [Market Status](public_market_status.md#market-status-subscription)
13 | * [MWallet Pool Quota](public_mwallet_pool_quota.md#mwallet-pool-quota-subscription)
14 | * [Authentication](authentication.md)
15 | * [Private Channels](private_channels.md#private-channels-subscription)
16 | * [Order](private_channels.md#order-response)
17 | * [Trade](private_channels.md#trade-response)
18 | * [Fast Trade](private_channels.md#fast-trade-response)
19 | * [Account](private_channels.md#account-response)
20 | * [MWallet Private Channels](private_channels_mwallet.md#mwallet-private-channels-subscription)
21 | * [MWallet Order](private_channels_mwallet.md#mwallet-order-response)
22 | * [MWallet Trade](private_channels_mwallet.md#mwallet-trade-response)
23 | * [MWallet Fast Trade](private_channels_mwallet.md#mwallet-fast-trade-response)
24 | * [MWallet Account](private_channels_mwallet.md#mwallet-account-response)
25 | * [AD Ratio](private_channels_mwallet.md#mwallet-ad-ratio-response)
26 | * [Borrowing](private_channels_mwallet.md#mwallet-borrowing-response)
27 | * [Community](community.md)
28 | * [Changelog](changelog.md)
29 | * [Upcoming Changes](upcoming_changes.md)
--------------------------------------------------------------------------------
/authentication.md:
--------------------------------------------------------------------------------
1 | # Authentication for private channels
2 |
3 | Please apply api key and secret from http://max.maicoin.com/api_tokens first, for order and trade data, you will need to check read permission for Order / Trade. And for account data, please check read permission for Account & Personal Information.
4 |
5 | Nonce is a timestamp in positive integer, stands for milliseconds elapsed since Unix epoch. Nonce must be within 30 seconds difference of server time.
6 |
7 | Create signature by using sha256 HMAC with your api secret to encode nonce.
8 | You can specify an id to mark your request, and it will be your reference for response.
9 |
10 | ## NodeJS example
11 | ```javascript
12 | const API_KEY = "api key from max website";
13 | const API_SECRET = "api secret from max website";
14 | const crypto = require("crypto");
15 | const hmac = crypto.createHmac("sha256", API_SECRET);
16 |
17 | const nonce = Date.now();
18 | const signature = hmac.update(""+nonce).digest("hex");
19 | ```
20 |
21 | ## Subscription
22 | ```json
23 | {
24 | "action": "auth",
25 | "apiKey": "...",
26 | "nonce": 1591690054859,
27 | "signature": "....",
28 | "id": "client-id"
29 | }
30 | ```
31 |
32 | ## Subscription with filters
33 |
34 | To receive specific user private channels, you can use the `filters` parameter to indicate the channels you want to listen to. We support four types of filters: `order`, `trade`, `account`, `trade_update`, and `fast_trade_update`. If you don't want to receive a snapshot of your trades, please use `trade_update` instead of trade.
35 |
36 | If you don't specify any filter (i.e., the `filters` is empty), we will use `order`, `trade`, and `account` by default.
37 |
38 | ```json
39 | {
40 | "action": "auth",
41 | ...
42 | "filters": ["order", "trade"] // ignore account update
43 | }
44 | ```
45 |
46 | ## Success response
47 | ```json
48 | {
49 | "e": "authenticated",
50 | "i": "client-id",
51 | "T": 1591686735192
52 | }
53 | ```
54 |
--------------------------------------------------------------------------------
/changelog.md:
--------------------------------------------------------------------------------
1 | ## 25.25.0 (2024-12-02)
2 | - Support the mwallet_fast_trade_update filter for private channel.
3 |
4 | ## 25.24.0 (2024-11-27)
5 | - Support the fast_trade_update filter for private channel.
6 |
7 | ## 25.14.0 (2024-11-04)
8 |
9 | ### New Features
10 | #### Websocket IP Rate Limit
11 | - Receiving a 429 response will result in an automatic IP ban; it is your responsibility to refrain from spamming.
12 | - A `Retry-After` header is included in 429 responses, indicating the Unix timestamp in seconds for when you can reconnect.
13 | - Rate limit violations will result in a penalty. You must wait for the full period of the penalty before making any subsequent requests. Otherwise, the penalty time will be reset and the period of being banned will be prolonged.
14 |
15 | ## 25.12.0 (2024-10-22)
16 |
17 | ### New Features
18 | * The order book supports using the version, first and last ID to verify data continuity.
19 |
20 | ## 6.66.0 (2024-05-13)
21 |
22 | ### New Features
23 | * rate limit when your ip connection over 1440 per day
24 |
25 |
26 | ## 6.1.0 (2024-01-05)
27 |
28 | ### New Features
29 | * rate limit when your request messages over 20 per second
30 | * rate limit when your request messages over 200 per minute
31 |
32 | ## 5.120.0 (2023-12-04)
33 |
34 | ### New Features
35 | * rate limit alert when your request messages over 20 per second (only alert message)
36 | * rate limit alert when your request messages over 200 per minute (only alert message)
37 |
38 | ## v3.46.1 (2021-10-06)
39 |
40 | ### New Features
41 | * Support MWallet related channels
42 |
43 | ## 1.3.0 (2020-08-18)
44 |
45 | ### Bug Fixes
46 | * align json fields of open orders with MAX Rest API v2
47 | * check ip if it is in trusted ip list from API key settings
48 |
--------------------------------------------------------------------------------
/community.md:
--------------------------------------------------------------------------------
1 | # Community
2 |
3 | Welcome to our API Telegram group! This is a place for anyone interested in engaging with the MAX platform through API integration. Whether you have questions or need assistance with your API projects, we are here to help. Our group is open to everyone and provides an opportunity to connect with other developers, share knowledge, and receive assistance with your API-related inquiries. We're happy to have you join us! To join, simply click on the telegram link: [https://t.me/maxapitraders](https://t.me/maxapitraders).
4 |
5 | For general discussion or off-topic conversations, please use the following Telegram link: [https://t.me/MAXexchange](https://t.me/MAXexchange)
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | MAX Exchange WebSocket API Documentation
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
31 |
32 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "max-websocket-docs",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@sindresorhus/is": {
8 | "version": "0.14.0",
9 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz",
10 | "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ=="
11 | },
12 | "@szmarczak/http-timer": {
13 | "version": "1.1.2",
14 | "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
15 | "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==",
16 | "requires": {
17 | "defer-to-connect": "^1.0.1"
18 | }
19 | },
20 | "ansi-align": {
21 | "version": "3.0.0",
22 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz",
23 | "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==",
24 | "requires": {
25 | "string-width": "^3.0.0"
26 | }
27 | },
28 | "ansi-regex": {
29 | "version": "4.1.1",
30 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
31 | "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="
32 | },
33 | "ansi-styles": {
34 | "version": "3.2.1",
35 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
36 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
37 | "requires": {
38 | "color-convert": "^1.9.0"
39 | }
40 | },
41 | "anymatch": {
42 | "version": "3.1.1",
43 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
44 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
45 | "requires": {
46 | "normalize-path": "^3.0.0",
47 | "picomatch": "^2.0.4"
48 | }
49 | },
50 | "async-limiter": {
51 | "version": "1.0.1",
52 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
53 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
54 | },
55 | "binary-extensions": {
56 | "version": "2.1.0",
57 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
58 | "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ=="
59 | },
60 | "boxen": {
61 | "version": "3.2.0",
62 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-3.2.0.tgz",
63 | "integrity": "sha512-cU4J/+NodM3IHdSL2yN8bqYqnmlBTidDR4RC7nJs61ZmtGz8VZzM3HLQX0zY5mrSmPtR3xWwsq2jOUQqFZN8+A==",
64 | "requires": {
65 | "ansi-align": "^3.0.0",
66 | "camelcase": "^5.3.1",
67 | "chalk": "^2.4.2",
68 | "cli-boxes": "^2.2.0",
69 | "string-width": "^3.0.0",
70 | "term-size": "^1.2.0",
71 | "type-fest": "^0.3.0",
72 | "widest-line": "^2.0.0"
73 | }
74 | },
75 | "braces": {
76 | "version": "3.0.2",
77 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
78 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
79 | "requires": {
80 | "fill-range": "^7.0.1"
81 | }
82 | },
83 | "cacheable-request": {
84 | "version": "6.1.0",
85 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz",
86 | "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==",
87 | "requires": {
88 | "clone-response": "^1.0.2",
89 | "get-stream": "^5.1.0",
90 | "http-cache-semantics": "^4.0.0",
91 | "keyv": "^3.0.0",
92 | "lowercase-keys": "^2.0.0",
93 | "normalize-url": "^4.1.0",
94 | "responselike": "^1.0.2"
95 | },
96 | "dependencies": {
97 | "get-stream": {
98 | "version": "5.1.0",
99 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.1.0.tgz",
100 | "integrity": "sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw==",
101 | "requires": {
102 | "pump": "^3.0.0"
103 | }
104 | },
105 | "lowercase-keys": {
106 | "version": "2.0.0",
107 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz",
108 | "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA=="
109 | }
110 | }
111 | },
112 | "camelcase": {
113 | "version": "5.3.1",
114 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
115 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="
116 | },
117 | "chalk": {
118 | "version": "2.4.2",
119 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
120 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
121 | "requires": {
122 | "ansi-styles": "^3.2.1",
123 | "escape-string-regexp": "^1.0.5",
124 | "supports-color": "^5.3.0"
125 | }
126 | },
127 | "chokidar": {
128 | "version": "3.4.1",
129 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.1.tgz",
130 | "integrity": "sha512-TQTJyr2stihpC4Sya9hs2Xh+O2wf+igjL36Y75xx2WdHuiICcn/XJza46Jwt0eT5hVpQOzo3FpY3cj3RVYLX0g==",
131 | "requires": {
132 | "anymatch": "~3.1.1",
133 | "braces": "~3.0.2",
134 | "fsevents": "~2.1.2",
135 | "glob-parent": "~5.1.0",
136 | "is-binary-path": "~2.1.0",
137 | "is-glob": "~4.0.1",
138 | "normalize-path": "~3.0.0",
139 | "readdirp": "~3.4.0"
140 | }
141 | },
142 | "ci-info": {
143 | "version": "2.0.0",
144 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
145 | "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ=="
146 | },
147 | "cli-boxes": {
148 | "version": "2.2.0",
149 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.0.tgz",
150 | "integrity": "sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w=="
151 | },
152 | "cliui": {
153 | "version": "5.0.0",
154 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
155 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
156 | "requires": {
157 | "string-width": "^3.1.0",
158 | "strip-ansi": "^5.2.0",
159 | "wrap-ansi": "^5.1.0"
160 | }
161 | },
162 | "clone-response": {
163 | "version": "1.0.2",
164 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
165 | "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
166 | "requires": {
167 | "mimic-response": "^1.0.0"
168 | }
169 | },
170 | "color-convert": {
171 | "version": "1.9.3",
172 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
173 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
174 | "requires": {
175 | "color-name": "1.1.3"
176 | }
177 | },
178 | "color-name": {
179 | "version": "1.1.3",
180 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
181 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
182 | },
183 | "configstore": {
184 | "version": "4.0.0",
185 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-4.0.0.tgz",
186 | "integrity": "sha512-CmquAXFBocrzaSM8mtGPMM/HiWmyIpr4CcJl/rgY2uCObZ/S7cKU0silxslqJejl+t/T9HS8E0PUNQD81JGUEQ==",
187 | "requires": {
188 | "dot-prop": "^4.1.0",
189 | "graceful-fs": "^4.1.2",
190 | "make-dir": "^1.0.0",
191 | "unique-string": "^1.0.0",
192 | "write-file-atomic": "^2.0.0",
193 | "xdg-basedir": "^3.0.0"
194 | },
195 | "dependencies": {
196 | "make-dir": {
197 | "version": "1.3.0",
198 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
199 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
200 | "requires": {
201 | "pify": "^3.0.0"
202 | }
203 | }
204 | }
205 | },
206 | "connect": {
207 | "version": "3.7.0",
208 | "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
209 | "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
210 | "requires": {
211 | "debug": "2.6.9",
212 | "finalhandler": "1.1.2",
213 | "parseurl": "~1.3.3",
214 | "utils-merge": "1.0.1"
215 | }
216 | },
217 | "connect-livereload": {
218 | "version": "0.6.1",
219 | "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz",
220 | "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g=="
221 | },
222 | "cp-file": {
223 | "version": "7.0.0",
224 | "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-7.0.0.tgz",
225 | "integrity": "sha512-0Cbj7gyvFVApzpK/uhCtQ/9kE9UnYpxMzaq5nQQC/Dh4iaj5fxp7iEFIullrYwzj8nf0qnsI1Qsx34hAeAebvw==",
226 | "requires": {
227 | "graceful-fs": "^4.1.2",
228 | "make-dir": "^3.0.0",
229 | "nested-error-stacks": "^2.0.0",
230 | "p-event": "^4.1.0"
231 | }
232 | },
233 | "cross-spawn": {
234 | "version": "5.1.0",
235 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
236 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
237 | "requires": {
238 | "lru-cache": "^4.0.1",
239 | "shebang-command": "^1.2.0",
240 | "which": "^1.2.9"
241 | },
242 | "dependencies": {
243 | "lru-cache": {
244 | "version": "4.1.5",
245 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
246 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
247 | "requires": {
248 | "pseudomap": "^1.0.2",
249 | "yallist": "^2.1.2"
250 | }
251 | },
252 | "yallist": {
253 | "version": "2.1.2",
254 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
255 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
256 | }
257 | }
258 | },
259 | "crypto-random-string": {
260 | "version": "1.0.0",
261 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
262 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4="
263 | },
264 | "debug": {
265 | "version": "2.6.9",
266 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
267 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
268 | "requires": {
269 | "ms": "2.0.0"
270 | }
271 | },
272 | "decamelize": {
273 | "version": "1.2.0",
274 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
275 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
276 | },
277 | "decompress-response": {
278 | "version": "3.3.0",
279 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
280 | "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
281 | "requires": {
282 | "mimic-response": "^1.0.0"
283 | }
284 | },
285 | "deep-extend": {
286 | "version": "0.6.0",
287 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
288 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
289 | },
290 | "defer-to-connect": {
291 | "version": "1.1.3",
292 | "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz",
293 | "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ=="
294 | },
295 | "depd": {
296 | "version": "1.1.2",
297 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
298 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
299 | },
300 | "destroy": {
301 | "version": "1.0.4",
302 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
303 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
304 | },
305 | "docsify": {
306 | "version": "4.13.1",
307 | "resolved": "https://registry.npmjs.org/docsify/-/docsify-4.13.1.tgz",
308 | "integrity": "sha512-BsDypTBhw0mfslw9kZgAspCMZSM+sUIIDg5K/t1hNLkvbem9h64ZQc71e1IpY+iWsi/KdeqfazDfg52y2Lmm0A==",
309 | "requires": {
310 | "marked": "^1.2.9",
311 | "medium-zoom": "^1.0.6",
312 | "opencollective-postinstall": "^2.0.2",
313 | "prismjs": "^1.27.0",
314 | "strip-indent": "^3.0.0",
315 | "tinydate": "^1.3.0",
316 | "tweezer.js": "^1.4.0"
317 | }
318 | },
319 | "docsify-cli": {
320 | "version": "4.4.1",
321 | "resolved": "https://registry.npmjs.org/docsify-cli/-/docsify-cli-4.4.1.tgz",
322 | "integrity": "sha512-M5VU/8UCILz87D519KnURH3LA+A3RAAqj7ifDv4xOUf4c32QDkWSETS3yLmXlTNdxhATVi5P1fVklnvVW4uOyw==",
323 | "requires": {
324 | "chalk": "^2.4.2",
325 | "connect": "^3.6.0",
326 | "connect-livereload": "^0.6.0",
327 | "cp-file": "^7.0.0",
328 | "docsify": "^4.10.2",
329 | "docsify-server-renderer": ">=4",
330 | "fs-extra": "^8.1.0",
331 | "get-port": "^5.0.0",
332 | "livereload": "^0.9.1",
333 | "lru-cache": "^5.1.1",
334 | "open": "^6.4.0",
335 | "serve-static": "^1.12.1",
336 | "update-notifier": "^3.0.1",
337 | "yargonaut": "^1.1.2",
338 | "yargs": "^14.2.0"
339 | }
340 | },
341 | "docsify-server-renderer": {
342 | "version": "4.11.4",
343 | "resolved": "https://registry.npmjs.org/docsify-server-renderer/-/docsify-server-renderer-4.11.4.tgz",
344 | "integrity": "sha512-TxOxqX/fwBFLHz788PtB0OeVis1EDWCVK8CEE/fvxTzQqsgZNTw2UO1wEg1qt/uuldJps3G+DPv/FN9xIeQgcg==",
345 | "requires": {
346 | "debug": "^4.1.1",
347 | "docsify": "^4.11.2",
348 | "dompurify": "^2.0.8",
349 | "node-fetch": "^2.6.0",
350 | "resolve-pathname": "^3.0.0"
351 | },
352 | "dependencies": {
353 | "debug": {
354 | "version": "4.1.1",
355 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
356 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
357 | "requires": {
358 | "ms": "^2.1.1"
359 | }
360 | },
361 | "ms": {
362 | "version": "2.1.2",
363 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
364 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
365 | }
366 | }
367 | },
368 | "dompurify": {
369 | "version": "2.2.6",
370 | "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.2.6.tgz",
371 | "integrity": "sha512-7b7ZArhhH0SP6W2R9cqK6RjaU82FZ2UPM7RO8qN1b1wyvC/NY1FNWcX1Pu00fFOAnzEORtwXe4bPaClg6pUybQ=="
372 | },
373 | "dot-prop": {
374 | "version": "4.2.1",
375 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz",
376 | "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==",
377 | "requires": {
378 | "is-obj": "^1.0.0"
379 | }
380 | },
381 | "duplexer3": {
382 | "version": "0.1.4",
383 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
384 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
385 | },
386 | "ee-first": {
387 | "version": "1.1.1",
388 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
389 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
390 | },
391 | "emoji-regex": {
392 | "version": "7.0.3",
393 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
394 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA=="
395 | },
396 | "encodeurl": {
397 | "version": "1.0.2",
398 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
399 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
400 | },
401 | "end-of-stream": {
402 | "version": "1.4.4",
403 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
404 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
405 | "requires": {
406 | "once": "^1.4.0"
407 | }
408 | },
409 | "escape-html": {
410 | "version": "1.0.3",
411 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
412 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
413 | },
414 | "escape-string-regexp": {
415 | "version": "1.0.5",
416 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
417 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
418 | },
419 | "etag": {
420 | "version": "1.8.1",
421 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
422 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
423 | },
424 | "execa": {
425 | "version": "0.7.0",
426 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
427 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
428 | "requires": {
429 | "cross-spawn": "^5.0.1",
430 | "get-stream": "^3.0.0",
431 | "is-stream": "^1.1.0",
432 | "npm-run-path": "^2.0.0",
433 | "p-finally": "^1.0.0",
434 | "signal-exit": "^3.0.0",
435 | "strip-eof": "^1.0.0"
436 | }
437 | },
438 | "figlet": {
439 | "version": "1.5.0",
440 | "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz",
441 | "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww=="
442 | },
443 | "fill-range": {
444 | "version": "7.0.1",
445 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
446 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
447 | "requires": {
448 | "to-regex-range": "^5.0.1"
449 | }
450 | },
451 | "finalhandler": {
452 | "version": "1.1.2",
453 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
454 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
455 | "requires": {
456 | "debug": "2.6.9",
457 | "encodeurl": "~1.0.2",
458 | "escape-html": "~1.0.3",
459 | "on-finished": "~2.3.0",
460 | "parseurl": "~1.3.3",
461 | "statuses": "~1.5.0",
462 | "unpipe": "~1.0.0"
463 | }
464 | },
465 | "find-up": {
466 | "version": "3.0.0",
467 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
468 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
469 | "requires": {
470 | "locate-path": "^3.0.0"
471 | }
472 | },
473 | "fresh": {
474 | "version": "0.5.2",
475 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
476 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
477 | },
478 | "fs-extra": {
479 | "version": "8.1.0",
480 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
481 | "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
482 | "requires": {
483 | "graceful-fs": "^4.2.0",
484 | "jsonfile": "^4.0.0",
485 | "universalify": "^0.1.0"
486 | }
487 | },
488 | "fsevents": {
489 | "version": "2.1.3",
490 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
491 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
492 | "optional": true
493 | },
494 | "get-caller-file": {
495 | "version": "2.0.5",
496 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
497 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg=="
498 | },
499 | "get-port": {
500 | "version": "5.1.1",
501 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz",
502 | "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ=="
503 | },
504 | "get-stream": {
505 | "version": "3.0.0",
506 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
507 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
508 | },
509 | "glob-parent": {
510 | "version": "5.1.2",
511 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
512 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
513 | "requires": {
514 | "is-glob": "^4.0.1"
515 | }
516 | },
517 | "global-dirs": {
518 | "version": "0.1.1",
519 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
520 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
521 | "requires": {
522 | "ini": "^1.3.4"
523 | }
524 | },
525 | "got": {
526 | "version": "9.6.0",
527 | "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz",
528 | "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==",
529 | "requires": {
530 | "@sindresorhus/is": "^0.14.0",
531 | "@szmarczak/http-timer": "^1.1.2",
532 | "cacheable-request": "^6.0.0",
533 | "decompress-response": "^3.3.0",
534 | "duplexer3": "^0.1.4",
535 | "get-stream": "^4.1.0",
536 | "lowercase-keys": "^1.0.1",
537 | "mimic-response": "^1.0.1",
538 | "p-cancelable": "^1.0.0",
539 | "to-readable-stream": "^1.0.0",
540 | "url-parse-lax": "^3.0.0"
541 | },
542 | "dependencies": {
543 | "get-stream": {
544 | "version": "4.1.0",
545 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
546 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
547 | "requires": {
548 | "pump": "^3.0.0"
549 | }
550 | }
551 | }
552 | },
553 | "graceful-fs": {
554 | "version": "4.2.4",
555 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
556 | "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw=="
557 | },
558 | "has-ansi": {
559 | "version": "2.0.0",
560 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
561 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
562 | "requires": {
563 | "ansi-regex": "^2.0.0"
564 | },
565 | "dependencies": {
566 | "ansi-regex": {
567 | "version": "2.1.1",
568 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
569 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
570 | }
571 | }
572 | },
573 | "has-flag": {
574 | "version": "3.0.0",
575 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
576 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
577 | },
578 | "has-yarn": {
579 | "version": "2.1.0",
580 | "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz",
581 | "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw=="
582 | },
583 | "http-cache-semantics": {
584 | "version": "4.1.1",
585 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
586 | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ=="
587 | },
588 | "http-errors": {
589 | "version": "1.7.3",
590 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz",
591 | "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==",
592 | "requires": {
593 | "depd": "~1.1.2",
594 | "inherits": "2.0.4",
595 | "setprototypeof": "1.1.1",
596 | "statuses": ">= 1.5.0 < 2",
597 | "toidentifier": "1.0.0"
598 | }
599 | },
600 | "import-lazy": {
601 | "version": "2.1.0",
602 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
603 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM="
604 | },
605 | "imurmurhash": {
606 | "version": "0.1.4",
607 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
608 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o="
609 | },
610 | "inherits": {
611 | "version": "2.0.4",
612 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
613 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
614 | },
615 | "ini": {
616 | "version": "1.3.8",
617 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
618 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
619 | },
620 | "is-binary-path": {
621 | "version": "2.1.0",
622 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
623 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
624 | "requires": {
625 | "binary-extensions": "^2.0.0"
626 | }
627 | },
628 | "is-ci": {
629 | "version": "2.0.0",
630 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
631 | "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
632 | "requires": {
633 | "ci-info": "^2.0.0"
634 | }
635 | },
636 | "is-extglob": {
637 | "version": "2.1.1",
638 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
639 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
640 | },
641 | "is-fullwidth-code-point": {
642 | "version": "2.0.0",
643 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
644 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
645 | },
646 | "is-glob": {
647 | "version": "4.0.1",
648 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
649 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
650 | "requires": {
651 | "is-extglob": "^2.1.1"
652 | }
653 | },
654 | "is-installed-globally": {
655 | "version": "0.1.0",
656 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
657 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
658 | "requires": {
659 | "global-dirs": "^0.1.0",
660 | "is-path-inside": "^1.0.0"
661 | }
662 | },
663 | "is-npm": {
664 | "version": "3.0.0",
665 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-3.0.0.tgz",
666 | "integrity": "sha512-wsigDr1Kkschp2opC4G3yA6r9EgVA6NjRpWzIi9axXqeIaAATPRJc4uLujXe3Nd9uO8KoDyA4MD6aZSeXTADhA=="
667 | },
668 | "is-number": {
669 | "version": "7.0.0",
670 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
671 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="
672 | },
673 | "is-obj": {
674 | "version": "1.0.1",
675 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
676 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
677 | },
678 | "is-path-inside": {
679 | "version": "1.0.1",
680 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
681 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
682 | "requires": {
683 | "path-is-inside": "^1.0.1"
684 | }
685 | },
686 | "is-stream": {
687 | "version": "1.1.0",
688 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
689 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
690 | },
691 | "is-wsl": {
692 | "version": "1.1.0",
693 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz",
694 | "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0="
695 | },
696 | "is-yarn-global": {
697 | "version": "0.3.0",
698 | "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz",
699 | "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw=="
700 | },
701 | "isexe": {
702 | "version": "2.0.0",
703 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
704 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
705 | },
706 | "json-buffer": {
707 | "version": "3.0.0",
708 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
709 | "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
710 | },
711 | "jsonfile": {
712 | "version": "4.0.0",
713 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
714 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
715 | "requires": {
716 | "graceful-fs": "^4.1.6"
717 | }
718 | },
719 | "keyv": {
720 | "version": "3.1.0",
721 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz",
722 | "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==",
723 | "requires": {
724 | "json-buffer": "3.0.0"
725 | }
726 | },
727 | "latest-version": {
728 | "version": "5.1.0",
729 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
730 | "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==",
731 | "requires": {
732 | "package-json": "^6.3.0"
733 | }
734 | },
735 | "livereload": {
736 | "version": "0.9.1",
737 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz",
738 | "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==",
739 | "requires": {
740 | "chokidar": "^3.3.0",
741 | "livereload-js": "^3.1.0",
742 | "opts": ">= 1.2.0",
743 | "ws": "^6.2.1"
744 | }
745 | },
746 | "livereload-js": {
747 | "version": "3.2.4",
748 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.2.4.tgz",
749 | "integrity": "sha512-kgTCrrYAfwnb5469+7bB2hxIct8Giq0RemDnxOESIzyRwRqYGGMZh5VIveYqJiDvpglH0dpd074BU1zJj4NaNw=="
750 | },
751 | "locate-path": {
752 | "version": "3.0.0",
753 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
754 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
755 | "requires": {
756 | "p-locate": "^3.0.0",
757 | "path-exists": "^3.0.0"
758 | }
759 | },
760 | "lowercase-keys": {
761 | "version": "1.0.1",
762 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
763 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA=="
764 | },
765 | "lru-cache": {
766 | "version": "5.1.1",
767 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
768 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
769 | "requires": {
770 | "yallist": "^3.0.2"
771 | }
772 | },
773 | "make-dir": {
774 | "version": "3.1.0",
775 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
776 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
777 | "requires": {
778 | "semver": "^6.0.0"
779 | }
780 | },
781 | "marked": {
782 | "version": "1.2.9",
783 | "resolved": "https://registry.npmjs.org/marked/-/marked-1.2.9.tgz",
784 | "integrity": "sha512-H8lIX2SvyitGX+TRdtS06m1jHMijKN/XjfH6Ooii9fvxMlh8QdqBfBDkGUpMWH2kQNrtixjzYUa3SH8ROTgRRw=="
785 | },
786 | "medium-zoom": {
787 | "version": "1.0.6",
788 | "resolved": "https://registry.npmjs.org/medium-zoom/-/medium-zoom-1.0.6.tgz",
789 | "integrity": "sha512-UdiUWfvz9fZMg1pzf4dcuqA0W079o0mpqbTnOz5ip4VGYX96QjmbM+OgOU/0uOzAytxC0Ny4z+VcYQnhdifimg=="
790 | },
791 | "mime": {
792 | "version": "1.6.0",
793 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
794 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
795 | },
796 | "mimic-response": {
797 | "version": "1.0.1",
798 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz",
799 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ=="
800 | },
801 | "min-indent": {
802 | "version": "1.0.1",
803 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz",
804 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg=="
805 | },
806 | "minimist": {
807 | "version": "1.2.6",
808 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
809 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
810 | },
811 | "ms": {
812 | "version": "2.0.0",
813 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
814 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
815 | },
816 | "nested-error-stacks": {
817 | "version": "2.1.0",
818 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
819 | "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug=="
820 | },
821 | "node-fetch": {
822 | "version": "2.6.7",
823 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
824 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
825 | "requires": {
826 | "whatwg-url": "^5.0.0"
827 | }
828 | },
829 | "normalize-path": {
830 | "version": "3.0.0",
831 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
832 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="
833 | },
834 | "normalize-url": {
835 | "version": "4.5.1",
836 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz",
837 | "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA=="
838 | },
839 | "npm-run-path": {
840 | "version": "2.0.2",
841 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
842 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
843 | "requires": {
844 | "path-key": "^2.0.0"
845 | }
846 | },
847 | "on-finished": {
848 | "version": "2.3.0",
849 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
850 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
851 | "requires": {
852 | "ee-first": "1.1.1"
853 | }
854 | },
855 | "once": {
856 | "version": "1.4.0",
857 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
858 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
859 | "requires": {
860 | "wrappy": "1"
861 | }
862 | },
863 | "open": {
864 | "version": "6.4.0",
865 | "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz",
866 | "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==",
867 | "requires": {
868 | "is-wsl": "^1.1.0"
869 | }
870 | },
871 | "opencollective-postinstall": {
872 | "version": "2.0.3",
873 | "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
874 | "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
875 | },
876 | "opts": {
877 | "version": "2.0.0",
878 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.0.tgz",
879 | "integrity": "sha512-rPleeyX48sBEc4aj7rAok5dCbvRdYpdbIdSRR4gnIK98a7Rvd4l3wlv4YHQr2mwPQTpKQiw8uipi/WoyItDINg=="
880 | },
881 | "p-cancelable": {
882 | "version": "1.1.0",
883 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz",
884 | "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw=="
885 | },
886 | "p-event": {
887 | "version": "4.2.0",
888 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz",
889 | "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==",
890 | "requires": {
891 | "p-timeout": "^3.1.0"
892 | }
893 | },
894 | "p-finally": {
895 | "version": "1.0.0",
896 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
897 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
898 | },
899 | "p-limit": {
900 | "version": "2.3.0",
901 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
902 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
903 | "requires": {
904 | "p-try": "^2.0.0"
905 | }
906 | },
907 | "p-locate": {
908 | "version": "3.0.0",
909 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
910 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
911 | "requires": {
912 | "p-limit": "^2.0.0"
913 | }
914 | },
915 | "p-timeout": {
916 | "version": "3.2.0",
917 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz",
918 | "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==",
919 | "requires": {
920 | "p-finally": "^1.0.0"
921 | }
922 | },
923 | "p-try": {
924 | "version": "2.2.0",
925 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
926 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ=="
927 | },
928 | "package-json": {
929 | "version": "6.5.0",
930 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz",
931 | "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==",
932 | "requires": {
933 | "got": "^9.6.0",
934 | "registry-auth-token": "^4.0.0",
935 | "registry-url": "^5.0.0",
936 | "semver": "^6.2.0"
937 | }
938 | },
939 | "parent-require": {
940 | "version": "1.0.0",
941 | "resolved": "https://registry.npmjs.org/parent-require/-/parent-require-1.0.0.tgz",
942 | "integrity": "sha1-dGoWdjgIOoYLDu9nMssn7UbDKXc="
943 | },
944 | "parseurl": {
945 | "version": "1.3.3",
946 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
947 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
948 | },
949 | "path-exists": {
950 | "version": "3.0.0",
951 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
952 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
953 | },
954 | "path-is-inside": {
955 | "version": "1.0.2",
956 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
957 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM="
958 | },
959 | "path-key": {
960 | "version": "2.0.1",
961 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
962 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
963 | },
964 | "picomatch": {
965 | "version": "2.2.2",
966 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
967 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg=="
968 | },
969 | "pify": {
970 | "version": "3.0.0",
971 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
972 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
973 | },
974 | "prepend-http": {
975 | "version": "2.0.0",
976 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
977 | "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
978 | },
979 | "prismjs": {
980 | "version": "1.27.0",
981 | "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz",
982 | "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA=="
983 | },
984 | "pseudomap": {
985 | "version": "1.0.2",
986 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
987 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
988 | },
989 | "pump": {
990 | "version": "3.0.0",
991 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
992 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
993 | "requires": {
994 | "end-of-stream": "^1.1.0",
995 | "once": "^1.3.1"
996 | }
997 | },
998 | "range-parser": {
999 | "version": "1.2.1",
1000 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1001 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1002 | },
1003 | "rc": {
1004 | "version": "1.2.8",
1005 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1006 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1007 | "requires": {
1008 | "deep-extend": "^0.6.0",
1009 | "ini": "~1.3.0",
1010 | "minimist": "^1.2.0",
1011 | "strip-json-comments": "~2.0.1"
1012 | }
1013 | },
1014 | "readdirp": {
1015 | "version": "3.4.0",
1016 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
1017 | "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
1018 | "requires": {
1019 | "picomatch": "^2.2.1"
1020 | }
1021 | },
1022 | "registry-auth-token": {
1023 | "version": "4.2.0",
1024 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.0.tgz",
1025 | "integrity": "sha512-P+lWzPrsgfN+UEpDS3U8AQKg/UjZX6mQSJueZj3EK+vNESoqBSpBUD3gmu4sF9lOsjXWjF11dQKUqemf3veq1w==",
1026 | "requires": {
1027 | "rc": "^1.2.8"
1028 | }
1029 | },
1030 | "registry-url": {
1031 | "version": "5.1.0",
1032 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz",
1033 | "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==",
1034 | "requires": {
1035 | "rc": "^1.2.8"
1036 | }
1037 | },
1038 | "require-directory": {
1039 | "version": "2.1.1",
1040 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
1041 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
1042 | },
1043 | "require-main-filename": {
1044 | "version": "2.0.0",
1045 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
1046 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg=="
1047 | },
1048 | "resolve-pathname": {
1049 | "version": "3.0.0",
1050 | "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz",
1051 | "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng=="
1052 | },
1053 | "responselike": {
1054 | "version": "1.0.2",
1055 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
1056 | "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
1057 | "requires": {
1058 | "lowercase-keys": "^1.0.0"
1059 | }
1060 | },
1061 | "semver": {
1062 | "version": "6.3.1",
1063 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
1064 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
1065 | },
1066 | "semver-diff": {
1067 | "version": "2.1.0",
1068 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1069 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1070 | "requires": {
1071 | "semver": "^5.0.3"
1072 | },
1073 | "dependencies": {
1074 | "semver": {
1075 | "version": "5.7.2",
1076 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
1077 | "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g=="
1078 | }
1079 | }
1080 | },
1081 | "send": {
1082 | "version": "0.17.1",
1083 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1084 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1085 | "requires": {
1086 | "debug": "2.6.9",
1087 | "depd": "~1.1.2",
1088 | "destroy": "~1.0.4",
1089 | "encodeurl": "~1.0.2",
1090 | "escape-html": "~1.0.3",
1091 | "etag": "~1.8.1",
1092 | "fresh": "0.5.2",
1093 | "http-errors": "~1.7.2",
1094 | "mime": "1.6.0",
1095 | "ms": "2.1.1",
1096 | "on-finished": "~2.3.0",
1097 | "range-parser": "~1.2.1",
1098 | "statuses": "~1.5.0"
1099 | },
1100 | "dependencies": {
1101 | "ms": {
1102 | "version": "2.1.1",
1103 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1104 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1105 | }
1106 | }
1107 | },
1108 | "serve-static": {
1109 | "version": "1.14.1",
1110 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1111 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1112 | "requires": {
1113 | "encodeurl": "~1.0.2",
1114 | "escape-html": "~1.0.3",
1115 | "parseurl": "~1.3.3",
1116 | "send": "0.17.1"
1117 | }
1118 | },
1119 | "set-blocking": {
1120 | "version": "2.0.0",
1121 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1122 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1123 | },
1124 | "setprototypeof": {
1125 | "version": "1.1.1",
1126 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1127 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1128 | },
1129 | "shebang-command": {
1130 | "version": "1.2.0",
1131 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1132 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1133 | "requires": {
1134 | "shebang-regex": "^1.0.0"
1135 | }
1136 | },
1137 | "shebang-regex": {
1138 | "version": "1.0.0",
1139 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1140 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
1141 | },
1142 | "signal-exit": {
1143 | "version": "3.0.3",
1144 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
1145 | "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA=="
1146 | },
1147 | "statuses": {
1148 | "version": "1.5.0",
1149 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1150 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1151 | },
1152 | "string-width": {
1153 | "version": "3.1.0",
1154 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
1155 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
1156 | "requires": {
1157 | "emoji-regex": "^7.0.1",
1158 | "is-fullwidth-code-point": "^2.0.0",
1159 | "strip-ansi": "^5.1.0"
1160 | }
1161 | },
1162 | "strip-ansi": {
1163 | "version": "5.2.0",
1164 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
1165 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
1166 | "requires": {
1167 | "ansi-regex": "^4.1.0"
1168 | }
1169 | },
1170 | "strip-eof": {
1171 | "version": "1.0.0",
1172 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
1173 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
1174 | },
1175 | "strip-indent": {
1176 | "version": "3.0.0",
1177 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz",
1178 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==",
1179 | "requires": {
1180 | "min-indent": "^1.0.0"
1181 | }
1182 | },
1183 | "strip-json-comments": {
1184 | "version": "2.0.1",
1185 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1186 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
1187 | },
1188 | "supports-color": {
1189 | "version": "5.5.0",
1190 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1191 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1192 | "requires": {
1193 | "has-flag": "^3.0.0"
1194 | }
1195 | },
1196 | "term-size": {
1197 | "version": "1.2.0",
1198 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
1199 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
1200 | "requires": {
1201 | "execa": "^0.7.0"
1202 | }
1203 | },
1204 | "tinydate": {
1205 | "version": "1.3.0",
1206 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz",
1207 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w=="
1208 | },
1209 | "to-readable-stream": {
1210 | "version": "1.0.0",
1211 | "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz",
1212 | "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q=="
1213 | },
1214 | "to-regex-range": {
1215 | "version": "5.0.1",
1216 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1217 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1218 | "requires": {
1219 | "is-number": "^7.0.0"
1220 | }
1221 | },
1222 | "toidentifier": {
1223 | "version": "1.0.0",
1224 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1225 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1226 | },
1227 | "tr46": {
1228 | "version": "0.0.3",
1229 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1230 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
1231 | },
1232 | "tweezer.js": {
1233 | "version": "1.5.0",
1234 | "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz",
1235 | "integrity": "sha512-aSiJz7rGWNAQq7hjMK9ZYDuEawXupcCWgl3woQQSoDP2Oh8O4srWb/uO1PzzHIsrPEOqrjJ2sUb9FERfzuBabQ=="
1236 | },
1237 | "type-fest": {
1238 | "version": "0.3.1",
1239 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz",
1240 | "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ=="
1241 | },
1242 | "unique-string": {
1243 | "version": "1.0.0",
1244 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
1245 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
1246 | "requires": {
1247 | "crypto-random-string": "^1.0.0"
1248 | }
1249 | },
1250 | "universalify": {
1251 | "version": "0.1.2",
1252 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
1253 | "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
1254 | },
1255 | "unpipe": {
1256 | "version": "1.0.0",
1257 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1258 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1259 | },
1260 | "update-notifier": {
1261 | "version": "3.0.1",
1262 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-3.0.1.tgz",
1263 | "integrity": "sha512-grrmrB6Zb8DUiyDIaeRTBCkgISYUgETNe7NglEbVsrLWXeESnlCSP50WfRSj/GmzMPl6Uchj24S/p80nP/ZQrQ==",
1264 | "requires": {
1265 | "boxen": "^3.0.0",
1266 | "chalk": "^2.0.1",
1267 | "configstore": "^4.0.0",
1268 | "has-yarn": "^2.1.0",
1269 | "import-lazy": "^2.1.0",
1270 | "is-ci": "^2.0.0",
1271 | "is-installed-globally": "^0.1.0",
1272 | "is-npm": "^3.0.0",
1273 | "is-yarn-global": "^0.3.0",
1274 | "latest-version": "^5.0.0",
1275 | "semver-diff": "^2.0.0",
1276 | "xdg-basedir": "^3.0.0"
1277 | }
1278 | },
1279 | "url-parse-lax": {
1280 | "version": "3.0.0",
1281 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
1282 | "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
1283 | "requires": {
1284 | "prepend-http": "^2.0.0"
1285 | }
1286 | },
1287 | "utils-merge": {
1288 | "version": "1.0.1",
1289 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1290 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1291 | },
1292 | "webidl-conversions": {
1293 | "version": "3.0.1",
1294 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1295 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
1296 | },
1297 | "whatwg-url": {
1298 | "version": "5.0.0",
1299 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1300 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
1301 | "requires": {
1302 | "tr46": "~0.0.3",
1303 | "webidl-conversions": "^3.0.0"
1304 | }
1305 | },
1306 | "which": {
1307 | "version": "1.3.1",
1308 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1309 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1310 | "requires": {
1311 | "isexe": "^2.0.0"
1312 | }
1313 | },
1314 | "which-module": {
1315 | "version": "2.0.0",
1316 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
1317 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
1318 | },
1319 | "widest-line": {
1320 | "version": "2.0.1",
1321 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
1322 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
1323 | "requires": {
1324 | "string-width": "^2.1.1"
1325 | },
1326 | "dependencies": {
1327 | "ansi-regex": {
1328 | "version": "3.0.1",
1329 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz",
1330 | "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw=="
1331 | },
1332 | "string-width": {
1333 | "version": "2.1.1",
1334 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1335 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1336 | "requires": {
1337 | "is-fullwidth-code-point": "^2.0.0",
1338 | "strip-ansi": "^4.0.0"
1339 | }
1340 | },
1341 | "strip-ansi": {
1342 | "version": "4.0.0",
1343 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1344 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1345 | "requires": {
1346 | "ansi-regex": "^3.0.0"
1347 | }
1348 | }
1349 | }
1350 | },
1351 | "wrap-ansi": {
1352 | "version": "5.1.0",
1353 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
1354 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
1355 | "requires": {
1356 | "ansi-styles": "^3.2.0",
1357 | "string-width": "^3.0.0",
1358 | "strip-ansi": "^5.0.0"
1359 | }
1360 | },
1361 | "wrappy": {
1362 | "version": "1.0.2",
1363 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1364 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1365 | },
1366 | "write-file-atomic": {
1367 | "version": "2.4.3",
1368 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
1369 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
1370 | "requires": {
1371 | "graceful-fs": "^4.1.11",
1372 | "imurmurhash": "^0.1.4",
1373 | "signal-exit": "^3.0.2"
1374 | }
1375 | },
1376 | "ws": {
1377 | "version": "6.2.2",
1378 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz",
1379 | "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==",
1380 | "requires": {
1381 | "async-limiter": "~1.0.0"
1382 | }
1383 | },
1384 | "xdg-basedir": {
1385 | "version": "3.0.0",
1386 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
1387 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ="
1388 | },
1389 | "y18n": {
1390 | "version": "4.0.1",
1391 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz",
1392 | "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ=="
1393 | },
1394 | "yallist": {
1395 | "version": "3.1.1",
1396 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1397 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
1398 | },
1399 | "yargonaut": {
1400 | "version": "1.1.4",
1401 | "resolved": "https://registry.npmjs.org/yargonaut/-/yargonaut-1.1.4.tgz",
1402 | "integrity": "sha512-rHgFmbgXAAzl+1nngqOcwEljqHGG9uUZoPjsdZEs1w5JW9RXYzrSvH/u70C1JE5qFi0qjsdhnUX/dJRpWqitSA==",
1403 | "requires": {
1404 | "chalk": "^1.1.1",
1405 | "figlet": "^1.1.1",
1406 | "parent-require": "^1.0.0"
1407 | },
1408 | "dependencies": {
1409 | "ansi-regex": {
1410 | "version": "2.1.1",
1411 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
1412 | "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA=="
1413 | },
1414 | "ansi-styles": {
1415 | "version": "2.2.1",
1416 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
1417 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="
1418 | },
1419 | "chalk": {
1420 | "version": "1.1.3",
1421 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
1422 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
1423 | "requires": {
1424 | "ansi-styles": "^2.2.1",
1425 | "escape-string-regexp": "^1.0.2",
1426 | "has-ansi": "^2.0.0",
1427 | "strip-ansi": "^3.0.0",
1428 | "supports-color": "^2.0.0"
1429 | }
1430 | },
1431 | "strip-ansi": {
1432 | "version": "3.0.1",
1433 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1434 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1435 | "requires": {
1436 | "ansi-regex": "^2.0.0"
1437 | }
1438 | },
1439 | "supports-color": {
1440 | "version": "2.0.0",
1441 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
1442 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc="
1443 | }
1444 | }
1445 | },
1446 | "yargs": {
1447 | "version": "14.2.3",
1448 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz",
1449 | "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==",
1450 | "requires": {
1451 | "cliui": "^5.0.0",
1452 | "decamelize": "^1.2.0",
1453 | "find-up": "^3.0.0",
1454 | "get-caller-file": "^2.0.1",
1455 | "require-directory": "^2.1.1",
1456 | "require-main-filename": "^2.0.0",
1457 | "set-blocking": "^2.0.0",
1458 | "string-width": "^3.0.0",
1459 | "which-module": "^2.0.0",
1460 | "y18n": "^4.0.0",
1461 | "yargs-parser": "^15.0.1"
1462 | }
1463 | },
1464 | "yargs-parser": {
1465 | "version": "15.0.1",
1466 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz",
1467 | "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==",
1468 | "requires": {
1469 | "camelcase": "^5.0.0",
1470 | "decamelize": "^1.2.0"
1471 | }
1472 | }
1473 | }
1474 | }
1475 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "max-websocket-docs",
3 | "description": "websocket endpoint: `wss://max-stream.maicoin.com/ws`",
4 | "version": "1.0.0",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "docsify serve .",
8 | "test": "echo \"Error: no test specified\" && exit 1"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "git+https://github.com/maicoin/max-websocket-docs.git"
13 | },
14 | "author": "LY Cheng",
15 | "license": "ISC",
16 | "bugs": {
17 | "url": "https://github.com/maicoin/max-websocket-docs/issues"
18 | },
19 | "homepage": "https://github.com/maicoin/max-websocket-docs#readme",
20 | "dependencies": {
21 | "docsify-cli": "^4.4.1"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/private_channels.md:
--------------------------------------------------------------------------------
1 | # Private channels subscription
2 |
3 | Please see [Authentication](authentication.md) first.
4 |
5 | ## Order response
6 |
7 | This channel is designed to help you in tracking your open orders. When authenticating with the `order` filter specified, we will first return all of your existing open orders (also known as an order snapshot). Subsequently, if there are any updates to your orders, we will return order update messages.
8 |
9 | ### Field
10 |
11 | | Abbr | Type | Description |
12 | | --------------- | --------------------------| -----------------------------------------------------|
13 | | `c` | string | channel
14 | | `e` | string | event (`order_snapshot` or `order_update`)
15 | | `o` | array of orders | orders
16 | | (under the `o`) | --- | ---
17 | | `i` | int | id
18 | | `sd` | string | side (`bid` or `ask`)
19 | | `ot` | string | order type (`limit`, `market`, `stop_limit`, `stop_market`, `post_only` or `ioc_limit`)
20 | | `p` | string of float | price
21 | | `sp` | string of float or `null` | stop price
22 | | `ap` | string of float | average price
23 | | `v` | string of float | volume
24 | | `rv` | string of float | remain volume
25 | | `ev` | string of float | executed volume
26 | | `S` | string | state
27 | | `M` | string | market
28 | | `tc` | int | trade count
29 | | `T` | int | order created time, unix timestamp in millisecond
30 | | `TU` | int | order updated time, unix timestamp in millisecond
31 | | `gi` | int or `null` | group order id
32 | | `ci` | string or `null` | client specific order id
33 |
34 | ### Snapshot
35 |
36 | ```json
37 | {
38 | "c": "user",
39 | "e": "order_snapshot",
40 | "o": [{
41 | "i": 87,
42 | "sd": "bid",
43 | "ot": "limit",
44 | "p": "21499.0",
45 | "sp": "21499.0",
46 | "ap": "21499.0",
47 | "v": "0.2658",
48 | "rv": "0.0",
49 | "ev": "0.2658",
50 | "S": "done",
51 | "M": "ethtwd",
52 | "tc": 1,
53 | "T": 1659419048000,
54 | "TU": 1659419048406,
55 | "gi": 123,
56 | "ci": "client-oid-1"
57 | }, ...],
58 | "T": 1521726960357
59 | }
60 | ```
61 |
62 | ### Update
63 |
64 | ```json
65 | {
66 | "c": "user",
67 | "e": "order_update",
68 | "o": [{
69 | "i": 87,
70 | "sd": "bid",
71 | "ot": "limit",
72 | "p": "21499.0",
73 | "sp": "21499.0",
74 | "ap": "21499.0",
75 | "S": "done",
76 | "M": "ethtwd",
77 | "T": 1521726960123,
78 | "TU": 1521726960123,
79 | "v": "0.2658",
80 | "rv": "0.0",
81 | "ev": "0.2658",
82 | "tc": 1,
83 | "ci": "client-oid-1",
84 | "gi": 123
85 | }, ...],
86 | "T": 1521726960357
87 | }
88 | ```
89 |
90 | ## Trade response
91 |
92 | This channel is created to assist you in monitoring your trades. When you authenticate with the `trade` filter specified, we will initially provide you with the last 100 trades as a trade snapshot. After that, if there are any updates to your trades, we will send you trade update messages.
93 |
94 | ### Field
95 |
96 | | Abbr | Type | Description |
97 | | --------------- | --------------------------| -----------------------------------------------------|
98 | | `c` | string | channel
99 | | `e` | string | event (`trade_snapshot` or `trade_update`)
100 | | `t` | array of trades | trades
101 | | (under the `t`) | --- | ---
102 | | `i` | int | id
103 | | `M` | string | market
104 | | `sd` | string | side (`bid` or `ask`)
105 | | `p` | string of float | price
106 | | `v` | string of float | volume
107 | | `f` | string of float | fee
108 | | `fc` | string | fee currency
109 | | `fd` | bool | fee is discounted or not (e.g. use MAX TOKEN to pay fee)
110 | | `fn` . | string | funds, the quote balance used in this trade.
111 | | `T` | int | trade created time, unix timestamp in millisecond
112 | | `TU` | int | trade updated time, unix timestamp in millisecond
113 | | `m` | bool | maker
114 | | `oi` | int | order id
115 |
116 | ### Snapshot
117 | ```json
118 | {
119 | "c": "user",
120 | "e": "trade_snapshot",
121 | "t": [{
122 | "i": 68444,
123 | "M": "ethtwd",
124 | "sd": "bid",
125 | "p": "21499.0",
126 | "v": "0.2658",
127 | "f": "3.2",
128 | "fc": "twd",
129 | "fd": false,
130 | "fn": "5714.4342",
131 | "T": 1659216053748,
132 | "TU": 1659216054046,
133 | "m": true,
134 | "oi": 3253823664
135 | }, ...],
136 | "T": 1659412100259
137 | }
138 | ```
139 |
140 | ### Update
141 |
142 | ```json
143 | {
144 | "c": "user",
145 | "e": "trade_update",
146 | "t": [{
147 | "i": 68444,
148 | "M": "ethtwd",
149 | "sd": "bid",
150 | "p": "21499.0",
151 | "v": "0.2658",
152 | "f": "3.2",
153 | "fc": "twd",
154 | "fd": false,
155 | "fn": "5714.4342",
156 | "T": 1659216053748,
157 | "TU": 1659216054046,
158 | "m": true,
159 | "oi": 3253823664
160 | }],
161 | "T": 1521726960357
162 | }
163 | ```
164 |
165 |
166 | ## Fast trade response
167 |
168 | This is similar to the trade_update channel, but it excludes the `fee` related fields, making it faster.
169 |
170 | ### Field
171 |
172 | | Abbr | Type | Description |
173 | | --------------- | --------------------------| -----------------------------------------------------|
174 | | `c` | string | channel
175 | | `e` | string | event (`fast_trade_update`)
176 | | `t` | array of trades | trades
177 | | (under the `t`) | --- | ---
178 | | `i` | int | id
179 | | `M` | string | market
180 | | `sd` | string | side (`bid` or `ask`)
181 | | `p` | string of float | price
182 | | `v` | string of float | volume
183 | | `fn` . | string | funds, the quote balance used in this trade.
184 | | `T` | int | trade created time, unix timestamp in millisecond
185 | | `TU` | int | trade updated time, unix timestamp in millisecond
186 | | `m` | bool | maker
187 | | `oi` | int | order id
188 |
189 | ### Update
190 |
191 | ```json
192 | {
193 | "c": "user",
194 | "e": "fast_trade_update",
195 | "t": [{
196 | "i": 68444,
197 | "M": "ethtwd",
198 | "sd": "bid",
199 | "p": "21499.0",
200 | "v": "0.2658",
201 | "fn": "5714.4342",
202 | "T": 1659216053748,
203 | "TU": 1659216054046,
204 | "m": true,
205 | "oi": 3253823664
206 | }],
207 | "T": 1521726960357
208 | }
209 | ```
210 |
211 | ## Account response
212 |
213 | This channel provides you with information regarding your account balances. When you authenticate with the `account` filter specified, we will initially provide you with a snapshot message that includes all currencies in your wallet. Subsequently, if there is any change in the balance of any currency, we will send you an update message.
214 |
215 | ### Field
216 |
217 | | Abbr | Type | Description
218 | | --------------- | ------------------------- |---------------
219 | | `c` | string | channel
220 | | `e` | string | event (`account_snapshot` or `account_update`)
221 | | `B` | array of balances | balances
222 | | (under the `B`) | --- | ---
223 | | `cu` | string | currency
224 | | `av` | string of float | available
225 | | `l` | string of float | locked
226 | | `stk` | string of float or `null` | staked
227 | | `TU` | int | balance updated time, unix timestamp in millisecond
228 |
229 | ### Snapshot
230 |
231 | ```json
232 | {
233 | "c": "user",
234 | "e": "account_snapshot",
235 | "B": [
236 | {
237 | "cu": "btc",
238 | "av": "123.4",
239 | "l": "0.5",
240 | "stk": null,
241 | "TU": 1659390246343,
242 | },
243 | ...
244 | ],
245 | "T": 1659412100181
246 | }
247 | ```
248 |
249 | ### Update
250 |
251 | ```json
252 | {
253 | "c": "user",
254 | "e": "account_update",
255 | "B": [
256 | {
257 | "cu": "btc",
258 | "av": "123.4",
259 | "l": "0.5",
260 | "stk": null,
261 | "TU": 1659390246343,
262 | }
263 | ],
264 | "T": 1659412100181,
265 | }
266 | ```
267 |
--------------------------------------------------------------------------------
/private_channels_mwallet.md:
--------------------------------------------------------------------------------
1 | # MWallet private channels subscription
2 |
3 | Please see [Authentication](authentication.md) first.
4 |
5 | If you want to subscribe MWallet related websocket channels, please specify following filters explicitly when you authenticate the websocket.
6 |
7 | Currently supported filters: `mwallet_order`, `mwallet_trade`, `mwallet_fast_trade_update`, `mwallet_account`, `ad_ratio` and `borrowing`.
8 |
9 | ## MWallet order response
10 |
11 | This channel is designed to help you in tracking your open orders of mwalletå. When authenticating with the `mwallet_order` filter specified, we will first return all of your existing open orders of mwallet. Subsequently, if there are any updates to your mwallet orders, we will return order update messages.
12 |
13 | ### Field
14 |
15 | | Abbr | Type | Description |
16 | | --------------- | --------------------------| -----------------------------------------------------|
17 | | `c` | string | channel
18 | | `e` | string | event (`mwallet_order_snapshot` or `mwallet_order_update`)
19 | | `o` | array of orders | orders
20 | | (under the `o`) | --- | ---
21 | | `i` | int | id
22 | | `sd` | string | side (`bid` or `ask`)
23 | | `ot` | string | order type (`limit`, `market`, `stop_limit`, `stop_market`, `post_only` or `ioc_limit`)
24 | | `p` | string of float | price
25 | | `sp` | string of float or `null` | stop price
26 | | `ap` | string of float | average price
27 | | `v` | string of float | volume
28 | | `rv` | string of float | remain volume
29 | | `ev` | string of float | executed volume
30 | | `S` | string | state
31 | | `M` | string | market
32 | | `tc` | int | trade count
33 | | `T` | int | order created time, unix timestamp in millisecond
34 | | `TU` | int | order updated time, unix timestamp in millisecond
35 | | `gi` | int or `null` | group order id
36 | | `ci` | string or `null` | client specific order id
37 |
38 | ### Snapshot
39 |
40 | ```json
41 | {
42 | "c": "user",
43 | "e": "mwallet_order_snapshot",
44 | "o": [
45 | {
46 | "i": 87,
47 | "sd": "bid",
48 | "ot": "limit",
49 | "p": "3320.49",
50 | "sp": null,
51 | "ap": "0.0",
52 | "v": "0.1",
53 | "rv": "0.1",
54 | "ev": "0.0",
55 | "S": "wait",
56 | "M": "ethusdt",
57 | "tc": 0,
58 | "T": 1633415952000,
59 | "TU": 1633415952701,
60 | "ci": "client-oid-1",
61 | "gi": 123 // group id
62 | }, ...],
63 | "T": 1633415952715
64 | }
65 | ```
66 |
67 | ### Update
68 |
69 | ```json
70 | {
71 | "c": "user",
72 | "e": "mwallet_order_update",
73 | "o": [{
74 | "i": 210233270,
75 | "sd": "bid",
76 | "ot": "limit",
77 | "p": "100.0",
78 | "sp": null,
79 | "ap": "0.0",
80 | "v": "0.1",
81 | "rv": "0.1",
82 | "ev": "0.0",
83 | "S": "cancel",
84 | "M": "ethusdt",
85 | "tc": 0,
86 | "T": 1633415966000,
87 | "TU": 1633415966001,
88 | "gi": null,
89 | "ci": null
90 | }],
91 | "T":1633415966510}
92 | ```
93 |
94 | ## MWallet trade response
95 |
96 | This channel is created to assist you in monitoring your mwallet trades. When you authenticate with the `mwallet_trade` filter specified, we will initially provide you with the last 100 trades as a trade snapshot. After that, if there are any updates to your mwallet trades, we will send you trade update messages.
97 |
98 | ### Field
99 |
100 | | Abbr | Type | Description |
101 | | --------------- | --------------------------| -----------------------------------------------------|
102 | | `c` | string | channel
103 | | `e` | string | event (`mwallet_trade_snapshot` or `mwallet_trade_update`)
104 | | `t` | array of trades | trades
105 | | (under the `t`) | --- | ---
106 | | `i` | int | id
107 | | `M` | string | market
108 | | `sd` | string | side (`bid` or `ask`)
109 | | `p` | string of float | price
110 | | `v` | string of float | volume
111 | | `f` | string of float | fee
112 | | `fc` | string | fee currency
113 | | `fn` . | string | funds, the quote balance used in this trade.
114 | | `T` | int | trade created time, unix timestamp in millisecond
115 | | `TU` | int | trade updated time, unix timestamp in millisecond
116 | | `m` | bool | maker
117 | | `oi` | int | order id
118 |
119 | ### Snapshot
120 | ```json
121 | {
122 | "c": "user",
123 | "e": "mwallet_trade_snapshot",
124 | "t": [{
125 | "i": 78, // trade id
126 | "M": "ethusdt",
127 | "sd": "bid",
128 | "p": "3320.49",
129 | "v": "0.1",
130 | "f": "0.00015",
131 | "fc": "eth",
132 | "fn":"77.38889",
133 | "T": 1633415966000,
134 | "TU": 1633415966001,
135 | "m": false, // maker
136 | "oi": 87
137 | }, ...],
138 | "T": 1521726960357
139 | }
140 | ```
141 |
142 | ### Update
143 | ```json
144 | {
145 | "c": "user",
146 | "e": "mwallet_trade_update",
147 | "t": [{
148 | "i": 78, // trade id
149 | "M": "ethusdt",
150 | "sd": "bid",
151 | "p": "3320.49",
152 | "v": "0.1",
153 | "f": "0.00015",
154 | "fc": "eth",
155 | "fn":"77.38889",
156 | "T": 1633359451377,
157 | "TU": 1633359451378,
158 | "m": false, // maker
159 | "oi": 123
160 | }],
161 | "T": 1521726960357
162 | }
163 | ```
164 |
165 |
166 | ## MWallet fast trade response
167 |
168 | This is similar to the mwallet_trade_update channel, but it excludes the `fee` related fields and without snapshot, making it faster.
169 |
170 | ### Field
171 |
172 | | Abbr | Type | Description |
173 | | --------------- | --------------------------| -----------------------------------------------------|
174 | | `c` | string | channel
175 | | `e` | string | event (`mwallet_fast_trade_update`)
176 | | `t` | array of trades | trades
177 | | (under the `t`) | --- | ---
178 | | `i` | int | id
179 | | `M` | string | market
180 | | `sd` | string | side (`bid` or `ask`)
181 | | `p` | string of float | price
182 | | `v` | string of float | volume
183 | | `fn` . | string | funds, the quote balance used in this trade.
184 | | `T` | int | trade created time, unix timestamp in millisecond
185 | | `TU` | int | trade updated time, unix timestamp in millisecond
186 | | `m` | bool | maker
187 | | `oi` | int | order id
188 |
189 |
190 | ### Update
191 | ```json
192 | {
193 | "c": "user",
194 | "e": "mwallet_fast_trade_update",
195 | "t": [{
196 | "i": 78, // trade id
197 | "M": "ethusdt",
198 | "sd": "bid",
199 | "p": "3320.49",
200 | "v": "0.1",
201 | "fn":"77.38889",
202 | "T": 1633359451377,
203 | "TU": 1633359451378,
204 | "m": false, // maker
205 | "oi": 123
206 | }],
207 | "T": 1521726960357
208 | }
209 | ```
210 |
211 | ## MWallet account response
212 |
213 | This channel provides you with information regarding your account balances of mwallet. When you authenticate with the `mwallet_account` filter specified, we will initially provide you with a snapshot message that includes all currencies in your mwallet. Subsequently, if there is any change in the balance of any currency, we will send you an update message.
214 |
215 | ### Field
216 |
217 | | Abbr | Type | Description
218 | | --------------- | ------------------------- |---------------
219 | | `c` | string | channel
220 | | `e` | string | event (`mwallet_account_snapshot` or `mwallet_account_update`)
221 | | `B` | array of balances | balances
222 | | (under the `B`) | --- | ---
223 | | `cu` | string | currency
224 | | `av` | string of float | available
225 | | `l` | string of float | locked
226 | | `stk` | string of float or `null` | staked
227 | | `TU` | int | balance updated time, unix timestamp in millisecond
228 |
229 | ### Snapshot
230 |
231 | ```json
232 | {
233 | "c": "user",
234 | "e": "mwallet_account_snapshot",
235 | "B": [
236 | {
237 | "cu": "btc",
238 | "av": "123.4",
239 | "l": "0.5",
240 | "stk": null,
241 | },
242 | ...
243 | ],
244 | "T": 1521726960357
245 | }
246 | ```
247 |
248 | ### Update
249 |
250 | ```json
251 | {
252 | "c": "user",
253 | "e": "mwallet_account_update",
254 | "B": [
255 | {
256 | "cu": "btc",
257 | "av": "123.4",
258 | "l": "0.5",
259 | "stk": null,
260 | },
261 | ...
262 | ],
263 | "T": 1521726960357,
264 | }
265 | ```
266 |
267 | ## MWallet AD ratio response
268 |
269 | This channel will return the message with your AD ratio of mwallet.
270 |
271 | ### Field
272 |
273 | | Abbr | Type | Description
274 | | --------------------- | ------------------------- |---------------
275 | | `c` | string | channel
276 | | `e` | string | event (`ad_ratio_snapshot` or `ad_ratio_update`)
277 | | `ad` | AD ratio | AD ratio
278 | | (under the `ad`) | --- | ---
279 | | `ad` | string of float | AD ratio
280 | | `as` | string of float | asset in usdt
281 | | `db` | string of float | debt in usdt
282 | | `TU` | int | updated time, unix timestamp in millisecond
283 | | `idxp` | array of index price | index price
284 | | (under the `ad.idxp`) | --- | ---
285 | | `M` | string | market of index price
286 | | `p` | string of float | price of index price
287 |
288 | ### Snapshot
289 |
290 | ```
291 | {
292 | "c": "user",
293 | "e": "ad_ratio_snapshot",
294 | "ad": {
295 | "ad": "38.08306432",
296 | "as": "132071.22",
297 | "db": "3467.97775784",
298 | "idxp": [
299 | {
300 | "M": "btcusdt",
301 | "p": "63190.045"
302 | },
303 | ...
304 | ],
305 | "TU": 1521726960300
306 | },
307 | "T": 1521726960357
308 | }
309 | ```
310 |
311 | ### Update
312 |
313 | ```
314 | {
315 | "c": "user",
316 | "e": "ad_ratio_update",
317 | "ad": {
318 | "ad": "38.08306432", // ad_ratio
319 | "as": "132071.22", // asset_in_usdt
320 | "db": "3467.97775784", // debt_in_usdt
321 | "idxp": [ // index price
322 | {
323 | "M": "btcusdt", // market
324 | "p": "63190.045" // price
325 | },
326 | ...
327 | ],
328 | "TU": 1521726960300 // updated_time
329 | },
330 | "T": 1521726960357
331 | }
332 | ```
333 |
334 | ## MWallet borrowing response
335 |
336 | This channel will return your borrowing principal and interest of mwallet.
337 |
338 | ### Field
339 |
340 | | Abbr | Type | Description
341 | | --------------- | ------------------------- |---------------
342 | | `c` | string | channel
343 | | `e` | string | event (`borrowing_snapshot` or `borrowing_update`)
344 | | `db` | array of debt |
345 | | (under the `db`)| --- | ---
346 | | `cu` | string | currency
347 | | `dbp` | string of float | debt principal
348 | | `dbi` | string of float | debt interest
349 | | `TU` | int | updated time, unix timestamp in millisecond
350 |
351 |
352 | ### Snapshot
353 |
354 | ```
355 | {
356 | "c": "user",
357 | "e": "borrowing_snapshot",
358 | "db": [
359 | {
360 | "cu": "usdt",
361 | "dbp": "500.0",
362 | "dbi": "0.00004488",
363 | "TU": 1521726960300
364 | }, ...
365 | ],
366 | "T": 1521726960357
367 | }
368 | ```
369 |
370 | ### Update
371 |
372 | ```
373 | {
374 | "c": "user",
375 | "e": "borrowing_update",
376 | "db": [
377 | {
378 | "cu": "usdt",
379 | "dbp": "500.0",
380 | "dbi": "0.00004488",
381 | "TU": 1521726960300
382 | }
383 | ],
384 | "T": 1521726960357
385 | }
386 | ```
--------------------------------------------------------------------------------
/public_channels.md:
--------------------------------------------------------------------------------
1 | # Public Channel Subscription
2 |
3 | ## Subscribe
4 | You can specify an id to mark your request, and it will be your reference for response.
5 |
6 | ```json
7 | {
8 | "action": "sub",
9 | "subscriptions": [
10 | {"channel": "book", "market": "btctwd", "depth": 1},
11 | {"channel": "trade", "market": "btctwd"}
12 | ],
13 | "id": "client1"
14 | }
15 | ```
16 | ## Subscribe success response
17 | ```json
18 | {
19 | "e": "subscribed",
20 | "s": [
21 | {"channel": "book", "market": "btctwd", "depth": 1},
22 | {"channel": "trade", "market": "btctwd"}
23 | ],
24 | "i": "client1",
25 | "T": 123456789
26 | }
27 | ```
28 | ## Unsubscribe
29 | ```json
30 | {
31 | "action": "unsub",
32 | "subscription": [
33 | {"channel": "book", "market": "btctwd", "depth": 1},
34 | {"channel": "trade", "market": "btctwd" }
35 | ]
36 | "id": "client1"
37 | }
38 | ```
39 |
40 | ## Unsubscribe success response
41 | ```json
42 | {
43 | "e": "unsubscribed",
44 | "s": [
45 | {"channel": "book", "market": "btctwd", "depth": 1},
46 | {"channel": "trade", "market": "btctwd"}
47 | ],
48 | "i": "client1",
49 | "T": 123456789
50 | }
51 | ```
--------------------------------------------------------------------------------
/public_kline.md:
--------------------------------------------------------------------------------
1 | # Kline subscription
2 |
3 | The kline channel is primarily designed to provide kline data. When subscribing, you need to specify the kline channel and market. Additionally, we offer a `resolution` field that allows you to subscribe to kline data with different resolutions. The available resolution options include `1m`, `5m`, `15m`, `30m`, `1h`, `2h`, `4h`, `6h`, `12h`, and `1d`.
4 |
5 | If you don't specify a resolution, the default value is set to `1m`.
6 |
7 | ```json
8 | {
9 | "channel": "kline",
10 | "market": "ethusdt",
11 | "resolution": "1m" // optional
12 | }
13 | ```
14 |
15 | ## Success response
16 |
17 | ### Field
18 |
19 | | Abbr | Type | Description |
20 | | ---------------- | --------------------------| -----------------------------------------------------|
21 | | `c` | string | channel
22 | | `e` | string | event (`snapshot` or `update`)
23 | | `k` | kline data | kline
24 | | (under the `k`) | --- | ---
25 | | `ST` | int | start time, unix timestamp in millisecond
26 | | `ET` | int | end time, unix timestamp in millisecond
27 | | `M` | string | market
28 | | `R` | string | resolution
29 | | `O` | string of float | open
30 | | `H` | string of float | high
31 | | `L` | string of float | low
32 | | `C` | string of float | close
33 | | `v` | string of float | volume
34 | | `ti` | int | last trade id
35 | | `x` | bool | closed
36 |
37 | ### Snapshot
38 |
39 | ```json
40 | {
41 | "c": "kline",
42 | "M": "ethusdt",
43 | "e": "snapshot",
44 | "T": 1684743644396,
45 | "k": {
46 | "ST": 1684743600000,
47 | "ET": 1684743659999,
48 | "M": "ethusdt",
49 | "R": "1m",
50 | "O": "1815.11",
51 | "H": "1815.11",
52 | "L": "1815.11",
53 | "C": "1815.11",
54 | "v": "0",
55 | "ti": 58684589,
56 | "x": false
57 | }
58 | }
59 | ```
60 |
61 | ### Update
62 |
63 | ```json
64 | {
65 | "c": "kline",
66 | "M": "ethusdt",
67 | "e": "update",
68 | "T": 1684743650395,
69 | "k": {
70 | "ST": 1684743600000,
71 | "ET": 1684743659999,
72 | "M": "ethusdt",
73 | "R": "1m",
74 | "O": "1815.11",
75 | "H": "1815.11",
76 | "L": "1815.11",
77 | "C": "1815.11",
78 | "v": "0",
79 | "ti": 58684589,
80 | "x": false
81 | }
82 | }
83 | ```
--------------------------------------------------------------------------------
/public_market_status.md:
--------------------------------------------------------------------------------
1 | # Market status subscription
2 |
3 | This channel will provide the market status of Max platform.
4 |
5 | ```json
6 | {
7 | "channel": "market_status"
8 | }
9 | ```
10 |
11 | ## Success response
12 |
13 | ### Field
14 |
15 | | Abbr | Type | Description |
16 | | ---------------- | --------------------------| -----------------------------------------------------|
17 | | `c` | string | channel
18 | | `e` | string | event (`snapshot` or `update`)
19 | | `ms` | array of market status | market status
20 | | (under the `ms`) | --- | ---
21 | | `M` | string | market
22 | | `st` | string | status (`active`, `suspended` or `cancel-only`)
23 | | `bu` | string | base unit
24 | | `bup` | int | base unit precision
25 | | `mba` | float | minimal base amount
26 | | `qu` | string | quote unit
27 | | `qup` | int | quote unit precision
28 | | `mqa` | float | minimal quote amount
29 | | `mws` | bool | mwallet supported
30 |
31 | ### Snapshot
32 |
33 | ```json
34 | {
35 | "c": "market_status",
36 | "e": "snaptshot",
37 | "ms": [{
38 | "M": "btctwd",
39 | "st": "active",
40 | "bu": "btc",
41 | "bup": 8,
42 | "mba": 0.0004,
43 | "qu": "twd",
44 | "qup": 1,
45 | "mqa": 250,
46 | "mws": true
47 | }, ...],
48 | "T": 1659428472313
49 | }
50 | ```
51 |
52 | ### Update
53 |
54 | ```json
55 | {
56 | "c": "market_status",
57 | "e": "update",
58 | "ms": [{
59 | "M": "btctwd",
60 | "st": "active",
61 | "bu": "btc",
62 | "bup": 8,
63 | "mba": 0.0004,
64 | "qu": "twd",
65 | "qup": 1,
66 | "mqa": 250,
67 | "mws": true
68 | }],
69 | "T": 1659428472313
70 | }
71 | ```
--------------------------------------------------------------------------------
/public_mwallet_pool_quota.md:
--------------------------------------------------------------------------------
1 | # MWallet pool quota subscription
2 |
3 | Get MWallet total available loan quota.
4 |
5 | ```json
6 | {
7 | "channel": "pool_quota",
8 | "currency": "usdt"
9 | }
10 | ```
11 |
12 | ## Success response
13 |
14 | ### Snapshot
15 | ```json
16 | {
17 | "c": "pool_quota",
18 | "e": "snapshot",
19 | "qta": {
20 | "cu": "usdt", // currency
21 | "av": "501353.81385068", // available quota
22 | "TU": 1641551141618
23 | },
24 | "T":1641772933737
25 | }
26 | ```
27 |
28 | ### Update
29 | ```json
30 | {
31 | "c": "pool_quota",
32 | "e": "update",
33 | "qta": {
34 | "cu": "usdt", // currency
35 | "av": "501353.81385068", // available quota
36 | "TU": 1641551141618
37 | },
38 | "T":1641772933737
39 | }
40 | ```
41 |
--------------------------------------------------------------------------------
/public_orderbook.md:
--------------------------------------------------------------------------------
1 | # Order book Subscription
2 |
3 | You need to specify book channel for subscribing order book, and indicate which market you want to subscribe in subscriptions. We also provide `depth` parameter to let you get limit level response. we only support for three kinds of depth: 1, 5, 10, 20, 50 (default is 50).
4 |
5 |
6 | ```json
7 | {
8 | "channel": "book",
9 | "market": "btctwd",
10 | "depth": 1 // optional
11 | }
12 | ```
13 |
14 | ## Success response (snapshot/update)
15 | When you subscribed successful, you will get an order book snapshot response, you will continue to get updates if order book is updated.
16 |
17 | ### Snapshot
18 | ```json
19 | {
20 | "c": "book",
21 | "e": "snapshot",
22 | "M": "btcusdt",
23 | "a": [["5337.3", "0.1"]],
24 | "b": [["5333.3", "0.5"]],
25 | "T": 1591869939634,
26 | "fi":12141725, // First update ID in event
27 | "li":12141725, // Last update ID in event
28 | "v":1725602999632 // Event version
29 | }
30 | ```
31 |
32 | ### Update
33 | ```json
34 | {
35 | "c": "book",
36 | "e": "update",
37 | "M": "btcusdt",
38 | "a": [["5337.3", "0.01037"]],
39 | "b": [],
40 | "T": 1591869939634,
41 | "fi":12141726, // Frist update ID in event
42 | "li":12141726, // Last update ID in event
43 | "v":1725602999632 // Event version
44 | }
45 | ```
46 |
47 | ## Maintain your own order book
48 |
49 | 1. Subscribe to the WebSocket channel.
50 | 2. Buffer the events you receive from the WebSocket.
51 | 3. Upon receiving an snapshot event, create an order book locally, and recorded the last id (`li`) and version (`v`) on the local side. If there’s already an order book locally, the newly received one completely replaces the original.
52 | 4. Apply the event (buffer and update) to the local order book.
53 | 5. First verify if its `v` is the same. If it's different, go back to step 1 to resubscribe.
54 | 6. Drop any event where `fi` <= local `li`.
55 | 7. The first update event to be processed must satisfy `fi` <= (local `li` + 1) <= `li`; otherwise, go back to step 1 to resubscribe.
56 |
57 | Notes:
58 | - If the volume is equal to 0, remove that price level.
59 | - If you receive a snapshot event during the subscription process, please go back to step 3 to rebuild your local order book.
60 | - It is normal to receive events indicating the removal of price levels that are not present in your local order book.
61 |
62 | REMARKS:
63 | When receiving an empty snapshot (e.q. empty `a` and `b`), please clear the local order book to avoid using old data and wait for subsequent snapshot.
--------------------------------------------------------------------------------
/public_ticker.md:
--------------------------------------------------------------------------------
1 | # Ticker subscription
2 |
3 | ```json
4 | {
5 | "channel": "ticker",
6 | "market": "btctwd"
7 | }
8 | ```
9 | ## Success response
10 |
11 | ### Field
12 |
13 | | Abbr | Type | Description |
14 | | ---------------- | --------------------------| -----------------------------------------------------|
15 | | `c` | string | channel
16 | | `e` | string | event (`snapshot` or `update`)
17 | | `M` | string | market
18 | | `tk` | ticker data | ticker
19 | | (under the `tk`) | --- | ---
20 | | `M` | string | market
21 | | `O` | string of float | open
22 | | `H` | string of float | high
23 | | `L` | string of float | low
24 | | `C` | string of float | close
25 | | `v` | string of float | volume
26 | | `V` | string of float | volume in BTC
27 |
28 |
29 | ### Snapshot
30 | ```json
31 | {
32 | "c": "ticker",
33 | "e": "snapshot",
34 | "M": "btctwd",
35 | "tk": {
36 | "M": "btctwd", // same as the above "M"
37 | "O": "280007.1",
38 | "H": "280017.2",
39 | "L": "280005.3",
40 | "C": "280004.5",
41 | "v": "71.01",
42 | "V": "71.01" // volumes in BTC
43 | },
44 | "T": 123456789
45 | }
46 | ```
47 |
48 | ### Update
49 | ```json
50 | {
51 | "c": "ticker",
52 | "e": "update",
53 | "M": "btctwd",
54 | "tk": {
55 | "M": "btctwd", // same as the above "M"
56 | "O": "280007.1",
57 | "H": "280017.2",
58 | "L": "280005.3",
59 | "C": "280004.5",
60 | "v": "71.01",
61 | "V": "71.01" // volumes in BTC
62 | },
63 | "T": 123456789
64 | }
65 | ```
66 |
--------------------------------------------------------------------------------
/public_trade.md:
--------------------------------------------------------------------------------
1 | # Trade subscription
2 |
3 | ```json
4 | {
5 | "channel": "trade",
6 | "market": "btctwd"
7 | }
8 | ```
9 |
10 | ## Success response
11 |
12 | ### Snapshot
13 | ```json
14 | {
15 | "c": "trade",
16 | "e": "snapshot",
17 | "M": "btctwd",
18 | "t":[{
19 | "p": "5337.3",
20 | "v": "0.1",
21 | "T": 123456789,
22 | "tr": "up"
23 | }],
24 | "T": 123456789
25 | }
26 | ```
27 | ### Update
28 | ```json
29 | {
30 | "c": "trade",
31 | "e": "update",
32 | "M": "btctwd",
33 | "t":[{
34 | "p": "5337.3",
35 | "v": "0.1",
36 | "T": 123456789,
37 | "tr": "up"
38 | }],
39 | "T": 123456789
40 | }
41 | ```
--------------------------------------------------------------------------------
/upcoming_changes.md:
--------------------------------------------------------------------------------
1 | ## Upcomping Changes
2 |
3 |
--------------------------------------------------------------------------------