@ddd-ts-kit/audit 0.0.0-stage → 0.1.1

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 (338) hide show
  1. package/README.md +559 -2
  2. package/dist/chain/audit-checkpoint.d.ts +7 -0
  3. package/dist/chain/audit-checkpoint.d.ts.map +1 -0
  4. package/dist/chain/audit-checkpoint.js +2 -0
  5. package/dist/chain/audit-checkpoint.js.map +1 -0
  6. package/dist/chain/canonicalize.d.ts +8 -0
  7. package/dist/chain/canonicalize.d.ts.map +1 -0
  8. package/dist/chain/canonicalize.js +26 -0
  9. package/dist/chain/canonicalize.js.map +1 -0
  10. package/dist/chain/chain-head.d.ts +8 -0
  11. package/dist/chain/chain-head.d.ts.map +1 -0
  12. package/dist/chain/chain-head.js +2 -0
  13. package/dist/chain/chain-head.js.map +1 -0
  14. package/dist/chain/chain-of-tenant.d.ts +9 -0
  15. package/dist/chain/chain-of-tenant.d.ts.map +1 -0
  16. package/dist/chain/chain-of-tenant.js +10 -0
  17. package/dist/chain/chain-of-tenant.js.map +1 -0
  18. package/dist/chain/empty-chain.d.ts +3 -0
  19. package/dist/chain/empty-chain.d.ts.map +1 -0
  20. package/dist/chain/empty-chain.js +5 -0
  21. package/dist/chain/empty-chain.js.map +1 -0
  22. package/dist/chain/genesis-hash.d.ts +3 -0
  23. package/dist/chain/genesis-hash.d.ts.map +1 -0
  24. package/dist/chain/genesis-hash.js +3 -0
  25. package/dist/chain/genesis-hash.js.map +1 -0
  26. package/dist/chain/hash-of.d.ts +5 -0
  27. package/dist/chain/hash-of.d.ts.map +1 -0
  28. package/dist/chain/hash-of.js +8 -0
  29. package/dist/chain/hash-of.js.map +1 -0
  30. package/dist/chain/head-after.d.ts +4 -0
  31. package/dist/chain/head-after.d.ts.map +1 -0
  32. package/dist/chain/head-after.js +4 -0
  33. package/dist/chain/head-after.js.map +1 -0
  34. package/dist/chain/seal-checkpoint.d.ts +4 -0
  35. package/dist/chain/seal-checkpoint.d.ts.map +1 -0
  36. package/dist/chain/seal-checkpoint.js +7 -0
  37. package/dist/chain/seal-checkpoint.js.map +1 -0
  38. package/dist/chain/seal.d.ts +5 -0
  39. package/dist/chain/seal.d.ts.map +1 -0
  40. package/dist/chain/seal.js +13 -0
  41. package/dist/chain/seal.js.map +1 -0
  42. package/dist/chain/sealing-options.d.ts +12 -0
  43. package/dist/chain/sealing-options.d.ts.map +1 -0
  44. package/dist/chain/sealing-options.js +2 -0
  45. package/dist/chain/sealing-options.js.map +1 -0
  46. package/dist/drizzle/audit-chains-table.d.ts +61 -0
  47. package/dist/drizzle/audit-chains-table.d.ts.map +1 -0
  48. package/dist/drizzle/audit-chains-table.js +12 -0
  49. package/dist/drizzle/audit-chains-table.js.map +1 -0
  50. package/dist/drizzle/audit-entries-table.d.ts +424 -0
  51. package/dist/drizzle/audit-entries-table.d.ts.map +1 -0
  52. package/dist/drizzle/audit-entries-table.js +44 -0
  53. package/dist/drizzle/audit-entries-table.js.map +1 -0
  54. package/dist/drizzle/audit-guard-statements.d.ts +7 -0
  55. package/dist/drizzle/audit-guard-statements.d.ts.map +1 -0
  56. package/dist/drizzle/audit-guard-statements.js +10 -0
  57. package/dist/drizzle/audit-guard-statements.js.map +1 -0
  58. package/dist/drizzle/drizzle-audit-context.d.ts +7 -0
  59. package/dist/drizzle/drizzle-audit-context.d.ts.map +1 -0
  60. package/dist/drizzle/drizzle-audit-context.js +2 -0
  61. package/dist/drizzle/drizzle-audit-context.js.map +1 -0
  62. package/dist/drizzle/drizzle-audit-trail.d.ts +17 -0
  63. package/dist/drizzle/drizzle-audit-trail.d.ts.map +1 -0
  64. package/dist/drizzle/drizzle-audit-trail.js +28 -0
  65. package/dist/drizzle/drizzle-audit-trail.js.map +1 -0
  66. package/dist/drizzle/table-in.d.ts +4 -0
  67. package/dist/drizzle/table-in.d.ts.map +1 -0
  68. package/dist/drizzle/table-in.js +6 -0
  69. package/dist/drizzle/table-in.js.map +1 -0
  70. package/dist/drizzle.d.ts +6 -0
  71. package/dist/drizzle.d.ts.map +1 -0
  72. package/dist/drizzle.js +5 -0
  73. package/dist/drizzle.js.map +1 -0
  74. package/dist/index.d.ts +36 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +18 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/knex/create-audit-tables.d.ts +9 -0
  79. package/dist/knex/create-audit-tables.d.ts.map +1 -0
  80. package/dist/knex/create-audit-tables.js +12 -0
  81. package/dist/knex/create-audit-tables.js.map +1 -0
  82. package/dist/knex/drop-audit-tables.d.ts +5 -0
  83. package/dist/knex/drop-audit-tables.d.ts.map +1 -0
  84. package/dist/knex/drop-audit-tables.js +8 -0
  85. package/dist/knex/drop-audit-tables.js.map +1 -0
  86. package/dist/knex/knex-audit-context.d.ts +6 -0
  87. package/dist/knex/knex-audit-context.d.ts.map +1 -0
  88. package/dist/knex/knex-audit-context.js +2 -0
  89. package/dist/knex/knex-audit-context.js.map +1 -0
  90. package/dist/knex/knex-audit-trail.d.ts +14 -0
  91. package/dist/knex/knex-audit-trail.d.ts.map +1 -0
  92. package/dist/knex/knex-audit-trail.js +22 -0
  93. package/dist/knex/knex-audit-trail.js.map +1 -0
  94. package/dist/knex.d.ts +6 -0
  95. package/dist/knex.d.ts.map +1 -0
  96. package/dist/knex.js +4 -0
  97. package/dist/knex.js.map +1 -0
  98. package/dist/redaction/audit-masker.d.ts +8 -0
  99. package/dist/redaction/audit-masker.d.ts.map +1 -0
  100. package/dist/redaction/audit-masker.js +5 -0
  101. package/dist/redaction/audit-masker.js.map +1 -0
  102. package/dist/redaction/audit-projection.d.ts +13 -0
  103. package/dist/redaction/audit-projection.d.ts.map +1 -0
  104. package/dist/redaction/audit-projection.js +2 -0
  105. package/dist/redaction/audit-projection.js.map +1 -0
  106. package/dist/redaction/audited-field.d.ts +3 -0
  107. package/dist/redaction/audited-field.d.ts.map +1 -0
  108. package/dist/redaction/audited-field.js +2 -0
  109. package/dist/redaction/audited-field.js.map +1 -0
  110. package/dist/redaction/audited-fields.d.ts +16 -0
  111. package/dist/redaction/audited-fields.d.ts.map +1 -0
  112. package/dist/redaction/audited-fields.js +24 -0
  113. package/dist/redaction/audited-fields.js.map +1 -0
  114. package/dist/redaction/audited-message.d.ts +9 -0
  115. package/dist/redaction/audited-message.d.ts.map +1 -0
  116. package/dist/redaction/audited-message.js +2 -0
  117. package/dist/redaction/audited-message.js.map +1 -0
  118. package/dist/redaction/audited-projection.d.ts +10 -0
  119. package/dist/redaction/audited-projection.d.ts.map +1 -0
  120. package/dist/redaction/audited-projection.js +9 -0
  121. package/dist/redaction/audited-projection.js.map +1 -0
  122. package/dist/redaction/changes-of.d.ts +11 -0
  123. package/dist/redaction/changes-of.d.ts.map +1 -0
  124. package/dist/redaction/changes-of.js +37 -0
  125. package/dist/redaction/changes-of.js.map +1 -0
  126. package/dist/redaction/hmac-masker.d.ts +12 -0
  127. package/dist/redaction/hmac-masker.d.ts.map +1 -0
  128. package/dist/redaction/hmac-masker.js +14 -0
  129. package/dist/redaction/hmac-masker.js.map +1 -0
  130. package/dist/redaction/masked-field.d.ts +6 -0
  131. package/dist/redaction/masked-field.d.ts.map +1 -0
  132. package/dist/redaction/masked-field.js +2 -0
  133. package/dist/redaction/masked-field.js.map +1 -0
  134. package/dist/redaction/masked.d.ts +3 -0
  135. package/dist/redaction/masked.d.ts.map +1 -0
  136. package/dist/redaction/masked.js +4 -0
  137. package/dist/redaction/masked.js.map +1 -0
  138. package/dist/redaction/masking-subject.d.ts +9 -0
  139. package/dist/redaction/masking-subject.d.ts.map +1 -0
  140. package/dist/redaction/masking-subject.js +2 -0
  141. package/dist/redaction/masking-subject.js.map +1 -0
  142. package/dist/redaction/missing-masker-error.d.ts +5 -0
  143. package/dist/redaction/missing-masker-error.d.ts.map +1 -0
  144. package/dist/redaction/missing-masker-error.js +8 -0
  145. package/dist/redaction/missing-masker-error.js.map +1 -0
  146. package/dist/search/comparing.d.ts +8 -0
  147. package/dist/search/comparing.d.ts.map +1 -0
  148. package/dist/search/comparing.js +23 -0
  149. package/dist/search/comparing.js.map +1 -0
  150. package/dist/search/cursor-position.d.ts +7 -0
  151. package/dist/search/cursor-position.d.ts.map +1 -0
  152. package/dist/search/cursor-position.js +2 -0
  153. package/dist/search/cursor-position.js.map +1 -0
  154. package/dist/search/decode-cursor.d.ts +3 -0
  155. package/dist/search/decode-cursor.d.ts.map +1 -0
  156. package/dist/search/decode-cursor.js +21 -0
  157. package/dist/search/decode-cursor.js.map +1 -0
  158. package/dist/search/encode-cursor.d.ts +3 -0
  159. package/dist/search/encode-cursor.d.ts.map +1 -0
  160. package/dist/search/encode-cursor.js +5 -0
  161. package/dist/search/encode-cursor.js.map +1 -0
  162. package/dist/search/matches.d.ts +5 -0
  163. package/dist/search/matches.d.ts.map +1 -0
  164. package/dist/search/matches.js +34 -0
  165. package/dist/search/matches.js.map +1 -0
  166. package/dist/search/order-of.d.ts +4 -0
  167. package/dist/search/order-of.d.ts.map +1 -0
  168. package/dist/search/order-of.js +5 -0
  169. package/dist/search/order-of.js.map +1 -0
  170. package/dist/search/search-order.d.ts +6 -0
  171. package/dist/search/search-order.d.ts.map +1 -0
  172. package/dist/search/search-order.js +2 -0
  173. package/dist/search/search-order.js.map +1 -0
  174. package/dist/sources/allowed-reads.d.ts +9 -0
  175. package/dist/sources/allowed-reads.d.ts.map +1 -0
  176. package/dist/sources/allowed-reads.js +2 -0
  177. package/dist/sources/allowed-reads.js.map +1 -0
  178. package/dist/sources/audit-decisions.d.ts +19 -0
  179. package/dist/sources/audit-decisions.d.ts.map +1 -0
  180. package/dist/sources/audit-decisions.js +48 -0
  181. package/dist/sources/audit-decisions.js.map +1 -0
  182. package/dist/sources/audit-fact.d.ts +4 -0
  183. package/dist/sources/audit-fact.d.ts.map +1 -0
  184. package/dist/sources/audit-fact.js +2 -0
  185. package/dist/sources/audit-fact.js.map +1 -0
  186. package/dist/sources/audit-integration-events.d.ts +23 -0
  187. package/dist/sources/audit-integration-events.d.ts.map +1 -0
  188. package/dist/sources/audit-integration-events.js +59 -0
  189. package/dist/sources/audit-integration-events.js.map +1 -0
  190. package/dist/sources/audit-middleware.d.ts +33 -0
  191. package/dist/sources/audit-middleware.d.ts.map +1 -0
  192. package/dist/sources/audit-middleware.js +113 -0
  193. package/dist/sources/audit-middleware.js.map +1 -0
  194. package/dist/sources/audit-record-of.d.ts +10 -0
  195. package/dist/sources/audit-record-of.d.ts.map +1 -0
  196. package/dist/sources/audit-record-of.js +10 -0
  197. package/dist/sources/audit-record-of.js.map +1 -0
  198. package/dist/sources/audit-source.d.ts +8 -0
  199. package/dist/sources/audit-source.d.ts.map +1 -0
  200. package/dist/sources/audit-source.js +2 -0
  201. package/dist/sources/audit-source.js.map +1 -0
  202. package/dist/sources/audit-subscription.d.ts +7 -0
  203. package/dist/sources/audit-subscription.d.ts.map +1 -0
  204. package/dist/sources/audit-subscription.js +2 -0
  205. package/dist/sources/audit-subscription.js.map +1 -0
  206. package/dist/sources/audited-events.d.ts +7 -0
  207. package/dist/sources/audited-events.d.ts.map +1 -0
  208. package/dist/sources/audited-events.js +2 -0
  209. package/dist/sources/audited-events.js.map +1 -0
  210. package/dist/sources/authorization-decision.d.ts +21 -0
  211. package/dist/sources/authorization-decision.d.ts.map +1 -0
  212. package/dist/sources/authorization-decision.js +2 -0
  213. package/dist/sources/authorization-decision.js.map +1 -0
  214. package/dist/sources/record-in.d.ts +5 -0
  215. package/dist/sources/record-in.d.ts.map +1 -0
  216. package/dist/sources/record-in.js +19 -0
  217. package/dist/sources/record-in.js.map +1 -0
  218. package/dist/sql/audit-chains-table-name.d.ts +2 -0
  219. package/dist/sql/audit-chains-table-name.d.ts.map +1 -0
  220. package/dist/sql/audit-chains-table-name.js +2 -0
  221. package/dist/sql/audit-chains-table-name.js.map +1 -0
  222. package/dist/sql/audit-entries-table-name.d.ts +2 -0
  223. package/dist/sql/audit-entries-table-name.d.ts.map +1 -0
  224. package/dist/sql/audit-entries-table-name.js +2 -0
  225. package/dist/sql/audit-entries-table-name.js.map +1 -0
  226. package/dist/sql/audit-guard-sql.d.ts +8 -0
  227. package/dist/sql/audit-guard-sql.d.ts.map +1 -0
  228. package/dist/sql/audit-guard-sql.js +17 -0
  229. package/dist/sql/audit-guard-sql.js.map +1 -0
  230. package/dist/sql/audit-tables-options.d.ts +5 -0
  231. package/dist/sql/audit-tables-options.d.ts.map +1 -0
  232. package/dist/sql/audit-tables-options.js +2 -0
  233. package/dist/sql/audit-tables-options.js.map +1 -0
  234. package/dist/sql/audit-tables-sql.d.ts +7 -0
  235. package/dist/sql/audit-tables-sql.d.ts.map +1 -0
  236. package/dist/sql/audit-tables-sql.js +48 -0
  237. package/dist/sql/audit-tables-sql.js.map +1 -0
  238. package/dist/sql/audit-tables.d.ts +8 -0
  239. package/dist/sql/audit-tables.d.ts.map +1 -0
  240. package/dist/sql/audit-tables.js +7 -0
  241. package/dist/sql/audit-tables.js.map +1 -0
  242. package/dist/sql/drop-audit-tables-sql.d.ts +4 -0
  243. package/dist/sql/drop-audit-tables-sql.d.ts.map +1 -0
  244. package/dist/sql/drop-audit-tables-sql.js +12 -0
  245. package/dist/sql/drop-audit-tables-sql.js.map +1 -0
  246. package/dist/sql/entry-of.d.ts +5 -0
  247. package/dist/sql/entry-of.d.ts.map +1 -0
  248. package/dist/sql/entry-of.js +109 -0
  249. package/dist/sql/entry-of.js.map +1 -0
  250. package/dist/sql/insert-of.d.ts +4 -0
  251. package/dist/sql/insert-of.d.ts.map +1 -0
  252. package/dist/sql/insert-of.js +51 -0
  253. package/dist/sql/insert-of.js.map +1 -0
  254. package/dist/sql/named.d.ts +3 -0
  255. package/dist/sql/named.d.ts.map +1 -0
  256. package/dist/sql/named.js +6 -0
  257. package/dist/sql/named.js.map +1 -0
  258. package/dist/sql/postgres-audit-trail.d.ts +25 -0
  259. package/dist/sql/postgres-audit-trail.d.ts.map +1 -0
  260. package/dist/sql/postgres-audit-trail.js +111 -0
  261. package/dist/sql/postgres-audit-trail.js.map +1 -0
  262. package/dist/sql/qualified.d.ts +3 -0
  263. package/dist/sql/qualified.d.ts.map +1 -0
  264. package/dist/sql/qualified.js +5 -0
  265. package/dist/sql/qualified.js.map +1 -0
  266. package/dist/sql/rows-of.d.ts +4 -0
  267. package/dist/sql/rows-of.d.ts.map +1 -0
  268. package/dist/sql/rows-of.js +14 -0
  269. package/dist/sql/rows-of.js.map +1 -0
  270. package/dist/sql/sql-row.d.ts +2 -0
  271. package/dist/sql/sql-row.d.ts.map +1 -0
  272. package/dist/sql/sql-row.js +2 -0
  273. package/dist/sql/sql-row.js.map +1 -0
  274. package/dist/sql/sql-session.d.ts +9 -0
  275. package/dist/sql/sql-session.d.ts.map +1 -0
  276. package/dist/sql/sql-session.js +2 -0
  277. package/dist/sql/sql-session.js.map +1 -0
  278. package/dist/sql/sql.d.ts +12 -0
  279. package/dist/sql/sql.d.ts.map +1 -0
  280. package/dist/sql/sql.js +35 -0
  281. package/dist/sql/sql.js.map +1 -0
  282. package/dist/testing/audit-trail-contract.d.ts +16 -0
  283. package/dist/testing/audit-trail-contract.d.ts.map +1 -0
  284. package/dist/testing/audit-trail-contract.js +208 -0
  285. package/dist/testing/audit-trail-contract.js.map +1 -0
  286. package/dist/testing/audit-trail-under-contract.d.ts +4 -0
  287. package/dist/testing/audit-trail-under-contract.d.ts.map +1 -0
  288. package/dist/testing/audit-trail-under-contract.js +2 -0
  289. package/dist/testing/audit-trail-under-contract.js.map +1 -0
  290. package/dist/testing/records/a-record.d.ts +3 -0
  291. package/dist/testing/records/a-record.d.ts.map +1 -0
  292. package/dist/testing/records/a-record.js +14 -0
  293. package/dist/testing/records/a-record.js.map +1 -0
  294. package/dist/testing/records/full-record.d.ts +3 -0
  295. package/dist/testing/records/full-record.d.ts.map +1 -0
  296. package/dist/testing/records/full-record.js +16 -0
  297. package/dist/testing/records/full-record.js.map +1 -0
  298. package/dist/testing/records/in-tenant.d.ts +3 -0
  299. package/dist/testing/records/in-tenant.d.ts.map +1 -0
  300. package/dist/testing/records/in-tenant.js +5 -0
  301. package/dist/testing/records/in-tenant.js.map +1 -0
  302. package/dist/testing/records/journal.d.ts +4 -0
  303. package/dist/testing/records/journal.d.ts.map +1 -0
  304. package/dist/testing/records/journal.js +32 -0
  305. package/dist/testing/records/journal.js.map +1 -0
  306. package/dist/testing/records/later.d.ts +4 -0
  307. package/dist/testing/records/later.d.ts.map +1 -0
  308. package/dist/testing/records/later.js +6 -0
  309. package/dist/testing/records/later.js.map +1 -0
  310. package/dist/testing.d.ts +3 -0
  311. package/dist/testing.d.ts.map +1 -0
  312. package/dist/testing.js +2 -0
  313. package/dist/testing.js.map +1 -0
  314. package/dist/trail/audit-trail-options.d.ts +8 -0
  315. package/dist/trail/audit-trail-options.d.ts.map +1 -0
  316. package/dist/trail/audit-trail-options.js +2 -0
  317. package/dist/trail/audit-trail-options.js.map +1 -0
  318. package/dist/trail/in-memory-audit-trail.d.ts +16 -0
  319. package/dist/trail/in-memory-audit-trail.d.ts.map +1 -0
  320. package/dist/trail/in-memory-audit-trail.js +48 -0
  321. package/dist/trail/in-memory-audit-trail.js.map +1 -0
  322. package/dist/verify/chain-break-kind.d.ts +8 -0
  323. package/dist/verify/chain-break-kind.d.ts.map +1 -0
  324. package/dist/verify/chain-break-kind.js +2 -0
  325. package/dist/verify/chain-break-kind.js.map +1 -0
  326. package/dist/verify/chain-break.d.ts +12 -0
  327. package/dist/verify/chain-break.d.ts.map +1 -0
  328. package/dist/verify/chain-break.js +2 -0
  329. package/dist/verify/chain-break.js.map +1 -0
  330. package/dist/verify/chain-verification.d.ts +10 -0
  331. package/dist/verify/chain-verification.d.ts.map +1 -0
  332. package/dist/verify/chain-verification.js +2 -0
  333. package/dist/verify/chain-verification.js.map +1 -0
  334. package/dist/verify/verify-chain.d.ts +20 -0
  335. package/dist/verify/verify-chain.d.ts.map +1 -0
  336. package/dist/verify/verify-chain.js +110 -0
  337. package/dist/verify/verify-chain.js.map +1 -0
  338. package/package.json +70 -4
@@ -0,0 +1,36 @@
1
+ export { AuditReader, AuditTrail } from '@ddd-ts-kit/kernel';
2
+ export type { AuditActor, AuditCategory, AuditChange, AuditChanges, AuditEntry, AuditEntryExtensionValues, AuditEntryExtensions, AuditFilter, AuditJson, AuditOutcome, AuditRecord, AuditResource, AuditScalar, AuditSortField, MaskedValue, } from '@ddd-ts-kit/kernel';
3
+ export type { AuditCheckpoint } from './chain/audit-checkpoint.js';
4
+ export { canonicalize } from './chain/canonicalize.js';
5
+ export { GLOBAL_CHAIN, chainOfTenant } from './chain/chain-of-tenant.js';
6
+ export { GENESIS_HASH } from './chain/genesis-hash.js';
7
+ export { hashOf, type UnsealedEntry } from './chain/hash-of.js';
8
+ export type { SealingOptions } from './chain/sealing-options.js';
9
+ export type { AuditTrailOptions } from './trail/audit-trail-options.js';
10
+ export { InMemoryAuditTrail } from './trail/in-memory-audit-trail.js';
11
+ export type { ChainBreak } from './verify/chain-break.js';
12
+ export type { ChainBreakKind } from './verify/chain-break-kind.js';
13
+ export type { ChainVerification } from './verify/chain-verification.js';
14
+ export { verifyChain, type VerifyChainOptions } from './verify/verify-chain.js';
15
+ export { AuditMasker } from './redaction/audit-masker.js';
16
+ export type { AuditProjection } from './redaction/audit-projection.js';
17
+ export type { AuditedField } from './redaction/audited-field.js';
18
+ export { auditedFields, type AuditedFieldsOptions } from './redaction/audited-fields.js';
19
+ export type { AuditedMessage } from './redaction/audited-message.js';
20
+ export { auditedProjection } from './redaction/audited-projection.js';
21
+ export { hmacMasker, type HmacMaskerOptions } from './redaction/hmac-masker.js';
22
+ export { masked } from './redaction/masked.js';
23
+ export type { MaskedField } from './redaction/masked-field.js';
24
+ export type { MaskingSubject } from './redaction/masking-subject.js';
25
+ export { MissingMaskerError } from './redaction/missing-masker-error.js';
26
+ export type { AllowedReads } from './sources/allowed-reads.js';
27
+ export { auditDecisions, type AuditDecisionsOptions } from './sources/audit-decisions.js';
28
+ export type { AuditFact } from './sources/audit-fact.js';
29
+ export { auditIntegrationEvents, type AuditIntegrationEventsOptions } from './sources/audit-integration-events.js';
30
+ export { UNEXPECTED_ERROR, auditMiddleware, type AuditMiddlewareOptions } from './sources/audit-middleware.js';
31
+ export { auditRecordOf } from './sources/audit-record-of.js';
32
+ export type { AuditSource } from './sources/audit-source.js';
33
+ export type { AuditSubscription } from './sources/audit-subscription.js';
34
+ export type { AuditedEvents } from './sources/audited-events.js';
35
+ export type { AuthorizationDecision } from './sources/authorization-decision.js';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,YAAY,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,YAAY,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,YAAY,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,YAAY,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACzF,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,YAAY,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,KAAK,6BAA6B,EAAE,MAAM,uCAAuC,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,YAAY,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export { AuditReader, AuditTrail } from '@ddd-ts-kit/kernel';
2
+ export { canonicalize } from './chain/canonicalize.js';
3
+ export { GLOBAL_CHAIN, chainOfTenant } from './chain/chain-of-tenant.js';
4
+ export { GENESIS_HASH } from './chain/genesis-hash.js';
5
+ export { hashOf } from './chain/hash-of.js';
6
+ export { InMemoryAuditTrail } from './trail/in-memory-audit-trail.js';
7
+ export { verifyChain } from './verify/verify-chain.js';
8
+ export { AuditMasker } from './redaction/audit-masker.js';
9
+ export { auditedFields } from './redaction/audited-fields.js';
10
+ export { auditedProjection } from './redaction/audited-projection.js';
11
+ export { hmacMasker } from './redaction/hmac-masker.js';
12
+ export { masked } from './redaction/masked.js';
13
+ export { MissingMaskerError } from './redaction/missing-masker-error.js';
14
+ export { auditDecisions } from './sources/audit-decisions.js';
15
+ export { auditIntegrationEvents } from './sources/audit-integration-events.js';
16
+ export { UNEXPECTED_ERROR, auditMiddleware } from './sources/audit-middleware.js';
17
+ export { auditRecordOf } from './sources/audit-record-of.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAmB7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAItE,OAAO,EAAE,WAAW,EAA2B,MAAM,0BAA0B,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAG1D,OAAO,EAAE,aAAa,EAA6B,MAAM,+BAA+B,CAAC;AAEzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,UAAU,EAA0B,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,cAAc,EAA8B,MAAM,8BAA8B,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAsC,MAAM,uCAAuC,CAAC;AACnH,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAA+B,MAAM,+BAA+B,CAAC;AAC/G,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Knex } from 'knex';
2
+ import type { AuditTablesOptions } from '../sql/audit-tables-options.js';
3
+ /**
4
+ * Creates the tables of the trail and the triggers that keep `audit_entries` append-only.
5
+ * Call it from a migration of the consuming project, which then owns the tables:
6
+ * `export const up = (knex) => createAuditTables(knex, { schema: 'audit' })`.
7
+ */
8
+ export declare function createAuditTables(knex: Knex, options?: AuditTablesOptions): Promise<void>;
9
+ //# sourceMappingURL=create-audit-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-audit-tables.d.ts","sourceRoot":"","sources":["../../src/knex/create-audit-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAInG"}
@@ -0,0 +1,12 @@
1
+ import { auditTablesSql } from '../sql/audit-tables-sql.js';
2
+ /**
3
+ * Creates the tables of the trail and the triggers that keep `audit_entries` append-only.
4
+ * Call it from a migration of the consuming project, which then owns the tables:
5
+ * `export const up = (knex) => createAuditTables(knex, { schema: 'audit' })`.
6
+ */
7
+ export async function createAuditTables(knex, options = {}) {
8
+ for (const statement of auditTablesSql(options)) {
9
+ await knex.raw(statement);
10
+ }
11
+ }
12
+ //# sourceMappingURL=create-audit-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-audit-tables.js","sourceRoot":"","sources":["../../src/knex/create-audit-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAE5D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,OAAO,GAAuB,EAAE;IAClF,KAAK,MAAM,SAAS,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { Knex } from 'knex';
2
+ import type { AuditTablesOptions } from '../sql/audit-tables-options.js';
3
+ /** The `down` of `createAuditTables`: the trail is gone with it. The schema is left in place. */
4
+ export declare function dropAuditTables(knex: Knex, options?: AuditTablesOptions): Promise<void>;
5
+ //# sourceMappingURL=drop-audit-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-audit-tables.d.ts","sourceRoot":"","sources":["../../src/knex/drop-audit-tables.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAGzE,iGAAiG;AACjG,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIjG"}
@@ -0,0 +1,8 @@
1
+ import { dropAuditTablesSql } from '../sql/drop-audit-tables-sql.js';
2
+ /** The `down` of `createAuditTables`: the trail is gone with it. The schema is left in place. */
3
+ export async function dropAuditTables(knex, options = {}) {
4
+ for (const statement of dropAuditTablesSql(options)) {
5
+ await knex.raw(statement);
6
+ }
7
+ }
8
+ //# sourceMappingURL=drop-audit-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-audit-tables.js","sourceRoot":"","sources":["../../src/knex/drop-audit-tables.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAU,EAAE,OAAO,GAAuB,EAAE;IAChF,KAAK,MAAM,SAAS,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC5B,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Knex } from 'knex';
2
+ /** The `KnexContext` of `@ddd-ts-kit/knex`, restated structurally: any unit of work of that package fits. */
3
+ export interface KnexAuditContext {
4
+ executor(): Knex;
5
+ }
6
+ //# sourceMappingURL=knex-audit-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex-audit-context.d.ts","sourceRoot":"","sources":["../../src/knex/knex-audit-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,6GAA6G;AAC7G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,IAAI,IAAI,CAAC;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=knex-audit-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex-audit-context.js","sourceRoot":"","sources":["../../src/knex/knex-audit-context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import type { AuditTablesOptions } from '../sql/audit-tables-options.js';
2
+ import { PostgresAuditTrail } from '../sql/postgres-audit-trail.js';
3
+ import type { AuditTrailOptions } from '../trail/audit-trail-options.js';
4
+ import type { KnexAuditContext } from './knex-audit-context.js';
5
+ export interface KnexAuditTrailOptions extends AuditTrailOptions, AuditTablesOptions {
6
+ }
7
+ /**
8
+ * The audit trail on PostgreSQL through knex. It writes on the executor of the context: inside
9
+ * a unit of work the entry commits or rolls back with it, outside it is written at once.
10
+ */
11
+ export declare class KnexAuditTrail extends PostgresAuditTrail {
12
+ constructor(context: KnexAuditContext, options?: KnexAuditTrailOptions);
13
+ }
14
+ //# sourceMappingURL=knex-audit-trail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex-audit-trail.d.ts","sourceRoot":"","sources":["../../src/knex/knex-audit-trail.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAIpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB,EAAE,kBAAkB;CAAG;AAEvF;;;GAGG;AACH,qBAAa,cAAe,SAAQ,kBAAkB;IACpD,YAAY,OAAO,EAAE,gBAAgB,EAAE,OAAO,GAAE,qBAA0B,EAEzE;CACF"}
@@ -0,0 +1,22 @@
1
+ import { auditTables } from '../sql/audit-tables.js';
2
+ import { PostgresAuditTrail } from '../sql/postgres-audit-trail.js';
3
+ import { rowsOf } from '../sql/rows-of.js';
4
+ /**
5
+ * The audit trail on PostgreSQL through knex. It writes on the executor of the context: inside
6
+ * a unit of work the entry commits or rolls back with it, outside it is written at once.
7
+ */
8
+ export class KnexAuditTrail extends PostgresAuditTrail {
9
+ constructor(context, options = {}) {
10
+ super(() => sessionOn(context.executor()), auditTables(options), options);
11
+ }
12
+ }
13
+ function sessionOn(knex) {
14
+ return {
15
+ query: async (statement) => rowsOf(await knex.raw(statement.strings.join('?'), bindingsOf(statement))),
16
+ transaction: (work) => knex.transaction((transaction) => work(sessionOn(transaction))),
17
+ };
18
+ }
19
+ function bindingsOf(statement) {
20
+ return statement.values.map((value) => (typeof value === 'number' || typeof value === 'string' ? value : null));
21
+ }
22
+ //# sourceMappingURL=knex-audit-trail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex-audit-trail.js","sourceRoot":"","sources":["../../src/knex/knex-audit-trail.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAQ3C;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IACpD,YAAY,OAAyB,EAAE,OAAO,GAA0B,EAAE;QACxE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;CACF;AAED,SAAS,SAAS,CAAC,IAAU;IAC3B,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;QACtG,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,SAAc;IAChC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAClH,CAAC"}
package/dist/knex.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ export type { AuditTablesOptions } from './sql/audit-tables-options.js';
2
+ export { createAuditTables } from './knex/create-audit-tables.js';
3
+ export { dropAuditTables } from './knex/drop-audit-tables.js';
4
+ export type { KnexAuditContext } from './knex/knex-audit-context.js';
5
+ export { KnexAuditTrail, type KnexAuditTrailOptions } from './knex/knex-audit-trail.js';
6
+ //# sourceMappingURL=knex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex.d.ts","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/knex.js ADDED
@@ -0,0 +1,4 @@
1
+ export { createAuditTables } from './knex/create-audit-tables.js';
2
+ export { dropAuditTables } from './knex/drop-audit-tables.js';
3
+ export { KnexAuditTrail } from './knex/knex-audit-trail.js';
4
+ //# sourceMappingURL=knex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knex.js","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAA8B,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AuditScalar } from '@ddd-ts-kit/kernel';
2
+ import type { MaskingSubject } from './masking-subject.js';
3
+ /** Turns a value into a token that is equal for equal values and says nothing else. */
4
+ export declare abstract class AuditMasker {
5
+ static readonly tokenKey = "audit.AuditMasker";
6
+ abstract mask(value: AuditScalar, subject: MaskingSubject): string | Promise<string>;
7
+ }
8
+ //# sourceMappingURL=audit-masker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-masker.d.ts","sourceRoot":"","sources":["../../src/redaction/audit-masker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,uFAAuF;AACvF,8BAAsB,WAAW;IAC/B,MAAM,CAAC,QAAQ,CAAC,QAAQ,uBAAuB;IAE/C,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtF"}
@@ -0,0 +1,5 @@
1
+ /** Turns a value into a token that is equal for equal values and says nothing else. */
2
+ export class AuditMasker {
3
+ static tokenKey = 'audit.AuditMasker';
4
+ }
5
+ //# sourceMappingURL=audit-masker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-masker.js","sourceRoot":"","sources":["../../src/redaction/audit-masker.ts"],"names":[],"mappings":"AAGA,uFAAuF;AACvF,MAAM,OAAgB,WAAW;IAC/B,MAAM,CAAU,QAAQ,GAAG,mBAAmB,CAAC;CAGhD"}
@@ -0,0 +1,13 @@
1
+ import type { AuditResource } from '@ddd-ts-kit/kernel';
2
+ /**
3
+ * What a projector chooses to keep of its subject: values in the clear, values to mask, and
4
+ * nothing else. A value that is not a string, a number, a boolean, `null`, a bigint or a date
5
+ * is left out: an object is never stored whole.
6
+ */
7
+ export interface AuditProjection {
8
+ readonly plain?: Readonly<Record<string, unknown>>;
9
+ readonly masked?: Readonly<Record<string, unknown>>;
10
+ readonly resource?: AuditResource;
11
+ readonly context?: string;
12
+ }
13
+ //# sourceMappingURL=audit-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-projection.d.ts","sourceRoot":"","sources":["../../src/redaction/audit-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-projection.js","sourceRoot":"","sources":["../../src/redaction/audit-projection.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { MaskedField } from './masked-field.js';
2
+ export type AuditedField<Name extends string = string> = Name | MaskedField<Name>;
3
+ //# sourceMappingURL=audited-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-field.d.ts","sourceRoot":"","sources":["../../src/redaction/audited-field.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,MAAM,YAAY,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audited-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-field.js","sourceRoot":"","sources":["../../src/redaction/audited-field.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { AuditResource, Message, MessageType } from '@ddd-ts-kit/kernel';
2
+ import type { AuditedField } from './audited-field.js';
3
+ import type { AuditedMessage } from './audited-message.js';
4
+ export interface AuditedFieldsOptions<M> {
5
+ /** The element the message is about. */
6
+ readonly resource?: (message: M) => AuditResource;
7
+ /** Name of the bounded context the message belongs to. */
8
+ readonly context?: string;
9
+ }
10
+ /**
11
+ * Declares, next to the use case and without touching it, which fields of a command or query
12
+ * go into its audit entry: `auditedFields(RescheduleCommand, ['status', masked('patientEmail')])`.
13
+ * A field that is not listed is never recorded.
14
+ */
15
+ export declare function auditedFields<M extends Message>(type: MessageType<M>, fields: readonly AuditedField<keyof M & string>[], options?: AuditedFieldsOptions<M>): AuditedMessage;
16
+ //# sourceMappingURL=audited-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-fields.d.ts","sourceRoot":"","sources":["../../src/redaction/audited-fields.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,wCAAwC;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,aAAa,CAAC;IAElD,0DAA0D;IAC1D,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAOD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAC7C,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EACpB,MAAM,EAAE,SAAS,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,EAAE,EACjD,OAAO,GAAE,oBAAoB,CAAC,CAAC,CAAM,GACpC,cAAc,CAShB"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Declares, next to the use case and without touching it, which fields of a command or query
3
+ * go into its audit entry: `auditedFields(RescheduleCommand, ['status', masked('patientEmail')])`.
4
+ * A field that is not listed is never recorded.
5
+ */
6
+ export function auditedFields(type, fields, options = {}) {
7
+ const plain = fields.filter((field) => typeof field === 'string');
8
+ const toMask = fields.filter((field) => typeof field !== 'string').map(({ field }) => field);
9
+ return {
10
+ type,
11
+ masks: toMask.length > 0,
12
+ project: (message) => (message instanceof type ? projectionOf(message, { plain, toMask }, options) : {}),
13
+ };
14
+ }
15
+ function projectionOf(message, fields, options) {
16
+ const resource = options.resource?.(message);
17
+ return {
18
+ plain: Object.fromEntries(fields.plain.map((field) => [field, message[field]])),
19
+ masked: Object.fromEntries(fields.toMask.map((field) => [field, message[field]])),
20
+ ...(resource === undefined ? {} : { resource }),
21
+ ...(options.context === undefined ? {} : { context: options.context }),
22
+ };
23
+ }
24
+ //# sourceMappingURL=audited-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-fields.js","sourceRoot":"","sources":["../../src/redaction/audited-fields.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,IAAoB,EACpB,MAAiD,EACjD,OAAO,GAA4B,EAAE;IAErC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAE7F,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC;QACxB,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACzG,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAI,OAAU,EAAE,MAAyB,EAAE,OAAgC;IAC9F,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC;IAE7C,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC/E,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjF,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;QAC/C,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;KACvE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { Message, MessageType } from '@ddd-ts-kit/kernel';
2
+ import type { AuditProjection } from './audit-projection.js';
3
+ /** The declaration of one command or query, read by `auditMiddleware`. */
4
+ export interface AuditedMessage {
5
+ readonly type: MessageType<Message>;
6
+ readonly masks: boolean;
7
+ project(message: Message): AuditProjection;
8
+ }
9
+ //# sourceMappingURL=audited-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-message.d.ts","sourceRoot":"","sources":["../../src/redaction/audited-message.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAEpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IAExB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,eAAe,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audited-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-message.js","sourceRoot":"","sources":["../../src/redaction/audited-message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ import type { Message, MessageType } from '@ddd-ts-kit/kernel';
2
+ import type { AuditProjection } from './audit-projection.js';
3
+ import type { AuditedMessage } from './audited-message.js';
4
+ /**
5
+ * The same declaration for a message whose audited values are not its own fields: the
6
+ * projector picks them, and names the ones to mask.
7
+ * `auditedProjection(ExportCommand, (command) => ({ plain: { format: command.options.format } }))`.
8
+ */
9
+ export declare function auditedProjection<M extends Message>(type: MessageType<M>, project: (message: M) => AuditProjection): AuditedMessage;
10
+ //# sourceMappingURL=audited-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-projection.d.ts","sourceRoot":"","sources":["../../src/redaction/audited-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,OAAO,EACjD,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,eAAe,GACvC,cAAc,CAEhB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * The same declaration for a message whose audited values are not its own fields: the
3
+ * projector picks them, and names the ones to mask.
4
+ * `auditedProjection(ExportCommand, (command) => ({ plain: { format: command.options.format } }))`.
5
+ */
6
+ export function auditedProjection(type, project) {
7
+ return { type, masks: false, project: (message) => (message instanceof type ? project(message) : {}) };
8
+ }
9
+ //# sourceMappingURL=audited-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-projection.js","sourceRoot":"","sources":["../../src/redaction/audited-projection.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,IAAoB,EACpB,OAAwC;IAExC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,YAAY,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACzG,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { AuditChanges } from '@ddd-ts-kit/kernel';
2
+ import type { AuditMasker } from './audit-masker.js';
3
+ import type { AuditProjection } from './audit-projection.js';
4
+ import type { MaskingSubject } from './masking-subject.js';
5
+ export interface Redaction {
6
+ readonly masker?: AuditMasker;
7
+ readonly subject: Omit<MaskingSubject, 'field'>;
8
+ }
9
+ /** The `changes` of an entry, or `undefined` when the projection kept nothing. */
10
+ export declare function changesOf(projection: AuditProjection, redaction: Redaction): Promise<AuditChanges | undefined>;
11
+ //# sourceMappingURL=changes-of.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-of.d.ts","sourceRoot":"","sources":["../../src/redaction/changes-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,YAAY,EAAe,MAAM,oBAAoB,CAAC;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAG3D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;CACjD;AAED,kFAAkF;AAClF,wBAAsB,SAAS,CAAC,UAAU,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CAoBpH"}
@@ -0,0 +1,37 @@
1
+ import { MissingMaskerError } from './missing-masker-error.js';
2
+ /** The `changes` of an entry, or `undefined` when the projection kept nothing. */
3
+ export async function changesOf(projection, redaction) {
4
+ const changes = {};
5
+ for (const [field, value] of Object.entries(projection.plain ?? {})) {
6
+ const scalar = scalarOf(value);
7
+ if (scalar !== undefined) {
8
+ changes[field] = scalar;
9
+ }
10
+ }
11
+ for (const [field, value] of Object.entries(projection.masked ?? {})) {
12
+ const scalar = scalarOf(value);
13
+ if (scalar !== undefined) {
14
+ changes[field] = await maskOf(scalar, field, redaction);
15
+ }
16
+ }
17
+ return Object.keys(changes).length === 0 ? undefined : changes;
18
+ }
19
+ function scalarOf(value) {
20
+ if (value === null || typeof value === 'string' || typeof value === 'boolean') {
21
+ return value;
22
+ }
23
+ if (typeof value === 'number') {
24
+ return Number.isFinite(value) ? value : undefined;
25
+ }
26
+ if (typeof value === 'bigint') {
27
+ return value.toString();
28
+ }
29
+ return value instanceof Date ? value.toISOString() : undefined;
30
+ }
31
+ async function maskOf(value, field, { masker, subject }) {
32
+ if (masker === undefined) {
33
+ throw new MissingMaskerError(field);
34
+ }
35
+ return { masked: await masker.mask(value, { ...subject, field }) };
36
+ }
37
+ //# sourceMappingURL=changes-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changes-of.js","sourceRoot":"","sources":["../../src/redaction/changes-of.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAO/D,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,UAA2B,EAAE,SAAoB;IAC/E,MAAM,OAAO,GAAgC,EAAE,CAAC;IAEhD,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QACrE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE/B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;AACjE,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC9E,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC1B,CAAC;IAED,OAAO,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACjE,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAkB,EAAE,KAAa,EAAE,EAAE,MAAM,EAAE,OAAO,EAAa;IACrF,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;AACrE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AuditMasker } from './audit-masker.js';
2
+ export interface HmacMaskerOptions {
3
+ /** Written before the hash (`<keyId>:<hex>`), so that a rotated key can be told apart. */
4
+ readonly keyId?: string;
5
+ }
6
+ /**
7
+ * HMAC-SHA-256 of the canonical form of the value, under one secret. Without the secret a
8
+ * mask cannot be computed again, so a guess cannot be checked: destroying the secret makes
9
+ * every mask it produced meaningless.
10
+ */
11
+ export declare function hmacMasker(secret: string | Uint8Array, options?: HmacMaskerOptions): AuditMasker;
12
+ //# sourceMappingURL=hmac-masker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac-masker.d.ts","sourceRoot":"","sources":["../../src/redaction/hmac-masker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,iBAAiB;IAChC,0FAA0F;IAC1F,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,EAAE,OAAO,GAAE,iBAAsB,GAAG,WAAW,CAMpG"}
@@ -0,0 +1,14 @@
1
+ import { createHmac } from 'node:crypto';
2
+ import { canonicalize } from '../chain/canonicalize.js';
3
+ /**
4
+ * HMAC-SHA-256 of the canonical form of the value, under one secret. Without the secret a
5
+ * mask cannot be computed again, so a guess cannot be checked: destroying the secret makes
6
+ * every mask it produced meaningless.
7
+ */
8
+ export function hmacMasker(secret, options = {}) {
9
+ const prefix = options.keyId === undefined ? '' : `${options.keyId}:`;
10
+ return {
11
+ mask: (value) => `${prefix}${createHmac('sha256', secret).update(canonicalize(value), 'utf8').digest('hex')}`,
12
+ };
13
+ }
14
+ //# sourceMappingURL=hmac-masker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac-masker.js","sourceRoot":"","sources":["../../src/redaction/hmac-masker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAQxD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAA2B,EAAE,OAAO,GAAsB,EAAE;IACrF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,GAAG,CAAC;IAEtE,OAAO;QACL,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;KAC9G,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ /** A declared field whose value is stored as a keyed hash: for personal data. */
2
+ export interface MaskedField<Name extends string = string> {
3
+ readonly field: Name;
4
+ readonly masked: true;
5
+ }
6
+ //# sourceMappingURL=masked-field.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masked-field.d.ts","sourceRoot":"","sources":["../../src/redaction/masked-field.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,WAAW,WAAW,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM;IACvD,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC;CACvB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=masked-field.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masked-field.js","sourceRoot":"","sources":["../../src/redaction/masked-field.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { MaskedField } from './masked-field.js';
2
+ export declare function masked<Name extends string>(field: Name): MaskedField<Name>;
3
+ //# sourceMappingURL=masked.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masked.d.ts","sourceRoot":"","sources":["../../src/redaction/masked.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAE1E"}
@@ -0,0 +1,4 @@
1
+ export function masked(field) {
2
+ return { field, masked: true };
3
+ }
4
+ //# sourceMappingURL=masked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masked.js","sourceRoot":"","sources":["../../src/redaction/masked.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAsB,KAAW;IACrD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AACjC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { AuditResource } from '@ddd-ts-kit/kernel';
2
+ /** What a masker may read to choose its key: identifiers of the entry being written. */
3
+ export interface MaskingSubject {
4
+ readonly field: string;
5
+ readonly actorId: string;
6
+ readonly tenantId?: string;
7
+ readonly resource?: AuditResource;
8
+ }
9
+ //# sourceMappingURL=masking-subject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masking-subject.d.ts","sourceRoot":"","sources":["../../src/redaction/masking-subject.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,wFAAwF;AACxF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=masking-subject.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"masking-subject.js","sourceRoot":"","sources":["../../src/redaction/masking-subject.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /** A projection asks for a mask and no masker was given: a wiring mistake. */
2
+ export declare class MissingMaskerError extends Error {
3
+ constructor(field: string);
4
+ }
5
+ //# sourceMappingURL=missing-masker-error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-masker-error.d.ts","sourceRoot":"","sources":["../../src/redaction/missing-masker-error.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,KAAK,EAAE,MAAM,EAGxB;CACF"}
@@ -0,0 +1,8 @@
1
+ /** A projection asks for a mask and no masker was given: a wiring mistake. */
2
+ export class MissingMaskerError extends Error {
3
+ constructor(field) {
4
+ super(`The audited field "${field}" is declared masked and no masker was given`);
5
+ this.name = 'MissingMaskerError';
6
+ }
7
+ }
8
+ //# sourceMappingURL=missing-masker-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"missing-masker-error.js","sourceRoot":"","sources":["../../src/redaction/missing-masker-error.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,YAAY,KAAa;QACvB,KAAK,CAAC,sBAAsB,KAAK,8CAA8C,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { CursorPosition } from './cursor-position.js';
2
+ import type { SearchOrder } from './search-order.js';
3
+ /**
4
+ * The comparison of an order, between two entries or between an entry and the position a
5
+ * cursor names: negative when `left` comes first in that order.
6
+ */
7
+ export declare function comparing(order: SearchOrder): (left: CursorPosition, right: CursorPosition) => number;
8
+ //# sourceMappingURL=comparing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comparing.d.ts","sourceRoot":"","sources":["../../src/search/comparing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,KAAK,MAAM,CAIrG"}