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 +35 -2
- package/cjs/hl7-server.js +6 -2
- package/cjs/hl7-socket.js +16 -12
- package/esm/hl7-client.js +35 -2
- package/esm/hl7-server.js +6 -2
- package/esm/hl7-socket.js +16 -12
- package/package.json +3 -3
- package/types/hl7-client.d.ts +28 -6
- package/types/hl7-server.d.ts +3 -2
- package/types/hl7-socket.d.ts +3 -2
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 =
|
|
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 =>
|
|
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(
|
|
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 =>
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
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 =
|
|
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 =>
|
|
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(
|
|
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 =>
|
|
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
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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.
|
|
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.
|
|
19
|
-
"hl7v2-dictionary": "^1.1.
|
|
18
|
+
"hl7v2": "^1.1.3",
|
|
19
|
+
"hl7v2-dictionary": "^1.1.3"
|
|
20
20
|
},
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
package/types/hl7-client.d.ts
CHANGED
|
@@ -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
|
|
13
|
-
|
|
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
|
|
47
|
+
interface CommonConnectOptions {
|
|
32
48
|
connectTimeout?: number;
|
|
33
49
|
maxBufferSize?: number;
|
|
50
|
+
responseTimeout?: number;
|
|
51
|
+
keepAlive?: boolean;
|
|
52
|
+
keepAliveInitialDelay?: number;
|
|
34
53
|
}
|
|
35
|
-
|
|
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
|
}
|
package/types/hl7-server.d.ts
CHANGED
|
@@ -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(
|
|
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;
|
package/types/hl7-socket.d.ts
CHANGED
|
@@ -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):
|
|
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;
|