@junando/core 0.13.0 → 0.14.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.
- package/dist/index.d.ts +24 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +97 -6
- package/dist/index.js.map +1 -1
- package/dist/shared/metrics/index.d.ts +3 -3
- package/dist/shared/metrics/index.d.ts.map +1 -1
- package/dist/shared/metrics/index.js +6 -6
- package/dist/shared/metrics/index.js.map +1 -1
- package/package.json +2 -1
package/dist/index.d.ts
CHANGED
|
@@ -879,6 +879,13 @@ export declare class ProcessIncidentUseCase {
|
|
|
879
879
|
private readonly wideEventsEnabled;
|
|
880
880
|
constructor(deps: Dependencies);
|
|
881
881
|
execute(alerts: NormalizedAlert[], correlationId: string): Promise<void>;
|
|
882
|
+
/**
|
|
883
|
+
* Releases the dedup claim so an SQS retry is not discarded as a duplicate.
|
|
884
|
+
* Concurrency: safe without a lock — sqs.adapter.ts sets messageGroupId to
|
|
885
|
+
* the fingerprint, so SQS FIFO serialises delivery per fingerprint and two
|
|
886
|
+
* runs for the same fingerprint are never in flight simultaneously.
|
|
887
|
+
*/
|
|
888
|
+
private releaseDedupClaim;
|
|
882
889
|
/**
|
|
883
890
|
* Flushes the builder into a final event, applies tail sampling, redacts
|
|
884
891
|
* PII, and emits the single canonical log line for the cluster.
|
|
@@ -901,6 +908,17 @@ export declare class InMemoryDeduplicationStore implements IDeduplicationStore {
|
|
|
901
908
|
clear(): void;
|
|
902
909
|
}
|
|
903
910
|
//#endregion
|
|
911
|
+
//#region src/infrastructure/dedup/dynamodb-dedup.adapter.d.ts
|
|
912
|
+
export declare class DynamoDBDeduplicationStore implements IDeduplicationStore {
|
|
913
|
+
private readonly tableName;
|
|
914
|
+
private readonly region?;
|
|
915
|
+
private client;
|
|
916
|
+
constructor(tableName: string, region?: string | undefined);
|
|
917
|
+
private getClient;
|
|
918
|
+
isNew(fingerprint: string, ttlSeconds: number): Promise<DedupResult>;
|
|
919
|
+
reset(fingerprint: string): Promise<void>;
|
|
920
|
+
}
|
|
921
|
+
//#endregion
|
|
904
922
|
//#region src/infrastructure/indexer/opensearch.adapter.d.ts
|
|
905
923
|
interface SignedHttpRequest {
|
|
906
924
|
method: string;
|
|
@@ -1003,7 +1021,12 @@ declare const ConfigSchema: z.ZodObject<{
|
|
|
1003
1021
|
rollbackActionAllowedSlackUserIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
1004
1022
|
teamsWebhookUrl: z.ZodOptional<z.ZodString>;
|
|
1005
1023
|
lokiUrl: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<string | undefined, string | undefined>>;
|
|
1006
|
-
|
|
1024
|
+
dedupStore: z.ZodDefault<z.ZodEnum<{
|
|
1025
|
+
dynamodb: "dynamodb";
|
|
1026
|
+
redis: "redis";
|
|
1027
|
+
}>>;
|
|
1028
|
+
dedupTableName: z.ZodOptional<z.ZodString>;
|
|
1029
|
+
redisUrl: z.ZodOptional<z.ZodString>;
|
|
1007
1030
|
sqsQueueUrl: z.ZodUnion<[z.ZodOptional<z.ZodString>, z.ZodLiteral<"">]>;
|
|
1008
1031
|
dedupTtlSeconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
1009
1032
|
clusterWindowMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/shared/constants.ts","../src/domain/entities/alert.ts","../src/domain/entities/cluster.ts","../src/domain/entities/incident.ts","../src/domain/entities/rule.ts","../src/domain/entities/traceability.ts","../src/domain/value-objects/fingerprint.ts","../src/domain/ports/index.ts","../src/domain/services/clustering.service.ts","../src/application/dtos/normalize-payload.ts","../src/shared/logger/enums.ts","../src/shared/logger/wide-event-builder.ts","../src/shared/logger/index.ts","../src/application/use-cases/process-incident.use-case.ts","../src/infrastructure/dedup/redis-dedup.adapter.ts","../src/infrastructure/indexer/opensearch.adapter.ts","../src/infrastructure/llm/llm.adapter.ts","../src/shared/config/index.ts","../src/infrastructure/rules/channel-registry.ts","../src/infrastructure/notifier/factory.ts","../src/infrastructure/rollback/factory.ts","../src/infrastructure/rollback/noop-rollback-action.handler.ts","../src/infrastructure/notifier/slack.adapter.ts","../src/infrastructure/notifier/teams.adapter.ts","../src/infrastructure/notifier/routing-notifier.ts","../src/infrastructure/queue/sqs.adapter.ts","../src/infrastructure/queue/sqs-lag-poller.ts","../src/infrastructure/traces/loki-trace.adapter.ts","../src/infrastructure/rules/yaml-rule-loader.ts","../src/infrastructure/rules/condition-evaluator.ts","../src/infrastructure/rules/action-dispatcher.ts","../src/infrastructure/rules/rule-engine.ts","../src/shared/factory-registry.ts","../src/shared/logger/loki-transport.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/shared/constants.ts","../src/domain/entities/alert.ts","../src/domain/entities/cluster.ts","../src/domain/entities/incident.ts","../src/domain/entities/rule.ts","../src/domain/entities/traceability.ts","../src/domain/value-objects/fingerprint.ts","../src/domain/ports/index.ts","../src/domain/services/clustering.service.ts","../src/application/dtos/normalize-payload.ts","../src/shared/logger/enums.ts","../src/shared/logger/wide-event-builder.ts","../src/shared/logger/index.ts","../src/application/use-cases/process-incident.use-case.ts","../src/infrastructure/dedup/redis-dedup.adapter.ts","../src/infrastructure/dedup/dynamodb-dedup.adapter.ts","../src/infrastructure/indexer/opensearch.adapter.ts","../src/infrastructure/llm/llm.adapter.ts","../src/shared/config/index.ts","../src/infrastructure/rules/channel-registry.ts","../src/infrastructure/notifier/factory.ts","../src/infrastructure/rollback/factory.ts","../src/infrastructure/rollback/noop-rollback-action.handler.ts","../src/infrastructure/notifier/slack.adapter.ts","../src/infrastructure/notifier/teams.adapter.ts","../src/infrastructure/notifier/routing-notifier.ts","../src/infrastructure/queue/sqs.adapter.ts","../src/infrastructure/queue/sqs-lag-poller.ts","../src/infrastructure/traces/loki-trace.adapter.ts","../src/infrastructure/rules/yaml-rule-loader.ts","../src/infrastructure/rules/condition-evaluator.ts","../src/infrastructure/rules/action-dispatcher.ts","../src/infrastructure/rules/rule-engine.ts","../src/shared/factory-registry.ts","../src/shared/logger/loki-transport.ts"],"mappings":";;;;;;oBAMY;EACV;EACA;EACA;;UAGQ;WACC;WACA;WACA,UAAU,iBAAiB,WAAW;;cAG3C,mBAAmB,OAAO,WAAW;qBAmB9B,mBAAmB,gBAAgB;oBAIpC;EACV;EACA;EACA;EACA;;qBAIW,iBAAe;;;;;;qBAOf,iBAAe;;;;;qBAMf;qBAGA,cAAY;;;;qBAMZ;qBAGA;qBAGA;qBAGA,uBAAqB;;EAM3B;;qBAIM,YAAU;;;;;qBAOV;qBACA;qBAGA;cAEP,eAAe;qBAMR,eAAe,gBAAgB;qBAG/B;qBAGA,kBAAgB;;;;qBAKhB,kBAAgB;;;;;;;qBC/GhB,mBAAiB,EAAA;;;;qBAEjB,uBAAqB,EAAA;;;;;;;;;;;;;;;GAYhC,EAAA,KAAA;qBAIW,2BAAyB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;GAsBpC,EAAA,KAAA;YAEU,cAAc,EAAE,aAAa;YAC7B,kBAAkB,EAAE,aAAa;YACjC,sBAAsB,EAAE,aAAa;YAGrC,iBAAiB;;;qBC9ChB,oBAAkB,EAAA;;;;;;;;;;;;;;;;GAa7B,EAAA,KAAA;YAEU,eAAe,EAAE,aAAa;;;qBCtB7B,oBAAkB,EAAA;;;;;;qBAGlB,mBAAiB,EAAA;;;;;;;;;;;GAM5B,EAAA,KAAA;qBAEW,gBAAc,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAKzB,EAAA,KAAA;YAEU,eAAe,EAAE,aAAa;YAC9B,cAAc,EAAE,aAAa;YAC7B,WAAW,EAAE,aAAa;;;oBCf1B;EACV;EACA;EACA;EACA;;oBAGU;EACV;EACA;EACA;EACA;;;oBAIU;EACV;EACA;;iBAOe;EACf;EACA,YAAY;EACZ,WAAW;EACX,SAAS;EACT;EACA;IAAe;IAAc;;EAC7B;IAAiB;IAAc;;;EAE/B,eAAe,EAAE,aAAa;EAC9B;EACA;;qBAaW,qBAAmB,EAAA;;;;;;;;;;;;;;;;;;;;;;GAW9B,EAAA,KAAA;YAMU;EACN,MAAM,eAAe;;EACrB,MAAM,eAAe;EAAO;;EAC5B,MAAM,eAAe;EAAU;;EAC/B,MAAM,eAAe;EAAK;EAAa;;qBAOhC,kBAAgB,EAAA,uBAAA,EAAA;;;;;;;;;;;;GAK3B,EAAA,KAAA;iBAMe;EACf;EACA;EACA,WAAW;EACX,SAAS;;EAET,eAAe,EAAE,aAAa;EAC9B;;qBAGW,YAAU,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAOrB,EAAA,KAAA;iBAMe;EACf,OAAO;;qBAGI,mBAAiB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAE5B,EAAA,KAAA;iBAMe;GACd,oBAAoB,SAAS;GAC7B,oBAAoB,UAAU;;qBAGpB,yBAAuB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAGlC,EAAA,KAAA;YAMU,yBAAyB,EAAE,aAAa;YACxC,sBAAsB,EAAE,aAAa;YACrC,gBAAgB,EAAE,aAAa;YAC/B,uBAAuB,EAAE,aAAa;YACtC,6BAA6B,EAAE,aAAa;;;UChJvC;EACf;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;qBCLW;WACkB;UAAtB;SAEA,UAAU,OAAO,kBAAkB;EAW1C,OAAO,OAAO;EAId;;;;;;;;UCNe;EACf;EACA;;EAEA;;;;;;;UAQe;EACf,MAAM,qBAAqB,qBAAqB,QAAQ;EACxD,MAAM,sBAAsB;;;;;;;UAQb;EACf,QAAQ,OAAO,kBAAkB;;;;;;;UAQlB;EACf,cAAc,kBAAkB,QAAQ;;;;;;;;KAS9B;;;;;;;UAQK;EACf,UAAU;EACV,iBAAiB;EACjB;EACA;EACA;EACA;EACA;;;;;;;UAQe;EACf,QAAQ,SAAS,cAAc,QAAQ,4BAA4B,QAAQ;;;;;;qBAOhE;WACX;WACA;;YAEU,wBAAwB,4BAA4B;;;;;;;UAQ/C;EACf,SAAS;EACT;;EAEA;;;;;;;UAQe;;;;;;;;EAQf,KAAK,SAAS,cAAc,UAAU,oBAAoB,mBAAmB,QAAQ;;;;;;;UAQtE,SAAS;EACxB,MAAM,KAAK,YAAY;;;;;UAUR;EACf;EACA,SAAS;EACT;EACA,MAAM;;;;;UAMS;;;;;EAKf,eAAe,SAAS,eAAe;;;;;EAMvC,gBAAgB,SAAS,cAAc,UAAU,cAAc;;;;;;;UAYhD;EACf;EACA;EACA;EACA,WAAW;EACX;EACA;IAAe;IAAa;IAAmB;;EAC/C;EACA;;;;;UAMe;EACf;EACA;;;;;;;UAQe;EACf,OAAO,SAAS,wBAAwB,QAAQ;;;;qBChMrC;;;;;EAKX,cAAc,QAAQ,oBAAoB;UAalC;UAyBA;;;;wBCjCM,iBAAiB,SAAS,sBAAsB;;;;;;;;;;qBCbnD;WACX;WACA;WACA;WACA;WACA;WACA;WACA;WACA;WACA;;YAEU,oBAAoB,wBAAwB;;;;qBAK3C;WACX;WACA;WACA;WACA;WACA;WACA;;YAEU,gBAAgB,oBAAoB;;;;qBAKnC;WACX;WACA;WACA;WACA;WACA;WACA;WACA;;YAEU,kBAAkB,sBAAsB;;;;qBAKvC;WACX;WACA;WACA;WACA;;YAEU,2BAA2B,+BAA+B;;;UCrCrD;EACf;EACA;EACA;EACA;;EAEA;;UAGe;EACf;EACA;;EAEA;;UAGe;EACf;EACA;;EAEA;;UAGe;EACf;EACA;EACA;;EAEA;;EAEA;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA;;UAGe;EACf;EACA;EACA;;UAGe;EACf;EACA;EACA;EACA,WAAW;EACX;EACA,UAAU;EACV,UAAU;EACV,QAAQ;EACR,OAAO;EACP,MAAM;EACN,SAAS;EACT,WAAW;EACX;EACA,QAAQ;;EAER;;;KAIG;;KAGA,cAAc,cAAc,WAAW;qBAqB/B;mBAIQ;mBACA;UAJX;EAER,YACmB,mBACA,WAAW;EAG9B,IAAI,UAAU,aAAa,KAAK,GAAG,OAAO,UAAU;EAKpD,MAAM,KAAK,QAAQ;EAMnB,SAAS;UAUD;;;;KC9IE,SAAS,KAAK;UAkBT;EACf;EACA;;;;;;;wBA8Dc,aAAa,0BAA0B,gBAAgB;;;;;;;;;wBAmCvD,aAAa,OAAO;;;UCpF1B;EACR,OAAO;EACP,QAAQ;EACR,KAAK;EACL,UAAU;EACV,QAAQ;EACR;EACA,aAAa;EACb,mBAAmB;EACnB,aAAa;;qBAiCF;mBAIkB;mBAHZ;mBACA;EAEjB,YAA6B,MAAM;EAK7B,QAAQ,QAAQ,mBAAmB,wBAAwB;;;;;;;UA8KnD;;;;;UAaN;;;;qBCpQG,mCAAmC;mBAGjB;mBAFZ;EAEjB,YAA6B,OAAO;EAE9B,MAAM,qBAAqB,qBAAqB,QAAQ;EAoBxD,MAAM,sBAAsB;;qBAUvB,sCAAsC;mBAChC;EAEX,MAAM,qBAAqB,qBAAqB,QAAQ;EAYxD,MAAM,sBAAsB;EAIlC;;;;qBCpDW,sCAAsC;mBAI9B;mBACA;UAJX;EAER,YACmB,mBACA;UAGX;EAOF,MAAM,qBAAqB,qBAAqB,QAAQ;EA6BxD,MAAM,sBAAsB;;;;UCnDnB;EACf;EACA;EACA,SAAS;EACT;;UAGe;EACf;EACA;;KAGU,yBAAyB,SAAS,sBAAsB,QAAQ;UAE3D;EACf;EACA;EACA;EACA,SAAS;;qBASE,6BAA6B,SAAS;mBAChC;mBACA;mBACA;mBACA;EAEjB,YAAY,MAAM;EAOZ,MAAM,KAAK,uBAAuB;;qBAwB7B,2BAA2B,SAAS;WACtC,SAAS;EAEZ,MAAM,KAAK,uBAAuB;;;;;;;;qBC6F7B,0BAA0B;mBAIlB;mBACA;mBAJF;EAEjB,YACmB,gBACA;EAKb,QAAQ,SAAS,cAAc,QAAQ,4BAA4B,QAAQ;UAWnE;UAWA;;;;;;qBA6BH,0BAA0B;mBAElB;mBACA;EAFnB,YACmB,gBACA;EAGb,QAAQ,SAAS,cAAc,QAAQ,4BAA4B,QAAQ;;;;;;qBA4BtE,2BAA2B;WAC7B,SAAS;IAAQ,SAAS;;EAE7B,QAAQ,SAAS,cAAc,SAAS,4BAA4B,QAAQ;;;;;;UAuB1E;EACR;EACA;;wBA+Mc,kBAAkB,kBAAkB,gBAAgB,gBAAgB,UAAU,kBAAkB;;;aC1dpG;EACV;EACA;EACA;EACA;;cAqDI,cAAY,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8Gd,EAAA,KAAA;KAEQ,SAAS,EAAE,aAAa;wBAEd,cAAc,QAAQ;;;qBC7L/B;mBACM;UACT;;;;;EAMR,SAAS,iBAAiB,UAAU;;;;EAOpC,WAAW,UAAU;;;;;;;EAUrB,QAAQ,kBAAkB;;;;EAgB1B,IAAI;;;;;;;;;;;;;;;wBCMU,eAAe,QAAQ,SAAS;;;;;;;;;wBC5ChC,4BAA4B,SAAS,SAAS;;;;;;;;;;qBCEjD,qCAAqC;EAC1C,OAAO,SAAS,wBAAwB,QAAQ;;;;qBCY3C,yBAAyB;mBAEjB;mBACA;EAFnB,YACmB,kBACA;EAGb,KAAK,SAAS,cAAc,UAAU,oBAAoB,oBAAoB,QAAQ;UAoCpF;UAoFA;;qBA4BG,2BAA2B;WAC7B,MAAM;IACb,SAAS;IACT,UAAU;;EAGN,KAAK,SAAS,cAAc,UAAU,oBAAoB,oBAAoB,QAAQ;;;;qBC7KjF,2BAA2B;EACtC,YAAY;;qBAsJD,yBAAyB;mBAOjB;mBACA;mBAJF;EAEjB,YACmB,oBACA;EAab,KAAK,SAAS,cAAc,UAAU,oBAAoB,oBAAoB,QAAQ;;;;qBCvHjF,2BAA2B;mBAEnB;mBACA;EAFnB,YACmB,UAAU,iBACV,iBAAiB;;EAI9B,KACJ,SAAS,cACT,UAAU,oBACV,mBACC,QAAQ;;;;;;;;;;;EAiBL,gBACJ,SAAS,cACT,UAAU,oBACV,SAAS,eACR;;;;;UAqDW;;;;;UAYN;;;;UClJO;EACf;EACA;EACA;;qBAGW,yBAAyB;mBAIjB;mBACA;UAJX;EAER,YACmB,kBACA;UAGX;EAOF,YAAY,QAAQ,oBAAoB;EAWxC,QAAQ,OAAO,kBAAkB;;qBAqB5B,8BAA8B;WAChC,WAAW;EAEd,QAAQ,OAAO,kBAAkB;;;;wBC7DzB,kBACd,kBACA,oBACA;;;qBCLW,+BAA+B;mBAEvB;mBACA;EAFnB,YACmB,iBACA;EAGb,cAAc,kBAAkB,QAAQ;UAmBtC;UASA;;qBAaG,+BAA+B;mBACb;EAA7B,YAA6B,WAAU,YAAY;EAE7C,cAAc,kBAAkB,QAAQ;EAI9C,WAAW,iBAAiB,OAAO;;;;;;;;;;wBChDrB,gBAAgB,qBAAqB;;;KCLhD,aAAa,SAAS,cAAc,WAAW;;;;;;;;;wBA6FpC,iBAAiB,WAAW,yBAAyB;;;;;;;;;;wBC7DrD,gBAAgB,SAAS,eAAe;;;qBCrB3C,sBAAsB;mBAChB;mBACA;EAEjB,YAAY,QAAQ;;;;;;EAUpB,eAAe,SAAS,eAAe;;;;;;EASvC,gBACE,SAAS,cACT,UAAU,cACT;UAMK;UAQA;;;;qBCxDG,gBAAgB;mBACV;UACT;;;;;EAQR,SAAS,aAAa,eAAe;;;;EAOrC,gBAAgB,eAAe;;;;;EAQ/B,QAAQ,cAAc;;;;EAWtB,IAAI;;;;EAOJ;;;;;;;;;wBCkDoB,aAAa"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { a as __toCommonJS, i as __require, n as __esmMin, o as __toESM, r as __exportAll, t as __commonJSMin } from "./rolldown-runtime-BMI-E3GI.js";
|
|
2
|
-
import { dedupDuplicate,
|
|
2
|
+
import { dedupDuplicate, dedupFailoverTotal, dedupNew, llmInferenceDuration, llmInferenceTotal, notificationsTotal, sqsQueueLag, suppressedClusters, t as metrics_exports } from "./shared/metrics/index.js";
|
|
3
3
|
import { $ as booleanSelector, $t as ServiceException, A as BinaryDecisionDiagram, An as isValidHostLabel, B as NODE_REGION_CONFIG_FILE_OPTIONS, C as isIpAddress, Ct as dateToUtcString, Dt as parseRfc7231DateTime, E as EndpointError, En as normalizeProvider$1, Et as parseRfc3339DateTimeWithOffset, F as init_config$1, Fn as hasOwn, G as NODE_USE_FIPS_ENDPOINT_CONFIG_OPTIONS, H as REGION_ENV_NAME, Ht as NoOpLogger, It as fromBase64, Jt as resolveDefaultRuntimeConfig, Kt as getDefaultExtensionConfiguration, L as resolveDefaultsModeConfig, Ln as getSmithyContext, N as resolveParams, Nn as HttpRequest, Nt as toBase64, O as EndpointCache, On as isValidHostname, Ot as expectUnion, P as config_exports, Pt as fromUtf8, Qt as loadConfigsForDefaultMode, Rt as client_exports$1, Sn as parseUrl, Tt as parseEpochTimestamp, U as REGION_INI_NAME, V as NODE_REGION_CONFIG_OPTIONS, Vt as makeBuilder, Wt as getValueFromTextNode, X as loadConfig$1, Yt as emitWarningIfUnsupportedVersion$1, Z as SelectorType, _ as resolveEndpointConfig, _t as _parseRfc7231DateTime, b as decideEndpoint, bn as init_transport, bt as quoteHeader, c as generateIdempotencyToken, cn as TypeRegistry, ct as NumericValue, d as v4, en as decorateServiceException, ft as splitHeader, g as init_endpoints, gn as deref, gt as _parseRfc3339DateTimeWithOffset, h as getEndpointPlugin, ht as _parseEpochTimestamp, in as Command, jn as HttpResponse, jt as toUtf8, l as init_serde, m as endpoints_exports, mn as getSchemaSerdePlugin, mt as splitEvery, n as init_checksum, nn as createAggregatedClient, on as init_schema, p as sdkStreamMixin, pn as translateTraits, q as NODE_USE_DUALSTACK_ENDPOINT_CONFIG_OPTIONS, r as Sha256Node, rt as calculateBodyLength, s as Uint8ArrayBlobAdapter, sn as schema_exports, t as checksum_exports, tt as ProviderError, u as serde_exports, un as NormalizedSchema, ut as nv, vn as Client, w as customEndpointFunctions, wn as parseQueryString, xt as LazyJsonString, y as resolveEndpoint, z as resolveRegionConfig, zn as require_dist_cjs$17, zt as init_client$1 } from "./checksum-Bbvsykod.js";
|
|
4
4
|
import { z } from "zod";
|
|
5
5
|
import { createHash, randomUUID } from "node:crypto";
|
|
6
6
|
import pino from "pino";
|
|
7
7
|
import { Readable, Writable } from "node:stream";
|
|
8
|
+
import { DeleteItemCommand, DynamoDBClient, PutItemCommand } from "@aws-sdk/client-dynamodb";
|
|
8
9
|
import * as Breaker from "opossum";
|
|
9
10
|
import { readFileSync } from "node:fs";
|
|
10
11
|
import { YAMLParseError, parse } from "yaml";
|
|
@@ -808,6 +809,7 @@ var ProcessIncidentUseCase = class {
|
|
|
808
809
|
latencyMs: Date.now() - notifyStartMs
|
|
809
810
|
});
|
|
810
811
|
builder.set("error", toErrorSection(err));
|
|
812
|
+
await this.releaseDedupClaim(cluster.fingerprint);
|
|
811
813
|
this.emit(builder, Outcome.Error, clusterStartMs);
|
|
812
814
|
throw err;
|
|
813
815
|
}
|
|
@@ -820,6 +822,22 @@ var ProcessIncidentUseCase = class {
|
|
|
820
822
|
}
|
|
821
823
|
}
|
|
822
824
|
/**
|
|
825
|
+
* Releases the dedup claim so an SQS retry is not discarded as a duplicate.
|
|
826
|
+
* Concurrency: safe without a lock — sqs.adapter.ts sets messageGroupId to
|
|
827
|
+
* the fingerprint, so SQS FIFO serialises delivery per fingerprint and two
|
|
828
|
+
* runs for the same fingerprint are never in flight simultaneously.
|
|
829
|
+
*/
|
|
830
|
+
async releaseDedupClaim(fingerprint) {
|
|
831
|
+
try {
|
|
832
|
+
await this.deps.dedup.reset(fingerprint);
|
|
833
|
+
} catch (err) {
|
|
834
|
+
this.deps.logger.warn({
|
|
835
|
+
err,
|
|
836
|
+
fingerprint
|
|
837
|
+
}, "Failed to release dedup claim; retry may be suppressed");
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
/**
|
|
823
841
|
* Flushes the builder into a final event, applies tail sampling, redacts
|
|
824
842
|
* PII, and emits the single canonical log line for the cluster.
|
|
825
843
|
*/
|
|
@@ -832,7 +850,7 @@ var ProcessIncidentUseCase = class {
|
|
|
832
850
|
};
|
|
833
851
|
//#endregion
|
|
834
852
|
//#region src/infrastructure/dedup/redis-dedup.adapter.ts
|
|
835
|
-
const logger$
|
|
853
|
+
const logger$7 = createLogger();
|
|
836
854
|
var RedisDeduplicationStore = class {
|
|
837
855
|
redis;
|
|
838
856
|
keyPrefix = "junando:dedup:";
|
|
@@ -847,11 +865,11 @@ var RedisDeduplicationStore = class {
|
|
|
847
865
|
};
|
|
848
866
|
} catch (err) {
|
|
849
867
|
const message = err instanceof Error ? err.message : String(err);
|
|
850
|
-
logger$
|
|
868
|
+
logger$7.warn({
|
|
851
869
|
err,
|
|
852
870
|
fingerprint
|
|
853
871
|
}, "Redis dedup check failed, failing open");
|
|
854
|
-
|
|
872
|
+
dedupFailoverTotal.inc();
|
|
855
873
|
return {
|
|
856
874
|
isNew: true,
|
|
857
875
|
ttlSeconds,
|
|
@@ -886,6 +904,63 @@ var InMemoryDeduplicationStore = class {
|
|
|
886
904
|
}
|
|
887
905
|
};
|
|
888
906
|
//#endregion
|
|
907
|
+
//#region src/infrastructure/dedup/dynamodb-dedup.adapter.ts
|
|
908
|
+
const logger$6 = createLogger();
|
|
909
|
+
const CONDITION_EXPRESSION = "attribute_not_exists(fingerprint) OR expiresAt < :now";
|
|
910
|
+
var DynamoDBDeduplicationStore = class {
|
|
911
|
+
tableName;
|
|
912
|
+
region;
|
|
913
|
+
client = null;
|
|
914
|
+
constructor(tableName, region) {
|
|
915
|
+
this.tableName = tableName;
|
|
916
|
+
this.region = region;
|
|
917
|
+
}
|
|
918
|
+
getClient() {
|
|
919
|
+
if (!this.client) this.client = new DynamoDBClient(this.region ? { region: this.region } : {});
|
|
920
|
+
return this.client;
|
|
921
|
+
}
|
|
922
|
+
async isNew(fingerprint, ttlSeconds) {
|
|
923
|
+
const nowSec = Math.floor(Date.now() / 1e3);
|
|
924
|
+
try {
|
|
925
|
+
await this.getClient().send(new PutItemCommand({
|
|
926
|
+
TableName: this.tableName,
|
|
927
|
+
Item: {
|
|
928
|
+
fingerprint: { S: fingerprint },
|
|
929
|
+
expiresAt: { N: String(nowSec + ttlSeconds) }
|
|
930
|
+
},
|
|
931
|
+
ConditionExpression: CONDITION_EXPRESSION,
|
|
932
|
+
ExpressionAttributeValues: { ":now": { N: String(nowSec) } }
|
|
933
|
+
}));
|
|
934
|
+
return {
|
|
935
|
+
isNew: true,
|
|
936
|
+
ttlSeconds
|
|
937
|
+
};
|
|
938
|
+
} catch (err) {
|
|
939
|
+
if (err instanceof Error && err.name === "ConditionalCheckFailedException") return {
|
|
940
|
+
isNew: false,
|
|
941
|
+
ttlSeconds
|
|
942
|
+
};
|
|
943
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
944
|
+
logger$6.warn({
|
|
945
|
+
err,
|
|
946
|
+
fingerprint
|
|
947
|
+
}, "DynamoDB dedup check failed, failing open");
|
|
948
|
+
dedupFailoverTotal.inc();
|
|
949
|
+
return {
|
|
950
|
+
isNew: true,
|
|
951
|
+
ttlSeconds,
|
|
952
|
+
error: message
|
|
953
|
+
};
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
async reset(fingerprint) {
|
|
957
|
+
await this.getClient().send(new DeleteItemCommand({
|
|
958
|
+
TableName: this.tableName,
|
|
959
|
+
Key: { fingerprint: { S: fingerprint } }
|
|
960
|
+
}));
|
|
961
|
+
}
|
|
962
|
+
};
|
|
963
|
+
//#endregion
|
|
889
964
|
//#region src/infrastructure/indexer/opensearch.adapter.ts
|
|
890
965
|
var OpenSearchIndexer = class {
|
|
891
966
|
endpoint;
|
|
@@ -35659,6 +35734,8 @@ async function loadSecretsFromSSM() {
|
|
|
35659
35734
|
const key = param.Name.replace(`${prefix}/`, "").replaceAll("-", "_").toUpperCase();
|
|
35660
35735
|
process.env[key] = param.Value;
|
|
35661
35736
|
}
|
|
35737
|
+
const missing = result.InvalidParameters ?? [];
|
|
35738
|
+
if (missing.length > 0) createLogger().warn({ missingParameters: missing }, "SSM parameters not found");
|
|
35662
35739
|
} catch (err) {
|
|
35663
35740
|
createLogger().error({ err }, "Failed to load SSM parameters");
|
|
35664
35741
|
}
|
|
@@ -35680,7 +35757,9 @@ const ConfigSchema = z.object({
|
|
|
35680
35757
|
rollbackActionAllowedSlackUserIds: z.array(z.string()).optional(),
|
|
35681
35758
|
teamsWebhookUrl: z.string().url().optional(),
|
|
35682
35759
|
lokiUrl: z.string().optional().transform((v) => v === "" ? void 0 : v),
|
|
35683
|
-
|
|
35760
|
+
dedupStore: z.enum(["dynamodb", "redis"]).default("dynamodb"),
|
|
35761
|
+
dedupTableName: z.string().min(1).optional(),
|
|
35762
|
+
redisUrl: z.string().url().optional(),
|
|
35684
35763
|
sqsQueueUrl: z.string().url().optional().or(z.literal("")),
|
|
35685
35764
|
dedupTtlSeconds: z.coerce.number().int().positive().default(300),
|
|
35686
35765
|
clusterWindowMs: z.coerce.number().int().positive().default(12e4),
|
|
@@ -35741,6 +35820,16 @@ const ConfigSchema = z.object({
|
|
|
35741
35820
|
});
|
|
35742
35821
|
}
|
|
35743
35822
|
}
|
|
35823
|
+
if (data.dedupStore === "dynamodb" && !data.dedupTableName) ctx.addIssue({
|
|
35824
|
+
code: z.ZodIssueCode.custom,
|
|
35825
|
+
path: ["dedupTableName"],
|
|
35826
|
+
message: "[dedupStore: dynamodb] DEDUP_TABLE_NAME is required"
|
|
35827
|
+
});
|
|
35828
|
+
if (data.dedupStore === "redis" && !data.redisUrl) ctx.addIssue({
|
|
35829
|
+
code: z.ZodIssueCode.custom,
|
|
35830
|
+
path: ["redisUrl"],
|
|
35831
|
+
message: "[dedupStore: redis] REDIS_URL is required"
|
|
35832
|
+
});
|
|
35744
35833
|
});
|
|
35745
35834
|
async function loadConfig() {
|
|
35746
35835
|
await loadSecretsFromSSM();
|
|
@@ -35755,6 +35844,8 @@ async function loadConfig() {
|
|
|
35755
35844
|
teamsWebhookUrl: process.env["TEAMS_WEBHOOK_URL"],
|
|
35756
35845
|
lokiUrl: process.env["LOKI_URL"],
|
|
35757
35846
|
redisUrl: process.env["REDIS_URL"],
|
|
35847
|
+
dedupStore: process.env["DEDUP_STORE"],
|
|
35848
|
+
dedupTableName: process.env["DEDUP_TABLE_NAME"],
|
|
35758
35849
|
sqsQueueUrl: process.env["SQS_QUEUE_URL"],
|
|
35759
35850
|
dedupTtlSeconds: process.env["DEDUP_TTL_SECONDS"],
|
|
35760
35851
|
clusterWindowMs: process.env["CLUSTER_WINDOW_MS"],
|
|
@@ -35773,6 +35864,6 @@ async function loadConfig() {
|
|
|
35773
35864
|
return result.data;
|
|
35774
35865
|
}
|
|
35775
35866
|
//#endregion
|
|
35776
|
-
export { ALERT_TYPE_LABELS, AlertClusterSchema, AlertStatusSchema, AlertType, AlertmanagerPayloadSchema, CIRCUIT_BREAKER, ChannelRegistry, ClaudeProvider, ClusteringService, Component, ConsoleNotifier, DEDUP_TTL_MS_MULTIPLIER, DEV_SERVER_PORT, FactoryRegistry, Fingerprint, GeminiProvider, HOUR_MS, HTTP_TIMEOUT_MS, InMemoryAlertQueue, InMemoryDeduplicationStore, InMemoryIndexer, IncidentSchema, LLMAnalysisSchema, LLMProviderType, LLM_FALLBACK_DEFAULTS, LLM_MAX_TOKENS, LLM_MODELS, LokiTraceRepository, MockLLMProvider, MockTraceRepository, NoopRollbackActionHandler, NormalizedAlertSchema, NotifyOutcome, OpenSearchIndexer, Outcome, PAYLOAD_DEFAULTS, ProcessIncidentUseCase, RATE_LIMITER, REDIS_KEY_PREFIX, ROLLBACK_ACTION_ID, RedisDeduplicationStore, RoutingNotifier, RuleActionSchema, RuleActionType, RuleConditionSchema, RuleConfigurationSchema, RuleEngine, RuleEvaluationPhase, RuleSchema, RuleSectionSchema, SLACK_API_URL, SQSAlertQueue, SamplingDecision, SeverityLevel, SlackNotifier, Stage, TEAMS_WEBHOOK_TIMEOUT_MS, TeamsNotifier, TeamsNotifierError, URGENCY_EMOJI, UrgencyLevelSchema, WEBHOOK_DEFAULTS, WideEventBuilder, compileCondition, createLLMProvider, createLogger, createNotifier, createRollbackActionHandler, dispatchActions, flushLoki, loadConfig, metrics_exports as metrics, normalizePayload, parseRuleConfig, reinitLogger, startSqsLagPoller };
|
|
35867
|
+
export { ALERT_TYPE_LABELS, AlertClusterSchema, AlertStatusSchema, AlertType, AlertmanagerPayloadSchema, CIRCUIT_BREAKER, ChannelRegistry, ClaudeProvider, ClusteringService, Component, ConsoleNotifier, DEDUP_TTL_MS_MULTIPLIER, DEV_SERVER_PORT, DynamoDBDeduplicationStore, FactoryRegistry, Fingerprint, GeminiProvider, HOUR_MS, HTTP_TIMEOUT_MS, InMemoryAlertQueue, InMemoryDeduplicationStore, InMemoryIndexer, IncidentSchema, LLMAnalysisSchema, LLMProviderType, LLM_FALLBACK_DEFAULTS, LLM_MAX_TOKENS, LLM_MODELS, LokiTraceRepository, MockLLMProvider, MockTraceRepository, NoopRollbackActionHandler, NormalizedAlertSchema, NotifyOutcome, OpenSearchIndexer, Outcome, PAYLOAD_DEFAULTS, ProcessIncidentUseCase, RATE_LIMITER, REDIS_KEY_PREFIX, ROLLBACK_ACTION_ID, RedisDeduplicationStore, RoutingNotifier, RuleActionSchema, RuleActionType, RuleConditionSchema, RuleConfigurationSchema, RuleEngine, RuleEvaluationPhase, RuleSchema, RuleSectionSchema, SLACK_API_URL, SQSAlertQueue, SamplingDecision, SeverityLevel, SlackNotifier, Stage, TEAMS_WEBHOOK_TIMEOUT_MS, TeamsNotifier, TeamsNotifierError, URGENCY_EMOJI, UrgencyLevelSchema, WEBHOOK_DEFAULTS, WideEventBuilder, compileCondition, createLLMProvider, createLogger, createNotifier, createRollbackActionHandler, dispatchActions, flushLoki, loadConfig, metrics_exports as metrics, normalizePayload, parseRuleConfig, reinitLogger, startSqsLagPoller };
|
|
35777
35868
|
|
|
35778
35869
|
//# sourceMappingURL=index.js.map
|