@justair/justair-library 7.3.0-alpha.0df53d8 → 7.3.0-alpha.6ef8bd3
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/dist/constants/pollutants.d.ts +5 -0
- package/dist/constants/pollutants.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/constants/pollutants.js +15 -4
- package/src/constants/tests/pollutants.test.js +23 -1
- package/src/index.js +2 -1
|
@@ -568,6 +568,11 @@ export namespace PARAMETERS {
|
|
|
568
568
|
export { impacts_31 as impacts };
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
|
+
export const AMBIENT_MET_PARAMETERS: Readonly<{
|
|
572
|
+
T: "T_AMB";
|
|
573
|
+
RH: "RH_AMB";
|
|
574
|
+
DP: "DP_AMB";
|
|
575
|
+
}>;
|
|
571
576
|
export namespace HEAVY_METALS {
|
|
572
577
|
export namespace AS {
|
|
573
578
|
let id_32: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pollutants.d.ts","sourceRoot":"","sources":["../../src/constants/pollutants.js"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"pollutants.d.ts","sourceRoot":"","sources":["../../src/constants/pollutants.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8UA;;;;GAIG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -88,6 +88,7 @@ import { NOTIFICATION_CHANNELS } from "./models/userNotifications.js";
|
|
|
88
88
|
import { DELIVERY_STATUSES } from "./models/userNotifications.js";
|
|
89
89
|
import { PARAMETERS } from "./constants/pollutants.js";
|
|
90
90
|
import { HEAVY_METALS } from "./constants/pollutants.js";
|
|
91
|
+
import { AMBIENT_MET_PARAMETERS } from "./constants/pollutants.js";
|
|
91
92
|
import { ALERT_LEVEL_WEIGHTS } from "./constants/alertLevels.js";
|
|
92
93
|
import { getAlertWeight } from "./constants/alertLevels.js";
|
|
93
94
|
import { splitName } from "./utils/splitName.js";
|
|
@@ -100,5 +101,5 @@ import { validateQuietHours } from "./utils/quietHours.js";
|
|
|
100
101
|
import { getZoneMinutes } from "./utils/quietHours.js";
|
|
101
102
|
import { isInQuietWindow } from "./utils/quietHours.js";
|
|
102
103
|
import { resolveQuietHours } from "./utils/quietHours.js";
|
|
103
|
-
export { Database, adminSchema, Admin, configurationsSchema, Configurations, measurementsSchema, Measurements, monitorRequestsSchema, MonitorRequests, monitorsSchema, Monitors, organizationsSchema, Organizations, usersSchema, Users, COOKIE_CONSENT_CATEGORIES, COOKIE_CONSENT_VALUES, validateCookieConsent, eventsSchema, Events, lightMonitorSchema, LightMonitors, monitorSuppliersSchema, MonitorSuppliers, contextsSchema, Contexts, parametersSchema, Parameters, announcementSchema, Announcements, jobsSchema, Jobs, apiKeySchema, ApiKey, UsageMetrics, usageMetricsSchema, Audit, auditSchema, EventsAudit, eventsAuditSchema, MonitorAudit, monitorAuditSchema, parametersEnum, deploymentTypesEnum, AlertsAudit, Alerts, alertsSchema, alertsAuditSchema, Features, featuresSchema, dataCompletenessSchema, DataCompleteness, networkMetricsSchema, NetworkMetrics, rateOfChangeSchema, RateOfChange, changeStreamCheckpointsSchema, ChangeStreamCheckpoints, sitesSchema, Sites, sampleSitesSchema, SampleSites, sampleSiteAuditSchema, SampleSiteAudit, sampleParametersEnum, samplesSchema, Samples, samplesAuditSchema, SamplesAudit, sampleParameterReferenceConcentrations, passwordResetTokenSchema, PasswordResetToken, monitorEpisodesSchema, MonitorEpisode, userNotificationsSchema, UserNotification, AqiAlertNotification, DeviceOfflineNotification, WeeklyDigestNotification, AccountNotification, NOTIFICATION_KINDS, NOTIFICATION_CHANNELS, DELIVERY_STATUSES, PARAMETERS, HEAVY_METALS, ALERT_LEVEL_WEIGHTS, getAlertWeight, splitName, DEFAULT_QUIET_HOURS, DEFAULT_TIMEZONE, QUIET_HOURS_ERRORS, isValidTimeString, isValidIANATimezone, validateQuietHours, getZoneMinutes, isInQuietWindow, resolveQuietHours };
|
|
104
|
+
export { Database, adminSchema, Admin, configurationsSchema, Configurations, measurementsSchema, Measurements, monitorRequestsSchema, MonitorRequests, monitorsSchema, Monitors, organizationsSchema, Organizations, usersSchema, Users, COOKIE_CONSENT_CATEGORIES, COOKIE_CONSENT_VALUES, validateCookieConsent, eventsSchema, Events, lightMonitorSchema, LightMonitors, monitorSuppliersSchema, MonitorSuppliers, contextsSchema, Contexts, parametersSchema, Parameters, announcementSchema, Announcements, jobsSchema, Jobs, apiKeySchema, ApiKey, UsageMetrics, usageMetricsSchema, Audit, auditSchema, EventsAudit, eventsAuditSchema, MonitorAudit, monitorAuditSchema, parametersEnum, deploymentTypesEnum, AlertsAudit, Alerts, alertsSchema, alertsAuditSchema, Features, featuresSchema, dataCompletenessSchema, DataCompleteness, networkMetricsSchema, NetworkMetrics, rateOfChangeSchema, RateOfChange, changeStreamCheckpointsSchema, ChangeStreamCheckpoints, sitesSchema, Sites, sampleSitesSchema, SampleSites, sampleSiteAuditSchema, SampleSiteAudit, sampleParametersEnum, samplesSchema, Samples, samplesAuditSchema, SamplesAudit, sampleParameterReferenceConcentrations, passwordResetTokenSchema, PasswordResetToken, monitorEpisodesSchema, MonitorEpisode, userNotificationsSchema, UserNotification, AqiAlertNotification, DeviceOfflineNotification, WeeklyDigestNotification, AccountNotification, NOTIFICATION_KINDS, NOTIFICATION_CHANNELS, DELIVERY_STATUSES, PARAMETERS, HEAVY_METALS, AMBIENT_MET_PARAMETERS, ALERT_LEVEL_WEIGHTS, getAlertWeight, splitName, DEFAULT_QUIET_HOURS, DEFAULT_TIMEZONE, QUIET_HOURS_ERRORS, isValidTimeString, isValidIANATimezone, validateQuietHours, getZoneMinutes, isInQuietWindow, resolveQuietHours };
|
|
104
105
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAuHA;;;iBAEC;yBAvDwB,oBAAoB;qBADxB,gBAAgB;4BAjEF,mBAAmB;sBAAnB,mBAAmB;qCAI/C,4BAA4B;+BAA5B,4BAA4B;mCAM5B,0BAA0B;6BAA1B,0BAA0B;sCAI1B,6BAA6B;gCAA7B,6BAA6B;+BAQ7B,sBAAsB;yBAAtB,sBAAsB;oCACsB,2BAA2B;8BAA3B,2BAA2B;4BAcvE,mBAAmB;sBAAnB,mBAAmB;0CAAnB,mBAAmB;sCAAnB,mBAAmB;sCAAnB,mBAAmB;6BAMnB,oBAAoB;uBAApB,oBAAoB;mCAnBuB,2BAA2B;8BAA3B,2BAA2B;uCAItE,8BAA8B;iCAA9B,8BAA8B;+BACI,sBAAsB;yBAAtB,sBAAsB;iCAClB,wBAAwB;2BAAxB,wBAAwB;mCAcnB,2BAA2B;8BAA3B,2BAA2B;2BAC5C,kBAAkB;qBAAlB,kBAAkB;6BACd,oBAAoB;uBAApB,oBAAoB;6BACR,0BAA0B;mCAA1B,0BAA0B;sBArCpE,0BAA0B;4BAA1B,0BAA0B;4BAiC1B,oBAAoB;kCAApB,oBAAoB;6BArBpB,sBAAsB;mCAAtB,sBAAsB;+BAAtB,sBAAsB;oCAAtB,sBAAsB;4BA+BtB,oBAAoB;uBAApB,oBAAoB;6BAApB,oBAAoB;kCAApB,oBAAoB;yBACc,sBAAsB;+BAAtB,sBAAsB;uCAIxD,8BAA8B;iCAA9B,8BAA8B;qCACgB,4BAA4B;+BAA5B,4BAA4B;mCAChC,0BAA0B;6BAA1B,0BAA0B;8CAIpE,qCAAqC;wCAArC,qCAAqC;4BAkCT,mBAAmB;sBAAnB,mBAAmB;kCAS/C,yBAAyB;4BAAzB,yBAAyB;sCAAzB,yBAAyB;gCAAzB,yBAAyB;qCAAzB,yBAAyB;8BASzB,qBAAqB;wBAArB,qBAAqB;mCAArB,qBAAqB;6BAArB,qBAAqB;uDAArB,qBAAqB;yCACiC,gCAAgC;mCAAhC,gCAAgC;sCA7CtF,6BAA6B;+BAA7B,6BAA6B;wCAW7B,+BAA+B;iCAA/B,+BAA+B;qCAA/B,+BAA+B;0CAA/B,+BAA+B;yCAA/B,+BAA+B;oCAA/B,+BAA+B;mCAA/B,+BAA+B;sCAA/B,+BAA+B;kCAA/B,+BAA+B;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAuHA;;;iBAEC;yBAvDwB,oBAAoB;qBADxB,gBAAgB;4BAjEF,mBAAmB;sBAAnB,mBAAmB;qCAI/C,4BAA4B;+BAA5B,4BAA4B;mCAM5B,0BAA0B;6BAA1B,0BAA0B;sCAI1B,6BAA6B;gCAA7B,6BAA6B;+BAQ7B,sBAAsB;yBAAtB,sBAAsB;oCACsB,2BAA2B;8BAA3B,2BAA2B;4BAcvE,mBAAmB;sBAAnB,mBAAmB;0CAAnB,mBAAmB;sCAAnB,mBAAmB;sCAAnB,mBAAmB;6BAMnB,oBAAoB;uBAApB,oBAAoB;mCAnBuB,2BAA2B;8BAA3B,2BAA2B;uCAItE,8BAA8B;iCAA9B,8BAA8B;+BACI,sBAAsB;yBAAtB,sBAAsB;iCAClB,wBAAwB;2BAAxB,wBAAwB;mCAcnB,2BAA2B;8BAA3B,2BAA2B;2BAC5C,kBAAkB;qBAAlB,kBAAkB;6BACd,oBAAoB;uBAApB,oBAAoB;6BACR,0BAA0B;mCAA1B,0BAA0B;sBArCpE,0BAA0B;4BAA1B,0BAA0B;4BAiC1B,oBAAoB;kCAApB,oBAAoB;6BArBpB,sBAAsB;mCAAtB,sBAAsB;+BAAtB,sBAAsB;oCAAtB,sBAAsB;4BA+BtB,oBAAoB;uBAApB,oBAAoB;6BAApB,oBAAoB;kCAApB,oBAAoB;yBACc,sBAAsB;+BAAtB,sBAAsB;uCAIxD,8BAA8B;iCAA9B,8BAA8B;qCACgB,4BAA4B;+BAA5B,4BAA4B;mCAChC,0BAA0B;6BAA1B,0BAA0B;8CAIpE,qCAAqC;wCAArC,qCAAqC;4BAkCT,mBAAmB;sBAAnB,mBAAmB;kCAS/C,yBAAyB;4BAAzB,yBAAyB;sCAAzB,yBAAyB;gCAAzB,yBAAyB;qCAAzB,yBAAyB;8BASzB,qBAAqB;wBAArB,qBAAqB;mCAArB,qBAAqB;6BAArB,qBAAqB;uDAArB,qBAAqB;yCACiC,gCAAgC;mCAAhC,gCAAgC;sCA7CtF,6BAA6B;+BAA7B,6BAA6B;wCAW7B,+BAA+B;iCAA/B,+BAA+B;qCAA/B,+BAA+B;0CAA/B,+BAA+B;yCAA/B,+BAA+B;oCAA/B,+BAA+B;mCAA/B,+BAA+B;sCAA/B,+BAA+B;kCAA/B,+BAA+B;2BAhB2B,2BAA2B;6BAA3B,2BAA2B;uCAA3B,2BAA2B;oCACxC,4BAA4B;+BAA5B,4BAA4B;0BAgBtD,sBAAsB;oCAWzC,uBAAuB;iCAAvB,uBAAuB;mCAAvB,uBAAuB;kCAAvB,uBAAuB;oCAAvB,uBAAuB;mCAAvB,uBAAuB;+BAAvB,uBAAuB;gCAAvB,uBAAuB;kCAAvB,uBAAuB"}
|
package/package.json
CHANGED
|
@@ -151,10 +151,11 @@ export const PARAMETERS = {
|
|
|
151
151
|
origin: null,
|
|
152
152
|
impacts: null,
|
|
153
153
|
},
|
|
154
|
-
//
|
|
155
|
-
//
|
|
156
|
-
//
|
|
157
|
-
//
|
|
154
|
+
// ---- Meteorological parameters (T, RH, DP and their _AMB pairs) ----
|
|
155
|
+
// JA-3058: bare ids (T/RH/DP) are enclosure-internal, for corrections and fog detection only.
|
|
156
|
+
// The _AMB ids are true ambient and the only ones safe for public display or Heat Index. Never
|
|
157
|
+
// substitute one for the other. Caveat: five suppliers still write outdoor dew point into DP;
|
|
158
|
+
// JA-3061 re-points them. See "Ambient vs internal met parameters" in CLAUDE.md before wiring up.
|
|
158
159
|
DP: {
|
|
159
160
|
id: "DP",
|
|
160
161
|
label: "Dew Point",
|
|
@@ -327,6 +328,16 @@ export const PARAMETERS = {
|
|
|
327
328
|
},
|
|
328
329
|
};
|
|
329
330
|
|
|
331
|
+
// Internal parameter id -> its ambient counterpart (JA-3058). Lets consumers filter on data
|
|
332
|
+
// instead of hardcoding the six met ids: the keys are the enclosure-internal parameters that must
|
|
333
|
+
// stay off public surfaces, the values are the ambient ones that are safe to show. Kept in sync
|
|
334
|
+
// with PARAMETERS by a test in tests/pollutants.test.js.
|
|
335
|
+
export const AMBIENT_MET_PARAMETERS = Object.freeze({
|
|
336
|
+
T: "T_AMB",
|
|
337
|
+
RH: "RH_AMB",
|
|
338
|
+
DP: "DP_AMB",
|
|
339
|
+
});
|
|
340
|
+
|
|
330
341
|
// Parameters analyzed from physical air samples in a laboratory.
|
|
331
342
|
// These correspond to SampleSites.parameters and are not measured by real-time sensors.
|
|
332
343
|
export const HEAVY_METALS = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PARAMETERS, HEAVY_METALS } from "../pollutants.js";
|
|
1
|
+
import { PARAMETERS, HEAVY_METALS, AMBIENT_MET_PARAMETERS } from "../pollutants.js";
|
|
2
2
|
|
|
3
3
|
const REQUIRED_FIELDS = ["id", "label", "name", "unit", "type"];
|
|
4
4
|
const VALID_TYPES = [
|
|
@@ -69,6 +69,28 @@ function sharedAssertions(constants) {
|
|
|
69
69
|
|
|
70
70
|
describe("PARAMETERS", () => {
|
|
71
71
|
sharedAssertions(PARAMETERS);
|
|
72
|
+
|
|
73
|
+
// JA-3060: Processing-Engine hardcodes these ids, so lock the ambient/internal pairing.
|
|
74
|
+
const ambientKeys = Object.keys(PARAMETERS).filter((key) => key.endsWith("_AMB"));
|
|
75
|
+
|
|
76
|
+
test("every met parameter has an ambient counterpart", () => {
|
|
77
|
+
expect(ambientKeys.sort()).toEqual(["DP_AMB", "RH_AMB", "T_AMB"]);
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
test("AMBIENT_MET_PARAMETERS matches the _AMB ids actually defined", () => {
|
|
81
|
+
expect(Object.values(AMBIENT_MET_PARAMETERS).sort()).toEqual(ambientKeys.sort());
|
|
82
|
+
Object.entries(AMBIENT_MET_PARAMETERS).forEach(([bare, ambient]) => {
|
|
83
|
+
expect(PARAMETERS[bare]).toBeDefined();
|
|
84
|
+
expect(ambient).toBe(`${bare}_AMB`);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
test.each(ambientKeys)("%s pairs with its bare parameter on unit and type", (key) => {
|
|
89
|
+
const bare = PARAMETERS[key.replace(/_AMB$/, "")];
|
|
90
|
+
expect(bare).toBeDefined();
|
|
91
|
+
expect(PARAMETERS[key].unit).toBe(bare.unit);
|
|
92
|
+
expect(PARAMETERS[key].type).toBe(bare.type);
|
|
93
|
+
});
|
|
72
94
|
});
|
|
73
95
|
|
|
74
96
|
describe("HEAVY_METALS", () => {
|
package/src/index.js
CHANGED
|
@@ -65,7 +65,7 @@ import {
|
|
|
65
65
|
} from "./models/changeStreamCheckpoints.js";
|
|
66
66
|
import Database from "./config/db.js"; // Import the new Database class
|
|
67
67
|
import CustomLogger from "./config/logger.js";
|
|
68
|
-
import { PARAMETERS, HEAVY_METALS } from "./constants/pollutants.js";
|
|
68
|
+
import { PARAMETERS, HEAVY_METALS, AMBIENT_MET_PARAMETERS } from "./constants/pollutants.js";
|
|
69
69
|
import { ALERT_LEVEL_WEIGHTS, getAlertWeight } from "./constants/alertLevels.js";
|
|
70
70
|
import {
|
|
71
71
|
monitorEpisodesSchema,
|
|
@@ -213,6 +213,7 @@ export {
|
|
|
213
213
|
// Pollutant constants
|
|
214
214
|
PARAMETERS,
|
|
215
215
|
HEAVY_METALS,
|
|
216
|
+
AMBIENT_MET_PARAMETERS,
|
|
216
217
|
// AQI alert-level hierarchy (single source of truth)
|
|
217
218
|
ALERT_LEVEL_WEIGHTS,
|
|
218
219
|
getAlertWeight,
|