@noodleseed/one 0.17.0 → 0.18.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/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/alerts-ops.d.ts +2 -0
- package/dist/commands/alerts-ops.d.ts.map +1 -0
- package/dist/commands/alerts-ops.js +249 -0
- package/dist/commands/alerts-ops.js.map +1 -0
- package/dist/commands/analytics-ops.d.ts +13 -0
- package/dist/commands/analytics-ops.d.ts.map +1 -1
- package/dist/commands/analytics-ops.js +5 -2
- package/dist/commands/analytics-ops.js.map +1 -1
- package/dist/commands/catalog-data-resources.d.ts.map +1 -1
- package/dist/commands/catalog-data-resources.js +45 -0
- package/dist/commands/catalog-data-resources.js.map +1 -1
- package/dist/commands/github-ops.d.ts.map +1 -1
- package/dist/commands/github-ops.js +24 -4
- package/dist/commands/github-ops.js.map +1 -1
- package/dist/commands/github-runs-ops.d.ts +32 -0
- package/dist/commands/github-runs-ops.d.ts.map +1 -0
- package/dist/commands/github-runs-ops.js +132 -0
- package/dist/commands/github-runs-ops.js.map +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +5 -0
- package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
- package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/authoring/dist/recording.js +18 -23
- package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts +57 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.js +158 -0
- package/node_modules/@noodle-borg/service/dist/alert-evaluator.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts +72 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.js +138 -0
- package/node_modules/@noodle-borg/service/dist/alert-webhook.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts +15 -8
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.js +16 -9
- package/node_modules/@noodle-borg/service/dist/github/pending-installations.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts +10 -2
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +9 -1
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +20 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts +28 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js +50 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts +39 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.js +204 -0
- package/node_modules/@noodle-borg/service/dist/routes/alerts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +149 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/contracts.js +81 -0
- package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.js +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-connection.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js +37 -2
- package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.js +33 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.js +3 -3
- package/node_modules/@noodle-borg/service/dist/routes/github-setup.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js +355 -0
- package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts +27 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js +61 -0
- package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +20 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/paths.js +54 -0
- package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +42 -1
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +37 -53
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts +21 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js +115 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts +108 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +181 -0
- package/node_modules/@noodle-borg/service/dist/store/alert-rules.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js +4 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/github-connections.js +4 -0
- package/node_modules/@noodle-borg/service/dist/store/github-connections.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js +116 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts +51 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.js +158 -0
- package/node_modules/@noodle-borg/service/dist/store/github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts +19 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js +46 -0
- package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts +26 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js +142 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js +113 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts +1 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.js +7 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres-github.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +49 -0
- package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +9 -2
- package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js +17 -1
- package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.d.ts +104 -0
- package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/store.js +2 -0
- package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import { compareAlertRules, newAlertRuleRecord, validateAlertRuleId, withFiringState, } from './alert-rules.js';
|
|
5
|
+
import { validateSlug } from './validate.js';
|
|
6
|
+
/**
|
|
7
|
+
* JSON-file {@link AlertRuleStore}: one file per rule at `<dataDir>/alert-rules/<id>.json`,
|
|
8
|
+
* written atomically (temp file + `rename`, matching `JsonFileGithubConnectionStore`). Rule ids
|
|
9
|
+
* are service-minted UUIDs and every read/write path re-validates the id shape, so an id is
|
|
10
|
+
* always a safe filename component (no traversal).
|
|
11
|
+
*/
|
|
12
|
+
export class JsonFileAlertRuleStore {
|
|
13
|
+
#dir;
|
|
14
|
+
#now;
|
|
15
|
+
/** Serializes read-modify-write mutations (firing-state updates), mirroring the github file store. */
|
|
16
|
+
#mutationQueue = Promise.resolve();
|
|
17
|
+
constructor(dataDir, options = {}) {
|
|
18
|
+
this.#dir = join(dataDir, 'alert-rules');
|
|
19
|
+
this.#now = options.now ?? (() => new Date());
|
|
20
|
+
}
|
|
21
|
+
#withMutation(operation) {
|
|
22
|
+
const run = this.#mutationQueue.then(operation, operation);
|
|
23
|
+
this.#mutationQueue = run.then(() => undefined, () => undefined);
|
|
24
|
+
return run;
|
|
25
|
+
}
|
|
26
|
+
createAlertRule(input) {
|
|
27
|
+
return this.#withMutation(async () => {
|
|
28
|
+
const record = newAlertRuleRecord(input, this.#now);
|
|
29
|
+
await this.#writeRecord(record);
|
|
30
|
+
return record;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
async listAlertRules(ref) {
|
|
34
|
+
const org = validateSlug('org', ref.org);
|
|
35
|
+
const app = validateSlug('app', ref.app);
|
|
36
|
+
const env = validateSlug('env', ref.env);
|
|
37
|
+
return (await this.#loadAll())
|
|
38
|
+
.filter((record) => record.orgSlug === org && record.appSlug === app && record.environment === env)
|
|
39
|
+
.sort(compareAlertRules);
|
|
40
|
+
}
|
|
41
|
+
async getAlertRule(ref, id) {
|
|
42
|
+
const org = validateSlug('org', ref.org);
|
|
43
|
+
const app = validateSlug('app', ref.app);
|
|
44
|
+
const env = validateSlug('env', ref.env);
|
|
45
|
+
const record = await this.#readRecord(validateAlertRuleId(id));
|
|
46
|
+
if (record === undefined)
|
|
47
|
+
return undefined;
|
|
48
|
+
return record.orgSlug === org && record.appSlug === app && record.environment === env
|
|
49
|
+
? record
|
|
50
|
+
: undefined;
|
|
51
|
+
}
|
|
52
|
+
deleteAlertRule(ref, id) {
|
|
53
|
+
return this.#withMutation(async () => {
|
|
54
|
+
const found = await this.getAlertRule(ref, id);
|
|
55
|
+
if (found === undefined)
|
|
56
|
+
return false;
|
|
57
|
+
await rm(join(this.#dir, `${found.id}.json`), { force: true });
|
|
58
|
+
return true;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async listEnabledAlertRules() {
|
|
62
|
+
return (await this.#loadAll()).filter((record) => record.enabled);
|
|
63
|
+
}
|
|
64
|
+
updateAlertFiringState(id, state) {
|
|
65
|
+
return this.#withMutation(async () => {
|
|
66
|
+
const record = await this.#readRecord(validateAlertRuleId(id));
|
|
67
|
+
if (record === undefined)
|
|
68
|
+
return undefined;
|
|
69
|
+
const updated = withFiringState(record, state);
|
|
70
|
+
await this.#writeRecord(updated);
|
|
71
|
+
return updated;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async #readRecord(id) {
|
|
75
|
+
try {
|
|
76
|
+
const text = await readFile(join(this.#dir, `${id}.json`), 'utf8');
|
|
77
|
+
return JSON.parse(text);
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return undefined;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
async #loadAll() {
|
|
84
|
+
let names;
|
|
85
|
+
try {
|
|
86
|
+
names = await readdir(this.#dir);
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
if (error.code === 'ENOENT')
|
|
90
|
+
return [];
|
|
91
|
+
throw error;
|
|
92
|
+
}
|
|
93
|
+
const records = [];
|
|
94
|
+
for (const name of names) {
|
|
95
|
+
if (!name.endsWith('.json'))
|
|
96
|
+
continue; // skip in-flight *.tmp files
|
|
97
|
+
try {
|
|
98
|
+
const text = await readFile(join(this.#dir, name), 'utf8');
|
|
99
|
+
records.push(JSON.parse(text));
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Fail-soft: a corrupt/unreadable record must not crash the caller — skip it.
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return records;
|
|
106
|
+
}
|
|
107
|
+
async #writeRecord(record) {
|
|
108
|
+
await mkdir(this.#dir, { recursive: true });
|
|
109
|
+
const target = join(this.#dir, `${record.id}.json`);
|
|
110
|
+
const tmp = `${target}.${randomUUID()}.tmp`;
|
|
111
|
+
await writeFile(tmp, `${JSON.stringify(record, null, 2)}\n`, 'utf8');
|
|
112
|
+
await rename(tmp, target);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=alert-rules-json-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-rules-json-file.js","sourceRoot":"","sources":["../../src/store/alert-rules-json-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import type { TenantRef } from '../store.js';
|
|
2
|
+
/**
|
|
3
|
+
* Analytics alert rules (E2, [ADR 0130](../../../../docs/decisions/0130-analytics-alerting-rules-and-webhook-channel.md)):
|
|
4
|
+
* a rule is data scoped to org/app/env, evaluated periodically against the tenant's request-event
|
|
5
|
+
* aggregations, edge-triggered (fire on the non-breaching → breaching transition; re-fire while
|
|
6
|
+
* breaching only after the cooldown). The MVP channel is a webhook URL.
|
|
7
|
+
*
|
|
8
|
+
* `webhookUrl` is SENSITIVE — hosted webhook endpoints routinely embed capability tokens in the
|
|
9
|
+
* path/query. It exists only inside the store and the delivery path; routes serialize rules through
|
|
10
|
+
* a redacting view and no log line, error message, or audit detail may ever carry it.
|
|
11
|
+
*/
|
|
12
|
+
export declare const ALERT_METRICS: readonly ["error_share", "error_count", "calls", "p95_ms"];
|
|
13
|
+
export type AlertMetric = (typeof ALERT_METRICS)[number];
|
|
14
|
+
export declare const ALERT_WINDOWS_MINUTES: readonly [5, 15, 60];
|
|
15
|
+
export type AlertWindowMinutes = (typeof ALERT_WINDOWS_MINUTES)[number];
|
|
16
|
+
export declare const DEFAULT_ALERT_COOLDOWN_MINUTES = 15;
|
|
17
|
+
/** Cheap abuse bound: an env's owner cannot turn the evaluator into a webhook flood. */
|
|
18
|
+
export declare const MAX_ALERT_RULES_PER_ENV = 20;
|
|
19
|
+
export interface AlertRuleRecord {
|
|
20
|
+
readonly id: string;
|
|
21
|
+
readonly orgSlug: string;
|
|
22
|
+
readonly appSlug: string;
|
|
23
|
+
readonly environment: string;
|
|
24
|
+
readonly name?: string;
|
|
25
|
+
readonly metric: AlertMetric;
|
|
26
|
+
readonly threshold: number;
|
|
27
|
+
readonly windowMinutes: AlertWindowMinutes;
|
|
28
|
+
/** MVP supports only `>=`; persisted so a later slice can widen without a data migration. */
|
|
29
|
+
readonly comparison: '>=';
|
|
30
|
+
/** SENSITIVE (may embed tokens): never logged, never serialized into responses. */
|
|
31
|
+
readonly webhookUrl: string;
|
|
32
|
+
readonly enabled: boolean;
|
|
33
|
+
readonly cooldownMinutes: number;
|
|
34
|
+
readonly createdBySubject?: string;
|
|
35
|
+
readonly createdAt: string;
|
|
36
|
+
readonly updatedAt: string;
|
|
37
|
+
/** Edge-trigger state: whether the last evaluation observed a breach. */
|
|
38
|
+
readonly breaching: boolean;
|
|
39
|
+
/** Observed metric value at the last state change or fire. */
|
|
40
|
+
readonly lastObserved?: number;
|
|
41
|
+
readonly lastFiredAt?: string;
|
|
42
|
+
}
|
|
43
|
+
export interface CreateAlertRuleInput {
|
|
44
|
+
readonly orgSlug: string;
|
|
45
|
+
readonly appSlug: string;
|
|
46
|
+
readonly environment: string;
|
|
47
|
+
readonly name?: string;
|
|
48
|
+
readonly metric: AlertMetric;
|
|
49
|
+
readonly threshold: number;
|
|
50
|
+
readonly windowMinutes: AlertWindowMinutes;
|
|
51
|
+
readonly webhookUrl: string;
|
|
52
|
+
/** Default `true`. */
|
|
53
|
+
readonly enabled?: boolean;
|
|
54
|
+
/** Default {@link DEFAULT_ALERT_COOLDOWN_MINUTES}. */
|
|
55
|
+
readonly cooldownMinutes?: number;
|
|
56
|
+
readonly createdBySubject?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface AlertFiringState {
|
|
59
|
+
readonly breaching: boolean;
|
|
60
|
+
readonly lastObserved: number;
|
|
61
|
+
/** When present, records a fire; when absent the existing `lastFiredAt` is preserved. */
|
|
62
|
+
readonly lastFiredAt?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Store surface for analytics alert rules. Backends: in-memory (tests/dev default), JSON-file
|
|
66
|
+
* (`dataDir` local persistence), and Postgres (hosted) — selected in `serveService` the same way
|
|
67
|
+
* as the request-event store.
|
|
68
|
+
*/
|
|
69
|
+
export interface AlertRuleStore {
|
|
70
|
+
createAlertRule(input: CreateAlertRuleInput): Promise<AlertRuleRecord>;
|
|
71
|
+
listAlertRules(ref: TenantRef): Promise<readonly AlertRuleRecord[]>;
|
|
72
|
+
getAlertRule(ref: TenantRef, id: string): Promise<AlertRuleRecord | undefined>;
|
|
73
|
+
/** `true` iff the rule existed in this tenant scope and was deleted. */
|
|
74
|
+
deleteAlertRule(ref: TenantRef, id: string): Promise<boolean>;
|
|
75
|
+
/** Every enabled rule across all tenants — the evaluator sweep input. */
|
|
76
|
+
listEnabledAlertRules(): Promise<readonly AlertRuleRecord[]>;
|
|
77
|
+
/** Persist edge-trigger state; `undefined` when the rule no longer exists. */
|
|
78
|
+
updateAlertFiringState(id: string, state: AlertFiringState): Promise<AlertRuleRecord | undefined>;
|
|
79
|
+
}
|
|
80
|
+
export declare function validateAlertRuleId(id: string): string;
|
|
81
|
+
/** True when the segment is shaped like a service-minted rule id (path parsing, non-throwing). */
|
|
82
|
+
export declare function isAlertRuleId(id: string): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Shared shape validation for rule creation, used by every backend. Applies defaults. Policy
|
|
85
|
+
* validation of the webhook URL (https-only, loopback carve-out, private-IP rejection) is the
|
|
86
|
+
* route's job (`validateAlertWebhookUrl`); the store only rejects structurally broken values.
|
|
87
|
+
*/
|
|
88
|
+
export declare function validateCreateAlertRuleInput(input: CreateAlertRuleInput): Required<Pick<CreateAlertRuleInput, 'enabled' | 'cooldownMinutes'>> & CreateAlertRuleInput;
|
|
89
|
+
/** Build the durable record from a validated input (shared by the in-memory and JSON-file backends). */
|
|
90
|
+
export declare function newAlertRuleRecord(input: CreateAlertRuleInput, now: () => Date): AlertRuleRecord;
|
|
91
|
+
/** Apply a firing-state update, preserving `lastFiredAt` when the update does not carry one. */
|
|
92
|
+
export declare function withFiringState(record: AlertRuleRecord, state: AlertFiringState): AlertRuleRecord;
|
|
93
|
+
/** Stable list order across backends: `createdAt`, then `id` (matches the Postgres `ORDER BY`). */
|
|
94
|
+
export declare function compareAlertRules(a: AlertRuleRecord, b: AlertRuleRecord): number;
|
|
95
|
+
/** In-memory {@link AlertRuleStore}: the tests/dev default; mirrors `InMemoryGithubConnectionStore`. */
|
|
96
|
+
export declare class InMemoryAlertRuleStore implements AlertRuleStore {
|
|
97
|
+
#private;
|
|
98
|
+
constructor(options?: {
|
|
99
|
+
now?: () => Date;
|
|
100
|
+
});
|
|
101
|
+
createAlertRule(input: CreateAlertRuleInput): Promise<AlertRuleRecord>;
|
|
102
|
+
listAlertRules(ref: TenantRef): Promise<readonly AlertRuleRecord[]>;
|
|
103
|
+
getAlertRule(ref: TenantRef, id: string): Promise<AlertRuleRecord | undefined>;
|
|
104
|
+
deleteAlertRule(ref: TenantRef, id: string): Promise<boolean>;
|
|
105
|
+
listEnabledAlertRules(): Promise<readonly AlertRuleRecord[]>;
|
|
106
|
+
updateAlertFiringState(id: string, state: AlertFiringState): Promise<AlertRuleRecord | undefined>;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=alert-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-rules.d.ts","sourceRoot":"","sources":["../../src/store/alert-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { validateSlug } from './validate.js';
|
|
3
|
+
/**
|
|
4
|
+
* Analytics alert rules (E2, [ADR 0130](../../../../docs/decisions/0130-analytics-alerting-rules-and-webhook-channel.md)):
|
|
5
|
+
* a rule is data scoped to org/app/env, evaluated periodically against the tenant's request-event
|
|
6
|
+
* aggregations, edge-triggered (fire on the non-breaching → breaching transition; re-fire while
|
|
7
|
+
* breaching only after the cooldown). The MVP channel is a webhook URL.
|
|
8
|
+
*
|
|
9
|
+
* `webhookUrl` is SENSITIVE — hosted webhook endpoints routinely embed capability tokens in the
|
|
10
|
+
* path/query. It exists only inside the store and the delivery path; routes serialize rules through
|
|
11
|
+
* a redacting view and no log line, error message, or audit detail may ever carry it.
|
|
12
|
+
*/
|
|
13
|
+
export const ALERT_METRICS = ['error_share', 'error_count', 'calls', 'p95_ms'];
|
|
14
|
+
export const ALERT_WINDOWS_MINUTES = [5, 15, 60];
|
|
15
|
+
export const DEFAULT_ALERT_COOLDOWN_MINUTES = 15;
|
|
16
|
+
/** Cheap abuse bound: an env's owner cannot turn the evaluator into a webhook flood. */
|
|
17
|
+
export const MAX_ALERT_RULES_PER_ENV = 20;
|
|
18
|
+
const MAX_ALERT_NAME_LENGTH = 100;
|
|
19
|
+
const MAX_WEBHOOK_URL_LENGTH = 2048;
|
|
20
|
+
const MAX_COOLDOWN_MINUTES = 24 * 60;
|
|
21
|
+
/** Rule ids are always service-minted UUIDs; enforcing the shape everywhere also makes ids safe filename components. */
|
|
22
|
+
const ALERT_RULE_ID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
|
|
23
|
+
export function validateAlertRuleId(id) {
|
|
24
|
+
if (!ALERT_RULE_ID_PATTERN.test(id))
|
|
25
|
+
throw new Error('invalid alert rule id');
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
/** True when the segment is shaped like a service-minted rule id (path parsing, non-throwing). */
|
|
29
|
+
export function isAlertRuleId(id) {
|
|
30
|
+
return ALERT_RULE_ID_PATTERN.test(id);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Shared shape validation for rule creation, used by every backend. Applies defaults. Policy
|
|
34
|
+
* validation of the webhook URL (https-only, loopback carve-out, private-IP rejection) is the
|
|
35
|
+
* route's job (`validateAlertWebhookUrl`); the store only rejects structurally broken values.
|
|
36
|
+
*/
|
|
37
|
+
export function validateCreateAlertRuleInput(input) {
|
|
38
|
+
const orgSlug = validateSlug('org', input.orgSlug);
|
|
39
|
+
const appSlug = validateSlug('app', input.appSlug);
|
|
40
|
+
const environment = validateSlug('env', input.environment);
|
|
41
|
+
if (!ALERT_METRICS.includes(input.metric)) {
|
|
42
|
+
throw new Error(`invalid alert metric; expected one of ${ALERT_METRICS.join(', ')}`);
|
|
43
|
+
}
|
|
44
|
+
if (typeof input.threshold !== 'number' ||
|
|
45
|
+
!Number.isFinite(input.threshold) ||
|
|
46
|
+
input.threshold < 0) {
|
|
47
|
+
throw new Error('invalid alert threshold; expected a finite number >= 0');
|
|
48
|
+
}
|
|
49
|
+
if (!ALERT_WINDOWS_MINUTES.includes(input.windowMinutes)) {
|
|
50
|
+
throw new Error(`invalid alert window; expected one of ${ALERT_WINDOWS_MINUTES.join(', ')} minutes`);
|
|
51
|
+
}
|
|
52
|
+
const cooldownMinutes = input.cooldownMinutes ?? DEFAULT_ALERT_COOLDOWN_MINUTES;
|
|
53
|
+
if (!Number.isInteger(cooldownMinutes) ||
|
|
54
|
+
cooldownMinutes < 1 ||
|
|
55
|
+
cooldownMinutes > MAX_COOLDOWN_MINUTES) {
|
|
56
|
+
throw new Error(`invalid alert cooldown; expected an integer from 1 to ${MAX_COOLDOWN_MINUTES} minutes`);
|
|
57
|
+
}
|
|
58
|
+
if (input.name !== undefined) {
|
|
59
|
+
if (typeof input.name !== 'string' ||
|
|
60
|
+
input.name.length === 0 ||
|
|
61
|
+
input.name.length > MAX_ALERT_NAME_LENGTH) {
|
|
62
|
+
throw new Error(`invalid alert name; expected 1-${MAX_ALERT_NAME_LENGTH} characters`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (typeof input.webhookUrl !== 'string' ||
|
|
66
|
+
input.webhookUrl.length === 0 ||
|
|
67
|
+
input.webhookUrl.length > MAX_WEBHOOK_URL_LENGTH ||
|
|
68
|
+
!isHttpUrl(input.webhookUrl)) {
|
|
69
|
+
throw new Error('invalid webhookUrl; expected an http(s) URL');
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
...input,
|
|
73
|
+
orgSlug,
|
|
74
|
+
appSlug,
|
|
75
|
+
environment,
|
|
76
|
+
enabled: input.enabled ?? true,
|
|
77
|
+
cooldownMinutes,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function isHttpUrl(raw) {
|
|
81
|
+
try {
|
|
82
|
+
const url = new URL(raw);
|
|
83
|
+
return url.protocol === 'https:' || url.protocol === 'http:';
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Build the durable record from a validated input (shared by the in-memory and JSON-file backends). */
|
|
90
|
+
export function newAlertRuleRecord(input, now) {
|
|
91
|
+
const safe = validateCreateAlertRuleInput(input);
|
|
92
|
+
const nowIso = now().toISOString();
|
|
93
|
+
return {
|
|
94
|
+
id: randomUUID(),
|
|
95
|
+
orgSlug: safe.orgSlug,
|
|
96
|
+
appSlug: safe.appSlug,
|
|
97
|
+
environment: safe.environment,
|
|
98
|
+
...(safe.name !== undefined ? { name: safe.name } : {}),
|
|
99
|
+
metric: safe.metric,
|
|
100
|
+
threshold: safe.threshold,
|
|
101
|
+
windowMinutes: safe.windowMinutes,
|
|
102
|
+
comparison: '>=',
|
|
103
|
+
webhookUrl: safe.webhookUrl,
|
|
104
|
+
enabled: safe.enabled,
|
|
105
|
+
cooldownMinutes: safe.cooldownMinutes,
|
|
106
|
+
...(safe.createdBySubject !== undefined ? { createdBySubject: safe.createdBySubject } : {}),
|
|
107
|
+
createdAt: nowIso,
|
|
108
|
+
updatedAt: nowIso,
|
|
109
|
+
breaching: false,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/** Apply a firing-state update, preserving `lastFiredAt` when the update does not carry one. */
|
|
113
|
+
export function withFiringState(record, state) {
|
|
114
|
+
const lastFiredAt = state.lastFiredAt ?? record.lastFiredAt;
|
|
115
|
+
return {
|
|
116
|
+
...record,
|
|
117
|
+
breaching: state.breaching,
|
|
118
|
+
lastObserved: state.lastObserved,
|
|
119
|
+
...(lastFiredAt !== undefined ? { lastFiredAt } : {}),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
/** Stable list order across backends: `createdAt`, then `id` (matches the Postgres `ORDER BY`). */
|
|
123
|
+
export function compareAlertRules(a, b) {
|
|
124
|
+
return a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id);
|
|
125
|
+
}
|
|
126
|
+
function matchesTenant(record, ref) {
|
|
127
|
+
return record.orgSlug === ref.org && record.appSlug === ref.app && record.environment === ref.env;
|
|
128
|
+
}
|
|
129
|
+
function validateTenantRefSlugs(ref) {
|
|
130
|
+
return {
|
|
131
|
+
org: validateSlug('org', ref.org),
|
|
132
|
+
app: validateSlug('app', ref.app),
|
|
133
|
+
env: validateSlug('env', ref.env),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** In-memory {@link AlertRuleStore}: the tests/dev default; mirrors `InMemoryGithubConnectionStore`. */
|
|
137
|
+
export class InMemoryAlertRuleStore {
|
|
138
|
+
#records = new Map();
|
|
139
|
+
#now;
|
|
140
|
+
constructor(options = {}) {
|
|
141
|
+
this.#now = options.now ?? (() => new Date());
|
|
142
|
+
}
|
|
143
|
+
// Methods are async so validation failures surface as rejections (matching the file/Postgres
|
|
144
|
+
// backends), never synchronous throws out of a Promise-returning signature.
|
|
145
|
+
async createAlertRule(input) {
|
|
146
|
+
const record = newAlertRuleRecord(input, this.#now);
|
|
147
|
+
this.#records.set(record.id, record);
|
|
148
|
+
return record;
|
|
149
|
+
}
|
|
150
|
+
async listAlertRules(ref) {
|
|
151
|
+
const safe = validateTenantRefSlugs(ref);
|
|
152
|
+
return [...this.#records.values()]
|
|
153
|
+
.filter((record) => matchesTenant(record, safe))
|
|
154
|
+
.sort(compareAlertRules);
|
|
155
|
+
}
|
|
156
|
+
async getAlertRule(ref, id) {
|
|
157
|
+
const safe = validateTenantRefSlugs(ref);
|
|
158
|
+
const record = this.#records.get(validateAlertRuleId(id));
|
|
159
|
+
return record !== undefined && matchesTenant(record, safe) ? record : undefined;
|
|
160
|
+
}
|
|
161
|
+
async deleteAlertRule(ref, id) {
|
|
162
|
+
const safe = validateTenantRefSlugs(ref);
|
|
163
|
+
const record = this.#records.get(validateAlertRuleId(id));
|
|
164
|
+
if (record === undefined || !matchesTenant(record, safe))
|
|
165
|
+
return false;
|
|
166
|
+
this.#records.delete(record.id);
|
|
167
|
+
return true;
|
|
168
|
+
}
|
|
169
|
+
async listEnabledAlertRules() {
|
|
170
|
+
return [...this.#records.values()].filter((record) => record.enabled);
|
|
171
|
+
}
|
|
172
|
+
async updateAlertFiringState(id, state) {
|
|
173
|
+
const record = this.#records.get(validateAlertRuleId(id));
|
|
174
|
+
if (record === undefined)
|
|
175
|
+
return undefined;
|
|
176
|
+
const updated = withFiringState(record, state);
|
|
177
|
+
this.#records.set(record.id, updated);
|
|
178
|
+
return updated;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=alert-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert-rules.js","sourceRoot":"","sources":["../../src/store/alert-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ export declare class JsonFileGithubConnectionStore implements GithubConnectionSt
|
|
|
13
13
|
upsertRepoConnection(input: UpsertRepoConnectionInput): Promise<UpsertRepoConnectionResult>;
|
|
14
14
|
getRepoConnection(org: string, app: string): Promise<RepoConnectionRecord | undefined>;
|
|
15
15
|
getRepoConnectionByRepository(githubRepositoryId: number): Promise<RepoConnectionRecord | undefined>;
|
|
16
|
+
listRepoConnectionsByInstallation(installationId: number): Promise<readonly RepoConnectionRecord[]>;
|
|
16
17
|
disableRepoConnection(org: string, app: string): Promise<boolean>;
|
|
17
18
|
refreshRepoMetadata(githubRepositoryId: number, updates: {
|
|
18
19
|
readonly ownerLogin?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-connections-json-file.d.ts","sourceRoot":"","sources":["../../src/store/github-connections-json-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAIrB;;;;;GAKG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;;gBAW7D,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAc/D,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA6BrF,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAQtF,6BAA6B,CACjC,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"github-connections-json-file.d.ts","sourceRoot":"","sources":["../../src/store/github-connections-json-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAIrB;;;;;GAKG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;;gBAW7D,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAc/D,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IA6BrF,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAQtF,6BAA6B,CACjC,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAMtC,iCAAiC,CACrC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAO3C,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAajE,mBAAmB,CACjB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE;QACP,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KACjC,GACA,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAsD7C"}
|
|
@@ -65,6 +65,10 @@ export class JsonFileGithubConnectionStore {
|
|
|
65
65
|
const record = await this.#readRecord(id);
|
|
66
66
|
return record?.enabled ? record : undefined;
|
|
67
67
|
}
|
|
68
|
+
async listRepoConnectionsByInstallation(installationId) {
|
|
69
|
+
const id = validatePositiveInteger('installationId', installationId);
|
|
70
|
+
return (await this.#loadAll()).filter((record) => record.enabled && record.installationId === id);
|
|
71
|
+
}
|
|
68
72
|
disableRepoConnection(org, app) {
|
|
69
73
|
return this.#withMutation(async () => {
|
|
70
74
|
const safeOrg = validateSlug('org', org);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-connections-json-file.js","sourceRoot":"","sources":["../../src/store/github-connections-json-file.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github-connections-json-file.js","sourceRoot":"","sources":["../../src/store/github-connections-json-file.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export declare class InMemoryGithubConnectionStore implements GithubConnectionSt
|
|
|
12
12
|
upsertRepoConnection(input: UpsertRepoConnectionInput): Promise<UpsertRepoConnectionResult>;
|
|
13
13
|
getRepoConnection(org: string, app: string): Promise<RepoConnectionRecord | undefined>;
|
|
14
14
|
getRepoConnectionByRepository(githubRepositoryId: number): Promise<RepoConnectionRecord | undefined>;
|
|
15
|
+
listRepoConnectionsByInstallation(installationId: number): Promise<readonly RepoConnectionRecord[]>;
|
|
15
16
|
disableRepoConnection(org: string, app: string): Promise<boolean>;
|
|
16
17
|
refreshRepoMetadata(githubRepositoryId: number, updates: {
|
|
17
18
|
readonly ownerLogin?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-connections.d.ts","sourceRoot":"","sources":["../../src/store/github-connections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;;gBAI7D,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAI9C,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAwB3F,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAUtF,6BAA6B,CAC3B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAM5C,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAejE,mBAAmB,CACjB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE;QACP,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KACjC,GACA,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAc7C;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,yBAAyB,GAAG,yBAAyB,CAY/F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,KAAK,EAAE,yBAAyB,GAC/B,sBAAsB,GAAG,SAAS,CAyBpC"}
|
|
1
|
+
{"version":3,"file":"github-connections.d.ts","sourceRoot":"","sources":["../../src/store/github-connections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,0BAA0B,EAC3B,MAAM,aAAa,CAAC;AAGrB;;;;GAIG;AACH,qBAAa,6BAA8B,YAAW,qBAAqB;;gBAI7D,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAI9C,oBAAoB,CAAC,KAAK,EAAE,yBAAyB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAwB3F,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAUtF,6BAA6B,CAC3B,kBAAkB,EAAE,MAAM,GACzB,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;IAM5C,iCAAiC,CAC/B,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAS3C,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAejE,mBAAmB,CACjB,kBAAkB,EAAE,MAAM,EAC1B,OAAO,EAAE;QACP,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;KACjC,GACA,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAc7C;AAED,+EAA+E;AAC/E,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,yBAAyB,GAAG,yBAAyB,CAY/F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,KAAK,EAAE,yBAAyB,GAC/B,sBAAsB,GAAG,SAAS,CAyBpC"}
|
|
@@ -44,6 +44,10 @@ export class InMemoryGithubConnectionStore {
|
|
|
44
44
|
const record = this.#records.get(id);
|
|
45
45
|
return Promise.resolve(record?.enabled ? record : undefined);
|
|
46
46
|
}
|
|
47
|
+
listRepoConnectionsByInstallation(installationId) {
|
|
48
|
+
const id = validatePositiveInteger('installationId', installationId);
|
|
49
|
+
return Promise.resolve([...this.#records.values()].filter((record) => record.enabled && record.installationId === id));
|
|
50
|
+
}
|
|
47
51
|
disableRepoConnection(org, app) {
|
|
48
52
|
const safeOrg = validateSlug('org', org);
|
|
49
53
|
const safeApp = validateSlug('app', app);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-connections.js","sourceRoot":"","sources":["../../src/store/github-connections.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"github-connections.js","sourceRoot":"","sources":["../../src/store/github-connections.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { CancelQueuedDeployRunsFilter, CreateDeployRunInput, CreateDeployRunResult, DeployRunRecord, GithubDeployRunStore, ListDeployRunsResult } from '../store.js';
|
|
2
|
+
/**
|
|
3
|
+
* JSON-file {@link GithubDeployRunStore}: one file per run at
|
|
4
|
+
* `<dataDir>/github-runs/<runId>.json`, written atomically (temp file + `rename`, matching
|
|
5
|
+
* `JsonFileGithubConnectionStore`). `runId` is service-minted (`run-` + hex), so it is always a safe
|
|
6
|
+
* filename component. Every read-check-write mutation runs through the same mutation queue the
|
|
7
|
+
* connections store uses — the json-file analogue of the Postgres transaction, so concurrent webhook
|
|
8
|
+
* deliveries cannot both pass the idempotency checks.
|
|
9
|
+
*/
|
|
10
|
+
export declare class JsonFileGithubDeployRunStore implements GithubDeployRunStore {
|
|
11
|
+
#private;
|
|
12
|
+
constructor(dataDir: string, options?: {
|
|
13
|
+
now?: () => Date;
|
|
14
|
+
});
|
|
15
|
+
createDeployRun(input: CreateDeployRunInput): Promise<CreateDeployRunResult>;
|
|
16
|
+
getDeployRun(org: string, runId: string): Promise<DeployRunRecord | undefined>;
|
|
17
|
+
listDeployRuns(org: string, app: string, opts?: {
|
|
18
|
+
readonly limit?: number;
|
|
19
|
+
}): Promise<ListDeployRunsResult>;
|
|
20
|
+
cancelQueuedDeployRuns(filter: CancelQueuedDeployRunsFilter): Promise<readonly string[]>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=github-runs-json-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"github-runs-json-file.d.ts","sourceRoot":"","sources":["../../src/store/github-runs-json-file.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,4BAA4B,EAC5B,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,aAAa,CAAC;AAYrB;;;;;;;GAOG;AACH,qBAAa,4BAA6B,YAAW,oBAAoB;;gBAK3D,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE;QAAE,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;KAAO;IAc/D,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAmBtE,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAM9E,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,GAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GACrC,OAAO,CAAC,oBAAoB,CAAC;IAShC,sBAAsB,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;CAqDzF"}
|