@oneuptime/common 12.0.10 → 12.0.11

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 (81) hide show
  1. package/Models/DatabaseModels/NetworkDevice.ts +44 -0
  2. package/Models/DatabaseModels/NetworkDeviceLink.ts +116 -0
  3. package/Server/Infrastructure/Postgres/SchemaMigrations/1787400000000-AddDeviceRoleAndDeclaredLinkParent.ts +52 -0
  4. package/Server/Infrastructure/Postgres/SchemaMigrations/Index.ts +2 -0
  5. package/Server/Services/NetworkDeviceLinkService.ts +338 -2
  6. package/Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts +19 -5
  7. package/Server/Types/Database/JSONColumnQuery.ts +42 -4
  8. package/Server/Utils/Telemetry/InventoryEntityRegistry.ts +186 -38
  9. package/Tests/App/Dashboard/AdminNotificationRulesPage.test.tsx +420 -112
  10. package/Tests/App/Dashboard/PayAsYouGoConsentGate.test.tsx +543 -0
  11. package/Tests/App/Dashboard/PayAsYouGoFreePlan.test.ts +125 -0
  12. package/Tests/App/Dashboard/PayAsYouGoNotices.test.tsx +612 -0
  13. package/Tests/App/Dashboard/SloWidgetChartRendering.test.tsx +536 -0
  14. package/Tests/Models/AnalyticsModels/CommonModel.test.ts +312 -0
  15. package/Tests/Server/Infrastructure/Postgres/DeviceRoleAndDeclaredLinkParentMigration.test.ts +250 -0
  16. package/Tests/Server/Infrastructure/Postgres/EpisodeMemberNotifyIndexesMigration.test.ts +46 -18
  17. package/Tests/Server/Services/NetworkDeviceLinkParentValidation.test.ts +1043 -0
  18. package/Tests/Server/Types/Billing/PayAsYouGoMeteredPricing.test.ts +125 -0
  19. package/Tests/Server/Types/Database/JSONColumnQuery.test.ts +508 -0
  20. package/Tests/Server/Utils/Telemetry/InventoryEntityRegistry.test.ts +668 -0
  21. package/Tests/Types/Billing/PayAsYouGoPricing.test.ts +64 -0
  22. package/Tests/Types/CustomField/CustomFieldTypeCorrespondence.test.ts +107 -0
  23. package/Tests/Types/Monitor/MonitorType.test.ts +62 -0
  24. package/Tests/UI/Components/Charts/ChartXAxisDataKey.test.tsx +256 -0
  25. package/Tests/UI/Components/Charts/DataPointUtil.test.ts +323 -0
  26. package/Tests/UI/Components/ModelTable/CustomFieldColumns.test.tsx +349 -1
  27. package/Tests/Utils/Monitor/NetworkDeviceRoleUtil.test.ts +502 -0
  28. package/Tests/Utils/Monitor/NetworkTopologyDeclaredHierarchy.test.ts +759 -0
  29. package/Tests/Utils/Schema/BaseSchema.test.ts +651 -0
  30. package/Types/Billing/PayAsYouGoPricing.ts +47 -0
  31. package/Types/CustomField/CustomFieldType.ts +28 -0
  32. package/Types/Monitor/MonitorType.ts +11 -0
  33. package/Types/Monitor/SnmpMonitor/NetworkTopology.ts +13 -0
  34. package/UI/Components/Charts/Area/AreaChart.tsx +4 -2
  35. package/UI/Components/Charts/Bar/BarChart.tsx +4 -2
  36. package/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.ts +13 -0
  37. package/UI/Components/Charts/Line/LineChart.tsx +4 -2
  38. package/UI/Components/Charts/Types/XAxis/XAxis.ts +6 -0
  39. package/UI/Components/Charts/Utils/DataPoint.ts +15 -12
  40. package/UI/Components/ModelTable/CustomFieldColumns.tsx +55 -0
  41. package/Utils/Monitor/NetworkDeviceRoleUtil.ts +45 -0
  42. package/Utils/Monitor/NetworkTopologyUtil.ts +42 -2
  43. package/build/dist/Models/DatabaseModels/NetworkDevice.js +45 -0
  44. package/build/dist/Models/DatabaseModels/NetworkDevice.js.map +1 -1
  45. package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js +115 -0
  46. package/build/dist/Models/DatabaseModels/NetworkDeviceLink.js.map +1 -1
  47. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787400000000-AddDeviceRoleAndDeclaredLinkParent.js +33 -0
  48. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/1787400000000-AddDeviceRoleAndDeclaredLinkParent.js.map +1 -0
  49. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js +2 -0
  50. package/build/dist/Server/Infrastructure/Postgres/SchemaMigrations/Index.js.map +1 -1
  51. package/build/dist/Server/Services/NetworkDeviceLinkService.js +253 -1
  52. package/build/dist/Server/Services/NetworkDeviceLinkService.js.map +1 -1
  53. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js +12 -5
  54. package/build/dist/Server/Types/Billing/MeteredPlan/AllMeteredPlans.js.map +1 -1
  55. package/build/dist/Server/Types/Database/JSONColumnQuery.js +40 -4
  56. package/build/dist/Server/Types/Database/JSONColumnQuery.js.map +1 -1
  57. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js +128 -35
  58. package/build/dist/Server/Utils/Telemetry/InventoryEntityRegistry.js.map +1 -1
  59. package/build/dist/Types/Billing/PayAsYouGoPricing.js +41 -0
  60. package/build/dist/Types/Billing/PayAsYouGoPricing.js.map +1 -0
  61. package/build/dist/Types/CustomField/CustomFieldType.js +26 -0
  62. package/build/dist/Types/CustomField/CustomFieldType.js.map +1 -1
  63. package/build/dist/Types/Monitor/MonitorType.js +10 -0
  64. package/build/dist/Types/Monitor/MonitorType.js.map +1 -1
  65. package/build/dist/UI/Components/Charts/Area/AreaChart.js +2 -1
  66. package/build/dist/UI/Components/Charts/Area/AreaChart.js.map +1 -1
  67. package/build/dist/UI/Components/Charts/Bar/BarChart.js +2 -1
  68. package/build/dist/UI/Components/Charts/Bar/BarChart.js.map +1 -1
  69. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js +12 -0
  70. package/build/dist/UI/Components/Charts/ChartLibrary/Types/ChartDataPoint.js.map +1 -1
  71. package/build/dist/UI/Components/Charts/Line/LineChart.js +2 -1
  72. package/build/dist/UI/Components/Charts/Line/LineChart.js.map +1 -1
  73. package/build/dist/UI/Components/Charts/Utils/DataPoint.js +17 -10
  74. package/build/dist/UI/Components/Charts/Utils/DataPoint.js.map +1 -1
  75. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js +42 -0
  76. package/build/dist/UI/Components/ModelTable/CustomFieldColumns.js.map +1 -1
  77. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js +37 -0
  78. package/build/dist/Utils/Monitor/NetworkDeviceRoleUtil.js.map +1 -1
  79. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js +25 -3
  80. package/build/dist/Utils/Monitor/NetworkTopologyUtil.js.map +1 -1
  81. package/package.json +1 -1
@@ -12,16 +12,92 @@ import Model from "../../Models/DatabaseModels/NetworkDeviceLink";
12
12
  import NetworkDeviceService from "./NetworkDeviceService";
13
13
  import CaptureSpan from "../Utils/Telemetry/CaptureSpan";
14
14
  import BadDataException from "../../Types/Exception/BadDataException";
15
+ import ObjectID from "../../Types/ObjectID";
15
16
  import QueryHelper from "../Types/Database/QueryHelper";
16
17
  import RelationIdUtil from "../Utils/Database/RelationIdUtil";
17
18
  import LIMIT_MAX from "../../Types/Database/LimitMax";
18
19
  // Both spellings of each end, for the same reason RelationIdUtil exists.
19
20
  const FROM_DEVICE_KEYS = ["fromDeviceId", "fromDevice"];
20
21
  const TO_DEVICE_KEYS = ["toDeviceId", "toDevice"];
22
+ const PARENT_DEVICE_KEYS = ["parentDeviceId", "parentDevice"];
23
+ /*
24
+ * A device id, compared the way Postgres compares it.
25
+ *
26
+ * These columns are `uuid`. Postgres normalises and matches them without
27
+ * regard to case, and ObjectID.isValidUUID accepts either case, so an API
28
+ * client may legitimately send `AAAAAAAA-...` for a row stored as
29
+ * `aaaaaaaa-...`. A raw JS !== between the two says "different device" and
30
+ * refuses a parent that is in fact an end of the link. Note that the
31
+ * device-existence check below cannot disagree: it runs in Postgres.
32
+ */
33
+ const sameDeviceId = (a, b) => {
34
+ return a.toString().toLowerCase() === b.toString().toLowerCase();
35
+ };
36
+ /*
37
+ * A declared parent has to be one of the two devices the link connects.
38
+ * Anything else is not a statement about this link at all, and the map
39
+ * would silently ignore it — the operator would have declared a hierarchy
40
+ * and watched nothing change.
41
+ */
42
+ const assertParentIsAnEnd = (parentDeviceId, fromDeviceId, toDeviceId) => {
43
+ if (!parentDeviceId) {
44
+ return;
45
+ }
46
+ if (!sameDeviceId(parentDeviceId, fromDeviceId) &&
47
+ !sameDeviceId(parentDeviceId, toDeviceId)) {
48
+ throw new BadDataException("The parent device must be one of the two devices this link connects.");
49
+ }
50
+ };
51
+ /*
52
+ * Which of `keys` the payload actually WRITES.
53
+ *
54
+ * Not the same question as which keys are present. TypeORM drops
55
+ * undefined-valued keys before it builds the SET list — "it doesn't make
56
+ * sense to update undefined properties" — so a key holding undefined
57
+ * changes nothing in the database. Treating it as a write makes this hook
58
+ * validate a row that is never going to exist: model the parent as
59
+ * cleared, accept the write, and leave the stored parent stranded on a
60
+ * link whose end just moved. Null and "" are different and really do
61
+ * clear the column, which is why the test is against undefined alone.
62
+ */
63
+ const writtenKeys = (data, keys) => {
64
+ return keys.filter((key) => {
65
+ return key in data && data[key] !== undefined;
66
+ });
67
+ };
68
+ /*
69
+ * An update payload is a QueryDeepPartialEntity, so a column may hold a
70
+ * raw SQL-expression function instead of a value. RelationIdUtil reads one
71
+ * as null — indistinguishable from "cleared" — and the whole invariant is
72
+ * then checked against a row that bears no relation to what will be
73
+ * written. Nothing in the tree writes this model that way today; refusing
74
+ * is what keeps that true, and a caller who needs it can resolve the id
75
+ * before calling rather than have it silently mis-validated.
76
+ */
77
+ const assertNoSqlExpression = (data, keys) => {
78
+ for (const key of keys) {
79
+ if (typeof data[key] === "function") {
80
+ throw new BadDataException(`${key} cannot be set to a raw SQL expression on a network device link — the link's ends and its declared parent have to be checked against each other, which needs actual ids.`);
81
+ }
82
+ }
83
+ };
21
84
  export class Service extends DatabaseService {
22
85
  constructor() {
23
86
  super(Model);
24
87
  }
88
+ /*
89
+ * onBeforeUpdate runs before DatabaseService permission-checks the query,
90
+ * so reading the raw client query as root would hand the hook rows from
91
+ * other projects. Re-apply the caller's tenant here. (Same helper as
92
+ * NetworkDeviceService and NetworkSiteService — private per service,
93
+ * which is the shape the codebase already settled on.)
94
+ */
95
+ scopeQueryToCallerTenant(query, props) {
96
+ if (props.isRoot || !props.tenantId) {
97
+ return query;
98
+ }
99
+ return Object.assign(Object.assign({}, query), { projectId: props.tenantId });
100
+ }
25
101
  /*
26
102
  * Two guards, both about links that would be nonsense on the map:
27
103
  *
@@ -34,12 +110,17 @@ export class Service extends DatabaseService {
34
110
  */
35
111
  async onBeforeCreate(createBy) {
36
112
  const data = createBy.data;
113
+ assertNoSqlExpression(data, [
114
+ ...FROM_DEVICE_KEYS,
115
+ ...TO_DEVICE_KEYS,
116
+ ...PARENT_DEVICE_KEYS,
117
+ ]);
37
118
  const fromDeviceId = RelationIdUtil.read(data, FROM_DEVICE_KEYS);
38
119
  const toDeviceId = RelationIdUtil.read(data, TO_DEVICE_KEYS);
39
120
  if (!fromDeviceId || !toDeviceId) {
40
121
  throw new BadDataException("A link needs a device at each end.");
41
122
  }
42
- if (fromDeviceId.toString() === toDeviceId.toString()) {
123
+ if (sameDeviceId(fromDeviceId, toDeviceId)) {
43
124
  throw new BadDataException("A device cannot be linked to itself.");
44
125
  }
45
126
  if (!createBy.data.projectId) {
@@ -58,8 +139,173 @@ export class Service extends DatabaseService {
58
139
  if (devices.length !== 2) {
59
140
  throw new BadDataException("Both devices must exist and belong to this project.");
60
141
  }
142
+ assertParentIsAnEnd(RelationIdUtil.read(data, PARENT_DEVICE_KEYS), fromDeviceId, toDeviceId);
61
143
  return { createBy, carryForward: null };
62
144
  }
145
+ /*
146
+ * The same invariant, on the other write path.
147
+ *
148
+ * An update can break it two ways, and only one of them is obvious. The
149
+ * obvious one is setting a parent that is not on the link. The other is
150
+ * moving an END: re-point `toDevice` at a different switch and a parent
151
+ * that was valid a moment ago now names a device the link no longer
152
+ * touches. So the post-update state is what gets checked, assembled from
153
+ * the payload where it says something and from the stored row where it
154
+ * does not.
155
+ *
156
+ * An update matches a QUERY, not one row, and each matched row may have
157
+ * different ends — so every one of them is validated, and one bad row
158
+ * rejects the whole write. That is the conservative direction: a partial
159
+ * update that fixed some rows and left others contradicting themselves
160
+ * would be far harder to notice than a refusal.
161
+ *
162
+ * It also re-runs onBeforeCreate's TENANCY check on any end that moves.
163
+ * That check used to exist only on create, which left the update path
164
+ * able to re-point an end at another project's device — the exact threat
165
+ * onBeforeCreate's own comment describes, since the FK is global and the
166
+ * column is member-writable.
167
+ *
168
+ * Only costs a read when the payload touches an end or the parent at all;
169
+ * an update of ports or the bound monitor takes the early return.
170
+ */
171
+ async onBeforeUpdate(updateBy) {
172
+ const data = (updateBy.data ||
173
+ {});
174
+ const hierarchyKeys = [
175
+ ...FROM_DEVICE_KEYS,
176
+ ...TO_DEVICE_KEYS,
177
+ ...PARENT_DEVICE_KEYS,
178
+ ];
179
+ if (writtenKeys(data, hierarchyKeys).length === 0) {
180
+ return { updateBy, carryForward: null };
181
+ }
182
+ assertNoSqlExpression(data, hierarchyKeys);
183
+ const writtenFromDeviceId = RelationIdUtil.read(data, FROM_DEVICE_KEYS);
184
+ const writtenToDeviceId = RelationIdUtil.read(data, TO_DEVICE_KEYS);
185
+ const writtenParentDeviceId = RelationIdUtil.read(data, PARENT_DEVICE_KEYS);
186
+ /*
187
+ * Writing the parent key with an empty value is how a hierarchy is
188
+ * cleared back to a peer link. RelationIdUtil reads that as null, which
189
+ * is indistinguishable from "not written" — so the presence of the key
190
+ * (with a value that will actually be written; see writtenKeys), not
191
+ * the truthiness of its value, is what decides whether the stored
192
+ * parent still applies.
193
+ */
194
+ const isParentWritten = writtenKeys(data, PARENT_DEVICE_KEYS).length > 0;
195
+ const existingLinks = await this.findBy({
196
+ query: this.scopeQueryToCallerTenant(updateBy.query, updateBy.props),
197
+ select: {
198
+ _id: true,
199
+ projectId: true,
200
+ fromDeviceId: true,
201
+ toDeviceId: true,
202
+ parentDeviceId: true,
203
+ },
204
+ limit: LIMIT_MAX,
205
+ skip: 0,
206
+ props: {
207
+ isRoot: true,
208
+ },
209
+ });
210
+ /*
211
+ * An end that MOVED has to be re-checked for tenancy, exactly as
212
+ * onBeforeCreate checks it. The FK only requires the device row to
213
+ * exist — it is global — so without this a project member could
214
+ * re-point an end of their own link at another project's device and
215
+ * read its name straight off the map, which is the threat
216
+ * onBeforeCreate's own comment describes. The declared parent inherits
217
+ * the check for free: it has to be one of the two ends.
218
+ *
219
+ * Grouped by project because an update may in principle match links in
220
+ * more than one, and a device is only legitimate within its own.
221
+ */
222
+ /*
223
+ * Deduped: writing the same id to both ends is a self-link, and that
224
+ * has its own error below — it must not surface as "device not found".
225
+ */
226
+ const movedEndIds = [
227
+ ...new Set([writtenFromDeviceId, writtenToDeviceId]
228
+ .filter((id) => {
229
+ return Boolean(id);
230
+ })
231
+ .map((id) => {
232
+ return id.toString();
233
+ })),
234
+ ];
235
+ if (movedEndIds.length > 0 && existingLinks.length > 0) {
236
+ /*
237
+ * Every project this write touches: the caller's own tenant, plus
238
+ * the project of each row the query matched (a root caller has no
239
+ * tenant, and only root can match rows across more than one). The
240
+ * new end has to be legitimate in all of them.
241
+ *
242
+ * Guarded on there being matched rows at all: a query that matched
243
+ * nothing writes nothing, and there is no link for a foreign device
244
+ * to end up attached to.
245
+ */
246
+ const projectIds = new Set();
247
+ if (updateBy.props.tenantId) {
248
+ projectIds.add(updateBy.props.tenantId.toString());
249
+ }
250
+ for (const link of existingLinks) {
251
+ if (link.projectId) {
252
+ projectIds.add(link.projectId.toString());
253
+ }
254
+ }
255
+ /*
256
+ * Fail closed. No project to check against and an end on the move
257
+ * is not a safe update to wave through — it is the one shape where
258
+ * a device from anywhere could be attached to this link.
259
+ */
260
+ if (projectIds.size === 0) {
261
+ throw new BadDataException("Both devices must exist and belong to this project.");
262
+ }
263
+ for (const projectId of projectIds) {
264
+ const devices = await NetworkDeviceService.findBy({
265
+ query: {
266
+ _id: QueryHelper.any(movedEndIds),
267
+ projectId: new ObjectID(projectId),
268
+ },
269
+ select: { _id: true },
270
+ limit: LIMIT_MAX,
271
+ skip: 0,
272
+ props: { isRoot: true },
273
+ });
274
+ /*
275
+ * Compared as a SET of ids rather than as a count. A count says
276
+ * "as many rows came back as I asked about", which a duplicate row
277
+ * satisfies just as well as the right rows do — and this is the
278
+ * check standing between one project's map and another project's
279
+ * device names, so it should be answering the actual question.
280
+ */
281
+ const foundIds = new Set(devices.map((device) => {
282
+ return (device.id || device._id || "").toString().toLowerCase();
283
+ }));
284
+ const isMissingAnEnd = movedEndIds.some((id) => {
285
+ return !foundIds.has(id.toLowerCase());
286
+ });
287
+ if (isMissingAnEnd) {
288
+ throw new BadDataException("Both devices must exist and belong to this project.");
289
+ }
290
+ }
291
+ }
292
+ for (const link of existingLinks) {
293
+ const fromDeviceId = writtenFromDeviceId || link.fromDeviceId;
294
+ const toDeviceId = writtenToDeviceId || link.toDeviceId;
295
+ const parentDeviceId = isParentWritten
296
+ ? writtenParentDeviceId
297
+ : link.parentDeviceId || null;
298
+ // A row mid-migration with a missing end has no invariant to check.
299
+ if (!fromDeviceId || !toDeviceId) {
300
+ continue;
301
+ }
302
+ if (sameDeviceId(fromDeviceId, toDeviceId)) {
303
+ throw new BadDataException("A device cannot be linked to itself.");
304
+ }
305
+ assertParentIsAnEnd(parentDeviceId, fromDeviceId, toDeviceId);
306
+ }
307
+ return { updateBy, carryForward: null };
308
+ }
63
309
  }
64
310
  __decorate([
65
311
  CaptureSpan(),
@@ -67,5 +313,11 @@ __decorate([
67
313
  __metadata("design:paramtypes", [Object]),
68
314
  __metadata("design:returntype", Promise)
69
315
  ], Service.prototype, "onBeforeCreate", null);
316
+ __decorate([
317
+ CaptureSpan(),
318
+ __metadata("design:type", Function),
319
+ __metadata("design:paramtypes", [Object]),
320
+ __metadata("design:returntype", Promise)
321
+ ], Service.prototype, "onBeforeUpdate", null);
70
322
  export default new Service();
71
323
  //# sourceMappingURL=NetworkDeviceLinkService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkDeviceLinkService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkDeviceLinkService.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,MAAM,+CAA+C,CAAC;AAClE,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAI1D,OAAO,WAAW,MAAM,gCAAgC,CAAC;AACzD,OAAO,gBAAgB,MAAM,wCAAwC,CAAC;AAEtE,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,SAAS,MAAM,+BAA+B,CAAC;AAEtD,yEAAyE;AACzE,MAAM,gBAAgB,GAAkB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACvE,MAAM,cAAc,GAAkB,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEjE,MAAM,OAAO,OAAQ,SAAQ,eAAsB;IACjD;QACE,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IAEsB,AAAN,KAAK,CAAC,cAAc,CACrC,QAAyB;QAEzB,MAAM,IAAI,GAA4B,QAAQ,CAAC,IAG9C,CAAC;QAEF,MAAM,YAAY,GAAoB,cAAc,CAAC,IAAI,CACvD,IAAI,EACJ,gBAAgB,CACjB,CAAC;QACF,MAAM,UAAU,GAAoB,cAAc,CAAC,IAAI,CACrD,IAAI,EACJ,cAAc,CACf,CAAC;QAEF,IAAI,CAAC,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,gBAAgB,CAAC,oCAAoC,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,YAAY,CAAC,QAAQ,EAAE,KAAK,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC;YACtD,MAAM,IAAI,gBAAgB,CAAC,sCAAsC,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,gBAAgB,CAAC,yBAAyB,CAAC,CAAC;QACxD,CAAC;QAED,MAAM,OAAO,GAAyB,MAAM,oBAAoB,CAAC,MAAM,CAAC;YACtE,KAAK,EAAE;gBACL,GAAG,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtE,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,SAAS;aACnC;YACD,MAAM,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;SACxB,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,gBAAgB,CACxB,qDAAqD,CACtD,CAAC;QACJ,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;CACF;AAhD0B;IADxB,WAAW,EAAE;;;;6CAgDb;AAGH,eAAe,IAAI,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"NetworkDeviceLinkService.js","sourceRoot":"","sources":["../../../../Server/Services/NetworkDeviceLinkService.ts"],"names":[],"mappings":"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"}
@@ -13,22 +13,29 @@ import ServerMeteredPlan from "./ServerMeteredPlan";
13
13
  import TelemetryMeteredPlanType from "./TelemetryMeteredPlan";
14
14
  import BadDataException from "../../../../Types/Exception/BadDataException";
15
15
  import ProductType from "../../../../Types/MeteredPlan/ProductType";
16
+ import { SESSION_REPLAY_PRICE_IN_USD_PER_GB, TELEMETRY_PRICE_IN_USD_PER_GB, TELEMETRY_PRICE_RETENTION_IN_DAYS, } from "../../../../Types/Billing/PayAsYouGoPricing";
17
+ /*
18
+ * Per GB per day, derived from the advertised per-GB-per-15-days rate so the
19
+ * price the dashboard quotes a Free plan user and the price we actually meter
20
+ * cannot drift apart.
21
+ */
22
+ const TELEMETRY_UNIT_COST_IN_USD = TELEMETRY_PRICE_IN_USD_PER_GB / TELEMETRY_PRICE_RETENTION_IN_DAYS;
16
23
  export const ActiveMonitoringMeteredPlan = new ActiveMonitoringMeteredPlanType();
17
24
  export const LogDataIngestMeteredPlan = new TelemetryMeteredPlanType({
18
25
  productType: ProductType.Logs,
19
- unitCostInUSD: 0.1 / 15, // 0.10 per 15 days per GB
26
+ unitCostInUSD: TELEMETRY_UNIT_COST_IN_USD, // 0.10 per 15 days per GB
20
27
  });
21
28
  export const MetricsDataIngestMeteredPlan = new TelemetryMeteredPlanType({
22
29
  productType: ProductType.Metrics,
23
- unitCostInUSD: 0.1 / 15, // 0.10 per 15 days per GB
30
+ unitCostInUSD: TELEMETRY_UNIT_COST_IN_USD, // 0.10 per 15 days per GB
24
31
  });
25
32
  export const TracesDataIngestMetredPlan = new TelemetryMeteredPlanType({
26
33
  productType: ProductType.Traces,
27
- unitCostInUSD: 0.1 / 15, // 0.10 per 15 days per GB
34
+ unitCostInUSD: TELEMETRY_UNIT_COST_IN_USD, // 0.10 per 15 days per GB
28
35
  });
29
36
  export const ProfilesDataIngestMeteredPlan = new TelemetryMeteredPlanType({
30
37
  productType: ProductType.Profiles,
31
- unitCostInUSD: 0.1 / 15, // 0.10 per 15 days per GB
38
+ unitCostInUSD: TELEMETRY_UNIT_COST_IN_USD, // 0.10 per 15 days per GB
32
39
  });
33
40
  /*
34
41
  * Session replay is priced above the other pillars on purpose.
@@ -40,7 +47,7 @@ export const ProfilesDataIngestMeteredPlan = new TelemetryMeteredPlanType({
40
47
  */
41
48
  export const SessionReplayDataIngestMeteredPlan = new TelemetryMeteredPlanType({
42
49
  productType: ProductType.SessionReplay,
43
- unitCostInUSD: 2.0 / 15, // 2.00 per 15 days per GB
50
+ unitCostInUSD: SESSION_REPLAY_PRICE_IN_USD_PER_GB / TELEMETRY_PRICE_RETENTION_IN_DAYS, // 2.00 per 15 days per GB
44
51
  });
45
52
  const AllMeteredPlans = [
46
53
  ActiveMonitoringMeteredPlan,
@@ -1 +1 @@
1
- {"version":3,"file":"AllMeteredPlans.js","sourceRoot":"","sources":["../../../../../../Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,+BAA+B,MAAM,+BAA+B,CAAC;AAC5E,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,wBAAwB,MAAM,wBAAwB,CAAC;AAC9D,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAC5E,OAAO,WAAW,MAAM,2CAA2C,CAAC;AAEpE,MAAM,CAAC,MAAM,2BAA2B,GACtC,IAAI,+BAA+B,EAAE,CAAC;AAExC,MAAM,CAAC,MAAM,wBAAwB,GACnC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE,0BAA0B;CACpD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,4BAA4B,GACvC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,OAAO;IAChC,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE,0BAA0B;CACpD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,0BAA0B,GACrC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE,0BAA0B;CACpD,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,6BAA6B,GACxC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,QAAQ;IACjC,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE,0BAA0B;CACpD,CAAC,CAAC;AAEL;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAC7C,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,aAAa;IACtC,aAAa,EAAE,GAAG,GAAG,EAAE,EAAE,0BAA0B;CACpD,CAAC,CAAC;AAEL,MAAM,eAAe,GAA6B;IAChD,2BAA2B;IAC3B,wBAAwB;IACxB,4BAA4B;IAC5B,0BAA0B;IAC1B,6BAA6B;IAC7B,kCAAkC;CACnC,CAAC;AAEF,MAAM,OAAO,eAAe;IAEZ,AAAP,MAAM,CAAC,2BAA2B,CACvC,WAAwB;QAExB,IAAI,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,wBAAwB,CAAC;QAClC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,4BAA4B,CAAC;QACtC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,0BAA0B,CAAC;QACpC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,6BAA6B,CAAC;QACvC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,kCAAkC,CAAC;QAC5C,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACxD,OAAO,2BAA2B,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;CACF;AAnBe;IADb,WAAW,EAAE;;;oCAGX,iBAAiB;wDAgBnB;AAGH,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"AllMeteredPlans.js","sourceRoot":"","sources":["../../../../../../Server/Types/Billing/MeteredPlan/AllMeteredPlans.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,WAAW,MAAM,sCAAsC,CAAC;AAC/D,OAAO,+BAA+B,MAAM,+BAA+B,CAAC;AAC5E,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,wBAAwB,MAAM,wBAAwB,CAAC;AAC9D,OAAO,gBAAgB,MAAM,8CAA8C,CAAC;AAC5E,OAAO,WAAW,MAAM,2CAA2C,CAAC;AACpE,OAAO,EACL,kCAAkC,EAClC,6BAA6B,EAC7B,iCAAiC,GAClC,MAAM,6CAA6C,CAAC;AAErD;;;;GAIG;AACH,MAAM,0BAA0B,GAC9B,6BAA6B,GAAG,iCAAiC,CAAC;AAEpE,MAAM,CAAC,MAAM,2BAA2B,GACtC,IAAI,+BAA+B,EAAE,CAAC;AAExC,MAAM,CAAC,MAAM,wBAAwB,GACnC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,IAAI;IAC7B,aAAa,EAAE,0BAA0B,EAAE,0BAA0B;CACtE,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,4BAA4B,GACvC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,OAAO;IAChC,aAAa,EAAE,0BAA0B,EAAE,0BAA0B;CACtE,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,0BAA0B,GACrC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,MAAM;IAC/B,aAAa,EAAE,0BAA0B,EAAE,0BAA0B;CACtE,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,6BAA6B,GACxC,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,QAAQ;IACjC,aAAa,EAAE,0BAA0B,EAAE,0BAA0B;CACtE,CAAC,CAAC;AAEL;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAC7C,IAAI,wBAAwB,CAAC;IAC3B,WAAW,EAAE,WAAW,CAAC,aAAa;IACtC,aAAa,EACX,kCAAkC,GAAG,iCAAiC,EAAE,0BAA0B;CACrG,CAAC,CAAC;AAEL,MAAM,eAAe,GAA6B;IAChD,2BAA2B;IAC3B,wBAAwB;IACxB,4BAA4B;IAC5B,0BAA0B;IAC1B,6BAA6B;IAC7B,kCAAkC;CACnC,CAAC;AAEF,MAAM,OAAO,eAAe;IAEZ,AAAP,MAAM,CAAC,2BAA2B,CACvC,WAAwB;QAExB,IAAI,WAAW,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YACrC,OAAO,wBAAwB,CAAC;QAClC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,4BAA4B,CAAC;QACtC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;YAC9C,OAAO,0BAA0B,CAAC;QACpC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YAChD,OAAO,6BAA6B,CAAC;QACvC,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,aAAa,EAAE,CAAC;YACrD,OAAO,kCAAkC,CAAC;QAC5C,CAAC;aAAM,IAAI,WAAW,KAAK,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACxD,OAAO,2BAA2B,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,gBAAgB,CAAC,wBAAwB,WAAW,EAAE,CAAC,CAAC;IACpE,CAAC;CACF;AAnBe;IADb,WAAW,EAAE;;;oCAGX,iBAAiB;wDAgBnB;AAGH,eAAe,eAAe,CAAC"}
@@ -60,6 +60,17 @@ const toScalar = (value) => {
60
60
  if (value instanceof ObjectID) {
61
61
  return value.toString();
62
62
  }
63
+ /*
64
+ * A Date only reaches here from a query built server-side: one that arrived
65
+ * over HTTP has already been through JSON, which renders a Date as its ISO
66
+ * string. Both paths must produce the same text, because the ordering
67
+ * comparisons below are lexicographic and only ISO-8601 makes that
68
+ * chronological. The `String(value)` fallback would yield
69
+ * "Sun Aug 17 2026 00:00:00 GMT+0000", which sorts by weekday name.
70
+ */
71
+ if (value instanceof Date) {
72
+ return value.toISOString();
73
+ }
63
74
  if (value === null || value === undefined) {
64
75
  return "";
65
76
  }
@@ -174,6 +185,31 @@ class KeyPredicateBuilder {
174
185
  return `(${accessor.asText} ${operator} CAST(${parameter} AS TEXT))`;
175
186
  };
176
187
  }
188
+ /**
189
+ * An ordering comparison against a value whose type we only learn at runtime.
190
+ *
191
+ * A jsonb key holds whatever the project put there, so `>` has two readings.
192
+ * Numbers compare numerically — "10" must be greater than "9", which text
193
+ * comparison gets backwards. Everything else compares as text, and the case
194
+ * that matters is a date: custom field dates are stored as ISO-8601 strings,
195
+ * and ISO-8601 is designed so that lexicographic order IS chronological
196
+ * order, so `>=` over the raw text is already the right question.
197
+ *
198
+ * Routing dates through compareNumeric — which is what these operators used
199
+ * to do unconditionally — was silently wrong rather than loudly wrong.
200
+ * `Number("2026-08-17T00:00:00.000Z")` is NaN, so the bound parameter became
201
+ * `CAST(NaN AS NUMERIC)`, and `numericExpression` independently returns NULL
202
+ * for text that does not look like a number. The predicate was therefore
203
+ * `NULL > NaN` on every row: no error, no rows, and a lit filter chip over an
204
+ * empty table.
205
+ *
206
+ * InBetween has always branched this way; these four now agree with it.
207
+ */
208
+ compareOrdered(operator, value) {
209
+ return isNumericValue(toScalar(value))
210
+ ? this.compareNumeric(operator, value)
211
+ : this.compareText(operator, value);
212
+ }
177
213
  /**
178
214
  * "No value here" — the key is absent, explicitly JSON null, an empty
179
215
  * string, or an empty array. A multi-select cleared in the UI leaves `[]`
@@ -282,16 +318,16 @@ class KeyPredicateBuilder {
282
318
  return this.join([this.compareNumeric("<=", value.value), this.isEmpty()], "OR");
283
319
  }
284
320
  if (value instanceof GreaterThanOrEqual) {
285
- return this.compareNumeric(">=", value.value);
321
+ return this.compareOrdered(">=", value.value);
286
322
  }
287
323
  if (value instanceof GreaterThan) {
288
- return this.compareNumeric(">", value.value);
324
+ return this.compareOrdered(">", value.value);
289
325
  }
290
326
  if (value instanceof LessThanOrEqual) {
291
- return this.compareNumeric("<=", value.value);
327
+ return this.compareOrdered("<=", value.value);
292
328
  }
293
329
  if (value instanceof LessThan) {
294
- return this.compareNumeric("<", value.value);
330
+ return this.compareOrdered("<", value.value);
295
331
  }
296
332
  /*
297
333
  * A bare array reads as "is any of" — the same meaning QueryUtil gives a
@@ -1 +1 @@
1
- {"version":3,"file":"JSONColumnQuery.js","sourceRoot":"","sources":["../../../../../Server/Types/Database/JSONColumnQuery.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"JSONColumnQuery.js","sourceRoot":"","sources":["../../../../../Server/Types/Database/JSONColumnQuery.ts"],"names":[],"mappings":"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"}