diff --git a/README.md b/README.md index 7849ca25..d96f9c2b 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,19 @@ var GUN = require('gun/gun'); var SEA = require('gun/sea'); ``` +## React Native +Like nodejs we need to shim webcrypto we do this with a webview bridge +isomorphic-webcrypto can also work but lacks in performance and has issues with encrypting large files +some of the performance issues are related to the javascript engine, which can be improved if switching to JIT +enabled versions of v8 or jsc + +for window.crypto.getRandomValues you can use either react-native-crypto or react-native-get-random-values + +- `npm install buffer text-encoding react-native-webview-bridge react-native-get-random-values --save` +- follow instructions to install [WebviewCrypto](https://github.com/saulshanabrook/react-native-webview-crypto) + +see working [example repo](https://github.com/gooddollar/gun-webcrypto-react-native) + ## Deploy > Note: The default examples that get auto-deployed on `npm start` CDN-ify all GUN files, modules, & storage. diff --git a/lib/ras.js b/lib/ras.js new file mode 100644 index 00000000..d1553a78 --- /dev/null +++ b/lib/ras.js @@ -0,0 +1,40 @@ +;(function(){ + + /** + Radix AsyncStorage adapter + make sure to pass AsyncStorage instance in opt.AsyncStorage + **/ + function Store(opt){ + opt = opt || {}; + const store = () => { + const as = opt.AsyncStorage; + const put = (key, data, cb) => + { + as.setItem(''+key,data) + .then(_ => cb(null,1)) + .catch(_ => { + console.error(`failed saving to asyncstorage`,{key, data}) + cb(null,0) + }) + } + + const get = (key,cb) => { + as.getItem(''+key) + .then(data => cb(null,data)) + .catch(_ => { + console.error(`failed fetching from asyncstorage`,{key}) + cb(null,0) + }) + } + } + + return store; + } + + if(typeof window !== "undefined"){ + (Store.window = window).RasyncStorage = Store; + } else { + try{ module.exports = Store }catch(e){} + } + +}()); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0f8b0c01..2f5a1ead 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,39 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@peculiar/asn1-schema": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-1.0.3.tgz", - "integrity": "sha1-5V/56Yoc8xgyYpqrrPhb4+3xOkg=", - "optional": true, - "requires": { - "asn1js": "^2.0.22", - "tslib": "^1.9.3" - } - }, - "@peculiar/json-schema": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.9.tgz", - "integrity": "sha1-t0bgRreHYHobKAT2RDf9olJ7PmI=", - "optional": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "@peculiar/webcrypto": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.0.22.tgz", - "integrity": "sha1-na5lL85rrNnfFbyRlleXzuM632c=", - "optional": true, - "requires": { - "@peculiar/asn1-schema": "^1.0.3", - "@peculiar/json-schema": "^1.1.6", - "asn1js": "^2.0.26", - "pvtsutils": "^1.0.9", - "tslib": "^1.10.0", - "webcrypto-core": "^1.0.17" - } - }, "@types/ip": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/ip/-/ip-1.1.0.tgz", @@ -121,7 +88,7 @@ "ansi-colors": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha1-V9NbhoboUeLMBMQD8cACA5dqGBM=", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", "dev": true }, "ansi-regex": { @@ -133,7 +100,7 @@ "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -142,7 +109,7 @@ "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -154,21 +121,6 @@ "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco=", "dev": true }, - "asmcrypto.js": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/asmcrypto.js/-/asmcrypto.js-0.22.0.tgz", - "integrity": "sha1-OPwUQIhNgCx7030dI8KyalzV0tI=", - "optional": true - }, - "asn1js": { - "version": "2.0.26", - "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-2.0.26.tgz", - "integrity": "sha1-Cm1DUAD1VqlsYBKWnZcE2YG3ElE=", - "optional": true, - "requires": { - "pvutils": "^1.0.17" - } - }, "aws-sdk": { "version": "2.611.0", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.611.0.tgz", @@ -205,24 +157,6 @@ } } }, - "b64-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/b64-lite/-/b64-lite-1.4.0.tgz", - "integrity": "sha1-5iRC3hHx8hxg44t08RGsAkIoPT0=", - "optional": true, - "requires": { - "base-64": "^0.1.0" - } - }, - "b64u-lite": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/b64u-lite/-/b64u-lite-1.1.0.tgz", - "integrity": "sha1-pYG335TL1L7Xy7Gf6ugWZU8LG/A=", - "optional": true, - "requires": { - "b64-lite": "^1.4.0" - } - }, "backo2": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/backo2/-/backo2-1.0.2.tgz", @@ -235,12 +169,6 @@ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, - "base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha1-eAqZyE59YAJgNhURxId2E78k9rs=", - "optional": true - }, "base64-arraybuffer": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", @@ -282,7 +210,7 @@ "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -292,27 +220,19 @@ "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha1-uqVZ7hTO1zRSIputcyZGfGH6vWA=", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "buffer": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha1-P7ycaetxPTI+P8Gole7gcQwHIRU=", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "optional": true, "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "bufferutil": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.1.tgz", - "integrity": "sha512-xowrxvpxojqkagPcWRQVXZl0YXhRhAtBEIq3VoER1NH5Mw1n1o0ojdspp+GS2J//2gCVyrzQDApQ4unGF+QOoA==", - "optional": true, - "requires": { - "node-gyp-build": "~3.7.0" - } - }, "callsite": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/callsite/-/callsite-1.0.0.tgz", @@ -322,13 +242,13 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -339,7 +259,7 @@ "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -361,7 +281,7 @@ "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" @@ -433,7 +353,7 @@ "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" @@ -442,7 +362,7 @@ "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, "emailjs": { @@ -458,13 +378,13 @@ "emailjs-base64": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/emailjs-base64/-/emailjs-base64-1.1.4.tgz", - "integrity": "sha1-OS+jjLaqNdzNOvNjf/wUwcfOlhI=", + "integrity": "sha512-4h0xp1jgVTnIQBHxSJWXWanNnmuc5o+k4aHEpcLXSToN8asjB5qbXAexs7+PEsUKcEyBteNYsSvXUndYT2CGGA==", "optional": true }, "emailjs-mime-codec": { "version": "2.0.9", "resolved": "https://registry.npmjs.org/emailjs-mime-codec/-/emailjs-mime-codec-2.0.9.tgz", - "integrity": "sha1-0YRFG28uVcWGiw8KgtGP4rgvDJc=", + "integrity": "sha512-7qJo4pFGcKlWh/kCeNjmcgj34YoJWY0ekZXEHYtluWg4MVBnXqGM4CRMtZQkfYwitOhUgaKN5EQktJddi/YIDQ==", "optional": true, "requires": { "emailjs-base64": "^1.1.4", @@ -475,13 +395,13 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "engine.io": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-1.8.5.tgz", - "integrity": "sha1-Tr5edcbcEj3uSv3Obl/c7SHrk/Y=", + "integrity": "sha512-j1DWIcktw4hRwrv6nWx++5nFH2X64x16MAG2P0Lmi5Dvdfi3I+Jhc7JKJIdAmDJa+5aZ/imHV7dWRPy2Cqjh3A==", "dev": true, "requires": { "accepts": "1.3.3", @@ -495,7 +415,7 @@ "ws": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha1-y9nm514J/F0skAFfIfDECHXg3VE=", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "dev": true, "requires": { "options": ">=0.0.5", @@ -507,7 +427,7 @@ "engine.io-client": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-1.8.5.tgz", - "integrity": "sha1-/n+2DLDc8vooWUiTKctZaN7esR8=", + "integrity": "sha512-AYTgHyeVUPitsseqjoedjhYJapNVoSPShbZ+tEUX9/73jgZ/Z3sUlJf9oYgdEBBdVhupUpUqSxH0kBCXlQnmZg==", "dev": true, "requires": { "component-emitter": "1.2.1", @@ -527,7 +447,7 @@ "ws": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha1-y9nm514J/F0skAFfIfDECHXg3VE=", + "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", "dev": true, "requires": { "options": ">=0.0.5", @@ -589,7 +509,7 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "events": { @@ -610,7 +530,7 @@ "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" @@ -619,7 +539,7 @@ "flat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha1-CQvsiwXjnLowl0fx1YjwTbr5jbI=", + "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", "dev": true, "requires": { "is-buffer": "~2.0.3" @@ -634,19 +554,19 @@ "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha1-OWCDLT8VdBCDQtr9OmezMsCWnfE=", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -660,13 +580,13 @@ "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha1-8nNdwig2dPpnR4sQGBBZNVw2nl4=", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" @@ -702,7 +622,7 @@ "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "ieee754": { @@ -729,7 +649,7 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, "invariant": { @@ -807,25 +727,6 @@ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "isomorphic-webcrypto": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/isomorphic-webcrypto/-/isomorphic-webcrypto-2.3.4.tgz", - "integrity": "sha1-bRjuf3lasvXp/XpbSJq6+e4uavU=", - "optional": true, - "requires": { - "@peculiar/webcrypto": "^1.0.22", - "@unimodules/core": "*", - "@unimodules/react-native-adapter": "*", - "asmcrypto.js": "^0.22.0", - "b64-lite": "^1.3.1", - "b64u-lite": "^1.0.1", - "expo-random": "*", - "msrcrypto": "^1.5.6", - "react-native-securerandom": "^0.1.1", - "str2buf": "^1.3.0", - "webcrypto-shim": "^0.1.4" - } - }, "jmespath": { "version": "0.15.0", "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", @@ -841,7 +742,7 @@ "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -857,7 +758,7 @@ "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", @@ -867,12 +768,13 @@ "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=" + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", - "integrity": "sha1-V0Dhxdbw39pK2TI7UzIQfva0xAo=", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { "chalk": "^2.0.1" @@ -905,7 +807,7 @@ "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -988,12 +890,6 @@ "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=", "dev": true }, - "msrcrypto": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/msrcrypto/-/msrcrypto-1.5.8.tgz", - "integrity": "sha1-vkGb5JRb8TTYr1Lp1Dvn+iYfShw=", - "optional": true - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -1003,19 +899,13 @@ "node-environment-flags": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", - "integrity": "sha1-+pMCdfW/Xa4YjWGSsktMi7rD12o=", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", "dev": true, "requires": { "object.getownpropertydescriptors": "^2.0.3", "semver": "^5.7.0" } }, - "node-gyp-build": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.7.0.tgz", - "integrity": "sha512-L/Eg02Epx6Si2NXmedx+Okg+4UHqmaf3TNcxd50SF9NQGcJaON3AtU++kax69XV7YWz4tUspqZSAsVofhFKG2w==", - "optional": true - }, "object-assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", @@ -1037,13 +927,13 @@ "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", "dev": true, "requires": { "define-properties": "^1.1.2", @@ -1089,7 +979,7 @@ "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" @@ -1098,7 +988,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "panic-client": { @@ -1136,7 +1026,7 @@ "panic-server": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/panic-server/-/panic-server-1.1.1.tgz", - "integrity": "sha1-RNCZ04p8R17yekTxsgMmYRCydpY=", + "integrity": "sha512-TcR6M4LaqKjHvAKoAi46w2Y11KPJiMchAEqu00+tlOBxHR8AYvUCBvDLw4+j3MymApVHHWtluOzDaWxEYeGuVw==", "dev": true, "requires": { "bluebird": "^3.3.5", @@ -1214,21 +1104,6 @@ "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", "dev": true }, - "pvtsutils": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.0.9.tgz", - "integrity": "sha1-DrYQbyeHjMqlXn379r0sda9GHe4=", - "optional": true, - "requires": { - "tslib": "^1.10.0" - } - }, - "pvutils": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.0.17.tgz", - "integrity": "sha1-rePHTf5xeJRP5EgGYmvS4knZlr8=", - "optional": true - }, "querystring": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", @@ -1238,7 +1113,7 @@ "ramda": { "version": "0.26.1", "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.26.1.tgz", - "integrity": "sha1-jUE1HrgRHFU1Nhf8O7/62OTTXQY=", + "integrity": "sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==", "optional": true }, "react-is": { @@ -1265,7 +1140,7 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "sax": { @@ -1277,7 +1152,7 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "set-blocking": { @@ -1368,7 +1243,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "sprintf-js": { @@ -1377,12 +1252,6 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "str2buf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/str2buf/-/str2buf-1.3.0.tgz", - "integrity": "sha1-pBcq//QxDmcjUXjnOKLbtXOr6tA=", - "optional": true - }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -1432,7 +1301,7 @@ "supports-color": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha1-ds/nQs8fQbubHCmtAwaMBbTA5Ao=", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -1441,7 +1310,7 @@ "text-encoding": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/text-encoding/-/text-encoding-0.7.0.tgz", - "integrity": "sha1-+JXoNuRZkGJAhmAXmOqY6PNu5kM=", + "integrity": "sha512-oJQ3f1hrOnbRLOcwKz0Liq2IcrvDeZRHXhd9RgLrsT+DjWY/nty1Hi7v3dtkaEYbPYe0mUoOfzRrMwfXXwgPUA==", "optional": true }, "to-array": { @@ -1450,11 +1319,27 @@ "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=", "dev": true }, - "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha1-w8GflZc/sKYpc/sJ2Q2WHuQ+XIo=", - "optional": true + "ts-toolbelt": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/ts-toolbelt/-/ts-toolbelt-6.1.13.tgz", + "integrity": "sha1-EpNbyLgQUuXiHq3dNTcucTINfuM=", + "dev": true + }, + "ts-type": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/ts-type/-/ts-type-1.2.13.tgz", + "integrity": "sha1-668v0DgmNY3uXyDniiLWqW2x95E=", + "dev": true, + "requires": { + "ts-toolbelt": "^6.1.6", + "typedarray-dts": "^1.0.0" + } + }, + "typedarray-dts": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typedarray-dts/-/typedarray-dts-1.0.0.tgz", + "integrity": "sha1-neyYEThtv7qWTClcJgbPmmuYLQY=", + "dev": true }, "uglify-js": { "version": "3.7.7", @@ -1482,41 +1367,16 @@ "querystring": "0.2.0" } }, - "utf-8-validate": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.2.tgz", - "integrity": "sha512-SwV++i2gTD5qh2XqaPzBnNX88N6HdyhQrNNRykvcS0QKvItV9u3vPEJr+X5Hhfb1JC0r0e1alL0iB09rY8+nmw==", - "optional": true, - "requires": { - "node-gyp-build": "~3.7.0" - } - }, "uuid": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha1-G0r0lV6zB3xQHCOHL8ZROBFYcTE=", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", "dev": true }, - "webcrypto-core": { - "version": "1.0.17", - "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.0.17.tgz", - "integrity": "sha1-qTVLwLG6ZzXogvQTft4sQ2bmrZs=", - "optional": true, - "requires": { - "pvtsutils": "^1.0.9", - "tslib": "^1.10.0" - } - }, - "webcrypto-shim": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/webcrypto-shim/-/webcrypto-shim-0.1.5.tgz", - "integrity": "sha1-E+NKAQzMVE7ez+iiZCIEUChBvPA=", - "optional": true - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -1531,7 +1391,7 @@ "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" @@ -1595,7 +1455,7 @@ "xml2js": { "version": "0.4.19", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha1-aGwg8hMgnpSr8NG88e+qKRx4J6c=", + "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", "dev": true, "requires": { "sax": ">=0.6.0", @@ -1625,7 +1485,7 @@ "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 7b5a3b38..394d47fa 100644 --- a/package.json +++ b/package.json @@ -60,8 +60,12 @@ "ws": "^7.2.1" }, "optionalDependencies": { + "text-encoding": "^0.7.0", "emailjs": "^2.2.0", - "isomorphic-webcrypto": "^2.3.2", + "buffer": "^5.4.3" + }, + "peerDependencies": { + "@gooddollar/react-native-webview-crypto": "^0.*", "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2", "text-encoding": "^0.7.0" diff --git a/sea.js b/sea.js index 0b3fb6fc..d940813e 100644 --- a/sea.js +++ b/sea.js @@ -164,7 +164,7 @@ var o = {}; if(SEA.window){ - api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto'); + api.crypto = window.crypto || window.msCrypto api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle; api.TextEncoder = window.TextEncoder; api.TextDecoder = window.TextDecoder; @@ -176,17 +176,20 @@ api.TextDecoder = TextDecoder; api.TextEncoder = TextEncoder; } - if(!api.crypto){try{ + if(!api.crypto) + { + try + { var crypto = USE('crypto', 1); Object.assign(api, { crypto, random: (len) => Buffer.from(crypto.randomBytes(len)) }); - const isocrypto = require('isomorphic-webcrypto'); - api.ossl = api.subtle = isocrypto.subtle; - }catch(e){ - console.log("text-encoding and @peculiar/webcrypto may not be included by default, please add it to your package.json!"); - TEXT_ENCODING_OR_PECULIAR_WEBCRYPTO_NOT_INSTALLED; + const { Crypto: WebCrypto } = USE('@peculiar/webcrypto', 1); + api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH + } + catch(e){ + console.log("text-encoding and peculiar/nwebcrypto may not be included by default, please add it to your package.json!"); }} module.exports = api @@ -707,9 +710,10 @@ ;USE(function(module){ var Gun = USE('./sea').Gun; - Gun.chain.then = function(cb){ + Gun.chain.then = function(cb, opt = {}){ + opt = {wait: 200, ...opt} var gun = this, p = (new Promise(function(res, rej){ - gun.once(res); + gun.once(res, opt); })); return cb? p.then(cb) : p; } @@ -1083,6 +1087,43 @@ }()); return gun; } + + /** + * returns the decrypted value, encrypted by secret + * @returns {Promise} + */ + User.prototype.decrypt = function(cb) { + let gun = this, + path = '' + gun.back(function(at) { + if (at.is) { + return + } + path += at.get || '' + }) + return gun + .then(async data => { + if (data == null) { + return + } + const user = gun.back(-1).user() + const pair = user.pair() + let sec = await user + .get('trust') + .get(pair.pub) + .get(path) + sec = await SEA.decrypt(sec, pair) + if (!sec) { + return data + } + let decrypted = await SEA.decrypt(data, sec) + return decrypted + }) + .then(res => { + cb && cb(res) + return res + }) + } module.exports = User })(USE, './create'); diff --git a/sea/create.js b/sea/create.js index 7ecec7bd..0b77e5a4 100644 --- a/sea/create.js +++ b/sea/create.js @@ -334,5 +334,42 @@ }()); return gun; } + + /** + * returns the decrypted value, encrypted by secret + * @returns {Promise} + */ + User.prototype.decrypt = function(cb) { + let gun = this, + path = '' + gun.back(function(at) { + if (at.is) { + return + } + path += at.get || '' + }) + return gun + .then(async data => { + if (data == null) { + return + } + const user = gun.back(-1).user() + const pair = user.pair() + let sec = await user + .get('trust') + .get(pair.pub) + .get(path) + sec = await SEA.decrypt(sec, pair) + if (!sec) { + return data + } + let decrypted = await SEA.decrypt(data, sec) + return decrypted + }) + .then(res => { + cb && cb(res) + return res + }) + } module.exports = User \ No newline at end of file diff --git a/sea/shim.js b/sea/shim.js index 00dc77ca..6427d1b2 100644 --- a/sea/shim.js +++ b/sea/shim.js @@ -5,7 +5,7 @@ var o = {}; if(SEA.window){ - api.crypto = navigator && navigator.product === 'ReactNative' ? require('isomorphic-webcrypto') : window.crypto || window.msCrypto || require('isomorphic-webcrypto'); + api.crypto = window.crypto || window.msCrypto api.subtle = (api.crypto||o).subtle || (api.crypto||o).webkitSubtle; api.TextEncoder = window.TextEncoder; api.TextDecoder = window.TextDecoder; @@ -17,17 +17,20 @@ api.TextDecoder = TextDecoder; api.TextEncoder = TextEncoder; } - if(!api.crypto){try{ + if(!api.crypto) + { + try + { var crypto = require('crypto', 1); Object.assign(api, { crypto, random: (len) => Buffer.from(crypto.randomBytes(len)) }); - const isocrypto = require('isomorphic-webcrypto'); - api.ossl = api.subtle = isocrypto.subtle; - }catch(e){ - console.log("text-encoding and @peculiar/webcrypto may not be included by default, please add it to your package.json!"); - TEXT_ENCODING_OR_PECULIAR_WEBCRYPTO_NOT_INSTALLED; + const { Crypto: WebCrypto } = require('@peculiar/webcrypto', 1); + api.ossl = api.subtle = new WebCrypto({directory: 'ossl'}).subtle // ECDH + } + catch(e){ + console.log("text-encoding and peculiar/nwebcrypto may not be included by default, please add it to your package.json!"); }} module.exports = api diff --git a/sea/then.js b/sea/then.js index a97bcbc6..6e6ded1e 100644 --- a/sea/then.js +++ b/sea/then.js @@ -1,8 +1,9 @@ var Gun = require('./sea').Gun; - Gun.chain.then = function(cb){ + Gun.chain.then = function(cb, opt = {}){ + opt = {wait: 200, ...opt} var gun = this, p = (new Promise(function(res, rej){ - gun.once(res); + gun.once(res, opt); })); return cb? p.then(cb) : p; }