@justair/justair-library 7.4.0-alpha.5a16ace → 7.4.0-alpha.d8ff274
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/README.md +1 -1
- package/dist/constants/pollutants.d.ts +1 -2
- package/dist/constants/pollutants.d.ts.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/constants/pollutants.js +9 -13
- package/src/constants/tests/constantsBarrel.test.js +2 -2
- package/src/constants/tests/pollutants.test.js +4 -4
- package/src/index.js +2 -8
package/README.md
CHANGED
|
@@ -107,7 +107,7 @@ The following parameters were added to `PARAMETERS` and are now included in `par
|
|
|
107
107
|
| `RH_AMB` | Ambient Relative Humidity | `%` |
|
|
108
108
|
| `DP_AMB` | Ambient Dew Point | `°F` |
|
|
109
109
|
|
|
110
|
-
These are **not** interchangeable with the bare `T` / `RH` / `DP` ids, which are enclosure-internal readings used only by correction equations and fog detection. Never fall back from one kind to the other. See "Ambient vs internal met parameters" in `CLAUDE.md` before wiring these up. `
|
|
110
|
+
These are **not** interchangeable with the bare `T` / `RH` / `DP` ids, which are enclosure-internal readings used only by correction equations and fog detection. Never fall back from one kind to the other. See "Ambient vs internal met parameters" in `CLAUDE.md` before wiring these up. `INTERNAL_TO_AMBIENT_PARAMETERS` exports the pairing as data so consumers can filter on it instead of hardcoding the six ids.
|
|
111
111
|
|
|
112
112
|
### Object shape
|
|
113
113
|
|
|
@@ -568,12 +568,11 @@ export namespace PARAMETERS {
|
|
|
568
568
|
export { impacts_31 as impacts };
|
|
569
569
|
}
|
|
570
570
|
}
|
|
571
|
-
export const
|
|
571
|
+
export const INTERNAL_TO_AMBIENT_PARAMETERS: Readonly<{
|
|
572
572
|
T: "T_AMB";
|
|
573
573
|
RH: "RH_AMB";
|
|
574
574
|
DP: "DP_AMB";
|
|
575
575
|
}>;
|
|
576
|
-
export const MET_INTERNAL_PARAMETERS_TO_HIDE: readonly string[];
|
|
577
576
|
export namespace HEAVY_METALS {
|
|
578
577
|
export namespace AS {
|
|
579
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoVA;;;;GAIG"}
|
package/dist/index.d.ts
CHANGED
|
@@ -101,8 +101,7 @@ import { validateDownloadTimezone as validateDataDownloadTimezone } from "./util
|
|
|
101
101
|
import { normalizeDownloadTimezone as normalizeDataDownloadTimezone } from "./utils/dataDownloadValidation.js";
|
|
102
102
|
import { PARAMETERS } from "./constants/pollutants.js";
|
|
103
103
|
import { HEAVY_METALS } from "./constants/pollutants.js";
|
|
104
|
-
import {
|
|
105
|
-
import { MET_INTERNAL_PARAMETERS_TO_HIDE } from "./constants/pollutants.js";
|
|
104
|
+
import { INTERNAL_TO_AMBIENT_PARAMETERS } from "./constants/pollutants.js";
|
|
106
105
|
import { ALERT_LEVEL_WEIGHTS } from "./constants/alertLevels.js";
|
|
107
106
|
import { getAlertWeight } from "./constants/alertLevels.js";
|
|
108
107
|
import { splitName } from "./utils/splitName.js";
|
|
@@ -115,5 +114,5 @@ import { validateQuietHours } from "./utils/quietHours.js";
|
|
|
115
114
|
import { getZoneMinutes } from "./utils/quietHours.js";
|
|
116
115
|
import { isInQuietWindow } from "./utils/quietHours.js";
|
|
117
116
|
import { resolveQuietHours } from "./utils/quietHours.js";
|
|
118
|
-
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, DATA_DOWNLOAD_TYPES, dataDownloadSchema, DataDownloads, AqiDataDownload, SampleDataDownload, DATA_DOWNLOAD_MAX_RANGE_DAYS, DATA_DOWNLOAD_ERRORS, validateDataDownloadDateOrder, validateDataDownloadMaxDateRange, validateDataDownloadEmail, normalizeDataDownloadEmail, validateDataDownloadTimezone, normalizeDataDownloadTimezone, PARAMETERS, HEAVY_METALS,
|
|
117
|
+
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, DATA_DOWNLOAD_TYPES, dataDownloadSchema, DataDownloads, AqiDataDownload, SampleDataDownload, DATA_DOWNLOAD_MAX_RANGE_DAYS, DATA_DOWNLOAD_ERRORS, validateDataDownloadDateOrder, validateDataDownloadMaxDateRange, validateDataDownloadEmail, normalizeDataDownloadEmail, validateDataDownloadTimezone, normalizeDataDownloadTimezone, PARAMETERS, HEAVY_METALS, INTERNAL_TO_AMBIENT_PARAMETERS, ALERT_LEVEL_WEIGHTS, getAlertWeight, splitName, DEFAULT_QUIET_HOURS, DEFAULT_TIMEZONE, QUIET_HOURS_ERRORS, isValidTimeString, isValidIANATimezone, validateQuietHours, getZoneMinutes, isInQuietWindow, resolveQuietHours };
|
|
119
118
|
//# 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":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.js"],"names":[],"mappings":"AAoJA;;;iBAEC;yBApFwB,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;4BAmCT,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;sCA5CtF,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;oCAfF,8BAA8B;mCAsD3D,2BAA2B;8BAA3B,2BAA2B;gCAA3B,2BAA2B;mCAA3B,2BAA2B;+DAsB3B,mCAAmC;qCAAnC,mCAAmC;mEAAnC,mCAAmC;yEAAnC,mCAAmC;mEAAnC,mCAAmC;qEAAnC,mCAAmC;yEAAnC,mCAAmC;2EAAnC,mCAAmC;2BA/E+B,2BAA2B;6BAA3B,2BAA2B;+CAA3B,2BAA2B;oCAChD,4BAA4B;+BAA5B,4BAA4B;0BAkBtD,sBAAsB;oCASzC,uBAAuB;iCA1BG,0BAA0B;mCA0BpD,uBAAuB;kCAAvB,uBAAuB;oCACM,qBAAqB;mCADlD,uBAAuB;+BAAvB,uBAAuB;gCAAvB,uBAAuB;kCAAvB,uBAAuB"}
|
package/package.json
CHANGED
|
@@ -329,25 +329,21 @@ export const PARAMETERS = {
|
|
|
329
329
|
},
|
|
330
330
|
};
|
|
331
331
|
|
|
332
|
-
//
|
|
333
|
-
//
|
|
334
|
-
// PARAMETERS by a test in
|
|
332
|
+
// Internal parameter id -> its ambient counterpart (JA-3058). Lets consumers filter on data
|
|
333
|
+
// instead of hardcoding the six met ids: the keys are the enclosure-internal parameters, the
|
|
334
|
+
// values are the ambient ones that are safe to show. Kept in sync with PARAMETERS by a test in
|
|
335
|
+
// tests/pollutants.test.js.
|
|
335
336
|
//
|
|
336
|
-
//
|
|
337
|
-
//
|
|
338
|
-
|
|
337
|
+
// NOTE: do not use the full key set as a suppression list yet. DP is not safe to suppress until
|
|
338
|
+
// JA-3061 lands, because five suppliers (Kunak, QuantAQ, Davis, HOBOlink, Aeroqual) still write
|
|
339
|
+
// outdoor dew point into DP and nothing writes DP_AMB. Filter public surfaces on T and RH only
|
|
340
|
+
// for now. See "Ambient vs internal met parameters" in CLAUDE.md.
|
|
341
|
+
export const INTERNAL_TO_AMBIENT_PARAMETERS = Object.freeze({
|
|
339
342
|
T: "T_AMB",
|
|
340
343
|
RH: "RH_AMB",
|
|
341
344
|
DP: "DP_AMB",
|
|
342
345
|
});
|
|
343
346
|
|
|
344
|
-
// The internal met ids that are safe to hide from public surfaces today. DP is deliberately
|
|
345
|
-
// absent: five suppliers (Kunak, QuantAQ, Davis, HOBOlink, Aeroqual) still write outdoor dew
|
|
346
|
-
// point into DP and nothing writes DP_AMB yet, so hiding DP now would drop dew point from those
|
|
347
|
-
// dashboards entirely. DP joins this list in JA-3061. See "Ambient vs internal met parameters"
|
|
348
|
-
// in CLAUDE.md.
|
|
349
|
-
export const MET_INTERNAL_PARAMETERS_TO_HIDE = Object.freeze(["T", "RH"]);
|
|
350
|
-
|
|
351
347
|
// Parameters analyzed from physical air samples in a laboratory.
|
|
352
348
|
// These correspond to SampleSites.parameters and are not measured by real-time sensors.
|
|
353
349
|
export const HEAVY_METALS = {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// importing PARAMETERS / HEAVY_METALS through the barrel must see the exact
|
|
5
5
|
// same objects as before.
|
|
6
6
|
import * as barrel from '../index.js';
|
|
7
|
-
import { PARAMETERS, HEAVY_METALS,
|
|
7
|
+
import { PARAMETERS, HEAVY_METALS, INTERNAL_TO_AMBIENT_PARAMETERS } from '../pollutants.js';
|
|
8
8
|
import { ALERT_LEVEL_WEIGHTS, getAlertWeight } from '../alertLevels.js';
|
|
9
9
|
import { DEFAULT_TIMEZONE } from '../timezones.js';
|
|
10
10
|
import { DATA_DOWNLOAD_TYPES } from '../dataDownloads.js';
|
|
@@ -12,7 +12,7 @@ import { DATA_DOWNLOAD_TYPES } from '../dataDownloads.js';
|
|
|
12
12
|
test('barrel re-exports the pollutants constants unchanged (identity, not copies)', () => {
|
|
13
13
|
expect(barrel.PARAMETERS).toBe(PARAMETERS);
|
|
14
14
|
expect(barrel.HEAVY_METALS).toBe(HEAVY_METALS);
|
|
15
|
-
expect(barrel.
|
|
15
|
+
expect(barrel.INTERNAL_TO_AMBIENT_PARAMETERS).toBe(INTERNAL_TO_AMBIENT_PARAMETERS);
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
test('barrel exports the alert-level constants', () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PARAMETERS, HEAVY_METALS,
|
|
1
|
+
import { PARAMETERS, HEAVY_METALS, INTERNAL_TO_AMBIENT_PARAMETERS } from "../pollutants.js";
|
|
2
2
|
|
|
3
3
|
const REQUIRED_FIELDS = ["id", "label", "name", "unit", "type"];
|
|
4
4
|
const VALID_TYPES = [
|
|
@@ -77,9 +77,9 @@ describe("PARAMETERS", () => {
|
|
|
77
77
|
expect(ambientKeys.sort()).toEqual(["DP_AMB", "RH_AMB", "T_AMB"]);
|
|
78
78
|
});
|
|
79
79
|
|
|
80
|
-
test("
|
|
81
|
-
expect(Object.values(
|
|
82
|
-
Object.entries(
|
|
80
|
+
test("INTERNAL_TO_AMBIENT_PARAMETERS matches the _AMB ids actually defined", () => {
|
|
81
|
+
expect(Object.values(INTERNAL_TO_AMBIENT_PARAMETERS).sort()).toEqual(ambientKeys.sort());
|
|
82
|
+
Object.entries(INTERNAL_TO_AMBIENT_PARAMETERS).forEach(([bare, ambient]) => {
|
|
83
83
|
expect(PARAMETERS[bare]).toBeDefined();
|
|
84
84
|
expect(ambient).toBe(`${bare}_AMB`);
|
|
85
85
|
});
|
package/src/index.js
CHANGED
|
@@ -65,12 +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 {
|
|
69
|
-
PARAMETERS,
|
|
70
|
-
HEAVY_METALS,
|
|
71
|
-
MET_INTERNAL_TO_AMBIENT_PARAMETERS,
|
|
72
|
-
MET_INTERNAL_PARAMETERS_TO_HIDE,
|
|
73
|
-
} from "./constants/pollutants.js";
|
|
68
|
+
import { PARAMETERS, HEAVY_METALS, INTERNAL_TO_AMBIENT_PARAMETERS } from "./constants/pollutants.js";
|
|
74
69
|
import { ALERT_LEVEL_WEIGHTS, getAlertWeight } from "./constants/alertLevels.js";
|
|
75
70
|
import { DEFAULT_TIMEZONE } from "./constants/timezones.js";
|
|
76
71
|
import { DATA_DOWNLOAD_TYPES } from "./constants/dataDownloads.js";
|
|
@@ -261,8 +256,7 @@ export {
|
|
|
261
256
|
// Pollutant constants
|
|
262
257
|
PARAMETERS,
|
|
263
258
|
HEAVY_METALS,
|
|
264
|
-
|
|
265
|
-
MET_INTERNAL_PARAMETERS_TO_HIDE,
|
|
259
|
+
INTERNAL_TO_AMBIENT_PARAMETERS,
|
|
266
260
|
// AQI alert-level hierarchy (single source of truth)
|
|
267
261
|
ALERT_LEVEL_WEIGHTS,
|
|
268
262
|
getAlertWeight,
|