@spinajs/http-socket 2.0.314

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.
@@ -0,0 +1,131 @@
1
+ import { Socket } from 'socket.io';
2
+ import { Configuration } from '@spinajs/configuration';
3
+ import { AsyncService, Constructor, IContainer } from '@spinajs/di';
4
+ import { IRouteParameter, ParameterType } from '@spinajs/http';
5
+ import { Log } from '@spinajs/log-common';
6
+ import { DataValidator } from '@spinajs/validation';
7
+ /**
8
+ * Middleware used server - wide ( for all incoming socket connections )
9
+ */
10
+ export declare abstract class SocketServerMiddleware extends AsyncService {
11
+ /**
12
+ * Execution order, ascending execution ( lower first )
13
+ */
14
+ abstract get Order(): number;
15
+ /**
16
+ *
17
+ * Middleware func run for ALL sockets before message is proceeded
18
+ * Example for auth middleware or logging, etc.
19
+ *
20
+ * @param socket
21
+ * @param next
22
+ */
23
+ abstract before(socket: Socket): Promise<void>;
24
+ /**
25
+ *
26
+ * Executed on connection event
27
+ *
28
+ * @param socket
29
+ */
30
+ abstract onConnect(socket: Socket): Promise<void>;
31
+ /**
32
+ *
33
+ * Executed on disconnect event
34
+ *
35
+ * @param socket
36
+ */
37
+ abstract onDisconnect(socket: Socket, reason: string): Promise<void>;
38
+ }
39
+ /**
40
+ * Middleware for specific socket
41
+ */
42
+ export declare abstract class SocketMiddleware extends AsyncService {
43
+ /**
44
+ *
45
+ * Middleware func before message is proceeded for this socket
46
+ * Example for auth middleware
47
+ *
48
+ * @param socket
49
+ * @param next
50
+ */
51
+ abstract execute(socket: Socket, event: string, args: any[]): Promise<void>;
52
+ }
53
+ export interface ISocketMiddlewareDescriptor {
54
+ Type: Constructor<SocketMiddleware>;
55
+ Options: any[];
56
+ }
57
+ /**
58
+ * Describes parameters passed to socket event
59
+ */
60
+ export interface ISocketEventParameter extends IRouteParameter {
61
+ }
62
+ export interface ISocketEvent {
63
+ /**
64
+ * Event name
65
+ */
66
+ Name: string;
67
+ Method: string;
68
+ Parameters: Map<number, ISocketEventParameter>;
69
+ Schema: any;
70
+ }
71
+ /**
72
+ * Descriptor for controller
73
+ */
74
+ export interface ISocketControllerDescriptor {
75
+ /**
76
+ * Controller routes
77
+ */
78
+ Events: Map<string | symbol, ISocketEvent>;
79
+ /**
80
+ * Controller - wise middlewares
81
+ */
82
+ Middlewares: ISocketMiddlewareDescriptor[];
83
+ /**
84
+ * Sockets room ( optional ), if not set "/" is set ( main room )
85
+ */
86
+ Room?: string;
87
+ }
88
+ /**
89
+ * Route action call spefici data. Used to pass data / arguments when parsing
90
+ * action parameters for specific call. Eg. to parse form data, and extract it
91
+ * as different arguments.
92
+ */
93
+ export interface ISocketEventCall {
94
+ Payload: any;
95
+ }
96
+ export interface ISocketEventArgsResult {
97
+ CallData: ISocketEventCall;
98
+ Args: any;
99
+ }
100
+ export interface ISocketRouteArgs {
101
+ SupportedType: ParameterType | string;
102
+ extract(callData: ISocketEventCall, routeParameter: IRouteParameter, incomingArgs: any[], socket: Socket): Promise<ISocketEventArgsResult>;
103
+ }
104
+ export declare abstract class SocketRouteArgs implements ISocketRouteArgs {
105
+ protected Validator: DataValidator;
106
+ abstract get SupportedType(): ParameterType | string;
107
+ abstract extract(callData: ISocketEventCall, routeParameter: IRouteParameter, incomingArgs: any[], socket: Socket): Promise<ISocketEventArgsResult>;
108
+ protected tryHydrateParam(arg: any, routeParameter: IRouteParameter, event: ISocketEvent): Promise<any>;
109
+ protected tryHydrateObject(arg: any, route: IRouteParameter, hydrator: any): Promise<any>;
110
+ protected getHydrator(param: IRouteParameter): any;
111
+ protected tryExtractObject(arg: any, param: IRouteParameter): any;
112
+ protected isRuntimeType(param: IRouteParameter): boolean;
113
+ protected fromRuntimeType(param: IRouteParameter, arg: any): any;
114
+ }
115
+ export declare abstract class SocketController extends AsyncService {
116
+ /**
117
+ * Event method getter
118
+ */
119
+ [action: string]: any;
120
+ /**
121
+ * Controller descriptor
122
+ */
123
+ get Descriptor(): ISocketControllerDescriptor;
124
+ protected _container: IContainer;
125
+ protected _log: Log;
126
+ protected _cfg: Configuration;
127
+ protected _middlewares: SocketMiddleware[];
128
+ resolve(): Promise<void>;
129
+ attach(socket: Socket): Promise<void>;
130
+ }
131
+ //# sourceMappingURL=interfaces.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { tryGetHash } from '@spinajs/util';
11
+ import { Configuration } from '@spinajs/configuration';
12
+ import { AsyncService, Autoinject, Container, DI, isClass, TypedArray } from '@spinajs/di';
13
+ import { CONTROLLED_DESCRIPTOR_SYMBOL } from '@spinajs/http';
14
+ import { Log, Logger } from '@spinajs/log-common';
15
+ import { DataValidator } from '@spinajs/validation';
16
+ import _ from 'lodash';
17
+ import { UnexpectedServerError } from '@spinajs/exceptions';
18
+ /**
19
+ * Middleware used server - wide ( for all incoming socket connections )
20
+ */
21
+ export class SocketServerMiddleware extends AsyncService {
22
+ }
23
+ /**
24
+ * Middleware for specific socket
25
+ */
26
+ export class SocketMiddleware extends AsyncService {
27
+ }
28
+ export class SocketRouteArgs {
29
+ async tryHydrateParam(arg, routeParameter, event) {
30
+ let result = null;
31
+ let schema = null;
32
+ let hydrator = null;
33
+ // first validate route parameter / body params etc
34
+ if (event.Schema && event.Schema[routeParameter.Name]) {
35
+ schema = event.Schema[routeParameter.Name];
36
+ }
37
+ else if (routeParameter.Schema) {
38
+ schema = routeParameter.Schema;
39
+ }
40
+ else if (routeParameter.RouteParamSchema) {
41
+ schema = routeParameter.RouteParamSchema;
42
+ }
43
+ else {
44
+ schema = this.Validator.extractSchema(routeParameter.RuntimeType);
45
+ }
46
+ if (this.isRuntimeType(routeParameter)) {
47
+ result = this.fromRuntimeType(routeParameter, arg);
48
+ if (schema) {
49
+ this.Validator.validate(schema, result);
50
+ }
51
+ }
52
+ else {
53
+ hydrator = this.getHydrator(routeParameter);
54
+ result = hydrator ? arg : this.tryExtractObject(arg, routeParameter);
55
+ if (schema) {
56
+ this.Validator.validate(schema, result);
57
+ }
58
+ if (hydrator) {
59
+ result = await this.tryHydrateObject(result, routeParameter, hydrator);
60
+ }
61
+ }
62
+ return result;
63
+ }
64
+ async tryHydrateObject(arg, route, hydrator) {
65
+ const hInstance = await DI.resolve(hydrator.hydrator, hydrator.options);
66
+ return await hInstance.hydrate(arg, route);
67
+ }
68
+ getHydrator(param) {
69
+ let hydrator = null;
70
+ if (param.RuntimeType instanceof TypedArray) {
71
+ hydrator = Reflect.getMetadata('custom:arg_hydrator', param.RuntimeType.Type);
72
+ }
73
+ else {
74
+ hydrator = Reflect.getMetadata('custom:arg_hydrator', param.RuntimeType);
75
+ }
76
+ return hydrator;
77
+ }
78
+ tryExtractObject(arg, param) {
79
+ if (isClass(param.RuntimeType)) {
80
+ return new param.RuntimeType(_.isString(arg) ? JSON.parse(arg) : arg);
81
+ }
82
+ else if (param.RuntimeType instanceof TypedArray) {
83
+ const type = param.RuntimeType.Type;
84
+ const arrData = _.isString(arg) ? JSON.parse(arg) : arg;
85
+ return arrData ? arrData.map((x) => new type(x)) : [];
86
+ }
87
+ else if (param.RuntimeType.name === 'Object' || param.RuntimeType.name === 'Array') {
88
+ return _.isString(arg) ? JSON.parse(arg) : arg;
89
+ }
90
+ return arg;
91
+ }
92
+ isRuntimeType(param) {
93
+ return ['String', 'Number', 'BigInt', 'Boolean', 'Undefined', 'Null'].indexOf(param.RuntimeType.name) !== -1;
94
+ }
95
+ fromRuntimeType(param, arg) {
96
+ switch (param.RuntimeType.name) {
97
+ // query params are always sent as strings, even numbers,
98
+ // we must try to parse them as integers / booleans / objects
99
+ case 'String':
100
+ return arg;
101
+ case 'Number':
102
+ return arg ? Number(arg) : undefined;
103
+ case 'BigInt':
104
+ return BigInt(arg);
105
+ case 'Boolean':
106
+ return arg ? (arg === 1 ? true : arg.toLowerCase() === 'true' ? true : false) : false;
107
+ case 'Undefined':
108
+ return undefined;
109
+ case 'Null':
110
+ return null;
111
+ default:
112
+ return new param.RuntimeType(_.isString(arg) ? JSON.parse(arg) : arg);
113
+ }
114
+ }
115
+ }
116
+ __decorate([
117
+ Autoinject(),
118
+ __metadata("design:type", DataValidator)
119
+ ], SocketRouteArgs.prototype, "Validator", void 0);
120
+ export class SocketController extends AsyncService {
121
+ /**
122
+ * Controller descriptor
123
+ */
124
+ get Descriptor() {
125
+ return Reflect.getMetadata(CONTROLLED_DESCRIPTOR_SYMBOL, this);
126
+ }
127
+ async resolve() {
128
+ if (!this.Descriptor) {
129
+ this._log.warn(`Socket controller ${this.constructor.name} does not have descriptor. If its abstract or base class ignore this message.`);
130
+ return;
131
+ }
132
+ }
133
+ async attach(socket) {
134
+ const self = this;
135
+ if (this.Descriptor.Room) {
136
+ socket.join(this.Descriptor.Room);
137
+ }
138
+ this._middlewares.forEach((m) => {
139
+ socket.use(([event, ...args], next) => {
140
+ m.execute(socket, event, args)
141
+ .catch((err) => {
142
+ next(err);
143
+ })
144
+ .then(() => {
145
+ next();
146
+ });
147
+ });
148
+ });
149
+ for (const [, event] of this.Descriptor.Events) {
150
+ socket.on(event.Name, async (...args) => {
151
+ const a = await _extractEventArgs(event, args);
152
+ await this[event.Method].call(this, ...a);
153
+ });
154
+ }
155
+ async function _extractEventArgs(route, incomingArgs) {
156
+ const callArgs = new Array(route.Parameters.size);
157
+ const argsCache = new Map();
158
+ let callData = {
159
+ Payload: {},
160
+ };
161
+ for (const [, param] of route.Parameters) {
162
+ const routeArgsHandler = await tryGetHash(argsCache, param.Type, () => DI.resolve(param.Type));
163
+ if (!routeArgsHandler) {
164
+ throw new UnexpectedServerError(`invalid route parameter type for param: ${param.Name},
165
+ method: ${route.Name},
166
+ controller: ${self.constructor.name}`);
167
+ }
168
+ const { Args, CallData } = await routeArgsHandler.extract(callData, param, incomingArgs, socket);
169
+ callData = CallData;
170
+ callArgs[param.Index] = Args;
171
+ }
172
+ return callArgs;
173
+ }
174
+ }
175
+ }
176
+ __decorate([
177
+ Autoinject(Container),
178
+ __metadata("design:type", Object)
179
+ ], SocketController.prototype, "_container", void 0);
180
+ __decorate([
181
+ Logger('http'),
182
+ __metadata("design:type", Log)
183
+ ], SocketController.prototype, "_log", void 0);
184
+ __decorate([
185
+ Autoinject(Configuration),
186
+ __metadata("design:type", Configuration)
187
+ ], SocketController.prototype, "_cfg", void 0);
188
+ __decorate([
189
+ Autoinject(SocketMiddleware),
190
+ __metadata("design:type", Array)
191
+ ], SocketController.prototype, "_middlewares", void 0);
192
+ //# sourceMappingURL=interfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/interfaces.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Log } from '@spinajs/log-common';
2
+ import { SocketServerMiddleware } from './interfaces.js';
3
+ import { Socket } from 'socket.io';
4
+ export declare class ConnectionLogMiddleware extends SocketServerMiddleware {
5
+ get Order(): number;
6
+ protected Log: Log;
7
+ before(_socket: Socket): Promise<void>;
8
+ onConnect(socket: Socket): Promise<void>;
9
+ onDisconnect(socket: Socket, reason: string): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=middlewares.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.d.ts","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGnC,qBACa,uBAAwB,SAAQ,sBAAsB;IAEjE,IAAW,KAAK,WAEf;IAGD,SAAS,CAAC,GAAG,EAAE,GAAG,CAAC;IAEN,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACtC,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAGxC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGzE"}
@@ -0,0 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Log, Logger } from '@spinajs/log-common';
11
+ import { SocketServerMiddleware } from './interfaces.js';
12
+ import { Injectable } from '@spinajs/di';
13
+ let ConnectionLogMiddleware = class ConnectionLogMiddleware extends SocketServerMiddleware {
14
+ // always first
15
+ get Order() {
16
+ return 0;
17
+ }
18
+ async before(_socket) { }
19
+ async onConnect(socket) {
20
+ this.Log.trace(`Connected to new websocket, id: ${socket.id}, handshake: ${JSON.stringify(socket.handshake)}`);
21
+ }
22
+ async onDisconnect(socket, reason) {
23
+ this.Log.trace(`Disconnected socket, reason: ${reason}, id: ${socket.id}`);
24
+ }
25
+ };
26
+ __decorate([
27
+ Logger('web-socket'),
28
+ __metadata("design:type", Log)
29
+ ], ConnectionLogMiddleware.prototype, "Log", void 0);
30
+ ConnectionLogMiddleware = __decorate([
31
+ Injectable(SocketServerMiddleware)
32
+ ], ConnectionLogMiddleware);
33
+ export { ConnectionLogMiddleware };
34
+ //# sourceMappingURL=middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../src/middlewares.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGlC,IAAM,uBAAuB,GAA7B,MAAM,uBAAwB,SAAQ,sBAAsB;IACjE,eAAe;IACf,IAAW,KAAK;QACd,OAAO,CAAC,CAAC;IACX,CAAC;IAKM,KAAK,CAAC,MAAM,CAAC,OAAe,IAAkB,CAAC;IAC/C,KAAK,CAAC,SAAS,CAAC,MAAc;QACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,EAAE,gBAAgB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACjH,CAAC;IACM,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,MAAc;QACtD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,MAAM,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7E,CAAC;CACF,CAAA;AATW;IADT,MAAM,CAAC,YAAY,CAAC;8BACN,GAAG;oDAAC;AAPR,uBAAuB;IADnC,UAAU,CAAC,sBAAsB,CAAC;GACtB,uBAAuB,CAgBnC"}
@@ -0,0 +1 @@
1
+ {"type":"module"}