@ddd-ts-kit/audit 0.0.0-stage → 0.1.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 (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 @@
1
+ {"version":3,"file":"audit-source.d.ts","sourceRoot":"","sources":["../../src/sources/audit-source.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAE7E,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit-source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-source.js","sourceRoot":"","sources":["../../src/sources/audit-source.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { IntegrationEventCallback } from '@ddd-ts-kit/kernel';
2
+ /** What `subscribeAll` of `@ddd-ts-kit/events` takes. */
3
+ export interface AuditSubscription {
4
+ readonly type: string;
5
+ readonly handler: IntegrationEventCallback;
6
+ }
7
+ //# sourceMappingURL=audit-subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-subscription.d.ts","sourceRoot":"","sources":["../../src/sources/audit-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnE,yDAAyD;AACzD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,wBAAwB,CAAC;CAC5C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit-subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-subscription.js","sourceRoot":"","sources":["../../src/sources/audit-subscription.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ /** The registry of `@ddd-ts-kit/events`, restated structurally. Any `EventRegistry` fits. */
2
+ export interface AuditedEvents {
3
+ all(): readonly {
4
+ readonly type: string;
5
+ }[];
6
+ }
7
+ //# sourceMappingURL=audited-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-events.d.ts","sourceRoot":"","sources":["../../src/sources/audited-events.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,MAAM,WAAW,aAAa;IAC5B,GAAG,IAAI,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC7C"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audited-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audited-events.js","sourceRoot":"","sources":["../../src/sources/audited-events.ts"],"names":[],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import type { AuditResource } from '@ddd-ts-kit/kernel';
2
+ /**
3
+ * What the `onDecision` hook of `@ddd-ts-kit/auth` hands over, restated structurally so that
4
+ * this package does not depend on it. Any `DecisionRecord` fits.
5
+ */
6
+ export interface AuthorizationDecision {
7
+ readonly actorId: string;
8
+ readonly permissionId: string;
9
+ readonly resource?: AuditResource;
10
+ readonly decision: {
11
+ readonly allowed: true;
12
+ } | {
13
+ readonly allowed: false;
14
+ readonly reason: string;
15
+ };
16
+ /** The command or query the decision was taken for. */
17
+ readonly useCase?: string;
18
+ /** Whether that use case is a command or a query; absent for a decision taken outside a bus. */
19
+ readonly kind?: 'command' | 'query';
20
+ }
21
+ //# sourceMappingURL=authorization-decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-decision.d.ts","sourceRoot":"","sources":["../../src/sources/authorization-decision.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAElC,QAAQ,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;KAAE,GAAG;QAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAErG,uDAAuD;IACvD,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAE1B,gGAAgG;IAChG,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;CACrC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=authorization-decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorization-decision.js","sourceRoot":"","sources":["../../src/sources/authorization-decision.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { AuditRecord, ExecutionContext } from '@ddd-ts-kit/kernel';
2
+ import type { AuditFact } from './audit-fact.js';
3
+ import type { AuditSource } from './audit-source.js';
4
+ export declare function recordIn(context: ExecutionContext, source: Omit<AuditSource, 'scope'>, fact: AuditFact): AuditRecord;
5
+ //# sourceMappingURL=record-in.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-in.d.ts","sourceRoot":"","sources":["../../src/sources/record-in.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,wBAAgB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAepH"}
@@ -0,0 +1,19 @@
1
+ export function recordIn(context, source, fact) {
2
+ const session = context.session;
3
+ return {
4
+ id: source.ids.next(),
5
+ occurredAt: source.clock.now(),
6
+ ...fact,
7
+ actor: auditActorOf(context),
8
+ ...(context.tenantId === undefined ? {} : { tenantId: context.tenantId }),
9
+ ...(session?.impersonatedBy === undefined ? {} : { impersonatedBy: session.impersonatedBy }),
10
+ ...(session === undefined ? {} : { sessionId: session.id }),
11
+ correlationId: context.correlationId,
12
+ ...(context.causationId === undefined ? {} : { causationId: context.causationId }),
13
+ origin: context.origin,
14
+ };
15
+ }
16
+ function auditActorOf({ actor }) {
17
+ return { id: actor.id, type: actor.type, ...(actor.tenantId === undefined ? {} : { tenantId: actor.tenantId }) };
18
+ }
19
+ //# sourceMappingURL=record-in.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-in.js","sourceRoot":"","sources":["../../src/sources/record-in.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,QAAQ,CAAC,OAAyB,EAAE,MAAkC,EAAE,IAAe;IACrG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAEhC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;QACrB,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;QAC9B,GAAG,IAAI;QACP,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC;QAC5B,GAAG,CAAC,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzE,GAAG,CAAC,OAAO,EAAE,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5F,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC;QAC3D,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;QAClF,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,KAAK,EAAoB;IAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;AACnH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const AUDIT_CHAINS_TABLE = "audit_chains";
2
+ //# sourceMappingURL=audit-chains-table-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-chains-table-name.d.ts","sourceRoot":"","sources":["../../src/sql/audit-chains-table-name.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,iBAAiB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const AUDIT_CHAINS_TABLE = 'audit_chains';
2
+ //# sourceMappingURL=audit-chains-table-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-chains-table-name.js","sourceRoot":"","sources":["../../src/sql/audit-chains-table-name.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const AUDIT_ENTRIES_TABLE = "audit_entries";
2
+ //# sourceMappingURL=audit-entries-table-name.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-entries-table-name.d.ts","sourceRoot":"","sources":["../../src/sql/audit-entries-table-name.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const AUDIT_ENTRIES_TABLE = 'audit_entries';
2
+ //# sourceMappingURL=audit-entries-table-name.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-entries-table-name.js","sourceRoot":"","sources":["../../src/sql/audit-entries-table-name.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,eAAe,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AuditTablesOptions } from './audit-tables-options.js';
2
+ /**
3
+ * The guard of `audit_entries`: triggers that refuse UPDATE, DELETE and TRUNCATE, whoever
4
+ * asks. A role that owns the table can still drop them: see the README for the privileges to
5
+ * revoke and for anchoring.
6
+ */
7
+ export declare function auditGuardSql(options?: AuditTablesOptions): string[];
8
+ //# sourceMappingURL=audit-guard-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-guard-sql.d.ts","sourceRoot":"","sources":["../../src/sql/audit-guard-sql.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CASxE"}
@@ -0,0 +1,17 @@
1
+ import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
2
+ import { named } from './named.js';
3
+ /**
4
+ * The guard of `audit_entries`: triggers that refuse UPDATE, DELETE and TRUNCATE, whoever
5
+ * asks. A role that owns the table can still drop them: see the README for the privileges to
6
+ * revoke and for anchoring.
7
+ */
8
+ export function auditGuardSql(options = {}) {
9
+ const entries = named(options.schema, AUDIT_ENTRIES_TABLE);
10
+ const guard = named(options.schema, 'audit_entries_append_only');
11
+ return [
12
+ `create function ${guard}() returns trigger language plpgsql as $guard$ begin raise exception 'audit entries are append-only: % refused', tg_op using errcode = 'restrict_violation'; end $guard$`,
13
+ `create trigger "audit_entries_no_rewrite" before update or delete on ${entries} for each row execute function ${guard}()`,
14
+ `create trigger "audit_entries_no_truncate" before truncate on ${entries} for each statement execute function ${guard}()`,
15
+ ];
16
+ }
17
+ //# sourceMappingURL=audit-guard-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-guard-sql.js","sourceRoot":"","sources":["../../src/sql/audit-guard-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,OAAO,GAAuB,EAAE;IAC5D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;IAEjE,OAAO;QACL,mBAAmB,KAAK,0KAA0K;QAClM,wEAAwE,OAAO,kCAAkC,KAAK,IAAI;QAC1H,iEAAiE,OAAO,wCAAwC,KAAK,IAAI;KAC1H,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface AuditTablesOptions {
2
+ /** The schema holding the tables. Without it they live in the default schema of the connection. */
3
+ readonly schema?: string;
4
+ }
5
+ //# sourceMappingURL=audit-tables-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables-options.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables-options.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,mGAAmG;IACnG,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=audit-tables-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables-options.js","sourceRoot":"","sources":["../../src/sql/audit-tables-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { AuditTablesOptions } from './audit-tables-options.js';
2
+ /**
3
+ * The tables of the trail on PostgreSQL, one statement per element: `audit_entries`, the
4
+ * chain heads that serialize the appends, the indexes of the reader, then the guard.
5
+ */
6
+ export declare function auditTablesSql(options?: AuditTablesOptions): string[];
7
+ //# sourceMappingURL=audit-tables-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables-sql.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables-sql.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AA8BpE;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAazE"}
@@ -0,0 +1,48 @@
1
+ import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
2
+ import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
3
+ import { auditGuardSql } from './audit-guard-sql.js';
4
+ import { named } from './named.js';
5
+ const ENTRY_COLUMNS = [
6
+ '"id" text not null unique',
7
+ '"chain" text not null',
8
+ '"sequence" bigint not null',
9
+ '"occurred_at" timestamptz(3) not null',
10
+ '"category" text not null',
11
+ '"action" text not null',
12
+ '"outcome" text not null',
13
+ '"reason" text',
14
+ '"actor_id" text not null',
15
+ '"actor_type" text not null',
16
+ '"actor_tenant_id" text',
17
+ '"tenant_id" text',
18
+ '"impersonated_by" text',
19
+ '"session_id" text',
20
+ '"resource_type" text',
21
+ '"resource_id" text',
22
+ '"context" text',
23
+ '"correlation_id" text not null',
24
+ '"causation_id" text',
25
+ '"origin" text not null',
26
+ '"changes" jsonb',
27
+ `"extensions" jsonb not null default '{}'::jsonb`,
28
+ '"previous_hash" text not null',
29
+ '"hash" text not null',
30
+ ];
31
+ /**
32
+ * The tables of the trail on PostgreSQL, one statement per element: `audit_entries`, the
33
+ * chain heads that serialize the appends, the indexes of the reader, then the guard.
34
+ */
35
+ export function auditTablesSql(options = {}) {
36
+ const entries = named(options.schema, AUDIT_ENTRIES_TABLE);
37
+ return [
38
+ ...(options.schema === undefined ? [] : [`create schema if not exists ${named(undefined, options.schema)}`]),
39
+ `create table ${named(options.schema, AUDIT_CHAINS_TABLE)} ("chain" text primary key, "sequence" bigint not null, "hash" text not null)`,
40
+ `create table ${entries} (${ENTRY_COLUMNS.join(', ')}, primary key ("chain", "sequence"))`,
41
+ `create index "audit_entries_occurred_idx" on ${entries} ("occurred_at", "chain", "sequence")`,
42
+ `create index "audit_entries_actor_idx" on ${entries} ("actor_id", "occurred_at")`,
43
+ `create index "audit_entries_resource_idx" on ${entries} ("resource_type", "resource_id")`,
44
+ `create index "audit_entries_correlation_idx" on ${entries} ("correlation_id")`,
45
+ ...auditGuardSql(options),
46
+ ];
47
+ }
48
+ //# sourceMappingURL=audit-tables-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables-sql.js","sourceRoot":"","sources":["../../src/sql/audit-tables-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,aAAa,GAAG;IACpB,2BAA2B;IAC3B,uBAAuB;IACvB,4BAA4B;IAC5B,uCAAuC;IACvC,0BAA0B;IAC1B,wBAAwB;IACxB,yBAAyB;IACzB,eAAe;IACf,0BAA0B;IAC1B,4BAA4B;IAC5B,wBAAwB;IACxB,kBAAkB;IAClB,wBAAwB;IACxB,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;IACpB,gBAAgB;IAChB,gCAAgC;IAChC,qBAAqB;IACrB,wBAAwB;IACxB,iBAAiB;IACjB,iDAAiD;IACjD,+BAA+B;IAC/B,sBAAsB;CACvB,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAO,GAAuB,EAAE;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAE3D,OAAO;QACL,GAAG,CAAC,OAAO,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,+BAA+B,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC5G,gBAAgB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,+EAA+E;QACxI,gBAAgB,OAAO,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,sCAAsC;QAC1F,gDAAgD,OAAO,uCAAuC;QAC9F,6CAA6C,OAAO,8BAA8B;QAClF,gDAAgD,OAAO,mCAAmC;QAC1F,mDAAmD,OAAO,qBAAqB;QAC/E,GAAG,aAAa,CAAC,OAAO,CAAC;KAC1B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AuditTablesOptions } from './audit-tables-options.js';
2
+ import type { Sql } from './sql.js';
3
+ export interface AuditTables {
4
+ readonly entries: Sql;
5
+ readonly chains: Sql;
6
+ }
7
+ export declare function auditTables({ schema }?: AuditTablesOptions): AuditTables;
8
+ //# sourceMappingURL=audit-tables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables.d.ts","sourceRoot":"","sources":["../../src/sql/audit-tables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB;AAED,wBAAgB,WAAW,CAAC,EAAE,MAAM,EAAE,GAAE,kBAAuB,GAAG,WAAW,CAE5E"}
@@ -0,0 +1,7 @@
1
+ import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
2
+ import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
3
+ import { qualified } from './qualified.js';
4
+ export function auditTables({ schema } = {}) {
5
+ return { entries: qualified(schema, AUDIT_ENTRIES_TABLE), chains: qualified(schema, AUDIT_CHAINS_TABLE) };
6
+ }
7
+ //# sourceMappingURL=audit-tables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-tables.js","sourceRoot":"","sources":["../../src/sql/audit-tables.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAQ3C,MAAM,UAAU,WAAW,CAAC,EAAE,MAAM,EAAE,GAAuB,EAAE;IAC7D,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE,CAAC;AAC5G,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { AuditTablesOptions } from './audit-tables-options.js';
2
+ /** The `down` of `auditTablesSql`. The schema itself is left in place. */
3
+ export declare function dropAuditTablesSql(options?: AuditTablesOptions): string[];
4
+ //# sourceMappingURL=drop-audit-tables-sql.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-audit-tables-sql.d.ts","sourceRoot":"","sources":["../../src/sql/drop-audit-tables-sql.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,0EAA0E;AAC1E,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,EAAE,CAM7E"}
@@ -0,0 +1,12 @@
1
+ import { AUDIT_CHAINS_TABLE } from './audit-chains-table-name.js';
2
+ import { AUDIT_ENTRIES_TABLE } from './audit-entries-table-name.js';
3
+ import { named } from './named.js';
4
+ /** The `down` of `auditTablesSql`. The schema itself is left in place. */
5
+ export function dropAuditTablesSql(options = {}) {
6
+ return [
7
+ `drop table if exists ${named(options.schema, AUDIT_ENTRIES_TABLE)}`,
8
+ `drop table if exists ${named(options.schema, AUDIT_CHAINS_TABLE)}`,
9
+ `drop function if exists ${named(options.schema, 'audit_entries_append_only')}()`,
10
+ ];
11
+ }
12
+ //# sourceMappingURL=drop-audit-tables-sql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop-audit-tables-sql.js","sourceRoot":"","sources":["../../src/sql/drop-audit-tables-sql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,0EAA0E;AAC1E,MAAM,UAAU,kBAAkB,CAAC,OAAO,GAAuB,EAAE;IACjE,OAAO;QACL,wBAAwB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE;QACpE,wBAAwB,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,EAAE;QACnE,2BAA2B,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,2BAA2B,CAAC,IAAI;KAClF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { AuditEntry } from '@ddd-ts-kit/kernel';
2
+ import type { SqlRow } from './sql-row.js';
3
+ /** The mapper: a row comes back as the driver gives it, and leaves as an entry or not at all. */
4
+ export declare function entryOf(row: SqlRow): AuditEntry;
5
+ //# sourceMappingURL=entry-of.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-of.d.ts","sourceRoot":"","sources":["../../src/sql/entry-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAKV,UAAU,EAIX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,iGAAiG;AACjG,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CA2B/C"}
@@ -0,0 +1,109 @@
1
+ /** The mapper: a row comes back as the driver gives it, and leaves as an entry or not at all. */
2
+ export function entryOf(row) {
3
+ const resource = resourceOf(row);
4
+ const changes = changesOf(json(row['changes']));
5
+ return {
6
+ id: text(row, 'id'),
7
+ chain: text(row, 'chain'),
8
+ sequence: Number(row['sequence']),
9
+ occurredAt: instant(row['occurred_at']),
10
+ category: text(row, 'category'),
11
+ action: text(row, 'action'),
12
+ outcome: outcomeOf(text(row, 'outcome')),
13
+ ...optional('reason', row['reason']),
14
+ actor: actorOf(row),
15
+ ...optional('tenantId', row['tenant_id']),
16
+ ...optional('impersonatedBy', row['impersonated_by']),
17
+ ...optional('sessionId', row['session_id']),
18
+ ...(resource === undefined ? {} : { resource }),
19
+ ...optional('context', row['context']),
20
+ correlationId: text(row, 'correlation_id'),
21
+ ...optional('causationId', row['causation_id']),
22
+ origin: text(row, 'origin'),
23
+ ...(changes === undefined ? {} : { changes }),
24
+ extensions: extensionsOf(json(row['extensions'])),
25
+ previousHash: text(row, 'previous_hash'),
26
+ hash: text(row, 'hash'),
27
+ };
28
+ }
29
+ function text(row, column) {
30
+ const value = row[column];
31
+ if (typeof value !== 'string') {
32
+ throw new TypeError(`Column ${column} of an audit entry is not a text`);
33
+ }
34
+ return value;
35
+ }
36
+ function optional(key, value) {
37
+ const present = {};
38
+ if (typeof value === 'string') {
39
+ present[key] = value;
40
+ }
41
+ return present;
42
+ }
43
+ function instant(value) {
44
+ if (value instanceof Date) {
45
+ return value;
46
+ }
47
+ if (typeof value === 'string' || typeof value === 'number') {
48
+ return new Date(value);
49
+ }
50
+ throw new TypeError('Column occurred_at of an audit entry is not an instant');
51
+ }
52
+ /** node-postgres parses jsonb; a driver that does not hands the text over. */
53
+ function json(value) {
54
+ return typeof value === 'string' ? JSON.parse(value) : value;
55
+ }
56
+ const OUTCOMES = ['allowed', 'denied', 'succeeded', 'failed'];
57
+ function outcomeOf(value) {
58
+ if (isOutcome(value)) {
59
+ return value;
60
+ }
61
+ throw new TypeError(`"${value}" is not an audit outcome`);
62
+ }
63
+ function isOutcome(value) {
64
+ return OUTCOMES.includes(value);
65
+ }
66
+ const ACTOR_TYPES = [
67
+ 'user',
68
+ 'service',
69
+ 'system',
70
+ 'anonymous',
71
+ 'unknown',
72
+ ];
73
+ function actorOf(row) {
74
+ const type = text(row, 'actor_type');
75
+ if (!isActorType(type)) {
76
+ throw new TypeError(`"${type}" is not an actor type`);
77
+ }
78
+ return { id: text(row, 'actor_id'), type, ...optional('tenantId', row['actor_tenant_id']) };
79
+ }
80
+ function isActorType(value) {
81
+ return ACTOR_TYPES.includes(value);
82
+ }
83
+ function resourceOf(row) {
84
+ const type = row['resource_type'];
85
+ const id = row['resource_id'];
86
+ return typeof type === 'string' && typeof id === 'string' ? { type, id } : undefined;
87
+ }
88
+ function changesOf(value) {
89
+ if (typeof value !== 'object' || value === null) {
90
+ return undefined;
91
+ }
92
+ const changes = {};
93
+ for (const [field, change] of Object.entries(value)) {
94
+ if (isChange(change)) {
95
+ changes[field] = change;
96
+ }
97
+ }
98
+ return changes;
99
+ }
100
+ function isChange(value) {
101
+ if (value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
102
+ return true;
103
+ }
104
+ return typeof value === 'object' && 'masked' in value && typeof value.masked === 'string';
105
+ }
106
+ function extensionsOf(value) {
107
+ return typeof value === 'object' && value !== null ? value : {};
108
+ }
109
+ //# sourceMappingURL=entry-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-of.js","sourceRoot":"","sources":["../../src/sql/entry-of.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { AuditEntry } from '@ddd-ts-kit/kernel';
2
+ import { type Sql } from './sql.js';
3
+ export declare function insertOf(entries: Sql, entry: AuditEntry): Sql;
4
+ //# sourceMappingURL=insert-of.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-of.d.ts","sourceRoot":"","sources":["../../src/sql/insert-of.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,UAAU,CAAC;AA6B7D,wBAAgB,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,GAAG,GAAG,CAO7D"}
@@ -0,0 +1,51 @@
1
+ import { identifier, joined, sql } from './sql.js';
2
+ const COLUMNS = [
3
+ 'id',
4
+ 'chain',
5
+ 'sequence',
6
+ 'occurred_at',
7
+ 'category',
8
+ 'action',
9
+ 'outcome',
10
+ 'reason',
11
+ 'actor_id',
12
+ 'actor_type',
13
+ 'actor_tenant_id',
14
+ 'tenant_id',
15
+ 'impersonated_by',
16
+ 'session_id',
17
+ 'resource_type',
18
+ 'resource_id',
19
+ 'context',
20
+ 'correlation_id',
21
+ 'causation_id',
22
+ 'origin',
23
+ 'changes',
24
+ 'extensions',
25
+ 'previous_hash',
26
+ 'hash',
27
+ ];
28
+ export function insertOf(entries, entry) {
29
+ const columns = joined(COLUMNS.map((column) => identifier(column)), ', ');
30
+ return sql `insert into ${entries} (${columns}) values (${joined(valuesOf(entry), ', ')})`;
31
+ }
32
+ function valuesOf(entry) {
33
+ const { actor, resource } = entry;
34
+ return [
35
+ sql `${entry.id}, ${entry.chain}, ${entry.sequence}, ${entry.occurredAt.toISOString()}::timestamptz`,
36
+ sql `${entry.category}, ${entry.action}, ${entry.outcome}, ${orNull(entry.reason)}`,
37
+ sql `${actor.id}, ${actor.type}, ${orNull(actor.tenantId)}, ${orNull(entry.tenantId)}`,
38
+ sql `${orNull(entry.impersonatedBy)}, ${orNull(entry.sessionId)}`,
39
+ sql `${orNull(resource?.type)}, ${orNull(resource?.id)}, ${orNull(entry.context)}`,
40
+ sql `${entry.correlationId}, ${orNull(entry.causationId)}, ${entry.origin}`,
41
+ sql `${jsonOrNull(entry.changes)}::jsonb, ${JSON.stringify(entry.extensions)}::jsonb`,
42
+ sql `${entry.previousHash}, ${entry.hash}`,
43
+ ];
44
+ }
45
+ function orNull(value) {
46
+ return value ?? null;
47
+ }
48
+ function jsonOrNull(value) {
49
+ return value === undefined ? null : JSON.stringify(value);
50
+ }
51
+ //# sourceMappingURL=insert-of.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-of.js","sourceRoot":"","sources":["../../src/sql/insert-of.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAY,MAAM,UAAU,CAAC;AAE7D,MAAM,OAAO,GAAG;IACd,IAAI;IACJ,OAAO;IACP,UAAU;IACV,aAAa;IACb,UAAU;IACV,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,iBAAiB;IACjB,YAAY;IACZ,eAAe;IACf,aAAa;IACb,SAAS;IACT,gBAAgB;IAChB,cAAc;IACd,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,eAAe;IACf,MAAM;CACE,CAAC;AAEX,MAAM,UAAU,QAAQ,CAAC,OAAY,EAAE,KAAiB;IACtD,MAAM,OAAO,GAAG,MAAM,CACpB,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAC3C,IAAI,CACL,CAAC;IAEF,OAAO,GAAG,CAAA,eAAe,OAAO,KAAK,OAAO,aAAa,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAiB;IACjC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAElC,OAAO;QACL,GAAG,CAAA,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,eAAe;QACnG,GAAG,CAAA,GAAG,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QAClF,GAAG,CAAA,GAAG,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;QACrF,GAAG,CAAA,GAAG,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;QAChE,GAAG,CAAA,GAAG,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;QACjF,GAAG,CAAA,GAAG,KAAK,CAAC,aAAa,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,KAAK,CAAC,MAAM,EAAE;QAC1E,GAAG,CAAA,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS;QACpF,GAAG,CAAA,GAAG,KAAK,CAAC,YAAY,KAAK,KAAK,CAAC,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAyB;IACvC,OAAO,KAAK,IAAI,IAAI,CAAC;AACvB,CAAC;AAED,SAAS,UAAU,CAAC,KAAyB;IAC3C,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC"}
@@ -0,0 +1,3 @@
1
+ /** The quoted, qualified name as text, for a statement of a migration, which takes no parameter. */
2
+ export declare function named(schema: string | undefined, name: string): string;
3
+ //# sourceMappingURL=named.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named.d.ts","sourceRoot":"","sources":["../../src/sql/named.ts"],"names":[],"mappings":"AAEA,oGAAoG;AACpG,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAEtE"}
@@ -0,0 +1,6 @@
1
+ import { qualified } from './qualified.js';
2
+ /** The quoted, qualified name as text, for a statement of a migration, which takes no parameter. */
3
+ export function named(schema, name) {
4
+ return qualified(schema, name).strings.join('');
5
+ }
6
+ //# sourceMappingURL=named.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"named.js","sourceRoot":"","sources":["../../src/sql/named.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,oGAAoG;AACpG,MAAM,UAAU,KAAK,CAAC,MAA0B,EAAE,IAAY;IAC5D,OAAO,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { type AuditEntry, type AuditFilter, type AuditReader, type AuditRecord, type AuditSortField, type AuditTrail, type Page, type PageRequest } from '@ddd-ts-kit/kernel';
2
+ import type { AuditTrailOptions } from '../trail/audit-trail-options.js';
3
+ import type { AuditTables } from './audit-tables.js';
4
+ import type { SqlSession } from './sql-session.js';
5
+ /**
6
+ * The trail in PostgreSQL, whatever the query builder: the adapters give it a session, which
7
+ * is the transaction of the unit of work in progress when there is one.
8
+ *
9
+ * An append locks the head row of its chain (`SELECT ... FOR UPDATE`) until its transaction
10
+ * ends, so two appends to one chain never read the same head and the chain cannot fork. Under
11
+ * REPEATABLE READ or SERIALIZABLE the second one fails with a serialization error instead of
12
+ * waiting: the caller retries its unit of work, as for any other statement.
13
+ */
14
+ export declare class PostgresAuditTrail implements AuditTrail, AuditReader {
15
+ private readonly session;
16
+ private readonly tables;
17
+ private readonly options;
18
+ constructor(session: () => SqlSession, tables: AuditTables, options?: AuditTrailOptions);
19
+ record(record: AuditRecord): Promise<void>;
20
+ search(filter: AuditFilter, page: PageRequest<AuditSortField>): Promise<Page<AuditEntry>>;
21
+ private lockHead;
22
+ private select;
23
+ private count;
24
+ }
25
+ //# sourceMappingURL=postgres-audit-trail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-audit-trail.d.ts","sourceRoot":"","sources":["../../src/sql/postgres-audit-trail.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,IAAI,EACT,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAU5B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,UAAU,EAAE,WAAW;IAE9D,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,YACmB,OAAO,EAAE,MAAM,UAAU,EACzB,MAAM,EAAE,WAAW,EACnB,OAAO,GAAE,iBAAsB,EAC9C;IAEE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAc/C;IAEK,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAgB9F;YAEa,QAAQ;YAoBR,MAAM;YAMN,KAAK;CAOpB"}