Merge branch 'master' into feature/ln-ux
This commit is contained in:
commit
37c5fe7921
11 changed files with 147 additions and 26 deletions
|
|
@ -3,4 +3,4 @@ PEERS=["http://gun.shock.network:8765/gun"]
|
||||||
MS_TO_TOKEN_EXPIRATION=4500000
|
MS_TO_TOKEN_EXPIRATION=4500000
|
||||||
DISABLE_SHOCK_ENCRYPTION=false
|
DISABLE_SHOCK_ENCRYPTION=false
|
||||||
CACHE_HEADERS_MANDATORY=true
|
CACHE_HEADERS_MANDATORY=true
|
||||||
SHOCK_CACHE=true
|
SHOCK_CACHE=true
|
||||||
|
|
|
||||||
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
|
@ -1,3 +1,4 @@
|
||||||
{
|
{
|
||||||
"eslint.enable": true
|
"eslint.enable": true,
|
||||||
|
"typescript.tsdk": "node_modules/typescript/lib"
|
||||||
}
|
}
|
||||||
|
|
@ -12,9 +12,11 @@ For easy setup on your Laptop/Desktop, [a wizard is available here.](https://git
|
||||||
* Requires [Node.js](https://nodejs.org) 12
|
* Requires [Node.js](https://nodejs.org) 12
|
||||||
|
|
||||||
#### Steps:
|
#### Steps:
|
||||||
1) Run [LND](https://github.com/lightningnetwork/lnd/releases) - *Example mainnet startup*:
|
1) Run [LND](https://github.com/shocknet/lnd/releases) - *Example mainnet startup*:
|
||||||
|
|
||||||
```./lnd --bitcoin.active --bitcoin.mainnet --bitcoin.node=neutrino --neutrino.connect=neutrino.shock.network --routing.assumechanvalid=1 --allow-circular-route=1```
|
(Neutrino example requires builds with experimental flags, our binaries include them.)
|
||||||
|
|
||||||
|
```./lnd --bitcoin.active --bitcoin.mainnet --bitcoin.node=neutrino --neutrino.connect=neutrino.shock.network --routing.assumechanvalid --allow-circular-route```
|
||||||
|
|
||||||
|
|
||||||
2) Download and Install API
|
2) Download and Install API
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ module.exports = (mainnet = false) => {
|
||||||
logfile: "shockapi.log",
|
logfile: "shockapi.log",
|
||||||
lndLogFile: parsePath(`${lndDirectory}/logs/bitcoin/${network}/lnd.log`),
|
lndLogFile: parsePath(`${lndDirectory}/logs/bitcoin/${network}/lnd.log`),
|
||||||
lndDirPath: lndDirectory,
|
lndDirPath: lndDirectory,
|
||||||
peers: ["http://gun.shock.network:8765/gun"],
|
peers: ['http://gun.shock.network:8765/gun'],
|
||||||
useTLS: false,
|
useTLS: false,
|
||||||
tokenExpirationMS: 4500000
|
tokenExpirationMS: 4500000
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
{
|
{
|
||||||
"name": "sw-server",
|
"name": "shockapi",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "src/server.js",
|
"main": "src/server.js",
|
||||||
|
|
@ -34,12 +34,12 @@
|
||||||
"google-proto-files": "^1.0.3",
|
"google-proto-files": "^1.0.3",
|
||||||
"graphviz": "0.0.8",
|
"graphviz": "0.0.8",
|
||||||
"grpc": "^1.21.1",
|
"grpc": "^1.21.1",
|
||||||
"gun": "git://github.com/amark/gun#3e678b8568a4a8a825b84b26759d4dd4f3b0988e",
|
"gun": "git://github.com/amark/gun#97aa976c97e6219a9f93095d32c220dcd371ca62",
|
||||||
"husky": "^4.2.5",
|
"husky": "^4.2.5",
|
||||||
"jsonfile": "^4.0.0",
|
"jsonfile": "^4.0.0",
|
||||||
"jsonwebtoken": "^8.3.0",
|
"jsonwebtoken": "^8.3.0",
|
||||||
"localtunnel": "^1.9.0",
|
"localtunnel": "^1.9.0",
|
||||||
"lodash": "^4.17.15",
|
"lodash": "^4.17.19",
|
||||||
"method-override": "^2.3.7",
|
"method-override": "^2.3.7",
|
||||||
"promise": "^8.0.1",
|
"promise": "^8.0.1",
|
||||||
"ramda": "^0.27.0",
|
"ramda": "^0.27.0",
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
"nodemon": "^1.19.3",
|
"nodemon": "^1.19.3",
|
||||||
"prettier": "^1.18.2",
|
"prettier": "^1.18.2",
|
||||||
"ts-type": "^1.2.16",
|
"ts-type": "^1.2.16",
|
||||||
"typescript": "^3.6.3"
|
"typescript": "^3.9.6"
|
||||||
},
|
},
|
||||||
"lint-staged": {
|
"lint-staged": {
|
||||||
"*.js": [
|
"*.js": [
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,8 @@ require('gun/lib/open')
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
require('gun/lib/load')
|
require('gun/lib/load')
|
||||||
const debounce = require('lodash/debounce')
|
const debounce = require('lodash/debounce')
|
||||||
const Encryption = require('../../../utils/encryptionStore')
|
|
||||||
|
|
||||||
|
const Encryption = require('../../../utils/encryptionStore')
|
||||||
const Key = require('../contact-api/key')
|
const Key = require('../contact-api/key')
|
||||||
|
|
||||||
/** @type {import('../contact-api/SimpleGUN').ISEA} */
|
/** @type {import('../contact-api/SimpleGUN').ISEA} */
|
||||||
|
|
@ -1275,6 +1275,56 @@ const register = async (alias, pass) => {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Peers provided to gun.
|
||||||
|
*/
|
||||||
|
const peers = Object.values(gun._.opt.peers)
|
||||||
|
|
||||||
|
const theresPeers = peers.length > 0
|
||||||
|
const atLeastOneIsConnected = peers.some(
|
||||||
|
p => p.wire && p.wire.readyState === 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if (theresPeers && !atLeastOneIsConnected) {
|
||||||
|
throw new Error(
|
||||||
|
'No connected to any peers for checking of duplicate aliases'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (theresPeers && atLeastOneIsConnected) {
|
||||||
|
// this import is done here to avoid circular dependency hell
|
||||||
|
const { timeout5 } = require('../contact-api/utils')
|
||||||
|
|
||||||
|
let userData = await timeout5(
|
||||||
|
new Promise(res => {
|
||||||
|
gun.get(`~@${alias}`).once(ud => res(ud))
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
if (userData) {
|
||||||
|
throw new Error(
|
||||||
|
'The given alias has been used before, use an unique alias instead.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
await new Promise(res => setTimeout(res, 300))
|
||||||
|
|
||||||
|
userData = await timeout5(
|
||||||
|
new Promise(res => {
|
||||||
|
gun.get(`~@${alias}`).once(ud => res(ud), {
|
||||||
|
// https://github.com/amark/gun/pull/971#issue-438630761
|
||||||
|
wait: 1500
|
||||||
|
})
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
|
if (userData) {
|
||||||
|
throw new Error(
|
||||||
|
'The given alias has been used before, use an unique alias instead. (Caught at 2nd try)'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_isRegistering = true
|
_isRegistering = true
|
||||||
|
|
||||||
/** @type {import('../contact-api/SimpleGUN').CreateAck} */
|
/** @type {import('../contact-api/SimpleGUN').CreateAck} */
|
||||||
|
|
@ -1282,6 +1332,13 @@ const register = async (alias, pass) => {
|
||||||
user.create(alias, pass, ack => res(ack))
|
user.create(alias, pass, ack => res(ack))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// An empty ack object seems to be caused by a duplicate alias sign up
|
||||||
|
if ('{}' === JSON.stringify(ack)) {
|
||||||
|
throw new Error(
|
||||||
|
'The given alias has been used before, use an unique alias instead. (Empty ack)'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
_isRegistering = false
|
_isRegistering = false
|
||||||
|
|
||||||
if (typeof ack.err === 'string') {
|
if (typeof ack.err === 'string') {
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,9 @@ dotenv.config()
|
||||||
// @ts-ignore Let it crash if undefined
|
// @ts-ignore Let it crash if undefined
|
||||||
exports.DATA_FILE_NAME = process.env.DATA_FILE_NAME || defaults.dataFileName
|
exports.DATA_FILE_NAME = process.env.DATA_FILE_NAME || defaults.dataFileName
|
||||||
|
|
||||||
// @ts-ignore Let it crash if undefined
|
/**
|
||||||
|
* @type {string[]}
|
||||||
|
*/
|
||||||
exports.PEERS = process.env.PEERS
|
exports.PEERS = process.env.PEERS
|
||||||
? JSON.parse(process.env.PEERS)
|
? JSON.parse(process.env.PEERS)
|
||||||
: defaults.peers
|
: defaults.peers
|
||||||
|
|
|
||||||
|
|
@ -30,9 +30,20 @@ interface OpenListenerDataObj {
|
||||||
export type Listener = (data: ListenerData, key: string) => void
|
export type Listener = (data: ListenerData, key: string) => void
|
||||||
export type Callback = (ack: Ack) => void
|
export type Callback = (ack: Ack) => void
|
||||||
|
|
||||||
|
export interface Peer {
|
||||||
|
url: string
|
||||||
|
id: string
|
||||||
|
wire?: {
|
||||||
|
readyState: number
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export interface Soul {
|
export interface Soul {
|
||||||
get: string
|
get: string
|
||||||
put: Primitive | null | object | undefined
|
put: Primitive | null | object | undefined
|
||||||
|
opt: {
|
||||||
|
peers: Record<string, Peer>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type OpenListenerData = Primitive | null | OpenListenerDataObj
|
export type OpenListenerData = Primitive | null | OpenListenerDataObj
|
||||||
|
|
@ -47,7 +58,7 @@ export interface GUNNodeBase {
|
||||||
map(): GUNNode
|
map(): GUNNode
|
||||||
|
|
||||||
on(this: GUNNode, cb: Listener): void
|
on(this: GUNNode, cb: Listener): void
|
||||||
once(this: GUNNode, cb?: Listener): GUNNode
|
once(this: GUNNode, cb?: Listener, opts?: { wait: number }): GUNNode
|
||||||
|
|
||||||
open(this: GUNNode, cb?: OpenListener): GUNNode
|
open(this: GUNNode, cb?: OpenListener): GUNNode
|
||||||
load(this: GUNNode, cb?: OpenListener): GUNNode
|
load(this: GUNNode, cb?: OpenListener): GUNNode
|
||||||
|
|
|
||||||
|
|
@ -49,14 +49,14 @@ const getAnUser = async publicKey => {
|
||||||
|
|
||||||
/** @type {Common.SchemaTypes.User} */
|
/** @type {Common.SchemaTypes.User} */
|
||||||
const u = {
|
const u = {
|
||||||
avatar: oldProfile.avatar,
|
avatar: oldProfile.avatar || null,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
bio,
|
bio: bio || null,
|
||||||
displayName: oldProfile.displayName,
|
displayName: oldProfile.displayName || null,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
lastSeenApp,
|
lastSeenApp: lastSeenApp || 0,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
lastSeenNode,
|
lastSeenNode: lastSeenNode || 0,
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
publicKey
|
publicKey
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -714,7 +714,7 @@ module.exports = async (
|
||||||
logger.error(err);
|
logger.error(err);
|
||||||
return res.status(500).json({
|
return res.status(500).json({
|
||||||
field: "unknown",
|
field: "unknown",
|
||||||
errorMessage: err
|
errorMessage: err.message || err
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -2039,6 +2039,54 @@ module.exports = async (
|
||||||
|
|
||||||
ap.get(`/api/gun/feed`, apiGunFeedGet)
|
ap.get(`/api/gun/feed`, apiGunFeedGet)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {RequestHandler<{}>}
|
||||||
|
*/
|
||||||
|
const apiGunMeGet = async (_, res) => {
|
||||||
|
try {
|
||||||
|
return res.status(200).json(await GunGetters.getMyUser())
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err)
|
||||||
|
return res.status(500).json({
|
||||||
|
errorMessage: err.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @type {RequestHandler<{}>}
|
||||||
|
*/
|
||||||
|
const apiGunMePut = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const { avatar, bio , displayName} = /** @type {Partial<Omit<Common.Schema.User, 'publicKey'>>} */ (req.body)
|
||||||
|
|
||||||
|
if (avatar) {
|
||||||
|
await GunActions.setAvatar(avatar, require('../services/gunDB/Mediator').getUser())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bio) {
|
||||||
|
await GunActions.setBio(bio, require('../services/gunDB/Mediator').getUser())
|
||||||
|
}
|
||||||
|
|
||||||
|
if (displayName) {
|
||||||
|
await GunActions.setDisplayName(displayName, require('../services/gunDB/Mediator').getUser())
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.status(200).json({
|
||||||
|
ok: true
|
||||||
|
})
|
||||||
|
} catch (err) {
|
||||||
|
logger.error(err)
|
||||||
|
return res.status(500).json({
|
||||||
|
errorMessage: err.message
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ap.get(`/api/gun/me`, apiGunMeGet)
|
||||||
|
ap.put(`/api/gun/me`, apiGunMePut)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return app so that it can be used by express.
|
* Return app so that it can be used by express.
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
16
yarn.lock
16
yarn.lock
|
|
@ -4298,10 +4298,10 @@ lodash@=4.17.4:
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
|
||||||
integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
|
integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4=
|
||||||
|
|
||||||
lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4, lodash@^4.17.5:
|
lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.5.0:
|
||||||
version "4.17.15"
|
version "4.17.19"
|
||||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548"
|
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||||
integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==
|
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
|
||||||
|
|
||||||
log-symbols@^3.0.0:
|
log-symbols@^3.0.0:
|
||||||
version "3.0.0"
|
version "3.0.0"
|
||||||
|
|
@ -6505,10 +6505,10 @@ typedarray-dts@^1.0.0:
|
||||||
resolved "https://registry.yarnpkg.com/typedarray-dts/-/typedarray-dts-1.0.0.tgz#9dec9811386dbfba964c295c2606cf9a6b982d06"
|
resolved "https://registry.yarnpkg.com/typedarray-dts/-/typedarray-dts-1.0.0.tgz#9dec9811386dbfba964c295c2606cf9a6b982d06"
|
||||||
integrity sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==
|
integrity sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==
|
||||||
|
|
||||||
typescript@^3.6.3:
|
typescript@^3.9.6:
|
||||||
version "3.6.3"
|
version "3.9.6"
|
||||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.3.tgz#fea942fabb20f7e1ca7164ff626f1a9f3f70b4da"
|
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.6.tgz#8f3e0198a34c3ae17091b35571d3afd31999365a"
|
||||||
integrity sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==
|
integrity sha512-Pspx3oKAPJtjNwE92YS05HQoY7z2SFyOpHo9MqJor3BXAGNaPUs83CuVp9VISFkSjyRfiTpmKuAYGJB7S7hOxw==
|
||||||
|
|
||||||
uglify-js@^3.1.4:
|
uglify-js@^3.1.4:
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue