diff options
| author | Adam Soltys <[email protected]> | 2020-10-24 22:13:47 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2020-10-24 22:33:52 -0700 |
| commit | 12091db2a92bc52e3ae97eab98a4d9f7c1a3dd08 (patch) | |
| tree | e8767781dbd19d62f089277c1bc979ac97aeae48 | |
| parent | ae9e9e0fa9cffd2545aa210321b34ce2bb5c4b8b (diff) | |
| download | coinos-server-12091db2a92bc52e3ae97eab98a4d9f7c1a3dd08.tar.gz coinos-server-12091db2a92bc52e3ae97eab98a4d9f7c1a3dd08.zip | |
funding and withdrawals
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | db/index.js | 2 | ||||
| -rw-r--r-- | db/models/deposits.js | 75 | ||||
| -rw-r--r-- | db/models/users.js | 9 | ||||
| -rw-r--r-- | db/models/withdrawals.js | 102 | ||||
| -rw-r--r-- | db/schema.sql | 61 | ||||
| -rw-r--r-- | index.js | 9 | ||||
| -rw-r--r-- | lib/whitelist.js | 1 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | routes/assets.js | 8 | ||||
| -rw-r--r-- | routes/funding.js | 82 | ||||
| -rw-r--r-- | routes/swaps.js | 2 | ||||
| -rw-r--r-- | yarn.lock | 65 |
13 files changed, 397 insertions, 21 deletions
@@ -12,3 +12,4 @@ leveldb swaps exceptions fx +uploads diff --git a/db/index.js b/db/index.js index 2ee61643..197a7f86 100644 --- a/db/index.js +++ b/db/index.js @@ -10,11 +10,13 @@ db = new Sequelize(conf.database, conf.username, conf.password, { require("./models/accounts.js"); require("./models/codes.js"); +require("./models/deposits.js"); require("./models/invoices.js"); require("./models/keys.js"); require("./models/payments.js"); require("./models/orders.js"); require("./models/users.js"); +require("./models/withdrawals.js"); const { User, Account, Payment, Invoice, Key, Order } = db; diff --git a/db/models/deposits.js b/db/models/deposits.js new file mode 100644 index 00000000..df870330 --- /dev/null +++ b/db/models/deposits.js @@ -0,0 +1,75 @@ +const { DataTypes } = require('sequelize'); + +const attributes = { + id: { + type: DataTypes.INTEGER(11), + allowNull: false, + defaultValue: null, + primaryKey: true, + autoIncrement: true, + comment: null, + field: "id" + }, + amount: { + type: DataTypes.DOUBLE, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "amount" + }, + user_id: { + type: DataTypes.INTEGER(11), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "user_id" + }, + createdAt: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "createdAt" + }, + updatedAt: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "updatedAt" + }, + credited: { + type: DataTypes.BOOLEAN, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "credited" + }, + code: { + type: DataTypes.STRING(255), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "code" + }, +}; + +const options = { + tableName: "deposits", + comment: "", + indexes: [] +}; + +db["Deposit"] = db.define("deposits_model", attributes, options); diff --git a/db/models/users.js b/db/models/users.js index 1bb4caaa..48384767 100644 --- a/db/models/users.js +++ b/db/models/users.js @@ -10,6 +10,15 @@ const attributes = { comment: null, field: "id" }, + verified: { + type: DataTypes.STRING, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "verified" + }, fiat: { type: DataTypes.BOOLEAN, allowNull: true, diff --git a/db/models/withdrawals.js b/db/models/withdrawals.js new file mode 100644 index 00000000..7ece9b58 --- /dev/null +++ b/db/models/withdrawals.js @@ -0,0 +1,102 @@ +const { DataTypes } = require('sequelize'); + +const attributes = { + id: { + type: DataTypes.INTEGER(11), + allowNull: false, + defaultValue: null, + primaryKey: true, + autoIncrement: true, + comment: null, + field: "id" + }, + amount: { + type: DataTypes.DOUBLE, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "amount" + }, + user_id: { + type: DataTypes.INTEGER(11), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "user_id" + }, + createdAt: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "createdAt" + }, + updatedAt: { + type: DataTypes.DATE, + allowNull: false, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "updatedAt" + }, + transit: { + type: DataTypes.STRING(255), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "transit" + }, + institution: { + type: DataTypes.STRING(255), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "institution" + }, + account: { + type: DataTypes.STRING(255), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "account" + }, + email: { + type: DataTypes.STRING(255), + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "email" + }, + notes: { + type: DataTypes.TEXT, + allowNull: true, + defaultValue: null, + primaryKey: false, + autoIncrement: false, + comment: null, + field: "notes" + }, +}; + +const options = { + tableName: "withdrawals", + comment: "", + indexes: [] +}; + +db["Withdrawal"] = db.define("withdrawals_model", attributes, options); diff --git a/db/schema.sql b/db/schema.sql index 51dd6ed8..0cc7f74b 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -1,8 +1,8 @@ --- MySQL dump 10.17 Distrib 10.3.24-MariaDB, for debian-linux-gnu (x86_64) +-- MySQL dump 10.17 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: coinos -- ------------------------------------------------------ --- Server version 10.3.24-MariaDB-1:10.3.24+maria~bionic +-- Server version 10.3.25-MariaDB-1:10.3.25+maria~bionic /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; @@ -66,7 +66,7 @@ CREATE TABLE `accounts` ( `network` varchar(255) DEFAULT NULL, `privkey` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4095 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=4108 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -84,6 +84,25 @@ CREATE TABLE `codes` ( /*!40101 SET character_set_client = @saved_cs_client */; -- +-- Table structure for table `deposits` +-- + +DROP TABLE IF EXISTS `deposits`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `deposits` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) DEFAULT NULL, + `createdAt` datetime NOT NULL, + `updatedAt` datetime NOT NULL, + `amount` double DEFAULT NULL, + `credited` tinyint(1) DEFAULT NULL, + `code` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4110 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- -- Table structure for table `invoices` -- @@ -109,7 +128,7 @@ CREATE TABLE `invoices` ( `account_id` int(11) DEFAULT NULL, `path` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=7010 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=7341 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -126,7 +145,7 @@ CREATE TABLE `linkingkeys` ( `createdAt` datetime NOT NULL, `updatedAt` datetime NOT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=4606 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=4612 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -149,7 +168,7 @@ CREATE TABLE `orders` ( `a1_id` int(11) DEFAULT NULL, `a2_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=9062 DEFAULT CHARSET=utf8mb4; +) ENGINE=InnoDB AUTO_INCREMENT=9106 DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -181,7 +200,7 @@ CREATE TABLE `payments` ( `redeemed` tinyint(1) NOT NULL DEFAULT 0, `path` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) -) ENGINE=InnoDB AUTO_INCREMENT=38830 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=38951 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- @@ -225,9 +244,33 @@ CREATE TABLE `users` ( `linkingKeys` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, `fiat` tinyint(1) NOT NULL DEFAULT 0, `index` int(11) NOT NULL DEFAULT 0, + `verified` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), KEY `ip` (`ip`) -) ENGINE=InnoDB AUTO_INCREMENT=730 DEFAULT CHARSET=latin1; +) ENGINE=InnoDB AUTO_INCREMENT=736 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `withdrawals` +-- + +DROP TABLE IF EXISTS `withdrawals`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `withdrawals` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `user_id` int(11) NOT NULL, + `createdAt` datetime NOT NULL, + `updatedAt` datetime NOT NULL, + `amount` double DEFAULT NULL, + `completed` tinyint(1) DEFAULT NULL, + `transit` varchar(255) DEFAULT NULL, + `account` varchar(255) DEFAULT NULL, + `institution` varchar(255) DEFAULT NULL, + `notes` text DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4113 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; @@ -239,4 +282,4 @@ CREATE TABLE `users` ( /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; --- Dump completed on 2020-10-09 10:06:08 +-- Dump completed on 2020-10-24 15:08:28 @@ -12,7 +12,7 @@ l = require("pino")(); config = require("./config"); networks = []; prod = process.env.NODE_ENV === "production"; -fail = (msg) => { +fail = msg => { throw new Error(msg); }; @@ -26,7 +26,7 @@ if (config.liquid) networks.push("liquid"); if (config.lna) networks.push("lightning"); SATS = 100000000; -toSats = (n) => parseInt((n * SATS).toFixed()); +toSats = n => parseInt((n * SATS).toFixed()); app = express(); app.enable("trust proxy"); @@ -53,6 +53,7 @@ require("./routes/payments"); require("./routes/info"); require("./routes/swaps"); require("./routes/users"); +require("./routes/funding"); if (config.lnurl) { require("./routes/lnurl"); @@ -63,7 +64,7 @@ app.use((err, req, res, next) => { path: req.path, body: req.body, msg: err.message, - stack: err.stack, + stack: err.stack }; if (req.user) details.username = req.user.username; @@ -71,7 +72,7 @@ app.use((err, req, res, next) => { l.error("Error: ", details); res.status(500); res.set({ - "Cache-Control": "no-cache", + "Cache-Control": "no-cache" }); res.send(err.message); return res.end(); diff --git a/lib/whitelist.js b/lib/whitelist.js index a2abeb16..9bbf83e1 100644 --- a/lib/whitelist.js +++ b/lib/whitelist.js @@ -14,4 +14,5 @@ whitelist = [ "seed", "keys", "index", + "verified", ]; diff --git a/package.json b/package.json index 53668ac7..950ac2b3 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "long": "^4.0.0", "mailgun-js": "^0.22.0", "mariadb": "^2.4.0", + "multer": "^1.4.2", "mysql": "^2.18.1", "mysql2": "^2.1.0", "otplib": "^12.0.1", diff --git a/routes/assets.js b/routes/assets.js index 52509cd9..324acb7b 100644 --- a/routes/assets.js +++ b/routes/assets.js @@ -26,10 +26,14 @@ app.get( group: ["asset"] }); - Object.keys(assets).map(a => (assets[a].registered = true)); + Object.keys(assets).map(a => { + assets[a].registered = true; + assets[a].asset = assets[a].asset_id; + }); accounts.map(a => { - if (!assets[a.asset]) assets[a.asset] = a; + if (!a.asset) console.log(a.id); + if (!assets[a.asset]) assets[a.asset] = a.get({ plain: true }); }); res.send(assets); diff --git a/routes/funding.js b/routes/funding.js new file mode 100644 index 00000000..3a5f30e0 --- /dev/null +++ b/routes/funding.js @@ -0,0 +1,82 @@ +const multer = require("multer"); + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, "uploads"); + }, + filename: (req, file, cb) => { + const parts = file.originalname.split("."); + const ext = parts.length > 1 ? parts[parts.length - 1] : 'bin'; + cb(null, `${req.user.username}-${file.fieldname}.${ext}`) + } +}); + +const upload = multer({ + storage, + onFileUploadStart: (file, req, res) => { + const maxSize = 32 * 1000 * 1000; + if (req.files.file.length > maxSize) { + return false; + } + } +}); + +app.post("/id", auth, upload.single("id"), ah(async (req, res) => { + const { user } = req; + if (user.verified === 'proof') user.verified = 'pending'; + else user.verified = 'id'; + await user.save(); + emit(user.username, "user", user); + + res.end(); +})); + +app.post("/proof", auth, upload.single("proof"), ah(async (req, res) => { + const { user } = req; + if (user.verified === 'id') user.verified = 'pending'; + else user.verified = 'proof'; + await user.save(); + emit(user.username, "user", user); + + res.end(); +})); + +app.post("/funding", auth, ah(async (req, res) => { + try { + const { amount, code } = req.body; + if (!parseFloat(amount) || parseFloat(amount) < 0) throw new Error("Invalid amount"); + + await db.Deposit.create({ + user_id: req.user.id, + amount, + code, + }); + + res.end(); + } catch(e) { + l.error("funding error", e.message); + res.status(500).send("Funding request failed"); + } +})); + +app.post("/withdrawal", auth, ah(async (req, res) => { + try { + const { account, amount, email, institution, transit, notes } = req.body; + if (!parseFloat(amount) || parseFloat(amount) < 0) throw new Error("Invalid amount"); + + await db.Withdrawal.create({ + user_id: req.user.id, + account, + amount, + email, + institution, + transit, + notes, + }); + + res.end(); + } catch(e) { + l.error("withdrawal error", e.message); + res.status(500).send("Withdrawal request failed"); + } +})); diff --git a/routes/swaps.js b/routes/swaps.js index 10beb0b2..e12dd450 100644 --- a/routes/swaps.js +++ b/routes/swaps.js @@ -1000,4 +1000,4 @@ setInterval(async () => { } } }); -}, 20000); +}, 2000); @@ -416,6 +416,11 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-field/-/append-field-1.0.0.tgz#1e3440e915f0b1203d23748e78edd7b9b5b43e56" + integrity sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY= + aproba@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -950,6 +955,14 @@ bunyan@^1.8.1: mv "~2" safe-json-stringify "~1" +busboy@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/busboy/-/busboy-0.2.14.tgz#6c2a622efcf47c57bbbe1e2a9c37ad36c7925453" + integrity sha1-bCpiLvz0fFe7vh4qnDetNseSVFM= + dependencies: + dicer "0.2.5" + readable-stream "1.1.x" + bytebuffer@~5: version "5.0.1" resolved "https://registry.yarnpkg.com/bytebuffer/-/bytebuffer-5.0.1.tgz#582eea4b1a873b6d020a48d58df85f0bba6cfddd" @@ -1281,6 +1294,16 @@ [email protected]: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + configstore@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" @@ -1592,6 +1615,14 @@ detect-libc@^1.0.2, detect-libc@^1.0.3: resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= + version "0.2.5" + resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.2.5.tgz#5996c086bb33218c812c090bddc09cd12facb70f" + integrity sha1-WZbAhrszIYyBLAkL3cCc0S+stw8= + dependencies: + readable-stream "1.1.x" + streamsearch "0.1.2" + version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -3687,6 +3718,20 @@ [email protected], ms@^2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +multer@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.2.tgz#2f1f4d12dbaeeba74cb37e623f234bf4d3d2057a" + integrity sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg== + dependencies: + append-field "^1.0.0" + busboy "^0.2.11" + concat-stream "^1.5.2" + mkdirp "^0.5.1" + object-assign "^4.1.1" + on-finished "^2.3.0" + type-is "^1.6.4" + xtend "^4.0.0" + mute-stream@~0.0.4: version "0.0.8" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" @@ -3950,7 +3995,7 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.0: +object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= @@ -4024,7 +4069,7 @@ object.pick@^1.2.0, object.pick@^1.3.0: dependencies: isobject "^3.0.1" -on-finished@~2.3.0: +on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= @@ -4683,7 +4728,7 @@ [email protected]: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@2, [email protected], readable-stream@^2.0.6: +readable-stream@2, [email protected], readable-stream@^2.0.6, readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -5267,6 +5312,11 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + version "0.1.2" + resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-0.1.2.tgz#808b9d0e56fc273d809ba57338e929919a1a9f1a" + integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo= + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -5594,7 +5644,7 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17, type-is@~1.6.18: +type-is@^1.6.4, type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== @@ -5609,6 +5659,11 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + typeforce@^1.11.3, typeforce@^1.11.5: version "1.18.0" resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" @@ -5914,7 +5969,7 @@ [email protected]: resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-2.0.0.tgz#52a63e56ca0b84a7f3a5f3d61872f126ad7a5943" integrity sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM= -xtend@^4.0.2, xtend@~4.0.0: +xtend@^4.0.0, xtend@^4.0.2, xtend@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== |
