Compare commits
12 Commits
Author | SHA1 | Date | |
---|---|---|---|
b34be4dcba | |||
6cc69efe2d | |||
8c30f294bc | |||
228eb791b7 | |||
057476ae66 | |||
cb80e4dc2e | |||
8410e09a4d | |||
eb04abddbf | |||
57809d9b53 | |||
bee5231d47 | |||
df45287026 | |||
b5b6ca81cf |
20
.gitignore
vendored
20
.gitignore
vendored
@ -1,6 +1,22 @@
|
|||||||
.nogit/
|
.nogit/
|
||||||
node_modules/
|
|
||||||
dist/
|
# artifacts
|
||||||
coverage/
|
coverage/
|
||||||
public/
|
public/
|
||||||
pages/
|
pages/
|
||||||
|
|
||||||
|
# installs
|
||||||
|
node_modules/
|
||||||
|
|
||||||
|
# caches
|
||||||
|
.yarn/
|
||||||
|
.cache/
|
||||||
|
.rpt2_cache
|
||||||
|
|
||||||
|
# builds
|
||||||
|
dist/
|
||||||
|
dist_web/
|
||||||
|
dist_serve/
|
||||||
|
dist_ts_web/
|
||||||
|
|
||||||
|
# custom
|
@ -1,4 +1,4 @@
|
|||||||
# gitzone standard
|
# gitzone ci_default
|
||||||
image: hosttoday/ht-docker-node:npmci
|
image: hosttoday/ht-docker-node:npmci
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
@ -78,19 +78,11 @@ release:
|
|||||||
# ====================
|
# ====================
|
||||||
codequality:
|
codequality:
|
||||||
stage: metadata
|
stage: metadata
|
||||||
image: docker:stable
|
|
||||||
allow_failure: true
|
allow_failure: true
|
||||||
services:
|
|
||||||
- docker:stable-dind
|
|
||||||
script:
|
script:
|
||||||
- export SP_VERSION=$(echo "$CI_SERVER_VERSION" | sed 's/^\([0-9]*\)\.\([0-9]*\).*/\1-\2-stable/')
|
- npmci command npm install -g tslint typescript
|
||||||
- docker run
|
- npmci npm install
|
||||||
--env SOURCE_CODE="$PWD"
|
- npmci command "tslint -c tslint.json ./ts/**/*.ts"
|
||||||
--volume "$PWD":/code
|
|
||||||
--volume /var/run/docker.sock:/var/run/docker.sock
|
|
||||||
"registry.gitlab.com/gitlab-org/security-products/codequality:$SP_VERSION" /code
|
|
||||||
artifacts:
|
|
||||||
paths: [codeclimate.json]
|
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- priv
|
- priv
|
||||||
@ -109,10 +101,10 @@ pages:
|
|||||||
image: hosttoday/ht-docker-node:npmci
|
image: hosttoday/ht-docker-node:npmci
|
||||||
stage: metadata
|
stage: metadata
|
||||||
script:
|
script:
|
||||||
- npmci command npm install -g typedoc typescript
|
- npmci command npm install -g @gitzone/tsdoc
|
||||||
- npmci npm prepare
|
- npmci npm prepare
|
||||||
- npmci npm install
|
- npmci npm install
|
||||||
- npmci command typedoc --module "commonjs" --target "ES2016" --out public/ ts/
|
- npmci command tsdoc
|
||||||
tags:
|
tags:
|
||||||
- docker
|
- docker
|
||||||
- notpriv
|
- notpriv
|
||||||
|
4
.snyk
Normal file
4
.snyk
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities.
|
||||||
|
version: v1.13.5
|
||||||
|
ignore: {}
|
||||||
|
patch: {}
|
29
.vscode/launch.json
vendored
Normal file
29
.vscode/launch.json
vendored
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "current file",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"${relativeFile}"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "test.ts",
|
||||||
|
"type": "node",
|
||||||
|
"request": "launch",
|
||||||
|
"args": [
|
||||||
|
"test/test.ts"
|
||||||
|
],
|
||||||
|
"runtimeArgs": ["-r", "@gitzone/tsrun"],
|
||||||
|
"cwd": "${workspaceRoot}",
|
||||||
|
"protocol": "inspector",
|
||||||
|
"internalConsoleOptions": "openOnSessionStart"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
889
package-lock.json
generated
889
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
36
package.json
36
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@pushrocks/smartuniverse",
|
"name": "@pushrocks/smartuniverse",
|
||||||
"version": "1.0.47",
|
"version": "1.0.53",
|
||||||
"private": false,
|
"private": false,
|
||||||
"description": "messaging service for your micro services",
|
"description": "messaging service for your micro services",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
@ -14,11 +14,11 @@
|
|||||||
"format": "(gitzone format)"
|
"format": "(gitzone format)"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@gitzone/tsbuild": "^2.1.8",
|
"@gitzone/tsbuild": "^2.1.11",
|
||||||
"@gitzone/tstest": "^1.0.20",
|
"@gitzone/tstest": "^1.0.24",
|
||||||
"@pushrocks/tapbundle": "^3.0.9",
|
"@pushrocks/tapbundle": "^3.0.11",
|
||||||
"@types/node": "^11.13.7",
|
"@types/node": "^12.6.8",
|
||||||
"tslint": "^5.16.0",
|
"tslint": "^5.18.0",
|
||||||
"tslint-config-prettier": "^1.18.0"
|
"tslint-config-prettier": "^1.18.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
@ -27,14 +27,24 @@
|
|||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@pushrocks/lik": "^3.0.5",
|
"@pushrocks/lik": "^3.0.5",
|
||||||
"@pushrocks/smartdelay": "^2.0.3",
|
"@pushrocks/smartdelay": "^2.0.3",
|
||||||
"@pushrocks/smartexpress": "^3.0.19",
|
"@pushrocks/smartexpress": "^3.0.35",
|
||||||
"@pushrocks/smartfile": "^7.0.2",
|
"@pushrocks/smartfile": "^7.0.4",
|
||||||
"@pushrocks/smarthash": "^2.0.4",
|
"@pushrocks/smarthash": "^2.0.6",
|
||||||
"@pushrocks/smartpromise": "^3.0.2",
|
"@pushrocks/smartpromise": "^3.0.2",
|
||||||
"@pushrocks/smartrequest": "^1.1.15",
|
"@pushrocks/smartrequest": "^1.1.16",
|
||||||
"@pushrocks/smartrx": "^2.0.3",
|
"@pushrocks/smartrx": "^2.0.3",
|
||||||
"@pushrocks/smartsocket": "^1.1.35",
|
"@pushrocks/smartsocket": "^1.1.38",
|
||||||
"@pushrocks/smarttime": "^3.0.7",
|
"@pushrocks/smarttime": "^3.0.12",
|
||||||
"@pushrocks/smartunique": "^3.0.1"
|
"@pushrocks/smartunique": "^3.0.1"
|
||||||
}
|
},
|
||||||
|
"files": [
|
||||||
|
"ts/*",
|
||||||
|
"ts_web/*",
|
||||||
|
"dist/*",
|
||||||
|
"dist_web/*",
|
||||||
|
"assets/*",
|
||||||
|
"cli.js",
|
||||||
|
"npmextra.json",
|
||||||
|
"readme.md"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
4
ts/interfaces/universeconnection.interfaces.ts
Normal file
4
ts/interfaces/universeconnection.interfaces.ts
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export interface IAuthenticationRequest {
|
||||||
|
channelName: string;
|
||||||
|
password: string;
|
||||||
|
}
|
@ -8,9 +8,7 @@ import * as url from 'url';
|
|||||||
import * as interfaces from './interfaces';
|
import * as interfaces from './interfaces';
|
||||||
|
|
||||||
import { ClientUniverseChannel, UniverseMessage } from './';
|
import { ClientUniverseChannel, UniverseMessage } from './';
|
||||||
import {
|
import { ClientUniverseCache } from './smartuniverse.classes.clientuniversecache';
|
||||||
ClientUniverseCache
|
|
||||||
} from './smartuniverse.classes.clientuniversecache';
|
|
||||||
|
|
||||||
export interface IClientOptions {
|
export interface IClientOptions {
|
||||||
serverAddress: string;
|
serverAddress: string;
|
||||||
@ -70,7 +68,6 @@ export class ClientUniverse {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sends a message towards the server
|
* sends a message towards the server
|
||||||
* @param messageArg
|
* @param messageArg
|
||||||
@ -116,19 +113,13 @@ export class ClientUniverse {
|
|||||||
const unsubscribe = new plugins.smartsocket.SocketFunction({
|
const unsubscribe = new plugins.smartsocket.SocketFunction({
|
||||||
funcName: 'unsubscribe',
|
funcName: 'unsubscribe',
|
||||||
allowedRoles: [],
|
allowedRoles: [],
|
||||||
funcDef: async (data: interfaces.IServerUnsubscribeActionPayload) => {
|
funcDef: async (data: interfaces.IServerUnsubscribeActionPayload) => {}
|
||||||
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* should handle a message reception
|
* should handle a message reception
|
||||||
*/
|
*/
|
||||||
const receiveMessage = async () => {
|
const receiveMessage = async () => {};
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await this.smartsocketClient.connect();
|
await this.smartsocketClient.connect();
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,4 @@ import * as plugins from './smartuniverse.plugins';
|
|||||||
* keeps track of which messages have already been received
|
* keeps track of which messages have already been received
|
||||||
* good for deduplication in mesh environments
|
* good for deduplication in mesh environments
|
||||||
*/
|
*/
|
||||||
export class ClientUniverseCache {
|
export class ClientUniverseCache {}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
import * as plugins from './smartuniverse.plugins';
|
import * as plugins from './smartuniverse.plugins';
|
||||||
|
|
||||||
import * as interfaces from './interfaces';
|
import * as interfaces from './interfaces';
|
||||||
import { IUniverseMessage } from './interfaces';
|
|
||||||
|
|
||||||
export class ClientUniverseMessage implements interfaces.IUniverseMessage {
|
export class ClientUniverseMessage implements interfaces.IUniverseMessage {
|
||||||
// ======
|
// ======
|
||||||
@ -24,11 +23,11 @@ export class ClientUniverseMessage implements interfaces.IUniverseMessage {
|
|||||||
public payloadStringType;
|
public payloadStringType;
|
||||||
public targetChannelName: string;
|
public targetChannelName: string;
|
||||||
|
|
||||||
constructor(messageArg: IUniverseMessage, payloadArg) {
|
constructor(messageArg: interfaces.IUniverseMessage, payloadArg) {
|
||||||
for (const key of Object.keys(messageArg)) {
|
for (const key of Object.keys(messageArg)) {
|
||||||
this[key] = messageArg[key];
|
this[key] = messageArg[key];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getAsJsonForPayload() {};
|
getAsJsonForPayload() {}
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,7 @@ export class Universe {
|
|||||||
this.smartexpressServer = new plugins.smartexpress.Server({
|
this.smartexpressServer = new plugins.smartexpress.Server({
|
||||||
cors: true,
|
cors: true,
|
||||||
defaultAnswer: async () => {
|
defaultAnswer: async () => {
|
||||||
return `smartuniverse server ${this.universeVersion}`;
|
return `smartuniverse server ${this.getUniverseVersion()}`;
|
||||||
},
|
},
|
||||||
forceSsl: false,
|
forceSsl: false,
|
||||||
port: portArg
|
port: portArg
|
||||||
@ -93,12 +93,18 @@ export class Universe {
|
|||||||
this.smartsocket.addSocketRoles([ClientRole]);
|
this.smartsocket.addSocketRoles([ClientRole]);
|
||||||
|
|
||||||
const SubscriptionSocketFunction = new plugins.smartsocket.SocketFunction({
|
const SubscriptionSocketFunction = new plugins.smartsocket.SocketFunction({
|
||||||
allowedRoles: [ClientRole],
|
allowedRoles: [ClientRole], // there is only one client role, Authentication happens on another level
|
||||||
funcName: 'channelSubscription',
|
funcName: 'channelSubscription',
|
||||||
funcDef: (data) => {
|
funcDef: async (dataArg: interfaces.IServerCallSubscribeActionPayload, socketConnectionArg) => {
|
||||||
|
// run in "this context" of this class
|
||||||
(() => {
|
(() => {
|
||||||
this.universeConnectionManager
|
// TODO: properly add the connection
|
||||||
})()
|
const universeConnection = new UniverseConnection({
|
||||||
|
socketConnection: socketConnectionArg,
|
||||||
|
authenticationRequests: []
|
||||||
|
})
|
||||||
|
this.universeConnectionManager.addConnection(universeConnection);
|
||||||
|
})();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -108,7 +114,6 @@ export class Universe {
|
|||||||
await this.smartexpressServer.start();
|
await this.smartexpressServer.start();
|
||||||
await this.smartsocket.start();
|
await this.smartsocket.start();
|
||||||
console.log('started universe');
|
console.log('started universe');
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -52,7 +52,10 @@ export class UniverseCache {
|
|||||||
/**
|
/**
|
||||||
* Read a message from the UniverseCache
|
* Read a message from the UniverseCache
|
||||||
*/
|
*/
|
||||||
public readMessagesYoungerThan(unixTimeArg?: number, channelName?: string): Observable<UniverseMessage> {
|
public readMessagesYoungerThan(
|
||||||
|
unixTimeArg?: number,
|
||||||
|
channelName?: string
|
||||||
|
): Observable<UniverseMessage> {
|
||||||
const messageObservable = from(this.messageMap.getArray()).pipe(
|
const messageObservable = from(this.messageMap.getArray()).pipe(
|
||||||
filter(messageArg => {
|
filter(messageArg => {
|
||||||
return messageArg.smartTimestamp.isYoungerThanMilliSeconds(this.destructionTime);
|
return messageArg.smartTimestamp.isYoungerThanMilliSeconds(this.destructionTime);
|
||||||
|
@ -88,7 +88,5 @@ export class UniverseChannel {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public pushToClients(messageArg: UniverseMessage) {
|
public pushToClients(messageArg: UniverseMessage) {}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,20 +1,35 @@
|
|||||||
import * as plugins from './smartuniverse.plugins';
|
import * as plugins from './smartuniverse.plugins';
|
||||||
import { UniverseChannel } from './smartuniverse.classes.universechannel';
|
import { UniverseChannel } from './smartuniverse.classes.universechannel';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* represents a connection to the universe
|
* represents a connection to the universe
|
||||||
*/
|
*/
|
||||||
export class UniverseConnection {
|
export class UniverseConnection {
|
||||||
|
public terminatedDeferred = plugins.smartpromise.defer();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the socketClient to ping
|
* the socketClient to ping
|
||||||
*/
|
*/
|
||||||
socketclient: plugins.smartsocket.SmartsocketClient;
|
public socketConnection: plugins.smartsocket.SocketConnection;
|
||||||
subscribedChannels: UniverseChannel[] = [];
|
public authenticationRequests = [];
|
||||||
authenticatedChannels: UniverseChannel[] = [];
|
public subscribedChannels: UniverseChannel[] = [];
|
||||||
|
public authenticatedChannels: UniverseChannel[] = [];
|
||||||
|
public failedToJoinChannels: UniverseChannel[] = [];
|
||||||
|
|
||||||
constructor() {
|
/**
|
||||||
|
* terminates the connection
|
||||||
|
*/
|
||||||
|
public terminateConnection () {
|
||||||
|
this.socketConnection.socket.disconnect();
|
||||||
|
this.terminatedDeferred.resolve();
|
||||||
|
}
|
||||||
|
|
||||||
|
constructor(optionsArg: {
|
||||||
|
socketConnection: plugins.smartsocket.SocketConnection;
|
||||||
|
authenticationRequests
|
||||||
|
}) {
|
||||||
|
// TODO: check if this is correct
|
||||||
|
this.socketConnection.socket.disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,48 @@
|
|||||||
import * as plugins from './smartuniverse.plugins';
|
import * as plugins from './smartuniverse.plugins';
|
||||||
|
import { UniverseConnection } from './smartuniverse.classes.universeconnection';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* manages connections to a universe
|
* manages connections to a universe
|
||||||
*/
|
*/
|
||||||
export class UniverseConnectionManager {
|
export class UniverseConnectionManager {
|
||||||
|
public connectionMap = new plugins.lik.Objectmap<UniverseConnection>();
|
||||||
|
|
||||||
|
public async addConnection(universeConnectionArg: UniverseConnection) {
|
||||||
|
let universeConnection = universeConnectionArg;
|
||||||
|
universeConnection = await this.deduplicateUniverseConnection(universeConnection);
|
||||||
|
universeConnection = await this.authenticateAuthenticationRequests(universeConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* deduplicates UniverseConnections
|
||||||
|
*/
|
||||||
|
public async deduplicateUniverseConnection (universeConnectionArg: UniverseConnection): Promise<UniverseConnection> {
|
||||||
|
let connectionToReturn: UniverseConnection;
|
||||||
|
this.connectionMap.forEach(async existingConnection => {
|
||||||
|
if (existingConnection.socketConnection = universeConnectionArg.socketConnection) {
|
||||||
|
connectionToReturn = await this.mergeUniverseConnections(existingConnection, universeConnectionArg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!connectionToReturn) {
|
||||||
|
connectionToReturn = universeConnectionArg;
|
||||||
|
}
|
||||||
|
return connectionToReturn;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* authenticate AuthenticationRequests
|
||||||
|
*/
|
||||||
|
public authenticateAuthenticationRequests(universeConnectionArg): Promise<UniverseConnection> {
|
||||||
|
// TODO: authenticate connections
|
||||||
|
return universeConnectionArg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* merges two UniverseConnections
|
||||||
|
*/
|
||||||
|
public mergeUniverseConnections (connectionArg1: UniverseConnection, connectionArg2: UniverseConnection) {
|
||||||
|
// TODO: merge connections
|
||||||
|
return connectionArg1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user