@tracehound/core 1.2.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 (166) hide show
  1. package/README.md +125 -0
  2. package/dist/core/agent.d.ts +89 -0
  3. package/dist/core/agent.d.ts.map +1 -0
  4. package/dist/core/agent.js +141 -0
  5. package/dist/core/agent.js.map +1 -0
  6. package/dist/core/audit-chain.d.ts +39 -0
  7. package/dist/core/audit-chain.d.ts.map +1 -0
  8. package/dist/core/audit-chain.js +87 -0
  9. package/dist/core/audit-chain.js.map +1 -0
  10. package/dist/core/cold-storage.d.ts +87 -0
  11. package/dist/core/cold-storage.d.ts.map +1 -0
  12. package/dist/core/cold-storage.js +53 -0
  13. package/dist/core/cold-storage.js.map +1 -0
  14. package/dist/core/evidence-factory.d.ts +85 -0
  15. package/dist/core/evidence-factory.d.ts.map +1 -0
  16. package/dist/core/evidence-factory.js +96 -0
  17. package/dist/core/evidence-factory.js.map +1 -0
  18. package/dist/core/evidence.d.ts +48 -0
  19. package/dist/core/evidence.d.ts.map +1 -0
  20. package/dist/core/evidence.js +135 -0
  21. package/dist/core/evidence.js.map +1 -0
  22. package/dist/core/fail-safe.d.ts +149 -0
  23. package/dist/core/fail-safe.d.ts.map +1 -0
  24. package/dist/core/fail-safe.js +217 -0
  25. package/dist/core/fail-safe.js.map +1 -0
  26. package/dist/core/hound-ipc.d.ts +91 -0
  27. package/dist/core/hound-ipc.d.ts.map +1 -0
  28. package/dist/core/hound-ipc.js +196 -0
  29. package/dist/core/hound-ipc.js.map +1 -0
  30. package/dist/core/hound-pool.d.ts +157 -0
  31. package/dist/core/hound-pool.d.ts.map +1 -0
  32. package/dist/core/hound-pool.js +337 -0
  33. package/dist/core/hound-pool.js.map +1 -0
  34. package/dist/core/hound-process.d.ts +14 -0
  35. package/dist/core/hound-process.d.ts.map +1 -0
  36. package/dist/core/hound-process.js +112 -0
  37. package/dist/core/hound-process.js.map +1 -0
  38. package/dist/core/hound-worker.d.ts +14 -0
  39. package/dist/core/hound-worker.d.ts.map +1 -0
  40. package/dist/core/hound-worker.js +112 -0
  41. package/dist/core/hound-worker.js.map +1 -0
  42. package/dist/core/lane-queue.d.ts +121 -0
  43. package/dist/core/lane-queue.d.ts.map +1 -0
  44. package/dist/core/lane-queue.js +181 -0
  45. package/dist/core/lane-queue.js.map +1 -0
  46. package/dist/core/license-manager.d.ts +128 -0
  47. package/dist/core/license-manager.d.ts.map +1 -0
  48. package/dist/core/license-manager.js +219 -0
  49. package/dist/core/license-manager.js.map +1 -0
  50. package/dist/core/notification-emitter.d.ts +140 -0
  51. package/dist/core/notification-emitter.d.ts.map +1 -0
  52. package/dist/core/notification-emitter.js +197 -0
  53. package/dist/core/notification-emitter.js.map +1 -0
  54. package/dist/core/process-adapter.d.ts +146 -0
  55. package/dist/core/process-adapter.d.ts.map +1 -0
  56. package/dist/core/process-adapter.js +174 -0
  57. package/dist/core/process-adapter.js.map +1 -0
  58. package/dist/core/quarantine.d.ts +95 -0
  59. package/dist/core/quarantine.d.ts.map +1 -0
  60. package/dist/core/quarantine.js +221 -0
  61. package/dist/core/quarantine.js.map +1 -0
  62. package/dist/core/rate-limiter.d.ts +94 -0
  63. package/dist/core/rate-limiter.d.ts.map +1 -0
  64. package/dist/core/rate-limiter.js +156 -0
  65. package/dist/core/rate-limiter.js.map +1 -0
  66. package/dist/core/s3-cold-storage.d.ts +116 -0
  67. package/dist/core/s3-cold-storage.d.ts.map +1 -0
  68. package/dist/core/s3-cold-storage.js +198 -0
  69. package/dist/core/s3-cold-storage.js.map +1 -0
  70. package/dist/core/scheduler.d.ts +126 -0
  71. package/dist/core/scheduler.d.ts.map +1 -0
  72. package/dist/core/scheduler.js +138 -0
  73. package/dist/core/scheduler.js.map +1 -0
  74. package/dist/core/security-state.d.ts +170 -0
  75. package/dist/core/security-state.d.ts.map +1 -0
  76. package/dist/core/security-state.js +156 -0
  77. package/dist/core/security-state.js.map +1 -0
  78. package/dist/core/tier-capacity.d.ts +58 -0
  79. package/dist/core/tier-capacity.d.ts.map +1 -0
  80. package/dist/core/tier-capacity.js +89 -0
  81. package/dist/core/tier-capacity.js.map +1 -0
  82. package/dist/core/tracehound.d.ts +85 -0
  83. package/dist/core/tracehound.d.ts.map +1 -0
  84. package/dist/core/tracehound.js +90 -0
  85. package/dist/core/tracehound.js.map +1 -0
  86. package/dist/core/trust-boundary.d.ts +85 -0
  87. package/dist/core/trust-boundary.d.ts.map +1 -0
  88. package/dist/core/trust-boundary.js +71 -0
  89. package/dist/core/trust-boundary.js.map +1 -0
  90. package/dist/core/watcher.d.ts +153 -0
  91. package/dist/core/watcher.d.ts.map +1 -0
  92. package/dist/core/watcher.js +141 -0
  93. package/dist/core/watcher.js.map +1 -0
  94. package/dist/index.d.ts +53 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +112 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/types/audit.d.ts +45 -0
  99. package/dist/types/audit.d.ts.map +1 -0
  100. package/dist/types/audit.js +5 -0
  101. package/dist/types/audit.js.map +1 -0
  102. package/dist/types/common.d.ts +12 -0
  103. package/dist/types/common.d.ts.map +1 -0
  104. package/dist/types/common.js +5 -0
  105. package/dist/types/common.js.map +1 -0
  106. package/dist/types/config.d.ts +98 -0
  107. package/dist/types/config.d.ts.map +1 -0
  108. package/dist/types/config.js +58 -0
  109. package/dist/types/config.js.map +1 -0
  110. package/dist/types/errors.d.ts +118 -0
  111. package/dist/types/errors.d.ts.map +1 -0
  112. package/dist/types/errors.js +266 -0
  113. package/dist/types/errors.js.map +1 -0
  114. package/dist/types/evidence.d.ts +102 -0
  115. package/dist/types/evidence.d.ts.map +1 -0
  116. package/dist/types/evidence.js +5 -0
  117. package/dist/types/evidence.js.map +1 -0
  118. package/dist/types/index.d.ts +18 -0
  119. package/dist/types/index.d.ts.map +1 -0
  120. package/dist/types/index.js +9 -0
  121. package/dist/types/index.js.map +1 -0
  122. package/dist/types/result.d.ts +62 -0
  123. package/dist/types/result.d.ts.map +1 -0
  124. package/dist/types/result.js +34 -0
  125. package/dist/types/result.js.map +1 -0
  126. package/dist/types/scent.d.ts +55 -0
  127. package/dist/types/scent.d.ts.map +1 -0
  128. package/dist/types/scent.js +5 -0
  129. package/dist/types/scent.js.map +1 -0
  130. package/dist/types/signature.d.ts +47 -0
  131. package/dist/types/signature.d.ts.map +1 -0
  132. package/dist/types/signature.js +68 -0
  133. package/dist/types/signature.js.map +1 -0
  134. package/dist/types/threat.d.ts +38 -0
  135. package/dist/types/threat.d.ts.map +1 -0
  136. package/dist/types/threat.js +18 -0
  137. package/dist/types/threat.js.map +1 -0
  138. package/dist/utils/binary-codec.d.ts +225 -0
  139. package/dist/utils/binary-codec.d.ts.map +1 -0
  140. package/dist/utils/binary-codec.js +266 -0
  141. package/dist/utils/binary-codec.js.map +1 -0
  142. package/dist/utils/compare.d.ts +26 -0
  143. package/dist/utils/compare.d.ts.map +1 -0
  144. package/dist/utils/compare.js +44 -0
  145. package/dist/utils/compare.js.map +1 -0
  146. package/dist/utils/encode.d.ts +39 -0
  147. package/dist/utils/encode.d.ts.map +1 -0
  148. package/dist/utils/encode.js +124 -0
  149. package/dist/utils/encode.js.map +1 -0
  150. package/dist/utils/hash.d.ts +19 -0
  151. package/dist/utils/hash.d.ts.map +1 -0
  152. package/dist/utils/hash.js +25 -0
  153. package/dist/utils/hash.js.map +1 -0
  154. package/dist/utils/id.d.ts +20 -0
  155. package/dist/utils/id.d.ts.map +1 -0
  156. package/dist/utils/id.js +47 -0
  157. package/dist/utils/id.js.map +1 -0
  158. package/dist/utils/runtime.d.ts +24 -0
  159. package/dist/utils/runtime.d.ts.map +1 -0
  160. package/dist/utils/runtime.js +68 -0
  161. package/dist/utils/runtime.js.map +1 -0
  162. package/dist/utils/serialize.d.ts +14 -0
  163. package/dist/utils/serialize.d.ts.map +1 -0
  164. package/dist/utils/serialize.js +27 -0
  165. package/dist/utils/serialize.js.map +1 -0
  166. package/package.json +54 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tracehound.js","sourceRoot":"","sources":["../../src/core/tracehound.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAe,MAAM,YAAY,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAyB,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAyC,MAAM,iBAAiB,CAAA;AACxF,OAAO,EAAE,yBAAyB,EAA6B,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,iBAAiB,EAAqB,MAAM,mBAAmB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAiB,MAAM,cAAc,CAAA;AAoE3D,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,mBAAmB,GAAoB;IAC3C,QAAQ,EAAE,CAAC;IACX,OAAO,EAAE,MAAM;IACf,gBAAgB,EAAE,IAAI;IACtB,eAAe,EAAE,OAAO;IACxB,eAAe,EAAE,GAAG;CACrB,CAAA;AAED;;GAEG;AACH,MAAM,UAAU;IACL,KAAK,CAAQ;IACb,UAAU,CAAY;IACtB,WAAW,CAAc;IACzB,OAAO,CAAU;IACjB,UAAU,CAAY;IACtB,aAAa,CAAsB;IACnC,SAAS,CAAY;IAEb,eAAe,CAAkB;IAElD,YAAY,UAA6B,EAAE;QACzC,wBAAwB;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QAClC,IAAI,CAAC,aAAa,GAAG,yBAAyB,EAAE,CAAA;QAEhD,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAC9B;YACE,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,IAAI,MAAM;YAChD,QAAQ,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,IAAI,WAAW;YACrD,cAAc,EAAE,UAAU;SAC3B,EACD,IAAI,CAAC,UAAU,CAChB,CAAA;QAED,IAAI,CAAC,WAAW,GAAG,iBAAiB,CAAC;YACnC,QAAQ,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,IAAI,MAAM;YAC/C,WAAW,EAAE,OAAO,CAAC,SAAS,EAAE,WAAW,IAAI,GAAG;YAClD,eAAe,EAAE,OAAO,CAAC,SAAS,EAAE,eAAe,IAAI,OAAO;SAC/D,CAAC,CAAA;QAEF,IAAI,CAAC,OAAO,GAAG,aAAa,CAAC;YAC3B,kBAAkB,EAAE,OAAO,CAAC,OAAO,EAAE,kBAAkB,IAAI,EAAE;YAC7D,aAAa,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,IAAI,MAAM;YACvD,uBAAuB,EAAE,OAAO,CAAC,OAAO,EAAE,uBAAuB,IAAI,GAAG;SACzE,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,GAAG,IAAI,eAAe,EAAE,CAAA;QAE5C,eAAe;QACf,IAAI,CAAC,KAAK,GAAG,WAAW,CACtB,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,SAAS,EAAE,EACvD,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,eAAe,CACrB,CAAA;QAED,mBAAmB;QACnB,MAAM,UAAU,GAAoB;YAClC,GAAG,mBAAmB;YACtB,GAAG,OAAO,CAAC,SAAS;SACrB,CAAA;QACD,IAAI,CAAC,SAAS,GAAG,eAAe,CAAC,UAAU,CAAC,CAAA;IAC9C,CAAC;CACF;AAED,gFAAgF;AAChF,UAAU;AACV,gFAAgF;AAEhF;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA6B,EAAE;IAC9D,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Trust Boundary Configuration
3
+ *
4
+ * Developer-defined trust levels for external integrations.
5
+ * RFC-0000: "Biz default'ları sağlıyoruz, sınırları developer çiziyor."
6
+ *
7
+ * SECURITY MODEL:
8
+ * - 'trusted': No additional verification
9
+ * - 'verify': Cross-check with internal state
10
+ * - 'untrusted': Full validation, limited access
11
+ * - 'write-only': Can only receive, cannot query
12
+ */
13
+ /**
14
+ * Trust level for cluster/shared state.
15
+ */
16
+ export type ClusterTrustLevel = 'trusted' | 'untrusted';
17
+ /**
18
+ * Trust level for cold storage.
19
+ */
20
+ export type ColdStorageTrustLevel = 'write-only' | 'untrusted';
21
+ /**
22
+ * Trust level for external detectors.
23
+ */
24
+ export type DetectorTrustLevel = 'trusted' | 'verify';
25
+ /**
26
+ * Cluster configuration.
27
+ */
28
+ export interface ClusterBoundaryConfig {
29
+ /** Shared state backend */
30
+ sharedState: 'redis' | 'memory' | 'none';
31
+ /** Trust level for cluster peers. Default: 'untrusted' */
32
+ trustLevel: ClusterTrustLevel;
33
+ }
34
+ /**
35
+ * Cold storage boundary configuration.
36
+ */
37
+ export interface ColdStorageBoundaryConfig {
38
+ /** Storage endpoint URL */
39
+ endpoint: string;
40
+ /** Trust level. Default: 'write-only' */
41
+ trustLevel: ColdStorageTrustLevel;
42
+ }
43
+ /**
44
+ * Detector boundary configuration.
45
+ */
46
+ export interface DetectorBoundaryConfig {
47
+ /** Detector source */
48
+ source: 'external' | 'internal';
49
+ /** Trust level. Default: 'trusted' for internal, 'verify' for external */
50
+ trustLevel: DetectorTrustLevel;
51
+ }
52
+ /**
53
+ * Complete trust boundary configuration.
54
+ */
55
+ export interface TrustBoundaryConfig {
56
+ /** Cluster/shared state boundaries */
57
+ cluster?: ClusterBoundaryConfig;
58
+ /** Cold storage boundaries */
59
+ coldStorage?: ColdStorageBoundaryConfig;
60
+ /** Detector boundaries */
61
+ detector?: DetectorBoundaryConfig;
62
+ }
63
+ /**
64
+ * Default trust boundary configuration.
65
+ * Conservative defaults: assume untrusted.
66
+ */
67
+ export declare const DEFAULT_TRUST_BOUNDARY: Required<TrustBoundaryConfig>;
68
+ /**
69
+ * Merge partial trust boundary with defaults.
70
+ */
71
+ export declare function mergeTrustBoundary(partial?: Partial<TrustBoundaryConfig>): Required<TrustBoundaryConfig>;
72
+ /**
73
+ * Validate trust boundary configuration.
74
+ * Returns array of validation errors, empty if valid.
75
+ */
76
+ export declare function validateTrustBoundary(config: TrustBoundaryConfig): string[];
77
+ /**
78
+ * Check if a detector result should be verified based on trust boundary.
79
+ */
80
+ export declare function shouldVerifyDetector(config: TrustBoundaryConfig): boolean;
81
+ /**
82
+ * Check if cluster state should be treated as untrusted.
83
+ */
84
+ export declare function isClusterUntrusted(config: TrustBoundaryConfig): boolean;
85
+ //# sourceMappingURL=trust-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-boundary.d.ts","sourceRoot":"","sources":["../../src/core/trust-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,WAAW,CAAA;AAEvD;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,YAAY,GAAG,WAAW,CAAA;AAE9D;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,CAAA;AAErD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAA;IACxC,0DAA0D;IAC1D,UAAU,EAAE,iBAAiB,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,yCAAyC;IACzC,UAAU,EAAE,qBAAqB,CAAA;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,sBAAsB;IACtB,MAAM,EAAE,UAAU,GAAG,UAAU,CAAA;IAC/B,0EAA0E;IAC1E,UAAU,EAAE,kBAAkB,CAAA;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,sCAAsC;IACtC,OAAO,CAAC,EAAE,qBAAqB,CAAA;IAC/B,8BAA8B;IAC9B,WAAW,CAAC,EAAE,yBAAyB,CAAA;IACvC,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,sBAAsB,CAAA;CAClC;AAED;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,mBAAmB,CAahE,CAAA;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACrC,QAAQ,CAAC,mBAAmB,CAAC,CAQ/B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAc3E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAEzE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAEvE"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Trust Boundary Configuration
3
+ *
4
+ * Developer-defined trust levels for external integrations.
5
+ * RFC-0000: "Biz default'ları sağlıyoruz, sınırları developer çiziyor."
6
+ *
7
+ * SECURITY MODEL:
8
+ * - 'trusted': No additional verification
9
+ * - 'verify': Cross-check with internal state
10
+ * - 'untrusted': Full validation, limited access
11
+ * - 'write-only': Can only receive, cannot query
12
+ */
13
+ /**
14
+ * Default trust boundary configuration.
15
+ * Conservative defaults: assume untrusted.
16
+ */
17
+ export const DEFAULT_TRUST_BOUNDARY = {
18
+ cluster: {
19
+ sharedState: 'none',
20
+ trustLevel: 'untrusted',
21
+ },
22
+ coldStorage: {
23
+ endpoint: '',
24
+ trustLevel: 'write-only',
25
+ },
26
+ detector: {
27
+ source: 'internal',
28
+ trustLevel: 'trusted',
29
+ },
30
+ };
31
+ /**
32
+ * Merge partial trust boundary with defaults.
33
+ */
34
+ export function mergeTrustBoundary(partial) {
35
+ if (!partial)
36
+ return { ...DEFAULT_TRUST_BOUNDARY };
37
+ return {
38
+ cluster: { ...DEFAULT_TRUST_BOUNDARY.cluster, ...partial.cluster },
39
+ coldStorage: { ...DEFAULT_TRUST_BOUNDARY.coldStorage, ...partial.coldStorage },
40
+ detector: { ...DEFAULT_TRUST_BOUNDARY.detector, ...partial.detector },
41
+ };
42
+ }
43
+ /**
44
+ * Validate trust boundary configuration.
45
+ * Returns array of validation errors, empty if valid.
46
+ */
47
+ export function validateTrustBoundary(config) {
48
+ const errors = [];
49
+ // Cold storage endpoint required if configured
50
+ if (config.coldStorage && config.coldStorage.endpoint === '') {
51
+ errors.push('coldStorage.endpoint is required when coldStorage is configured');
52
+ }
53
+ // External detector requires 'verify' trust level
54
+ if (config.detector?.source === 'external' && config.detector.trustLevel === 'trusted') {
55
+ errors.push("External detector should use 'verify' trust level, not 'trusted'");
56
+ }
57
+ return errors;
58
+ }
59
+ /**
60
+ * Check if a detector result should be verified based on trust boundary.
61
+ */
62
+ export function shouldVerifyDetector(config) {
63
+ return config.detector?.trustLevel === 'verify';
64
+ }
65
+ /**
66
+ * Check if cluster state should be treated as untrusted.
67
+ */
68
+ export function isClusterUntrusted(config) {
69
+ return config.cluster?.trustLevel === 'untrusted';
70
+ }
71
+ //# sourceMappingURL=trust-boundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-boundary.js","sourceRoot":"","sources":["../../src/core/trust-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA2DH;;;GAGG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkC;IACnE,OAAO,EAAE;QACP,WAAW,EAAE,MAAM;QACnB,UAAU,EAAE,WAAW;KACxB;IACD,WAAW,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,YAAY;KACzB;IACD,QAAQ,EAAE;QACR,MAAM,EAAE,UAAU;QAClB,UAAU,EAAE,SAAS;KACtB;CACF,CAAA;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAAsC;IAEtC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,GAAG,sBAAsB,EAAE,CAAA;IAElD,OAAO;QACL,OAAO,EAAE,EAAE,GAAG,sBAAsB,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;QAClE,WAAW,EAAE,EAAE,GAAG,sBAAsB,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE;QAC9E,QAAQ,EAAE,EAAE,GAAG,sBAAsB,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;KACtE,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAA2B;IAC/D,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,+CAA+C;IAC/C,IAAI,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,QAAQ,KAAK,EAAE,EAAE,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAA;IAChF,CAAC;IAED,kDAAkD;IAClD,IAAI,MAAM,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACvF,MAAM,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAA;IACjF,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA2B;IAC9D,OAAO,MAAM,CAAC,QAAQ,EAAE,UAAU,KAAK,QAAQ,CAAA;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA2B;IAC5D,OAAO,MAAM,CAAC,OAAO,EAAE,UAAU,KAAK,WAAW,CAAA;AACnD,CAAC"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Watcher - pull-based observability for system state.
3
+ *
4
+ * RFC-0000 CRITICAL INVARIANTS:
5
+ * - NO EventEmitter pattern (pull-based only)
6
+ * - snapshot() returns immutable state
7
+ * - alert() is internal, rate-limited
8
+ * - Watcher is an observer, not a controller
9
+ */
10
+ import type { Severity } from '../types/common.js';
11
+ /**
12
+ * Alert severity levels.
13
+ */
14
+ export type AlertSeverity = 'info' | 'warning' | 'critical';
15
+ /**
16
+ * Alert definition.
17
+ */
18
+ export interface Alert {
19
+ /** Alert ID */
20
+ id: string;
21
+ /** Alert type */
22
+ type: AlertType;
23
+ /** Alert severity */
24
+ severity: AlertSeverity;
25
+ /** Human-readable message */
26
+ message: string;
27
+ /** Timestamp of alert */
28
+ timestamp: number;
29
+ /** Additional context */
30
+ context?: Record<string, unknown>;
31
+ }
32
+ /**
33
+ * Alert types.
34
+ */
35
+ export type AlertType = 'threat_detected' | 'evidence_neutralized' | 'quarantine_full' | 'quarantine_high' | 'rate_limit_exceeded' | 'hound_timeout' | 'system_overload';
36
+ /**
37
+ * Threat statistics.
38
+ */
39
+ export interface ThreatStats {
40
+ /** Total threats detected */
41
+ total: number;
42
+ /** Threats by category */
43
+ byCategory: Record<string, number>;
44
+ /** Threats by severity */
45
+ bySeverity: Record<Severity, number>;
46
+ }
47
+ /**
48
+ * Quarantine statistics (from Watcher perspective).
49
+ */
50
+ export interface WatcherQuarantineStats {
51
+ /** Current count */
52
+ count: number;
53
+ /** Current bytes */
54
+ bytes: number;
55
+ /** Capacity percentage */
56
+ capacityPercent: number;
57
+ }
58
+ /**
59
+ * Watcher snapshot (immutable).
60
+ */
61
+ export interface WatcherSnapshot {
62
+ /** System uptime in ms */
63
+ uptimeMs: number;
64
+ /** Threat statistics */
65
+ threats: ThreatStats;
66
+ /** Quarantine statistics */
67
+ quarantine: WatcherQuarantineStats;
68
+ /** Total alerts emitted */
69
+ totalAlerts: number;
70
+ /** Alerts in current window */
71
+ alertsInWindow: number;
72
+ /** Last alert (if any) */
73
+ lastAlert: Alert | null;
74
+ /** Whether system is in overload state */
75
+ overloaded: boolean;
76
+ /** Timestamp of snapshot */
77
+ snapshotTime: number;
78
+ }
79
+ /**
80
+ * Watcher configuration.
81
+ */
82
+ export interface WatcherConfig {
83
+ /** Maximum alerts per window (rate limiting) */
84
+ maxAlertsPerWindow: number;
85
+ /** Alert window in ms */
86
+ alertWindowMs: number;
87
+ /** Quarantine high watermark (0-1) */
88
+ quarantineHighWatermark: number;
89
+ }
90
+ /**
91
+ * Watcher interface.
92
+ *
93
+ * CRITICAL: NO EventEmitter. Pull-based only.
94
+ */
95
+ export interface IWatcher {
96
+ /**
97
+ * Get current state snapshot.
98
+ * External consumers poll this.
99
+ */
100
+ snapshot(): Readonly<WatcherSnapshot>;
101
+ /**
102
+ * Record a threat detection.
103
+ * Internal use only.
104
+ */
105
+ recordThreat(category: string, severity: Severity): void;
106
+ /**
107
+ * Update quarantine stats.
108
+ * Internal use only.
109
+ */
110
+ updateQuarantine(count: number, bytes: number, maxBytes: number): void;
111
+ /**
112
+ * Emit an alert (rate-limited).
113
+ * Internal use only.
114
+ */
115
+ alert(alert: Omit<Alert, 'id' | 'timestamp'>): boolean;
116
+ /**
117
+ * Mark system as overloaded.
118
+ */
119
+ setOverloaded(overloaded: boolean): void;
120
+ }
121
+ /**
122
+ * Watcher implementation.
123
+ *
124
+ * Pull-based observability. No EventEmitter.
125
+ */
126
+ export declare class Watcher implements IWatcher {
127
+ private readonly config;
128
+ private readonly startTime;
129
+ private readonly alerts;
130
+ private alertWindowStart;
131
+ private alertsInCurrentWindow;
132
+ private _totalThreats;
133
+ private readonly threatsByCategory;
134
+ private readonly threatsBySeverity;
135
+ private _quarantineCount;
136
+ private _quarantineBytes;
137
+ private _quarantineCapacity;
138
+ private _overloaded;
139
+ private _lastAlert;
140
+ constructor(config: WatcherConfig);
141
+ snapshot(): Readonly<WatcherSnapshot>;
142
+ recordThreat(category: string, severity: Severity): void;
143
+ updateQuarantine(count: number, bytes: number, maxBytes: number): void;
144
+ alert(alertInput: Omit<Alert, 'id' | 'timestamp'>): boolean;
145
+ setOverloaded(overloaded: boolean): void;
146
+ }
147
+ /**
148
+ * Create a Watcher instance.
149
+ *
150
+ * @param config - Watcher configuration
151
+ */
152
+ export declare function createWatcher(config: WatcherConfig): IWatcher;
153
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Watcher - pull-based observability for system state.
3
+ *
4
+ * RFC-0000 CRITICAL INVARIANTS:
5
+ * - NO EventEmitter pattern (pull-based only)
6
+ * - snapshot() returns immutable state
7
+ * - alert() is internal, rate-limited
8
+ * - Watcher is an observer, not a controller
9
+ */
10
+ // ─────────────────────────────────────────────────────────────────────────────
11
+ // Implementation
12
+ // ─────────────────────────────────────────────────────────────────────────────
13
+ /**
14
+ * Watcher implementation.
15
+ *
16
+ * Pull-based observability. No EventEmitter.
17
+ */
18
+ export class Watcher {
19
+ config;
20
+ startTime;
21
+ alerts = [];
22
+ alertWindowStart;
23
+ alertsInCurrentWindow = 0;
24
+ // Threat tracking
25
+ _totalThreats = 0;
26
+ threatsByCategory = new Map();
27
+ threatsBySeverity = new Map();
28
+ // Quarantine tracking
29
+ _quarantineCount = 0;
30
+ _quarantineBytes = 0;
31
+ _quarantineCapacity = 0;
32
+ // State
33
+ _overloaded = false;
34
+ _lastAlert = null;
35
+ constructor(config) {
36
+ this.config = config;
37
+ this.startTime = Date.now();
38
+ this.alertWindowStart = this.startTime;
39
+ }
40
+ snapshot() {
41
+ const now = Date.now();
42
+ // Build threat stats
43
+ const byCategory = {};
44
+ for (const [cat, count] of this.threatsByCategory) {
45
+ byCategory[cat] = count;
46
+ }
47
+ const bySeverity = {
48
+ low: this.threatsBySeverity.get('low') ?? 0,
49
+ medium: this.threatsBySeverity.get('medium') ?? 0,
50
+ high: this.threatsBySeverity.get('high') ?? 0,
51
+ critical: this.threatsBySeverity.get('critical') ?? 0,
52
+ };
53
+ return Object.freeze({
54
+ uptimeMs: now - this.startTime,
55
+ threats: {
56
+ total: this._totalThreats,
57
+ byCategory,
58
+ bySeverity,
59
+ },
60
+ quarantine: {
61
+ count: this._quarantineCount,
62
+ bytes: this._quarantineBytes,
63
+ capacityPercent: this._quarantineCapacity,
64
+ },
65
+ totalAlerts: this.alerts.length,
66
+ alertsInWindow: this.alertsInCurrentWindow,
67
+ lastAlert: this._lastAlert,
68
+ overloaded: this._overloaded,
69
+ snapshotTime: now,
70
+ });
71
+ }
72
+ recordThreat(category, severity) {
73
+ this._totalThreats++;
74
+ // Update by category
75
+ const catCount = this.threatsByCategory.get(category) ?? 0;
76
+ this.threatsByCategory.set(category, catCount + 1);
77
+ // Update by severity
78
+ const sevCount = this.threatsBySeverity.get(severity) ?? 0;
79
+ this.threatsBySeverity.set(severity, sevCount + 1);
80
+ }
81
+ updateQuarantine(count, bytes, maxBytes) {
82
+ this._quarantineCount = count;
83
+ this._quarantineBytes = bytes;
84
+ this._quarantineCapacity = maxBytes > 0 ? (bytes / maxBytes) * 100 : 0;
85
+ // Check high watermark
86
+ if (this._quarantineCapacity >= this.config.quarantineHighWatermark * 100) {
87
+ this.alert({
88
+ type: 'quarantine_high',
89
+ severity: 'warning',
90
+ message: `Quarantine at ${this._quarantineCapacity.toFixed(1)}% capacity`,
91
+ context: { count, bytes, maxBytes },
92
+ });
93
+ }
94
+ }
95
+ alert(alertInput) {
96
+ const now = Date.now();
97
+ // Check if we need to reset the window
98
+ if (now - this.alertWindowStart >= this.config.alertWindowMs) {
99
+ this.alertWindowStart = now;
100
+ this.alertsInCurrentWindow = 0;
101
+ }
102
+ // Rate limit check
103
+ if (this.alertsInCurrentWindow >= this.config.maxAlertsPerWindow) {
104
+ return false; // Rate limited
105
+ }
106
+ // Create alert
107
+ const alert = {
108
+ ...alertInput,
109
+ id: `alert-${this.alerts.length + 1}`,
110
+ timestamp: now,
111
+ };
112
+ this.alerts.push(alert);
113
+ this.alertsInCurrentWindow++;
114
+ this._lastAlert = alert;
115
+ return true;
116
+ }
117
+ setOverloaded(overloaded) {
118
+ const wasOverloaded = this._overloaded;
119
+ this._overloaded = overloaded;
120
+ // Emit alert on transition to overloaded
121
+ if (overloaded && !wasOverloaded) {
122
+ this.alert({
123
+ type: 'system_overload',
124
+ severity: 'critical',
125
+ message: 'System is overloaded',
126
+ });
127
+ }
128
+ }
129
+ }
130
+ // ─────────────────────────────────────────────────────────────────────────────
131
+ // Factory
132
+ // ─────────────────────────────────────────────────────────────────────────────
133
+ /**
134
+ * Create a Watcher instance.
135
+ *
136
+ * @param config - Watcher configuration
137
+ */
138
+ export function createWatcher(config) {
139
+ return new Watcher(config);
140
+ }
141
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/core/watcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @tracehound/core
3
+ *
4
+ * Security buffer system with immune system architecture.
5
+ */
6
+ export type { AlertConfig, AuditConfig, ColdStorageConfig, ErrorState, EvacuateRecord, EvidenceHandle, GenerateSignatureOptions, HoundConfig, InterceptResult, JsonPrimitive, JsonSerializable, NeutralizationRecord, PurgeRecord, QuarantineConfig, RateLimitConfig, RuntimeConfig, Scent, SchedulerConfig, Severity, Threat, ThreatCategory, ThreatInput, ThreatSignal, TracehoundConfig, TracehoundError, } from './types/index.js';
7
+ export { DEFAULT_CONFIG, mergeWithDefaults } from './types/index.js';
8
+ export { createError, Errors } from './types/index.js';
9
+ export { isClean, isError, isIgnored, isQuarantined, isRateLimited } from './types/index.js';
10
+ export { createThreatInput } from './types/index.js';
11
+ export { compareSignatures, generateSignature, validateSignature } from './types/index.js';
12
+ export { AuditChain, GENESIS_HASH } from './core/audit-chain.js';
13
+ export { Evidence } from './core/evidence.js';
14
+ export { Quarantine } from './core/quarantine.js';
15
+ export type { InsertResult, QuarantineStats } from './core/quarantine.js';
16
+ export { createRateLimiter, RateLimiter } from './core/rate-limiter.js';
17
+ export type { IRateLimiter, RateLimiterStats, RateLimitResult } from './core/rate-limiter.js';
18
+ export { createEvidenceFactory, EvidenceFactory } from './core/evidence-factory.js';
19
+ export type { EvidenceCreationResult, EvidenceFactoryOptions, IEvidenceFactory, } from './core/evidence-factory.js';
20
+ export { Agent, createAgent } from './core/agent.js';
21
+ export type { AgentConfig, AgentStats, IAgent } from './core/agent.js';
22
+ export { createHoundPool, createMockAdapter, HoundPool } from './core/hound-pool.js';
23
+ export type { HoundPoolConfig, HoundPoolStats, HoundResult, IHoundPool, PoolExhaustedAction, } from './core/hound-pool.js';
24
+ export type { HoundProcessConstraints } from './core/process-adapter.js';
25
+ export { createScheduler, Scheduler } from './core/scheduler.js';
26
+ export type { BusyChecker, IScheduler, ScheduledTask, SchedulerStats, TickSchedulerConfig, } from './core/scheduler.js';
27
+ export { createWatcher, Watcher } from './core/watcher.js';
28
+ export type { Alert, AlertSeverity, AlertType, IWatcher, ThreatStats, WatcherConfig, WatcherQuarantineStats, WatcherSnapshot, } from './core/watcher.js';
29
+ export { hash, hashBuffer } from './utils/hash.js';
30
+ export { generateSecureId, isValidSecureId } from './utils/id.js';
31
+ export { serialize } from './utils/serialize.js';
32
+ export { AsyncGzipCodec, createAsyncColdPathCodec, createColdPathCodec, createHotPathCodec, decodeWithIntegrityAsync, encodeWithIntegrityAsync, GzipCodec, } from './utils/binary-codec.js';
33
+ export type { AsyncColdPathCodec, AsyncHotPathCodec, CodecStats, ColdPathCodec, HotPathCodec, } from './utils/binary-codec.js';
34
+ export { constantTimeBufferEqual, constantTimeEqual } from './utils/compare.js';
35
+ export { encodePayload, estimatePayloadSize } from './utils/encode.js';
36
+ export type { EncodeResult } from './utils/encode.js';
37
+ export { createMemoryColdStorage, MemoryColdStorage } from './core/cold-storage.js';
38
+ export type { ColdStorageReadResult, ColdStorageWriteResult, IColdStorageAdapter, } from './core/cold-storage.js';
39
+ export { createS3ColdStorage, S3ColdStorage } from './core/s3-cold-storage.js';
40
+ export type { S3ColdStorageConfig, S3LikeClient } from './core/s3-cold-storage.js';
41
+ export { DEFAULT_TRUST_BOUNDARY, isClusterUntrusted, mergeTrustBoundary, shouldVerifyDetector, validateTrustBoundary, } from './core/trust-boundary.js';
42
+ export type { ClusterBoundaryConfig, ClusterTrustLevel, ColdStorageBoundaryConfig, ColdStorageTrustLevel, DetectorBoundaryConfig, DetectorTrustLevel, TrustBoundaryConfig, } from './core/trust-boundary.js';
43
+ export { createLaneQueue, DEFAULT_LANE_CONFIG, LaneQueue } from './core/lane-queue.js';
44
+ export type { Alert as LaneAlert, LaneConfig, LaneQueueConfig, LaneStats, } from './core/lane-queue.js';
45
+ export { createFailSafe, DEFAULT_FAIL_SAFE_CONFIG, FailSafe } from './core/fail-safe.js';
46
+ export type { FailSafeConfig, PanicCallback, PanicEvent, PanicLevel, PanicReason, ThresholdConfig, } from './core/fail-safe.js';
47
+ export { createTracehound } from './core/tracehound.js';
48
+ export type { ITracehound, TracehoundOptions } from './core/tracehound.js';
49
+ export { createNotificationEmitter, NotificationEmitter } from './core/notification-emitter.js';
50
+ export type { EventCallback, EventType, EvidenceEvictedPayload, EvidenceQuarantinedPayload, INotificationEmitter, LicenseExpiredPayload, LicenseValidatedPayload, NotificationEmitterStats, RateLimitExceededPayload, SystemPanicPayload, ThreatDetectedPayload, TracehoundEvent, WebhookConfig, } from './core/notification-emitter.js';
51
+ export { createSecurityState, SecurityState } from './core/security-state.js';
52
+ export type { ISecurityState, LicenseState, QuarantineStateStats, RateLimitStats, SecurityHistoryEntry, SecuritySnapshot, SecurityStateConfig, SecurityStateStats, } from './core/security-state.js';
53
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,YAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,cAAc,EACd,wBAAwB,EACxB,WAAW,EACX,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,KAAK,EACL,eAAe,EACf,QAAQ,EACR,MAAM,EACN,cAAc,EACd,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAA;AAMzB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAMtD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAM5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAMpD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAM1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAMhE,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAM7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAMzE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACvE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAM7F,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AACnF,YAAY,EACV,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,4BAA4B,CAAA;AAMnC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACpD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAMtE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACpF,YAAY,EACV,eAAe,EACf,cAAc,EACd,WAAW,EACX,UAAU,EACV,mBAAmB,GACpB,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAMxE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAChE,YAAY,EACV,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,mBAAmB,GACpB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAC1D,YAAY,EACV,KAAK,EACL,aAAa,EACb,SAAS,EACT,QAAQ,EACR,WAAW,EACX,aAAa,EACb,sBAAsB,EACtB,eAAe,GAChB,MAAM,mBAAmB,CAAA;AAM1B,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMlD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAMjE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAMhD,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,SAAS,GACV,MAAM,yBAAyB,CAAA;AAChC,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,YAAY,GACb,MAAM,yBAAyB,CAAA;AAChC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACtE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAMrD,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACnF,YAAY,EACV,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAM/B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9E,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAMlF,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,YAAY,EACV,qBAAqB,EACrB,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0BAA0B,CAAA;AAMjC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACtF,YAAY,EACV,KAAK,IAAI,SAAS,EAClB,UAAU,EACV,eAAe,EACf,SAAS,GACV,MAAM,sBAAsB,CAAA;AAM7B,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AACxF,YAAY,EACV,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAA;AAM5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,YAAY,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAM1E,OAAO,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AAC/F,YAAY,EACV,aAAa,EACb,SAAS,EACT,sBAAsB,EACtB,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EACf,aAAa,GACd,MAAM,gCAAgC,CAAA;AAMvC,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAC7E,YAAY,EACV,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,oBAAoB,EACpB,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,0BAA0B,CAAA"}