@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,266 @@
1
+ /**
2
+ * Tracehound error handling.
3
+ *
4
+ * Error codes are organized by domain:
5
+ * - CONFIG_* : Configuration validation errors
6
+ * - SCENT_* : Scent/payload validation errors
7
+ * - AGENT_* : Agent processing errors
8
+ * - QUARANTINE_* : Quarantine operations
9
+ * - EVIDENCE_* : Evidence lifecycle
10
+ * - CODEC_* : Encoding/decoding errors
11
+ * - COLD_* : Cold storage errors
12
+ * - PROCESS_* : Hound process errors
13
+ * - RATE_* : Rate limiting
14
+ * - RUNTIME_* : Runtime environment
15
+ */
16
+ /**
17
+ * Create a TracehoundError.
18
+ */
19
+ export function createError(state, code, message, options) {
20
+ return {
21
+ state,
22
+ code,
23
+ message,
24
+ context: options?.context,
25
+ recoverable: options?.recoverable ?? true,
26
+ };
27
+ }
28
+ // ─────────────────────────────────────────────────────────────────────────────
29
+ // Pre-defined Error Factories
30
+ // ─────────────────────────────────────────────────────────────────────────────
31
+ export const Errors = {
32
+ // ─────────────────────────────────────────────────────────────────────────
33
+ // Config Errors
34
+ // ─────────────────────────────────────────────────────────────────────────
35
+ invalidConfigQuarantine: (issue) => createError('config', 'CONFIG_QUARANTINE_INVALID', `Invalid quarantine config: ${issue}`, {
36
+ context: { issue },
37
+ recoverable: false,
38
+ }),
39
+ invalidConfigRateLimit: (issue) => createError('config', 'CONFIG_RATELIMIT_INVALID', `Invalid rate limit config: ${issue}`, {
40
+ context: { issue },
41
+ recoverable: false,
42
+ }),
43
+ invalidConfigAgent: (issue) => createError('config', 'CONFIG_AGENT_INVALID', `Invalid agent config: ${issue}`, {
44
+ context: { issue },
45
+ recoverable: false,
46
+ }),
47
+ invalidConfigScheduler: (issue) => createError('config', 'CONFIG_SCHEDULER_INVALID', `Invalid scheduler config: ${issue}`, {
48
+ context: { issue },
49
+ recoverable: false,
50
+ }),
51
+ // ─────────────────────────────────────────────────────────────────────────
52
+ // Scent Errors
53
+ // ─────────────────────────────────────────────────────────────────────────
54
+ scentPayloadInvalid: (reason) => createError('scent', 'SCENT_PAYLOAD_INVALID', `Invalid scent payload: ${reason}`, {
55
+ context: { reason },
56
+ recoverable: false,
57
+ }),
58
+ scentSourceMissing: () => createError('scent', 'SCENT_SOURCE_MISSING', 'Scent source is required', {
59
+ recoverable: false,
60
+ }),
61
+ scentIdInvalid: (id) => createError('scent', 'SCENT_ID_INVALID', `Invalid scent ID format: ${id}`, {
62
+ context: { id },
63
+ recoverable: false,
64
+ }),
65
+ // ─────────────────────────────────────────────────────────────────────────
66
+ // Agent Errors
67
+ // ─────────────────────────────────────────────────────────────────────────
68
+ payloadTooLarge: (size, limit) => createError('agent', 'AGENT_PAYLOAD_TOO_LARGE', `Payload size ${size} exceeds limit ${limit}`, {
69
+ context: { size, limit },
70
+ recoverable: false,
71
+ }),
72
+ serializationFailed: (reason) => createError('agent', 'AGENT_SERIALIZATION_FAILED', `Failed to serialize: ${reason}`, {
73
+ context: { reason },
74
+ recoverable: false,
75
+ }),
76
+ interceptFailed: (reason) => createError('agent', 'AGENT_INTERCEPT_FAILED', `Intercept failed: ${reason}`, {
77
+ context: { reason },
78
+ recoverable: true,
79
+ }),
80
+ // ─────────────────────────────────────────────────────────────────────────
81
+ // Quarantine Errors
82
+ // ─────────────────────────────────────────────────────────────────────────
83
+ quarantineFull: (count, maxCount) => createError('quarantine', 'QUARANTINE_FULL', `Quarantine at capacity: ${count}/${maxCount}`, {
84
+ context: { count, maxCount },
85
+ recoverable: false,
86
+ }),
87
+ quarantineEvictFailed: (reason) => createError('quarantine', 'QUARANTINE_EVICT_FAILED', `Eviction failed: ${reason}`, {
88
+ context: { reason },
89
+ recoverable: false,
90
+ }),
91
+ // ─────────────────────────────────────────────────────────────────────────
92
+ // Evidence Errors
93
+ // ─────────────────────────────────────────────────────────────────────────
94
+ evidenceAlreadyDisposed: (signature) => createError('evidence', 'EVIDENCE_DISPOSED', `Evidence ${signature} already disposed`, {
95
+ context: { signature },
96
+ recoverable: false,
97
+ }),
98
+ evidenceTransferFailed: (signature) => createError('evidence', 'EVIDENCE_TRANSFER_FAILED', `Failed to transfer evidence ${signature}`, {
99
+ context: { signature },
100
+ recoverable: false,
101
+ }),
102
+ evidenceEmpty: () => createError('evidence', 'EVIDENCE_EMPTY', 'Evidence bytes cannot be empty', {
103
+ recoverable: false,
104
+ }),
105
+ evidenceInvalidBytes: () => createError('evidence', 'EVIDENCE_INVALID_BYTES', 'Evidence bytes must be ArrayBuffer', {
106
+ recoverable: false,
107
+ }),
108
+ evidenceHashMismatch: (expected, actual) => createError('evidence', 'EVIDENCE_HASH_MISMATCH', `Hash mismatch: expected ${expected}, got ${actual}`, {
109
+ context: { expected, actual },
110
+ recoverable: false,
111
+ }),
112
+ // ─────────────────────────────────────────────────────────────────────────
113
+ // Codec Errors
114
+ // ─────────────────────────────────────────────────────────────────────────
115
+ codecEncodeFailed: (reason) => createError('codec', 'CODEC_ENCODE_FAILED', `Encoding failed: ${reason}`, {
116
+ context: { reason },
117
+ recoverable: false,
118
+ }),
119
+ codecDecodeFailed: (reason) => createError('codec', 'CODEC_DECODE_FAILED', `Decoding failed: ${reason}`, {
120
+ context: { reason },
121
+ recoverable: false,
122
+ }),
123
+ codecIntegrityFailed: () => createError('codec', 'CODEC_INTEGRITY_FAILED', 'Integrity verification failed', {
124
+ recoverable: false,
125
+ }),
126
+ // ─────────────────────────────────────────────────────────────────────────
127
+ // Cold Storage Errors
128
+ // ─────────────────────────────────────────────────────────────────────────
129
+ coldStorageWriteFailed: (id, reason) => createError('cold_storage', 'COLD_WRITE_FAILED', `Failed to write ${id}: ${reason}`, {
130
+ context: { id, reason },
131
+ recoverable: true,
132
+ }),
133
+ coldStorageReadFailed: (id, reason) => createError('cold_storage', 'COLD_READ_FAILED', `Failed to read ${id}: ${reason}`, {
134
+ context: { id, reason },
135
+ recoverable: true,
136
+ }),
137
+ coldStorageNotFound: (id) => createError('cold_storage', 'COLD_NOT_FOUND', `Evidence ${id} not found in cold storage`, {
138
+ context: { id },
139
+ recoverable: false,
140
+ }),
141
+ coldStorageUnavailable: () => createError('cold_storage', 'COLD_UNAVAILABLE', 'Cold storage is unavailable', {
142
+ recoverable: true,
143
+ }),
144
+ // ─────────────────────────────────────────────────────────────────────────
145
+ // Process Errors
146
+ // ─────────────────────────────────────────────────────────────────────────
147
+ processSpawnFailed: (reason) => createError('process', 'PROCESS_SPAWN_FAILED', `Failed to spawn process: ${reason}`, {
148
+ context: { reason },
149
+ recoverable: true,
150
+ }),
151
+ processTimeout: (houndId, elapsed) => createError('process', 'PROCESS_TIMEOUT', `Process ${houndId} timed out after ${elapsed}ms`, {
152
+ context: { houndId, elapsed },
153
+ recoverable: false,
154
+ }),
155
+ processCrashed: (houndId, exitCode) => createError('process', 'PROCESS_CRASHED', `Process ${houndId} crashed with code ${exitCode}`, {
156
+ context: { houndId, exitCode },
157
+ recoverable: true,
158
+ }),
159
+ processPoolExhausted: (action) => createError('process', 'PROCESS_POOL_EXHAUSTED', `Process pool exhausted, action: ${action}`, {
160
+ context: { action },
161
+ recoverable: true,
162
+ }),
163
+ // ─────────────────────────────────────────────────────────────────────────
164
+ // Rate Limit Errors
165
+ // ─────────────────────────────────────────────────────────────────────────
166
+ rateLimited: (source, retryAfter) => createError('ratelimit', 'RATE_LIMITED', `Source ${source} rate limited`, {
167
+ context: { source, retryAfter },
168
+ recoverable: true,
169
+ }),
170
+ rateSourceBlocked: (source, until) => createError('ratelimit', 'RATE_SOURCE_BLOCKED', `Source ${source} blocked until ${until}`, {
171
+ context: { source, until },
172
+ recoverable: true,
173
+ }),
174
+ // ─────────────────────────────────────────────────────────────────────────
175
+ // Runtime Errors
176
+ // ─────────────────────────────────────────────────────────────────────────
177
+ runtimeFlagMissing: (flag) => createError('runtime', 'RUNTIME_FLAG_MISSING', `Required runtime flag missing: ${flag}`, {
178
+ context: { flag },
179
+ recoverable: false,
180
+ }),
181
+ runtimeIntrinsicsNotFrozen: () => createError('runtime', 'RUNTIME_INTRINSICS_NOT_FROZEN', 'Intrinsics are not frozen', {
182
+ recoverable: false,
183
+ }),
184
+ // ─────────────────────────────────────────────────────────────────────────
185
+ // Scheduler Errors
186
+ // ─────────────────────────────────────────────────────────────────────────
187
+ schedulerTaskFailed: (taskId, reason) => createError('scheduler', 'SCHEDULER_TASK_FAILED', `Task ${taskId} failed: ${reason}`, {
188
+ context: { taskId, reason },
189
+ recoverable: true,
190
+ }),
191
+ schedulerAlreadyRunning: () => createError('scheduler', 'SCHEDULER_ALREADY_RUNNING', 'Scheduler is already running', {
192
+ recoverable: false,
193
+ }),
194
+ // ─────────────────────────────────────────────────────────────────────────
195
+ // Legacy aliases (for backward compatibility)
196
+ // ─────────────────────────────────────────────────────────────────────────
197
+ /** @deprecated Use processTimeout */
198
+ houndTimeout: (houndId, elapsed) => createError('process', 'PROCESS_TIMEOUT', `Hound ${houndId} timed out`, {
199
+ context: { houndId, elapsed },
200
+ recoverable: false,
201
+ }),
202
+ /** @deprecated Use evidenceHashMismatch */
203
+ hashMismatch: (expected, actual) => createError('evidence', 'EVIDENCE_HASH_MISMATCH', `Hash mismatch: expected ${expected}, got ${actual}`, {
204
+ context: { expected, actual },
205
+ recoverable: false,
206
+ }),
207
+ /** @deprecated Use evidenceInvalidBytes */
208
+ invalidBytesType: () => createError('evidence', 'EVIDENCE_INVALID_BYTES', 'Evidence bytes must be ArrayBuffer', {
209
+ recoverable: false,
210
+ }),
211
+ /** @deprecated Use evidenceEmpty */
212
+ emptyEvidence: () => createError('evidence', 'EVIDENCE_EMPTY', 'Evidence bytes cannot be empty', {
213
+ recoverable: false,
214
+ }),
215
+ };
216
+ // ─────────────────────────────────────────────────────────────────────────────
217
+ // Error Code Constants (for programmatic matching)
218
+ // ─────────────────────────────────────────────────────────────────────────────
219
+ export const ErrorCodes = {
220
+ // Config
221
+ CONFIG_QUARANTINE_INVALID: 'CONFIG_QUARANTINE_INVALID',
222
+ CONFIG_RATELIMIT_INVALID: 'CONFIG_RATELIMIT_INVALID',
223
+ CONFIG_AGENT_INVALID: 'CONFIG_AGENT_INVALID',
224
+ CONFIG_SCHEDULER_INVALID: 'CONFIG_SCHEDULER_INVALID',
225
+ // Scent
226
+ SCENT_PAYLOAD_INVALID: 'SCENT_PAYLOAD_INVALID',
227
+ SCENT_SOURCE_MISSING: 'SCENT_SOURCE_MISSING',
228
+ SCENT_ID_INVALID: 'SCENT_ID_INVALID',
229
+ // Agent
230
+ AGENT_PAYLOAD_TOO_LARGE: 'AGENT_PAYLOAD_TOO_LARGE',
231
+ AGENT_SERIALIZATION_FAILED: 'AGENT_SERIALIZATION_FAILED',
232
+ AGENT_INTERCEPT_FAILED: 'AGENT_INTERCEPT_FAILED',
233
+ // Quarantine
234
+ QUARANTINE_FULL: 'QUARANTINE_FULL',
235
+ QUARANTINE_EVICT_FAILED: 'QUARANTINE_EVICT_FAILED',
236
+ // Evidence
237
+ EVIDENCE_DISPOSED: 'EVIDENCE_DISPOSED',
238
+ EVIDENCE_TRANSFER_FAILED: 'EVIDENCE_TRANSFER_FAILED',
239
+ EVIDENCE_EMPTY: 'EVIDENCE_EMPTY',
240
+ EVIDENCE_INVALID_BYTES: 'EVIDENCE_INVALID_BYTES',
241
+ EVIDENCE_HASH_MISMATCH: 'EVIDENCE_HASH_MISMATCH',
242
+ // Codec
243
+ CODEC_ENCODE_FAILED: 'CODEC_ENCODE_FAILED',
244
+ CODEC_DECODE_FAILED: 'CODEC_DECODE_FAILED',
245
+ CODEC_INTEGRITY_FAILED: 'CODEC_INTEGRITY_FAILED',
246
+ // Cold Storage
247
+ COLD_WRITE_FAILED: 'COLD_WRITE_FAILED',
248
+ COLD_READ_FAILED: 'COLD_READ_FAILED',
249
+ COLD_NOT_FOUND: 'COLD_NOT_FOUND',
250
+ COLD_UNAVAILABLE: 'COLD_UNAVAILABLE',
251
+ // Process
252
+ PROCESS_SPAWN_FAILED: 'PROCESS_SPAWN_FAILED',
253
+ PROCESS_TIMEOUT: 'PROCESS_TIMEOUT',
254
+ PROCESS_CRASHED: 'PROCESS_CRASHED',
255
+ PROCESS_POOL_EXHAUSTED: 'PROCESS_POOL_EXHAUSTED',
256
+ // Rate Limit
257
+ RATE_LIMITED: 'RATE_LIMITED',
258
+ RATE_SOURCE_BLOCKED: 'RATE_SOURCE_BLOCKED',
259
+ // Runtime
260
+ RUNTIME_FLAG_MISSING: 'RUNTIME_FLAG_MISSING',
261
+ RUNTIME_INTRINSICS_NOT_FROZEN: 'RUNTIME_INTRINSICS_NOT_FROZEN',
262
+ // Scheduler
263
+ SCHEDULER_TASK_FAILED: 'SCHEDULER_TASK_FAILED',
264
+ SCHEDULER_ALREADY_RUNNING: 'SCHEDULER_ALREADY_RUNNING',
265
+ };
266
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/types/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Evidence handling types and records.
3
+ */
4
+ import type { Severity } from './common.js';
5
+ /**
6
+ * Record of a neutralized evidence.
7
+ * Created when evidence is destroyed with atomic snapshot.
8
+ */
9
+ export interface NeutralizationRecord {
10
+ /** Unique record ID */
11
+ id: string;
12
+ /** Threat signature */
13
+ signature: string;
14
+ /** Content hash */
15
+ hash: string;
16
+ /** Original size in bytes */
17
+ size: number;
18
+ /** Record status */
19
+ status: 'neutralized';
20
+ /** Timestamp of neutralization */
21
+ timestamp: number;
22
+ /** Previous record hash in audit chain */
23
+ previousHash: string;
24
+ }
25
+ /**
26
+ * Record of evacuated evidence.
27
+ * Created when evidence is moved to cold storage.
28
+ */
29
+ export interface EvacuateRecord {
30
+ /** Unique record ID */
31
+ id: string;
32
+ /** Threat signature */
33
+ signature: string;
34
+ /** Cold storage destination URL */
35
+ destination: string;
36
+ /** Timestamp of evacuation */
37
+ timestamp: number;
38
+ /** Whether payload was compressed */
39
+ compressed: boolean;
40
+ /** Size in bytes (after compression if applicable) */
41
+ size: number;
42
+ }
43
+ /**
44
+ * Record of purged evidence.
45
+ * Created during controlled destruction (timeout, error, panic).
46
+ */
47
+ export interface PurgeRecord {
48
+ /** Unique record ID */
49
+ id: string;
50
+ /** Reason for purge */
51
+ reason: 'timeout' | 'error' | 'abort' | 'panic';
52
+ /** Minimal scent snapshot (hash only, not full payload) */
53
+ scent: {
54
+ id: string;
55
+ source: string;
56
+ timestamp: number;
57
+ payloadHash: string;
58
+ payloadSize: number;
59
+ };
60
+ /** Timestamp of purge */
61
+ purgeTimestamp: number;
62
+ }
63
+ /**
64
+ * Handle to quarantined evidence.
65
+ * Provides ownership-based access to evidence data.
66
+ */
67
+ export interface EvidenceHandle {
68
+ /** Encoded evidence bytes */
69
+ readonly bytes: ArrayBuffer;
70
+ /** Size in bytes */
71
+ readonly size: number;
72
+ /** Content hash (SHA-256) */
73
+ readonly hash: string;
74
+ /** Threat signature */
75
+ readonly signature: string;
76
+ /** Capture timestamp */
77
+ readonly captured: number;
78
+ /** Threat severity */
79
+ readonly severity: Severity;
80
+ /** Whether this handle has been disposed */
81
+ readonly disposed: boolean;
82
+ /**
83
+ * Transfer ownership of bytes.
84
+ * Handle becomes disposed after transfer.
85
+ */
86
+ transfer(): ArrayBuffer;
87
+ /**
88
+ * Atomically snapshot and destroy evidence.
89
+ * Returns neutralization record.
90
+ *
91
+ * @param previousHash - Last hash in audit chain
92
+ */
93
+ neutralize(previousHash: string): NeutralizationRecord;
94
+ /**
95
+ * Move evidence to cold storage.
96
+ * Returns evacuation record.
97
+ *
98
+ * @param destination - Cold storage URL
99
+ */
100
+ evacuate(destination: string): EvacuateRecord;
101
+ }
102
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../src/types/evidence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,oBAAoB;IACpB,MAAM,EAAE,aAAa,CAAA;IACrB,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,uBAAuB;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,mCAAmC;IACnC,WAAW,EAAE,MAAM,CAAA;IACnB,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,qCAAqC;IACrC,UAAU,EAAE,OAAO,CAAA;IACnB,sDAAsD;IACtD,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,uBAAuB;IACvB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;IAC/C,2DAA2D;IAC3D,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAA;QACV,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,WAAW,EAAE,MAAM,CAAA;QACnB,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,yBAAyB;IACzB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;IAC3B,oBAAoB;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,6BAA6B;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,uBAAuB;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,sBAAsB;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,4CAA4C;IAC5C,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAE1B;;;OAGG;IACH,QAAQ,IAAI,WAAW,CAAA;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAAA;IAEtD;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAAA;CAC9C"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Evidence handling types and records.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=evidence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.js","sourceRoot":"","sources":["../../src/types/evidence.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Type re-exports.
3
+ */
4
+ export type { AuditRecord, IAuditChain } from './audit.js';
5
+ export type { JsonPrimitive, JsonSerializable, Severity } from './common.js';
6
+ export { DEFAULT_CONFIG, mergeWithDefaults } from './config.js';
7
+ export type { AlertConfig, AuditConfig, ColdStorageConfig, HoundConfig, QuarantineConfig, RateLimitConfig, RuntimeConfig, SchedulerConfig, TracehoundConfig, } from './config.js';
8
+ export { ErrorCodes, Errors, createError } from './errors.js';
9
+ export type { ErrorCode, ErrorState, TracehoundError } from './errors.js';
10
+ export type { EvacuateRecord, EvidenceHandle, NeutralizationRecord, PurgeRecord, } from './evidence.js';
11
+ export { isClean, isError, isIgnored, isQuarantined, isRateLimited } from './result.js';
12
+ export type { InterceptResult } from './result.js';
13
+ export type { Scent, ThreatCategory, ThreatSignal } from './scent.js';
14
+ export { compareSignatures, generateSignature, validateSignature } from './signature.js';
15
+ export type { GenerateSignatureOptions } from './signature.js';
16
+ export { createThreatInput } from './threat.js';
17
+ export type { Threat, ThreatInput } from './threat.js';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAC1D,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/D,YAAY,EACV,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,gBAAgB,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC7D,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AACzE,YAAY,EACV,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,WAAW,GACZ,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACvF,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACrE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACxF,YAAY,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type re-exports.
3
+ */
4
+ export { DEFAULT_CONFIG, mergeWithDefaults } from './config.js';
5
+ export { ErrorCodes, Errors, createError } from './errors.js';
6
+ export { isClean, isError, isIgnored, isQuarantined, isRateLimited } from './result.js';
7
+ export { compareSignatures, generateSignature, validateSignature } from './signature.js';
8
+ export { createThreatInput } from './threat.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAY/D,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAQ7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAGvF,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAExF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Intercept result types and type guards.
3
+ */
4
+ import type { TracehoundError } from './errors.js';
5
+ import type { EvidenceHandle } from './evidence.js';
6
+ /**
7
+ * Result of an intercept operation.
8
+ * Discriminated union for exhaustive handling.
9
+ */
10
+ export type InterceptResult = {
11
+ status: 'clean';
12
+ } | {
13
+ status: 'rate_limited';
14
+ retryAfter: number;
15
+ } | {
16
+ status: 'payload_too_large';
17
+ limit: number;
18
+ } | {
19
+ status: 'ignored';
20
+ signature: string;
21
+ } | {
22
+ status: 'quarantined';
23
+ handle: EvidenceHandle;
24
+ } | {
25
+ status: 'error';
26
+ error: TracehoundError;
27
+ };
28
+ /**
29
+ * Type guard for quarantined result.
30
+ */
31
+ export declare function isQuarantined(result: InterceptResult): result is {
32
+ status: 'quarantined';
33
+ handle: EvidenceHandle;
34
+ };
35
+ /**
36
+ * Type guard for error result.
37
+ */
38
+ export declare function isError(result: InterceptResult): result is {
39
+ status: 'error';
40
+ error: TracehoundError;
41
+ };
42
+ /**
43
+ * Type guard for clean result.
44
+ */
45
+ export declare function isClean(result: InterceptResult): result is {
46
+ status: 'clean';
47
+ };
48
+ /**
49
+ * Type guard for rate limited result.
50
+ */
51
+ export declare function isRateLimited(result: InterceptResult): result is {
52
+ status: 'rate_limited';
53
+ retryAfter: number;
54
+ };
55
+ /**
56
+ * Type guard for ignored result (duplicate signature).
57
+ */
58
+ export declare function isIgnored(result: InterceptResult): result is {
59
+ status: 'ignored';
60
+ signature: string;
61
+ };
62
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAEnD;;;GAGG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,GACjD;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAA;AAE/C;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,cAAc,CAAA;CAAE,CAE7D;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAEvD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,CAE9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI;IAAE,MAAM,EAAE,cAAc,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAE1D;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,eAAe,GACtB,MAAM,IAAI;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAEpD"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Intercept result types and type guards.
3
+ */
4
+ /**
5
+ * Type guard for quarantined result.
6
+ */
7
+ export function isQuarantined(result) {
8
+ return result.status === 'quarantined';
9
+ }
10
+ /**
11
+ * Type guard for error result.
12
+ */
13
+ export function isError(result) {
14
+ return result.status === 'error';
15
+ }
16
+ /**
17
+ * Type guard for clean result.
18
+ */
19
+ export function isClean(result) {
20
+ return result.status === 'clean';
21
+ }
22
+ /**
23
+ * Type guard for rate limited result.
24
+ */
25
+ export function isRateLimited(result) {
26
+ return result.status === 'rate_limited';
27
+ }
28
+ /**
29
+ * Type guard for ignored result (duplicate signature).
30
+ */
31
+ export function isIgnored(result) {
32
+ return result.status === 'ignored';
33
+ }
34
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB;IAEvB,OAAO,MAAM,CAAC,MAAM,KAAK,aAAa,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CACrB,MAAuB;IAEvB,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,CAAA;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,MAAuB;IAC7C,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,CAAA;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAuB;IAEvB,OAAO,MAAM,CAAC,MAAM,KAAK,cAAc,CAAA;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,MAAuB;IAEvB,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS,CAAA;AACpC,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Scent - the input unit to Tracehound Agent.
3
+ */
4
+ import type { Severity } from './common.js';
5
+ /** Threat category types */
6
+ export type ThreatCategory = 'injection' | 'ddos' | 'flood' | 'spam' | 'malware' | 'unknown';
7
+ /**
8
+ * Threat signal from external detector.
9
+ * This is provided by WAF, custom rules, ML models, etc.
10
+ * Tracehound does NOT perform threat detection.
11
+ */
12
+ export interface ThreatSignal {
13
+ /** Classification category */
14
+ category: ThreatCategory;
15
+ /** Severity level */
16
+ severity: Severity;
17
+ }
18
+ /**
19
+ * JSON primitive types for payload.
20
+ * Re-exported here for convenience.
21
+ */
22
+ export type { JsonSerializable } from './common.js';
23
+ /**
24
+ * A scent represents a captured request/event to be analyzed.
25
+ *
26
+ * RFC Contract:
27
+ * - If `threat` is present: External detector classified this as malicious → quarantine
28
+ * - If `threat` is absent: No threat signal → clean (no quarantine)
29
+ *
30
+ * Tracehound DOES NOT make threat detection decisions.
31
+ */
32
+ export interface Scent {
33
+ /** Unique identifier for this scent */
34
+ readonly id: string;
35
+ /**
36
+ * Request/event payload.
37
+ * Must be JSON serializable for deterministic hashing.
38
+ * Size constrained by config.maxPayloadSize.
39
+ */
40
+ readonly payload: import('./common.js').JsonSerializable;
41
+ /**
42
+ * Origin identifier (IP, user agent, service name).
43
+ * Used for rate limiting.
44
+ */
45
+ readonly source: string;
46
+ /** Capture timestamp (milliseconds since epoch) */
47
+ readonly timestamp: number;
48
+ /**
49
+ * Optional threat signal from external detector.
50
+ * If present, scent will be quarantined.
51
+ * If absent, scent is considered clean.
52
+ */
53
+ readonly threat?: ThreatSignal;
54
+ }
55
+ //# sourceMappingURL=scent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scent.d.ts","sourceRoot":"","sources":["../../src/types/scent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAE3C,4BAA4B;AAC5B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAE5F;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,QAAQ,EAAE,cAAc,CAAA;IACxB,qBAAqB;IACrB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED;;;GAGG;AACH,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAEnD;;;;;;;;GAQG;AACH,MAAM,WAAW,KAAK;IACpB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAEnB;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,aAAa,EAAE,gBAAgB,CAAA;IAExD;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,mDAAmD;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAE1B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAC/B"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Scent - the input unit to Tracehound Agent.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=scent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scent.js","sourceRoot":"","sources":["../../src/types/scent.ts"],"names":[],"mappings":"AAAA;;GAEG"}