@satorio/machinery 0.2.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 (341) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +71 -0
  3. package/dictionary/all.json +4656 -0
  4. package/dictionary/all.toon +639 -0
  5. package/dictionary/core.json +221 -0
  6. package/dictionary/core.toon +33 -0
  7. package/dictionary/graphql.json +212 -0
  8. package/dictionary/graphql.toon +32 -0
  9. package/dictionary/http.json +113 -0
  10. package/dictionary/http.toon +21 -0
  11. package/dictionary/identifiers.json +266 -0
  12. package/dictionary/identifiers.toon +38 -0
  13. package/dictionary/index.json +96 -0
  14. package/dictionary/index.toon +18 -0
  15. package/dictionary/integration.json +131 -0
  16. package/dictionary/integration.toon +23 -0
  17. package/dictionary/money.json +383 -0
  18. package/dictionary/money.toon +51 -0
  19. package/dictionary/ports.json +392 -0
  20. package/dictionary/ports.toon +52 -0
  21. package/dictionary/postgres.json +473 -0
  22. package/dictionary/postgres.toon +61 -0
  23. package/dictionary/publishing.json +131 -0
  24. package/dictionary/publishing.toon +23 -0
  25. package/dictionary/queue.json +365 -0
  26. package/dictionary/queue.toon +49 -0
  27. package/dictionary/reference/api.mdx +843 -0
  28. package/dictionary/reference/uk/api.mdx +844 -0
  29. package/dictionary/storage.json +194 -0
  30. package/dictionary/storage.toon +30 -0
  31. package/dictionary/testing.json +707 -0
  32. package/dictionary/testing.toon +87 -0
  33. package/dictionary/time.json +311 -0
  34. package/dictionary/time.toon +43 -0
  35. package/dictionary/vitest.json +356 -0
  36. package/dictionary/vitest.toon +48 -0
  37. package/dictionary/workflow.json +185 -0
  38. package/dictionary/workflow.toon +29 -0
  39. package/dist/bin/command.d.ts +45 -0
  40. package/dist/bin/command.js +113 -0
  41. package/dist/bin.d.ts +2 -0
  42. package/dist/bin.js +11 -0
  43. package/dist/core/bigint-json.d.ts +6 -0
  44. package/dist/core/bigint-json.js +6 -0
  45. package/dist/core/closed-set.d.ts +14 -0
  46. package/dist/core/closed-set.js +8 -0
  47. package/dist/core/domain-error.d.ts +8 -0
  48. package/dist/core/domain-error.js +11 -0
  49. package/dist/core/environment.d.ts +124 -0
  50. package/dist/core/environment.js +115 -0
  51. package/dist/core/index.d.ts +13 -0
  52. package/dist/core/index.js +13 -0
  53. package/dist/core/ulid.d.ts +27 -0
  54. package/dist/core/ulid.js +27 -0
  55. package/dist/graphql/builder.d.ts +36 -0
  56. package/dist/graphql/builder.js +35 -0
  57. package/dist/graphql/context.d.ts +36 -0
  58. package/dist/graphql/context.js +69 -0
  59. package/dist/graphql/failure-classification.d.ts +11 -0
  60. package/dist/graphql/failure-classification.js +1 -0
  61. package/dist/graphql/failures.d.ts +62 -0
  62. package/dist/graphql/failures.js +30 -0
  63. package/dist/graphql/graphiql.d.ts +45 -0
  64. package/dist/graphql/graphiql.js +56 -0
  65. package/dist/graphql/index.d.ts +15 -0
  66. package/dist/graphql/index.js +14 -0
  67. package/dist/graphql/layer.d.ts +15 -0
  68. package/dist/graphql/layer.js +23 -0
  69. package/dist/graphql/request-handler.d.ts +26 -0
  70. package/dist/graphql/request-handler.js +33 -0
  71. package/dist/graphql/server.d.ts +19 -0
  72. package/dist/graphql/server.js +16 -0
  73. package/dist/graphql/settings.d.ts +55 -0
  74. package/dist/graphql/settings.js +82 -0
  75. package/dist/http/health.d.ts +70 -0
  76. package/dist/http/health.js +60 -0
  77. package/dist/http/index.d.ts +5 -0
  78. package/dist/http/index.js +5 -0
  79. package/dist/identifiers/client-code.d.ts +37 -0
  80. package/dist/identifiers/client-code.js +41 -0
  81. package/dist/identifiers/creditor-reference.d.ts +38 -0
  82. package/dist/identifiers/creditor-reference.js +32 -0
  83. package/dist/identifiers/damm.d.ts +22 -0
  84. package/dist/identifiers/damm.js +50 -0
  85. package/dist/identifiers/document-number.d.ts +68 -0
  86. package/dist/identifiers/document-number.js +73 -0
  87. package/dist/identifiers/document-numbers.d.ts +27 -0
  88. package/dist/identifiers/document-numbers.js +16 -0
  89. package/dist/identifiers/failures.d.ts +46 -0
  90. package/dist/identifiers/failures.js +48 -0
  91. package/dist/identifiers/index.d.ts +14 -0
  92. package/dist/identifiers/index.js +13 -0
  93. package/dist/identifiers/next-document-number.d.ts +26 -0
  94. package/dist/identifiers/next-document-number.js +31 -0
  95. package/dist/identifiers/ulid.d.ts +28 -0
  96. package/dist/identifiers/ulid.js +71 -0
  97. package/dist/integration/external-http-client.d.ts +22 -0
  98. package/dist/integration/external-http-client.js +74 -0
  99. package/dist/integration/index.d.ts +12 -0
  100. package/dist/integration/index.js +12 -0
  101. package/dist/integration/layer.d.ts +19 -0
  102. package/dist/integration/layer.js +30 -0
  103. package/dist/integration/retry.d.ts +65 -0
  104. package/dist/integration/retry.js +54 -0
  105. package/dist/integration/settings.d.ts +73 -0
  106. package/dist/integration/settings.js +92 -0
  107. package/dist/money/amount.d.ts +60 -0
  108. package/dist/money/amount.js +67 -0
  109. package/dist/money/arithmetic.d.ts +60 -0
  110. package/dist/money/arithmetic.js +73 -0
  111. package/dist/money/currency.d.ts +25 -0
  112. package/dist/money/currency.js +24 -0
  113. package/dist/money/decimal.d.ts +29 -0
  114. package/dist/money/decimal.js +39 -0
  115. package/dist/money/exchange-rate.d.ts +32 -0
  116. package/dist/money/exchange-rate.js +28 -0
  117. package/dist/money/failures.d.ts +86 -0
  118. package/dist/money/failures.js +97 -0
  119. package/dist/money/index.d.ts +15 -0
  120. package/dist/money/index.js +15 -0
  121. package/dist/money/percent.d.ts +35 -0
  122. package/dist/money/percent.js +50 -0
  123. package/dist/money/schema.d.ts +25 -0
  124. package/dist/money/schema.js +41 -0
  125. package/dist/ports/blob-store.d.ts +42 -0
  126. package/dist/ports/blob-store.js +13 -0
  127. package/dist/ports/document-number-counter.d.ts +36 -0
  128. package/dist/ports/document-number-counter.js +12 -0
  129. package/dist/ports/event-publisher.d.ts +29 -0
  130. package/dist/ports/event-publisher.js +13 -0
  131. package/dist/ports/external-http-client.d.ts +60 -0
  132. package/dist/ports/external-http-client.js +25 -0
  133. package/dist/ports/index.d.ts +17 -0
  134. package/dist/ports/index.js +17 -0
  135. package/dist/ports/integration-event-outbox.d.ts +44 -0
  136. package/dist/ports/integration-event-outbox.js +13 -0
  137. package/dist/ports/port-unavailable.d.ts +21 -0
  138. package/dist/ports/port-unavailable.js +30 -0
  139. package/dist/ports/processed-event-registry.d.ts +57 -0
  140. package/dist/ports/processed-event-registry.js +24 -0
  141. package/dist/ports/queue-message-producer.d.ts +26 -0
  142. package/dist/ports/queue-message-producer.js +12 -0
  143. package/dist/ports/queue-message-source.d.ts +39 -0
  144. package/dist/ports/queue-message-source.js +13 -0
  145. package/dist/ports/readiness-probe.d.ts +27 -0
  146. package/dist/ports/readiness-probe.js +13 -0
  147. package/dist/ports/transaction-boundary.d.ts +28 -0
  148. package/dist/ports/transaction-boundary.js +13 -0
  149. package/dist/postgres/client.d.ts +51 -0
  150. package/dist/postgres/client.js +81 -0
  151. package/dist/postgres/document-number-counter.d.ts +14 -0
  152. package/dist/postgres/document-number-counter.js +27 -0
  153. package/dist/postgres/failures.d.ts +28 -0
  154. package/dist/postgres/failures.js +18 -0
  155. package/dist/postgres/index.d.ts +18 -0
  156. package/dist/postgres/index.js +18 -0
  157. package/dist/postgres/integration-event-outbox.d.ts +15 -0
  158. package/dist/postgres/integration-event-outbox.js +60 -0
  159. package/dist/postgres/jsonb-value.d.ts +10 -0
  160. package/dist/postgres/jsonb-value.js +9 -0
  161. package/dist/postgres/layer.d.ts +57 -0
  162. package/dist/postgres/layer.js +72 -0
  163. package/dist/postgres/migrations/advisory-lock.d.ts +47 -0
  164. package/dist/postgres/migrations/advisory-lock.js +59 -0
  165. package/dist/postgres/migrations/runner.d.ts +56 -0
  166. package/dist/postgres/migrations/runner.js +69 -0
  167. package/dist/postgres/migrations/sql-file-loader.d.ts +59 -0
  168. package/dist/postgres/migrations/sql-file-loader.js +99 -0
  169. package/dist/postgres/processed-event-registry.d.ts +13 -0
  170. package/dist/postgres/processed-event-registry.js +44 -0
  171. package/dist/postgres/readiness-probe.d.ts +27 -0
  172. package/dist/postgres/readiness-probe.js +33 -0
  173. package/dist/postgres/settings.d.ts +134 -0
  174. package/dist/postgres/settings.js +210 -0
  175. package/dist/postgres/sql/0001_processed_event.sql +4 -0
  176. package/dist/postgres/sql/0002_integration_event_outbox.sql +13 -0
  177. package/dist/postgres/sql/0003_document_number_counter.sql +6 -0
  178. package/dist/postgres/sql-failure.d.ts +19 -0
  179. package/dist/postgres/sql-failure.js +22 -0
  180. package/dist/postgres/store-failure.d.ts +17 -0
  181. package/dist/postgres/store-failure.js +16 -0
  182. package/dist/postgres/transaction-boundary.d.ts +13 -0
  183. package/dist/postgres/transaction-boundary.js +21 -0
  184. package/dist/publishing/event-publisher.sns.d.ts +66 -0
  185. package/dist/publishing/event-publisher.sns.js +75 -0
  186. package/dist/publishing/event-publisher.stdout.d.ts +15 -0
  187. package/dist/publishing/event-publisher.stdout.js +24 -0
  188. package/dist/publishing/index.d.ts +10 -0
  189. package/dist/publishing/index.js +10 -0
  190. package/dist/publishing/layer.d.ts +25 -0
  191. package/dist/publishing/layer.js +39 -0
  192. package/dist/publishing/settings.d.ts +60 -0
  193. package/dist/publishing/settings.js +85 -0
  194. package/dist/queue/consumer.d.ts +91 -0
  195. package/dist/queue/consumer.js +92 -0
  196. package/dist/queue/envelope.d.ts +39 -0
  197. package/dist/queue/envelope.js +39 -0
  198. package/dist/queue/failures.d.ts +33 -0
  199. package/dist/queue/failures.js +15 -0
  200. package/dist/queue/index.d.ts +14 -0
  201. package/dist/queue/index.js +14 -0
  202. package/dist/queue/layer.d.ts +33 -0
  203. package/dist/queue/layer.js +58 -0
  204. package/dist/queue/message-codec.d.ts +43 -0
  205. package/dist/queue/message-codec.js +33 -0
  206. package/dist/queue/queue-message-producer.d.ts +61 -0
  207. package/dist/queue/queue-message-producer.js +52 -0
  208. package/dist/queue/queue-message-source.d.ts +93 -0
  209. package/dist/queue/queue-message-source.js +86 -0
  210. package/dist/queue/readiness.d.ts +78 -0
  211. package/dist/queue/readiness.js +86 -0
  212. package/dist/queue/settings.d.ts +106 -0
  213. package/dist/queue/settings.js +160 -0
  214. package/dist/storage/blob-store.d.ts +84 -0
  215. package/dist/storage/blob-store.js +109 -0
  216. package/dist/storage/index.d.ts +9 -0
  217. package/dist/storage/index.js +9 -0
  218. package/dist/storage/layer.d.ts +17 -0
  219. package/dist/storage/layer.js +30 -0
  220. package/dist/storage/settings.d.ts +48 -0
  221. package/dist/storage/settings.js +65 -0
  222. package/dist/testing/blob-store.d.ts +27 -0
  223. package/dist/testing/blob-store.js +45 -0
  224. package/dist/testing/clock.d.ts +29 -0
  225. package/dist/testing/clock.js +41 -0
  226. package/dist/testing/dna-perturbator/attention.d.ts +55 -0
  227. package/dist/testing/dna-perturbator/attention.js +49 -0
  228. package/dist/testing/dna-perturbator/chains.d.ts +31 -0
  229. package/dist/testing/dna-perturbator/chains.js +53 -0
  230. package/dist/testing/dna-perturbator/report.d.ts +12 -0
  231. package/dist/testing/dna-perturbator/report.js +22 -0
  232. package/dist/testing/dna-perturbator/verdict.d.ts +26 -0
  233. package/dist/testing/dna-perturbator/verdict.js +28 -0
  234. package/dist/testing/dna-perturbator.d.ts +48 -0
  235. package/dist/testing/dna-perturbator.js +145 -0
  236. package/dist/testing/document-number-counter.d.ts +29 -0
  237. package/dist/testing/document-number-counter.js +39 -0
  238. package/dist/testing/event-publisher.d.ts +28 -0
  239. package/dist/testing/event-publisher.js +33 -0
  240. package/dist/testing/external-http-client.d.ts +29 -0
  241. package/dist/testing/external-http-client.js +49 -0
  242. package/dist/testing/index.d.ts +24 -0
  243. package/dist/testing/index.js +24 -0
  244. package/dist/testing/integration-event-outbox.d.ts +37 -0
  245. package/dist/testing/integration-event-outbox.js +67 -0
  246. package/dist/testing/mutation-settings.d.ts +71 -0
  247. package/dist/testing/mutation-settings.js +57 -0
  248. package/dist/testing/postgres-rows.d.ts +12 -0
  249. package/dist/testing/postgres-rows.js +19 -0
  250. package/dist/testing/processed-event-registry.d.ts +25 -0
  251. package/dist/testing/processed-event-registry.js +39 -0
  252. package/dist/testing/queue-message-producer.d.ts +27 -0
  253. package/dist/testing/queue-message-producer.js +41 -0
  254. package/dist/testing/queue-message-source.d.ts +54 -0
  255. package/dist/testing/queue-message-source.js +71 -0
  256. package/dist/testing/quiet-reporter.d.ts +86 -0
  257. package/dist/testing/quiet-reporter.js +81 -0
  258. package/dist/testing/readiness-probe.d.ts +27 -0
  259. package/dist/testing/readiness-probe.js +33 -0
  260. package/dist/testing/scenario.d.ts +94 -0
  261. package/dist/testing/scenario.js +81 -0
  262. package/dist/testing/transaction-boundary.d.ts +30 -0
  263. package/dist/testing/transaction-boundary.js +36 -0
  264. package/dist/testing/typed-failure.d.ts +8 -0
  265. package/dist/testing/typed-failure.js +15 -0
  266. package/dist/time/calendar-day.d.ts +83 -0
  267. package/dist/time/calendar-day.js +112 -0
  268. package/dist/time/failures.d.ts +51 -0
  269. package/dist/time/failures.js +56 -0
  270. package/dist/time/index.d.ts +11 -0
  271. package/dist/time/index.js +11 -0
  272. package/dist/time/instant.d.ts +64 -0
  273. package/dist/time/instant.js +67 -0
  274. package/dist/time/period.d.ts +45 -0
  275. package/dist/time/period.js +55 -0
  276. package/dist/vitest/container-reuse.d.ts +14 -0
  277. package/dist/vitest/container-reuse.js +15 -0
  278. package/dist/vitest/dotenv.d.ts +16 -0
  279. package/dist/vitest/dotenv.js +48 -0
  280. package/dist/vitest/effect-single-instance.d.ts +36 -0
  281. package/dist/vitest/effect-single-instance.js +125 -0
  282. package/dist/vitest/fast-check-single-instance.d.ts +11 -0
  283. package/dist/vitest/fast-check-single-instance.js +26 -0
  284. package/dist/vitest/index.d.ts +31 -0
  285. package/dist/vitest/index.js +30 -0
  286. package/dist/vitest/localstack-container.d.ts +32 -0
  287. package/dist/vitest/localstack-container.js +55 -0
  288. package/dist/vitest/port-contract-tester.d.ts +8 -0
  289. package/dist/vitest/port-contract-tester.js +1 -0
  290. package/dist/vitest/port-contracts/blob-store.contract.d.ts +22 -0
  291. package/dist/vitest/port-contracts/blob-store.contract.js +108 -0
  292. package/dist/vitest/port-contracts/document-number-counter.contract.d.ts +18 -0
  293. package/dist/vitest/port-contracts/document-number-counter.contract.js +90 -0
  294. package/dist/vitest/port-contracts/event-publisher.contract.d.ts +35 -0
  295. package/dist/vitest/port-contracts/event-publisher.contract.js +67 -0
  296. package/dist/vitest/port-contracts/external-http-client.contract.d.ts +35 -0
  297. package/dist/vitest/port-contracts/external-http-client.contract.js +52 -0
  298. package/dist/vitest/port-contracts/integration-event-outbox.contract.d.ts +23 -0
  299. package/dist/vitest/port-contracts/integration-event-outbox.contract.js +75 -0
  300. package/dist/vitest/port-contracts/processed-event-registry.contract.d.ts +18 -0
  301. package/dist/vitest/port-contracts/processed-event-registry.contract.js +84 -0
  302. package/dist/vitest/port-contracts/queue-message-producer.contract.d.ts +26 -0
  303. package/dist/vitest/port-contracts/queue-message-producer.contract.js +48 -0
  304. package/dist/vitest/port-contracts/queue-message-source.contract.d.ts +29 -0
  305. package/dist/vitest/port-contracts/queue-message-source.contract.js +71 -0
  306. package/dist/vitest/port-contracts/readiness-probe.contract.d.ts +18 -0
  307. package/dist/vitest/port-contracts/readiness-probe.contract.js +41 -0
  308. package/dist/vitest/port-contracts/transaction-boundary.contract.d.ts +21 -0
  309. package/dist/vitest/port-contracts/transaction-boundary.contract.js +64 -0
  310. package/dist/vitest/postgres-container.d.ts +57 -0
  311. package/dist/vitest/postgres-container.js +118 -0
  312. package/dist/vitest/reader-port-contract.d.ts +41 -0
  313. package/dist/vitest/reader-port-contract.js +43 -0
  314. package/dist/vitest/repo-source-files.d.ts +37 -0
  315. package/dist/vitest/repo-source-files.js +61 -0
  316. package/dist/vitest/reset-tables.d.ts +18 -0
  317. package/dist/vitest/reset-tables.js +30 -0
  318. package/dist/vitest/settings-contract.d.ts +38 -0
  319. package/dist/vitest/settings-contract.js +77 -0
  320. package/dist/vitest/stub-server.d.ts +43 -0
  321. package/dist/vitest/stub-server.js +60 -0
  322. package/dist/vitest/term-registry.json +730 -0
  323. package/dist/vitest/testclock-fork-isolated-files.d.ts +13 -0
  324. package/dist/vitest/testclock-fork-isolated-files.js +18 -0
  325. package/dist/vitest/testclock-fork-isolation.d.ts +77 -0
  326. package/dist/vitest/testclock-fork-isolation.js +188 -0
  327. package/dist/workflow/claim-once.d.ts +16 -0
  328. package/dist/workflow/claim-once.js +9 -0
  329. package/dist/workflow/failures.d.ts +47 -0
  330. package/dist/workflow/failures.js +22 -0
  331. package/dist/workflow/index.d.ts +12 -0
  332. package/dist/workflow/index.js +12 -0
  333. package/dist/workflow/on-claim.d.ts +17 -0
  334. package/dist/workflow/on-claim.js +8 -0
  335. package/dist/workflow/publish-pending-events.d.ts +31 -0
  336. package/dist/workflow/publish-pending-events.js +31 -0
  337. package/dist/workflow/transactionally.d.ts +8 -0
  338. package/dist/workflow/transactionally.js +8 -0
  339. package/dist/workflow/versioned-payload.d.ts +35 -0
  340. package/dist/workflow/versioned-payload.js +43 -0
  341. package/package.json +309 -0
@@ -0,0 +1,392 @@
1
+ {
2
+ "package": "@satorio/machinery",
3
+ "version": "0.2.1",
4
+ "mechanism": {
5
+ "mechanism": "ports",
6
+ "import": "@satorio/machinery/ports",
7
+ "kind": "foundation",
8
+ "page": "mechanisms/ports",
9
+ "what": "Public entry to the ports mechanism: every boundary a use case may ask for, and the failure each one raises.",
10
+ "whatUk": "Публічний вхід до механізму ports: кожна межа, яку може попросити процедура (use case), і відмова (refusal), яку піднімає кожна з них.",
11
+ "rows": [
12
+ {
13
+ "name": "BlobStoreShape",
14
+ "kind": "value",
15
+ "signature": "interface",
16
+ "fallback": "",
17
+ "caption": "The blob store's operations.",
18
+ "captionUk": "Операції сховища об'єктів (blob store).",
19
+ "anchor": "ports-BlobStoreShape-value"
20
+ },
21
+ {
22
+ "name": "claimAccepted",
23
+ "kind": "value",
24
+ "signature": "ProcessedEventClaim",
25
+ "fallback": "",
26
+ "caption": "The claim nobody had taken yet, so this run is the one that does the work.",
27
+ "captionUk": "Резервація (claim-once), якої ще ніхто не взяв, тож саме цей прогін робить роботу.",
28
+ "anchor": "ports-claimAccepted-value"
29
+ },
30
+ {
31
+ "name": "ClaimProcessedEventInput",
32
+ "kind": "value",
33
+ "signature": "interface",
34
+ "fallback": "",
35
+ "caption": "What a claim needs: which event is being claimed, and the moment it is claimed at.",
36
+ "captionUk": "Що потрібно резервації: яку подію резервують і в яку мить це роблять.",
37
+ "anchor": "ports-ClaimProcessedEventInput-value"
38
+ },
39
+ {
40
+ "name": "DocumentNumberCounterShape",
41
+ "kind": "value",
42
+ "signature": "interface",
43
+ "fallback": "",
44
+ "caption": "What the counter offers: one call that moves a client's month on and hands back the count the next document takes.",
45
+ "captionUk": "Що пропонує лічильник: один виклик, який рухає місяць клієнта далі й подає лічбу, яку візьме наступний документ.",
46
+ "anchor": "ports-DocumentNumberCounterShape-value"
47
+ },
48
+ {
49
+ "name": "DocumentNumberCountInput",
50
+ "kind": "value",
51
+ "signature": "interface",
52
+ "fallback": "",
53
+ "caption": "Which counter to move on: one client, one reporting month.",
54
+ "captionUk": "Який лічильник рухати далі: один клієнт, один звітний місяць (reporting month).",
55
+ "anchor": "ports-DocumentNumberCountInput-value"
56
+ },
57
+ {
58
+ "name": "EventPublisherShape",
59
+ "kind": "value",
60
+ "signature": "interface",
61
+ "fallback": "",
62
+ "caption": "What a publisher offers: one call that sends a batch of outbox messages out of this service.",
63
+ "captionUk": "Що пропонує публікатор: один виклик, який надсилає пачку повідомлень із буфера трансмітера (outbox) геть із цього сервісу.",
64
+ "anchor": "ports-EventPublisherShape-value"
65
+ },
66
+ {
67
+ "name": "ExternalHttpClientShape",
68
+ "kind": "value",
69
+ "signature": "interface",
70
+ "fallback": "",
71
+ "caption": "One external HTTP service, read through one operation.",
72
+ "captionUk": "Один зовнішній HTTP-сервіс, прочитаний однією операцією.",
73
+ "anchor": "ports-ExternalHttpClientShape-value"
74
+ },
75
+ {
76
+ "name": "IntegrationEventOutboxShape",
77
+ "kind": "value",
78
+ "signature": "interface",
79
+ "fallback": "",
80
+ "caption": "The outbox holds messages a use case enqueues in the same transaction as its state change.",
81
+ "captionUk": "Буфер трансмітера тримає повідомлення, які процедура ставить у чергу тією самою транзакцією, що й свою зміну стану.",
82
+ "anchor": "ports-IntegrationEventOutboxShape-value"
83
+ },
84
+ {
85
+ "name": "OutboxMessage",
86
+ "kind": "value",
87
+ "signature": "interface",
88
+ "fallback": "",
89
+ "caption": "One message waiting in the outbox: its own id, what it is, which schema shaped it, when it happened, and what it carries.",
90
+ "captionUk": "Одне повідомлення, що чекає в буфері трансмітера: власний ідентифікатор, що воно таке, яка схема надала йому форми, коли воно сталось і що воно несе.",
91
+ "anchor": "ports-OutboxMessage-value"
92
+ },
93
+ {
94
+ "name": "PORT_FAILURES_IN_THE_EVENTS_LANGUAGE",
95
+ "kind": "value",
96
+ "signature": "Readonly<Record<string, string>>",
97
+ "fallback": "",
98
+ "caption": "A port failure named in the event's language rather than as `<Port>UnavailableError`, with the sentence that earns the exception.",
99
+ "captionUk": "Відмова порту, названа мовою події, а не як `<Port>UnavailableError`, разом із реченням, яке заслуговує на цей виняток.",
100
+ "anchor": "ports-PORT-FAILURES-IN-THE-EVENTS-LANGUAGE-value"
101
+ },
102
+ {
103
+ "name": "ProcessedEventClaim",
104
+ "kind": "value",
105
+ "signature": "type",
106
+ "fallback": "",
107
+ "caption": "The two states of the claim-once lock: this run took the event, or somebody already had.",
108
+ "captionUk": "Два стани замка резервації: цей прогін узяв подію, або хтось уже взяв її раніше.",
109
+ "anchor": "ports-ProcessedEventClaim-value"
110
+ },
111
+ {
112
+ "name": "ProcessedEventRegistryShape",
113
+ "kind": "value",
114
+ "signature": "interface",
115
+ "fallback": "",
116
+ "caption": "What the claim-once lock offers: one call that either takes an event for the first time or says when it was taken before.",
117
+ "captionUk": "Що пропонує замок резервації: один виклик, який або бере подію вперше, або каже, коли її взяли раніше.",
118
+ "anchor": "ports-ProcessedEventRegistryShape-value"
119
+ },
120
+ {
121
+ "name": "QueueMessageProducerShape",
122
+ "kind": "value",
123
+ "signature": "interface",
124
+ "fallback": "",
125
+ "caption": "What a producer offers: one call that puts a message body onto the queue.",
126
+ "captionUk": "Що пропонує відправник: один виклик, який кладе тіло повідомлення в чергу.",
127
+ "anchor": "ports-QueueMessageProducerShape-value"
128
+ },
129
+ {
130
+ "name": "QueueMessageSourceShape",
131
+ "kind": "value",
132
+ "signature": "interface",
133
+ "fallback": "",
134
+ "caption": "A source of queue messages: it receives a batch and acknowledges what was taken.",
135
+ "captionUk": "Джерело повідомлень черги: воно отримує пачку і підтверджує взяте.",
136
+ "anchor": "ports-QueueMessageSourceShape-value"
137
+ },
138
+ {
139
+ "name": "RawQueueMessage",
140
+ "kind": "value",
141
+ "signature": "interface",
142
+ "fallback": "",
143
+ "caption": "One message as the queue hands it over: its own id, the receipt an acknowledgement quotes, and the body, still text.",
144
+ "captionUk": "Одне повідомлення таким, яким його віддає черга: власний ідентифікатор, квитанція, яку цитує підтвердження, і тіло, ще текстом.",
145
+ "anchor": "ports-RawQueueMessage-value"
146
+ },
147
+ {
148
+ "name": "ReadinessProbeShape",
149
+ "kind": "value",
150
+ "signature": "interface",
151
+ "fallback": "",
152
+ "caption": "What a readiness probe offers: one check that the database answers, so the endpoint reports a dependency rather than a guess.",
153
+ "captionUk": "Що пропонує проба готовності: одна перевірка того, що база відповідає, тож точка звітує про залежність, а не про здогад.",
154
+ "anchor": "ports-ReadinessProbeShape-value"
155
+ },
156
+ {
157
+ "name": "StoredBlob",
158
+ "kind": "value",
159
+ "signature": "interface",
160
+ "fallback": "",
161
+ "caption": "A stored blob's bytes, content type, and free-form text metadata.",
162
+ "captionUk": "Байти збереженого об'єкта, його тип вмісту і довільні текстові метадані.",
163
+ "anchor": "ports-StoredBlob-value"
164
+ },
165
+ {
166
+ "name": "TransactionBoundaryShape",
167
+ "kind": "value",
168
+ "signature": "interface",
169
+ "fallback": "",
170
+ "caption": "What a transaction boundary offers: one call that runs work inside a transaction, and rolls the whole of it back when the work fails.",
171
+ "captionUk": "Що пропонує межа транзакції: один виклик, який виконує роботу всередині транзакції і відкочує її цілком, коли робота падає.",
172
+ "anchor": "ports-TransactionBoundaryShape-value"
173
+ },
174
+ {
175
+ "name": "alreadyProcessed",
176
+ "kind": "procedure",
177
+ "signature": "(processedAt: DateTime.Utc) => ProcessedEventClaim",
178
+ "fallback": "",
179
+ "caption": "The claim somebody else already took, with the moment they took it.",
180
+ "captionUk": "Резервація, яку хтось уже взяв, разом із миттю, коли він її взяв.",
181
+ "anchor": "ports-alreadyProcessed-procedure"
182
+ },
183
+ {
184
+ "name": "portUnavailable",
185
+ "kind": "procedure",
186
+ "signature": "<E>(Unavailable: new (fields: { readonly operation: string; readonly cause: unknown }) => E)",
187
+ "fallback": "",
188
+ "caption": "Builds the \"did not answer\" failure factory around one port's own `<Port>UnavailableError` constructor.",
189
+ "captionUk": "Будує фабрику відмов «не відповів» навколо власного конструктора `<Port>UnavailableError` одного порту.",
190
+ "anchor": "ports-portUnavailable-procedure"
191
+ },
192
+ {
193
+ "name": "BlobStore",
194
+ "kind": "port",
195
+ "signature": "Context.Tag('BlobStore')",
196
+ "fallback": "",
197
+ "caption": "The port a use case asks for when it stores whole objects under a key and reads them back.",
198
+ "captionUk": "Порт, який просить процедура, коли зберігає цілі об'єкти під ключем і читає їх назад.",
199
+ "anchor": "ports-BlobStore-port"
200
+ },
201
+ {
202
+ "name": "DocumentNumberCounter",
203
+ "kind": "port",
204
+ "signature": "Context.Tag('DocumentNumberCounter')",
205
+ "fallback": "",
206
+ "caption": "The port a use case asks for when it numbers a document a person will read.",
207
+ "captionUk": "Порт, який просить процедура, коли нумерує документ, що його читатиме людина.",
208
+ "anchor": "ports-DocumentNumberCounter-port"
209
+ },
210
+ {
211
+ "name": "EventPublisher",
212
+ "kind": "port",
213
+ "signature": "Context.Tag('EventPublisher')",
214
+ "fallback": "",
215
+ "caption": "The port the outbox relay asks for when it announces what has already happened.",
216
+ "captionUk": "Порт, який просить трансмітер вихідних подій (outbox relay), коли оголошує те, що вже сталось.",
217
+ "anchor": "ports-EventPublisher-port"
218
+ },
219
+ {
220
+ "name": "ExternalHttpClient",
221
+ "kind": "port",
222
+ "signature": "Context.Tag('ExternalHttpClient')",
223
+ "fallback": "",
224
+ "caption": "The port a use case asks for when it reads reference data from a service outside this one.",
225
+ "captionUk": "Порт, який просить процедура, коли читає довідкові дані із сервісу поза цим.",
226
+ "anchor": "ports-ExternalHttpClient-port"
227
+ },
228
+ {
229
+ "name": "IntegrationEventOutbox",
230
+ "kind": "port",
231
+ "signature": "Context.Tag( 'IntegrationEventOutbox', )",
232
+ "fallback": "",
233
+ "caption": "The port a use case asks for when it enqueues an event in the same transaction as the state change that caused it.",
234
+ "captionUk": "Порт, який просить процедура, коли ставить подію в чергу тією самою транзакцією, що й зміну стану, яка її спричинила.",
235
+ "anchor": "ports-IntegrationEventOutbox-port"
236
+ },
237
+ {
238
+ "name": "ProcessedEventRegistry",
239
+ "kind": "port",
240
+ "signature": "Context.Tag( 'ProcessedEventRegistry', )",
241
+ "fallback": "",
242
+ "caption": "The port a use case asks for when an event must be acted on exactly once, however many times it arrives.",
243
+ "captionUk": "Порт, який просить процедура, коли подію треба відпрацювати рівно раз, хоч би скільки разів вона прийшла.",
244
+ "anchor": "ports-ProcessedEventRegistry-port"
245
+ },
246
+ {
247
+ "name": "QueueMessageProducer",
248
+ "kind": "port",
249
+ "signature": "Context.Tag('QueueMessageProducer')",
250
+ "fallback": "",
251
+ "caption": "The port a use case asks for when it sends a message to a queue.",
252
+ "captionUk": "Порт, який просить процедура, коли надсилає повідомлення в чергу.",
253
+ "anchor": "ports-QueueMessageProducer-port"
254
+ },
255
+ {
256
+ "name": "QueueMessageSource",
257
+ "kind": "port",
258
+ "signature": "Context.Tag('QueueMessageSource')",
259
+ "fallback": "",
260
+ "caption": "The port a consumer asks for when it receives messages from a queue and acknowledges what it took.",
261
+ "captionUk": "Порт, який просить робітник, коли отримує повідомлення з черги і підтверджує взяте.",
262
+ "anchor": "ports-QueueMessageSource-port"
263
+ },
264
+ {
265
+ "name": "ReadinessProbe",
266
+ "kind": "port",
267
+ "signature": "Context.Tag('ReadinessProbe')",
268
+ "fallback": "",
269
+ "caption": "The port the readiness endpoint asks for when it has to say whether this service can take traffic.",
270
+ "captionUk": "Порт, який просить точка готовності, коли має сказати, чи цей сервіс може брати трафік.",
271
+ "anchor": "ports-ReadinessProbe-port"
272
+ },
273
+ {
274
+ "name": "TransactionBoundary",
275
+ "kind": "port",
276
+ "signature": "Context.Tag('TransactionBoundary')",
277
+ "fallback": "",
278
+ "caption": "The port a use case asks for when its writes must land together or not at all.",
279
+ "captionUk": "Порт, який просить процедура, коли її записи мають лягти разом або не лягти зовсім.",
280
+ "anchor": "ports-TransactionBoundary-port"
281
+ },
282
+ {
283
+ "name": "BlobStoreUnavailableError",
284
+ "kind": "failure",
285
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
286
+ "fallback": "",
287
+ "caption": "The object store did not answer; a key that is not there at all is never this failure.",
288
+ "captionUk": "Сховище об'єктів не відповіло; ключ, якого там просто немає, ніколи не є цією відмовою.",
289
+ "anchor": "ports-BlobStoreUnavailableError-failure"
290
+ },
291
+ {
292
+ "name": "DatabaseDidNotAnswerError",
293
+ "kind": "failure",
294
+ "signature": "Data.TaggedError<{ readonly reason: string }>",
295
+ "fallback": "",
296
+ "caption": "The readiness check against the database did not come back; `reason` says what stopped it.",
297
+ "captionUk": "Перевірка готовності проти бази не повернулась; `reason` каже, що її спинило.",
298
+ "anchor": "ports-DatabaseDidNotAnswerError-failure"
299
+ },
300
+ {
301
+ "name": "DocumentNumberCounterUnavailableError",
302
+ "kind": "failure",
303
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
304
+ "fallback": "",
305
+ "caption": "The counter behind a document number did not answer; `operation` names the call and `cause` carries the driver's own error.",
306
+ "captionUk": "Лічильник за номером документа не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
307
+ "anchor": "ports-DocumentNumberCounterUnavailableError-failure"
308
+ },
309
+ {
310
+ "name": "EventPublisherUnavailableError",
311
+ "kind": "failure",
312
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
313
+ "fallback": "",
314
+ "caption": "The publisher did not answer, or no topic is configured; `cause` says which of the two it was.",
315
+ "captionUk": "Публікатор не відповів, або топік не налаштований; `cause` каже, що з двох сталось.",
316
+ "anchor": "ports-EventPublisherUnavailableError-failure"
317
+ },
318
+ {
319
+ "name": "ExternalServiceRefusedError",
320
+ "kind": "failure",
321
+ "signature": "Data.TaggedError<{ readonly service: string; readonly operation: string; readonly status: number }>",
322
+ "fallback": "",
323
+ "caption": "The external service answered with a refusal of its own, so the same request will fail again until the request changes.",
324
+ "captionUk": "Зовнішній сервіс відповів власною відмовою, тож той самий запит падатиме знову, доки запит не зміниться.",
325
+ "anchor": "ports-ExternalServiceRefusedError-failure"
326
+ },
327
+ {
328
+ "name": "ExternalServiceResponseMalformedError",
329
+ "kind": "failure",
330
+ "signature": "Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>",
331
+ "fallback": "",
332
+ "caption": "The external service answered, but the body did not fit the schema the caller handed in.",
333
+ "captionUk": "Зовнішній сервіс відповів, але тіло не лягло в схему, яку подав викликач.",
334
+ "anchor": "ports-ExternalServiceResponseMalformedError-failure"
335
+ },
336
+ {
337
+ "name": "ExternalServiceUnavailableError",
338
+ "kind": "failure",
339
+ "signature": "Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>",
340
+ "fallback": "",
341
+ "caption": "A network failure, a timeout, or a server error after the retries ran out; the same request may well succeed later.",
342
+ "captionUk": "Мережева невдача, вичерпаний строк або помилка сервера після того, як скінчились спроби; той самий запит цілком може вдатись пізніше.",
343
+ "anchor": "ports-ExternalServiceUnavailableError-failure"
344
+ },
345
+ {
346
+ "name": "IntegrationEventOutboxUnavailableError",
347
+ "kind": "failure",
348
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
349
+ "fallback": "",
350
+ "caption": "The outbox driver did not answer; `operation` names the call and `cause` carries the driver's own error.",
351
+ "captionUk": "Драйвер буфера трансмітера не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
352
+ "anchor": "ports-IntegrationEventOutboxUnavailableError-failure"
353
+ },
354
+ {
355
+ "name": "ProcessedEventRegistryUnavailableError",
356
+ "kind": "failure",
357
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
358
+ "fallback": "",
359
+ "caption": "The claim-once driver did not answer; `operation` names the call and `cause` carries the driver's own error.",
360
+ "captionUk": "Драйвер резервації не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
361
+ "anchor": "ports-ProcessedEventRegistryUnavailableError-failure"
362
+ },
363
+ {
364
+ "name": "QueueMessageProducerUnavailableError",
365
+ "kind": "failure",
366
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
367
+ "fallback": "",
368
+ "caption": "The queue producer did not answer; `operation` names the call and `cause` carries the driver's own error.",
369
+ "captionUk": "Відправник черги не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
370
+ "anchor": "ports-QueueMessageProducerUnavailableError-failure"
371
+ },
372
+ {
373
+ "name": "QueueMessageSourceUnavailableError",
374
+ "kind": "failure",
375
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
376
+ "fallback": "",
377
+ "caption": "The queue source did not answer; `operation` names the call and `cause` carries the driver's own error.",
378
+ "captionUk": "Джерело черги не відповіло; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
379
+ "anchor": "ports-QueueMessageSourceUnavailableError-failure"
380
+ },
381
+ {
382
+ "name": "TransactionBoundaryUnavailableError",
383
+ "kind": "failure",
384
+ "signature": "Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>",
385
+ "fallback": "",
386
+ "caption": "The transaction driver did not answer; `operation` names the call and `cause` carries the driver's own error.",
387
+ "captionUk": "Драйвер транзакції не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",
388
+ "anchor": "ports-TransactionBoundaryUnavailableError-failure"
389
+ }
390
+ ]
391
+ }
392
+ }
@@ -0,0 +1,52 @@
1
+ package: @satorio/machinery
2
+ version: 0.2.1
3
+ mechanism:
4
+ mechanism: ports
5
+ import: @satorio/machinery/ports
6
+ kind: foundation
7
+ page: mechanisms/ports
8
+ what: "Public entry to the ports mechanism: every boundary a use case may ask for, and the failure each one raises."
9
+ whatUk: "Публічний вхід до механізму ports: кожна межа, яку може попросити процедура (use case), і відмова (refusal), яку піднімає кожна з них."
10
+ rows[42]{name,kind,signature,fallback,caption,captionUk,anchor}:
11
+ BlobStoreShape,value,interface,"",The blob store's operations.,Операції сховища об'єктів (blob store).,ports-BlobStoreShape-value
12
+ claimAccepted,value,ProcessedEventClaim,"","The claim nobody had taken yet, so this run is the one that does the work.","Резервація (claim-once), якої ще ніхто не взяв, тож саме цей прогін робить роботу.",ports-claimAccepted-value
13
+ ClaimProcessedEventInput,value,interface,"","What a claim needs: which event is being claimed, and the moment it is claimed at.","Що потрібно резервації: яку подію резервують і в яку мить це роблять.",ports-ClaimProcessedEventInput-value
14
+ DocumentNumberCounterShape,value,interface,"","What the counter offers: one call that moves a client's month on and hands back the count the next document takes.","Що пропонує лічильник: один виклик, який рухає місяць клієнта далі й подає лічбу, яку візьме наступний документ.",ports-DocumentNumberCounterShape-value
15
+ DocumentNumberCountInput,value,interface,"","Which counter to move on: one client, one reporting month.","Який лічильник рухати далі: один клієнт, один звітний місяць (reporting month).",ports-DocumentNumberCountInput-value
16
+ EventPublisherShape,value,interface,"","What a publisher offers: one call that sends a batch of outbox messages out of this service.","Що пропонує публікатор: один виклик, який надсилає пачку повідомлень із буфера трансмітера (outbox) геть із цього сервісу.",ports-EventPublisherShape-value
17
+ ExternalHttpClientShape,value,interface,"","One external HTTP service, read through one operation.","Один зовнішній HTTP-сервіс, прочитаний однією операцією.",ports-ExternalHttpClientShape-value
18
+ IntegrationEventOutboxShape,value,interface,"",The outbox holds messages a use case enqueues in the same transaction as its state change.,"Буфер трансмітера тримає повідомлення, які процедура ставить у чергу тією самою транзакцією, що й свою зміну стану.",ports-IntegrationEventOutboxShape-value
19
+ OutboxMessage,value,interface,"","One message waiting in the outbox: its own id, what it is, which schema shaped it, when it happened, and what it carries.","Одне повідомлення, що чекає в буфері трансмітера: власний ідентифікатор, що воно таке, яка схема надала йому форми, коли воно сталось і що воно несе.",ports-OutboxMessage-value
20
+ PORT_FAILURES_IN_THE_EVENTS_LANGUAGE,value,"Readonly<Record<string, string>>","","A port failure named in the event's language rather than as `<Port>UnavailableError`, with the sentence that earns the exception.","Відмова порту, названа мовою події, а не як `<Port>UnavailableError`, разом із реченням, яке заслуговує на цей виняток.",ports-PORT-FAILURES-IN-THE-EVENTS-LANGUAGE-value
21
+ ProcessedEventClaim,value,type,"","The two states of the claim-once lock: this run took the event, or somebody already had.","Два стани замка резервації: цей прогін узяв подію, або хтось уже взяв її раніше.",ports-ProcessedEventClaim-value
22
+ ProcessedEventRegistryShape,value,interface,"","What the claim-once lock offers: one call that either takes an event for the first time or says when it was taken before.","Що пропонує замок резервації: один виклик, який або бере подію вперше, або каже, коли її взяли раніше.",ports-ProcessedEventRegistryShape-value
23
+ QueueMessageProducerShape,value,interface,"","What a producer offers: one call that puts a message body onto the queue.","Що пропонує відправник: один виклик, який кладе тіло повідомлення в чергу.",ports-QueueMessageProducerShape-value
24
+ QueueMessageSourceShape,value,interface,"","A source of queue messages: it receives a batch and acknowledges what was taken.","Джерело повідомлень черги: воно отримує пачку і підтверджує взяте.",ports-QueueMessageSourceShape-value
25
+ RawQueueMessage,value,interface,"","One message as the queue hands it over: its own id, the receipt an acknowledgement quotes, and the body, still text.","Одне повідомлення таким, яким його віддає черга: власний ідентифікатор, квитанція, яку цитує підтвердження, і тіло, ще текстом.",ports-RawQueueMessage-value
26
+ ReadinessProbeShape,value,interface,"","What a readiness probe offers: one check that the database answers, so the endpoint reports a dependency rather than a guess.","Що пропонує проба готовності: одна перевірка того, що база відповідає, тож точка звітує про залежність, а не про здогад.",ports-ReadinessProbeShape-value
27
+ StoredBlob,value,interface,"","A stored blob's bytes, content type, and free-form text metadata.","Байти збереженого об'єкта, його тип вмісту і довільні текстові метадані.",ports-StoredBlob-value
28
+ TransactionBoundaryShape,value,interface,"","What a transaction boundary offers: one call that runs work inside a transaction, and rolls the whole of it back when the work fails.","Що пропонує межа транзакції: один виклик, який виконує роботу всередині транзакції і відкочує її цілком, коли робота падає.",ports-TransactionBoundaryShape-value
29
+ alreadyProcessed,procedure,"(processedAt: DateTime.Utc) => ProcessedEventClaim","","The claim somebody else already took, with the moment they took it.","Резервація, яку хтось уже взяв, разом із миттю, коли він її взяв.",ports-alreadyProcessed-procedure
30
+ portUnavailable,procedure,"<E>(Unavailable: new (fields: { readonly operation: string; readonly cause: unknown }) => E)","","Builds the \"did not answer\" failure factory around one port's own `<Port>UnavailableError` constructor.",Будує фабрику відмов «не відповів» навколо власного конструктора `<Port>UnavailableError` одного порту.,ports-portUnavailable-procedure
31
+ BlobStore,port,Context.Tag('BlobStore'),"",The port a use case asks for when it stores whole objects under a key and reads them back.,"Порт, який просить процедура, коли зберігає цілі об'єкти під ключем і читає їх назад.",ports-BlobStore-port
32
+ DocumentNumberCounter,port,Context.Tag('DocumentNumberCounter'),"",The port a use case asks for when it numbers a document a person will read.,"Порт, який просить процедура, коли нумерує документ, що його читатиме людина.",ports-DocumentNumberCounter-port
33
+ EventPublisher,port,Context.Tag('EventPublisher'),"",The port the outbox relay asks for when it announces what has already happened.,"Порт, який просить трансмітер вихідних подій (outbox relay), коли оголошує те, що вже сталось.",ports-EventPublisher-port
34
+ ExternalHttpClient,port,Context.Tag('ExternalHttpClient'),"",The port a use case asks for when it reads reference data from a service outside this one.,"Порт, який просить процедура, коли читає довідкові дані із сервісу поза цим.",ports-ExternalHttpClient-port
35
+ IntegrationEventOutbox,port,"Context.Tag( 'IntegrationEventOutbox', )","",The port a use case asks for when it enqueues an event in the same transaction as the state change that caused it.,"Порт, який просить процедура, коли ставить подію в чергу тією самою транзакцією, що й зміну стану, яка її спричинила.",ports-IntegrationEventOutbox-port
36
+ ProcessedEventRegistry,port,"Context.Tag( 'ProcessedEventRegistry', )","","The port a use case asks for when an event must be acted on exactly once, however many times it arrives.","Порт, який просить процедура, коли подію треба відпрацювати рівно раз, хоч би скільки разів вона прийшла.",ports-ProcessedEventRegistry-port
37
+ QueueMessageProducer,port,Context.Tag('QueueMessageProducer'),"",The port a use case asks for when it sends a message to a queue.,"Порт, який просить процедура, коли надсилає повідомлення в чергу.",ports-QueueMessageProducer-port
38
+ QueueMessageSource,port,Context.Tag('QueueMessageSource'),"",The port a consumer asks for when it receives messages from a queue and acknowledges what it took.,"Порт, який просить робітник, коли отримує повідомлення з черги і підтверджує взяте.",ports-QueueMessageSource-port
39
+ ReadinessProbe,port,Context.Tag('ReadinessProbe'),"",The port the readiness endpoint asks for when it has to say whether this service can take traffic.,"Порт, який просить точка готовності, коли має сказати, чи цей сервіс може брати трафік.",ports-ReadinessProbe-port
40
+ TransactionBoundary,port,Context.Tag('TransactionBoundary'),"",The port a use case asks for when its writes must land together or not at all.,"Порт, який просить процедура, коли її записи мають лягти разом або не лягти зовсім.",ports-TransactionBoundary-port
41
+ BlobStoreUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The object store did not answer; a key that is not there at all is never this failure.,"Сховище об'єктів не відповіло; ключ, якого там просто немає, ніколи не є цією відмовою.",ports-BlobStoreUnavailableError-failure
42
+ DatabaseDidNotAnswerError,failure,"Data.TaggedError<{ readonly reason: string }>","",The readiness check against the database did not come back; `reason` says what stopped it.,"Перевірка готовності проти бази не повернулась; `reason` каже, що її спинило.",ports-DatabaseDidNotAnswerError-failure
43
+ DocumentNumberCounterUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The counter behind a document number did not answer; `operation` names the call and `cause` carries the driver's own error.,"Лічильник за номером документа не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-DocumentNumberCounterUnavailableError-failure
44
+ EventPublisherUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","","The publisher did not answer, or no topic is configured; `cause` says which of the two it was.","Публікатор не відповів, або топік не налаштований; `cause` каже, що з двох сталось.",ports-EventPublisherUnavailableError-failure
45
+ ExternalServiceRefusedError,failure,"Data.TaggedError<{ readonly service: string; readonly operation: string; readonly status: number }>","","The external service answered with a refusal of its own, so the same request will fail again until the request changes.","Зовнішній сервіс відповів власною відмовою, тож той самий запит падатиме знову, доки запит не зміниться.",ports-ExternalServiceRefusedError-failure
46
+ ExternalServiceResponseMalformedError,failure,"Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>","","The external service answered, but the body did not fit the schema the caller handed in.","Зовнішній сервіс відповів, але тіло не лягло в схему, яку подав викликач.",ports-ExternalServiceResponseMalformedError-failure
47
+ ExternalServiceUnavailableError,failure,"Data.TaggedError<{ readonly service: string; readonly operation: string; readonly cause: unknown }>","","A network failure, a timeout, or a server error after the retries ran out; the same request may well succeed later.","Мережева невдача, вичерпаний строк або помилка сервера після того, як скінчились спроби; той самий запит цілком може вдатись пізніше.",ports-ExternalServiceUnavailableError-failure
48
+ IntegrationEventOutboxUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The outbox driver did not answer; `operation` names the call and `cause` carries the driver's own error.,"Драйвер буфера трансмітера не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-IntegrationEventOutboxUnavailableError-failure
49
+ ProcessedEventRegistryUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The claim-once driver did not answer; `operation` names the call and `cause` carries the driver's own error.,"Драйвер резервації не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-ProcessedEventRegistryUnavailableError-failure
50
+ QueueMessageProducerUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The queue producer did not answer; `operation` names the call and `cause` carries the driver's own error.,"Відправник черги не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-QueueMessageProducerUnavailableError-failure
51
+ QueueMessageSourceUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The queue source did not answer; `operation` names the call and `cause` carries the driver's own error.,"Джерело черги не відповіло; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-QueueMessageSourceUnavailableError-failure
52
+ TransactionBoundaryUnavailableError,failure,"Data.TaggedError<{ readonly operation: string; readonly cause: unknown }>","",The transaction driver did not answer; `operation` names the call and `cause` carries the driver's own error.,"Драйвер транзакції не відповів; `operation` називає виклик, а `cause` несе власну помилку драйвера.",ports-TransactionBoundaryUnavailableError-failure