badmfck-api-server 3.7.3 → 3.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,6 @@ import { IBaseEndpoint } from './BaseEndpoint';
5
5
  import { HTTPRequestVO, IError, TransferPacketVO } from './structures/Interfaces';
6
6
  import { Req } from "badmfck-signal";
7
7
  import http from 'http';
8
- import { IWebsocket } from './Websocket';
9
8
  export interface IMonitorUser {
10
9
  login: string;
11
10
  password: string;
@@ -40,7 +39,6 @@ export interface APIServiceOptions {
40
39
  monitor?: IMonitorUser[];
41
40
  documentation?: IMonitorUser[];
42
41
  };
43
- websocket?: IWebsocket[];
44
42
  monitor?: IMonitorUser[];
45
43
  appVersion?: string;
46
44
  fileTempDir: string;
@@ -95,7 +95,7 @@ async function Initializer(services) {
95
95
  exports.Initializer = Initializer;
96
96
  class APIService extends BaseService_1.BaseService {
97
97
  static nextLogID = 0;
98
- version = "3.7.3";
98
+ version = "3.7.4";
99
99
  options;
100
100
  monitor = null;
101
101
  started = new Date();
@@ -0,0 +1,26 @@
1
+ import Signal, { Req } from "badmfck-signal";
2
+ import { BaseService } from "./BaseService";
3
+ export declare const REQ_TIMEFRAME_TASK_ADD: Req<ITimeframeTask<any>, void>;
4
+ export declare const S_TIMEFRAME_TASK_EXECUTED: Signal<ITimeframeTask<any>>;
5
+ export interface ITimeframeTask<T = any> {
6
+ name: string;
7
+ start: number;
8
+ params?: T;
9
+ repeat: number;
10
+ callback: (params?: T) => Promise<void>;
11
+ executed: number;
12
+ retries?: number;
13
+ maxRetries?: number;
14
+ }
15
+ export declare class TimeframeService extends BaseService {
16
+ TICK_INTERVAL_MS: number;
17
+ RETRY_DELAY_MS: number;
18
+ GRACE_WINDOW_MS: number;
19
+ tasks: ITimeframeTask<any>[];
20
+ intervalId: any;
21
+ static wait(ms: number): Promise<void>;
22
+ constructor();
23
+ init(): Promise<void>;
24
+ finishService(): Promise<void>;
25
+ loop(): Promise<void>;
26
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.TimeframeService = exports.S_TIMEFRAME_TASK_EXECUTED = exports.REQ_TIMEFRAME_TASK_ADD = void 0;
27
+ const badmfck_signal_1 = __importStar(require("badmfck-signal"));
28
+ const BaseService_1 = require("./BaseService");
29
+ const LogService_1 = require("./LogService");
30
+ exports.REQ_TIMEFRAME_TASK_ADD = new badmfck_signal_1.Req(undefined, "REQ_TIMEFRAME_TASK_ADD");
31
+ exports.S_TIMEFRAME_TASK_EXECUTED = new badmfck_signal_1.default("S_TIMEFRAME_TASK_EXECUTED");
32
+ class TimeframeService extends BaseService_1.BaseService {
33
+ TICK_INTERVAL_MS = 1000;
34
+ RETRY_DELAY_MS = 10_000;
35
+ GRACE_WINDOW_MS = 30_000;
36
+ tasks = [];
37
+ intervalId = 0;
38
+ static async wait(ms) {
39
+ return new Promise(resolve => setTimeout(resolve, ms));
40
+ }
41
+ constructor() {
42
+ super("TimeframeService");
43
+ }
44
+ async init() {
45
+ super.init();
46
+ exports.REQ_TIMEFRAME_TASK_ADD.listener = async (req) => {
47
+ (0, LogService_1.logInfo)("Add tack to TimeframeService: " + req.name);
48
+ this.tasks.push(req);
49
+ };
50
+ this.intervalId = setInterval(() => {
51
+ this.loop();
52
+ }, this.TICK_INTERVAL_MS);
53
+ }
54
+ async finishService() {
55
+ clearInterval(this.intervalId);
56
+ }
57
+ async loop() {
58
+ const now = Date.now();
59
+ for (let i = 0; i < this.tasks.length; i++) {
60
+ const task = this.tasks[i];
61
+ if (!task)
62
+ continue;
63
+ if (now >= task.start && (!task.executed || task.executed < task.start)) {
64
+ if (now - task.start <= this.GRACE_WINDOW_MS) {
65
+ try {
66
+ (0, LogService_1.logInfo)("Timeframe Servie - execute task ", task.name);
67
+ if (task.callback.length > 0 && task.params)
68
+ task.callback(task.params);
69
+ else
70
+ task.callback();
71
+ task.executed = Date.now();
72
+ task.retries = 0;
73
+ (0, LogService_1.logInfo)("Timeframe Servie - task executed ", task.name);
74
+ if (task.repeat) {
75
+ task.start += task.repeat;
76
+ }
77
+ else {
78
+ this.tasks.splice(i, 1);
79
+ i--;
80
+ }
81
+ }
82
+ catch (e) {
83
+ task.retries = (task.retries || 0) + 1;
84
+ if (task.retries > (task.maxRetries ?? 0)) {
85
+ console.warn(`Task ${task.name} failed too many times`);
86
+ this.tasks.splice(i, 1);
87
+ i--;
88
+ }
89
+ else {
90
+ task.start = now + 10_000;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ exports.TimeframeService = TimeframeService;
@@ -0,0 +1,9 @@
1
+ import { BaseService } from "./BaseService";
2
+ export interface IWebsocket {
3
+ }
4
+ export interface IWebSocketServiceOptions {
5
+ }
6
+ export declare class WebsocketServerService extends BaseService {
7
+ constructor();
8
+ init(options?: IWebSocketServiceOptions): Promise<void>;
9
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebsocketServerService = void 0;
4
+ const BaseService_1 = require("./BaseService");
5
+ const getDefaultWebSocketServiceOptions = () => {
6
+ return {
7
+ endpoint: "/ws"
8
+ };
9
+ };
10
+ class WebsocketServerService extends BaseService_1.BaseService {
11
+ constructor() {
12
+ super("WebsocketServerService");
13
+ }
14
+ async init(options) {
15
+ super.init();
16
+ }
17
+ }
18
+ exports.WebsocketServerService = WebsocketServerService;
@@ -4,6 +4,8 @@ export declare class UID {
4
4
  private static nextUniqueTRXID;
5
5
  static generate(): string;
6
6
  static generateRandomNumberBase(count: number): string;
7
+ static generateNumeric(year?: string): bigint;
8
+ static getDateFromNumeric(uid: number | bigint): Date;
7
9
  static generateNumberic(year?: string): number;
8
10
  static getNextDescendingIndex(): number;
9
11
  static getNext(): string;
@@ -24,6 +24,29 @@ class UID {
24
24
  base += Math.round(Math.random() * 9);
25
25
  return base;
26
26
  }
27
+ static generateNumeric(year) {
28
+ if (!year)
29
+ year = new Date().getFullYear().toString();
30
+ const yearSuffix = year.substring(2);
31
+ const now = BigInt(Date.now());
32
+ const delta = now - BigInt(UID.epoch);
33
+ const counter = UID.nextUniqueID++;
34
+ if (UID.nextUniqueID > 99) {
35
+ UID.nextUniqueID = 1;
36
+ }
37
+ const counterStr = counter.toString().padStart(2, '0');
38
+ const idStr = `${yearSuffix}${delta.toString()}${counterStr}`;
39
+ return BigInt(idStr);
40
+ }
41
+ static getDateFromNumeric(uid) {
42
+ const uidStr = uid.toString();
43
+ const yearSuffix = uidStr.substring(0, 2);
44
+ const counterDigits = 2;
45
+ const deltaStr = uidStr.substring(2, uidStr.length - counterDigits);
46
+ const delta = BigInt(deltaStr);
47
+ const timestamp = BigInt(UID.epoch) + delta;
48
+ return new Date(Number(timestamp));
49
+ }
27
50
  static generateNumberic(year) {
28
51
  if (!year)
29
52
  year = new Date().getFullYear() + "";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "badmfck-api-server",
3
- "version": "3.7.3",
3
+ "version": "3.7.4",
4
4
  "description": "Simple API http server based on express",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",