@agentshouse/mdruntime 0.1.0-cb2e390ee7b89 → 0.1.0-cb454d4550040

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 (407) hide show
  1. package/README.md +24 -19
  2. package/dist/acceptance.d.ts +3 -0
  3. package/dist/acceptance.d.ts.map +1 -0
  4. package/dist/acceptance.js +299 -0
  5. package/dist/act-lanes.d.ts +30 -0
  6. package/dist/act-lanes.d.ts.map +1 -0
  7. package/dist/act-lanes.js +225 -0
  8. package/dist/actions.d.ts +26 -0
  9. package/dist/actions.d.ts.map +1 -0
  10. package/dist/actions.js +302 -0
  11. package/dist/adapter.d.ts +214 -123
  12. package/dist/adapter.d.ts.map +1 -1
  13. package/dist/attached-model.d.ts +6 -10
  14. package/dist/attached-model.d.ts.map +1 -1
  15. package/dist/attached-model.js +35 -41
  16. package/dist/authored.d.ts +88 -0
  17. package/dist/authored.d.ts.map +1 -0
  18. package/dist/authored.js +345 -0
  19. package/dist/binary.d.ts +0 -5
  20. package/dist/binary.d.ts.map +1 -1
  21. package/dist/binary.js +1 -1
  22. package/dist/bootstrap.d.ts +30 -11
  23. package/dist/bootstrap.d.ts.map +1 -1
  24. package/dist/bootstrap.js +309 -113
  25. package/dist/cell.d.ts +6 -0
  26. package/dist/cell.d.ts.map +1 -0
  27. package/dist/cell.js +9 -0
  28. package/dist/chain.d.ts +12 -0
  29. package/dist/chain.d.ts.map +1 -0
  30. package/dist/chain.js +64 -0
  31. package/dist/change-set.d.ts +13 -16
  32. package/dist/change-set.d.ts.map +1 -1
  33. package/dist/change-set.js +17 -89
  34. package/dist/change.d.ts +36 -1
  35. package/dist/change.d.ts.map +1 -1
  36. package/dist/change.js +17 -3
  37. package/dist/chat-types.d.ts +3 -0
  38. package/dist/chat-types.d.ts.map +1 -0
  39. package/dist/chat-types.js +11 -0
  40. package/dist/client.d.ts +39 -25
  41. package/dist/client.d.ts.map +1 -1
  42. package/dist/client.js +117 -23
  43. package/dist/collection.d.ts +32 -21
  44. package/dist/collection.d.ts.map +1 -1
  45. package/dist/collection.js +53 -288
  46. package/dist/column.d.ts +5 -0
  47. package/dist/column.d.ts.map +1 -0
  48. package/dist/column.js +9 -0
  49. package/dist/compile.d.ts +18 -0
  50. package/dist/compile.d.ts.map +1 -0
  51. package/dist/compile.js +723 -0
  52. package/dist/connection.d.ts +7 -134
  53. package/dist/connection.d.ts.map +1 -1
  54. package/dist/connection.js +109 -3606
  55. package/dist/context.d.ts +2 -0
  56. package/dist/context.d.ts.map +1 -0
  57. package/dist/{chat/context.js → context.js} +2 -5
  58. package/dist/conversation-live.d.ts +150 -0
  59. package/dist/conversation-live.d.ts.map +1 -0
  60. package/dist/conversation-live.js +259 -0
  61. package/dist/conversation-row.d.ts +40 -0
  62. package/dist/conversation-row.d.ts.map +1 -0
  63. package/dist/conversation-row.js +66 -0
  64. package/dist/conversation.d.ts +80 -50
  65. package/dist/conversation.d.ts.map +1 -1
  66. package/dist/conversation.js +1037 -793
  67. package/dist/declaration.d.ts +10 -0
  68. package/dist/declaration.d.ts.map +1 -0
  69. package/dist/declaration.js +24 -0
  70. package/dist/digest.d.ts +7 -0
  71. package/dist/digest.d.ts.map +1 -0
  72. package/dist/digest.js +113 -0
  73. package/dist/discovery.d.ts +10 -0
  74. package/dist/discovery.d.ts.map +1 -0
  75. package/dist/discovery.js +150 -0
  76. package/dist/durability.d.ts +20 -4
  77. package/dist/durability.d.ts.map +1 -1
  78. package/dist/durability.js +9 -0
  79. package/dist/entry.d.ts +5 -2
  80. package/dist/entry.d.ts.map +1 -1
  81. package/dist/entry.js +33 -28
  82. package/dist/expectation.d.ts +26 -13
  83. package/dist/expectation.d.ts.map +1 -1
  84. package/dist/expectation.js +72 -19
  85. package/dist/failure.d.ts +3 -0
  86. package/dist/failure.d.ts.map +1 -1
  87. package/dist/failure.js +6 -0
  88. package/dist/figures.d.ts +49 -0
  89. package/dist/figures.d.ts.map +1 -0
  90. package/dist/figures.js +199 -0
  91. package/dist/file.d.ts +2 -19
  92. package/dist/file.d.ts.map +1 -1
  93. package/dist/file.js +8 -122
  94. package/dist/holdings.d.ts +29 -0
  95. package/dist/holdings.d.ts.map +1 -0
  96. package/dist/holdings.js +95 -0
  97. package/dist/host.d.ts +21 -11
  98. package/dist/host.d.ts.map +1 -1
  99. package/dist/host.js +126 -53
  100. package/dist/identity.d.ts +0 -2
  101. package/dist/identity.d.ts.map +1 -1
  102. package/dist/identity.js +0 -6
  103. package/dist/index.d.ts +41 -16
  104. package/dist/index.d.ts.map +1 -1
  105. package/dist/index.js +19 -4
  106. package/dist/install.d.ts +60 -0
  107. package/dist/install.d.ts.map +1 -0
  108. package/dist/install.js +537 -0
  109. package/dist/lifecycle.d.ts +7 -0
  110. package/dist/lifecycle.d.ts.map +1 -0
  111. package/dist/lifecycle.js +282 -0
  112. package/dist/listing.d.ts +52 -0
  113. package/dist/listing.d.ts.map +1 -0
  114. package/dist/listing.js +152 -0
  115. package/dist/live.d.ts +25 -0
  116. package/dist/live.d.ts.map +1 -0
  117. package/dist/live.js +206 -0
  118. package/dist/loaded.d.ts +5 -0
  119. package/dist/loaded.d.ts.map +1 -0
  120. package/dist/loaded.js +40 -0
  121. package/dist/locks.d.ts +7 -0
  122. package/dist/locks.d.ts.map +1 -0
  123. package/dist/locks.js +32 -0
  124. package/dist/lost.d.ts +5 -0
  125. package/dist/lost.d.ts.map +1 -0
  126. package/dist/lost.js +49 -0
  127. package/dist/media.d.ts +13 -0
  128. package/dist/media.d.ts.map +1 -0
  129. package/dist/media.js +269 -0
  130. package/dist/memory.d.ts +20 -8
  131. package/dist/memory.d.ts.map +1 -1
  132. package/dist/memory.js +311 -121
  133. package/dist/messages.d.ts +58 -0
  134. package/dist/messages.d.ts.map +1 -0
  135. package/dist/messages.js +160 -0
  136. package/dist/model.d.ts +8 -11
  137. package/dist/model.d.ts.map +1 -1
  138. package/dist/model.js +6 -23
  139. package/dist/models.d.ts +10 -0
  140. package/dist/models.d.ts.map +1 -0
  141. package/dist/models.js +153 -0
  142. package/dist/name.d.ts +4 -0
  143. package/dist/name.d.ts.map +1 -0
  144. package/dist/name.js +122 -0
  145. package/dist/observation.d.ts +38 -10
  146. package/dist/observation.d.ts.map +1 -1
  147. package/dist/observation.js +232 -44
  148. package/dist/opened.d.ts +22 -0
  149. package/dist/opened.d.ts.map +1 -0
  150. package/dist/opened.js +107 -0
  151. package/dist/opening.d.ts +4 -0
  152. package/dist/opening.d.ts.map +1 -0
  153. package/dist/opening.js +53 -0
  154. package/dist/outcome.d.ts +57 -10
  155. package/dist/outcome.d.ts.map +1 -1
  156. package/dist/outcome.js +71 -2
  157. package/dist/overlay.d.ts +8 -6
  158. package/dist/overlay.d.ts.map +1 -1
  159. package/dist/overlay.js +121 -182
  160. package/dist/page-metadata.d.ts +8 -0
  161. package/dist/page-metadata.d.ts.map +1 -0
  162. package/dist/page-metadata.js +19 -0
  163. package/dist/parts.d.ts +4 -0
  164. package/dist/parts.d.ts.map +1 -0
  165. package/dist/parts.js +13 -0
  166. package/dist/paths.d.ts +2 -0
  167. package/dist/paths.d.ts.map +1 -1
  168. package/dist/paths.js +26 -0
  169. package/dist/preparation.d.ts +41 -0
  170. package/dist/preparation.d.ts.map +1 -0
  171. package/dist/preparation.js +314 -0
  172. package/dist/presence.d.ts +58 -0
  173. package/dist/presence.d.ts.map +1 -0
  174. package/dist/presence.js +231 -0
  175. package/dist/queries.d.ts +16 -0
  176. package/dist/queries.d.ts.map +1 -0
  177. package/dist/queries.js +308 -0
  178. package/dist/query.d.ts +21 -203
  179. package/dist/query.d.ts.map +1 -1
  180. package/dist/query.js +3 -491
  181. package/dist/{chat/questions.d.ts → questions.d.ts} +6 -7
  182. package/dist/questions.d.ts.map +1 -0
  183. package/dist/{chat/questions.js → questions.js} +12 -7
  184. package/dist/queue.d.ts +40 -0
  185. package/dist/queue.d.ts.map +1 -0
  186. package/dist/queue.js +480 -0
  187. package/dist/reach.d.ts +21 -11
  188. package/dist/reach.d.ts.map +1 -1
  189. package/dist/reach.js +358 -111
  190. package/dist/react.d.ts +19 -5
  191. package/dist/react.d.ts.map +1 -1
  192. package/dist/react.js +35 -15
  193. package/dist/{chat/read.d.ts → read.d.ts} +2 -0
  194. package/dist/read.d.ts.map +1 -0
  195. package/dist/{chat/read.js → read.js} +4 -0
  196. package/dist/readiness.d.ts +22 -20
  197. package/dist/readiness.d.ts.map +1 -1
  198. package/dist/readiness.js +5 -13
  199. package/dist/reads.d.ts +38 -10
  200. package/dist/reads.d.ts.map +1 -1
  201. package/dist/reads.js +163 -83
  202. package/dist/recovery.d.ts +5 -2
  203. package/dist/recovery.d.ts.map +1 -1
  204. package/dist/recovery.js +65 -8
  205. package/dist/refresh.d.ts +18 -15
  206. package/dist/refresh.d.ts.map +1 -1
  207. package/dist/refresh.js +145 -60
  208. package/dist/refusal.d.ts +5 -0
  209. package/dist/refusal.d.ts.map +1 -0
  210. package/dist/refusal.js +55 -0
  211. package/dist/replica.d.ts +49 -36
  212. package/dist/replica.d.ts.map +1 -1
  213. package/dist/replica.js +322 -198
  214. package/dist/retried.d.ts +30 -0
  215. package/dist/retried.d.ts.map +1 -0
  216. package/dist/retried.js +72 -0
  217. package/dist/room-draft.d.ts +55 -13
  218. package/dist/room-draft.d.ts.map +1 -1
  219. package/dist/room-draft.js +416 -122
  220. package/dist/room-drafts.d.ts +24 -0
  221. package/dist/room-drafts.d.ts.map +1 -0
  222. package/dist/room-drafts.js +220 -0
  223. package/dist/room-list.d.ts +10 -0
  224. package/dist/room-list.d.ts.map +1 -0
  225. package/dist/room-list.js +45 -0
  226. package/dist/rows.d.ts +32 -30
  227. package/dist/rows.d.ts.map +1 -1
  228. package/dist/rows.js +60 -120
  229. package/dist/runtime.d.ts +34 -0
  230. package/dist/runtime.d.ts.map +1 -0
  231. package/dist/runtime.js +1 -0
  232. package/dist/save.d.ts +43 -49
  233. package/dist/save.d.ts.map +1 -1
  234. package/dist/save.js +736 -304
  235. package/dist/saves.d.ts +34 -0
  236. package/dist/saves.d.ts.map +1 -0
  237. package/dist/saves.js +437 -0
  238. package/dist/search.d.ts +12 -95
  239. package/dist/search.d.ts.map +1 -1
  240. package/dist/search.js +10 -266
  241. package/dist/seed.d.ts +11 -2
  242. package/dist/seed.d.ts.map +1 -1
  243. package/dist/seed.js +71 -1
  244. package/dist/shared.d.ts +6 -7
  245. package/dist/shared.d.ts.map +1 -1
  246. package/dist/shared.js +75 -104
  247. package/dist/shown.d.ts +33 -0
  248. package/dist/shown.d.ts.map +1 -0
  249. package/dist/shown.js +309 -0
  250. package/dist/socket/admission.d.ts +7 -0
  251. package/dist/socket/admission.d.ts.map +1 -0
  252. package/dist/socket/admission.js +39 -0
  253. package/dist/socket/answers.d.ts +6 -0
  254. package/dist/socket/answers.d.ts.map +1 -0
  255. package/dist/socket/answers.js +20 -0
  256. package/dist/socket/lanes.d.ts +28 -0
  257. package/dist/socket/lanes.d.ts.map +1 -0
  258. package/dist/socket/lanes.js +103 -0
  259. package/dist/socket/reads.d.ts +10 -0
  260. package/dist/socket/reads.d.ts.map +1 -0
  261. package/dist/socket/reads.js +31 -0
  262. package/dist/socket/session.d.ts +38 -0
  263. package/dist/socket/session.d.ts.map +1 -0
  264. package/dist/socket/session.js +23 -0
  265. package/dist/socket.d.ts +67 -0
  266. package/dist/socket.d.ts.map +1 -0
  267. package/dist/socket.js +164 -0
  268. package/dist/source.d.ts +59 -0
  269. package/dist/source.d.ts.map +1 -0
  270. package/dist/source.js +93 -0
  271. package/dist/status.d.ts +4 -5
  272. package/dist/status.d.ts.map +1 -1
  273. package/dist/status.js +3 -7
  274. package/dist/store/installs.d.ts +30 -0
  275. package/dist/store/installs.d.ts.map +1 -0
  276. package/dist/store/installs.js +40 -0
  277. package/dist/store/readiness.d.ts +11 -0
  278. package/dist/store/readiness.d.ts.map +1 -0
  279. package/dist/store/readiness.js +68 -0
  280. package/dist/store/records.d.ts +223 -0
  281. package/dist/store/records.d.ts.map +1 -0
  282. package/dist/store/records.js +465 -0
  283. package/dist/store/room-held.d.ts +8 -0
  284. package/dist/store/room-held.d.ts.map +1 -0
  285. package/dist/store/room-held.js +17 -0
  286. package/dist/store/rooms-shown.d.ts +8 -0
  287. package/dist/store/rooms-shown.d.ts.map +1 -0
  288. package/dist/store/rooms-shown.js +13 -0
  289. package/dist/store/space.d.ts +11 -0
  290. package/dist/store/space.d.ts.map +1 -0
  291. package/dist/store/space.js +41 -0
  292. package/dist/store/watchers.d.ts +17 -0
  293. package/dist/store/watchers.d.ts.map +1 -0
  294. package/dist/store/watchers.js +56 -0
  295. package/dist/store/writes.d.ts +24 -0
  296. package/dist/store/writes.d.ts.map +1 -0
  297. package/dist/store/writes.js +125 -0
  298. package/dist/store.d.ts +114 -163
  299. package/dist/store.d.ts.map +1 -1
  300. package/dist/store.js +163 -754
  301. package/dist/stored.d.ts +167 -0
  302. package/dist/stored.d.ts.map +1 -0
  303. package/dist/stored.js +700 -0
  304. package/dist/surface.d.ts +90 -0
  305. package/dist/surface.d.ts.map +1 -0
  306. package/dist/surface.js +225 -0
  307. package/dist/sync.d.ts +19 -0
  308. package/dist/sync.d.ts.map +1 -0
  309. package/dist/sync.js +536 -0
  310. package/dist/tables.d.ts +376 -0
  311. package/dist/tables.d.ts.map +1 -0
  312. package/dist/tables.js +499 -0
  313. package/dist/tallies.d.ts +18 -0
  314. package/dist/tallies.d.ts.map +1 -0
  315. package/dist/tallies.js +128 -0
  316. package/dist/transfer.d.ts +0 -5
  317. package/dist/transfer.d.ts.map +1 -1
  318. package/dist/turn.d.ts +5 -3
  319. package/dist/turn.d.ts.map +1 -1
  320. package/dist/turn.js +51 -21
  321. package/dist/validation.d.ts +29 -0
  322. package/dist/validation.d.ts.map +1 -0
  323. package/dist/validation.js +98 -0
  324. package/dist/windows.d.ts +9 -16
  325. package/dist/windows.d.ts.map +1 -1
  326. package/dist/windows.js +11 -75
  327. package/dist/wire.d.ts +91 -9
  328. package/dist/wire.d.ts.map +1 -1
  329. package/dist/wire.js +31 -6
  330. package/package.json +19 -19
  331. package/AGENTS.md +0 -299
  332. package/dist/acquisition.d.ts +0 -14
  333. package/dist/acquisition.d.ts.map +0 -1
  334. package/dist/acquisition.js +0 -24
  335. package/dist/attempt.d.ts +0 -16
  336. package/dist/attempt.d.ts.map +0 -1
  337. package/dist/attempt.js +0 -70
  338. package/dist/chat/acts.d.ts +0 -33
  339. package/dist/chat/acts.d.ts.map +0 -1
  340. package/dist/chat/acts.js +0 -36
  341. package/dist/chat/context.d.ts +0 -3
  342. package/dist/chat/context.d.ts.map +0 -1
  343. package/dist/chat/earlier.d.ts +0 -10
  344. package/dist/chat/earlier.d.ts.map +0 -1
  345. package/dist/chat/earlier.js +0 -54
  346. package/dist/chat/input.d.ts +0 -9
  347. package/dist/chat/input.d.ts.map +0 -1
  348. package/dist/chat/input.js +0 -99
  349. package/dist/chat/kit.d.ts +0 -61
  350. package/dist/chat/kit.d.ts.map +0 -1
  351. package/dist/chat/kit.js +0 -123
  352. package/dist/chat/lasting.d.ts +0 -6
  353. package/dist/chat/lasting.d.ts.map +0 -1
  354. package/dist/chat/lasting.js +0 -19
  355. package/dist/chat/list.d.ts +0 -27
  356. package/dist/chat/list.d.ts.map +0 -1
  357. package/dist/chat/list.js +0 -99
  358. package/dist/chat/markdown.d.ts +0 -20
  359. package/dist/chat/markdown.d.ts.map +0 -1
  360. package/dist/chat/markdown.js +0 -188
  361. package/dist/chat/message.d.ts +0 -6
  362. package/dist/chat/message.d.ts.map +0 -1
  363. package/dist/chat/message.js +0 -192
  364. package/dist/chat/messages.d.ts +0 -22
  365. package/dist/chat/messages.d.ts.map +0 -1
  366. package/dist/chat/messages.js +0 -155
  367. package/dist/chat/name.d.ts +0 -6
  368. package/dist/chat/name.d.ts.map +0 -1
  369. package/dist/chat/name.js +0 -37
  370. package/dist/chat/opened.d.ts +0 -11
  371. package/dist/chat/opened.d.ts.map +0 -1
  372. package/dist/chat/opened.js +0 -17
  373. package/dist/chat/overlay.d.ts +0 -31
  374. package/dist/chat/overlay.d.ts.map +0 -1
  375. package/dist/chat/overlay.js +0 -97
  376. package/dist/chat/parts.d.ts +0 -57
  377. package/dist/chat/parts.d.ts.map +0 -1
  378. package/dist/chat/parts.js +0 -119
  379. package/dist/chat/process.d.ts +0 -20
  380. package/dist/chat/process.d.ts.map +0 -1
  381. package/dist/chat/process.js +0 -32
  382. package/dist/chat/provider.d.ts +0 -63
  383. package/dist/chat/provider.d.ts.map +0 -1
  384. package/dist/chat/provider.js +0 -635
  385. package/dist/chat/question.d.ts +0 -9
  386. package/dist/chat/question.d.ts.map +0 -1
  387. package/dist/chat/question.js +0 -69
  388. package/dist/chat/questions.d.ts.map +0 -1
  389. package/dist/chat/read.d.ts.map +0 -1
  390. package/dist/chat/ready.d.ts +0 -34
  391. package/dist/chat/ready.d.ts.map +0 -1
  392. package/dist/chat/ready.js +0 -91
  393. package/dist/chat/style.d.ts +0 -4
  394. package/dist/chat/style.d.ts.map +0 -1
  395. package/dist/chat/style.js +0 -302
  396. package/dist/chat.d.ts +0 -14
  397. package/dist/chat.d.ts.map +0 -1
  398. package/dist/chat.js +0 -8
  399. package/dist/fence.d.ts +0 -6
  400. package/dist/fence.d.ts.map +0 -1
  401. package/dist/fence.js +0 -10
  402. package/dist/log.d.ts +0 -5
  403. package/dist/log.d.ts.map +0 -1
  404. package/dist/log.js +0 -14
  405. package/dist/read-side.d.ts +0 -25
  406. package/dist/read-side.d.ts.map +0 -1
  407. package/dist/read-side.js +0 -761
@@ -0,0 +1,302 @@
1
+ import { roomTarget, target } from '@agentshouse/mdmodel';
2
+ import { CATCHING_UP, holdsSubmission, resendConversations } from './conversation.js';
3
+ import { listingNow } from './listing.js';
4
+ import { locked, lockedRooms } from './locks.js';
5
+ import { scoped } from './models.js';
6
+ import { ABSENT_TARGET, failure, historyAnswer, LOCKED_UNREADABLE, lockedRoom, handedOutcome, UNANSWERED, undeclared, UNCERTAIN, UNREADABLE, } from './outcome.js';
7
+ import { refuse } from './refusal.js';
8
+ function operationOf(input) {
9
+ const operation = input?.operation_id;
10
+ return typeof operation === 'string' ? operation : null;
11
+ }
12
+ export async function readHistory(runtime, locator, path, query = {}) {
13
+ const { store, socket, presence } = runtime;
14
+ const { session } = socket;
15
+ if (socket.closed() || session.now().refusal !== null)
16
+ return UNCERTAIN;
17
+ await socket.firstDiscovery;
18
+ if (!session.now().roomsNamed)
19
+ return UNCERTAIN;
20
+ try {
21
+ await socket.authorize();
22
+ }
23
+ catch {
24
+ return UNCERTAIN;
25
+ }
26
+ const { closed, authorization, refusal } = session.now();
27
+ if (closed || authorization === undefined || refusal !== null)
28
+ return UNCERTAIN;
29
+ const since = presence.losses();
30
+ try {
31
+ const result = await socket.history(authorization, {
32
+ locator,
33
+ path,
34
+ ...(query.revision === undefined ? {} : { revision: query.revision }),
35
+ ...(query.pageToken === undefined ? {} : { pageToken: query.pageToken }),
36
+ });
37
+ if (presence.lostSince(locator, since))
38
+ return failure({ kind: 'room-not-readable', locator });
39
+ if (result.kind === 'scoped-refusal') {
40
+ const room = await store.record(result.locator);
41
+ if (room !== undefined)
42
+ await scoped(runtime, result, room.locator, room.declaration);
43
+ }
44
+ if (result.kind === 'revoked-authorization')
45
+ await refuse(runtime, 'revoked-authorization');
46
+ return historyAnswer(result);
47
+ }
48
+ catch {
49
+ return UNCERTAIN;
50
+ }
51
+ }
52
+ export async function located(runtime, room, path, destination) {
53
+ const crossing = roomTarget(destination);
54
+ const listing = await listingNow(runtime);
55
+ if (crossing === null) {
56
+ const named = target(path, destination);
57
+ return named === null || !listing.has(room) ? null : { room, path: named };
58
+ }
59
+ const held = [...listing.values()].find((listed) => listed.handle === crossing.handle);
60
+ return held === undefined ? null : { room: held.locator, path: crossing.path };
61
+ }
62
+ export async function resolveReference(runtime, room, path, destination) {
63
+ const { store } = runtime;
64
+ if (roomTarget(destination) === null && target(path, destination) === null) {
65
+ return ABSENT_TARGET;
66
+ }
67
+ const at = await located(runtime, room, path, destination);
68
+ if (at === null)
69
+ return UNREADABLE;
70
+ if (await locked(runtime, at.room))
71
+ return LOCKED_UNREADABLE;
72
+ const held = await store.record(at.room);
73
+ if (held !== undefined &&
74
+ (await (await store.open()).entries(held.key, 'visible', [at.path])).length > 0) {
75
+ return { kind: 'document', ...at };
76
+ }
77
+ const history = await readHistory(runtime, at.room, at.path);
78
+ if (history.kind === 'no-history' || history.kind === 'revision')
79
+ return ABSENT_TARGET;
80
+ if (history.kind !== 'history')
81
+ return history;
82
+ const [last] = history.revisions;
83
+ if (last === undefined)
84
+ return ABSENT_TARGET;
85
+ return history.deleted === true
86
+ ? { kind: 'deleted', ...at, revision: last }
87
+ : { kind: 'document', ...at };
88
+ }
89
+ async function declaredAction({ store }, name) {
90
+ for (const capability of (await (await store.open()).facts()).capabilities) {
91
+ for (const action of capability.actions ?? []) {
92
+ if (action.name === name)
93
+ return action;
94
+ }
95
+ }
96
+ return undefined;
97
+ }
98
+ async function calledRooms(runtime, name, input) {
99
+ const member = (await declaredAction(runtime, name))?.room;
100
+ if (member === undefined || input === null || typeof input !== 'object')
101
+ return [];
102
+ const named = input[member];
103
+ return (Array.isArray(named) ? named : [named]).filter((room) => typeof room === 'string');
104
+ }
105
+ export async function invokeAction(runtime, name, input, { dispatching, attempt } = {}) {
106
+ const { store, socket, retries } = runtime;
107
+ const { session } = socket;
108
+ await socket.ready;
109
+ if (socket.closed() || session.now().refusal !== null) {
110
+ return handedOutcome(retries, attempt, UNANSWERED);
111
+ }
112
+ if ((await declaredAction(runtime, name)) === undefined)
113
+ return undeclared(name);
114
+ try {
115
+ await socket.authorize();
116
+ }
117
+ catch {
118
+ return handedOutcome(retries, attempt, UNANSWERED);
119
+ }
120
+ const { closed, authorization, refusal } = session.now();
121
+ if (closed || authorization === undefined || refusal !== null) {
122
+ return handedOutcome(retries, attempt, UNANSWERED);
123
+ }
124
+ await dispatching?.();
125
+ try {
126
+ const result = await socket.action(authorization, { name, input });
127
+ if (result.kind === 'scoped-refusal') {
128
+ const room = await store.record(result.locator);
129
+ if (room !== undefined)
130
+ await scoped(runtime, result, room.locator, room.declaration);
131
+ }
132
+ if (result.kind === 'revoked-authorization')
133
+ await refuse(runtime, 'revoked-authorization');
134
+ return handedOutcome(retries, attempt, result);
135
+ }
136
+ catch (error) {
137
+ return handedOutcome(retries, attempt, { kind: 'transport-uncertainty', failure: error });
138
+ }
139
+ }
140
+ export async function readConversationHistory(runtime, request) {
141
+ const { socket, retries } = runtime;
142
+ const caught = { step: 'conversations', instance: CATCHING_UP };
143
+ await socket.ready;
144
+ const stream = socket.conversations();
145
+ if (socket.closed() || socket.session.now().refusal !== null || stream?.history === undefined) {
146
+ return handedOutcome(retries, caught, UNANSWERED);
147
+ }
148
+ try {
149
+ const result = await stream.history(request);
150
+ if (result.kind === 'revoked-authorization')
151
+ await refuse(runtime, 'revoked-authorization');
152
+ return handedOutcome(retries, caught, result);
153
+ }
154
+ catch (error) {
155
+ return handedOutcome(retries, caught, { kind: 'transport-uncertainty', failure: error });
156
+ }
157
+ }
158
+ function unsettled(result) {
159
+ if (result.kind === 'action')
160
+ return false;
161
+ return result.retryable && (result.kind !== 'rejected' || result.reset === undefined);
162
+ }
163
+ function numberedCall(runtime, name, input, operation, dispatching) {
164
+ return invokeAction(runtime, name, input, {
165
+ dispatching,
166
+ attempt: { step: 'sending', instance: `action ${operation}` },
167
+ });
168
+ }
169
+ function keptSender(runtime, name, input, operation, resent = false) {
170
+ const { store, socket } = runtime;
171
+ const { lanes } = socket;
172
+ const dispatching = async () => (await store.open()).keepCall({ operation, name, input });
173
+ let waiting = [];
174
+ let last = UNCERTAIN;
175
+ let lost = resent;
176
+ const tell = (result) => {
177
+ last = result;
178
+ const told = waiting;
179
+ waiting = [];
180
+ for (const answer of told)
181
+ answer(result);
182
+ };
183
+ const sender = {
184
+ next: () => new Promise((answer) => waiting.push(answer)),
185
+ async send() {
186
+ let result;
187
+ try {
188
+ result = await numberedCall(runtime, name, input, operation, dispatching);
189
+ }
190
+ catch (error) {
191
+ tell(last);
192
+ throw error;
193
+ }
194
+ if (unsettled(result))
195
+ lost = true;
196
+ else {
197
+ await (await store.open()).dropCall(operation);
198
+ lanes.settle(operation, lost);
199
+ }
200
+ tell(result);
201
+ return result;
202
+ },
203
+ release() {
204
+ lanes.sent(operation, sender);
205
+ tell(last);
206
+ },
207
+ };
208
+ lanes.sending(operation, sender);
209
+ return sender;
210
+ }
211
+ async function recoveredAction(runtime, name, input, attempt) {
212
+ const { socket, recovery } = runtime;
213
+ const operation = operationOf(input);
214
+ if (operation === null)
215
+ return invokeAction(runtime, name, input, { attempt });
216
+ const held = socket.lanes.sender(operation);
217
+ if (held !== undefined)
218
+ return held.next();
219
+ const sender = keptSender(runtime, name, input, operation);
220
+ let first;
221
+ try {
222
+ first = await sender.send();
223
+ }
224
+ catch (error) {
225
+ sender.release();
226
+ throw error;
227
+ }
228
+ if (!unsettled(first)) {
229
+ sender.release();
230
+ return first;
231
+ }
232
+ void recovery
233
+ .attempt(`action ${operation}`, async () => {
234
+ if (socket.closed() || socket.session.now().refusal !== null)
235
+ return 'done';
236
+ if (!socket.isOpen())
237
+ return 'again';
238
+ return unsettled(await sender.send()) ? 'again' : 'done';
239
+ }, { again: true })
240
+ .finally(() => sender.release());
241
+ return first;
242
+ }
243
+ export async function called(runtime, name, input, attempt) {
244
+ await runtime.socket.ready;
245
+ const lockedNow = await lockedRooms(runtime);
246
+ const room = (await calledRooms(runtime, name, input)).find((one) => lockedNow.includes(one));
247
+ return room === undefined ? recoveredAction(runtime, name, input, attempt) : lockedRoom(room);
248
+ }
249
+ export async function answeredCall(runtime, operation) {
250
+ const { store, socket } = runtime;
251
+ const { lanes } = socket;
252
+ const held = () => lanes.sender(operation) !== undefined || lanes.unclaimed(operation);
253
+ if (!held()) {
254
+ const calls = await (await store.open()).calls();
255
+ const kept = calls.some((one) => one.operation === operation) ||
256
+ (await holdsSubmission(runtime.conversations, operation));
257
+ if (!held() && !kept)
258
+ return false;
259
+ }
260
+ await lanes.settled(operation);
261
+ return true;
262
+ }
263
+ export async function resendCalls(runtime, signal) {
264
+ const { store, socket } = runtime;
265
+ if (!socket.isOpen() || socket.closed() || socket.stopping())
266
+ return 'done';
267
+ const local = await store.open();
268
+ for (const held of await local.calls()) {
269
+ if (socket.lanes.sender(held.operation) !== undefined)
270
+ continue;
271
+ if (socket.closed() || signal.aborted)
272
+ return 'done';
273
+ const sender = keptSender(runtime, held.name, held.input, held.operation, true);
274
+ try {
275
+ if (unsettled(await sender.send()))
276
+ return 'again';
277
+ }
278
+ finally {
279
+ sender.release();
280
+ }
281
+ }
282
+ return 'done';
283
+ }
284
+ async function resendPass({ socket, conversations }, signal) {
285
+ if (!socket.continuing() || !socket.isOpen() || socket.stopping())
286
+ return 'done';
287
+ const reading = { complete: true, reachable: true };
288
+ try {
289
+ await resendConversations(conversations, reading);
290
+ }
291
+ catch {
292
+ reading.reachable = false;
293
+ }
294
+ if (signal.aborted)
295
+ return 'done';
296
+ return reading.reachable && reading.complete ? 'done' : 'again';
297
+ }
298
+ export function resendLater(runtime) {
299
+ if (!runtime.socket.isOpen())
300
+ return;
301
+ void runtime.recovery.attempt('resend', (signal) => resendPass(runtime, signal), { again: true });
302
+ }