@openleash/core 0.3.0 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/audit.d.ts +45 -0
  2. package/dist/audit.d.ts.map +1 -1
  3. package/dist/audit.js +232 -5
  4. package/dist/audit.js.map +1 -1
  5. package/dist/file-store.d.ts +19 -0
  6. package/dist/file-store.d.ts.map +1 -0
  7. package/dist/file-store.js +233 -0
  8. package/dist/file-store.js.map +1 -0
  9. package/dist/identity-validators.d.ts +26 -0
  10. package/dist/identity-validators.d.ts.map +1 -0
  11. package/dist/identity-validators.js +664 -0
  12. package/dist/identity-validators.js.map +1 -0
  13. package/dist/identity.d.ts +250 -0
  14. package/dist/identity.d.ts.map +1 -0
  15. package/dist/identity.js +244 -0
  16. package/dist/identity.js.map +1 -0
  17. package/dist/index.d.ts +8 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +8 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/keys.d.ts +2 -0
  22. package/dist/keys.d.ts.map +1 -1
  23. package/dist/keys.js +2 -0
  24. package/dist/keys.js.map +1 -1
  25. package/dist/passphrase.d.ts +6 -0
  26. package/dist/passphrase.d.ts.map +1 -0
  27. package/dist/passphrase.js +61 -0
  28. package/dist/passphrase.js.map +1 -0
  29. package/dist/plugin-loader.d.ts +6 -0
  30. package/dist/plugin-loader.d.ts.map +1 -0
  31. package/dist/plugin-loader.js +24 -0
  32. package/dist/plugin-loader.js.map +1 -0
  33. package/dist/state.d.ts +47 -1
  34. package/dist/state.d.ts.map +1 -1
  35. package/dist/state.js +142 -0
  36. package/dist/state.js.map +1 -1
  37. package/dist/store.d.ts +61 -0
  38. package/dist/store.d.ts.map +1 -0
  39. package/dist/store.js +3 -0
  40. package/dist/store.js.map +1 -0
  41. package/dist/tokens.d.ts +35 -1
  42. package/dist/tokens.d.ts.map +1 -1
  43. package/dist/tokens.js +82 -0
  44. package/dist/tokens.js.map +1 -1
  45. package/dist/totp.d.ts +15 -0
  46. package/dist/totp.d.ts.map +1 -0
  47. package/dist/totp.js +149 -0
  48. package/dist/totp.js.map +1 -0
  49. package/dist/types.d.ts +240 -75
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js +38 -3
  52. package/dist/types.js.map +1 -1
  53. package/dist/webhook.d.ts +25 -0
  54. package/dist/webhook.d.ts.map +1 -0
  55. package/dist/webhook.js +114 -0
  56. package/dist/webhook.js.map +1 -0
  57. package/package.json +8 -4
package/dist/audit.d.ts CHANGED
@@ -1,11 +1,56 @@
1
1
  import type { AuditEvent } from './types.js';
2
+ /** @deprecated Use `store.audit.append()` instead. */
2
3
  export declare function appendAuditEvent(dataDir: string, eventType: string, metadata?: Record<string, unknown>, opts?: {
3
4
  principal_id?: string | null;
4
5
  action_id?: string | null;
5
6
  decision_id?: string | null;
6
7
  }): AuditEvent;
8
+ /** @deprecated Use `store.audit.readPage()` instead. */
7
9
  export declare function readAuditLog(dataDir: string, limit?: number, cursor?: number): {
8
10
  items: AuditEvent[];
9
11
  next_cursor: string | null;
12
+ total: number;
10
13
  };
14
+ export interface AuditStore {
15
+ append(eventType: string, metadata: Record<string, unknown>, opts?: {
16
+ principal_id?: string | null;
17
+ action_id?: string | null;
18
+ decision_id?: string | null;
19
+ }): AuditEvent;
20
+ readPage(limit: number, offset: number): {
21
+ items: AuditEvent[];
22
+ total: number;
23
+ };
24
+ readByPrincipal(principalId: string, relatedPrincipalIds: Set<string>, limit: number, offset: number): {
25
+ items: AuditEvent[];
26
+ total: number;
27
+ };
28
+ getTotal(): number;
29
+ }
30
+ export declare class FileAuditStore implements AuditStore {
31
+ private readonly filePath;
32
+ private readonly dataDir;
33
+ private index;
34
+ constructor(dataDir: string);
35
+ append(eventType: string, metadata?: Record<string, unknown>, opts?: {
36
+ principal_id?: string | null;
37
+ action_id?: string | null;
38
+ decision_id?: string | null;
39
+ }): AuditEvent;
40
+ readPage(limit: number, offset: number): {
41
+ items: AuditEvent[];
42
+ total: number;
43
+ };
44
+ readByPrincipal(principalId: string, relatedPrincipalIds: Set<string>, limit: number, offset: number): {
45
+ items: AuditEvent[];
46
+ total: number;
47
+ };
48
+ getTotal(): number;
49
+ private ensureIndex;
50
+ private rebuildIndex;
51
+ private readNewBytes;
52
+ private indexPrincipalIds;
53
+ private readLines;
54
+ private readSpecificLines;
55
+ }
11
56
  //# sourceMappingURL=audit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,IAAI,CAAC,EAAE;IACL,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACA,UAAU,CAcZ;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAwBrD"}
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,sDAAsD;AACtD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,IAAI,CAAC,EAAE;IACL,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B,GACA,UAAU,CAcZ;AAED,wDAAwD;AACxD,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,EAClB,MAAM,GAAE,MAAU,GACjB;IAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAyBpE;AAID,MAAM,WAAW,UAAU;IACzB,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,GACA,UAAU,CAAC;IAEd,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAEhF,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAE1C,QAAQ,IAAI,MAAM,CAAC;CACpB;AAaD,qBAAa,cAAe,YAAW,UAAU;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,KAAK,CAA0B;gBAE3B,OAAO,EAAE,MAAM;IAK3B,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,IAAI,CAAC,EAAE;QACL,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,GACA,UAAU;IAeb,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAW/E,eAAe,CACb,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,EAChC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAuBzC,QAAQ,IAAI,MAAM;IAOlB,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,YAAY;IAsCpB,OAAO,CAAC,iBAAiB;IAkBzB,OAAO,CAAC,SAAS;IA4BjB,OAAO,CAAC,iBAAiB;CAyB1B"}
package/dist/audit.js CHANGED
@@ -33,11 +33,13 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FileAuditStore = void 0;
36
37
  exports.appendAuditEvent = appendAuditEvent;
37
38
  exports.readAuditLog = readAuditLog;
38
39
  const crypto = __importStar(require("node:crypto"));
39
40
  const fs = __importStar(require("node:fs"));
40
41
  const path = __importStar(require("node:path"));
42
+ /** @deprecated Use `store.audit.append()` instead. */
41
43
  function appendAuditEvent(dataDir, eventType, metadata = {}, opts) {
42
44
  const event = {
43
45
  event_id: crypto.randomUUID(),
@@ -52,25 +54,250 @@ function appendAuditEvent(dataDir, eventType, metadata = {}, opts) {
52
54
  fs.appendFileSync(filePath, JSON.stringify(event) + '\n', 'utf-8');
53
55
  return event;
54
56
  }
57
+ /** @deprecated Use `store.audit.readPage()` instead. */
55
58
  function readAuditLog(dataDir, limit = 50, cursor = 0) {
56
59
  const filePath = path.join(dataDir, 'audit.log.jsonl');
57
60
  if (!fs.existsSync(filePath)) {
58
- return { items: [], next_cursor: null };
61
+ return { items: [], next_cursor: null, total: 0 };
59
62
  }
60
63
  const content = fs.readFileSync(filePath, 'utf-8').trim();
61
64
  if (!content) {
62
- return { items: [], next_cursor: null };
65
+ return { items: [], next_cursor: null, total: 0 };
63
66
  }
64
67
  const lines = content.split('\n');
68
+ const total = lines.length;
65
69
  const start = cursor;
66
- const end = Math.min(start + limit, lines.length);
70
+ const end = Math.min(start + limit, total);
67
71
  const items = [];
68
72
  for (let i = start; i < end; i++) {
69
73
  if (lines[i].trim()) {
70
74
  items.push(JSON.parse(lines[i]));
71
75
  }
72
76
  }
73
- const nextCursor = end < lines.length ? String(end) : null;
74
- return { items, next_cursor: nextCursor };
77
+ const nextCursor = end < total ? String(end) : null;
78
+ return { items, next_cursor: nextCursor, total };
75
79
  }
80
+ class FileAuditStore {
81
+ filePath;
82
+ dataDir;
83
+ index = null;
84
+ constructor(dataDir) {
85
+ this.dataDir = dataDir;
86
+ this.filePath = path.join(dataDir, 'audit.log.jsonl');
87
+ }
88
+ append(eventType, metadata = {}, opts) {
89
+ const event = appendAuditEvent(this.dataDir, eventType, metadata, opts);
90
+ // Update index incrementally if it exists
91
+ if (this.index) {
92
+ const line = JSON.stringify(event) + '\n';
93
+ const lineNum = this.index.offsets.length;
94
+ this.index.offsets.push(this.index.fileSize);
95
+ this.index.fileSize += Buffer.byteLength(line, 'utf-8');
96
+ this.indexPrincipalIds(event, lineNum);
97
+ }
98
+ return event;
99
+ }
100
+ readPage(limit, offset) {
101
+ this.ensureIndex();
102
+ const total = this.index.offsets.length;
103
+ if (total === 0 || offset >= total) {
104
+ return { items: [], total };
105
+ }
106
+ const end = Math.min(offset + limit, total);
107
+ const items = this.readLines(offset, end);
108
+ return { items, total };
109
+ }
110
+ readByPrincipal(principalId, relatedPrincipalIds, limit, offset) {
111
+ this.ensureIndex();
112
+ const idx = this.index;
113
+ // Collect all matching line numbers from the principal index
114
+ const lineSet = new Set();
115
+ const addLines = (pid) => {
116
+ const lines = idx.principalLines.get(pid);
117
+ if (lines)
118
+ for (const ln of lines)
119
+ lineSet.add(ln);
120
+ };
121
+ addLines(principalId);
122
+ for (const pid of relatedPrincipalIds)
123
+ addLines(pid);
124
+ // Sort ascending
125
+ const sorted = [...lineSet].sort((a, b) => a - b);
126
+ const total = sorted.length;
127
+ const page = sorted.slice(offset, offset + limit);
128
+ const items = this.readSpecificLines(page);
129
+ return { items, total };
130
+ }
131
+ getTotal() {
132
+ this.ensureIndex();
133
+ return this.index.offsets.length;
134
+ }
135
+ // ─── Internal ─────────────────────────────────────────────────────
136
+ ensureIndex() {
137
+ let stat;
138
+ try {
139
+ stat = fs.statSync(this.filePath);
140
+ }
141
+ catch {
142
+ // File missing — empty index
143
+ this.index = { offsets: [], fileSize: 0, principalLines: new Map() };
144
+ return;
145
+ }
146
+ const fileSize = stat.size;
147
+ if (this.index && this.index.fileSize === fileSize)
148
+ return; // unchanged
149
+ if (this.index && fileSize > this.index.fileSize) {
150
+ // File grew — incremental update
151
+ this.readNewBytes(this.index.fileSize, fileSize);
152
+ return;
153
+ }
154
+ // Full rebuild (first load or file shrank)
155
+ this.rebuildIndex(fileSize);
156
+ }
157
+ rebuildIndex(fileSize) {
158
+ this.index = { offsets: [], fileSize, principalLines: new Map() };
159
+ if (fileSize === 0)
160
+ return;
161
+ const content = fs.readFileSync(this.filePath, 'utf-8');
162
+ let pos = 0;
163
+ let lineNum = 0;
164
+ const lines = content.split('\n');
165
+ for (const line of lines) {
166
+ if (line.length === 0 && pos >= fileSize)
167
+ break; // trailing empty from split
168
+ this.index.offsets.push(pos);
169
+ pos += Buffer.byteLength(line, 'utf-8') + 1; // +1 for \n
170
+ if (line.trim()) {
171
+ try {
172
+ const event = JSON.parse(line);
173
+ this.indexPrincipalIds(event, lineNum);
174
+ }
175
+ catch {
176
+ // skip malformed lines
177
+ }
178
+ }
179
+ lineNum++;
180
+ }
181
+ // Remove trailing empty line if file doesn't end with content after last \n
182
+ if (this.index.offsets.length > 0) {
183
+ const lastOffset = this.index.offsets[this.index.offsets.length - 1];
184
+ if (lastOffset >= fileSize) {
185
+ this.index.offsets.pop();
186
+ }
187
+ }
188
+ }
189
+ readNewBytes(fromSize, toSize) {
190
+ const idx = this.index;
191
+ const buf = Buffer.alloc(toSize - fromSize);
192
+ const fd = fs.openSync(this.filePath, 'r');
193
+ try {
194
+ fs.readSync(fd, buf, 0, buf.length, fromSize);
195
+ }
196
+ finally {
197
+ fs.closeSync(fd);
198
+ }
199
+ const chunk = buf.toString('utf-8');
200
+ let pos = fromSize;
201
+ let lineNum = idx.offsets.length;
202
+ const lines = chunk.split('\n');
203
+ for (const line of lines) {
204
+ if (line.length === 0 && pos >= toSize)
205
+ break;
206
+ idx.offsets.push(pos);
207
+ pos += Buffer.byteLength(line, 'utf-8') + 1;
208
+ if (line.trim()) {
209
+ try {
210
+ const event = JSON.parse(line);
211
+ this.indexPrincipalIds(event, lineNum);
212
+ }
213
+ catch {
214
+ // skip malformed
215
+ }
216
+ }
217
+ lineNum++;
218
+ }
219
+ // Remove trailing empty
220
+ if (idx.offsets.length > 0) {
221
+ const lastOffset = idx.offsets[idx.offsets.length - 1];
222
+ if (lastOffset >= toSize) {
223
+ idx.offsets.pop();
224
+ }
225
+ }
226
+ idx.fileSize = toSize;
227
+ }
228
+ indexPrincipalIds(event, lineNum) {
229
+ const idx = this.index;
230
+ const addPrincipal = (pid) => {
231
+ if (!pid)
232
+ return;
233
+ let set = idx.principalLines.get(pid);
234
+ if (!set) {
235
+ set = new Set();
236
+ idx.principalLines.set(pid, set);
237
+ }
238
+ set.add(lineNum);
239
+ };
240
+ addPrincipal(event.principal_id);
241
+ const meta = event.metadata_json;
242
+ addPrincipal(meta.owner_principal_id);
243
+ addPrincipal(meta.agent_principal_id);
244
+ }
245
+ readLines(start, end) {
246
+ const idx = this.index;
247
+ if (idx.offsets.length === 0)
248
+ return [];
249
+ const startByte = idx.offsets[start];
250
+ const endByte = end < idx.offsets.length ? idx.offsets[end] : idx.fileSize;
251
+ const buf = Buffer.alloc(endByte - startByte);
252
+ const fd = fs.openSync(this.filePath, 'r');
253
+ try {
254
+ fs.readSync(fd, buf, 0, buf.length, startByte);
255
+ }
256
+ finally {
257
+ fs.closeSync(fd);
258
+ }
259
+ const items = [];
260
+ const lines = buf.toString('utf-8').split('\n');
261
+ for (const line of lines) {
262
+ if (line.trim()) {
263
+ try {
264
+ items.push(JSON.parse(line));
265
+ }
266
+ catch {
267
+ // skip malformed
268
+ }
269
+ }
270
+ }
271
+ return items;
272
+ }
273
+ readSpecificLines(lineNums) {
274
+ if (lineNums.length === 0)
275
+ return [];
276
+ const idx = this.index;
277
+ const items = [];
278
+ const fd = fs.openSync(this.filePath, 'r');
279
+ try {
280
+ for (const ln of lineNums) {
281
+ const startByte = idx.offsets[ln];
282
+ const endByte = ln + 1 < idx.offsets.length ? idx.offsets[ln + 1] : idx.fileSize;
283
+ const buf = Buffer.alloc(endByte - startByte);
284
+ fs.readSync(fd, buf, 0, buf.length, startByte);
285
+ const line = buf.toString('utf-8').trim();
286
+ if (line) {
287
+ try {
288
+ items.push(JSON.parse(line));
289
+ }
290
+ catch {
291
+ // skip malformed
292
+ }
293
+ }
294
+ }
295
+ }
296
+ finally {
297
+ fs.closeSync(fd);
298
+ }
299
+ return items;
300
+ }
301
+ }
302
+ exports.FileAuditStore = FileAuditStore;
76
303
  //# sourceMappingURL=audit.js.map
package/dist/audit.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,4CAuBC;AAED,oCA4BC;AA1DD,oDAAsC;AACtC,4CAA8B;AAC9B,gDAAkC;AAGlC,SAAgB,gBAAgB,CAC9B,OAAe,EACf,SAAiB,EACjB,WAAoC,EAAE,EACtC,IAIC;IAED,MAAM,KAAK,GAAe;QACxB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;QAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;QACxC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;QAClC,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;QACtC,aAAa,EAAE,QAAQ;KACxB,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACvD,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAgB,YAAY,CAC1B,OAAe,EACf,QAAgB,EAAE,EAClB,SAAiB,CAAC;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3D,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"audit.js","sourceRoot":"","sources":["../src/audit.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,4CAuBC;AAGD,oCA6BC;AA7DD,oDAAsC;AACtC,4CAA8B;AAC9B,gDAAkC;AAGlC,sDAAsD;AACtD,SAAgB,gBAAgB,CAC9B,OAAe,EACf,SAAiB,EACjB,WAAoC,EAAE,EACtC,IAIC;IAED,MAAM,KAAK,GAAe;QACxB,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE;QAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI;QACxC,SAAS,EAAE,IAAI,EAAE,SAAS,IAAI,IAAI;QAClC,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,IAAI;QACtC,aAAa,EAAE,QAAQ;KACxB,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACvD,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;IACnE,OAAO,KAAK,CAAC;AACf,CAAC;AAED,wDAAwD;AACxD,SAAgB,YAAY,CAC1B,OAAe,EACf,QAAgB,EAAE,EAClB,SAAiB,CAAC;IAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAiB,EAAE,CAAC;IAE/B,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACpB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AACnD,CAAC;AAsCD,MAAa,cAAc;IACR,QAAQ,CAAS;IACjB,OAAO,CAAS;IACzB,KAAK,GAAqB,IAAI,CAAC;IAEvC,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CACJ,SAAiB,EACjB,WAAoC,EAAE,EACtC,IAIC;QAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAExE,0CAA0C;QAC1C,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,CAAC,KAAa,EAAE,MAAc;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAM,CAAC,OAAO,CAAC,MAAM,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;YACnC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;QAC9B,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC1C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,eAAe,CACb,WAAmB,EACnB,mBAAgC,EAChC,KAAa,EACb,MAAc;QAEd,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,CAAC;QAExB,6DAA6D;QAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,MAAM,QAAQ,GAAG,CAAC,GAAW,EAAE,EAAE;YAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,KAAK;gBAAE,KAAK,MAAM,EAAE,IAAI,KAAK;oBAAE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrD,CAAC,CAAC;QAEF,QAAQ,CAAC,WAAW,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,mBAAmB;YAAE,QAAQ,CAAC,GAAG,CAAC,CAAC;QAErD,iBAAiB;QACjB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAElD,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC,KAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACpC,CAAC;IAED,qEAAqE;IAE7D,WAAW;QACjB,IAAI,IAAc,CAAC;QACnB,IAAI,CAAC;YACH,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,6BAA6B;YAC7B,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;YACrE,OAAO;QACT,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,CAAC,YAAY;QACxE,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACjD,iCAAiC;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,2CAA2C;QAC3C,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,GAAG,EAAE,EAAE,CAAC;QAClE,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO;QAE3B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxD,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,IAAI,QAAQ;gBAAE,MAAM,CAAC,4BAA4B;YAC7E,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY;YACzD,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,uBAAuB;gBACzB,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,4EAA4E;QAC5E,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACrE,IAAI,UAAU,IAAI,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,MAAc;QACnD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,CAAC;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC5C,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,QAAQ,CAAC;QACnB,IAAI,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,GAAG,IAAI,MAAM;gBAAE,MAAM;YAC9C,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YAC5C,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3C,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,wBAAwB;QACxB,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACvD,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;gBACzB,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACpB,CAAC;QACH,CAAC;QACD,GAAG,CAAC,QAAQ,GAAG,MAAM,CAAC;IACxB,CAAC;IAEO,iBAAiB,CAAC,KAAiB,EAAE,OAAe;QAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,CAAC;QACxB,MAAM,YAAY,GAAG,CAAC,GAA8B,EAAE,EAAE;YACtD,IAAI,CAAC,GAAG;gBAAE,OAAO;YACjB,IAAI,GAAG,GAAG,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;gBAChB,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC;QAEF,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAwC,CAAC;QAC5D,YAAY,CAAC,IAAI,CAAC,kBAAwC,CAAC,CAAC;QAC5D,YAAY,CAAC,IAAI,CAAC,kBAAwC,CAAC,CAAC;IAC9D,CAAC;IAEO,SAAS,CAAC,KAAa,EAAE,GAAW;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,CAAC;QACxB,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3E,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;QAC9C,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC;oBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC/B,CAAC;gBAAC,MAAM,CAAC;oBACP,iBAAiB;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,iBAAiB,CAAC,QAAkB;QAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAM,CAAC;QACxB,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAClC,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC;gBACjF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;gBAC9C,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;gBAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1C,IAAI,IAAI,EAAE,CAAC;oBACT,IAAI,CAAC;wBACH,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;oBAC/B,CAAC;oBAAC,MAAM,CAAC;wBACP,iBAAiB;oBACnB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAhPD,wCAgPC"}
@@ -0,0 +1,19 @@
1
+ import type { AuditStore } from './audit.js';
2
+ import type { DataStore, OwnerRepository, AgentRepository, PolicyRepository, ApprovalRequestRepository, PolicyDraftRepository, SetupInviteRepository, AgentInviteRepository, KeyRepository, StateRepository } from './store.js';
3
+ export declare class FileDataStore implements DataStore {
4
+ readonly owners: OwnerRepository;
5
+ readonly agents: AgentRepository;
6
+ readonly policies: PolicyRepository;
7
+ readonly approvalRequests: ApprovalRequestRepository;
8
+ readonly policyDrafts: PolicyDraftRepository;
9
+ readonly setupInvites: SetupInviteRepository;
10
+ readonly agentInvites: AgentInviteRepository;
11
+ readonly keys: KeyRepository;
12
+ readonly state: StateRepository;
13
+ readonly audit: AuditStore;
14
+ private readonly dataDir;
15
+ constructor(dataDir: string);
16
+ initialize(): void;
17
+ }
18
+ export declare function createFileDataStore(dataDir: string): DataStore;
19
+ //# sourceMappingURL=file-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../src/file-store.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,qBAAqB,EACrB,aAAa,EACb,eAAe,EAChB,MAAM,YAAY,CAAC;AA8IpB,qBAAa,aAAc,YAAW,SAAS;IAC7C,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,gBAAgB,EAAE,yBAAyB,CAAC;IACrD,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,YAAY,EAAE,qBAAqB,CAAC;IAC7C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM;IAc3B,UAAU,IAAI,IAAI;CAsCnB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAE9D"}
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.FileDataStore = void 0;
37
+ exports.createFileDataStore = createFileDataStore;
38
+ const fs = __importStar(require("node:fs"));
39
+ const path = __importStar(require("node:path"));
40
+ const state_js_1 = require("./state.js");
41
+ const keys_js_1 = require("./keys.js");
42
+ const audit_js_1 = require("./audit.js");
43
+ // ─── File-based repository implementations ──────────────────────────
44
+ class FileOwnerRepository {
45
+ dataDir;
46
+ constructor(dataDir) {
47
+ this.dataDir = dataDir;
48
+ }
49
+ read(ownerPrincipalId) {
50
+ return (0, state_js_1.readOwnerFile)(this.dataDir, ownerPrincipalId);
51
+ }
52
+ write(owner, body) {
53
+ (0, state_js_1.writeOwnerFile)(this.dataDir, owner, body);
54
+ }
55
+ }
56
+ class FileAgentRepository {
57
+ dataDir;
58
+ constructor(dataDir) {
59
+ this.dataDir = dataDir;
60
+ }
61
+ read(agentPrincipalId) {
62
+ return (0, state_js_1.readAgentFile)(this.dataDir, agentPrincipalId);
63
+ }
64
+ write(agent, body) {
65
+ (0, state_js_1.writeAgentFile)(this.dataDir, agent, body);
66
+ }
67
+ }
68
+ class FilePolicyRepository {
69
+ dataDir;
70
+ constructor(dataDir) {
71
+ this.dataDir = dataDir;
72
+ }
73
+ read(policyId) {
74
+ return (0, state_js_1.readPolicyFile)(this.dataDir, policyId);
75
+ }
76
+ write(policyId, yamlContent) {
77
+ (0, state_js_1.writePolicyFile)(this.dataDir, policyId, yamlContent);
78
+ }
79
+ delete(policyId) {
80
+ (0, state_js_1.deletePolicyFile)(this.dataDir, policyId);
81
+ }
82
+ }
83
+ class FileApprovalRequestRepository {
84
+ dataDir;
85
+ constructor(dataDir) {
86
+ this.dataDir = dataDir;
87
+ }
88
+ read(approvalRequestId) {
89
+ return (0, state_js_1.readApprovalRequestFile)(this.dataDir, approvalRequestId);
90
+ }
91
+ write(req) {
92
+ (0, state_js_1.writeApprovalRequestFile)(this.dataDir, req);
93
+ }
94
+ }
95
+ class FilePolicyDraftRepository {
96
+ dataDir;
97
+ constructor(dataDir) {
98
+ this.dataDir = dataDir;
99
+ }
100
+ read(policyDraftId) {
101
+ return (0, state_js_1.readPolicyDraftFile)(this.dataDir, policyDraftId);
102
+ }
103
+ write(draft) {
104
+ (0, state_js_1.writePolicyDraftFile)(this.dataDir, draft);
105
+ }
106
+ }
107
+ class FileSetupInviteRepository {
108
+ dataDir;
109
+ constructor(dataDir) {
110
+ this.dataDir = dataDir;
111
+ }
112
+ read(inviteId) {
113
+ return (0, state_js_1.readSetupInviteFile)(this.dataDir, inviteId);
114
+ }
115
+ write(invite) {
116
+ (0, state_js_1.writeSetupInviteFile)(this.dataDir, invite);
117
+ }
118
+ delete(inviteId) {
119
+ (0, state_js_1.deleteSetupInviteFile)(this.dataDir, inviteId);
120
+ }
121
+ }
122
+ class FileAgentInviteRepository {
123
+ dataDir;
124
+ constructor(dataDir) {
125
+ this.dataDir = dataDir;
126
+ }
127
+ read(inviteId) {
128
+ return (0, state_js_1.readAgentInviteFile)(this.dataDir, inviteId);
129
+ }
130
+ write(invite) {
131
+ (0, state_js_1.writeAgentInviteFile)(this.dataDir, invite);
132
+ }
133
+ }
134
+ class FileKeyRepository {
135
+ dataDir;
136
+ constructor(dataDir) {
137
+ this.dataDir = dataDir;
138
+ }
139
+ read(kid) {
140
+ return (0, keys_js_1.readKeyFile)(this.dataDir, kid);
141
+ }
142
+ write(key) {
143
+ (0, keys_js_1.writeKeyFile)(this.dataDir, key);
144
+ }
145
+ generate() {
146
+ return (0, keys_js_1.generateSigningKey)();
147
+ }
148
+ }
149
+ class FileStateRepository {
150
+ stateIndex;
151
+ dataDir;
152
+ constructor(dataDir) {
153
+ this.dataDir = dataDir;
154
+ this.stateIndex = new state_js_1.StateIndex(dataDir);
155
+ }
156
+ getState() {
157
+ return this.stateIndex.getState();
158
+ }
159
+ updateState(mutator) {
160
+ const state = (0, state_js_1.readState)(this.dataDir);
161
+ mutator(state);
162
+ (0, state_js_1.writeState)(this.dataDir, state);
163
+ }
164
+ getResolvedApprovals(ownerId, limit, offset) {
165
+ return this.stateIndex.getResolvedApprovals(ownerId, limit, offset);
166
+ }
167
+ }
168
+ // ─── FileDataStore ──────────────────────────────────────────────────
169
+ class FileDataStore {
170
+ owners;
171
+ agents;
172
+ policies;
173
+ approvalRequests;
174
+ policyDrafts;
175
+ setupInvites;
176
+ agentInvites;
177
+ keys;
178
+ state;
179
+ audit;
180
+ dataDir;
181
+ constructor(dataDir) {
182
+ this.dataDir = dataDir;
183
+ this.owners = new FileOwnerRepository(dataDir);
184
+ this.agents = new FileAgentRepository(dataDir);
185
+ this.policies = new FilePolicyRepository(dataDir);
186
+ this.approvalRequests = new FileApprovalRequestRepository(dataDir);
187
+ this.policyDrafts = new FilePolicyDraftRepository(dataDir);
188
+ this.setupInvites = new FileSetupInviteRepository(dataDir);
189
+ this.agentInvites = new FileAgentInviteRepository(dataDir);
190
+ this.keys = new FileKeyRepository(dataDir);
191
+ this.state = new FileStateRepository(dataDir);
192
+ this.audit = new audit_js_1.FileAuditStore(dataDir);
193
+ }
194
+ initialize() {
195
+ // Ensure data directories
196
+ fs.mkdirSync(this.dataDir, { recursive: true });
197
+ fs.mkdirSync(path.join(this.dataDir, 'keys'), { recursive: true });
198
+ fs.mkdirSync(path.join(this.dataDir, 'owners'), { recursive: true });
199
+ fs.mkdirSync(path.join(this.dataDir, 'agents'), { recursive: true });
200
+ fs.mkdirSync(path.join(this.dataDir, 'policies'), { recursive: true });
201
+ fs.mkdirSync(path.join(this.dataDir, 'approval-requests'), { recursive: true });
202
+ fs.mkdirSync(path.join(this.dataDir, 'invites'), { recursive: true });
203
+ // Ensure audit log
204
+ const auditPath = path.join(this.dataDir, 'audit.log.jsonl');
205
+ if (!fs.existsSync(auditPath)) {
206
+ fs.writeFileSync(auditPath, '', 'utf-8');
207
+ }
208
+ // Ensure state.md
209
+ const statePath = path.join(this.dataDir, 'state.md');
210
+ if (!fs.existsSync(statePath)) {
211
+ const key = this.keys.generate();
212
+ this.keys.write(key);
213
+ const state = {
214
+ version: 1,
215
+ created_at: new Date().toISOString(),
216
+ server_keys: {
217
+ active_kid: key.kid,
218
+ keys: [{ kid: key.kid, path: `./keys/${key.kid}.json` }],
219
+ },
220
+ owners: [],
221
+ agents: [],
222
+ policies: [],
223
+ bindings: [],
224
+ };
225
+ (0, state_js_1.writeState)(this.dataDir, state);
226
+ }
227
+ }
228
+ }
229
+ exports.FileDataStore = FileDataStore;
230
+ function createFileDataStore(dataDir) {
231
+ return new FileDataStore(dataDir);
232
+ }
233
+ //# sourceMappingURL=file-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store.js","sourceRoot":"","sources":["../src/file-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface ValidationResult {
2
+ valid: boolean;
3
+ error?: string;
4
+ }
5
+ /** Luhn algorithm (ISO/IEC 7812). Returns true if check digit is valid. */
6
+ export declare function luhn(digits: string): boolean;
7
+ /** ISO 7064 Mod 11,10 check digit algorithm. */
8
+ export declare function iso7064Mod11_10(digits: string): boolean;
9
+ /** Mod 97 on a numeric string. Returns the remainder. */
10
+ export declare function mod97(numStr: string): number;
11
+ /** Mod 97-10 (ISO 7064) for alphanumeric strings (used by LEI, IBAN). */
12
+ export declare function mod97_10(alphanumeric: string): boolean;
13
+ export declare const EU_PERSONAL_ID_VALIDATORS: Record<string, (value: string) => ValidationResult>;
14
+ /** List of known personal ID types per country. */
15
+ export declare const EU_PERSONAL_ID_TYPES: Record<string, string[]>;
16
+ /** Validate a VAT number. Value should include the country prefix (e.g. "SE556123456701"). */
17
+ export declare function validateVAT(value: string): ValidationResult;
18
+ /** Validate a company registration number for a given country. */
19
+ export declare function validateCompanyReg(value: string, country: string): ValidationResult;
20
+ /** Validate a Legal Entity Identifier (ISO 17442). 20 alphanumeric chars, mod 97-10. */
21
+ export declare function validateLEI(value: string): ValidationResult;
22
+ /** Validate a DUNS number. 9 digits. */
23
+ export declare function validateDUNS(value: string): ValidationResult;
24
+ /** Validate an EORI number. Country prefix + up to 15 alphanumeric chars. */
25
+ export declare function validateEORI(value: string): ValidationResult;
26
+ //# sourceMappingURL=identity-validators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-validators.d.ts","sourceRoot":"","sources":["../src/identity-validators.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,2EAA2E;AAC3E,wBAAgB,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAe5C;AAED,gDAAgD;AAChD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAWvD;AAED,yDAAyD;AACzD,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CActD;AAwZD,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,gBAAgB,CAmCzF,CAAC;AAEF,mDAAmD;AACnD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CA4BzD,CAAC;AAmCF,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAgB3D;AAiCD,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAgBnF;AAED,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAS3D;AAED,wCAAwC;AACxC,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAM5D;AAED,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,gBAAgB,CAM5D"}