fix(core): update

This commit is contained in:
Philipp Kunz 2024-05-15 10:10:41 +02:00
commit cf500f9197
24 changed files with 7062 additions and 0 deletions

1
.dockerignore Normal file
View File

@ -0,0 +1 @@
node_modules/

20
.gitignore vendored Normal file
View File

@ -0,0 +1,20 @@
.nogit/
# artifacts
coverage/
public/
pages/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# custom

112
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,112 @@
# gitzone ci_docker
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci-cache/
key: '$CI_BUILD_STAGE'
before_script:
- npmci npm prepare
stages:
- security
- test
- release
- metadata
- pages
# ====================
# security stage
# ====================
auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production
tags:
- lossless
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=dev
tags:
- lossless
- docker
allow_failure: true
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- lossless
- docker
- notpriv
# ====================
# release stage
# ====================
release:
image: registry.gitlab.com/hosttoday/ht-docker-dbase:npmci
services:
- docker:stable-dind
stage: release
script:
- npmci node install stable
- npmci docker login
- npmci docker build
- npmci docker test
- npmci docker push registry.gitlab.com
only:
- tags
tags:
- lossless
- docker
- priv
# ====================
# metadata stage
# ====================
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker

29
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,29 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "current file",
"type": "node",
"request": "launch",
"args": [
"${relativeFile}"
],
"runtimeArgs": ["-r", "@git.zone/tsrun"],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
},
{
"name": "test.ts",
"type": "node",
"request": "launch",
"args": [
"test/test.ts"
],
"runtimeArgs": ["-r", "@git.zone/tsrun"],
"cwd": "${workspaceRoot}",
"protocol": "inspector",
"internalConsoleOptions": "openOnSessionStart"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"npmci": {
"type": "object",
"description": "settings for npmci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

46
Dockerfile Normal file
View File

@ -0,0 +1,46 @@
# gitzone dockerfile_service
## STAGE 1 // BUILD
FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci as node1
COPY ./ /app
WORKDIR /app
ARG NPMCI_TOKEN_NPM2
ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2
RUN npmci npm prepare
RUN pnpm config set store-dir .pnpm-store
RUN rm -rf node_modules && pnpm install
RUN pnpm run build
# gitzone dockerfile_service
## STAGE 2 // install production
FROM registry.gitlab.com/hosttoday/ht-docker-node:npmci as node2
WORKDIR /app
COPY --from=node1 /app /app
RUN rm -rf .pnpm-store
ARG NPMCI_TOKEN_NPM2
ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2
RUN npmci npm prepare
RUN pnpm config set store-dir .pnpm-store
RUN rm -rf node_modules/ && pnpm install --prod
## STAGE 3 // rebuild dependencies for alpine
FROM registry.gitlab.com/hosttoday/ht-docker-node:alpinenpmci as node3
WORKDIR /app
COPY --from=node2 /app /app
ARG NPMCI_TOKEN_NPM2
ENV NPMCI_TOKEN_NPM2 $NPMCI_TOKEN_NPM2
RUN npmci npm prepare
RUN pnpm config set store-dir .pnpm-store
RUN pnpm rebuild -r
## STAGE 4 // the final production image with all dependencies in place
FROM registry.gitlab.com/hosttoday/ht-docker-node:alpine as node4
WORKDIR /app
COPY --from=node3 /app /app
### Healthchecks
RUN pnpm install -g @servezone/healthy
HEALTHCHECK --interval=30s --timeout=30s --start-period=30s --retries=3 CMD [ "healthy" ]
EXPOSE 80
CMD ["npm", "start"]

4
cli.child.ts Normal file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true';
import * as cliTool from './ts/index.js';
cliTool.runCli();

4
cli.js Normal file
View File

@ -0,0 +1,4 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true';
const cliTool = await import('./dist_ts/index.js');
cliTool.runCli();

5
cli.ts.js Normal file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env node
process.env.CLI_CALL = 'true';
import * as tsrun from '@git.zone/tsrun';
tsrun.runPath('./cli.child.js', import.meta.url);

28
npmextra.json Normal file
View File

@ -0,0 +1,28 @@
{
"npmdocker": {
"baseImage": "hosttoday/ht-docker-node:npmci",
"command": "echo \"inside docker now\"",
"dockerSock": true
},
"npmci": {
"npmGlobalTools": [],
"npmRegistryUrl": "verdaccio.lossless.one",
"dockerRegistryRepoMap": {
"registry.gitlab.com": "losslessone/services/servezone/coretraffic"
},
"dockerBuildargEnvMap": {
"NPMCI_TOKEN_NPM2": "NPMCI_TOKEN_NPM2"
}
},
"gitzone": {
"projectType": "service",
"module": {
"githost": "gitlab.com",
"gitscope": "servezone/private",
"gitrepo": "coretraffic",
"shortDescription": "route traffic within your docker setup. TypeScript ready.",
"npmPackagename": "@servezone_private/coretraffic",
"license": "UNLICENSED"
}
}
}

68
package.json Normal file
View File

@ -0,0 +1,68 @@
{
"name": "coretraffic",
"version": "1.0.183",
"description": "route traffic within your docker setup. TypeScript ready.",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"type": "module",
"scripts": {
"start": "node --max_old_space_size=1000 cli.js",
"startTs": "node cli.ts.js",
"test": "(tstest test/)",
"build": "(tsbuild --web --allowimplicitany)"
},
"repository": {
"type": "git",
"url": "git+ssh://git@gitlab.com/servezone/coretraffic.git"
},
"keywords": [
"traffic"
],
"author": "Lossless GmbH",
"license": "MIT",
"bugs": {
"url": "https://gitlab.com/servezone/coretraffic/issues"
},
"homepage": "https://gitlab.com/servezone/coretraffic#README",
"dependencies": {
"@api.global/typedrequest": "^3.0.23",
"@api.global/typedsocket": "^3.0.1",
"@losslessone_private/loint-cloudly": "^2.0.85",
"@losslessone_private/lole-log": "^2.0.16",
"@push.rocks/projectinfo": "^5.0.1",
"@push.rocks/qenv": "^6.0.5",
"@push.rocks/smartdelay": "^3.0.5",
"@push.rocks/smartlog": "^3.0.3",
"@push.rocks/smartlog-destination-receiver": "^2.0.3",
"@push.rocks/smartpath": "^5.0.5",
"@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartproxy": "^3.0.58",
"@push.rocks/smartrequest": "^2.0.10",
"@push.rocks/smartshell": "^3.0.5",
"@push.rocks/smartstring": "^4.0.2",
"@push.rocks/taskbuffer": "^3.0.10"
},
"devDependencies": {
"@git.zone/tsbuild": "^2.1.65",
"@git.zone/tsrun": "^1.2.39",
"@git.zone/tstest": "^1.0.74",
"@push.rocks/tapbundle": "^5.0.4",
"@types/node": "^18.11.18"
},
"private": true,
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
],
"browserslist": [
"last 1 chrome versions"
]
}

6409
pnpm-lock.yaml Normal file

File diff suppressed because it is too large Load Diff

1
qenv.yml Normal file
View File

@ -0,0 +1 @@
required:

41
readme.md Normal file
View File

@ -0,0 +1,41 @@
# @servezone/private/coretraffic
route traffic within your docker setup. TypeScript ready.
## Availabililty and Links
* [npmjs.org (npm package)](https://www.npmjs.com/package/@servezone_private/coretraffic)
* [gitlab.com (source)](https://gitlab.com/servezone/private/coretraffic)
* [github.com (source mirror)](https://github.com/servezone/private/coretraffic)
* [docs (typedoc)](https://servezone/private.gitlab.io/coretraffic/)
## Status for master
Status Category | Status Badge
-- | --
GitLab Pipelines | [![pipeline status](https://gitlab.com/servezone/private/coretraffic/badges/master/pipeline.svg)](https://lossless.cloud)
GitLab Pipline Test Coverage | [![coverage report](https://gitlab.com/servezone/private/coretraffic/badges/master/coverage.svg)](https://lossless.cloud)
npm | [![npm downloads per month](https://badgen.net/npm/dy/@servezone_private/coretraffic)](https://lossless.cloud)
Snyk | [![Known Vulnerabilities](https://badgen.net/snyk/servezone/private/coretraffic)](https://lossless.cloud)
TypeScript Support | [![TypeScript](https://badgen.net/badge/TypeScript/>=%203.x/blue?icon=typescript)](https://lossless.cloud)
node Support | [![node](https://img.shields.io/badge/node->=%2010.x.x-blue.svg)](https://nodejs.org/dist/latest-v10.x/docs/api/)
Code Style | [![Code Style](https://badgen.net/badge/style/prettier/purple)](https://lossless.cloud)
PackagePhobia (total standalone install weight) | [![PackagePhobia](https://badgen.net/packagephobia/install/@servezone_private/coretraffic)](https://lossless.cloud)
PackagePhobia (package size on registry) | [![PackagePhobia](https://badgen.net/packagephobia/publish/@servezone_private/coretraffic)](https://lossless.cloud)
BundlePhobia (total size when bundled) | [![BundlePhobia](https://badgen.net/bundlephobia/minzip/@servezone_private/coretraffic)](https://lossless.cloud)
Platform support | [![Supports Windows 10](https://badgen.net/badge/supports%20Windows%2010/yes/green?icon=windows)](https://lossless.cloud) [![Supports Mac OS X](https://badgen.net/badge/supports%20Mac%20OS%20X/yes/green?icon=apple)](https://lossless.cloud)
## Usage
Use TypeScript for best in class instellisense.
For further information read the linked docs at the top of this README.
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
[![repo-footer](https://servezone.gitlab.io/assets/repo-footer.svg)](https://push.rocks)
For further information read the linked docs at the top of this readme.
> UNLICENSED licensed | **©** [Lossless GmbH](https://lossless.gmbh)
| By using this npm module you agree to our [privacy policy](https://lossless.gmbH/privacy)
[![repo-footer](https://lossless.gitlab.io/publicrelations/repofooter.svg)](https://maintainedby.lossless.com)

27
test/test.nonci.ts Normal file
View File

@ -0,0 +1,27 @@
delete process.env.CLI_CALL;
import * as coretraffic from '../ts/index.js';
import { tap, expect } from '@push.rocks/tapbundle';
import { Qenv } from '@push.rocks/qenv';
const testQenv = new Qenv('./', './.nogit');
let testCoreTraffic: coretraffic.CoreTraffic;
tap.test('should create an coretraffic instance', async (tools) => {
testCoreTraffic = new coretraffic.CoreTraffic();
expect(testCoreTraffic).toBeInstanceOf(coretraffic.CoreTraffic);
});
tap.test('should start the instance', async (tools) => {
await testCoreTraffic.start();
});
tap.test('should keep the instance alive', async (tools) => {
await tools.delayFor(10000);
});
tap.test('should stop the instance', async (tools) => {
await testCoreTraffic.stop();
});
tap.start();

8
ts/00_commitinfo_data.ts Normal file
View File

@ -0,0 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: 'coretraffic',
version: '1.0.184',
description: 'route traffic within your docker setup. TypeScript ready.'
}

View File

@ -0,0 +1,43 @@
import * as plugins from './coretraffic.plugins.js';
import { logger } from './coretraffic.logging.js';
import { CoreTraffic } from './coretraffic.classes.coretraffic.js';
/**
* Coreflow Connector
*/
export class CoreflowConnector {
public typedrouter = new plugins.typedrequest.TypedRouter();
public coretrafficRef: CoreTraffic;
public typesocketClient: plugins.typedsocket.TypedSocket;
constructor(coretrafficRefArg: CoreTraffic) {
this.coretrafficRef = coretrafficRefArg;
this.coretrafficRef.typedrouter.addTypedRouter(this.typedrouter)
this.typedrouter.addTypedHandler<
plugins.lointCloudly.request.routing.IRequest_Coreflow_Coretraffic_RoutingUpdate
>(new plugins.typedrequest.TypedHandler('updateRouting', async (requestData) => {
console.log(requestData);
await this.coretrafficRef.taskmanager.setupRoutingTask.trigger(requestData.reverseConfigs);
return {
status: 'ok',
errorText: ''
};
}));
}
/**
* starts the corechatConnector
*/
public async start() {
this.typesocketClient = await plugins.typedsocket.TypedSocket.createClient(
this.typedrouter,
'http://coreflow:3000',
'coretraffic'
);
}
public async stop() {
await this.typesocketClient.stop();
}
}

View File

@ -0,0 +1,55 @@
import * as plugins from './coretraffic.plugins.js';
import * as paths from './coretraffic.paths.js'
import { logger } from './coretraffic.logging.js';
import { CoreflowConnector } from './coretraffic.classes.coreflowconnector.js';
import { CoretrafficTaskManager } from './coretraffic.classes.taskmanager.js';
export interface ICoretrafficConfig {
dockerDomainEnvName?: string;
}
export class CoreTraffic {
public projectinfo = new plugins.projectinfo.ProjectinfoNpm(paths.packageDir);
public typedrouter = new plugins.typedrequest.TypedRouter();
public coreflowConnector: CoreflowConnector;
public taskmanager: CoretrafficTaskManager;
public networkProxy: plugins.smartproxy.NetworkProxy;
public sslRedirect: plugins.smartproxy.SslRedirect;
constructor() {
this.coreflowConnector = new CoreflowConnector(this);
this.taskmanager = new CoretrafficTaskManager(this);
this.networkProxy = new plugins.smartproxy.NetworkProxy({
port: 8000
});
this.sslRedirect = new plugins.smartproxy.SslRedirect(7999);
}
/**
* starts coretraffic
*/
public async start() {
await this.networkProxy.start();
await this.sslRedirect.start();
this.networkProxy.addDefaultHeaders({
servezone_coretraffic_version: this.projectinfo.version
})
await this.taskmanager.start();
await this.coreflowConnector.start();
}
/**
* stops coretraffic
*/
public async stop() {
await this.taskmanager.stop();
console.log('stopped taskmanager');
await this.coreflowConnector.stop();
console.log('stopped coreflowConnector');
await this.networkProxy.stop();
console.log('stopped smartproxy!');
await this.sslRedirect.stop();
}
}

View File

@ -0,0 +1,35 @@
import * as plugins from './coretraffic.plugins.js';
import { CoreTraffic } from './coretraffic.classes.coretraffic.js';
import { logger } from './coretraffic.logging.js';
export class CoretrafficTaskManager {
public coretrafficRef: CoreTraffic;
public taskmanager: plugins.taskbuffer.TaskManager;
/**
* a task to run setup routing, runs buffered
*/
public setupRoutingTask: plugins.taskbuffer.Task;
constructor(coretrafficRefArg: CoreTraffic) {
this.coretrafficRef = coretrafficRefArg;
this.taskmanager = new plugins.taskbuffer.TaskManager();
this.setupRoutingTask = new plugins.taskbuffer.Task({
buffered: true,
bufferMax: 2,
taskFunction: async (reverseConfigs: plugins.lointCloudly.traffic.IReverseProxyConfig[]) => {
console.log('this is what got to the task:');
console.log(reverseConfigs);
logger.log('info', `routing setup task triggered`);
logger.log('info', `Found ${reverseConfigs.length} host reverse configs!`);
logger.log('info', `trying to deploy host candidates now`);
await this.coretrafficRef.networkProxy.updateProxyConfigs(reverseConfigs);
},
});
}
public async start() {}
public async stop() {}
}

14
ts/coretraffic.logging.ts Normal file
View File

@ -0,0 +1,14 @@
import * as plugins from './coretraffic.plugins.js';
import * as paths from './coretraffic.paths.js';
const projectInfoNpm = new plugins.projectinfo.ProjectinfoNpm(paths.packageDir);
export const logger = new plugins.smartlog.Smartlog({
logContext: {
environment: 'production',
runtime: 'node',
zone: 'serve.zone',
containerName: 'coretraffic',
},
minimumLogLevel: 'info',
});

6
ts/coretraffic.paths.ts Normal file
View File

@ -0,0 +1,6 @@
import * as plugins from './coretraffic.plugins.js';
// Directories
export const packageDir = plugins.path.join(plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url), '../');
export const appSslDir = '/app_certs';
export const nginxConfDir = '/etc/nginx/conf.d/';

44
ts/coretraffic.plugins.ts Normal file
View File

@ -0,0 +1,44 @@
// NODE INTERNALS
import * as path from 'path';
export { path };
// @serve.zone scope
import * as lointCloudly from '@losslessone_private/loint-cloudly';
export { lointCloudly };
// @api.global scope
import * as typedrequest from '@api.global/typedrequest';
import * as typedsocket from '@api.global/typedsocket';
export { typedrequest, typedsocket };
// @push.rocks scope
import * as qenv from '@push.rocks/qenv';
import * as projectinfo from '@push.rocks/projectinfo';
import * as smartdelay from '@push.rocks/smartdelay';
import * as smartlog from '@push.rocks/smartlog';
import * as smartlogDestinationReceiver from '@push.rocks/smartlog-destination-receiver';
import * as smartpath from '@push.rocks/smartpath';
import * as smartproxy from '@push.rocks/smartproxy';
import * as smartpromise from '@push.rocks/smartpromise';
import * as smartrequest from '@push.rocks/smartrequest';
import * as smartshell from '@push.rocks/smartshell';
import * as smartstring from '@push.rocks/smartstring';
import * as taskbuffer from '@push.rocks/taskbuffer';
export {
qenv,
projectinfo,
smartdelay,
smartlog,
smartlogDestinationReceiver,
smartpath,
smartproxy,
smartshell,
smartpromise,
smartrequest,
smartstring,
taskbuffer,
};

22
ts/index.ts Normal file
View File

@ -0,0 +1,22 @@
console.log('**** Starting coretraffic ****');
import * as plugins from './coretraffic.plugins.js';
import * as paths from './coretraffic.paths.js';
import { logger } from './coretraffic.logging.js';
import { CoreTraffic } from './coretraffic.classes.coretraffic.js';
export { CoreTraffic };
const projectinfo = new plugins.projectinfo.ProjectInfo(paths.packageDir);
let coretrafficInstance: CoreTraffic;
export const runCli = async () => {
logger.log('info', `coretraffic@v${projectinfo.npm.version}`);
coretrafficInstance = new CoreTraffic();
await coretrafficInstance.start();
logger.log('info', 'coretraffic successfully started!');
};
export const stop = async () => {
coretrafficInstance.stop();
};

14
tsconfig.json Normal file
View File

@ -0,0 +1,14 @@
{
"compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
},
"exclude": [
"dist_*/**/*.d.ts"
]
}