├── .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 | --------------------------------------------------------------------------------