@meyicloud/meyi-insight-server 1.0.8 → 1.1.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 (67) hide show
  1. package/dist/constants/incidentCategories.d.ts +38 -9
  2. package/dist/constants/incidentCategories.d.ts.map +1 -1
  3. package/dist/constants/incidentCategories.js +70 -10
  4. package/dist/constants/incidentCategories.js.map +1 -1
  5. package/dist/controllers/incident.controller.d.ts.map +1 -1
  6. package/dist/controllers/incident.controller.js +10 -1
  7. package/dist/controllers/incident.controller.js.map +1 -1
  8. package/dist/database/schema.d.ts +114 -1
  9. package/dist/database/schema.d.ts.map +1 -1
  10. package/dist/database/schema.js +22 -3
  11. package/dist/database/schema.js.map +1 -1
  12. package/dist/features/sla/domain/sla.defaults.d.ts +9 -5
  13. package/dist/features/sla/domain/sla.defaults.d.ts.map +1 -1
  14. package/dist/features/sla/domain/sla.defaults.js +24 -9
  15. package/dist/features/sla/domain/sla.defaults.js.map +1 -1
  16. package/dist/features/sla/domain/sla.evaluator.d.ts +22 -2
  17. package/dist/features/sla/domain/sla.evaluator.d.ts.map +1 -1
  18. package/dist/features/sla/domain/sla.evaluator.js +24 -3
  19. package/dist/features/sla/domain/sla.evaluator.js.map +1 -1
  20. package/dist/features/sla/domain/sla.resolver.d.ts +41 -9
  21. package/dist/features/sla/domain/sla.resolver.d.ts.map +1 -1
  22. package/dist/features/sla/domain/sla.resolver.js +91 -23
  23. package/dist/features/sla/domain/sla.resolver.js.map +1 -1
  24. package/dist/features/sla/domain/sla.types.d.ts +32 -11
  25. package/dist/features/sla/domain/sla.types.d.ts.map +1 -1
  26. package/dist/features/sla/domain/sla.types.js +1 -0
  27. package/dist/features/sla/domain/sla.types.js.map +1 -1
  28. package/dist/features/sla/sla-policy.model.d.ts +10 -3
  29. package/dist/features/sla/sla-policy.model.d.ts.map +1 -1
  30. package/dist/features/sla/sla-policy.model.js +23 -9
  31. package/dist/features/sla/sla-policy.model.js.map +1 -1
  32. package/dist/features/sla/sla-policy.service.d.ts +12 -3
  33. package/dist/features/sla/sla-policy.service.d.ts.map +1 -1
  34. package/dist/features/sla/sla-policy.service.js +50 -13
  35. package/dist/features/sla/sla-policy.service.js.map +1 -1
  36. package/dist/features/sla/sla.schema.d.ts +70 -5
  37. package/dist/features/sla/sla.schema.d.ts.map +1 -1
  38. package/dist/features/sla/sla.schema.js +20 -3
  39. package/dist/features/sla/sla.schema.js.map +1 -1
  40. package/dist/index.d.ts +3 -1
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +2 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/migrations/run.d.ts.map +1 -1
  45. package/dist/migrations/run.js +137 -7
  46. package/dist/migrations/run.js.map +1 -1
  47. package/dist/models/incident.model.d.ts +44 -2
  48. package/dist/models/incident.model.d.ts.map +1 -1
  49. package/dist/models/incident.model.js +121 -21
  50. package/dist/models/incident.model.js.map +1 -1
  51. package/dist/server.d.ts +2 -0
  52. package/dist/server.d.ts.map +1 -1
  53. package/dist/server.js +2 -1
  54. package/dist/server.js.map +1 -1
  55. package/dist/service.d.ts +26 -2
  56. package/dist/service.d.ts.map +1 -1
  57. package/dist/service.js +13 -1
  58. package/dist/service.js.map +1 -1
  59. package/dist/services/incident.service.d.ts +42 -2
  60. package/dist/services/incident.service.d.ts.map +1 -1
  61. package/dist/services/incident.service.js +95 -13
  62. package/dist/services/incident.service.js.map +1 -1
  63. package/dist/services/retention.service.d.ts +63 -0
  64. package/dist/services/retention.service.d.ts.map +1 -0
  65. package/dist/services/retention.service.js +264 -0
  66. package/dist/services/retention.service.js.map +1 -0
  67. package/package.json +2 -1
@@ -1230,23 +1230,84 @@ export async function runMigrations(db) {
1230
1230
  "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
1231
1231
  "tenant_id" TEXT NOT NULL,
1232
1232
  "account_id" TEXT NOT NULL,
1233
+ "incident_group" TEXT NOT NULL DEFAULT 'default',
1233
1234
  "priority" TEXT NOT NULL,
1234
1235
  "ack_minutes" INTEGER NOT NULL,
1235
- "resolve_minutes" INTEGER NOT NULL,
1236
+ "resolve_minutes" INTEGER,
1236
1237
  "created_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
1237
1238
  "updated_at" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
1238
1239
  CONSTRAINT insight_connector_sla_targets_priority_chk CHECK (priority IN ('P1','P2','P3','P4')),
1240
+ CONSTRAINT insight_connector_sla_targets_group_chk
1241
+ CHECK (incident_group IN ('default','operations','security','cost')),
1239
1242
  CONSTRAINT insight_connector_sla_targets_limits_chk
1240
- CHECK (ack_minutes > 0 AND resolve_minutes >= ack_minutes AND resolve_minutes <= 43200)
1243
+ CHECK (ack_minutes BETWEEN 1 AND 43200 AND (resolve_minutes IS NULL OR (resolve_minutes >= ack_minutes AND resolve_minutes <= 43200)))
1241
1244
  )
1242
- `));
1243
- await db.execute(sql.raw(`
1244
- CREATE UNIQUE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_account_priority_unique
1245
- ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id", "account_id", "priority")
1246
1245
  `));
1247
1246
  await db.execute(sql.raw(`
1248
1247
  CREATE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_idx
1249
1248
  ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id")
1249
+ `));
1250
+ // SLA per incident group (insight-server 1.1.0). Upgrades a 1.0.8 table in place:
1251
+ // existing rows become the account default ('default' group), so evaluation is unchanged.
1252
+ await db.execute(sql.raw(`
1253
+ ALTER TABLE "meyiconnect"."insight_connector_sla_policies"
1254
+ ADD COLUMN IF NOT EXISTS "applies_to" TEXT[] NOT NULL DEFAULT '{operations,security,cost}'::text[]
1255
+ `));
1256
+ await db.execute(sql.raw(`
1257
+ DO $$ BEGIN
1258
+ IF NOT EXISTS (
1259
+ SELECT 1 FROM pg_constraint
1260
+ WHERE conname = 'insight_connector_sla_policies_applies_to_chk'
1261
+ AND conrelid = '"meyiconnect"."insight_connector_sla_policies"'::regclass
1262
+ ) THEN
1263
+ ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ADD CONSTRAINT insight_connector_sla_policies_applies_to_chk
1264
+ CHECK ("applies_to" <@ ARRAY['operations','security','cost']::text[]);
1265
+ END IF;
1266
+ END $$
1267
+ `));
1268
+ await db.execute(sql.raw(`
1269
+ ALTER TABLE "meyiconnect"."insight_connector_sla_targets"
1270
+ ADD COLUMN IF NOT EXISTS "incident_group" TEXT NOT NULL DEFAULT 'default'
1271
+ `));
1272
+ await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ALTER COLUMN "resolve_minutes" DROP NOT NULL`));
1273
+ await db.execute(sql.raw(`
1274
+ DO $$ BEGIN
1275
+ IF NOT EXISTS (
1276
+ SELECT 1 FROM pg_constraint
1277
+ WHERE conname = 'insight_connector_sla_targets_group_chk'
1278
+ AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
1279
+ ) THEN
1280
+ ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ADD CONSTRAINT insight_connector_sla_targets_group_chk
1281
+ CHECK ("incident_group" IN ('default','operations','security','cost'));
1282
+ END IF;
1283
+ -- Replace the 1.0.8 limits CHECK (resolve NOT NULL) with one that allows best effort (NULL resolve).
1284
+ IF EXISTS (
1285
+ SELECT 1 FROM pg_constraint
1286
+ WHERE conname = 'insight_connector_sla_targets_limits_chk'
1287
+ AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
1288
+ AND pg_get_constraintdef(oid) NOT ILIKE '%resolve_minutes IS NULL%'
1289
+ ) THEN
1290
+ ALTER TABLE "meyiconnect"."insight_connector_sla_targets" DROP CONSTRAINT insight_connector_sla_targets_limits_chk;
1291
+ END IF;
1292
+ IF NOT EXISTS (
1293
+ SELECT 1 FROM pg_constraint
1294
+ WHERE conname = 'insight_connector_sla_targets_limits_chk'
1295
+ AND conrelid = '"meyiconnect"."insight_connector_sla_targets"'::regclass
1296
+ ) THEN
1297
+ ALTER TABLE "meyiconnect"."insight_connector_sla_targets" ADD CONSTRAINT insight_connector_sla_targets_limits_chk
1298
+ CHECK (ack_minutes BETWEEN 1 AND 43200 AND (resolve_minutes IS NULL OR (resolve_minutes >= ack_minutes AND resolve_minutes <= 43200)));
1299
+ END IF;
1300
+ END $$
1301
+ `));
1302
+ // The 1.0.8 unique key (tenant, account, priority) would reject group overrides; replace it.
1303
+ await db.execute(sql.raw(`
1304
+ ALTER TABLE "meyiconnect"."insight_connector_sla_targets"
1305
+ DROP CONSTRAINT IF EXISTS insight_connector_sla_targets_tenant_account_priority_unique
1306
+ `));
1307
+ await db.execute(sql.raw(`DROP INDEX IF EXISTS "meyiconnect"."insight_connector_sla_targets_tenant_account_priority_unique"`));
1308
+ await db.execute(sql.raw(`
1309
+ CREATE UNIQUE INDEX IF NOT EXISTS insight_connector_sla_targets_tenant_account_group_priority_unique
1310
+ ON "meyiconnect"."insight_connector_sla_targets" ("tenant_id", "account_id", "incident_group", "priority")
1250
1311
  `));
1251
1312
  // Upgrade from the single-limit policy: copy each account's limits to all four priorities (so behaviour is
1252
1313
  // unchanged), then relax the old columns. They stay in place, unread, until a later release drops them.
@@ -1261,7 +1322,10 @@ export async function runMigrations(db) {
1261
1322
  FROM "meyiconnect"."insight_connector_sla_policies" p
1262
1323
  CROSS JOIN (VALUES ('P1'), ('P2'), ('P3'), ('P4')) AS v("priority")
1263
1324
  WHERE p."ack_minutes" IS NOT NULL AND p."resolve_minutes" IS NOT NULL
1264
- ON CONFLICT ("tenant_id", "account_id", "priority") DO NOTHING;
1325
+ AND NOT EXISTS (
1326
+ SELECT 1 FROM "meyiconnect"."insight_connector_sla_targets" t
1327
+ WHERE t."tenant_id" = p."tenant_id" AND t."account_id" = p."account_id" AND t."priority" = v."priority"
1328
+ );
1265
1329
 
1266
1330
  ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ALTER COLUMN "ack_minutes" DROP NOT NULL;
1267
1331
  ALTER TABLE "meyiconnect"."insight_connector_sla_policies" ALTER COLUMN "resolve_minutes" DROP NOT NULL;
@@ -1370,5 +1434,71 @@ export async function runMigrations(db) {
1370
1434
  CREATE INDEX IF NOT EXISTS insight_incidents_tenant_priority_idx
1371
1435
  ON "meyiconnect"."insight_incidents" ("tenant_id", "priority")
1372
1436
  `));
1437
+ // ─── insight_incidents: structured cost data (1.1.0) ──────────────────────
1438
+ // external_ref: stable producer key; savings_monthly: sort key (USD/month); savings_detail: display range.
1439
+ await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "external_ref" TEXT`));
1440
+ await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "savings_monthly" NUMERIC(14,2)`));
1441
+ await db.execute(sql.raw(`ALTER TABLE "meyiconnect"."insight_incidents" ADD COLUMN IF NOT EXISTS "savings_detail" JSONB`));
1442
+ // One OPEN incident per (tenant, source, external_ref). A resolved/closed one leaves room for a new incident.
1443
+ await createIndexConcurrently(db, "insight_incidents_tenant_source_ref_uq", `
1444
+ CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_tenant_source_ref_uq
1445
+ ON "meyiconnect"."insight_incidents" ("tenant_id", "source", "external_ref")
1446
+ WHERE "external_ref" IS NOT NULL AND "status" NOT IN ('resolved','closed')
1447
+ `);
1448
+ // Cost list order: priority, savings, newest.
1449
+ await createIndexConcurrently(db, "insight_incidents_cost_sort_idx", `
1450
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_cost_sort_idx
1451
+ ON "meyiconnect"."insight_incidents" ("tenant_id", "priority", "savings_monthly" DESC NULLS LAST, "created_at" DESC)
1452
+ `);
1453
+ // ─── Retention indexes (1.1.0) ────────────────────────────────────────────
1454
+ // Support the tenant-scoped, time-bounded batched purge. Built CONCURRENTLY so large tables stay writable.
1455
+ await createIndexConcurrently(db, "insight_alerts_tenant_created_idx", `
1456
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_alerts_tenant_created_idx
1457
+ ON "meyiconnect"."insight_alerts" ("tenant_id", "created_at")
1458
+ `);
1459
+ await createIndexConcurrently(db, "insight_incidents_tenant_status_resolved_idx", `
1460
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_incidents_tenant_status_resolved_idx
1461
+ ON "meyiconnect"."insight_incidents" ("tenant_id", "status", "resolved_at")
1462
+ `);
1463
+ await createIndexConcurrently(db, "insight_workflow_executions_tenant_triggered_idx", `
1464
+ CREATE INDEX CONCURRENTLY IF NOT EXISTS insight_workflow_executions_tenant_triggered_idx
1465
+ ON "meyiconnect"."insight_workflow_executions" ("tenant_id", "triggered_at")
1466
+ `);
1467
+ }
1468
+ function rowsOf(res) {
1469
+ return res?.rows ?? (Array.isArray(res) ? res : []);
1470
+ }
1471
+ /**
1472
+ * Creates an index with CREATE INDEX CONCURRENTLY (no write lock on large tables), idempotently.
1473
+ * A previous interrupted CONCURRENTLY build leaves an INVALID index that IF NOT EXISTS would skip
1474
+ * forever, so an invalid index is dropped and rebuilt. If the host runs migrations inside a
1475
+ * transaction (where CONCURRENTLY is not allowed), it falls back to a plain CREATE INDEX.
1476
+ */
1477
+ async function createIndexConcurrently(db, name, concurrentDdl) {
1478
+ const lookup = await db.execute(sql `
1479
+ SELECT i.indisvalid AS valid
1480
+ FROM pg_class c
1481
+ JOIN pg_index i ON i.indexrelid = c.oid
1482
+ JOIN pg_namespace n ON n.oid = c.relnamespace
1483
+ WHERE n.nspname = 'meyiconnect' AND c.relname = ${name}
1484
+ `);
1485
+ const existing = rowsOf(lookup)[0];
1486
+ if (existing && (existing.valid === true || existing.valid === "t"))
1487
+ return;
1488
+ try {
1489
+ if (existing) {
1490
+ await db.execute(sql.raw(`DROP INDEX CONCURRENTLY IF EXISTS "meyiconnect"."${name}"`));
1491
+ }
1492
+ await db.execute(sql.raw(concurrentDdl));
1493
+ }
1494
+ catch (err) {
1495
+ const code = err?.code ?? err?.cause?.code;
1496
+ // 25001 = active_sql_transaction: CONCURRENTLY cannot run inside a transaction block.
1497
+ if (code !== "25001")
1498
+ throw err;
1499
+ if (existing)
1500
+ await db.execute(sql.raw(`DROP INDEX IF EXISTS "meyiconnect"."${name}"`));
1501
+ await db.execute(sql.raw(concurrentDdl.replace(/\bCONCURRENTLY\s+/i, "")));
1502
+ }
1373
1503
  }
1374
1504
  //# sourceMappingURL=run.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAO;IACzC,MAAM,eAAe,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAC;IACjG,MAAM,gBAAgB,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC7D,MAAM,sBAAsB,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IAC3G,MAAM,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,sBAAsB,GAAG,CAAC;QAC/F,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,EAAE,CAAC;IAEP,qFAAqF;IACrF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+ExB,CAAC,CAAC,CAAC;IAGJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;mBAoBR,gBAAgB;;;;mBAIhB,gBAAgB;;;;GAIhC,CAAC,CAAC,CAAC;IAEJ,kBAAkB;IAClB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;GAcxB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6DAA6D,gBAAgB,uDAAuD,CAAC,CAAC,CAAC;IAChK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2GAA2G,CAAC,CAAC,CAAC;IACvI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mIAAmI,CAAC,CAAC,CAAC;IAC/J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IACzI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gHAAgH,CAAC,CAAC,CAAC;IAC5I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sHAAsH,mBAAmB,SAAS,CAAC,CAAC,CAAC;IAC9K,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC,CAAC;IACxG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;GAIxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACnI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;yDAE8B,mBAAmB;;;GAGzE,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,iEAAiE;IACjE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;GAmBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oJAAoJ,CAAC,CAAC,CAAC;IAChL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sJAAsJ,CAAC,CAAC,CAAC;IAElL,0FAA0F;IAC1F,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;GAiBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oJAAoJ,CAAC,CAAC,CAAC;IAChL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sJAAsJ,CAAC,CAAC,CAAC;IAElL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4IAA4I,CAAC,CAAC,CAAC;IACxK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0IAA0I,CAAC,CAAC,CAAC;IACtK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IACzI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kHAAkH,CAAC,CAAC,CAAC;IAC9I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC,CAAC;IAE7I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwExB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;GAcxB,CAAC,CAAC,CAAC;IAGJ,8DAA8D;IAC9D,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;GAgBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2HAA2H,CAAC,CAAC,CAAC;IACvJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8IAA8I,CAAC,CAAC,CAAC;IAC1K,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+IAA+I,CAAC,CAAC,CAAC;IAE3K,iEAAiE;IACjE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kHAAkH,CAAC,CAAC,CAAC;IAC9I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oHAAoH,CAAC,CAAC,CAAC;IAChJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oJAAoJ,CAAC,CAAC,CAAC;IAChL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wJAAwJ,CAAC,CAAC,CAAC;IAEpL,wEAAwE;IACxE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;GAgBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8HAA8H,CAAC,CAAC,CAAC;IAC1J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0HAA0H,CAAC,CAAC,CAAC;IAEtJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kIAAkI,CAAC,CAAC,CAAC;IAC9J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kIAAkI,CAAC,CAAC,CAAC;IAC9J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oIAAoI,CAAC,CAAC,CAAC;IAChK,mBAAmB;IACnB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;GAKxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8DAA8D,gBAAgB,uDAAuD,CAAC,CAAC,CAAC;IACjK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9F,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+HAA+H,CAAC,CAAC,CAAC;IAC3J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iGAAiG,CAAC,CAAC,CAAC;IAC7H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IAEzI,oBAAoB;IACpB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC,CAAC;IAC7I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kHAAkH,CAAC,CAAC,CAAC;IAE9I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;IACtH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+DAA+D,gBAAgB,uDAAuD,CAAC,CAAC,CAAC;IAClK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC,CAAC;IAC3I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sHAAsH,CAAC,CAAC,CAAC;IAElJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC,CAAC;IAClH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC,CAAC;IAE5H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;GAsBxB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8GAA8G,CAAC,CAAC,CAAC;IAC1I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sHAAsH,CAAC,CAAC,CAAC;IAClJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC,CAAC;IAC3I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC,CAAC;IAC5H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC,CAAC;IAC3H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC,CAAC;IAC7I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0FAA0F,CAAC,CAAC,CAAC;IACtH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC,CAAC;IACxH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC,CAAC;IACvH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;GAOxB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;GAUxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mHAAmH,CAAC,CAAC,CAAC;IAC/I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iHAAiH,CAAC,CAAC,CAAC;IAE7I,iBAAiB;IACjB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4DAA4D,gBAAgB,uDAAuD,CAAC,CAAC,CAAC;IAC/J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yGAAyG,CAAC,CAAC,CAAC;IACrI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC,CAAC;IAClI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;GAiBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC,CAAC;IAC9H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC,CAAC;IACpI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC,CAAC;IAC3H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC,CAAC;IACnH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;GAOxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAC,CAAC;IAC/H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sGAAsG,CAAC,CAAC,CAAC;IAElI,mBAAmB;IACnB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;GAMxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC,CAAC;IACpI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4GAA4G,CAAC,CAAC,CAAC;IACxI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iGAAiG,CAAC,CAAC,CAAC;IAC7H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8DAA8D,gBAAgB,iDAAiD,CAAC,CAAC,CAAC;IAC3J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IAEzI,yBAAyB;IACzB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,8FAA8F,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC1I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oEAAoE,gBAAgB,uDAAuD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACvL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kEAAkE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sJAAsJ,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAClM,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yHAAyH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAErK,iGAAiG;IACjG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;GAWxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC,CAAC;IAC3I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IAEzI,gBAAgB;IAChB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;GAUxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2GAA2G,CAAC,CAAC,CAAC;IAEvI,iBAAiB;IACjB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;GAgBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC,CAAC;IACpI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0GAA0G,CAAC,CAAC,CAAC;IAEtI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC,CAAC;IAC7G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;GAmBxB,CAAC,CAAC,CAAC;IAEJ,yFAAyF;IACzF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAC,CAAC;IAE/H,iCAAiC;IACjC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC,CAAC;IAE/G,oEAAoE;IACpE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACjG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC,CAAC;IAC7G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC,CAAC;IAC9G,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0DAA0D,gBAAgB,iDAAiD,CAAC,CAAC,CAAC;IACvJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qGAAqG,CAAC,CAAC,CAAC;IACjI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6HAA6H,CAAC,CAAC,CAAC;IAEzJ,sBAAsB;IACtB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;GAUxB,CAAC,CAAC,CAAC;IAEJ,sBAAsB;IACtB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;GAYxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4JAA4J,CAAC,CAAC,CAAC;IACxL,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+DAA+D,gBAAgB,iDAAiD,CAAC,CAAC,CAAC;IAC5J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC,CAAC;IAC3I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,gCAAgC;IAChC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;GAWxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uIAAuI,CAAC,CAAC,CAAC;IACnK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iIAAiI,CAAC,CAAC,CAAC;IAC7J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6HAA6H,CAAC,CAAC,CAAC;IACzJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mGAAmG,CAAC,CAAC,CAAC;IAC/H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;iDAEsB,gBAAgB;;;;GAI9D,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yEAAyE,gBAAgB,iDAAiD,CAAC,CAAC,CAAC;IACtK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mIAAmI,CAAC,CAAC,CAAC;IAE/J,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,sFAAsF,CAAC,CAAC,CAAC;IAClH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6GAA6G,CAAC,CAAC,CAAC;IACzI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qFAAqF,CAAC,CAAC,CAAC;IACjH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;IACrH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qHAAqH,CAAC,CAAC,CAAC;IAEjJ,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;GAgBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6HAA6H,CAAC,CAAC,CAAC;IAEzJ,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+HAA+H,CAAC,CAAC,CAAC;IAC3J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qIAAqI,CAAC,CAAC,CAAC;IACjK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2IAA2I,CAAC,CAAC,CAAC;IACvK,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+HAA+H,CAAC,CAAC,CAAC;IAC3J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qGAAqG,CAAC,CAAC,CAAC;IACjI,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uIAAuI,CAAC,CAAC,CAAC;IAEnK,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;GAmBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uHAAuH,CAAC,CAAC,CAAC;IACnJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qHAAqH,CAAC,CAAC,CAAC;IACjJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2HAA2H,CAAC,CAAC,CAAC;IACvJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uHAAuH,CAAC,CAAC,CAAC;IACnJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6FAA6F,CAAC,CAAC,CAAC;IACzH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uHAAuH,CAAC,CAAC,CAAC;IAEnJ,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;GAmBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0HAA0H,CAAC,CAAC,CAAC;IACtJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2HAA2H,CAAC,CAAC,CAAC;IACvJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iIAAiI,CAAC,CAAC,CAAC;IAC7J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,0HAA0H,CAAC,CAAC,CAAC;IACtJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gGAAgG,CAAC,CAAC,CAAC;IAC5H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6HAA6H,CAAC,CAAC,CAAC;IACzJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,gIAAgI,CAAC,CAAC,CAAC;IAC5J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2GAA2G,CAAC,CAAC,CAAC;IAEvI,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;GAaxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+HAA+H,CAAC,CAAC,CAAC;IAC3J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qHAAqH,CAAC,CAAC,CAAC;IACjJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,4FAA4F,CAAC,CAAC,CAAC;IACxH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,qHAAqH,CAAC,CAAC,CAAC;IAEjJ,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;GAOxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iIAAiI,CAAC,CAAC,CAAC;IAC7J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,iIAAiI,CAAC,CAAC,CAAC;IAC7J,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kJAAkJ,CAAC,CAAC,CAAC;IAE9K,gFAAgF;IAChF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;GAWxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,yHAAyH,CAAC,CAAC,CAAC;IACrJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mHAAmH,CAAC,CAAC,CAAC;IAC/I,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,6HAA6H,CAAC,CAAC,CAAC;IACzJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,+FAA+F,CAAC,CAAC,CAAC;IAC3H,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2HAA2H,CAAC,CAAC,CAAC;IAEvJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2FAA2F,CAAC,CAAC,CAAC;IACvH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC,CAAC;IAE9H,gFAAgF;IAChF,IAAI,CAAC;QACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,0CAA0C,CAAC,CAAC;QAEtF,KAAK,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACrE,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,cAAc,CAAQ,CAAC;gBACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,UAAU,wBAAwB,CAAC;gBAClE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;yCAEQ,OAAO,CAAC,aAAa,CAAC,YAAY;mCACxC,UAAU;SACpC,CAAC,CAAC,CAAC;gBACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;oBAGb,IAAI,iBAAiB,UAAU,aAAa,OAAO,CAAC,aAAa,CAAC,YAAY,mBAAmB,OAAO,CAAC,aAAa,CAAC,cAAc;;;qCAGpH,UAAU;;SAEtC,CAAC,CAAC,CAAC;YACN,CAAC;YACD,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAQ,CAAC;gBAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,UAAU,wBAAwB,CAAC;gBAClE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;oBAGb,IAAI,iBAAiB,UAAU,aAAa,OAAO,CAAC,KAAK,CAAC,cAAc;;;qCAGvD,UAAU;;SAEtC,CAAC,CAAC,CAAC;YACN,CAAC;YACD,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ,CAAC;gBACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,GAAG,UAAU,mBAAmB,CAAC;gBAC7D,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;oBAGb,IAAI,iBAAiB,UAAU,aAAa,OAAO,CAAC,QAAQ,CAAC,cAAc;;;qCAG1D,UAAU;;SAEtC,CAAC,CAAC,CAAC;YACN,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IAClE,CAAC;IAED,8EAA8E;IAC9E,qEAAqE;IACrE,4EAA4E;IAC5E,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;GAoBxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,mGAAmG;IACnG,qGAAqG;IACrG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;GAMxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;GAUxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,6EAA6E;IAC7E,uEAAuE;IACvE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;GAcxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,2GAA2G;IAC3G,wGAAwG;IACxG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;GAkBxB,CAAC,CAAC,CAAC;IAEJ,6EAA6E;IAC7E,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,6EAA6E;IAC7E,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BxB,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;IAEJ,6EAA6E;IAC7E,mGAAmG;IACnG,sEAAsE;IACtE,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC,CAAC;IACpH,wFAAwF;IACxF,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;GAexB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,oFAAoF,CAAC,CAAC,CAAC;IAChH,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;;;;;GAOxB,CAAC,CAAC,CAAC;IACJ,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;;;GAGxB,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,21 @@
1
1
  import type { ConnectorEnvironment } from "../features/connector-environment/environment.types.js";
2
2
  import { type IncidentPriority } from "../features/incident-priority/priority.types.js";
3
+ import type { IncidentSort } from "../constants/incidentCategories.js";
4
+ /** Structured savings range shown next to a cost incident. */
5
+ export interface IncidentSavingsDetail {
6
+ min?: number | null;
7
+ max?: number | null;
8
+ basis?: string | null;
9
+ method?: string | null;
10
+ currency?: string;
11
+ }
12
+ /** Value for the numeric `savings_monthly` column: a 2-dp string, or null. */
13
+ export declare function toSavingsColumn(value: unknown): string | null;
14
+ /** Normalises a savings detail object to its known keys; anything else is dropped. */
15
+ export declare function toSavingsDetail(value: unknown): IncidentSavingsDetail | null;
16
+ /** Postgres unique_violation, possibly wrapped by drizzle (DrizzleQueryError.cause). */
17
+ export declare function isUniqueViolation(err: any, constraint?: string): boolean;
18
+ export declare const EXTERNAL_REF_UNIQUE_INDEX = "insight_incidents_tenant_source_ref_uq";
3
19
  export declare class IncidentModel {
4
20
  private db;
5
21
  private tbl;
@@ -7,6 +23,11 @@ export declare class IncidentModel {
7
23
  findById(id: string, tenantId?: string): Promise<any>;
8
24
  searchUsers(search: string, limit: number, tenantId?: string): Promise<any>;
9
25
  findByIds(ids: string[], tenantId?: string): Promise<any>;
26
+ /** "source not in (...)" — a NULL source counts as operations, so it is never excluded. */
27
+ private excludeSourcesCondition;
28
+ private includeSourcesCondition;
29
+ /** ORDER BY for an allowlisted sort key. The id tiebreak keeps pagination stable. */
30
+ private orderFor;
10
31
  list(params: {
11
32
  page: number;
12
33
  limit: number;
@@ -15,10 +36,13 @@ export declare class IncidentModel {
15
36
  assigneeIds?: string[];
16
37
  statuses?: string[];
17
38
  sourceTypes?: string[];
39
+ /** Sources to exclude (operations = not security and not cost). */
40
+ excludeSourceTypes?: string[];
18
41
  accountNames?: string[];
19
42
  environment?: ConnectorEnvironment;
20
43
  priorities?: IncidentPriority[];
21
44
  tenantId?: string;
45
+ sort?: IncidentSort;
22
46
  }): Promise<{
23
47
  incidents: any;
24
48
  total: number;
@@ -30,14 +54,14 @@ export declare class IncidentModel {
30
54
  * Returns only the columns needed for stat computation, optionally scoped
31
55
  * to a tenant and/or a createdAt lower bound.
32
56
  */
33
- findForAggregation(tenantId?: string, sinceIso?: string, sourceTypes?: string[], accountNames?: string[]): Promise<any>;
57
+ findForAggregation(tenantId?: string, sinceIso?: string, sourceTypes?: string[], accountNames?: string[], excludeSourceTypes?: string[]): Promise<any>;
34
58
  create(input: {
35
59
  name: string;
36
60
  source: string;
37
61
  resourceName: string;
38
62
  resourceType: string;
39
63
  downMessage?: string | null;
40
- tags?: Record<string, string>;
64
+ tags?: Record<string, unknown>;
41
65
  downTime?: string;
42
66
  alertId?: string | null;
43
67
  assigneeIds?: string[];
@@ -46,7 +70,25 @@ export declare class IncidentModel {
46
70
  accountId?: string | null;
47
71
  accountName?: string | null;
48
72
  priority?: IncidentPriority;
73
+ externalRef?: string | null;
74
+ savingsMonthly?: number | null;
75
+ savingsDetail?: IncidentSavingsDetail | null;
49
76
  }): Promise<any>;
77
+ /** The open (not resolved/closed) incident with this producer key, if any. Always tenant-scoped. */
78
+ findOpenByExternalRef(tenantId: string, source: string, externalRef: string): Promise<any>;
79
+ /**
80
+ * Refreshes an open incident from its producer. Only updates while the incident is still open, so a
81
+ * concurrent resolve wins; returns false when nothing was updated. Tags are merged, not replaced.
82
+ */
83
+ refreshOpenByExternalRef(id: string, tenantId: string, data: {
84
+ name?: string;
85
+ description?: string | null;
86
+ priority?: IncidentPriority;
87
+ savingsMonthly?: number | null;
88
+ savingsDetail?: IncidentSavingsDetail | null;
89
+ accountName?: string | null;
90
+ tags?: Record<string, unknown>;
91
+ }): Promise<boolean>;
50
92
  update(id: string, data: Record<string, any>, tenantId?: string): Promise<void>;
51
93
  delete(id: string, tenantId?: string): Promise<void>;
52
94
  }
@@ -1 +1 @@
1
- {"version":3,"file":"incident.model.d.ts","sourceRoot":"","sources":["../../src/models/incident.model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wDAAwD,CAAC;AACnG,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AAEnH,qBAAa,aAAa;IAEtB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,GAAG;gBADH,EAAE,EAAE,GAAG,EACP,GAAG,EAAE,GAAG;IAGZ,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAWtC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;IAgB5D,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,MAAM;IAU1C,IAAI,CAAC,MAAM,EAAE;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,WAAW,CAAC,EAAE,oBAAoB,CAAC;QACnC,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB;;;;;;IAuED;;;;OAIG;IACG,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE;IA+CxG,MAAM,CAAC,KAAK,EAAE;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE,MAAM,CAAC;QACrB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;KAC7B;IA8DK,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACzB,QAAQ,CAAC,EAAE,MAAM;IAab,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAiB3C"}
1
+ {"version":3,"file":"incident.model.d.ts","sourceRoot":"","sources":["../../src/models/incident.model.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,45 @@
1
- import { eq, desc, count, and, inArray, sql, isNull, or } from "drizzle-orm";
1
+ import { eq, asc, desc, count, and, inArray, sql, isNull, or } from "drizzle-orm";
2
2
  import { connectorEnvironmentCondition } from "../features/connector-environment/environment.scope.js";
3
3
  import { DEFAULT_INCIDENT_PRIORITY } from "../features/incident-priority/priority.types.js";
4
+ /** numeric(14,2) bounds; out-of-range or non-finite values are stored as NULL rather than failing the write. */
5
+ const MAX_SAVINGS = 999_999_999_999.99;
6
+ /** Value for the numeric `savings_monthly` column: a 2-dp string, or null. */
7
+ export function toSavingsColumn(value) {
8
+ if (value === null || value === undefined || value === "")
9
+ return null;
10
+ const n = typeof value === "number" ? value : Number(value);
11
+ if (!Number.isFinite(n) || n < 0 || n > MAX_SAVINGS)
12
+ return null;
13
+ return n.toFixed(2);
14
+ }
15
+ /** Normalises a savings detail object to its known keys; anything else is dropped. */
16
+ export function toSavingsDetail(value) {
17
+ if (!value || typeof value !== "object" || Array.isArray(value))
18
+ return null;
19
+ const v = value;
20
+ const num = (x) => {
21
+ if (x === null || x === undefined || x === "")
22
+ return null;
23
+ const n = Number(x);
24
+ return Number.isFinite(n) ? n : null;
25
+ };
26
+ const str = (x) => (typeof x === "string" && x.trim() ? x.trim().slice(0, 500) : null);
27
+ return {
28
+ min: num(v.min),
29
+ max: num(v.max),
30
+ basis: str(v.basis),
31
+ method: str(v.method),
32
+ currency: typeof v.currency === "string" && v.currency.trim() ? v.currency.trim().toUpperCase().slice(0, 8) : "USD",
33
+ };
34
+ }
35
+ /** Postgres unique_violation, possibly wrapped by drizzle (DrizzleQueryError.cause). */
36
+ export function isUniqueViolation(err, constraint) {
37
+ const e = err?.code ? err : err?.cause;
38
+ if (!e || e.code !== "23505")
39
+ return false;
40
+ return !constraint || !e.constraint || e.constraint === constraint;
41
+ }
42
+ export const EXTERNAL_REF_UNIQUE_INDEX = "insight_incidents_tenant_source_ref_uq";
4
43
  export class IncidentModel {
5
44
  db;
6
45
  tbl;
@@ -46,6 +85,33 @@ export class IncidentModel {
46
85
  .from(this.tbl)
47
86
  .where(conditions.length > 1 ? and(...conditions) : conditions[0]);
48
87
  }
88
+ /** "source not in (...)" — a NULL source counts as operations, so it is never excluded. */
89
+ excludeSourcesCondition(excludeSourceTypes) {
90
+ if (!excludeSourceTypes?.length)
91
+ return undefined;
92
+ const lower = excludeSourceTypes.map((s) => s.toLowerCase());
93
+ return or(isNull(this.tbl.source), sql `LOWER(${this.tbl.source}) NOT IN (${sql.join(lower.map((s) => sql `${s}`), sql `, `)})`);
94
+ }
95
+ includeSourcesCondition(sourceTypes) {
96
+ if (sourceTypes === undefined)
97
+ return undefined;
98
+ if (sourceTypes.length === 0)
99
+ return sql `1 = 0`;
100
+ const lowerSources = sourceTypes.map((s) => s.toLowerCase());
101
+ return inArray(sql `LOWER(${this.tbl.source})`, lowerSources);
102
+ }
103
+ /** ORDER BY for an allowlisted sort key. The id tiebreak keeps pagination stable. */
104
+ orderFor(sort) {
105
+ if (sort === "priority_savings") {
106
+ return [
107
+ asc(this.tbl.priority),
108
+ sql `${this.tbl.savingsMonthly} DESC NULLS LAST`,
109
+ desc(this.tbl.createdAt),
110
+ desc(this.tbl.id),
111
+ ];
112
+ }
113
+ return [desc(this.tbl.createdAt), desc(this.tbl.id)];
114
+ }
49
115
  async list(params) {
50
116
  const { page, limit } = params;
51
117
  const offset = (page - 1) * limit;
@@ -54,15 +120,12 @@ export class IncidentModel {
54
120
  conditions.push(eq(this.tbl.name, params.name));
55
121
  if (params.tenantId)
56
122
  conditions.push(eq(this.tbl.tenantId, params.tenantId));
57
- if (params.sourceTypes !== undefined) {
58
- if (params.sourceTypes.length === 0) {
59
- conditions.push(sql `1 = 0`);
60
- }
61
- else {
62
- const lowerSources = params.sourceTypes.map((s) => s.toLowerCase());
63
- conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
64
- }
65
- }
123
+ const include = this.includeSourcesCondition(params.sourceTypes);
124
+ if (include)
125
+ conditions.push(include);
126
+ const exclude = this.excludeSourcesCondition(params.excludeSourceTypes);
127
+ if (exclude)
128
+ conditions.push(exclude);
66
129
  if (params.accountNames?.length) {
67
130
  const accountConditions = params.accountNames.map((acc) => {
68
131
  if (acc === "unassigned" || acc === "none" || acc === "no_account") {
@@ -108,7 +171,7 @@ export class IncidentModel {
108
171
  let q = this.db
109
172
  .select()
110
173
  .from(this.tbl)
111
- .orderBy(desc(this.tbl.createdAt))
174
+ .orderBy(...this.orderFor(params.sort))
112
175
  .limit(limit)
113
176
  .offset(offset);
114
177
  if (whereClause)
@@ -125,21 +188,18 @@ export class IncidentModel {
125
188
  * Returns only the columns needed for stat computation, optionally scoped
126
189
  * to a tenant and/or a createdAt lower bound.
127
190
  */
128
- async findForAggregation(tenantId, sinceIso, sourceTypes, accountNames) {
191
+ async findForAggregation(tenantId, sinceIso, sourceTypes, accountNames, excludeSourceTypes) {
129
192
  const conditions = [];
130
193
  if (tenantId)
131
194
  conditions.push(eq(this.tbl.tenantId, tenantId));
132
195
  if (sinceIso)
133
196
  conditions.push(sql `${this.tbl.createdAt} >= ${sinceIso}`);
134
- if (sourceTypes !== undefined) {
135
- if (sourceTypes.length === 0) {
136
- conditions.push(sql `1 = 0`);
137
- }
138
- else {
139
- const lowerSources = sourceTypes.map((s) => s.toLowerCase());
140
- conditions.push(inArray(sql `LOWER(${this.tbl.source})`, lowerSources));
141
- }
142
- }
197
+ const include = this.includeSourcesCondition(sourceTypes);
198
+ if (include)
199
+ conditions.push(include);
200
+ const exclude = this.excludeSourcesCondition(excludeSourceTypes);
201
+ if (exclude)
202
+ conditions.push(exclude);
143
203
  if (accountNames?.length) {
144
204
  const accountConditions = accountNames.map((acc) => {
145
205
  if (acc === "unassigned" || acc === "none" || acc === "no_account") {
@@ -225,6 +285,9 @@ export class IncidentModel {
225
285
  accountId: resolvedAccountId,
226
286
  accountName: resolvedAccountName,
227
287
  priority: input.priority ?? DEFAULT_INCIDENT_PRIORITY,
288
+ externalRef: input.externalRef ? String(input.externalRef) : null,
289
+ savingsMonthly: toSavingsColumn(input.savingsMonthly),
290
+ savingsDetail: toSavingsDetail(input.savingsDetail),
228
291
  assigneeIds: input.assigneeIds ?? [],
229
292
  status: "open",
230
293
  analysisStatus: "pending",
@@ -232,6 +295,43 @@ export class IncidentModel {
232
295
  .returning({ id: this.tbl.id });
233
296
  return row;
234
297
  }
298
+ /** The open (not resolved/closed) incident with this producer key, if any. Always tenant-scoped. */
299
+ async findOpenByExternalRef(tenantId, source, externalRef) {
300
+ const [row] = await this.db
301
+ .select()
302
+ .from(this.tbl)
303
+ .where(and(eq(this.tbl.tenantId, tenantId), eq(this.tbl.source, source), eq(this.tbl.externalRef, externalRef), sql `${this.tbl.status} NOT IN ('resolved','closed')`))
304
+ .limit(1);
305
+ return row ?? null;
306
+ }
307
+ /**
308
+ * Refreshes an open incident from its producer. Only updates while the incident is still open, so a
309
+ * concurrent resolve wins; returns false when nothing was updated. Tags are merged, not replaced.
310
+ */
311
+ async refreshOpenByExternalRef(id, tenantId, data) {
312
+ const set = { updatedAt: new Date() };
313
+ if (data.name !== undefined)
314
+ set.name = data.name;
315
+ if (data.description !== undefined)
316
+ set.description = data.description;
317
+ if (data.priority !== undefined)
318
+ set.priority = data.priority;
319
+ if (data.savingsMonthly !== undefined)
320
+ set.savingsMonthly = toSavingsColumn(data.savingsMonthly);
321
+ if (data.savingsDetail !== undefined)
322
+ set.savingsDetail = toSavingsDetail(data.savingsDetail);
323
+ if (data.accountName !== undefined && data.accountName !== null)
324
+ set.accountName = data.accountName;
325
+ if (data.tags && Object.keys(data.tags).length > 0) {
326
+ set.tags = sql `COALESCE(${this.tbl.tags}, '{}'::jsonb) || ${JSON.stringify(data.tags)}::jsonb`;
327
+ }
328
+ const rows = await this.db
329
+ .update(this.tbl)
330
+ .set(set)
331
+ .where(and(eq(this.tbl.id, id), eq(this.tbl.tenantId, tenantId), sql `${this.tbl.status} NOT IN ('resolved','closed')`))
332
+ .returning({ id: this.tbl.id });
333
+ return rows.length > 0;
334
+ }
235
335
  async update(id, data, tenantId) {
236
336
  const updateData = { ...data, updatedAt: new Date() };
237
337
  const conditions = [eq(this.tbl.id, id)];