fhirsmith 0.8.5 → 0.9.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.
Files changed (41) hide show
  1. package/CHANGELOG.md +51 -0
  2. package/README.md +52 -22
  3. package/extension-tracker/extension-tracker-template.html +3 -1
  4. package/library/html-server.js +7 -0
  5. package/library/logger.js +234 -194
  6. package/library/regex-utilities.js +13 -0
  7. package/package.json +4 -2
  8. package/packages/packages-template.html +3 -1
  9. package/publisher/publisher-template.html +1 -0
  10. package/publisher/publisher.js +28 -7
  11. package/registry/registry-template.html +3 -1
  12. package/root-bare-template.html +9759 -37
  13. package/root-template.html +3 -2
  14. package/server.js +48 -12
  15. package/translations/Messages.properties +2 -1
  16. package/translations/rendering-phrases.properties +3 -1
  17. package/tx/cs/cs-api.js +4 -0
  18. package/tx/cs/cs-country.js +2 -1
  19. package/tx/cs/cs-cs.js +9 -4
  20. package/tx/cs/cs-loinc.js +2 -1
  21. package/tx/cs/cs-snomed.js +5 -1
  22. package/tx/data/OperationDefinition-ValueSet-related.json +133 -0
  23. package/tx/html/tx-template.html +3 -2
  24. package/tx/importers/atc-to-fhir.js +27 -27
  25. package/tx/library/codesystem.js +4 -0
  26. package/tx/library/renderer.js +20 -4
  27. package/tx/library/ucum-parsers.js +2 -1
  28. package/tx/ocl/cs-ocl.cjs +48 -15
  29. package/tx/ocl/vs-ocl.cjs +57 -34
  30. package/tx/operation-context.js +74 -19
  31. package/tx/tx-html.js +5 -5
  32. package/tx/tx.fhir.org.yml +4 -4
  33. package/tx/tx.js +1 -0
  34. package/tx/vs/vs-database.js +150 -100
  35. package/tx/vs/vs-vsac.js +90 -31
  36. package/tx/workers/expand.js +154 -113
  37. package/tx/workers/metadata.js +6 -3
  38. package/tx/workers/read.js +6 -3
  39. package/tx/workers/related.js +228 -87
  40. package/xig/xig-template.html +3 -1
  41. package/library/logger-telnet.js +0 -205
package/CHANGELOG.md CHANGED
@@ -5,6 +5,57 @@ All notable changes to the Health Intersections Node Server will be documented i
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [v0.9.0] - 2026-04-09
9
+
10
+ ### Added
11
+
12
+ - TX: VSAC upgrade to pick up more changes
13
+ - TX: add definition of $related operation to CapabilityStatement
14
+
15
+ ### Changed
16
+
17
+ - TX: Deal with regex Denial of Service Issue
18
+ - TX: improve fragment handling in extensions per TI decision
19
+ - TX: Reduce snomed loaded versions - have already moved to affiliate managed servers
20
+ - TX: fix bug handling excluded concepts using a filter
21
+ - improve dashboard template
22
+
23
+ ### Fixed
24
+
25
+ - Update dependencies for security fixes
26
+ - TX: fix error in SNOMED translate for implicit concept maps
27
+ - TX: Fix OCL cache invalidation and case-insensitive concept lookups
28
+ - Publisher: fix handling of web templates folder
29
+ - Publisher: fix webtemplates table headings
30
+
31
+ ### Tx Conformance Statement
32
+
33
+ FHIRsmith passed all 1578 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed, tests v1.9.1, runner v6.9.5)
34
+
35
+ ## [v0.8.6] - 2026-04-06
36
+
37
+ ### Added
38
+
39
+ - TX: Full support for $related operation
40
+ - Add sponsor message to footer on all pages
41
+
42
+ ### Changed
43
+
44
+ - TX: Improve $expand efficiency slightly
45
+ - Rework logging for efficiency and configurability
46
+ - TX: Try to make the server more resistant to running out of memory and dying
47
+ - Improve memory reporting on dashboard and home pages
48
+ - improve metadata display for resources
49
+
50
+ ### Fixed
51
+
52
+ - Fix up tx test version to be correct in capabilities statement
53
+ - Fix security warning
54
+
55
+ ### Tx Conformance Statement
56
+
57
+ FHIRsmith passed all 1497 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed, tests v1.9.1, runner v6.9.4)
58
+
8
59
  ## [v0.8.5] - 2026-04-02
9
60
 
10
61
  ### Added
package/README.md CHANGED
@@ -14,17 +14,17 @@ This server provides a set of server-side services that are useful for the FHIR
14
14
  * [Package server](packages/readme.md) - **NPM-style FHIR package registry** with search, versioning, and downloads, consistent with the FHIR NPM Specification (as running at http://packages2.fhir.org/packages)
15
15
  * [XIG server](xig/readme.md) - **Comprehensive FHIR IG analytics** with resource breakdowns by version, authority, and realm (as running at http://packages2.fhir.org/packages)
16
16
  * [Publisher](publisher/readme.md) - FHIR publishing services (as running at [healthintersections.com.au](http://www.healthintersections.com.au/publisher))
17
- * [VCL](vcl/readme.md) - **Parse VCL expressions** into FHIR ValueSet resources (as running at http://fhir.org/vcl)
17
+ * [VCL](vcl/readme.md) - **Parse VCL expressions** into FHIR ValueSet resources (as running at http://fhir.org/vcl)
18
18
  * (Coming) Token services
19
19
 
20
20
  ## Summary Statement
21
21
 
22
- * Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
22
+ * Maintainers: Grahame Grieve, Italo Macêdo, Josh Mandel, Jose Costa Teixeira
23
23
  * Issues / Discussion: Use github issues
24
24
  * License: BSD-3
25
- * Contribution Policy: Make PRs. PRs have to pass all the tests
25
+ * Contribution Policy: Make PRs. PRs have to pass all the tests
26
26
  * Security Information: See [security.md](security.md)
27
-
27
+
28
28
  ## Build Status
29
29
  ![CI Build](https://github.com/HealthIntersections/fhirsmith/actions/workflows/ci.yml/badge.svg)
30
30
  [![Release](https://img.shields.io/github/v/release/HealthIntersections/fhirsmith?include_prereleases)](https://github.com/HealthIntersections/fhirsmith/releases)
@@ -44,15 +44,15 @@ There are 4 executable programs:
44
44
  Unless you're developing, you only need the first two
45
45
 
46
46
  FHIRsmith is open source - see below, and you're welcome to use it for any kind of use. Note,
47
- though, that if you support FHIRsmith commercially as part of a managed service or product, you
47
+ though, that if you support FHIRsmith commercially as part of a managed service or product, you
48
48
  are required to be a Commercial Partner of HL7 - see (link to be provided).
49
49
 
50
50
  ### Quick Start
51
51
 
52
52
  * Install FHIRSmith (using docker, or an NPM release, or just get the code by git)
53
- * Figure out the data directory
53
+ * Figure out the data directory
54
54
  * Provide a configuration to tell the server what to run (see documentation below, or use a [prebuilt configuration]/configurations/readme.md)
55
- * Run the server
55
+ * Run the server
56
56
 
57
57
  For further details of these steps, read on
58
58
 
@@ -128,6 +128,36 @@ Create a `config.json` file in your data directory (use `config-template.json` a
128
128
  }
129
129
  ```
130
130
 
131
+ ### Logging Configuration
132
+
133
+ Add a `logging` section to `config.json` to control log behaviour. All fields are optional and have sensible defaults:
134
+
135
+ ```json
136
+ {
137
+ "logging": {
138
+ "level": "info",
139
+ "console": true,
140
+ "consoleErrors": false,
141
+ "maxFiles": 14,
142
+ "maxSize": "50m",
143
+ "flushInterval": 2000,
144
+ "flushSize": 200
145
+ }
146
+ }
147
+ ```
148
+
149
+ | Option | Default | Description |
150
+ |---|---|---|
151
+ | `level` | `"info"` | Minimum level to log: `error`, `warn`, `info`, `debug`, or `verbose` |
152
+ | `console` | `true` | Write log lines to stdout/stderr. Disable when running as a systemd service where console output goes to the journal and is redundant |
153
+ | `consoleErrors` | `false` | Whether `error` and `warn` levels appear on the console. When `false`, errors and warnings are written to the log file only |
154
+ | `maxFiles` | `14` | Number of daily log files to retain before old ones are deleted |
155
+ | `maxSize` | `0` (unlimited) | Maximum size per log file before rotation. Accepts human-readable strings: `"20m"`, `"1g"`, or a raw byte count |
156
+ | `flushInterval` | `2000` | Milliseconds between buffered writes to disk. Increase to reduce I/O under heavy load |
157
+ | `flushSize` | `200` | Number of buffered log lines that trigger an immediate flush regardless of the timer |
158
+
159
+ Log files are written to the `logs/` subdirectory of the data directory as `server-YYYY-MM-DD.log`. A `server.log` symlink always points to the current day's file, so `tail -f data/logs/server.log` tracks the active log without needing to know the date.
160
+
131
161
  ### Start the Server
132
162
 
133
163
  ```bash
@@ -211,8 +241,8 @@ Available tags:
211
241
 
212
242
  ### Windows Installation
213
243
 
214
- You can install as a windows service using [windows-install.js](utilities/windows-install.js). You might need to
215
- hack that.
244
+ You can install as a windows service using [windows-install.js](utilities/windows-install.js). You might need to
245
+ hack that.
216
246
 
217
247
  ## Releases
218
248
 
@@ -224,9 +254,9 @@ Each GitHub Release includes:
224
254
  - **Release notes** extracted from CHANGELOG.md
225
255
  - **Source code** archives (zip and tar.gz)
226
256
  - **Docker images** pushed to GitHub Container Registry:
227
- - `ghcr.io/healthintersections/fhirsmith:latest`
228
- - `ghcr.io/healthintersections/fhirsmith:vX.Y.Z`
229
- - `ghcr.io/healthintersections/fhirsmith:X.Y.Z`
257
+ - `ghcr.io/healthintersections/fhirsmith:latest`
258
+ - `ghcr.io/healthintersections/fhirsmith:vX.Y.Z`
259
+ - `ghcr.io/healthintersections/fhirsmith:X.Y.Z`
230
260
  - **npm package** published to npmjs.org as `fhirsmith` *(if you add this)*
231
261
 
232
262
  ### Creating a Release
@@ -244,13 +274,13 @@ GitHub Actions will automatically:
244
274
  1. Update `CHANGELOG.md` with your changes under a new version section:
245
275
  ```markdown
246
276
  ## [vX.Y.Z] - YYYY-MM-DD
247
- ### Added
248
- - New feature description
249
- ### Changed
250
- - Change description
251
- ### Fixed
252
- - Bug fix description
253
- ### Tx Conformance Statement
277
+ ### Added
278
+ - New feature description
279
+ ### Changed
280
+ - Change description
281
+ ### Fixed
282
+ - Bug fix description
283
+ ### Tx Conformance Statement
254
284
  {copy content from text-cases-summary.txt}
255
285
  ```
256
286
  2. Update `package.json` to have the same release version
@@ -270,9 +300,9 @@ or do it via a PR
270
300
  ```
271
301
 
272
302
  5. Monitor the release:
273
- - Check [GitHub Actions](https://github.com/HealthIntersections/fhirsmith/actions) for the Release workflow
274
- - Verify the [GitHub Release](https://github.com/HealthIntersections/fhirsmith/releases) was created
275
- - Confirm Docker images are available at [GHCR](https://github.com/HealthIntersections/fhirsmith/pkgs/container/fhirsmith)
303
+ - Check [GitHub Actions](https://github.com/HealthIntersections/fhirsmith/actions) for the Release workflow
304
+ - Verify the [GitHub Release](https://github.com/HealthIntersections/fhirsmith/releases) was created
305
+ - Confirm Docker images are available at [GHCR](https://github.com/HealthIntersections/fhirsmith/pkgs/container/fhirsmith)
276
306
 
277
307
  6. Update `package.json` to have the next release version -SNAPSHOT
278
308
 
@@ -92,7 +92,9 @@
92
92
  <p>
93
93
  <a href="http://www.hl7.org/fhir" style="color: gold" title="Fast Healthcare Interoperability Resources - Home Page"><img border="0" src="/icon-fhir-16.png" style="vertical-align: text-bottom"/> <b>FHIR</b></a> &copy; HL7.org 2011+. &nbsp;|&nbsp;
94
94
  <a href="https://github.com/HealthIntersections/FHIRsmith/blob/main/README.md" style="color: gold"><img border="0" src="/FHIRsmith16.png" style="vertical-align: text-bottom"/> FHIRsmith</a> [%ver%] &copy; HealthIntersections.com.au 2023+ &nbsp;|&nbsp;
95
- [%total-packages%] packages tracked &nbsp;|&nbsp; ([%ms%] ms)
95
+ [%total-packages%] packages tracked &nbsp;|
96
+ &nbsp; ([%ms%] ms)
97
+ [%sponsorMessage%]
96
98
  </p>
97
99
  </div> <!-- /inner-wrapper -->
98
100
  </div> <!-- /container -->
@@ -9,6 +9,8 @@ const fs = require('fs');
9
9
  const path = require('path');
10
10
  const escape = require('escape-html');
11
11
 
12
+ let sponsorMessage = '';
13
+
12
14
  class HtmlServer {
13
15
  log;
14
16
 
@@ -20,6 +22,10 @@ class HtmlServer {
20
22
  this.log = logv;
21
23
  }
22
24
 
25
+ setSponsorMessage(msg) {
26
+ sponsorMessage = msg;
27
+ }
28
+
23
29
  // Template Management
24
30
  loadTemplate(templateName, templatePath) {
25
31
  try {
@@ -73,6 +79,7 @@ class HtmlServer {
73
79
  .replace(/\[%endpoint-path%\]/g, escape(renderOptions.endpointpath))
74
80
  .replace(/\[%fhir-version%\]/g, escape(renderOptions.fhirversion))
75
81
  .replace(/\[%ms%\]/g, escape(renderOptions.processingTime.toString()))
82
+ .replace(/\[%sponsorMessage%\]/g, sponsorMessage)
76
83
  .replace(/\[%about%\]/g, renderOptions.about || '');
77
84
 
78
85
  // Handle any custom template variables