@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.
- package/dist/constants/incidentCategories.d.ts +38 -9
- package/dist/constants/incidentCategories.d.ts.map +1 -1
- package/dist/constants/incidentCategories.js +70 -10
- package/dist/constants/incidentCategories.js.map +1 -1
- package/dist/controllers/incident.controller.d.ts.map +1 -1
- package/dist/controllers/incident.controller.js +10 -1
- package/dist/controllers/incident.controller.js.map +1 -1
- package/dist/database/schema.d.ts +114 -1
- package/dist/database/schema.d.ts.map +1 -1
- package/dist/database/schema.js +22 -3
- package/dist/database/schema.js.map +1 -1
- package/dist/features/sla/domain/sla.defaults.d.ts +9 -5
- package/dist/features/sla/domain/sla.defaults.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.defaults.js +24 -9
- package/dist/features/sla/domain/sla.defaults.js.map +1 -1
- package/dist/features/sla/domain/sla.evaluator.d.ts +22 -2
- package/dist/features/sla/domain/sla.evaluator.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.evaluator.js +24 -3
- package/dist/features/sla/domain/sla.evaluator.js.map +1 -1
- package/dist/features/sla/domain/sla.resolver.d.ts +41 -9
- package/dist/features/sla/domain/sla.resolver.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.resolver.js +91 -23
- package/dist/features/sla/domain/sla.resolver.js.map +1 -1
- package/dist/features/sla/domain/sla.types.d.ts +32 -11
- package/dist/features/sla/domain/sla.types.d.ts.map +1 -1
- package/dist/features/sla/domain/sla.types.js +1 -0
- package/dist/features/sla/domain/sla.types.js.map +1 -1
- package/dist/features/sla/sla-policy.model.d.ts +10 -3
- package/dist/features/sla/sla-policy.model.d.ts.map +1 -1
- package/dist/features/sla/sla-policy.model.js +23 -9
- package/dist/features/sla/sla-policy.model.js.map +1 -1
- package/dist/features/sla/sla-policy.service.d.ts +12 -3
- package/dist/features/sla/sla-policy.service.d.ts.map +1 -1
- package/dist/features/sla/sla-policy.service.js +50 -13
- package/dist/features/sla/sla-policy.service.js.map +1 -1
- package/dist/features/sla/sla.schema.d.ts +70 -5
- package/dist/features/sla/sla.schema.d.ts.map +1 -1
- package/dist/features/sla/sla.schema.js +20 -3
- package/dist/features/sla/sla.schema.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/migrations/run.d.ts.map +1 -1
- package/dist/migrations/run.js +137 -7
- package/dist/migrations/run.js.map +1 -1
- package/dist/models/incident.model.d.ts +44 -2
- package/dist/models/incident.model.d.ts.map +1 -1
- package/dist/models/incident.model.js +121 -21
- package/dist/models/incident.model.js.map +1 -1
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +2 -1
- package/dist/server.js.map +1 -1
- package/dist/service.d.ts +26 -2
- package/dist/service.d.ts.map +1 -1
- package/dist/service.js +13 -1
- package/dist/service.js.map +1 -1
- package/dist/services/incident.service.d.ts +42 -2
- package/dist/services/incident.service.d.ts.map +1 -1
- package/dist/services/incident.service.js +95 -13
- package/dist/services/incident.service.js.map +1 -1
- package/dist/services/retention.service.d.ts +63 -0
- package/dist/services/retention.service.d.ts.map +1 -0
- package/dist/services/retention.service.js +264 -0
- package/dist/services/retention.service.js.map +1 -0
- package/package.json +2 -1
|
@@ -1,50 +1,68 @@
|
|
|
1
1
|
import type { IncidentPriority } from "../../incident-priority/priority.types.js";
|
|
2
|
+
import type { IncidentGroup } from "../../../constants/incidentCategories.js";
|
|
2
3
|
/** Where an effective SLA policy came from. */
|
|
3
4
|
export type SlaPolicySource = "account" | "default";
|
|
4
|
-
/**
|
|
5
|
+
/** Which target rows a stored limit belongs to: the account default, or one incident group's override. */
|
|
6
|
+
export type SlaTargetGroup = "default" | IncidentGroup;
|
|
7
|
+
export declare const SLA_TARGET_GROUPS: readonly SlaTargetGroup[];
|
|
8
|
+
/** "standard" when every stored value equals the standard preset; otherwise "custom". */
|
|
9
|
+
export type SlaPreset = "standard" | "custom";
|
|
10
|
+
/** Acknowledge and resolve limits for one priority. A null resolve limit means "best effort". */
|
|
5
11
|
export interface SlaTarget {
|
|
6
12
|
ackMinutes: number;
|
|
7
|
-
resolveMinutes: number;
|
|
13
|
+
resolveMinutes: number | null;
|
|
8
14
|
}
|
|
9
15
|
/** Limits for every priority; an enabled account always has all four. */
|
|
10
16
|
export type SlaTargets = Record<IncidentPriority, SlaTarget>;
|
|
11
|
-
/**
|
|
17
|
+
/** Per-group overrides of the account default. Only groups with their own values appear. */
|
|
18
|
+
export type SlaOverrides = Partial<Record<IncidentGroup, SlaTargets>>;
|
|
19
|
+
/** The policy that applies to one incident: its account's settings resolved for the incident's group and priority. */
|
|
12
20
|
export interface SlaPolicy {
|
|
13
21
|
enabled: boolean;
|
|
14
22
|
priority: IncidentPriority;
|
|
15
23
|
ackMinutes: number;
|
|
16
|
-
resolveMinutes: number;
|
|
24
|
+
resolveMinutes: number | null;
|
|
17
25
|
source: SlaPolicySource;
|
|
26
|
+
/** The incident group the policy was resolved for. */
|
|
27
|
+
group?: IncidentGroup;
|
|
18
28
|
}
|
|
19
29
|
/** Persisted account-level switch (one row per tenant + AWS account). */
|
|
20
30
|
export interface SlaPolicyRecord {
|
|
21
31
|
tenantId: string;
|
|
22
32
|
accountId: string;
|
|
23
33
|
enabled: boolean;
|
|
34
|
+
/** Groups the account SLA applies to. Missing (pre-1.1.0 rows) = all groups. */
|
|
35
|
+
appliesTo?: string[] | null;
|
|
24
36
|
updatedBy: string | null;
|
|
25
37
|
updatedAt: Date | string | null;
|
|
26
38
|
}
|
|
27
|
-
/** Persisted limits for one priority of one account. */
|
|
39
|
+
/** Persisted limits for one priority of one account, for the default or one group override. */
|
|
28
40
|
export interface SlaTargetRecord {
|
|
29
41
|
tenantId: string;
|
|
30
42
|
accountId: string;
|
|
43
|
+
/** Missing (pre-1.1.0 rows) = "default". */
|
|
44
|
+
incidentGroup?: SlaTargetGroup | string | null;
|
|
31
45
|
priority: IncidentPriority;
|
|
32
46
|
ackMinutes: number;
|
|
33
|
-
resolveMinutes: number;
|
|
47
|
+
resolveMinutes: number | null;
|
|
34
48
|
}
|
|
35
49
|
/** An account's whole SLA configuration, as the API presents it. */
|
|
36
50
|
export interface AccountSlaConfig {
|
|
37
51
|
accountId: string;
|
|
38
52
|
enabled: boolean;
|
|
39
53
|
source: SlaPolicySource;
|
|
54
|
+
preset: SlaPreset;
|
|
55
|
+
appliesTo: IncidentGroup[];
|
|
40
56
|
targets: SlaTargets;
|
|
57
|
+
overrides: SlaOverrides;
|
|
41
58
|
updatedBy: string | null;
|
|
42
59
|
updatedAt: Date | string | null;
|
|
43
60
|
}
|
|
44
|
-
export type SlaPhaseState = "met" | "met_late" | "pending" | "overdue" | "disabled";
|
|
61
|
+
export type SlaPhaseState = "met" | "met_late" | "pending" | "overdue" | "disabled" | "best_effort";
|
|
45
62
|
export interface SlaPhase {
|
|
46
63
|
state: SlaPhaseState;
|
|
47
|
-
|
|
64
|
+
/** Null when the phase has no limit (best effort). */
|
|
65
|
+
limitMinutes: number | null;
|
|
48
66
|
/** Minutes from creation until the phase completed (or until now while pending). */
|
|
49
67
|
elapsedMinutes: number | null;
|
|
50
68
|
/** Minutes left while pending; negative once overdue. Null when not pending. */
|
|
@@ -54,7 +72,7 @@ export interface SlaEvaluation {
|
|
|
54
72
|
policy: SlaPolicy;
|
|
55
73
|
ack: SlaPhase;
|
|
56
74
|
resolve: SlaPhase;
|
|
57
|
-
/** True when either phase is overdue or was completed late. */
|
|
75
|
+
/** True when either phase is overdue or was completed late. Best-effort phases never breach. */
|
|
58
76
|
breached: boolean;
|
|
59
77
|
}
|
|
60
78
|
/** Minimal incident shape the evaluator needs. */
|
|
@@ -65,8 +83,11 @@ export interface SlaIncidentInput {
|
|
|
65
83
|
ackedAt?: Date | string | null;
|
|
66
84
|
resolvedAt?: Date | string | null;
|
|
67
85
|
}
|
|
68
|
-
/**
|
|
69
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Resolves the effective policy for an incident's account, priority and group. Built once per request.
|
|
88
|
+
* `group` defaults to "operations" for callers that predate incident groups.
|
|
89
|
+
*/
|
|
90
|
+
export type SlaPolicyResolver = (accountId: string | null | undefined, priority: IncidentPriority, group?: IncidentGroup) => SlaPolicy;
|
|
70
91
|
/**
|
|
71
92
|
* Port used by incident code so it doesn't depend on persistence details.
|
|
72
93
|
* `tenantId` undefined yields a resolver that only returns defaults.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla.types.d.ts","sourceRoot":"","sources":["../../../../src/features/sla/domain/sla.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;
|
|
1
|
+
{"version":3,"file":"sla.types.d.ts","sourceRoot":"","sources":["../../../../src/features/sla/domain/sla.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla.types.js","sourceRoot":"","sources":["../../../../src/features/sla/domain/sla.types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sla.types.js","sourceRoot":"","sources":["../../../../src/features/sla/domain/sla.types.ts"],"names":[],"mappings":"AASA,MAAM,CAAC,MAAM,iBAAiB,GAA8B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC,CAAC;AA8GlI,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,UAAU,EAAE,CAAC;IACb,eAAe;IACf,UAAU,EAAE,MAAM;CACV,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { type IncidentGroup } from "../../constants/incidentCategories.js";
|
|
2
|
+
import type { SlaOverrides, SlaPolicyRecord, SlaTargetRecord, SlaTargets } from "./domain/sla.types.js";
|
|
2
3
|
/**
|
|
3
|
-
* Persistence for an account's SLA policy: the account-level switch
|
|
4
|
+
* Persistence for an account's SLA policy: the account-level switch, the groups it applies to, and its
|
|
5
|
+
* per-priority limits (account default plus optional per-group overrides).
|
|
4
6
|
* Every query is scoped by tenant_id; there are no business rules here.
|
|
5
7
|
*/
|
|
6
8
|
export declare class SlaPolicyModel {
|
|
@@ -16,12 +18,17 @@ export declare class SlaPolicyModel {
|
|
|
16
18
|
policy: SlaPolicyRecord | null;
|
|
17
19
|
targets: SlaTargetRecord[];
|
|
18
20
|
}>;
|
|
19
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
* Saves the switch and applies_to, and replaces every limit row (default + overrides) atomically,
|
|
23
|
+
* so an account is never half-saved.
|
|
24
|
+
*/
|
|
20
25
|
save(input: {
|
|
21
26
|
tenantId: string;
|
|
22
27
|
accountId: string;
|
|
23
28
|
enabled: boolean;
|
|
29
|
+
appliesTo: IncidentGroup[];
|
|
24
30
|
targets: SlaTargets;
|
|
31
|
+
overrides: SlaOverrides;
|
|
25
32
|
updatedBy: string | null;
|
|
26
33
|
}): Promise<{
|
|
27
34
|
policy: SlaPolicyRecord;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla-policy.model.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.model.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sla-policy.model.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.model.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC5F,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExG;;;;GAIG;AACH,qBAAa,cAAc;IAEvB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;gBAFP,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,GAAG,EACb,OAAO,EAAE,GAAG;IAGhB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;QAAC,OAAO,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAMpG,aAAa,CACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAa1E;;;OAGG;IACG,IAAI,CAAC,KAAK,EAAE;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;QACjB,SAAS,EAAE,aAAa,EAAE,CAAC;QAC3B,OAAO,EAAE,UAAU,CAAC;QACpB,SAAS,EAAE,YAAY,CAAC;QACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAiC9D,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAUjE"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { and, eq } from "drizzle-orm";
|
|
2
2
|
import { INCIDENT_PRIORITIES } from "../incident-priority/priority.types.js";
|
|
3
|
+
import { INCIDENT_GROUPS } from "../../constants/incidentCategories.js";
|
|
3
4
|
/**
|
|
4
|
-
* Persistence for an account's SLA policy: the account-level switch
|
|
5
|
+
* Persistence for an account's SLA policy: the account-level switch, the groups it applies to, and its
|
|
6
|
+
* per-priority limits (account default plus optional per-group overrides).
|
|
5
7
|
* Every query is scoped by tenant_id; there are no business rules here.
|
|
6
8
|
*/
|
|
7
9
|
export class SlaPolicyModel {
|
|
@@ -30,25 +32,37 @@ export class SlaPolicyModel {
|
|
|
30
32
|
.where(and(eq(this.targets.tenantId, tenantId), eq(this.targets.accountId, accountId)));
|
|
31
33
|
return { policy: policy ?? null, targets };
|
|
32
34
|
}
|
|
33
|
-
/**
|
|
35
|
+
/**
|
|
36
|
+
* Saves the switch and applies_to, and replaces every limit row (default + overrides) atomically,
|
|
37
|
+
* so an account is never half-saved.
|
|
38
|
+
*/
|
|
34
39
|
async save(input) {
|
|
35
|
-
const { tenantId, accountId, enabled, targets, updatedBy } = input;
|
|
40
|
+
const { tenantId, accountId, enabled, appliesTo, targets, overrides, updatedBy } = input;
|
|
41
|
+
const rowsFor = (incidentGroup, t) => INCIDENT_PRIORITIES.map((priority) => ({
|
|
42
|
+
tenantId,
|
|
43
|
+
accountId,
|
|
44
|
+
incidentGroup,
|
|
45
|
+
priority,
|
|
46
|
+
ackMinutes: t[priority].ackMinutes,
|
|
47
|
+
resolveMinutes: t[priority].resolveMinutes ?? null,
|
|
48
|
+
}));
|
|
49
|
+
const values = [
|
|
50
|
+
...rowsFor("default", targets),
|
|
51
|
+
...INCIDENT_GROUPS.flatMap((g) => (overrides[g] ? rowsFor(g, overrides[g]) : [])),
|
|
52
|
+
];
|
|
36
53
|
return this.db.transaction(async (tx) => {
|
|
37
54
|
const [policy] = await tx
|
|
38
55
|
.insert(this.policies)
|
|
39
|
-
.values({ tenantId, accountId, enabled, updatedBy })
|
|
56
|
+
.values({ tenantId, accountId, enabled, appliesTo, updatedBy })
|
|
40
57
|
.onConflictDoUpdate({
|
|
41
58
|
target: [this.policies.tenantId, this.policies.accountId],
|
|
42
|
-
set: { enabled, updatedBy, updatedAt: new Date() },
|
|
59
|
+
set: { enabled, appliesTo, updatedBy, updatedAt: new Date() },
|
|
43
60
|
})
|
|
44
61
|
.returning();
|
|
45
62
|
await tx
|
|
46
63
|
.delete(this.targets)
|
|
47
64
|
.where(and(eq(this.targets.tenantId, tenantId), eq(this.targets.accountId, accountId)));
|
|
48
|
-
const rows = await tx
|
|
49
|
-
.insert(this.targets)
|
|
50
|
-
.values(INCIDENT_PRIORITIES.map((priority) => ({ tenantId, accountId, priority, ...targets[priority] })))
|
|
51
|
-
.returning();
|
|
65
|
+
const rows = await tx.insert(this.targets).values(values).returning();
|
|
52
66
|
return { policy, targets: rows };
|
|
53
67
|
});
|
|
54
68
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla-policy.model.js","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"sla-policy.model.js","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.model.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,18 +6,27 @@ export declare class SlaError extends Error {
|
|
|
6
6
|
readonly details?: unknown;
|
|
7
7
|
constructor(status: 400 | 404, message: string, details?: unknown);
|
|
8
8
|
}
|
|
9
|
+
export interface SlaPolicyServiceOptions {
|
|
10
|
+
/**
|
|
11
|
+
* Connectors created at or after this instant are implicitly SLA-enabled (standard preset) when they
|
|
12
|
+
* have no saved policy. Undefined = read SLA_DEFAULT_ON_AFTER on each call; null = never.
|
|
13
|
+
*/
|
|
14
|
+
defaultOnAfter?: Date | null;
|
|
15
|
+
}
|
|
9
16
|
export declare class SlaPolicyService implements SlaPolicyProvider {
|
|
10
17
|
private model;
|
|
11
18
|
private connectors;
|
|
12
|
-
|
|
19
|
+
private options;
|
|
20
|
+
constructor(model: SlaPolicyModel, connectors: ConnectorService, options?: SlaPolicyServiceOptions);
|
|
21
|
+
private defaultOnAfter;
|
|
13
22
|
/** The account must be one of this tenant's connectors; prevents writing policies for foreign accounts. */
|
|
14
23
|
private assertConnector;
|
|
15
24
|
list(tenantId: string): Promise<AccountSlaConfig[]>;
|
|
16
25
|
get(tenantId: string, accountId: string): Promise<AccountSlaConfig>;
|
|
17
26
|
upsert(tenantId: string, accountId: string, input: unknown, actor: string | null): Promise<AccountSlaConfig>;
|
|
18
|
-
/** Removes the policy and its limits so the account falls back to
|
|
27
|
+
/** Removes the policy and its limits so the account falls back to its default (off, or implicit standard). */
|
|
19
28
|
reset(tenantId: string, accountId: string): Promise<AccountSlaConfig>;
|
|
20
|
-
/** One query pair per request
|
|
29
|
+
/** One query pair per request (plus connectors when SLA_DEFAULT_ON_AFTER is set). */
|
|
21
30
|
loadResolver(tenantId?: string): Promise<SlaPolicyResolver>;
|
|
22
31
|
}
|
|
23
32
|
//# sourceMappingURL=sla-policy.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla-policy.service.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sla-policy.service.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAS5D,OAAO,KAAK,EACV,gBAAgB,EAEhB,iBAAiB,EACjB,iBAAiB,EAGlB,MAAM,uBAAuB,CAAC;AAE/B,qBAAa,QAAS,SAAQ,KAAK;IAE/B,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG;IAE1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO;gBAFjB,MAAM,EAAE,GAAG,GAAG,GAAG,EAC1B,OAAO,EAAE,MAAM,EACN,OAAO,CAAC,EAAE,OAAO;CAI7B;AAaD,MAAM,WAAW,uBAAuB;IACtC;;;OAGG;IACH,cAAc,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CAC9B;AAED,qBAAa,gBAAiB,YAAW,iBAAiB;IAEtD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,OAAO;gBAFP,KAAK,EAAE,cAAc,EACrB,UAAU,EAAE,gBAAgB,EAC5B,OAAO,GAAE,uBAA4B;IAG/C,OAAO,CAAC,cAAc;IAKtB,2GAA2G;YAC7F,eAAe;IAMvB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAOnD,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQnE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAsBlH,8GAA8G;IACxG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAQ3E,qFAAqF;IAC/E,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAgBlE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SlaPolicyInputSchema } from "./sla.schema.js";
|
|
2
|
-
import { accountConfigFromRecords, createSlaResolver } from "./domain/sla.resolver.js";
|
|
2
|
+
import { accountConfigFromRecords, createSlaResolver, isImplicitlyEnabled, parseDefaultOnAfter, } from "./domain/sla.resolver.js";
|
|
3
|
+
import { INCIDENT_GROUPS } from "../../constants/incidentCategories.js";
|
|
3
4
|
export class SlaError extends Error {
|
|
4
5
|
status;
|
|
5
6
|
details;
|
|
@@ -9,23 +10,38 @@ export class SlaError extends Error {
|
|
|
9
10
|
this.details = details;
|
|
10
11
|
}
|
|
11
12
|
}
|
|
12
|
-
/** "P2: Resolve limit must be..." so the user can tell which
|
|
13
|
+
/** "P2: Resolve limit must be..." / "security P2: ..." so the user can tell which row is wrong. */
|
|
13
14
|
function describeIssue(issue) {
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
if (issue.path[0] === "targets" && issue.path[1] !== undefined)
|
|
16
|
+
return `${String(issue.path[1])}: ${issue.message}`;
|
|
17
|
+
if (issue.path[0] === "overrides" && issue.path[1] !== undefined) {
|
|
18
|
+
const priority = issue.path[2] !== undefined ? ` ${String(issue.path[2])}` : "";
|
|
19
|
+
return `${String(issue.path[1])}${priority}: ${issue.message}`;
|
|
20
|
+
}
|
|
21
|
+
if (issue.path[0] === "appliesTo")
|
|
22
|
+
return `appliesTo: ${issue.message}`;
|
|
23
|
+
return issue.message;
|
|
16
24
|
}
|
|
17
25
|
export class SlaPolicyService {
|
|
18
26
|
model;
|
|
19
27
|
connectors;
|
|
20
|
-
|
|
28
|
+
options;
|
|
29
|
+
constructor(model, connectors, options = {}) {
|
|
21
30
|
this.model = model;
|
|
22
31
|
this.connectors = connectors;
|
|
32
|
+
this.options = options;
|
|
33
|
+
}
|
|
34
|
+
defaultOnAfter() {
|
|
35
|
+
if (this.options.defaultOnAfter !== undefined)
|
|
36
|
+
return this.options.defaultOnAfter;
|
|
37
|
+
return parseDefaultOnAfter(process.env.SLA_DEFAULT_ON_AFTER);
|
|
23
38
|
}
|
|
24
39
|
/** The account must be one of this tenant's connectors; prevents writing policies for foreign accounts. */
|
|
25
40
|
async assertConnector(tenantId, accountId) {
|
|
26
41
|
const connector = await this.connectors.findByAccountId(tenantId, accountId);
|
|
27
42
|
if (!connector)
|
|
28
43
|
throw new SlaError(404, "Connector not found");
|
|
44
|
+
return connector;
|
|
29
45
|
}
|
|
30
46
|
async list(tenantId) {
|
|
31
47
|
const { policies, targets } = await this.model.listByTenant(tenantId);
|
|
@@ -35,9 +51,11 @@ export class SlaPolicyService {
|
|
|
35
51
|
return policies.map((p) => accountConfigFromRecords(p.accountId, p, byAccount.get(p.accountId) ?? []));
|
|
36
52
|
}
|
|
37
53
|
async get(tenantId, accountId) {
|
|
38
|
-
await this.assertConnector(tenantId, accountId);
|
|
54
|
+
const connector = await this.assertConnector(tenantId, accountId);
|
|
39
55
|
const { policy, targets } = await this.model.findByAccount(tenantId, accountId);
|
|
40
|
-
return accountConfigFromRecords(accountId, policy, targets
|
|
56
|
+
return accountConfigFromRecords(accountId, policy, targets, {
|
|
57
|
+
implicitlyEnabled: isImplicitlyEnabled(connector?.createdAt, this.defaultOnAfter()),
|
|
58
|
+
});
|
|
41
59
|
}
|
|
42
60
|
async upsert(tenantId, accountId, input, actor) {
|
|
43
61
|
const parsed = SlaPolicyInputSchema.safeParse(input);
|
|
@@ -46,22 +64,41 @@ export class SlaPolicyService {
|
|
|
46
64
|
throw new SlaError(400, first ? describeIssue(first) : "Invalid SLA policy", parsed.error.issues);
|
|
47
65
|
}
|
|
48
66
|
await this.assertConnector(tenantId, accountId);
|
|
49
|
-
const
|
|
67
|
+
const { enabled, targets, appliesTo, overrides } = parsed.data;
|
|
68
|
+
// The schema guarantees resolveMinutes is a number or null (the casts only bridge zod's inference
|
|
69
|
+
// without strictNullChecks).
|
|
70
|
+
const saved = await this.model.save({
|
|
71
|
+
tenantId,
|
|
72
|
+
accountId,
|
|
73
|
+
enabled,
|
|
74
|
+
targets: targets,
|
|
75
|
+
appliesTo: appliesTo ?? [...INCIDENT_GROUPS],
|
|
76
|
+
overrides: (overrides ?? {}),
|
|
77
|
+
updatedBy: actor,
|
|
78
|
+
});
|
|
50
79
|
return accountConfigFromRecords(accountId, saved.policy, saved.targets);
|
|
51
80
|
}
|
|
52
|
-
/** Removes the policy and its limits so the account falls back to
|
|
81
|
+
/** Removes the policy and its limits so the account falls back to its default (off, or implicit standard). */
|
|
53
82
|
async reset(tenantId, accountId) {
|
|
54
|
-
await this.assertConnector(tenantId, accountId);
|
|
83
|
+
const connector = await this.assertConnector(tenantId, accountId);
|
|
55
84
|
await this.model.delete(tenantId, accountId);
|
|
56
|
-
return accountConfigFromRecords(accountId, null, []
|
|
85
|
+
return accountConfigFromRecords(accountId, null, [], {
|
|
86
|
+
implicitlyEnabled: isImplicitlyEnabled(connector?.createdAt, this.defaultOnAfter()),
|
|
87
|
+
});
|
|
57
88
|
}
|
|
58
|
-
/** One query pair per request
|
|
89
|
+
/** One query pair per request (plus connectors when SLA_DEFAULT_ON_AFTER is set). */
|
|
59
90
|
async loadResolver(tenantId) {
|
|
60
91
|
if (!tenantId)
|
|
61
92
|
return createSlaResolver([], []);
|
|
62
93
|
try {
|
|
63
94
|
const { policies, targets } = await this.model.listByTenant(tenantId);
|
|
64
|
-
|
|
95
|
+
const defaultOnAfter = this.defaultOnAfter();
|
|
96
|
+
let connectorCreatedAt;
|
|
97
|
+
if (defaultOnAfter) {
|
|
98
|
+
const rows = await this.connectors.list(tenantId);
|
|
99
|
+
connectorCreatedAt = new Map(rows.map((c) => [c.accountId, c.createdAt ?? null]));
|
|
100
|
+
}
|
|
101
|
+
return createSlaResolver(policies, targets, { defaultOnAfter, connectorCreatedAt });
|
|
65
102
|
}
|
|
66
103
|
catch {
|
|
67
104
|
// Never break incident views because the policy tables are unavailable; fall back to defaults.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla-policy.service.js","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"sla-policy.service.js","sourceRoot":"","sources":["../../../src/features/sla/sla-policy.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,90 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
|
|
2
|
+
import { type IncidentGroup } from "../../constants/incidentCategories.js";
|
|
3
|
+
/**
|
|
4
|
+
* PUT /sla/policies/:accountId. `appliesTo` and `overrides` are optional so older clients keep working:
|
|
5
|
+
* omitted appliesTo = every group, omitted overrides = none.
|
|
6
|
+
*/
|
|
3
7
|
export declare const SlaPolicyInputSchema: z.ZodObject<{
|
|
4
8
|
enabled: z.ZodBoolean;
|
|
5
9
|
targets: z.ZodObject<{
|
|
6
10
|
P1: z.ZodObject<{
|
|
7
11
|
ackMinutes: z.ZodNumber;
|
|
8
|
-
resolveMinutes: z.ZodNumber
|
|
12
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
9
13
|
}, z.core.$strip>;
|
|
10
14
|
P2: z.ZodObject<{
|
|
11
15
|
ackMinutes: z.ZodNumber;
|
|
12
|
-
resolveMinutes: z.ZodNumber
|
|
16
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
13
17
|
}, z.core.$strip>;
|
|
14
18
|
P3: z.ZodObject<{
|
|
15
19
|
ackMinutes: z.ZodNumber;
|
|
16
|
-
resolveMinutes: z.ZodNumber
|
|
20
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
17
21
|
}, z.core.$strip>;
|
|
18
22
|
P4: z.ZodObject<{
|
|
19
23
|
ackMinutes: z.ZodNumber;
|
|
20
|
-
resolveMinutes: z.ZodNumber
|
|
24
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
21
25
|
}, z.core.$strip>;
|
|
22
26
|
}, z.core.$strip>;
|
|
27
|
+
appliesTo: z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodEnum<{
|
|
28
|
+
operations: "operations";
|
|
29
|
+
security: "security";
|
|
30
|
+
cost: "cost";
|
|
31
|
+
}>>, z.ZodTransform<IncidentGroup[], ("operations" | "security" | "cost")[]>>>;
|
|
32
|
+
overrides: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
33
|
+
operations: z.ZodOptional<z.ZodObject<{
|
|
34
|
+
P1: z.ZodObject<{
|
|
35
|
+
ackMinutes: z.ZodNumber;
|
|
36
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
37
|
+
}, z.core.$strip>;
|
|
38
|
+
P2: z.ZodObject<{
|
|
39
|
+
ackMinutes: z.ZodNumber;
|
|
40
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
P3: z.ZodObject<{
|
|
43
|
+
ackMinutes: z.ZodNumber;
|
|
44
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
45
|
+
}, z.core.$strip>;
|
|
46
|
+
P4: z.ZodObject<{
|
|
47
|
+
ackMinutes: z.ZodNumber;
|
|
48
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
49
|
+
}, z.core.$strip>;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
security: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
P1: z.ZodObject<{
|
|
53
|
+
ackMinutes: z.ZodNumber;
|
|
54
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
55
|
+
}, z.core.$strip>;
|
|
56
|
+
P2: z.ZodObject<{
|
|
57
|
+
ackMinutes: z.ZodNumber;
|
|
58
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
59
|
+
}, z.core.$strip>;
|
|
60
|
+
P3: z.ZodObject<{
|
|
61
|
+
ackMinutes: z.ZodNumber;
|
|
62
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
P4: z.ZodObject<{
|
|
65
|
+
ackMinutes: z.ZodNumber;
|
|
66
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
cost: z.ZodOptional<z.ZodObject<{
|
|
70
|
+
P1: z.ZodObject<{
|
|
71
|
+
ackMinutes: z.ZodNumber;
|
|
72
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
73
|
+
}, z.core.$strip>;
|
|
74
|
+
P2: z.ZodObject<{
|
|
75
|
+
ackMinutes: z.ZodNumber;
|
|
76
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
P3: z.ZodObject<{
|
|
79
|
+
ackMinutes: z.ZodNumber;
|
|
80
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
P4: z.ZodObject<{
|
|
83
|
+
ackMinutes: z.ZodNumber;
|
|
84
|
+
resolveMinutes: z.ZodNullable<z.ZodNumber>;
|
|
85
|
+
}, z.core.$strip>;
|
|
86
|
+
}, z.core.$strip>>;
|
|
87
|
+
}, z.core.$strict>>>;
|
|
23
88
|
}, z.core.$strip>;
|
|
24
89
|
export type SlaPolicyInput = z.infer<typeof SlaPolicyInputSchema>;
|
|
25
90
|
//# sourceMappingURL=sla.schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla.schema.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"sla.schema.d.ts","sourceRoot":"","sources":["../../../src/features/sla/sla.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAqB5F;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAY/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
|
|
@@ -1,19 +1,36 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { SLA_LIMITS } from "./domain/sla.types.js";
|
|
3
|
+
import { INCIDENT_GROUPS } from "../../constants/incidentCategories.js";
|
|
3
4
|
const minutes = z
|
|
4
5
|
.number()
|
|
5
6
|
.int("Must be a whole number of minutes")
|
|
6
7
|
.min(SLA_LIMITS.minMinutes, `Must be at least ${SLA_LIMITS.minMinutes} minute`)
|
|
7
8
|
.max(SLA_LIMITS.maxMinutes, `Must be at most ${SLA_LIMITS.maxMinutes} minutes (30 days)`);
|
|
9
|
+
/** resolveMinutes: minutes, or null for "best effort". ackMinutes is always required. */
|
|
8
10
|
const target = z
|
|
9
|
-
.object({ ackMinutes: minutes, resolveMinutes: minutes })
|
|
10
|
-
.refine((v) => v.resolveMinutes >= v.ackMinutes, {
|
|
11
|
+
.object({ ackMinutes: minutes, resolveMinutes: minutes.nullable() })
|
|
12
|
+
.refine((v) => v.resolveMinutes === null || v.resolveMinutes >= v.ackMinutes, {
|
|
11
13
|
message: "Resolve limit must be greater than or equal to the acknowledge limit",
|
|
12
14
|
path: ["resolveMinutes"],
|
|
13
15
|
});
|
|
14
16
|
/** Every priority is required, so an enabled account always has complete limits. */
|
|
17
|
+
const targets = z.object({ P1: target, P2: target, P3: target, P4: target });
|
|
18
|
+
const groupEnum = z.enum(INCIDENT_GROUPS);
|
|
19
|
+
/**
|
|
20
|
+
* PUT /sla/policies/:accountId. `appliesTo` and `overrides` are optional so older clients keep working:
|
|
21
|
+
* omitted appliesTo = every group, omitted overrides = none.
|
|
22
|
+
*/
|
|
15
23
|
export const SlaPolicyInputSchema = z.object({
|
|
16
24
|
enabled: z.boolean(),
|
|
17
|
-
targets
|
|
25
|
+
targets,
|
|
26
|
+
appliesTo: z
|
|
27
|
+
.array(groupEnum)
|
|
28
|
+
.transform((groups) => INCIDENT_GROUPS.filter((g) => groups.includes(g)))
|
|
29
|
+
.optional(),
|
|
30
|
+
overrides: z
|
|
31
|
+
.object({ operations: targets.optional(), security: targets.optional(), cost: targets.optional() })
|
|
32
|
+
.strict()
|
|
33
|
+
.nullable()
|
|
34
|
+
.optional(),
|
|
18
35
|
});
|
|
19
36
|
//# sourceMappingURL=sla.schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sla.schema.js","sourceRoot":"","sources":["../../../src/features/sla/sla.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"sla.schema.js","sourceRoot":"","sources":["../../../src/features/sla/sla.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAsB,MAAM,uCAAuC,CAAC;AAE5F,MAAM,OAAO,GAAG,CAAC;KACd,MAAM,EAAE;KACR,GAAG,CAAC,mCAAmC,CAAC;KACxC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,oBAAoB,UAAU,CAAC,UAAU,SAAS,CAAC;KAC9E,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,mBAAmB,UAAU,CAAC,UAAU,oBAAoB,CAAC,CAAC;AAE5F,yFAAyF;AACzF,MAAM,MAAM,GAAG,CAAC;KACb,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;KACnE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,UAAU,EAAE;IAC5E,OAAO,EAAE,sEAAsE;IAC/E,IAAI,EAAE,CAAC,gBAAgB,CAAC;CACzB,CAAC,CAAC;AAEL,oFAAoF;AACpF,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AAE7E,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,eAAiE,CAAC,CAAC;AAE5F;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,OAAO;IACP,SAAS,EAAE,CAAC;SACT,KAAK,CAAC,SAAS,CAAC;SAChB,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;SACxE,QAAQ,EAAE;IACb,SAAS,EAAE,CAAC;SACT,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SAClG,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;CACd,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export { createInsight, type InsightConfig, type InsightServer } from "./server.js";
|
|
2
|
-
export { InsightService, type InsightServiceConfig, type CreateIncidentInput } from "./service.js";
|
|
2
|
+
export { InsightService, type InsightServiceConfig, type CreateIncidentInput, type UpsertIncidentByExternalRefInput, type PurgeBeforeOptions, type PurgeBeforeResult, type PurgeSystemBeforeOptions, type PurgeSystemBeforeResult, } from "./service.js";
|
|
3
|
+
export { toIncidentDto, type IncidentDtoFields } from "./services/incident.service.js";
|
|
4
|
+
export type { IncidentSavingsDetail } from "./models/incident.model.js";
|
|
3
5
|
export { createInsightRouter, type InsightRouterConfig } from "./routes/index.js";
|
|
4
6
|
export { createDatabase } from "./database/index.js";
|
|
5
7
|
export * from "./database/schema.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,cAAc,EACd,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gCAAgC,EACrC,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACvF,YAAY,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export { createInsight } from "./server.js";
|
|
2
|
-
export { InsightService } from "./service.js";
|
|
2
|
+
export { InsightService, } from "./service.js";
|
|
3
|
+
export { toIncidentDto } from "./services/incident.service.js";
|
|
3
4
|
export { createInsightRouter } from "./routes/index.js";
|
|
4
5
|
export { createDatabase } from "./database/index.js";
|
|
5
6
|
export * from "./database/schema.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0C,MAAM,aAAa,CAAC;AACpF,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAA0C,MAAM,aAAa,CAAC;AACpF,OAAO,EACL,cAAc,GAQf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAA0B,MAAM,gCAAgC,CAAC;AAEvF,OAAO,EAAE,mBAAmB,EAA4B,MAAM,mBAAmB,CAAC;AAClF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,cAAc,sBAAsB,CAAC;AACrC,cAAc,mCAAmC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/migrations/run.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CA2+C1D"}
|