moved entire projecto to one source

This commit is contained in:
srgooglo 2021-06-16 13:02:11 +02:00
parent b39948a0a9
commit fc3a816e32
43 changed files with 6216 additions and 8179 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -1,6 +1,8 @@
{ {
"devRuntime": { "development": {
"headPackage": "relic" "origitGit": ""
}, },
"version": "0.1.2" "modulesAliases": {
"@classes": "./dist/classes"
}
} }

8
.gitignore vendored
View File

@ -1,7 +1,13 @@
node_modules node_modules
dist
dumps.log
origin.server
server.registry
server.manifest
*/**/node_modules */**/node_modules
*/**/dist */**/dist
*/**/dumps.log */**/dumps.log
*/**/origin.server */**/origin.server
*/**/server.registry */**/server.registry
*/**/server.manifest

6
bin/server.js Normal file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env corenode
const cloudlink = require("../src/dist")
const random = require("corenode/dist/libs/random")
// create server
new cloudlink.Server({ autoInit: true, id: runtime.args.id ?? random.generateName() })

5528
dumps.log

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
const { Storage } = require('@@classes') const { Storage } = require('@classes')
const path = require('path') const path = require('path')
const { performance } = require('perf_hooks') const { performance } = require('perf_hooks')

View File

@ -5,7 +5,7 @@ const fs = require('fs')
//* LIBS //* LIBS
const { objectToArrayMap } = require("@corenode/utils") const { objectToArrayMap } = require("@corenode/utils")
const TOKENIZER = require("./lib/tokenizer") const tokenizer = require("corenode/dist/libs/tokenizer")
const { websocket } = require("corenode").net const { websocket } = require("corenode").net
//* GLOBALS //* GLOBALS
@ -24,7 +24,7 @@ const HUB = {
ids: {}, ids: {},
addresses: {}, // not storaged to registry addresses: {}, // not storaged to registry
entries: [], entries: [],
oids: [], oskids: [],
registry: {}, registry: {},
add: (payload) => { add: (payload) => {
@ -35,12 +35,12 @@ const HUB = {
HUB.update() HUB.update()
}, },
del: (oid) => { del: (oid) => {
const addressIndex = HUB.oids.indexOf(oid) const addressIndex = HUB.oskids.indexOf(oid)
const item = HUB.registry[oid] const item = HUB.registry[oid]
delete HUB.ids[item.id] delete HUB.ids[item.id]
delete HUB.registry[oid] delete HUB.registry[oid]
delete HUB.oids[addressIndex] delete HUB.oskids[addressIndex]
delete HUB.entries[addressIndex] delete HUB.entries[addressIndex]
HUB.update() HUB.update()
@ -49,7 +49,7 @@ const HUB = {
const data = { const data = {
ids: HUB.ids, ids: HUB.ids,
entries: HUB.entries, entries: HUB.entries,
oids: HUB.oids, oids: HUB.oskids,
registry: HUB.registry, registry: HUB.registry,
} }
return fs.writeFileSync(SERVER_REGISTRYPATH, JSON.stringify(data, null, 2), { encoding: "utf-8" }) return fs.writeFileSync(SERVER_REGISTRYPATH, JSON.stringify(data, null, 2), { encoding: "utf-8" })
@ -59,7 +59,7 @@ const HUB = {
const data = JSON.parse(fs.readFileSync(SERVER_REGISTRYPATH, 'utf8')) ?? {} const data = JSON.parse(fs.readFileSync(SERVER_REGISTRYPATH, 'utf8')) ?? {}
HUB.entries = data.entries HUB.entries = data.entries
HUB.oids = data.oids HUB.oskids = data.oids
HUB.registry = data.registry HUB.registry = data.registry
} }
} }
@ -86,7 +86,7 @@ const GEN = {
create: () => { create: () => {
let data = { let data = {
created: Date.now(), created: Date.now(),
serverToken: TOKENIZER.generate() serverToken: tokenizer.generate()
} }
GEN.write(data) GEN.write(data)
@ -117,7 +117,7 @@ function getUptime() {
} }
function getRegistryFromEntry(entry) { function getRegistryFromEntry(entry) {
const index = HUB.entries.indexOf(entry) const index = HUB.entries.indexOf(entry)
const oid = HUB.oids[index] const oid = HUB.oskids[index]
return HUB.registry[oid] return HUB.registry[oid]
} }
@ -153,29 +153,6 @@ function init() {
start() start()
} }
function startHeartbeatServer() {
const heartbeatServer = websocket.server.createInstance({
port: 1011,
onMessage: (connection, message) => {
setTimeout(() => {
const index = Number(message.utf8Data)
connection.send(index + 1)
}, 1000)
},
authorizeOrigin: (origin) => {
// await 5s to simulate an authorization process
return new Promise((resolve, reject) => {
setTimeout(() => {
return resolve(true)
}, 5000)
})
},
onClose: () => {
}
})
}
function start() { function start() {
//? set middlewares //? set middlewares
@ -203,8 +180,6 @@ function start() {
}) })
}) })
// TODO: set websocket server heap & events
startHeartbeatServer()
SERVER.get("/heartbeat", (req, res, next) => { SERVER.get("/heartbeat", (req, res, next) => {
res.json({ res.json({
uptime: getUptime() uptime: getUptime()
@ -229,7 +204,7 @@ function start() {
//? validate oid token //? validate oid token
if (typeof oid !== "undefined") { if (typeof oid !== "undefined") {
if (!TOKENIZER.valid(oid)) { if (!tokenizer.valid(oid)) {
res.status(403) res.status(403)
return res.json({ return res.json({
error: `[${oid}] Is an invalid OID!` error: `[${oid}] Is an invalid OID!`
@ -261,12 +236,12 @@ function start() {
} }
if (typeof oid === "undefined") { if (typeof oid === "undefined") {
oid = TOKENIZER.generate(address) oid = tokenizer.generate(address)
} }
//? add to hub //? add to hub
HUB.entries.push(entry) HUB.entries.push(entry)
HUB.oids.push(oid) HUB.oskids.push(oid)
HUB.addresses[address] = Number(addresses[address]) + 1 ?? Number(1) HUB.addresses[address] = Number(addresses[address]) + 1 ?? Number(1)
mutation.oid = oid mutation.oid = oid

View File

@ -0,0 +1,17 @@
const { validate, version, v5, v4 } = require('uuid')
const os = require('os')
// Unique session ID
function generateUSID() {
return v4()
}
// Origin Server Key ID
function generateOSKID(hostname) {
return v5(hostname ?? os.hostname(), v4())
}
function validateOSKID(uuid) {
return validate(uuid) && version(uuid) === 5
}
module.exports = { generateUSID, generateOSKID, validateOSKID }

7443
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,23 +1,36 @@
{ {
"private": true, "name": "cloudlink",
"name": "relic", "version": "0.2.5",
"version": "0.1.2", "main": "dist/index.js",
"author": "RageStudio", "types": "dist/index.d.ts",
"license": "ISC",
"workspaces": [
"packages/*"
],
"scripts": { "scripts": {
"dev:server": "cd ./packages/server && npm run dev", "start:server": "corenode ./bin/server.js",
"dev:nethub": "cd ./packages/nethub && npm run dev", "dev:server": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec 'corenode build && corenode' ./bin/server.js"
"dev:relic": "cd ./packages/relic && npm run dev"
}, },
"bin": {
"clserver": "./bin/server.js"
},
"publishConfig": {
"access": "public"
},
"files": [
"dist",
".corenode.json",
"load.addon.js"
],
"license": "MIT",
"dependencies": { "dependencies": {
"axios": "^0.21.1",
"corenode": "^0.25.1", "corenode": "^0.25.1",
"@babel/runtime": "^7.14.0" "cors": "^2.8.5",
"express": "^4.17.1",
"express-fileupload": "^1.2.1",
"morgan": "^1.10.0",
"uuid": "^8.3.2",
"websocket": "^1.0.34"
}, },
"devDependencies": { "devDependencies": {
"cross-env": "^7.0.3", "nodemon": "^2.0.7",
"nodemon": "^2.0.7" "cross-env": "^7.0.3"
} }
} }

View File

@ -1,12 +0,0 @@
const { validate, version, v5, v4 } = require('uuid')
const os = require('os')
function generate(hostname) {
return v5(hostname ?? os.hostname(), v4())
}
function valid(uuid) {
return validate(uuid) && version(uuid) === 5
}
module.exports = { generate, valid }

View File

@ -1 +0,0 @@
# relic

View File

@ -1,18 +0,0 @@
{
"name": "@ragestudio/relic",
"version": "0.1.2",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"publishConfig": {
"access": "public"
},
"files": [
"dist",
"load.addon.js"
],
"license": "MIT",
"dependencies": {
"axios": "^0.21.1",
"websocket": "^1.0.34"
}
}

View File

@ -1,8 +0,0 @@
{
"development": {
"origitGit": ""
},
"modulesAliases": {
"@classes": "./dist/classes"
}
}

View File

@ -1,6 +0,0 @@
#!/usr/bin/env corenode
const relic = require("../dist")
const script = process.argv[2]
// create server
new relic.Server({ autoInit: true })

View File

@ -1,36 +0,0 @@
{
"name": "@ragestudio/relic-server",
"version": "0.2.2",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"scripts": {
"start": "corenode ./bin/index.js",
"dev": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec 'corenode build && corenode' ./bin/index.js"
},
"bin": {
"rcs": "corenode ./bin/index.js"
},
"publishConfig": {
"access": "public"
},
"files": [
"dist",
".corenode.json",
"load.addon.js"
],
"license": "MIT",
"dependencies": {
"axios": "^0.21.1",
"corenode": "^0.25.1",
"cors": "^2.8.5",
"express": "^4.17.1",
"express-fileupload": "^1.2.1",
"morgan": "^1.10.0",
"uuid": "^8.3.2",
"websocket": "^1.0.34"
},
"devDependencies": {
"nodemon": "^2.0.7",
"cross-env": "^7.0.3"
}
}

View File

@ -1,5 +0,0 @@
class Tokenizer {
}
module.exports = { Tokenizer }

View File

@ -1,12 +0,0 @@
const { validate, version, v5, v4 } = require('uuid')
const os = require('os')
function generate(hostname) {
return v5(hostname ?? os.hostname(), v4())
}
function valid(uuid) {
return validate(uuid) && version(uuid) === 5
}
module.exports = { generate, valid }

View File

@ -1,6 +1,4 @@
export { Authorization } from './Authorization' export { Authorization } from './Authorization'
export { Controller } from './Controller' export { Controller } from './Controller'
export { Database } from './Database' export { Database } from './Database'
export { Storage } from './Storage' export { Storage } from './Storage'
export { Tokenizer } from './Tokenization'

14
src/index.js Normal file
View File

@ -0,0 +1,14 @@
const path = require('path')
//* set globals
global.IS_DEV = runtime.helpers.isDevMode()
global.SERVER_VERSION = runtime.helpers.getVersion()
global.SERVER_MANIFEST = "server.manifest"
global.SERVER_MANIFEST_PATH = path.resolve(process.cwd(), SERVER_MANIFEST)
//* import libraries
const classes = require('./classes')
const Server = require("./server")
//* export libraries
module.exports = { Server, ...classes }

View File

@ -0,0 +1,17 @@
const { validate, version, v5, v4 } = require('uuid')
const os = require('os')
// Unique session ID
function generateUSID() {
return v4()
}
// Origin Server Key ID
function generateOSKID(hostname) {
return v5(hostname ?? os.hostname(), v4())
}
function validateOSKID(uuid) {
return validate(uuid) && version(uuid) === 5
}
module.exports = { generateUSID, generateOSKID, validateOSKID }

View File

@ -1,53 +1,12 @@
const uuid = require("uuid")
const os = require("os")
const path = require("path")
const fs = require("fs") const fs = require("fs")
const express = require("express") const express = require("express")
const { objectToArrayMap } = require("@corenode/utils") const { objectToArrayMap } = require("@corenode/utils")
const SERVER_VERSION = global.SERVER_VERSION = runtime.helpers.getVersion() const serverManifest = require("../serverManifest")
const SERVER_GENFILE = "origin.server" const tokenizer = require("../lib/tokenizer")
const SERVER_GENFILEPATH = path.resolve(process.cwd(), SERVER_GENFILE) const classes = require("../classes")
const IS_DEV = global.IS_DEV = runtime.helpers.isDevMode() const { getLocalEndpoints, fetchController } = require("../lib/helpers")
const nethub = require("../lib/nethub")
const { Controller } = require("@classes")
const { getLocalEndpoints, fetchController } = require("./lib/helpers")
const nethub = require("./lib/nethub")
const TOKENIZER = require("./lib/tokenizer")
const GEN = {
stat: () => {
return fs.lstatSync(SERVER_GENFILEPATH)
},
get: (key) => {
let data = {}
if (fs.existsSync(SERVER_GENFILEPATH)) {
data = JSON.parse(fs.readFileSync(SERVER_GENFILEPATH, 'utf8'))
}
if (typeof key === "string") {
return data[key]
}
return data
},
write: (mutation) => {
let data = GEN.get()
data = { ...data, ...mutation }
GEN.data = data
return fs.writeFileSync(SERVER_GENFILEPATH, JSON.stringify(data, null, 2), { encoding: "utf-8" })
},
create: () => {
let data = {
created: Date.now(),
serverToken: TOKENIZER.generate()
}
GEN.write(data)
},
file: SERVER_GENFILE,
filepath: SERVER_GENFILEPATH,
}
const defaultMiddlewares = [ const defaultMiddlewares = [
require('cors')(), require('cors')(),
@ -63,32 +22,25 @@ const defaultHeaders = {
"Access-Control-Allow-Credentials": "true", "Access-Control-Allow-Credentials": "true",
} }
class RequestServer { class Server {
constructor(params, endpoints, middlewares) { constructor(params, endpoints, middlewares) {
this.params = params ?? {} this.params = params ?? {}
// set params jails //* set params jails
this.id = this.params.id ?? runtime.helpers.getRootPackage().name
this.routes = [] this.routes = []
this.endpoints = { ...endpoints } this.endpoints = { ...endpoints }
this.middlewares = [...defaultMiddlewares] this.middlewares = [...defaultMiddlewares, ...middlewares ?? []]
this.headers = { this.headers = { ...defaultHeaders, ...this.params.headers }
...defaultHeaders,
...this.params.headers
}
// process params //* set server basics
if (typeof middlewares !== "undefined" && Array.isArray(middlewares)) {
middlewares.forEach((middleware) => {
this.middlewares.push(middleware)
})
}
// set server basics
this.httpServer = require("express")() this.httpServer = require("express")()
this.usid = uuid.v5(os.hostname(), uuid.v4()) // unique session identifier
this.oid = GEN.get("serverToken")
//* set id's
this.id = this.params.id ?? runtime.helpers.getRootPackage().name
this.usid = tokenizer.generateUSID()
this.oskid = serverManifest.get("serverToken")
//* set events & params
this._everyRequest = null this._everyRequest = null
this._onRequest = {} this._onRequest = {}
@ -118,7 +70,7 @@ class RequestServer {
registerEndpoint(method, route, controller) { registerEndpoint(method, route, controller) {
if (typeof controller === "function") { if (typeof controller === "function") {
controller = new Controller(route, controller) controller = new classes.Controller(route, controller)
} }
const endpoint = { method: method, route: route, controller: controller } const endpoint = { method: method, route: route, controller: controller }
@ -148,26 +100,26 @@ class RequestServer {
init() { init() {
//? check if origin.server exists //? check if origin.server exists
if (!fs.existsSync(SERVER_GENFILEPATH)) { if (!fs.existsSync(SERVER_MANIFEST_PATH)) {
GEN.create() serverManifest.create()
} }
//? check origin.server integrity //? check origin.server integrity
const GENDATA = global.GENDATA = GEN.get() const MANIFEST_DATA = global.MANIFEST_DATA = serverManifest.get()
const GENSTAT = global.GENSTAT = GEN.stat() const MANIFEST_STAT = global.MANIFEST_STAT = serverManifest.stat()
if (typeof GENDATA.created === "undefined") { if (typeof MANIFEST_DATA.created === "undefined") {
console.warn("Server generation file not contains an creation date") console.warn("Server generation file not contains an creation date")
GEN.write({ created: Date.parse(GENSTAT.birthtime) }) serverManifest.write({ created: Date.parse(MANIFEST_STAT.birthtime) })
} }
if (typeof GENDATA.serverToken === "undefined") { if (typeof MANIFEST_DATA.serverToken === "undefined") {
console.warn("Missing server token!") console.warn("Missing server token!")
GEN.create() serverManifest.create()
} }
//? set last start //? set last start
GEN.write({ lastStart: Date.now() }) serverManifest.write({ lastStart: Date.now() })
const localEndpoints = getLocalEndpoints() const localEndpoints = getLocalEndpoints()
@ -205,7 +157,7 @@ class RequestServer {
fn = "default" fn = "default"
} }
this.registerEndpoint(method, route, new Controller(route, controller[fn])) this.registerEndpoint(method, route, new classes.Controller(route, controller[fn]))
} catch (error) { } catch (error) {
runtime.logger.dump(error) runtime.logger.dump(error)
console.error(error) console.error(error)
@ -218,9 +170,10 @@ class RequestServer {
this.registerEndpoint("get", "/", (req, res) => { this.registerEndpoint("get", "/", (req, res) => {
// here server origin resolver // here server origin resolver
res.json({ res.json({
time: new Date().getTime(), id: this.id,
usid: this.usid, usid: this.usid,
originID: this.params.oid ?? "RelicServer", oskid: this.oskid,
time: new Date().getTime(),
version: SERVER_VERSION version: SERVER_VERSION
}) })
}) })
@ -232,10 +185,14 @@ class RequestServer {
}) })
this.httpServer.listen(this.params.port, () => { this.httpServer.listen(this.params.port, () => {
nethub.registerOrigin({ entry: "/", oid: this.oid, id: this.id }) //? register to nethub
if (this.params.onlineNethub) {
nethub.registerOrigin({ entry: "/", oskid: this.oskid, id: this.id })
}
console.log(`✅ Ready on port ${this.params.port}!`) console.log(`✅ Ready on port ${this.params.port}!`)
}) })
} }
} }
module.exports = { Controller, Server: RequestServer } module.exports = Server

View File

@ -0,0 +1,42 @@
const tokenizer = require("../lib/tokenizer")
const path = require("path")
const fs = require("fs")
const SERVER_MANIFEST = global.SERVER_MANIFEST ?? "server.manifest"
const SERVER_MANIFEST_PATH = global.SERVER_MANIFEST_PATH ?? path.resolve(process.cwd(), SERVER_MANIFEST)
const serverfile = {
stat: () => {
return fs.lstatSync(SERVER_MANIFEST)
},
get: (key) => {
let data = {}
if (fs.existsSync(SERVER_MANIFEST)) {
data = JSON.parse(fs.readFileSync(SERVER_MANIFEST_PATH, 'utf8'))
}
if (typeof key === "string") {
return data[key]
}
return data
},
write: (mutation) => {
let data = serverfile.get()
data = { ...data, ...mutation }
serverfile.data = data
return fs.writeFileSync(SERVER_MANIFEST_PATH, JSON.stringify(data, null, 2), { encoding: "utf-8" })
},
create: () => {
let data = {
created: Date.now(),
serverToken: tokenizer.generateOSKID()
}
serverfile.write(data)
},
file: SERVER_MANIFEST,
filepath: SERVER_MANIFEST_PATH,
}
module.exports = serverfile

1003
yarn.lock

File diff suppressed because it is too large Load Diff