hl7v2-net 1.1.2 → 1.1.3

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.
package/cjs/hl7-client.js CHANGED
@@ -3,11 +3,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Hl7Client = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const node_net_1 = tslib_1.__importDefault(require("node:net"));
6
+ const node_tls_1 = tslib_1.__importDefault(require("node:tls"));
6
7
  const node_events_async_1 = require("node-events-async");
7
8
  const h_l7_request_context_js_1 = require("./h-l7-request-context.js");
8
9
  const hl7_router_js_1 = require("./hl7-router.js");
9
10
  const hl7_socket_js_1 = require("./hl7-socket.js");
10
11
  class Hl7Client extends node_events_async_1.AsyncEventEmitter {
12
+ /**
13
+ * Creates an HL7 TCP client
14
+ * @static
15
+ */
16
+ static createClient(options) {
17
+ const client = new Hl7Client(options);
18
+ client._tls = false;
19
+ return client;
20
+ }
21
+ /**
22
+ * Creates a secure HL7 TCP client
23
+ * @static
24
+ */
25
+ static createTlsClient(options) {
26
+ const client = new Hl7Client(options);
27
+ client._tls = true;
28
+ return client;
29
+ }
30
+ /**
31
+ *
32
+ * @constructor
33
+ * @protected
34
+ */
11
35
  constructor(options) {
12
36
  super();
13
37
  this._router = new hl7_router_js_1.HL7Router();
@@ -46,7 +70,9 @@ class Hl7Client extends node_events_async_1.AsyncEventEmitter {
46
70
  return;
47
71
  }
48
72
  let timeoutTimer;
49
- const tcpSocket = node_net_1.default.connect(this._options);
73
+ const tcpSocket = this._tls
74
+ ? node_tls_1.default.connect(this._options)
75
+ : node_net_1.default.connect(this._options);
50
76
  const socket = (this._socket = new hl7_socket_js_1.HL7Socket(tcpSocket, this._options));
51
77
  socket.on('connect', () => this.emit('connect'));
52
78
  socket.on('ready', () => this.emit('ready'));
@@ -56,10 +82,17 @@ class Hl7Client extends node_events_async_1.AsyncEventEmitter {
56
82
  this.emit('close');
57
83
  });
58
84
  socket.on('error', err => this.emit('error', err));
59
- socket.on('message', message => this._onMessage(message));
85
+ socket.on('message', message => {
86
+ this.emit('message', message, socket);
87
+ this._onMessage(message);
88
+ });
89
+ socket.on('send', message => this.emit('send', message, socket));
60
90
  const onReady = () => {
61
91
  clearTimeout(timeoutTimer);
62
92
  tcpSocket.removeListener('error', onError);
93
+ if (this._options.keepAlive) {
94
+ tcpSocket.setKeepAlive(this._options.keepAlive, this._options.keepAliveInitialDelay);
95
+ }
63
96
  resolve();
64
97
  };
65
98
  const onError = (error) => {
package/cjs/hl7-server.js CHANGED
@@ -182,15 +182,19 @@ class HL7Server extends node_events_async_1.AsyncEventEmitter {
182
182
  maxBufferSize: this.maxBufferPerSocket,
183
183
  });
184
184
  this._sockets.add(socket);
185
- socket.on('message', message => this._onMessage(socket, message));
186
185
  socket.on('close', () => {
187
186
  this._sockets.delete(socket);
188
187
  this.emit('disconnect', socket);
189
188
  });
190
189
  socket.on('error', error => this.emit('error', error, socket));
190
+ socket.on('message', message => {
191
+ this.emit('message', message, socket);
192
+ this._onMessage(message, socket);
193
+ });
194
+ socket.on('send', message => this.emit('send', message, socket));
191
195
  this.emit('connection', socket);
192
196
  }
193
- _onMessage(socket, message) {
197
+ _onMessage(message, socket) {
194
198
  const waitPromise = new Promise(resolve => {
195
199
  const context = new h_l7_request_context_js_1.HL7RequestContext(socket, message);
196
200
  const timeoutTimer = setTimeout(() => {
package/cjs/hl7-socket.js CHANGED
@@ -28,7 +28,15 @@ class HL7Socket extends node_events_async_1.AsyncEventEmitter {
28
28
  socket.on('close', () => {
29
29
  this.emit('close');
30
30
  });
31
- frameStream.on('data', data => this._parseMessage(data));
31
+ frameStream.on('data', data => {
32
+ try {
33
+ const message = this._parseMessage(data);
34
+ this.emit('message', message);
35
+ }
36
+ catch (err) {
37
+ this.emit('error', err);
38
+ }
39
+ });
32
40
  }
33
41
  get connected() {
34
42
  return !this.socket.closed;
@@ -86,6 +94,7 @@ class HL7Socket extends node_events_async_1.AsyncEventEmitter {
86
94
  this.socket.write(hl7v2_1.VT);
87
95
  this.socket.write(buf);
88
96
  this.socket.end(hl7v2_1.FS + hl7v2_1.CR);
97
+ this.emit('send', message, this.socket);
89
98
  }
90
99
  async sendMessageWaitAck(message) {
91
100
  this.sendMessage(message);
@@ -137,18 +146,13 @@ class HL7Socket extends node_events_async_1.AsyncEventEmitter {
137
146
  this.socket.setKeepAlive(enable, initialDelay);
138
147
  }
139
148
  _parseMessage(data) {
140
- try {
141
- const message = new hl7v2_1.HL7Message();
142
- message.parse(data);
143
- for (const hook of this._messageHooks) {
144
- if (hook(message))
145
- break;
146
- }
147
- this.emit('message', message);
148
- }
149
- catch (err) {
150
- this.emit('error', err);
149
+ const message = new hl7v2_1.HL7Message();
150
+ message.parse(data);
151
+ for (const hook of this._messageHooks) {
152
+ if (hook(message))
153
+ break;
151
154
  }
155
+ return message;
152
156
  }
153
157
  }
154
158
  exports.HL7Socket = HL7Socket;
package/esm/hl7-client.js CHANGED
@@ -1,9 +1,33 @@
1
1
  import net from 'node:net';
2
+ import tls from 'node:tls';
2
3
  import { AsyncEventEmitter } from 'node-events-async';
3
4
  import { HL7RequestContext } from './h-l7-request-context.js';
4
5
  import { HL7Router } from './hl7-router.js';
5
6
  import { HL7Socket } from './hl7-socket.js';
6
7
  export class Hl7Client extends AsyncEventEmitter {
8
+ /**
9
+ * Creates an HL7 TCP client
10
+ * @static
11
+ */
12
+ static createClient(options) {
13
+ const client = new Hl7Client(options);
14
+ client._tls = false;
15
+ return client;
16
+ }
17
+ /**
18
+ * Creates a secure HL7 TCP client
19
+ * @static
20
+ */
21
+ static createTlsClient(options) {
22
+ const client = new Hl7Client(options);
23
+ client._tls = true;
24
+ return client;
25
+ }
26
+ /**
27
+ *
28
+ * @constructor
29
+ * @protected
30
+ */
7
31
  constructor(options) {
8
32
  super();
9
33
  this._router = new HL7Router();
@@ -42,7 +66,9 @@ export class Hl7Client extends AsyncEventEmitter {
42
66
  return;
43
67
  }
44
68
  let timeoutTimer;
45
- const tcpSocket = net.connect(this._options);
69
+ const tcpSocket = this._tls
70
+ ? tls.connect(this._options)
71
+ : net.connect(this._options);
46
72
  const socket = (this._socket = new HL7Socket(tcpSocket, this._options));
47
73
  socket.on('connect', () => this.emit('connect'));
48
74
  socket.on('ready', () => this.emit('ready'));
@@ -52,10 +78,17 @@ export class Hl7Client extends AsyncEventEmitter {
52
78
  this.emit('close');
53
79
  });
54
80
  socket.on('error', err => this.emit('error', err));
55
- socket.on('message', message => this._onMessage(message));
81
+ socket.on('message', message => {
82
+ this.emit('message', message, socket);
83
+ this._onMessage(message);
84
+ });
85
+ socket.on('send', message => this.emit('send', message, socket));
56
86
  const onReady = () => {
57
87
  clearTimeout(timeoutTimer);
58
88
  tcpSocket.removeListener('error', onError);
89
+ if (this._options.keepAlive) {
90
+ tcpSocket.setKeepAlive(this._options.keepAlive, this._options.keepAliveInitialDelay);
91
+ }
59
92
  resolve();
60
93
  };
61
94
  const onError = (error) => {
package/esm/hl7-server.js CHANGED
@@ -178,15 +178,19 @@ export class HL7Server extends AsyncEventEmitter {
178
178
  maxBufferSize: this.maxBufferPerSocket,
179
179
  });
180
180
  this._sockets.add(socket);
181
- socket.on('message', message => this._onMessage(socket, message));
182
181
  socket.on('close', () => {
183
182
  this._sockets.delete(socket);
184
183
  this.emit('disconnect', socket);
185
184
  });
186
185
  socket.on('error', error => this.emit('error', error, socket));
186
+ socket.on('message', message => {
187
+ this.emit('message', message, socket);
188
+ this._onMessage(message, socket);
189
+ });
190
+ socket.on('send', message => this.emit('send', message, socket));
187
191
  this.emit('connection', socket);
188
192
  }
189
- _onMessage(socket, message) {
193
+ _onMessage(message, socket) {
190
194
  const waitPromise = new Promise(resolve => {
191
195
  const context = new HL7RequestContext(socket, message);
192
196
  const timeoutTimer = setTimeout(() => {
package/esm/hl7-socket.js CHANGED
@@ -24,7 +24,15 @@ export class HL7Socket extends AsyncEventEmitter {
24
24
  socket.on('close', () => {
25
25
  this.emit('close');
26
26
  });
27
- frameStream.on('data', data => this._parseMessage(data));
27
+ frameStream.on('data', data => {
28
+ try {
29
+ const message = this._parseMessage(data);
30
+ this.emit('message', message);
31
+ }
32
+ catch (err) {
33
+ this.emit('error', err);
34
+ }
35
+ });
28
36
  }
29
37
  get connected() {
30
38
  return !this.socket.closed;
@@ -82,6 +90,7 @@ export class HL7Socket extends AsyncEventEmitter {
82
90
  this.socket.write(VT);
83
91
  this.socket.write(buf);
84
92
  this.socket.end(FS + CR);
93
+ this.emit('send', message, this.socket);
85
94
  }
86
95
  async sendMessageWaitAck(message) {
87
96
  this.sendMessage(message);
@@ -133,17 +142,12 @@ export class HL7Socket extends AsyncEventEmitter {
133
142
  this.socket.setKeepAlive(enable, initialDelay);
134
143
  }
135
144
  _parseMessage(data) {
136
- try {
137
- const message = new HL7Message();
138
- message.parse(data);
139
- for (const hook of this._messageHooks) {
140
- if (hook(message))
141
- break;
142
- }
143
- this.emit('message', message);
144
- }
145
- catch (err) {
146
- this.emit('error', err);
145
+ const message = new HL7Message();
146
+ message.parse(data);
147
+ for (const hook of this._messageHooks) {
148
+ if (hook(message))
149
+ break;
147
150
  }
151
+ return message;
148
152
  }
149
153
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hl7v2-net",
3
3
  "description": "HL7 v2 server/client for NodeJS",
4
- "version": "1.1.2",
4
+ "version": "1.1.3",
5
5
  "author": "Panates",
6
6
  "license": "MIT",
7
7
  "dependencies": {
@@ -15,8 +15,8 @@
15
15
  "uid": "^2.0.2"
16
16
  },
17
17
  "peerDependencies": {
18
- "hl7v2": "^1.1.2",
19
- "hl7v2-dictionary": "^1.1.2"
18
+ "hl7v2": "^1.1.3",
19
+ "hl7v2-dictionary": "^1.1.3"
20
20
  },
21
21
  "type": "module",
22
22
  "exports": {
@@ -1,16 +1,32 @@
1
1
  import net from 'node:net';
2
+ import tls from 'node:tls';
2
3
  import { HL7Message } from 'hl7v2';
3
- import { TcpNetConnectOpts } from 'net';
4
4
  import { AsyncEventEmitter } from 'node-events-async';
5
5
  import { StrictOmit } from 'ts-gems';
6
6
  import { HL7Router } from './hl7-router.js';
7
7
  import { HL7Socket } from './hl7-socket.js';
8
8
  import { HL7Middleware } from './types.js';
9
- export declare class Hl7Client extends AsyncEventEmitter {
9
+ export declare class Hl7Client extends AsyncEventEmitter<Hl7Client.Events> {
10
10
  protected _router: HL7Router;
11
11
  protected _socket?: HL7Socket;
12
- protected _options: Hl7Client.ConnectOptions;
13
- constructor(options: Hl7Client.ConnectOptions);
12
+ protected _tls?: boolean;
13
+ protected _options: Hl7Client.NetConnectOptions | Hl7Client.TlsConnectOptions;
14
+ /**
15
+ * Creates an HL7 TCP client
16
+ * @static
17
+ */
18
+ static createClient(options: Hl7Client.NetConnectOptions): Hl7Client;
19
+ /**
20
+ * Creates a secure HL7 TCP client
21
+ * @static
22
+ */
23
+ static createTlsClient(options: Hl7Client.TlsConnectOptions): Hl7Client;
24
+ /**
25
+ *
26
+ * @constructor
27
+ * @protected
28
+ */
29
+ protected constructor(options: Hl7Client.NetConnectOptions | Hl7Client.TlsConnectOptions);
14
30
  get connected(): boolean;
15
31
  get readyState(): net.SocketReadyState;
16
32
  get connectTimeout(): number | undefined;
@@ -28,10 +44,16 @@ export declare class Hl7Client extends AsyncEventEmitter {
28
44
  protected _onMessage(message: HL7Message): void;
29
45
  }
30
46
  export declare namespace Hl7Client {
31
- interface ConnectOptions extends StrictOmit<TcpNetConnectOpts, 'onread' | 'readable' | 'writable'>, HL7Socket.Options {
47
+ interface CommonConnectOptions {
32
48
  connectTimeout?: number;
33
49
  maxBufferSize?: number;
50
+ responseTimeout?: number;
51
+ keepAlive?: boolean;
52
+ keepAliveInitialDelay?: number;
34
53
  }
35
- interface Events extends StrictOmit<HL7Socket.Events, 'message'> {
54
+ export type NetConnectOptions = StrictOmit<net.TcpNetConnectOpts, 'onread' | 'readable' | 'writable'> & CommonConnectOptions;
55
+ export type TlsConnectOptions = StrictOmit<tls.ConnectionOptions, 'socket'> & CommonConnectOptions;
56
+ export interface Events extends HL7Socket.Events {
36
57
  }
58
+ export {};
37
59
  }
@@ -94,7 +94,7 @@ export declare class HL7Server extends AsyncEventEmitter<HL7Server.Events> {
94
94
  */
95
95
  unref(): this;
96
96
  protected _connectionListener(tcpSocket: Socket): void;
97
- protected _onMessage(socket: HL7Socket, message: HL7Message): void;
97
+ protected _onMessage(message: HL7Message, socket: HL7Socket): void;
98
98
  }
99
99
  export declare namespace HL7Server {
100
100
  interface Events {
@@ -104,7 +104,8 @@ export declare namespace HL7Server {
104
104
  disconnect: [socket: HL7Socket];
105
105
  drop: [data?: net.DropArgument];
106
106
  error: [error: Error, HL7Socket | undefined];
107
- message: [message: HL7Message];
107
+ message: [message: HL7Message, socket: HL7Socket];
108
+ send: [message: HL7Message, socket: HL7Socket];
108
109
  }
109
110
  interface Options {
110
111
  applicationName?: string;
@@ -26,7 +26,7 @@ export declare class HL7Socket extends AsyncEventEmitter {
26
26
  sendMessage(message: HL7Message): void;
27
27
  sendMessageWaitAck(message: HL7Message): Promise<HL7Message>;
28
28
  setKeepAlive(enable?: boolean, initialDelay?: number): void;
29
- protected _parseMessage(data: Buffer): void;
29
+ protected _parseMessage(data: Buffer): HL7Message;
30
30
  }
31
31
  export declare namespace HL7Socket {
32
32
  interface Events {
@@ -37,7 +37,8 @@ export declare namespace HL7Socket {
37
37
  lookup: [
38
38
  listener: (err: Error, address: string, family: string | number, host: string) => void
39
39
  ];
40
- message: [message: HL7Message];
40
+ message: [message: HL7Message, socket: HL7Socket];
41
+ send: [message: HL7Message, socket: HL7Socket];
41
42
  }
42
43
  interface Options {
43
44
  responseTimeout?: number;