mirror of
https://github.com/ragestudio/linebridge.git
synced 2025-06-09 10:34:17 +00:00
moved entire projecto to one source
This commit is contained in:
parent
b39948a0a9
commit
fc3a816e32
@ -1,6 +1,8 @@
|
||||
{
|
||||
"devRuntime": {
|
||||
"headPackage": "relic"
|
||||
"development": {
|
||||
"origitGit": ""
|
||||
},
|
||||
"version": "0.1.2"
|
||||
"modulesAliases": {
|
||||
"@classes": "./dist/classes"
|
||||
}
|
||||
}
|
8
.gitignore
vendored
8
.gitignore
vendored
@ -1,7 +1,13 @@
|
||||
node_modules
|
||||
dist
|
||||
dumps.log
|
||||
origin.server
|
||||
server.registry
|
||||
server.manifest
|
||||
|
||||
*/**/node_modules
|
||||
*/**/dist
|
||||
*/**/dumps.log
|
||||
|
||||
*/**/origin.server
|
||||
*/**/server.registry
|
||||
*/**/server.manifest
|
6
bin/server.js
Normal file
6
bin/server.js
Normal 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() })
|
@ -1,4 +1,4 @@
|
||||
const { Storage } = require('@@classes')
|
||||
const { Storage } = require('@classes')
|
||||
const path = require('path')
|
||||
const { performance } = require('perf_hooks')
|
||||
|
@ -5,7 +5,7 @@ const fs = require('fs')
|
||||
|
||||
//* LIBS
|
||||
const { objectToArrayMap } = require("@corenode/utils")
|
||||
const TOKENIZER = require("./lib/tokenizer")
|
||||
const tokenizer = require("corenode/dist/libs/tokenizer")
|
||||
const { websocket } = require("corenode").net
|
||||
|
||||
//* GLOBALS
|
||||
@ -24,7 +24,7 @@ const HUB = {
|
||||
ids: {},
|
||||
addresses: {}, // not storaged to registry
|
||||
entries: [],
|
||||
oids: [],
|
||||
oskids: [],
|
||||
registry: {},
|
||||
add: (payload) => {
|
||||
|
||||
@ -35,12 +35,12 @@ const HUB = {
|
||||
HUB.update()
|
||||
},
|
||||
del: (oid) => {
|
||||
const addressIndex = HUB.oids.indexOf(oid)
|
||||
const addressIndex = HUB.oskids.indexOf(oid)
|
||||
const item = HUB.registry[oid]
|
||||
|
||||
delete HUB.ids[item.id]
|
||||
delete HUB.registry[oid]
|
||||
delete HUB.oids[addressIndex]
|
||||
delete HUB.oskids[addressIndex]
|
||||
delete HUB.entries[addressIndex]
|
||||
|
||||
HUB.update()
|
||||
@ -49,7 +49,7 @@ const HUB = {
|
||||
const data = {
|
||||
ids: HUB.ids,
|
||||
entries: HUB.entries,
|
||||
oids: HUB.oids,
|
||||
oids: HUB.oskids,
|
||||
registry: HUB.registry,
|
||||
}
|
||||
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')) ?? {}
|
||||
|
||||
HUB.entries = data.entries
|
||||
HUB.oids = data.oids
|
||||
HUB.oskids = data.oids
|
||||
HUB.registry = data.registry
|
||||
}
|
||||
}
|
||||
@ -86,7 +86,7 @@ const GEN = {
|
||||
create: () => {
|
||||
let data = {
|
||||
created: Date.now(),
|
||||
serverToken: TOKENIZER.generate()
|
||||
serverToken: tokenizer.generate()
|
||||
}
|
||||
|
||||
GEN.write(data)
|
||||
@ -117,7 +117,7 @@ function getUptime() {
|
||||
}
|
||||
function getRegistryFromEntry(entry) {
|
||||
const index = HUB.entries.indexOf(entry)
|
||||
const oid = HUB.oids[index]
|
||||
const oid = HUB.oskids[index]
|
||||
|
||||
return HUB.registry[oid]
|
||||
}
|
||||
@ -153,29 +153,6 @@ function init() {
|
||||
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() {
|
||||
//? set middlewares
|
||||
@ -203,8 +180,6 @@ function start() {
|
||||
})
|
||||
})
|
||||
|
||||
// TODO: set websocket server heap & events
|
||||
startHeartbeatServer()
|
||||
SERVER.get("/heartbeat", (req, res, next) => {
|
||||
res.json({
|
||||
uptime: getUptime()
|
||||
@ -229,7 +204,7 @@ function start() {
|
||||
|
||||
//? validate oid token
|
||||
if (typeof oid !== "undefined") {
|
||||
if (!TOKENIZER.valid(oid)) {
|
||||
if (!tokenizer.valid(oid)) {
|
||||
res.status(403)
|
||||
return res.json({
|
||||
error: `[${oid}] Is an invalid OID!`
|
||||
@ -261,12 +236,12 @@ function start() {
|
||||
}
|
||||
|
||||
if (typeof oid === "undefined") {
|
||||
oid = TOKENIZER.generate(address)
|
||||
oid = tokenizer.generate(address)
|
||||
}
|
||||
|
||||
//? add to hub
|
||||
HUB.entries.push(entry)
|
||||
HUB.oids.push(oid)
|
||||
HUB.oskids.push(oid)
|
||||
HUB.addresses[address] = Number(addresses[address]) + 1 ?? Number(1)
|
||||
|
||||
mutation.oid = oid
|
17
nethub/src/lib/tokenizer/index.js
Normal file
17
nethub/src/lib/tokenizer/index.js
Normal 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
7443
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
41
package.json
41
package.json
@ -1,23 +1,36 @@
|
||||
{
|
||||
"private": true,
|
||||
"name": "relic",
|
||||
"version": "0.1.2",
|
||||
"author": "RageStudio",
|
||||
"license": "ISC",
|
||||
"workspaces": [
|
||||
"packages/*"
|
||||
],
|
||||
"name": "cloudlink",
|
||||
"version": "0.2.5",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"scripts": {
|
||||
"dev:server": "cd ./packages/server && npm run dev",
|
||||
"dev:nethub": "cd ./packages/nethub && npm run dev",
|
||||
"dev:relic": "cd ./packages/relic && npm run dev"
|
||||
"start:server": "corenode ./bin/server.js",
|
||||
"dev:server": "cross-env NODE_ENV=development nodemon --ignore dist/ --exec 'corenode build && corenode' ./bin/server.js"
|
||||
},
|
||||
"bin": {
|
||||
"clserver": "./bin/server.js"
|
||||
},
|
||||
"publishConfig": {
|
||||
"access": "public"
|
||||
},
|
||||
"files": [
|
||||
"dist",
|
||||
".corenode.json",
|
||||
"load.addon.js"
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"axios": "^0.21.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": {
|
||||
"cross-env": "^7.0.3",
|
||||
"nodemon": "^2.0.7"
|
||||
"nodemon": "^2.0.7",
|
||||
"cross-env": "^7.0.3"
|
||||
}
|
||||
}
|
@ -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 }
|
@ -1 +0,0 @@
|
||||
# relic
|
@ -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"
|
||||
}
|
||||
}
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"development": {
|
||||
"origitGit": ""
|
||||
},
|
||||
"modulesAliases": {
|
||||
"@classes": "./dist/classes"
|
||||
}
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env corenode
|
||||
const relic = require("../dist")
|
||||
const script = process.argv[2]
|
||||
|
||||
// create server
|
||||
new relic.Server({ autoInit: true })
|
@ -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"
|
||||
}
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
class Tokenizer {
|
||||
|
||||
}
|
||||
|
||||
module.exports = { Tokenizer }
|
@ -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 }
|
@ -2,5 +2,3 @@ export { Authorization } from './Authorization'
|
||||
export { Controller } from './Controller'
|
||||
export { Database } from './Database'
|
||||
export { Storage } from './Storage'
|
||||
|
||||
export { Tokenizer } from './Tokenization'
|
14
src/index.js
Normal file
14
src/index.js
Normal 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 }
|
17
src/lib/tokenizer/index.js
Normal file
17
src/lib/tokenizer/index.js
Normal 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 }
|
@ -1,53 +1,12 @@
|
||||
const uuid = require("uuid")
|
||||
const os = require("os")
|
||||
const path = require("path")
|
||||
const fs = require("fs")
|
||||
const express = require("express")
|
||||
const { objectToArrayMap } = require("@corenode/utils")
|
||||
|
||||
const SERVER_VERSION = global.SERVER_VERSION = runtime.helpers.getVersion()
|
||||
const SERVER_GENFILE = "origin.server"
|
||||
const SERVER_GENFILEPATH = path.resolve(process.cwd(), SERVER_GENFILE)
|
||||
const IS_DEV = global.IS_DEV = runtime.helpers.isDevMode()
|
||||
|
||||
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 serverManifest = require("../serverManifest")
|
||||
const tokenizer = require("../lib/tokenizer")
|
||||
const classes = require("../classes")
|
||||
const { getLocalEndpoints, fetchController } = require("../lib/helpers")
|
||||
const nethub = require("../lib/nethub")
|
||||
|
||||
const defaultMiddlewares = [
|
||||
require('cors')(),
|
||||
@ -63,32 +22,25 @@ const defaultHeaders = {
|
||||
"Access-Control-Allow-Credentials": "true",
|
||||
}
|
||||
|
||||
class RequestServer {
|
||||
class Server {
|
||||
constructor(params, endpoints, middlewares) {
|
||||
this.params = params ?? {}
|
||||
|
||||
// set params jails
|
||||
this.id = this.params.id ?? runtime.helpers.getRootPackage().name
|
||||
//* set params jails
|
||||
this.routes = []
|
||||
this.endpoints = { ...endpoints }
|
||||
this.middlewares = [...defaultMiddlewares]
|
||||
this.headers = {
|
||||
...defaultHeaders,
|
||||
...this.params.headers
|
||||
}
|
||||
this.middlewares = [...defaultMiddlewares, ...middlewares ?? []]
|
||||
this.headers = { ...defaultHeaders, ...this.params.headers }
|
||||
|
||||
// process params
|
||||
if (typeof middlewares !== "undefined" && Array.isArray(middlewares)) {
|
||||
middlewares.forEach((middleware) => {
|
||||
this.middlewares.push(middleware)
|
||||
})
|
||||
}
|
||||
|
||||
// set server basics
|
||||
//* set server basics
|
||||
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._onRequest = {}
|
||||
|
||||
@ -118,7 +70,7 @@ class RequestServer {
|
||||
|
||||
registerEndpoint(method, route, controller) {
|
||||
if (typeof controller === "function") {
|
||||
controller = new Controller(route, controller)
|
||||
controller = new classes.Controller(route, controller)
|
||||
}
|
||||
|
||||
const endpoint = { method: method, route: route, controller: controller }
|
||||
@ -148,26 +100,26 @@ class RequestServer {
|
||||
|
||||
init() {
|
||||
//? check if origin.server exists
|
||||
if (!fs.existsSync(SERVER_GENFILEPATH)) {
|
||||
GEN.create()
|
||||
if (!fs.existsSync(SERVER_MANIFEST_PATH)) {
|
||||
serverManifest.create()
|
||||
}
|
||||
|
||||
//? check origin.server integrity
|
||||
const GENDATA = global.GENDATA = GEN.get()
|
||||
const GENSTAT = global.GENSTAT = GEN.stat()
|
||||
const MANIFEST_DATA = global.MANIFEST_DATA = serverManifest.get()
|
||||
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")
|
||||
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!")
|
||||
GEN.create()
|
||||
serverManifest.create()
|
||||
}
|
||||
|
||||
//? set last start
|
||||
GEN.write({ lastStart: Date.now() })
|
||||
serverManifest.write({ lastStart: Date.now() })
|
||||
|
||||
const localEndpoints = getLocalEndpoints()
|
||||
|
||||
@ -205,7 +157,7 @@ class RequestServer {
|
||||
fn = "default"
|
||||
}
|
||||
|
||||
this.registerEndpoint(method, route, new Controller(route, controller[fn]))
|
||||
this.registerEndpoint(method, route, new classes.Controller(route, controller[fn]))
|
||||
} catch (error) {
|
||||
runtime.logger.dump(error)
|
||||
console.error(error)
|
||||
@ -218,9 +170,10 @@ class RequestServer {
|
||||
this.registerEndpoint("get", "/", (req, res) => {
|
||||
// here server origin resolver
|
||||
res.json({
|
||||
time: new Date().getTime(),
|
||||
id: this.id,
|
||||
usid: this.usid,
|
||||
originID: this.params.oid ?? "RelicServer",
|
||||
oskid: this.oskid,
|
||||
time: new Date().getTime(),
|
||||
version: SERVER_VERSION
|
||||
})
|
||||
})
|
||||
@ -232,10 +185,14 @@ class RequestServer {
|
||||
})
|
||||
|
||||
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}!`)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { Controller, Server: RequestServer }
|
||||
module.exports = Server
|
42
src/serverManifest/index.js
Normal file
42
src/serverManifest/index.js
Normal 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
|
Loading…
x
Reference in New Issue
Block a user