@geekmidas/audit 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/{Auditor-DrR0ImvJ.d.cts → Auditor-_Dn2dp8d.d.mts} +4 -1
  3. package/dist/Auditor-_Dn2dp8d.d.mts.map +1 -0
  4. package/dist/{Auditor-Xf4Tp63p.d.mts → Auditor-sW7YAJIA.d.cts} +4 -1
  5. package/dist/Auditor-sW7YAJIA.d.cts.map +1 -0
  6. package/dist/Auditor.d.cts +1 -1
  7. package/dist/Auditor.d.mts +1 -1
  8. package/dist/DefaultAuditor-BAVnNmRh.mjs.map +1 -1
  9. package/dist/{DefaultAuditor-3Q1zVd1b.d.mts → DefaultAuditor-BSYMwojG.d.cts} +3 -2
  10. package/dist/DefaultAuditor-BSYMwojG.d.cts.map +1 -0
  11. package/dist/{DefaultAuditor-BaZa4u_m.d.cts → DefaultAuditor-CYE-uAry.d.mts} +3 -2
  12. package/dist/DefaultAuditor-CYE-uAry.d.mts.map +1 -0
  13. package/dist/DefaultAuditor-JbZ_BQfh.cjs.map +1 -1
  14. package/dist/DefaultAuditor.d.cts +2 -2
  15. package/dist/DefaultAuditor.d.mts +2 -2
  16. package/dist/{cache-0AjJ0zis.d.cts → cache-2VI80Vao.d.mts} +3 -2
  17. package/dist/cache-2VI80Vao.d.mts.map +1 -0
  18. package/dist/cache-BbIl31RL.mjs.map +1 -1
  19. package/dist/{cache-DBbGcCEq.d.mts → cache-CDHqXqcl.d.cts} +3 -2
  20. package/dist/cache-CDHqXqcl.d.cts.map +1 -0
  21. package/dist/cache-l7jAptBl.cjs.map +1 -1
  22. package/dist/cache.d.cts +2 -2
  23. package/dist/cache.d.mts +2 -2
  24. package/dist/index.d.cts +2 -2
  25. package/dist/index.d.mts +2 -2
  26. package/dist/kysely.cjs.map +1 -1
  27. package/dist/kysely.d.cts +2 -1
  28. package/dist/kysely.d.cts.map +1 -0
  29. package/dist/kysely.d.mts +2 -1
  30. package/dist/kysely.d.mts.map +1 -0
  31. package/dist/kysely.mjs.map +1 -1
  32. package/dist/memory.cjs.map +1 -1
  33. package/dist/memory.d.cts +3 -2
  34. package/dist/memory.d.cts.map +1 -0
  35. package/dist/memory.d.mts +3 -2
  36. package/dist/memory.d.mts.map +1 -0
  37. package/dist/memory.mjs.map +1 -1
  38. package/dist/storage.d.cts +1 -1
  39. package/dist/storage.d.mts +1 -1
  40. package/dist/types.d.cts +1 -1
  41. package/dist/types.d.mts +1 -1
  42. package/package.json +5 -5
  43. package/src/Auditor.ts +121 -121
  44. package/src/DefaultAuditor.ts +91 -91
  45. package/src/__tests__/CacheAuditStorage.spec.ts +375 -375
  46. package/src/__tests__/DefaultAuditor.spec.ts +520 -462
  47. package/src/__tests__/InMemoryAuditStorage.spec.ts +311 -311
  48. package/src/__tests__/KyselyAuditStorage.integration.spec.ts +496 -496
  49. package/src/__tests__/KyselyAuditStorage.spec.ts +433 -433
  50. package/src/cache.ts +179 -179
  51. package/src/index.ts +14 -15
  52. package/src/kysely.ts +292 -292
  53. package/src/memory.ts +11 -11
  54. package/src/storage.ts +131 -131
  55. package/src/types.ts +73 -74
  56. package/tsconfig.json +9 -0
@@ -2,27 +2,27 @@ import { nanoid } from 'nanoid';
2
2
  import type { Auditor } from './Auditor';
3
3
  import type { AuditStorage } from './storage';
4
4
  import type {
5
- AuditActor,
6
- AuditMetadata,
7
- AuditOptions,
8
- AuditRecord,
9
- AuditableAction,
10
- ExtractAuditPayload,
11
- ExtractAuditType,
5
+ AuditActor,
6
+ AuditableAction,
7
+ AuditMetadata,
8
+ AuditOptions,
9
+ AuditRecord,
10
+ ExtractAuditPayload,
11
+ ExtractAuditType,
12
12
  } from './types';
13
13
 
14
14
  /**
15
15
  * Configuration for DefaultAuditor.
16
16
  */
17
17
  export interface DefaultAuditorConfig {
18
- /** The actor performing audits (set at construction, immutable) */
19
- actor: AuditActor;
20
- /** Storage backend for persisting audits */
21
- storage: AuditStorage;
22
- /** Optional metadata to attach to all audits */
23
- metadata?: AuditMetadata;
24
- /** Optional custom ID generator (defaults to nanoid) */
25
- generateId?: () => string;
18
+ /** The actor performing audits (set at construction, immutable) */
19
+ actor: AuditActor;
20
+ /** Storage backend for persisting audits */
21
+ storage: AuditStorage;
22
+ /** Optional metadata to attach to all audits */
23
+ metadata?: AuditMetadata;
24
+ /** Optional custom ID generator (defaults to nanoid) */
25
+ generateId?: () => string;
26
26
  }
27
27
 
28
28
  /**
@@ -47,95 +47,95 @@ export interface DefaultAuditorConfig {
47
47
  * ```
48
48
  */
49
49
  export class DefaultAuditor<
50
- TAuditAction extends AuditableAction<string, unknown> = AuditableAction<
51
- string,
52
- unknown
53
- >,
54
- TTransaction = unknown,
50
+ TAuditAction extends AuditableAction<string, unknown> = AuditableAction<
51
+ string,
52
+ unknown
53
+ >,
54
+ TTransaction = unknown,
55
55
  > implements Auditor<TAuditAction, TTransaction>
56
56
  {
57
- readonly actor: AuditActor;
58
- private readonly storage: AuditStorage;
59
- private metadata?: AuditMetadata;
60
- private readonly generateId: () => string;
61
- private records: AuditRecord[] = [];
62
- private transaction?: TTransaction;
57
+ readonly actor: AuditActor;
58
+ private readonly storage: AuditStorage;
59
+ private metadata?: AuditMetadata;
60
+ private readonly generateId: () => string;
61
+ private records: AuditRecord[] = [];
62
+ private transaction?: TTransaction;
63
63
 
64
- constructor(config: DefaultAuditorConfig) {
65
- this.actor = config.actor;
66
- this.storage = config.storage;
67
- this.metadata = config.metadata;
68
- this.generateId = config.generateId ?? (() => nanoid());
69
- }
64
+ constructor(config: DefaultAuditorConfig) {
65
+ this.actor = config.actor;
66
+ this.storage = config.storage;
67
+ this.metadata = config.metadata;
68
+ this.generateId = config.generateId ?? (() => nanoid());
69
+ }
70
70
 
71
- audit<TType extends ExtractAuditType<TAuditAction>>(
72
- type: TType,
73
- payload: ExtractAuditPayload<TAuditAction, TType>,
74
- options?: AuditOptions,
75
- ): void {
76
- const record: AuditRecord = {
77
- id: this.generateId(),
78
- type,
79
- operation: options?.operation ?? 'CUSTOM',
80
- table: options?.table,
81
- entityId: options?.entityId,
82
- oldValues: options?.oldValues,
83
- newValues: options?.newValues,
84
- payload,
85
- timestamp: new Date(),
86
- actor: this.actor,
87
- metadata: this.metadata,
88
- };
71
+ audit<TType extends ExtractAuditType<TAuditAction>>(
72
+ type: TType,
73
+ payload: ExtractAuditPayload<TAuditAction, TType>,
74
+ options?: AuditOptions,
75
+ ): void {
76
+ const record: AuditRecord = {
77
+ id: this.generateId(),
78
+ type,
79
+ operation: options?.operation ?? 'CUSTOM',
80
+ table: options?.table,
81
+ entityId: options?.entityId,
82
+ oldValues: options?.oldValues,
83
+ newValues: options?.newValues,
84
+ payload,
85
+ timestamp: new Date(),
86
+ actor: this.actor,
87
+ metadata: this.metadata,
88
+ };
89
89
 
90
- this.records.push(record);
91
- }
90
+ this.records.push(record);
91
+ }
92
92
 
93
- record(record: Omit<AuditRecord, 'id' | 'timestamp' | 'actor'>): void {
94
- const fullRecord: AuditRecord = {
95
- ...record,
96
- id: this.generateId(),
97
- timestamp: new Date(),
98
- actor: this.actor,
99
- metadata: this.metadata
100
- ? { ...this.metadata, ...record.metadata }
101
- : record.metadata,
102
- };
93
+ record(record: Omit<AuditRecord, 'id' | 'timestamp' | 'actor'>): void {
94
+ const fullRecord: AuditRecord = {
95
+ ...record,
96
+ id: this.generateId(),
97
+ timestamp: new Date(),
98
+ actor: this.actor,
99
+ metadata: this.metadata
100
+ ? { ...this.metadata, ...record.metadata }
101
+ : record.metadata,
102
+ };
103
103
 
104
- this.records.push(fullRecord);
105
- }
104
+ this.records.push(fullRecord);
105
+ }
106
106
 
107
- getRecords(): AuditRecord[] {
108
- return [...this.records];
109
- }
107
+ getRecords(): AuditRecord[] {
108
+ return [...this.records];
109
+ }
110
110
 
111
- async flush(trx?: TTransaction): Promise<void> {
112
- if (this.records.length === 0) {
113
- return;
114
- }
111
+ async flush(trx?: TTransaction): Promise<void> {
112
+ if (this.records.length === 0) {
113
+ return;
114
+ }
115
115
 
116
- const recordsToFlush = [...this.records];
117
- this.records = [];
116
+ const recordsToFlush = [...this.records];
117
+ this.records = [];
118
118
 
119
- // Use explicitly passed transaction, or fall back to stored transaction
120
- const transactionToUse = trx ?? this.transaction;
121
- await this.storage.write(recordsToFlush, transactionToUse);
122
- }
119
+ // Use explicitly passed transaction, or fall back to stored transaction
120
+ const transactionToUse = trx ?? this.transaction;
121
+ await this.storage.write(recordsToFlush, transactionToUse);
122
+ }
123
123
 
124
- setTransaction(trx: TTransaction): void {
125
- this.transaction = trx;
126
- }
124
+ setTransaction(trx: TTransaction): void {
125
+ this.transaction = trx;
126
+ }
127
127
 
128
- getTransaction(): TTransaction | undefined {
129
- return this.transaction;
130
- }
128
+ getTransaction(): TTransaction | undefined {
129
+ return this.transaction;
130
+ }
131
131
 
132
- clear(): void {
133
- this.records = [];
134
- }
132
+ clear(): void {
133
+ this.records = [];
134
+ }
135
135
 
136
- addMetadata(metadata: AuditMetadata): void {
137
- this.metadata = this.metadata
138
- ? { ...this.metadata, ...metadata }
139
- : metadata;
140
- }
136
+ addMetadata(metadata: AuditMetadata): void {
137
+ this.metadata = this.metadata
138
+ ? { ...this.metadata, ...metadata }
139
+ : metadata;
140
+ }
141
141
  }