hl7v2-net 1.1.5 → 1.2.0
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 +7 -5
- package/cjs/hl7-request.js +13 -0
- package/cjs/hl7-response.js +29 -0
- package/cjs/hl7-router.js +17 -33
- package/cjs/hl7-server.js +13 -8
- package/cjs/hl7-socket.js +3 -3
- package/cjs/index.js +2 -1
- package/esm/hl7-client.js +7 -5
- package/esm/hl7-request.js +9 -0
- package/esm/hl7-response.js +25 -0
- package/esm/hl7-router.js +17 -32
- package/esm/hl7-server.js +13 -8
- package/esm/hl7-socket.js +3 -3
- package/esm/index.js +2 -1
- package/package.json +4 -4
- package/types/hl7-request.d.ts +8 -0
- package/types/hl7-response.d.ts +13 -0
- package/types/hl7-router.d.ts +6 -5
- package/types/hl7-socket.d.ts +1 -1
- package/types/index.d.cts +2 -1
- package/types/index.d.ts +2 -1
- package/types/types.d.ts +4 -3
- package/cjs/h-l7-request-context.js +0 -28
- package/esm/h-l7-request-context.js +0 -24
- package/types/h-l7-request-context.d.ts +0 -12
package/cjs/hl7-client.js
CHANGED
|
@@ -5,7 +5,8 @@ const tslib_1 = require("tslib");
|
|
|
5
5
|
const node_net_1 = tslib_1.__importDefault(require("node:net"));
|
|
6
6
|
const node_tls_1 = tslib_1.__importDefault(require("node:tls"));
|
|
7
7
|
const node_events_async_1 = require("node-events-async");
|
|
8
|
-
const
|
|
8
|
+
const hl7_request_js_1 = require("./hl7-request.js");
|
|
9
|
+
const hl7_response_js_1 = require("./hl7-response.js");
|
|
9
10
|
const hl7_router_js_1 = require("./hl7-router.js");
|
|
10
11
|
const hl7_socket_js_1 = require("./hl7-socket.js");
|
|
11
12
|
class Hl7Client extends node_events_async_1.AsyncEventEmitter {
|
|
@@ -150,10 +151,11 @@ class Hl7Client extends node_events_async_1.AsyncEventEmitter {
|
|
|
150
151
|
this._router.use(handler, priority);
|
|
151
152
|
}
|
|
152
153
|
_onMessage(message) {
|
|
153
|
-
const
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
154
|
+
const req = new hl7_request_js_1.HL7Request(this._socket, message);
|
|
155
|
+
const res = new hl7_response_js_1.HL7Response(req);
|
|
156
|
+
this._router.handle(req, res, () => {
|
|
157
|
+
if (res.errors.length)
|
|
158
|
+
this.emit('error', res.errors[0]);
|
|
157
159
|
});
|
|
158
160
|
}
|
|
159
161
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HL7Request = void 0;
|
|
4
|
+
class HL7Request {
|
|
5
|
+
constructor(socket, message) {
|
|
6
|
+
this.socket = socket;
|
|
7
|
+
this.message = message;
|
|
8
|
+
}
|
|
9
|
+
peerIp() {
|
|
10
|
+
return this.socket.peerIp();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.HL7Request = HL7Request;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HL7Response = void 0;
|
|
4
|
+
const hl7v2_1 = require("hl7v2");
|
|
5
|
+
class HL7Response {
|
|
6
|
+
constructor(request) {
|
|
7
|
+
this._finished = false;
|
|
8
|
+
this.errors = [];
|
|
9
|
+
this.request = request;
|
|
10
|
+
this.message = request.message.createAck();
|
|
11
|
+
request.socket.once('send', () => {
|
|
12
|
+
this._finished = true;
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
get socket() {
|
|
16
|
+
return this.request.socket;
|
|
17
|
+
}
|
|
18
|
+
get finished() {
|
|
19
|
+
return this._finished;
|
|
20
|
+
}
|
|
21
|
+
failed(error) {
|
|
22
|
+
const msa = this.message.getSegment('MSA');
|
|
23
|
+
if (msa?.field(hl7v2_1.MSASegment.AcknowledgmentCode).getValue() !== 'AE')
|
|
24
|
+
this.message = this.request.message.createNak(this.errors);
|
|
25
|
+
this.errors.push(error);
|
|
26
|
+
this.message.addError(error);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.HL7Response = HL7Response;
|
package/cjs/hl7-router.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.HL7Router = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const node_process_1 = tslib_1.__importDefault(require("node:process"));
|
|
6
|
-
const hl7v2_dictionary_1 = require("hl7v2-dictionary");
|
|
7
|
-
const hl7_exchange_error_js_1 = require("./helpers/hl7-exchange-error.js");
|
|
8
4
|
class HL7Router {
|
|
9
5
|
constructor() {
|
|
10
6
|
this._handlerStack = new Map();
|
|
@@ -20,7 +16,7 @@ class HL7Router {
|
|
|
20
16
|
list.push(handler);
|
|
21
17
|
this._needPrepare = true;
|
|
22
18
|
}
|
|
23
|
-
handle(
|
|
19
|
+
handle(req, res, callback) {
|
|
24
20
|
this._prepareStack(true);
|
|
25
21
|
let handlerIdx = -1;
|
|
26
22
|
let callbackCalled = false;
|
|
@@ -28,35 +24,35 @@ class HL7Router {
|
|
|
28
24
|
if (callbackCalled)
|
|
29
25
|
return;
|
|
30
26
|
callbackCalled = true;
|
|
31
|
-
context.removeListener('finish', onFinish);
|
|
32
27
|
callback();
|
|
33
28
|
};
|
|
34
|
-
const
|
|
35
|
-
context.once('finish', onFinish);
|
|
36
|
-
const next = (err) => {
|
|
37
|
-
if (context.finished)
|
|
38
|
-
return;
|
|
39
|
-
context.error = context.error || err;
|
|
29
|
+
const next = async () => {
|
|
40
30
|
try {
|
|
41
31
|
handlerIdx++;
|
|
42
32
|
const handler = this._handlers[handlerIdx];
|
|
43
33
|
if (handler) {
|
|
44
|
-
handler
|
|
34
|
+
if (handler.length < 3) {
|
|
35
|
+
await handler(req, res);
|
|
36
|
+
next();
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
handler(req, res, next);
|
|
45
40
|
return;
|
|
46
41
|
}
|
|
47
42
|
doCallback();
|
|
43
|
+
return;
|
|
48
44
|
}
|
|
49
45
|
catch (e) {
|
|
50
|
-
|
|
46
|
+
res.failed(e);
|
|
47
|
+
return next();
|
|
51
48
|
}
|
|
52
49
|
};
|
|
53
|
-
next();
|
|
50
|
+
return next();
|
|
54
51
|
}
|
|
55
|
-
_prepareStack(
|
|
52
|
+
_prepareStack(root) {
|
|
56
53
|
if (!this._needPrepare)
|
|
57
54
|
return;
|
|
58
55
|
this._needPrepare = false;
|
|
59
|
-
this._handlers = [];
|
|
60
56
|
Array.from(this._handlerStack.keys())
|
|
61
57
|
.sort()
|
|
62
58
|
.forEach(p => {
|
|
@@ -70,23 +66,11 @@ class HL7Router {
|
|
|
70
66
|
this._handlers.push(h);
|
|
71
67
|
}
|
|
72
68
|
});
|
|
73
|
-
if (
|
|
74
|
-
const finalHandler = (
|
|
75
|
-
if (
|
|
69
|
+
if (root) {
|
|
70
|
+
const finalHandler = (req, res) => {
|
|
71
|
+
if (res.finished)
|
|
76
72
|
return;
|
|
77
|
-
|
|
78
|
-
new hl7_exchange_error_js_1.HL7ExchangeError('There is not handler to process this message', {
|
|
79
|
-
request: ctx.request,
|
|
80
|
-
});
|
|
81
|
-
const ack = ctx.request.createAck('AE', error);
|
|
82
|
-
if ((node_process_1.default?.env.NODE_ENV || '').startsWith('dev')) {
|
|
83
|
-
const errSeg = ack.getSegment('ERR');
|
|
84
|
-
if (errSeg)
|
|
85
|
-
errSeg
|
|
86
|
-
.field(hl7v2_dictionary_1.ERRSegment.DiagnosticInformation)
|
|
87
|
-
.setValue(error.stack);
|
|
88
|
-
}
|
|
89
|
-
ctx.end(ack);
|
|
73
|
+
req.socket.sendMessage(res.message);
|
|
90
74
|
};
|
|
91
75
|
this._handlers.push(finalHandler);
|
|
92
76
|
}
|
package/cjs/hl7-server.js
CHANGED
|
@@ -4,9 +4,12 @@ exports.HL7Server = void 0;
|
|
|
4
4
|
const tslib_1 = require("tslib");
|
|
5
5
|
const node_net_1 = tslib_1.__importDefault(require("node:net"));
|
|
6
6
|
const node_tls_1 = tslib_1.__importDefault(require("node:tls"));
|
|
7
|
+
const hl7v2_1 = require("hl7v2");
|
|
7
8
|
const node_events_async_1 = require("node-events-async");
|
|
8
|
-
const
|
|
9
|
+
const uid_1 = require("uid");
|
|
9
10
|
const hl7_exchange_error_js_1 = require("./helpers/hl7-exchange-error.js");
|
|
11
|
+
const hl7_request_js_1 = require("./hl7-request.js");
|
|
12
|
+
const hl7_response_js_1 = require("./hl7-response.js");
|
|
10
13
|
const hl7_router_js_1 = require("./hl7-router.js");
|
|
11
14
|
const hl7_socket_js_1 = require("./hl7-socket.js");
|
|
12
15
|
class HL7Server extends node_events_async_1.AsyncEventEmitter {
|
|
@@ -196,21 +199,23 @@ class HL7Server extends node_events_async_1.AsyncEventEmitter {
|
|
|
196
199
|
}
|
|
197
200
|
_onMessage(message, socket) {
|
|
198
201
|
const waitPromise = new Promise(resolve => {
|
|
199
|
-
|
|
202
|
+
if (!message.header.field(hl7v2_1.MSHSegment.MessageControlID).getValue())
|
|
203
|
+
message.header.field(hl7v2_1.MSHSegment.MessageControlID).setValue((0, uid_1.uid)(8));
|
|
204
|
+
const req = new hl7_request_js_1.HL7Request(socket, message);
|
|
205
|
+
const res = new hl7_response_js_1.HL7Response(req);
|
|
200
206
|
const timeoutTimer = setTimeout(() => {
|
|
201
207
|
try {
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
context.end(ack);
|
|
208
|
+
res.failed(new hl7_exchange_error_js_1.HL7ExchangeError('Response timeout'));
|
|
209
|
+
res.socket.sendMessage(res.message);
|
|
205
210
|
}
|
|
206
211
|
finally {
|
|
207
212
|
resolve();
|
|
208
213
|
}
|
|
209
214
|
}, this.responseTimeout || 30000).unref();
|
|
210
|
-
this._router.handle(
|
|
215
|
+
this._router.handle(req, res, () => {
|
|
211
216
|
clearTimeout(timeoutTimer);
|
|
212
|
-
if (
|
|
213
|
-
this.emit('error',
|
|
217
|
+
if (res.errors.length)
|
|
218
|
+
this.emit('error', res.errors[0], socket);
|
|
214
219
|
resolve();
|
|
215
220
|
});
|
|
216
221
|
});
|
package/cjs/hl7-socket.js
CHANGED
|
@@ -56,9 +56,9 @@ class HL7Socket extends node_events_async_1.AsyncEventEmitter {
|
|
|
56
56
|
address() {
|
|
57
57
|
return this.socket.address();
|
|
58
58
|
}
|
|
59
|
-
|
|
59
|
+
peerIp() {
|
|
60
60
|
const address = this.socket.address();
|
|
61
|
-
return address.address
|
|
61
|
+
return address.address;
|
|
62
62
|
}
|
|
63
63
|
get writable() {
|
|
64
64
|
return this.connected && this.socket.writable;
|
|
@@ -101,7 +101,7 @@ class HL7Socket extends node_events_async_1.AsyncEventEmitter {
|
|
|
101
101
|
const buf = iconv_lite_1.default.encode(str, encoding);
|
|
102
102
|
this.socket.write(hl7v2_1.VT);
|
|
103
103
|
this.socket.write(buf);
|
|
104
|
-
this.socket.
|
|
104
|
+
this.socket.write(hl7v2_1.FS + hl7v2_1.CR);
|
|
105
105
|
this.emit('send', message);
|
|
106
106
|
}
|
|
107
107
|
catch (err) {
|
package/cjs/index.js
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./h-l7-request-context.js"), exports);
|
|
5
4
|
tslib_1.__exportStar(require("./helpers/hl7-exchange-error.js"), exports);
|
|
6
5
|
tslib_1.__exportStar(require("./hl7-client.js"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./hl7-request.js"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./hl7-response.js"), exports);
|
|
7
8
|
tslib_1.__exportStar(require("./hl7-router.js"), exports);
|
|
8
9
|
tslib_1.__exportStar(require("./hl7-server.js"), exports);
|
|
9
10
|
tslib_1.__exportStar(require("./hl7-socket.js"), exports);
|
package/esm/hl7-client.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import net from 'node:net';
|
|
2
2
|
import tls from 'node:tls';
|
|
3
3
|
import { AsyncEventEmitter } from 'node-events-async';
|
|
4
|
-
import {
|
|
4
|
+
import { HL7Request } from './hl7-request.js';
|
|
5
|
+
import { HL7Response } from './hl7-response.js';
|
|
5
6
|
import { HL7Router } from './hl7-router.js';
|
|
6
7
|
import { HL7Socket } from './hl7-socket.js';
|
|
7
8
|
export class Hl7Client extends AsyncEventEmitter {
|
|
@@ -146,10 +147,11 @@ export class Hl7Client extends AsyncEventEmitter {
|
|
|
146
147
|
this._router.use(handler, priority);
|
|
147
148
|
}
|
|
148
149
|
_onMessage(message) {
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
150
|
+
const req = new HL7Request(this._socket, message);
|
|
151
|
+
const res = new HL7Response(req);
|
|
152
|
+
this._router.handle(req, res, () => {
|
|
153
|
+
if (res.errors.length)
|
|
154
|
+
this.emit('error', res.errors[0]);
|
|
153
155
|
});
|
|
154
156
|
}
|
|
155
157
|
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { MSASegment } from 'hl7v2';
|
|
2
|
+
export class HL7Response {
|
|
3
|
+
constructor(request) {
|
|
4
|
+
this._finished = false;
|
|
5
|
+
this.errors = [];
|
|
6
|
+
this.request = request;
|
|
7
|
+
this.message = request.message.createAck();
|
|
8
|
+
request.socket.once('send', () => {
|
|
9
|
+
this._finished = true;
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
get socket() {
|
|
13
|
+
return this.request.socket;
|
|
14
|
+
}
|
|
15
|
+
get finished() {
|
|
16
|
+
return this._finished;
|
|
17
|
+
}
|
|
18
|
+
failed(error) {
|
|
19
|
+
const msa = this.message.getSegment('MSA');
|
|
20
|
+
if (msa?.field(MSASegment.AcknowledgmentCode).getValue() !== 'AE')
|
|
21
|
+
this.message = this.request.message.createNak(this.errors);
|
|
22
|
+
this.errors.push(error);
|
|
23
|
+
this.message.addError(error);
|
|
24
|
+
}
|
|
25
|
+
}
|
package/esm/hl7-router.js
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import process from 'node:process';
|
|
2
|
-
import { ERRSegment } from 'hl7v2-dictionary';
|
|
3
|
-
import { HL7ExchangeError } from './helpers/hl7-exchange-error.js';
|
|
4
1
|
export class HL7Router {
|
|
5
2
|
constructor() {
|
|
6
3
|
this._handlerStack = new Map();
|
|
@@ -16,7 +13,7 @@ export class HL7Router {
|
|
|
16
13
|
list.push(handler);
|
|
17
14
|
this._needPrepare = true;
|
|
18
15
|
}
|
|
19
|
-
handle(
|
|
16
|
+
handle(req, res, callback) {
|
|
20
17
|
this._prepareStack(true);
|
|
21
18
|
let handlerIdx = -1;
|
|
22
19
|
let callbackCalled = false;
|
|
@@ -24,35 +21,35 @@ export class HL7Router {
|
|
|
24
21
|
if (callbackCalled)
|
|
25
22
|
return;
|
|
26
23
|
callbackCalled = true;
|
|
27
|
-
context.removeListener('finish', onFinish);
|
|
28
24
|
callback();
|
|
29
25
|
};
|
|
30
|
-
const
|
|
31
|
-
context.once('finish', onFinish);
|
|
32
|
-
const next = (err) => {
|
|
33
|
-
if (context.finished)
|
|
34
|
-
return;
|
|
35
|
-
context.error = context.error || err;
|
|
26
|
+
const next = async () => {
|
|
36
27
|
try {
|
|
37
28
|
handlerIdx++;
|
|
38
29
|
const handler = this._handlers[handlerIdx];
|
|
39
30
|
if (handler) {
|
|
40
|
-
handler
|
|
31
|
+
if (handler.length < 3) {
|
|
32
|
+
await handler(req, res);
|
|
33
|
+
next();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
handler(req, res, next);
|
|
41
37
|
return;
|
|
42
38
|
}
|
|
43
39
|
doCallback();
|
|
40
|
+
return;
|
|
44
41
|
}
|
|
45
42
|
catch (e) {
|
|
46
|
-
|
|
43
|
+
res.failed(e);
|
|
44
|
+
return next();
|
|
47
45
|
}
|
|
48
46
|
};
|
|
49
|
-
next();
|
|
47
|
+
return next();
|
|
50
48
|
}
|
|
51
|
-
_prepareStack(
|
|
49
|
+
_prepareStack(root) {
|
|
52
50
|
if (!this._needPrepare)
|
|
53
51
|
return;
|
|
54
52
|
this._needPrepare = false;
|
|
55
|
-
this._handlers = [];
|
|
56
53
|
Array.from(this._handlerStack.keys())
|
|
57
54
|
.sort()
|
|
58
55
|
.forEach(p => {
|
|
@@ -66,23 +63,11 @@ export class HL7Router {
|
|
|
66
63
|
this._handlers.push(h);
|
|
67
64
|
}
|
|
68
65
|
});
|
|
69
|
-
if (
|
|
70
|
-
const finalHandler = (
|
|
71
|
-
if (
|
|
66
|
+
if (root) {
|
|
67
|
+
const finalHandler = (req, res) => {
|
|
68
|
+
if (res.finished)
|
|
72
69
|
return;
|
|
73
|
-
|
|
74
|
-
new HL7ExchangeError('There is not handler to process this message', {
|
|
75
|
-
request: ctx.request,
|
|
76
|
-
});
|
|
77
|
-
const ack = ctx.request.createAck('AE', error);
|
|
78
|
-
if ((process?.env.NODE_ENV || '').startsWith('dev')) {
|
|
79
|
-
const errSeg = ack.getSegment('ERR');
|
|
80
|
-
if (errSeg)
|
|
81
|
-
errSeg
|
|
82
|
-
.field(ERRSegment.DiagnosticInformation)
|
|
83
|
-
.setValue(error.stack);
|
|
84
|
-
}
|
|
85
|
-
ctx.end(ack);
|
|
70
|
+
req.socket.sendMessage(res.message);
|
|
86
71
|
};
|
|
87
72
|
this._handlers.push(finalHandler);
|
|
88
73
|
}
|
package/esm/hl7-server.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import net from 'node:net';
|
|
2
2
|
import tls from 'node:tls';
|
|
3
|
+
import { MSHSegment } from 'hl7v2';
|
|
3
4
|
import { AsyncEventEmitter } from 'node-events-async';
|
|
4
|
-
import {
|
|
5
|
+
import { uid } from 'uid';
|
|
5
6
|
import { HL7ExchangeError } from './helpers/hl7-exchange-error.js';
|
|
7
|
+
import { HL7Request } from './hl7-request.js';
|
|
8
|
+
import { HL7Response } from './hl7-response.js';
|
|
6
9
|
import { HL7Router } from './hl7-router.js';
|
|
7
10
|
import { HL7Socket } from './hl7-socket.js';
|
|
8
11
|
export class HL7Server extends AsyncEventEmitter {
|
|
@@ -192,21 +195,23 @@ export class HL7Server extends AsyncEventEmitter {
|
|
|
192
195
|
}
|
|
193
196
|
_onMessage(message, socket) {
|
|
194
197
|
const waitPromise = new Promise(resolve => {
|
|
195
|
-
|
|
198
|
+
if (!message.header.field(MSHSegment.MessageControlID).getValue())
|
|
199
|
+
message.header.field(MSHSegment.MessageControlID).setValue(uid(8));
|
|
200
|
+
const req = new HL7Request(socket, message);
|
|
201
|
+
const res = new HL7Response(req);
|
|
196
202
|
const timeoutTimer = setTimeout(() => {
|
|
197
203
|
try {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
context.end(ack);
|
|
204
|
+
res.failed(new HL7ExchangeError('Response timeout'));
|
|
205
|
+
res.socket.sendMessage(res.message);
|
|
201
206
|
}
|
|
202
207
|
finally {
|
|
203
208
|
resolve();
|
|
204
209
|
}
|
|
205
210
|
}, this.responseTimeout || 30000).unref();
|
|
206
|
-
this._router.handle(
|
|
211
|
+
this._router.handle(req, res, () => {
|
|
207
212
|
clearTimeout(timeoutTimer);
|
|
208
|
-
if (
|
|
209
|
-
this.emit('error',
|
|
213
|
+
if (res.errors.length)
|
|
214
|
+
this.emit('error', res.errors[0], socket);
|
|
210
215
|
resolve();
|
|
211
216
|
});
|
|
212
217
|
});
|
package/esm/hl7-socket.js
CHANGED
|
@@ -52,9 +52,9 @@ export class HL7Socket extends AsyncEventEmitter {
|
|
|
52
52
|
address() {
|
|
53
53
|
return this.socket.address();
|
|
54
54
|
}
|
|
55
|
-
|
|
55
|
+
peerIp() {
|
|
56
56
|
const address = this.socket.address();
|
|
57
|
-
return address.address
|
|
57
|
+
return address.address;
|
|
58
58
|
}
|
|
59
59
|
get writable() {
|
|
60
60
|
return this.connected && this.socket.writable;
|
|
@@ -97,7 +97,7 @@ export class HL7Socket extends AsyncEventEmitter {
|
|
|
97
97
|
const buf = iconv.encode(str, encoding);
|
|
98
98
|
this.socket.write(VT);
|
|
99
99
|
this.socket.write(buf);
|
|
100
|
-
this.socket.
|
|
100
|
+
this.socket.write(FS + CR);
|
|
101
101
|
this.emit('send', message);
|
|
102
102
|
}
|
|
103
103
|
catch (err) {
|
package/esm/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from './h-l7-request-context.js';
|
|
2
1
|
export * from './helpers/hl7-exchange-error.js';
|
|
3
2
|
export * from './hl7-client.js';
|
|
3
|
+
export * from './hl7-request.js';
|
|
4
|
+
export * from './hl7-response.js';
|
|
4
5
|
export * from './hl7-router.js';
|
|
5
6
|
export * from './hl7-server.js';
|
|
6
7
|
export * from './hl7-socket.js';
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hl7v2-net",
|
|
3
3
|
"description": "HL7 v2 server/client for NodeJS",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.2.0",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"@jsopen/objects": "^2.0.2",
|
|
9
|
-
"iconv-lite": "^0.
|
|
9
|
+
"iconv-lite": "^0.7.0",
|
|
10
10
|
"is-typedarray": "^1.0.0",
|
|
11
11
|
"node-events-async": "^1.2.0",
|
|
12
12
|
"ts-gems": "^3.11.3",
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"uid": "^2.0.2"
|
|
16
16
|
},
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"hl7v2": "^1.
|
|
19
|
-
"hl7v2-dictionary": "^1.
|
|
18
|
+
"hl7v2": "^1.2.0",
|
|
19
|
+
"hl7v2-dictionary": "^1.2.0"
|
|
20
20
|
},
|
|
21
21
|
"type": "module",
|
|
22
22
|
"exports": {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HL7Message } from 'hl7v2';
|
|
2
|
+
import type { HL7Socket } from './hl7-socket.js';
|
|
3
|
+
export declare class HL7Request {
|
|
4
|
+
readonly socket: HL7Socket;
|
|
5
|
+
readonly message: HL7Message;
|
|
6
|
+
constructor(socket: HL7Socket, message: HL7Message);
|
|
7
|
+
peerIp(): any;
|
|
8
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { HL7Message } from 'hl7v2';
|
|
2
|
+
import type { HL7Request } from './hl7-request.js';
|
|
3
|
+
import type { HL7Socket } from './hl7-socket.js';
|
|
4
|
+
export declare class HL7Response {
|
|
5
|
+
protected _finished: boolean;
|
|
6
|
+
readonly request: HL7Request;
|
|
7
|
+
errors: Error[];
|
|
8
|
+
message: HL7Message;
|
|
9
|
+
constructor(request: HL7Request);
|
|
10
|
+
get socket(): HL7Socket;
|
|
11
|
+
get finished(): boolean;
|
|
12
|
+
failed(error: Error): void;
|
|
13
|
+
}
|
package/types/hl7-router.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { HL7Request } from './hl7-request.js';
|
|
2
|
+
import { HL7Response } from './hl7-response.js';
|
|
3
|
+
import type { HL7Middleware } from './types.js';
|
|
3
4
|
export declare class HL7Router {
|
|
4
|
-
protected _handlerStack: Map<number, (
|
|
5
|
+
protected _handlerStack: Map<number, (HL7Middleware | HL7Router)[]>;
|
|
5
6
|
protected _needPrepare: boolean;
|
|
6
7
|
protected _handlers: HL7Middleware[];
|
|
7
8
|
use(handler: HL7Middleware | HL7Router, priority?: number): void;
|
|
8
|
-
handle(
|
|
9
|
-
protected _prepareStack(
|
|
9
|
+
handle(req: HL7Request, res: HL7Response, callback: () => void): void | Promise<void>;
|
|
10
|
+
protected _prepareStack(root?: boolean): void;
|
|
10
11
|
}
|
package/types/hl7-socket.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export declare class HL7Socket extends AsyncEventEmitter<HL7Socket.Events> {
|
|
|
22
22
|
get maxBufferSize(): number;
|
|
23
23
|
set maxBufferSize(value: number);
|
|
24
24
|
address(): {} | import("net").AddressInfo;
|
|
25
|
-
|
|
25
|
+
peerIp(): any;
|
|
26
26
|
get writable(): boolean;
|
|
27
27
|
close(waitRunningHandlers?: number): Promise<void>;
|
|
28
28
|
sendMessage(message: HL7Message): void;
|
package/types/index.d.cts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from './h-l7-request-context.js';
|
|
2
1
|
export * from './helpers/hl7-exchange-error.js';
|
|
3
2
|
export * from './hl7-client.js';
|
|
3
|
+
export * from './hl7-request.js';
|
|
4
|
+
export * from './hl7-response.js';
|
|
4
5
|
export * from './hl7-router.js';
|
|
5
6
|
export * from './hl7-server.js';
|
|
6
7
|
export * from './hl7-socket.js';
|
package/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export * from './h-l7-request-context.js';
|
|
2
1
|
export * from './helpers/hl7-exchange-error.js';
|
|
3
2
|
export * from './hl7-client.js';
|
|
3
|
+
export * from './hl7-request.js';
|
|
4
|
+
export * from './hl7-response.js';
|
|
4
5
|
export * from './hl7-router.js';
|
|
5
6
|
export * from './hl7-server.js';
|
|
6
7
|
export * from './hl7-socket.js';
|
package/types/types.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
export type
|
|
1
|
+
import { HL7Request } from './hl7-request.js';
|
|
2
|
+
import { HL7Response } from './hl7-response.js';
|
|
3
|
+
export type NextFunction = () => void | Promise<void>;
|
|
4
|
+
export type HL7Middleware = ((req: HL7Request, res: HL7Response) => void) | ((req: HL7Request, res: HL7Response) => Promise<void>) | ((req: HL7Request, res: HL7Response, next: NextFunction) => void);
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.HL7RequestContext = void 0;
|
|
4
|
-
const hl7v2_1 = require("hl7v2");
|
|
5
|
-
const node_events_async_1 = require("node-events-async");
|
|
6
|
-
const uid_1 = require("uid");
|
|
7
|
-
class HL7RequestContext extends node_events_async_1.AsyncEventEmitter {
|
|
8
|
-
constructor(socket, message) {
|
|
9
|
-
super();
|
|
10
|
-
this._finished = false;
|
|
11
|
-
this.socket = socket;
|
|
12
|
-
this.request = message;
|
|
13
|
-
if (!message.header.field(hl7v2_1.MSHSegment.MessageControlID).getValue())
|
|
14
|
-
message.header.field(hl7v2_1.MSHSegment.MessageControlID).setValue((0, uid_1.uid)(8));
|
|
15
|
-
}
|
|
16
|
-
get finished() {
|
|
17
|
-
return this._finished || !this.socket.connected;
|
|
18
|
-
}
|
|
19
|
-
end(message) {
|
|
20
|
-
if (this.finished || !this.socket.connected)
|
|
21
|
-
return;
|
|
22
|
-
if (message)
|
|
23
|
-
this.socket.sendMessage(message);
|
|
24
|
-
this._finished = true;
|
|
25
|
-
this.emit('finish', message);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.HL7RequestContext = HL7RequestContext;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { MSHSegment } from 'hl7v2';
|
|
2
|
-
import { AsyncEventEmitter } from 'node-events-async';
|
|
3
|
-
import { uid } from 'uid';
|
|
4
|
-
export class HL7RequestContext extends AsyncEventEmitter {
|
|
5
|
-
constructor(socket, message) {
|
|
6
|
-
super();
|
|
7
|
-
this._finished = false;
|
|
8
|
-
this.socket = socket;
|
|
9
|
-
this.request = message;
|
|
10
|
-
if (!message.header.field(MSHSegment.MessageControlID).getValue())
|
|
11
|
-
message.header.field(MSHSegment.MessageControlID).setValue(uid(8));
|
|
12
|
-
}
|
|
13
|
-
get finished() {
|
|
14
|
-
return this._finished || !this.socket.connected;
|
|
15
|
-
}
|
|
16
|
-
end(message) {
|
|
17
|
-
if (this.finished || !this.socket.connected)
|
|
18
|
-
return;
|
|
19
|
-
if (message)
|
|
20
|
-
this.socket.sendMessage(message);
|
|
21
|
-
this._finished = true;
|
|
22
|
-
this.emit('finish', message);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { HL7Message } from 'hl7v2';
|
|
2
|
-
import { AsyncEventEmitter } from 'node-events-async';
|
|
3
|
-
import { HL7Socket } from './hl7-socket.js';
|
|
4
|
-
export declare class HL7RequestContext extends AsyncEventEmitter {
|
|
5
|
-
protected _finished: boolean;
|
|
6
|
-
readonly socket: HL7Socket;
|
|
7
|
-
readonly request: HL7Message;
|
|
8
|
-
error?: Error;
|
|
9
|
-
constructor(socket: HL7Socket, message: HL7Message);
|
|
10
|
-
get finished(): boolean;
|
|
11
|
-
end(message?: HL7Message): void;
|
|
12
|
-
}
|