@fluidframework/container-runtime 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.245554

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 (694) hide show
  1. package/.eslintrc.cjs +5 -5
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +54 -0
  4. package/README.md +45 -0
  5. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  6. package/api-extractor-lint.json +1 -1
  7. package/api-extractor.json +1 -1
  8. package/api-report/container-runtime.api.md +425 -33
  9. package/dist/batchTracker.d.ts +1 -2
  10. package/dist/batchTracker.d.ts.map +1 -1
  11. package/dist/batchTracker.js.map +1 -1
  12. package/dist/blobManager.d.ts +0 -5
  13. package/dist/blobManager.d.ts.map +1 -1
  14. package/dist/blobManager.js +0 -12
  15. package/dist/blobManager.js.map +1 -1
  16. package/dist/channelCollection.d.ts +225 -0
  17. package/dist/channelCollection.d.ts.map +1 -0
  18. package/dist/{dataStores.js → channelCollection.js} +447 -147
  19. package/dist/channelCollection.js.map +1 -0
  20. package/dist/connectionTelemetry.d.ts +11 -1
  21. package/dist/connectionTelemetry.d.ts.map +1 -1
  22. package/dist/connectionTelemetry.js +42 -4
  23. package/dist/connectionTelemetry.js.map +1 -1
  24. package/dist/container-runtime-alpha.d.ts +129 -48
  25. package/dist/container-runtime-beta.d.ts +68 -9
  26. package/dist/container-runtime-public.d.ts +68 -9
  27. package/dist/container-runtime-untrimmed.d.ts +692 -49
  28. package/dist/containerHandleContext.d.ts +1 -1
  29. package/dist/containerHandleContext.d.ts.map +1 -1
  30. package/dist/containerHandleContext.js.map +1 -1
  31. package/dist/containerRuntime.d.ts +81 -64
  32. package/dist/containerRuntime.d.ts.map +1 -1
  33. package/dist/containerRuntime.js +503 -368
  34. package/dist/containerRuntime.js.map +1 -1
  35. package/dist/dataStore.d.ts +2 -3
  36. package/dist/dataStore.d.ts.map +1 -1
  37. package/dist/dataStore.js +12 -11
  38. package/dist/dataStore.js.map +1 -1
  39. package/dist/dataStoreContext.d.ts +118 -41
  40. package/dist/dataStoreContext.d.ts.map +1 -1
  41. package/dist/dataStoreContext.js +248 -159
  42. package/dist/dataStoreContext.js.map +1 -1
  43. package/dist/dataStoreContexts.d.ts +2 -1
  44. package/dist/dataStoreContexts.d.ts.map +1 -1
  45. package/dist/dataStoreContexts.js +1 -0
  46. package/dist/dataStoreContexts.js.map +1 -1
  47. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  48. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  49. package/dist/deltaManagerSummarizerProxy.js +91 -5
  50. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  51. package/dist/gc/garbageCollection.d.ts +12 -6
  52. package/dist/gc/garbageCollection.d.ts.map +1 -1
  53. package/dist/gc/garbageCollection.js +116 -78
  54. package/dist/gc/garbageCollection.js.map +1 -1
  55. package/dist/gc/gcConfigs.d.ts +2 -2
  56. package/dist/gc/gcConfigs.d.ts.map +1 -1
  57. package/dist/gc/gcConfigs.js +30 -23
  58. package/dist/gc/gcConfigs.js.map +1 -1
  59. package/dist/gc/gcDefinitions.d.ts +22 -13
  60. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  61. package/dist/gc/gcDefinitions.js +7 -4
  62. package/dist/gc/gcDefinitions.js.map +1 -1
  63. package/dist/gc/gcHelpers.d.ts +2 -2
  64. package/dist/gc/gcHelpers.d.ts.map +1 -1
  65. package/dist/gc/gcHelpers.js.map +1 -1
  66. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  67. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  68. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  69. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  70. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  71. package/dist/gc/gcSummaryStateTracker.js +18 -6
  72. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  73. package/dist/gc/gcTelemetry.d.ts +6 -7
  74. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  75. package/dist/gc/gcTelemetry.js +20 -18
  76. package/dist/gc/gcTelemetry.js.map +1 -1
  77. package/dist/gc/gcUnreferencedStateTracker.d.ts +1 -1
  78. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  79. package/dist/gc/gcUnreferencedStateTracker.js +10 -10
  80. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  81. package/dist/gc/index.d.ts +8 -8
  82. package/dist/gc/index.d.ts.map +1 -1
  83. package/dist/gc/index.js +40 -39
  84. package/dist/gc/index.js.map +1 -1
  85. package/dist/index.d.ts +11 -21
  86. package/dist/index.d.ts.map +1 -1
  87. package/dist/index.js +36 -42
  88. package/dist/index.js.map +1 -1
  89. package/dist/messageTypes.d.ts +3 -3
  90. package/dist/messageTypes.d.ts.map +1 -1
  91. package/dist/messageTypes.js.map +1 -1
  92. package/dist/opLifecycle/batchManager.d.ts +2 -2
  93. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  94. package/dist/opLifecycle/batchManager.js.map +1 -1
  95. package/dist/opLifecycle/definitions.d.ts +2 -2
  96. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  97. package/dist/opLifecycle/definitions.js.map +1 -1
  98. package/dist/opLifecycle/index.d.ts +8 -8
  99. package/dist/opLifecycle/index.d.ts.map +1 -1
  100. package/dist/opLifecycle/index.js +18 -18
  101. package/dist/opLifecycle/index.js.map +1 -1
  102. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opCompressor.js +4 -4
  105. package/dist/opLifecycle/opCompressor.js.map +1 -1
  106. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  107. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  108. package/dist/opLifecycle/opDecompressor.js +3 -3
  109. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  110. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  111. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  112. package/dist/opLifecycle/opGroupingManager.js +1 -10
  113. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  114. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  115. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  116. package/dist/opLifecycle/opSplitter.js +5 -5
  117. package/dist/opLifecycle/opSplitter.js.map +1 -1
  118. package/dist/opLifecycle/outbox.d.ts +7 -7
  119. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  120. package/dist/opLifecycle/outbox.js +20 -12
  121. package/dist/opLifecycle/outbox.js.map +1 -1
  122. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  123. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  124. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  125. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  126. package/dist/package.json +3 -0
  127. package/dist/packageVersion.d.ts +1 -1
  128. package/dist/packageVersion.js +1 -1
  129. package/dist/packageVersion.js.map +1 -1
  130. package/dist/pendingStateManager.d.ts +2 -1
  131. package/dist/pendingStateManager.d.ts.map +1 -1
  132. package/dist/pendingStateManager.js +18 -10
  133. package/dist/pendingStateManager.js.map +1 -1
  134. package/dist/scheduleManager.d.ts +1 -2
  135. package/dist/scheduleManager.d.ts.map +1 -1
  136. package/dist/scheduleManager.js +5 -5
  137. package/dist/scheduleManager.js.map +1 -1
  138. package/dist/summary/index.d.ts +12 -12
  139. package/dist/summary/index.d.ts.map +1 -1
  140. package/dist/summary/index.js +43 -43
  141. package/dist/summary/index.js.map +1 -1
  142. package/dist/summary/orderedClientElection.js +8 -8
  143. package/dist/summary/orderedClientElection.js.map +1 -1
  144. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  145. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  146. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  147. package/dist/summary/runningSummarizer.d.ts +5 -4
  148. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  149. package/dist/summary/runningSummarizer.js +47 -32
  150. package/dist/summary/runningSummarizer.js.map +1 -1
  151. package/dist/summary/summarizer.d.ts +4 -4
  152. package/dist/summary/summarizer.d.ts.map +1 -1
  153. package/dist/summary/summarizer.js +6 -6
  154. package/dist/summary/summarizer.js.map +1 -1
  155. package/dist/summary/summarizerClientElection.d.ts +2 -2
  156. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  157. package/dist/summary/summarizerClientElection.js.map +1 -1
  158. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  159. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  160. package/dist/summary/summarizerHeuristics.js.map +1 -1
  161. package/dist/summary/summarizerNode/index.d.ts +3 -3
  162. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/index.js +4 -4
  164. package/dist/summary/summarizerNode/index.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNode.d.ts +16 -5
  166. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNode.js +40 -10
  168. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +9 -1
  170. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +3 -4
  173. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  174. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +12 -12
  175. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  176. package/dist/summary/summarizerTypes.d.ts +9 -20
  177. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  178. package/dist/summary/summarizerTypes.js.map +1 -1
  179. package/dist/summary/summaryFormat.d.ts +15 -2
  180. package/dist/summary/summaryFormat.d.ts.map +1 -1
  181. package/dist/summary/summaryFormat.js.map +1 -1
  182. package/dist/summary/summaryGenerator.d.ts +6 -5
  183. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  184. package/dist/summary/summaryGenerator.js +10 -1
  185. package/dist/summary/summaryGenerator.js.map +1 -1
  186. package/dist/summary/summaryManager.d.ts +5 -6
  187. package/dist/summary/summaryManager.d.ts.map +1 -1
  188. package/dist/summary/summaryManager.js +4 -5
  189. package/dist/summary/summaryManager.js.map +1 -1
  190. package/dist/tsdoc-metadata.json +1 -1
  191. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  192. package/lib/batchTracker.d.ts.map +1 -0
  193. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  194. package/lib/batchTracker.js.map +1 -0
  195. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -6
  196. package/lib/blobManager.d.ts.map +1 -0
  197. package/lib/{blobManager.mjs → blobManager.js} +1 -13
  198. package/lib/blobManager.js.map +1 -0
  199. package/lib/channelCollection.d.ts +225 -0
  200. package/lib/channelCollection.d.ts.map +1 -0
  201. package/lib/{dataStores.mjs → channelCollection.js} +434 -137
  202. package/lib/channelCollection.js.map +1 -0
  203. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  204. package/lib/connectionTelemetry.d.ts.map +1 -0
  205. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  206. package/lib/connectionTelemetry.js.map +1 -0
  207. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +129 -48
  208. package/lib/{container-runtime-beta.d.mts → container-runtime-beta.d.ts} +68 -9
  209. package/lib/{container-runtime-public.d.mts → container-runtime-public.d.ts} +68 -9
  210. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +692 -49
  211. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  212. package/lib/containerHandleContext.d.ts.map +1 -0
  213. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  214. package/lib/containerHandleContext.js.map +1 -0
  215. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +86 -65
  216. package/lib/containerRuntime.d.ts.map +1 -0
  217. package/lib/{containerRuntime.mjs → containerRuntime.js} +423 -290
  218. package/lib/containerRuntime.js.map +1 -0
  219. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  220. package/lib/dataStore.d.ts.map +1 -0
  221. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  222. package/lib/dataStore.js.map +1 -0
  223. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +119 -42
  224. package/lib/dataStoreContext.d.ts.map +1 -0
  225. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +240 -151
  226. package/lib/dataStoreContext.js.map +1 -0
  227. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +3 -2
  228. package/lib/dataStoreContexts.d.ts.map +1 -0
  229. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +2 -1
  230. package/lib/dataStoreContexts.js.map +1 -0
  231. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  232. package/lib/dataStoreRegistry.d.ts.map +1 -0
  233. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  234. package/lib/dataStoreRegistry.js.map +1 -0
  235. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  236. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  237. package/lib/deltaManagerSummarizerProxy.js +124 -0
  238. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  239. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  240. package/lib/deltaScheduler.d.ts.map +1 -0
  241. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  242. package/lib/deltaScheduler.js.map +1 -0
  243. package/lib/{error.d.mts → error.d.ts} +1 -1
  244. package/lib/error.d.ts.map +1 -0
  245. package/lib/{error.mjs → error.js} +1 -1
  246. package/lib/error.js.map +1 -0
  247. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +13 -7
  248. package/lib/gc/garbageCollection.d.ts.map +1 -0
  249. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +79 -41
  250. package/lib/gc/garbageCollection.js.map +1 -0
  251. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  252. package/lib/gc/gcConfigs.d.ts.map +1 -0
  253. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +14 -7
  254. package/lib/gc/gcConfigs.js.map +1 -0
  255. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +23 -14
  256. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  257. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +7 -4
  258. package/lib/gc/gcDefinitions.js.map +1 -0
  259. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  260. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  261. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  262. package/lib/gc/gcHelpers.js.map +1 -0
  263. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  264. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  265. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  266. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  267. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  268. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  269. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  270. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  271. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  272. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  273. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  274. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  275. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +7 -8
  276. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  277. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -3
  278. package/lib/gc/gcTelemetry.js.map +1 -0
  279. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +2 -2
  280. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  281. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +2 -2
  282. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  283. package/lib/gc/index.d.ts +13 -0
  284. package/lib/gc/index.d.ts.map +1 -0
  285. package/lib/gc/{index.mjs → index.js} +8 -8
  286. package/lib/gc/index.js.map +1 -0
  287. package/lib/{index.d.mts → index.d.ts} +12 -22
  288. package/lib/index.d.ts.map +1 -0
  289. package/lib/index.js +15 -0
  290. package/lib/index.js.map +1 -0
  291. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +4 -4
  292. package/lib/messageTypes.d.ts.map +1 -0
  293. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  294. package/lib/messageTypes.js.map +1 -0
  295. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  296. package/lib/metadata.d.ts.map +1 -0
  297. package/lib/{metadata.mjs → metadata.js} +1 -1
  298. package/lib/metadata.js.map +1 -0
  299. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  300. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  301. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  302. package/lib/opLifecycle/batchManager.js.map +1 -0
  303. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  304. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  305. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  306. package/lib/opLifecycle/definitions.js.map +1 -0
  307. package/lib/opLifecycle/index.d.ts +13 -0
  308. package/lib/opLifecycle/index.d.ts.map +1 -0
  309. package/lib/opLifecycle/index.js +12 -0
  310. package/lib/opLifecycle/index.js.map +1 -0
  311. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  312. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  313. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  314. package/lib/opLifecycle/opCompressor.js.map +1 -0
  315. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  316. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  317. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  318. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  319. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  320. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  321. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  322. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  323. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  324. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  325. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  326. package/lib/opLifecycle/opSplitter.js.map +1 -0
  327. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  328. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  329. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  330. package/lib/opLifecycle/outbox.js.map +1 -0
  331. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  332. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  333. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  334. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  335. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  336. package/lib/opProperties.d.ts.map +1 -0
  337. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  338. package/lib/opProperties.js.map +1 -0
  339. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  340. package/lib/packageVersion.d.ts.map +1 -0
  341. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  342. package/lib/packageVersion.js.map +1 -0
  343. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  344. package/lib/pendingStateManager.d.ts.map +1 -0
  345. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  346. package/lib/pendingStateManager.js.map +1 -0
  347. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  348. package/lib/scheduleManager.d.ts.map +1 -0
  349. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  350. package/lib/scheduleManager.js.map +1 -0
  351. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  352. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  353. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  354. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  355. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  356. package/lib/summary/index.d.ts.map +1 -0
  357. package/lib/summary/{index.mjs → index.js} +12 -12
  358. package/lib/summary/index.js.map +1 -0
  359. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  360. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  361. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  362. package/lib/summary/orderedClientElection.js.map +1 -0
  363. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  364. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  365. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  366. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  367. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +6 -5
  368. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  369. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +41 -26
  370. package/lib/summary/runningSummarizer.js.map +1 -0
  371. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  372. package/lib/summary/summarizer.d.ts.map +1 -0
  373. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  374. package/lib/summary/summarizer.js.map +1 -0
  375. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  376. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  377. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  378. package/lib/summary/summarizerClientElection.js.map +1 -0
  379. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  380. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  381. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  382. package/lib/summary/summarizerHeuristics.js.map +1 -0
  383. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  384. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  385. package/lib/summary/summarizerNode/index.js +7 -0
  386. package/lib/summary/summarizerNode/index.js.map +1 -0
  387. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +17 -6
  388. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  389. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +34 -4
  390. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  391. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +10 -2
  392. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  393. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -1
  394. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  395. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +4 -5
  396. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  397. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +7 -7
  398. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  399. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +10 -21
  400. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  401. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  402. package/lib/summary/summarizerTypes.js.map +1 -0
  403. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  404. package/lib/summary/summaryCollection.d.ts.map +1 -0
  405. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  406. package/lib/summary/summaryCollection.js.map +1 -0
  407. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  408. package/lib/summary/summaryFormat.d.ts.map +1 -0
  409. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  410. package/lib/summary/summaryFormat.js.map +1 -0
  411. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  412. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  413. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  414. package/lib/summary/summaryGenerator.js.map +1 -0
  415. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  416. package/lib/summary/summaryManager.d.ts.map +1 -0
  417. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  418. package/lib/summary/summaryManager.js.map +1 -0
  419. package/lib/test/batchTracker.spec.js +88 -0
  420. package/lib/test/batchTracker.spec.js.map +1 -0
  421. package/lib/test/blobManager.spec.js +835 -0
  422. package/lib/test/blobManager.spec.js.map +1 -0
  423. package/lib/test/channelCollection.spec.js +138 -0
  424. package/lib/test/channelCollection.spec.js.map +1 -0
  425. package/lib/test/containerRuntime.spec.js +1748 -0
  426. package/lib/test/containerRuntime.spec.js.map +1 -0
  427. package/lib/test/dataStoreContext.spec.js +771 -0
  428. package/lib/test/dataStoreContext.spec.js.map +1 -0
  429. package/lib/test/dataStoreCreation.spec.js +303 -0
  430. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  431. package/lib/test/dataStoreRegistry.spec.js +26 -0
  432. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  433. package/lib/test/fuzz/fuzzUtils.js +66 -0
  434. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  435. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  436. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  437. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  438. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  439. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  440. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  441. package/lib/test/gc/garbageCollection.spec.js +1464 -0
  442. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  443. package/lib/test/gc/gcConfigs.spec.js +689 -0
  444. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  445. package/lib/test/gc/gcHelpers.spec.js +110 -0
  446. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  447. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  448. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  449. package/lib/test/gc/gcStats.spec.js +390 -0
  450. package/lib/test/gc/gcStats.spec.js.map +1 -0
  451. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  452. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  453. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  454. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  455. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  456. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  457. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  458. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  459. package/lib/test/getPendingBlobs.spec.js +193 -0
  460. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  461. package/lib/test/hardwareStats.spec.js +93 -0
  462. package/lib/test/hardwareStats.spec.js.map +1 -0
  463. package/lib/test/index.js +6 -0
  464. package/lib/test/index.js.map +1 -0
  465. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  466. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  467. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  468. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  469. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  470. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  471. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  472. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  473. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  474. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  475. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  476. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  477. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  478. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  479. package/lib/test/pendingStateManager.spec.js +329 -0
  480. package/lib/test/pendingStateManager.spec.js.map +1 -0
  481. package/lib/test/scheduleManager.spec.js +270 -0
  482. package/lib/test/scheduleManager.spec.js.map +1 -0
  483. package/lib/test/summarizerNode.spec.js +326 -0
  484. package/lib/test/summarizerNode.spec.js.map +1 -0
  485. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  486. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  487. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  488. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  489. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  490. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  491. package/lib/test/summary/summarizer.spec.js +29 -0
  492. package/lib/test/summary/summarizer.spec.js.map +1 -0
  493. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  494. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  495. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  496. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  497. package/lib/test/summary/summaryCollection.spec.js +200 -0
  498. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  499. package/lib/test/summary/summaryManager.spec.js +430 -0
  500. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  501. package/lib/test/summary/testQuorumClients.js +34 -0
  502. package/lib/test/summary/testQuorumClients.js.map +1 -0
  503. package/lib/test/throttler.spec.js +175 -0
  504. package/lib/test/throttler.spec.js.map +1 -0
  505. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  506. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  507. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  508. package/lib/throttler.d.ts.map +1 -0
  509. package/lib/{throttler.mjs → throttler.js} +1 -1
  510. package/lib/throttler.js.map +1 -0
  511. package/package.json +101 -88
  512. package/src/batchTracker.ts +1 -1
  513. package/src/blobManager.ts +1 -15
  514. package/src/{dataStores.ts → channelCollection.ts} +620 -175
  515. package/src/connectionTelemetry.ts +42 -3
  516. package/src/containerHandleContext.ts +1 -1
  517. package/src/containerRuntime.ts +604 -415
  518. package/src/dataStore.ts +16 -15
  519. package/src/dataStoreContext.ts +376 -216
  520. package/src/dataStoreContexts.ts +2 -1
  521. package/src/deltaManagerSummarizerProxy.ts +132 -7
  522. package/src/gc/garbageCollection.ts +84 -44
  523. package/src/gc/gcConfigs.ts +17 -7
  524. package/src/gc/gcDefinitions.ts +23 -13
  525. package/src/gc/gcHelpers.ts +2 -2
  526. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  527. package/src/gc/gcSummaryStateTracker.ts +19 -7
  528. package/src/gc/gcTelemetry.ts +9 -7
  529. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  530. package/src/gc/index.ts +10 -9
  531. package/src/index.ts +28 -27
  532. package/src/messageTypes.ts +3 -3
  533. package/src/opLifecycle/README.md +2 -4
  534. package/src/opLifecycle/batchManager.ts +2 -2
  535. package/src/opLifecycle/definitions.ts +2 -2
  536. package/src/opLifecycle/index.ts +8 -8
  537. package/src/opLifecycle/opCompressor.ts +3 -3
  538. package/src/opLifecycle/opDecompressor.ts +3 -3
  539. package/src/opLifecycle/opGroupingManager.ts +3 -12
  540. package/src/opLifecycle/opSplitter.ts +3 -3
  541. package/src/opLifecycle/outbox.ts +29 -9
  542. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  543. package/src/packageVersion.ts +1 -1
  544. package/src/pendingStateManager.ts +19 -13
  545. package/src/scheduleManager.ts +4 -4
  546. package/src/summary/index.ts +13 -12
  547. package/src/summary/orderedClientElection.ts +1 -1
  548. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  549. package/src/summary/runningSummarizer.ts +52 -32
  550. package/src/summary/summarizer.ts +7 -7
  551. package/src/summary/summarizerClientElection.ts +2 -2
  552. package/src/summary/summarizerHeuristics.ts +3 -3
  553. package/src/summary/summarizerNode/index.ts +6 -3
  554. package/src/summary/summarizerNode/summarizerNode.ts +50 -5
  555. package/src/summary/summarizerNode/summarizerNodeUtils.ts +14 -1
  556. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -11
  557. package/src/summary/summarizerTypes.ts +11 -23
  558. package/src/summary/summaryFormat.ts +16 -2
  559. package/src/summary/summaryGenerator.ts +16 -4
  560. package/src/summary/summaryManager.ts +6 -7
  561. package/tsconfig.cjs.json +7 -0
  562. package/tsconfig.json +2 -5
  563. package/dist/dataStores.d.ts +0 -151
  564. package/dist/dataStores.d.ts.map +0 -1
  565. package/dist/dataStores.js.map +0 -1
  566. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  567. package/dist/deltaManagerProxyBase.js +0 -77
  568. package/dist/deltaManagerProxyBase.js.map +0 -1
  569. package/lib/batchTracker.d.mts.map +0 -1
  570. package/lib/batchTracker.mjs.map +0 -1
  571. package/lib/blobManager.d.mts.map +0 -1
  572. package/lib/blobManager.mjs.map +0 -1
  573. package/lib/connectionTelemetry.d.mts.map +0 -1
  574. package/lib/connectionTelemetry.mjs.map +0 -1
  575. package/lib/containerHandleContext.d.mts.map +0 -1
  576. package/lib/containerHandleContext.mjs.map +0 -1
  577. package/lib/containerRuntime.d.mts.map +0 -1
  578. package/lib/containerRuntime.mjs.map +0 -1
  579. package/lib/dataStore.d.mts.map +0 -1
  580. package/lib/dataStore.mjs.map +0 -1
  581. package/lib/dataStoreContext.d.mts.map +0 -1
  582. package/lib/dataStoreContext.mjs.map +0 -1
  583. package/lib/dataStoreContexts.d.mts.map +0 -1
  584. package/lib/dataStoreContexts.mjs.map +0 -1
  585. package/lib/dataStoreRegistry.d.mts.map +0 -1
  586. package/lib/dataStoreRegistry.mjs.map +0 -1
  587. package/lib/dataStores.d.mts +0 -151
  588. package/lib/dataStores.d.mts.map +0 -1
  589. package/lib/dataStores.mjs.map +0 -1
  590. package/lib/deltaManagerProxyBase.d.mts +0 -35
  591. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  592. package/lib/deltaManagerProxyBase.mjs +0 -73
  593. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  594. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  595. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  596. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  597. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  598. package/lib/deltaScheduler.d.mts.map +0 -1
  599. package/lib/deltaScheduler.mjs.map +0 -1
  600. package/lib/error.d.mts.map +0 -1
  601. package/lib/error.mjs.map +0 -1
  602. package/lib/gc/garbageCollection.d.mts.map +0 -1
  603. package/lib/gc/garbageCollection.mjs.map +0 -1
  604. package/lib/gc/gcConfigs.d.mts.map +0 -1
  605. package/lib/gc/gcConfigs.mjs.map +0 -1
  606. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  607. package/lib/gc/gcDefinitions.mjs.map +0 -1
  608. package/lib/gc/gcHelpers.mjs.map +0 -1
  609. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  610. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  611. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  612. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  613. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  614. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  615. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  616. package/lib/gc/gcTelemetry.mjs.map +0 -1
  617. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  618. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  619. package/lib/gc/index.d.mts +0 -13
  620. package/lib/gc/index.d.mts.map +0 -1
  621. package/lib/gc/index.mjs.map +0 -1
  622. package/lib/index.d.mts.map +0 -1
  623. package/lib/index.mjs +0 -25
  624. package/lib/index.mjs.map +0 -1
  625. package/lib/messageTypes.d.mts.map +0 -1
  626. package/lib/messageTypes.mjs.map +0 -1
  627. package/lib/metadata.d.mts.map +0 -1
  628. package/lib/metadata.mjs.map +0 -1
  629. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  630. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  631. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  632. package/lib/opLifecycle/definitions.mjs.map +0 -1
  633. package/lib/opLifecycle/index.d.mts +0 -13
  634. package/lib/opLifecycle/index.d.mts.map +0 -1
  635. package/lib/opLifecycle/index.mjs +0 -12
  636. package/lib/opLifecycle/index.mjs.map +0 -1
  637. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  638. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  639. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  640. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  641. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  642. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  643. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  644. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  645. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  646. package/lib/opLifecycle/outbox.mjs.map +0 -1
  647. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  648. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  649. package/lib/opProperties.d.mts.map +0 -1
  650. package/lib/opProperties.mjs.map +0 -1
  651. package/lib/packageVersion.d.mts.map +0 -1
  652. package/lib/packageVersion.mjs.map +0 -1
  653. package/lib/pendingStateManager.d.mts.map +0 -1
  654. package/lib/pendingStateManager.mjs.map +0 -1
  655. package/lib/scheduleManager.d.mts.map +0 -1
  656. package/lib/scheduleManager.mjs.map +0 -1
  657. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  658. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  659. package/lib/summary/index.d.mts.map +0 -1
  660. package/lib/summary/index.mjs.map +0 -1
  661. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  662. package/lib/summary/orderedClientElection.mjs.map +0 -1
  663. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  664. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  665. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  666. package/lib/summary/runningSummarizer.mjs.map +0 -1
  667. package/lib/summary/summarizer.d.mts.map +0 -1
  668. package/lib/summary/summarizer.mjs.map +0 -1
  669. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  670. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  671. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  672. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  673. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  674. package/lib/summary/summarizerNode/index.mjs +0 -7
  675. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  678. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  679. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  680. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  681. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  682. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  683. package/lib/summary/summarizerTypes.mjs.map +0 -1
  684. package/lib/summary/summaryCollection.d.mts.map +0 -1
  685. package/lib/summary/summaryCollection.mjs.map +0 -1
  686. package/lib/summary/summaryFormat.d.mts.map +0 -1
  687. package/lib/summary/summaryFormat.mjs.map +0 -1
  688. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  689. package/lib/summary/summaryGenerator.mjs.map +0 -1
  690. package/lib/summary/summaryManager.d.mts.map +0 -1
  691. package/lib/summary/summaryManager.mjs.map +0 -1
  692. package/lib/throttler.d.mts.map +0 -1
  693. package/lib/throttler.mjs.map +0 -1
  694. package/src/deltaManagerProxyBase.ts +0 -111
@@ -4,34 +4,153 @@
4
4
  */
5
5
  import { FluidObjectHandle } from "@fluidframework/datastore";
6
6
  import { channelsTreeName, CreateSummarizerNodeSource, } from "@fluidframework/runtime-definitions";
7
- import { convertSnapshotTreeToSummaryTree, convertToSummaryTree, create404Response, createResponseError, GCDataBuilder, isSerializedHandle, responseToException, SummaryTreeBuilder, unpackChildNodesUsedRoutes, } from "@fluidframework/runtime-utils";
8
- import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, } from "@fluidframework/telemetry-utils";
7
+ import { convertSnapshotTreeToSummaryTree, convertSummaryTreeToITree, create404Response, createResponseError, GCDataBuilder, isSerializedHandle, processAttachMessageGCData, responseToException, SummaryTreeBuilder, unpackChildNodesUsedRoutes, RequestParser, encodeCompactIdToString, } from "@fluidframework/runtime-utils";
8
+ import { createChildMonitoringContext, DataCorruptionError, DataProcessingError, extractSafePropertiesFromMessage, LoggingError, tagCodeArtifacts, createChildLogger, } from "@fluidframework/telemetry-utils";
9
9
  import { AttachState } from "@fluidframework/container-definitions";
10
10
  import { buildSnapshotTree } from "@fluidframework/driver-utils";
11
- import { assert, Lazy } from "@fluidframework/core-utils";
12
- import { v4 as uuid } from "uuid";
13
- import { DataStoreContexts } from "./dataStoreContexts.mjs";
14
- import { defaultRuntimeHeaderData } from "./containerRuntime.mjs";
15
- import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext.mjs";
16
- import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.mjs";
17
- import { isDataStoreAliasMessage } from "./dataStore.mjs";
18
- import { GCNodeType, detectOutboundRoutesViaDDSKey, disableDatastoreSweepKey } from "./gc/index.mjs";
19
- import { nonDataStorePaths, rootHasIsolatedChannels } from "./summary/index.mjs";
11
+ import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
12
+ import { DataStoreContexts } from "./dataStoreContexts.js";
13
+ import { defaultRuntimeHeaderData } from "./containerRuntime.js";
14
+ import { RemoteFluidDataStoreContext, LocalFluidDataStoreContext, createAttributesBlob, LocalDetachedFluidDataStoreContext, } from "./dataStoreContext.js";
15
+ import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
16
+ import { channelToDataStore, isDataStoreAliasMessage, } from "./dataStore.js";
17
+ import { GCNodeType, detectOutboundRoutesViaDDSKey, trimLeadingAndTrailingSlashes, } from "./gc/index.js";
18
+ import { nonDataStorePaths, rootHasIsolatedChannels, } from "./summary/index.js";
19
+ import { ContainerMessageType } from "./messageTypes.js";
20
+ import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
21
+ /**
22
+ * Accepted header keys for requests coming to the runtime.
23
+ * @internal
24
+ */
25
+ export var RuntimeHeaders;
26
+ (function (RuntimeHeaders) {
27
+ /** True to wait for a data store to be created and loaded before returning it. */
28
+ RuntimeHeaders["wait"] = "wait";
29
+ /** True if the request is coming from an IFluidHandle. */
30
+ RuntimeHeaders["viaHandle"] = "viaHandle";
31
+ })(RuntimeHeaders || (RuntimeHeaders = {}));
32
+ /** True if a tombstoned object should be returned without erroring
33
+ * @alpha
34
+ */
35
+ export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
36
+ /**
37
+ * [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
38
+ * @internal
39
+ */
40
+ export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
41
+ /**
42
+ * Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
43
+ */
44
+ export function wrapContext(context) {
45
+ return {
46
+ get IFluidDataStoreRegistry() {
47
+ return context.IFluidDataStoreRegistry;
48
+ },
49
+ IFluidHandleContext: context.IFluidHandleContext,
50
+ options: context.options,
51
+ get clientId() {
52
+ return context.clientId;
53
+ },
54
+ get connected() {
55
+ return context.connected;
56
+ },
57
+ deltaManager: context.deltaManager,
58
+ storage: context.storage,
59
+ logger: context.logger,
60
+ get clientDetails() {
61
+ return context.clientDetails;
62
+ },
63
+ get idCompressor() {
64
+ return context.idCompressor;
65
+ },
66
+ loadingGroupId: context.loadingGroupId,
67
+ get attachState() {
68
+ return context.attachState;
69
+ },
70
+ containerRuntime: context.containerRuntime,
71
+ scope: context.scope,
72
+ gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
73
+ gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
74
+ getAbsoluteUrl: async (...args) => {
75
+ return context.getAbsoluteUrl(...args);
76
+ },
77
+ getQuorum: (...args) => {
78
+ return context.getQuorum(...args);
79
+ },
80
+ getAudience: (...args) => {
81
+ return context.getAudience(...args);
82
+ },
83
+ ensureNoDataModelChanges: (...args) => {
84
+ return context.ensureNoDataModelChanges(...args);
85
+ },
86
+ submitMessage: (...args) => {
87
+ return context.submitMessage(...args);
88
+ },
89
+ submitSignal: (...args) => {
90
+ return context.submitSignal(...args);
91
+ },
92
+ makeLocallyVisible: (...args) => {
93
+ return context.makeLocallyVisible(...args);
94
+ },
95
+ uploadBlob: async (...args) => {
96
+ return context.uploadBlob(...args);
97
+ },
98
+ addedGCOutboundReference: (...args) => {
99
+ return context.addedGCOutboundReference?.(...args);
100
+ },
101
+ getCreateChildSummarizerNodeFn: (...args) => {
102
+ return context.getCreateChildSummarizerNodeFn?.(...args);
103
+ },
104
+ deleteChildSummarizerNode: (...args) => {
105
+ return context.deleteChildSummarizerNode?.(...args);
106
+ },
107
+ setChannelDirty: (address) => {
108
+ return context.setChannelDirty(address);
109
+ },
110
+ };
111
+ }
112
+ /**
113
+ * Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
114
+ * The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
115
+ *
116
+ * @param id - the id of the channel
117
+ * @param parentContext - the {@link IFluidParentContext} to wrap
118
+ * @returns A wrapped {@link IFluidParentContext}
119
+ */
120
+ export function wrapContextForInnerChannel(id, parentContext) {
121
+ const context = wrapContext(parentContext);
122
+ context.submitMessage = (type, content, localOpMetadata) => {
123
+ const fluidDataStoreContent = {
124
+ content,
125
+ type,
126
+ };
127
+ const envelope = {
128
+ address: id,
129
+ contents: fluidDataStoreContent,
130
+ };
131
+ parentContext.submitMessage(ContainerMessageType.FluidDataStoreOp, envelope, localOpMetadata);
132
+ };
133
+ context.submitSignal = (type, contents, targetClientId) => {
134
+ const envelope = {
135
+ address: id,
136
+ contents,
137
+ };
138
+ parentContext.submitSignal(type, envelope, targetClientId);
139
+ };
140
+ return context;
141
+ }
20
142
  /**
21
143
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
22
144
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
145
+ * @internal
23
146
  */
24
- export class DataStores {
25
- constructor(baseSnapshot, runtime, submitAttachFn, getCreateChildSummarizerNodeFn, deleteChildSummarizerNodeFn, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, contexts = new DataStoreContexts(baseLogger)) {
147
+ export class ChannelCollection {
148
+ constructor(baseSnapshot, parentContext, baseLogger, gcNodeUpdated, isDataStoreDeleted, aliasMap, provideEntryPoint) {
26
149
  this.baseSnapshot = baseSnapshot;
27
- this.runtime = runtime;
28
- this.submitAttachFn = submitAttachFn;
29
- this.getCreateChildSummarizerNodeFn = getCreateChildSummarizerNodeFn;
30
- this.deleteChildSummarizerNodeFn = deleteChildSummarizerNodeFn;
150
+ this.parentContext = parentContext;
31
151
  this.gcNodeUpdated = gcNodeUpdated;
32
152
  this.isDataStoreDeleted = isDataStoreDeleted;
33
153
  this.aliasMap = aliasMap;
34
- this.contexts = contexts;
35
154
  // Stores tracked by the Domain
36
155
  this.pendingAttach = new Map();
37
156
  // 0.24 back-compat attachingBeforeSummary
@@ -41,9 +160,13 @@ export class DataStores {
41
160
  // root data stores that are added.
42
161
  this.dataStoresSinceLastGC = [];
43
162
  this.pendingAliasMap = new Map();
163
+ /** For sampling. Only log once per container */
164
+ this.shouldSendAttachLog = true;
44
165
  this.dispose = () => this.disposeOnce.value;
45
166
  this.mc = createChildMonitoringContext({ logger: baseLogger });
46
- this.containerRuntimeHandle = new FluidObjectHandle(this.runtime, "/", this.runtime.IFluidHandleContext);
167
+ this.contexts = new DataStoreContexts(baseLogger);
168
+ this.containerRuntimeHandle = new FluidObjectHandle(this.parentContext, "/", this.parentContext.IFluidHandleContext);
169
+ this.entryPoint = new FluidObjectHandle(new LazyPromise(async () => provideEntryPoint(this)), "", this.parentContext.IFluidHandleContext);
47
170
  // Extract stores stored inside the snapshot
48
171
  const fluidDataStores = new Map();
49
172
  if (baseSnapshot) {
@@ -60,17 +183,17 @@ export class DataStores {
60
183
  unreferencedDataStoreCount++;
61
184
  }
62
185
  // If we have a detached container, then create local data store contexts.
63
- if (this.runtime.attachState !== AttachState.Detached) {
186
+ if (this.parentContext.attachState !== AttachState.Detached) {
64
187
  dataStoreContext = new RemoteFluidDataStoreContext({
65
188
  id: key,
66
189
  snapshotTree: value,
67
- runtime: this.runtime,
68
- storage: this.runtime.storage,
69
- scope: this.runtime.scope,
70
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
190
+ parentContext: this.wrapContextForInnerChannel(key),
191
+ storage: this.parentContext.storage,
192
+ scope: this.parentContext.scope,
193
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
71
194
  type: CreateSummarizerNodeSource.FromSummary,
72
195
  }),
73
- groupId: value.groupId,
196
+ loadingGroupId: value.groupId,
74
197
  });
75
198
  }
76
199
  else {
@@ -81,15 +204,14 @@ export class DataStores {
81
204
  dataStoreContext = new LocalFluidDataStoreContext({
82
205
  id: key,
83
206
  pkg: undefined,
84
- runtime: this.runtime,
85
- storage: this.runtime.storage,
86
- scope: this.runtime.scope,
87
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
207
+ parentContext: this.wrapContextForInnerChannel(key),
208
+ storage: this.parentContext.storage,
209
+ scope: this.parentContext.scope,
210
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
88
211
  type: CreateSummarizerNodeSource.FromSummary,
89
212
  }),
90
213
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
91
214
  snapshotTree,
92
- isRootDataStore: undefined,
93
215
  });
94
216
  }
95
217
  this.contexts.addBoundOrRemoted(dataStoreContext);
@@ -109,13 +231,45 @@ export class DataStores {
109
231
  const pendingAliasPromise = this.pendingAliases.get(maybeAlias);
110
232
  return pendingAliasPromise ?? "Success";
111
233
  }
234
+ wrapContextForInnerChannel(id) {
235
+ return wrapContextForInnerChannel(id, this.parentContext);
236
+ }
237
+ /**
238
+ * IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
239
+ * Not clear when it would be called and what it should do.
240
+ * Currently this API is called by context only for root data stores.
241
+ */
242
+ makeVisibleAndAttachGraph() {
243
+ this.parentContext.makeLocallyVisible();
244
+ }
112
245
  processAttachMessage(message, local) {
113
246
  const attachMessage = message.contents;
114
247
  this.dataStoresSinceLastGC.push(attachMessage.id);
248
+ // We need to process the GC Data for both local and remote attach messages
249
+ const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
250
+ // nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
251
+ const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
252
+ this.parentContext.addedGCOutboundReference?.({ absolutePath: fromPath }, { absolutePath: toPath });
253
+ });
254
+ // Only log once per container to avoid noise/cost.
255
+ // Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
256
+ if (this.shouldSendAttachLog) {
257
+ this.shouldSendAttachLog = false;
258
+ this.mc.logger.sendTelemetryEvent({
259
+ eventName: "dataStoreAttachMessage_sampled",
260
+ ...tagCodeArtifacts({ id: attachMessage.id, pkg: attachMessage.type }),
261
+ details: {
262
+ local,
263
+ snapshot: !!attachMessage.snapshot,
264
+ foundGCData,
265
+ },
266
+ ...extractSafePropertiesFromMessage(message),
267
+ });
268
+ }
115
269
  // The local object has already been attached
116
270
  if (local) {
117
271
  assert(this.pendingAttach.has(attachMessage.id), 0x15e /* "Local object does not have matching attach message id" */);
118
- this.contexts.get(attachMessage.id)?.emit("attached");
272
+ this.contexts.get(attachMessage.id)?.setAttachState(AttachState.Attached);
119
273
  this.pendingAttach.delete(attachMessage.id);
120
274
  return;
121
275
  }
@@ -141,11 +295,11 @@ export class DataStores {
141
295
  const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
142
296
  id: attachMessage.id,
143
297
  snapshotTree,
144
- runtime: this.runtime,
145
- storage: new StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
146
- scope: this.runtime.scope,
147
- groupId: snapshotTree?.groupId,
148
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
298
+ parentContext: this.wrapContextForInnerChannel(attachMessage.id),
299
+ storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
300
+ scope: this.parentContext.scope,
301
+ loadingGroupId: attachMessage.snapshot?.groupId,
302
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(attachMessage.id, {
149
303
  type: CreateSummarizerNodeSource.FromAttach,
150
304
  sequenceNumber: message.sequenceNumber,
151
305
  snapshot: attachMessage.snapshot ?? {
@@ -164,40 +318,52 @@ export class DataStores {
164
318
  });
165
319
  }
166
320
  const resolve = localOpMetadata;
167
- const aliasResult = this.processAliasMessageCore(aliasMessage);
321
+ const aliasResult = this.processAliasMessageCore(aliasMessage.internalId, aliasMessage.alias);
168
322
  if (local) {
169
323
  resolve(aliasResult);
170
324
  }
171
325
  }
172
- processAliasMessageCore(aliasMessage) {
173
- if (this.alreadyProcessed(aliasMessage.alias)) {
326
+ processAliasMessageCore(internalId, alias) {
327
+ if (this.alreadyProcessed(alias)) {
174
328
  return false;
175
329
  }
176
- const context = this.contexts.get(aliasMessage.internalId);
330
+ const context = this.contexts.get(internalId);
177
331
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
178
332
  // corruption in case a deleted data store accidentally submitted a signal.
179
- if (this.checkAndLogIfDeleted(aliasMessage.internalId, context, "Changed", "processAliasMessageCore")) {
333
+ if (this.checkAndLogIfDeleted(internalId, context, "Changed", "processAliasMessageCore")) {
180
334
  return false;
181
335
  }
182
336
  if (context === undefined) {
183
337
  this.mc.logger.sendErrorEvent({
184
338
  eventName: "AliasFluidDataStoreNotFound",
185
- fluidDataStoreId: aliasMessage.internalId,
339
+ fluidDataStoreId: internalId,
186
340
  });
187
341
  return false;
188
342
  }
189
- const handle = new FluidObjectHandle(context, aliasMessage.internalId, this.runtime.IFluidHandleContext);
190
- this.runtime.addedGCOutboundReference(this.containerRuntimeHandle, handle);
191
- this.aliasMap.set(aliasMessage.alias, context.id);
343
+ const handle = new FluidObjectHandle(context, internalId, this.parentContext.IFluidHandleContext);
344
+ this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
345
+ this.aliasMap.set(alias, context.id);
192
346
  context.setInMemoryRoot();
193
347
  return true;
194
348
  }
195
349
  alreadyProcessed(id) {
196
350
  return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
197
351
  }
352
+ /** Package up the context's attach summary etc into an IAttachMessage */
353
+ generateAttachMessage(localContext) {
354
+ const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
355
+ const type = localContext.packagePath[localContext.packagePath.length - 1];
356
+ // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
357
+ const snapshot = convertSummaryTreeToITree(attachSummary.summary);
358
+ return {
359
+ id: localContext.id,
360
+ snapshot,
361
+ type,
362
+ };
363
+ }
198
364
  /**
199
- * Make the data stores locally visible in the container graph by moving the data store context from unbound to
200
- * bound list. This data store can now be reached from the root.
365
+ * Make the data store locally visible in the container graph by moving the data store context from unbound to
366
+ * bound list and submitting the attach message. This data store can now be reached from the root.
201
367
  * @param id - The id of the data store context to make visible.
202
368
  */
203
369
  makeDataStoreLocallyVisible(id) {
@@ -208,50 +374,72 @@ export class DataStores {
208
374
  * globally visible. Move it to attaching state and send an "attach" op for it.
209
375
  * If the container is detached, this data store will be part of the summary that makes the container attached.
210
376
  */
211
- if (this.runtime.attachState !== AttachState.Detached) {
212
- localContext.emit("attaching");
213
- const message = localContext.generateAttachMessage();
214
- this.pendingAttach.set(id, message);
215
- this.submitAttachFn(message);
216
- this.attachOpFiredForDataStore.add(id);
377
+ if (this.parentContext.attachState !== AttachState.Detached) {
378
+ localContext.setAttachState(AttachState.Attaching);
379
+ this.submitAttachChannelOp(localContext);
217
380
  }
218
381
  this.contexts.bind(id);
219
382
  }
220
- createDetachedDataStoreCore(pkg, isRoot, id = uuid(), groupId) {
221
- assert(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
222
- const context = new LocalDetachedFluidDataStoreContext({
223
- id,
224
- pkg,
225
- runtime: this.runtime,
226
- storage: this.runtime.storage,
227
- scope: this.runtime.scope,
228
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
229
- type: CreateSummarizerNodeSource.Local,
230
- }),
231
- makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
232
- snapshotTree: undefined,
233
- isRootDataStore: isRoot,
234
- groupId,
235
- });
236
- this.contexts.addUnbound(context);
237
- return context;
383
+ submitAttachChannelOp(localContext) {
384
+ const message = this.generateAttachMessage(localContext);
385
+ this.pendingAttach.set(localContext.id, message);
386
+ this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
387
+ this.attachOpFiredForDataStore.add(localContext.id);
388
+ }
389
+ /**
390
+ * Generate compact internal DataStore ID.
391
+ *
392
+ * A note about namespace and name collisions:
393
+ * This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
394
+ * user-provided alias names namespace.
395
+ * There are two scenarios where it could cause trouble:
396
+ * 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
397
+ * was provided by user. Such files may experience name collision with future data stores that receive a name generated
398
+ * by this function.
399
+ * 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
400
+ * that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
401
+ * ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
402
+ * user expected some other data store (that would receive alias later).
403
+ * Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
404
+ */
405
+ createDataStoreId() {
406
+ // We use three non-overlapping namespaces:
407
+ // - detached state: even numbers
408
+ // - attached state: odd numbers
409
+ // - uuids
410
+ // In first two cases we will encode result as strings in more compact form.
411
+ if (this.parentContext.attachState === AttachState.Detached) {
412
+ // container is detached, only one client observes content, no way to hit collisions with other clients.
413
+ return encodeCompactIdToString(2 * this.contexts.size);
414
+ }
415
+ const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
416
+ if (typeof id === "number") {
417
+ return encodeCompactIdToString(2 * id + 1);
418
+ }
419
+ return id;
420
+ }
421
+ createDetachedDataStore(pkg, loadingGroupId) {
422
+ return this.createContext(this.createDataStoreId(), pkg, LocalDetachedFluidDataStoreContext, undefined, // props
423
+ loadingGroupId);
424
+ }
425
+ createDataStoreContext(pkg, props, loadingGroupId) {
426
+ return this.createContext(this.createDataStoreId(), pkg, LocalFluidDataStoreContext, props, loadingGroupId);
238
427
  }
239
- _createFluidDataStoreContext(pkg, id, props, groupId) {
240
- assert(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
241
- const context = new LocalFluidDataStoreContext({
428
+ createContext(id, pkg, contextCtor, createProps, loadingGroupId) {
429
+ const context = new contextCtor({
242
430
  id,
243
431
  pkg,
244
- runtime: this.runtime,
245
- storage: this.runtime.storage,
246
- scope: this.runtime.scope,
247
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
432
+ parentContext: this.wrapContextForInnerChannel(id),
433
+ storage: this.parentContext.storage,
434
+ scope: this.parentContext.scope,
435
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
248
436
  type: CreateSummarizerNodeSource.Local,
249
437
  }),
250
438
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
251
439
  snapshotTree: undefined,
252
- isRootDataStore: false,
253
- createProps: props,
254
- groupId,
440
+ createProps,
441
+ loadingGroupId,
442
+ channelToDataStoreFn: (channel) => channelToDataStore(channel, id, this, createChildLogger({ logger: this.parentContext.logger })),
255
443
  });
256
444
  this.contexts.addUnbound(context);
257
445
  return context;
@@ -259,7 +447,20 @@ export class DataStores {
259
447
  get disposed() {
260
448
  return this.disposeOnce.evaluated;
261
449
  }
262
- resubmitDataStoreOp(envelope, localOpMetadata) {
450
+ reSubmit(type, content, localOpMetadata) {
451
+ switch (type) {
452
+ case ContainerMessageType.Attach:
453
+ case ContainerMessageType.Alias:
454
+ this.parentContext.submitMessage(type, content, localOpMetadata);
455
+ return;
456
+ case ContainerMessageType.FluidDataStoreOp:
457
+ return this.reSubmitChannelOp(type, content, localOpMetadata);
458
+ default:
459
+ assert(false, "unknown op type");
460
+ }
461
+ }
462
+ reSubmitChannelOp(type, content, localOpMetadata) {
463
+ const envelope = content;
263
464
  const context = this.contexts.get(envelope.address);
264
465
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
265
466
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -270,9 +471,12 @@ export class DataStores {
270
471
  });
271
472
  }
272
473
  assert(!!context, 0x160 /* "There should be a store context for the op" */);
273
- context.reSubmit(envelope.contents, localOpMetadata);
474
+ const innerContents = envelope.contents;
475
+ context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
274
476
  }
275
- rollbackDataStoreOp(envelope, localOpMetadata) {
477
+ rollback(type, content, localOpMetadata) {
478
+ assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
479
+ const envelope = content;
276
480
  const context = this.contexts.get(envelope.address);
277
481
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
278
482
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -283,9 +487,23 @@ export class DataStores {
283
487
  });
284
488
  }
285
489
  assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
286
- context.rollback(envelope.contents, localOpMetadata);
490
+ const innerContents = envelope.contents;
491
+ context.rollback(innerContents.type, innerContents.content, localOpMetadata);
287
492
  }
288
- async applyStashedOp(envelope) {
493
+ async applyStashedOp(content) {
494
+ const opContents = content;
495
+ switch (opContents.type) {
496
+ case ContainerMessageType.Attach:
497
+ return this.applyStashedAttachOp(opContents.contents);
498
+ case ContainerMessageType.Alias:
499
+ return;
500
+ case ContainerMessageType.FluidDataStoreOp:
501
+ return this.applyStashedChannelChannelOp(opContents.contents);
502
+ default:
503
+ assert(false, "unknon type of op");
504
+ }
505
+ }
506
+ async applyStashedChannelChannelOp(envelope) {
289
507
  const context = this.contexts.get(envelope.address);
290
508
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
291
509
  // corruption in case the data store that stashed the op is deleted.
@@ -300,26 +518,58 @@ export class DataStores {
300
518
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
301
519
  this.processAttachMessage({ contents: message }, false);
302
520
  }
303
- processFluidDataStoreOp(message, local, localMessageMetadata, addedOutboundReference) {
304
- const envelope = message.contents;
305
- const transformed = { ...message, contents: envelope.contents };
306
- const context = this.contexts.get(envelope.address);
521
+ process(message, local, localMessageMetadata, addedOutboundReference) {
522
+ switch (message.type) {
523
+ case ContainerMessageType.Attach:
524
+ this.processAttachMessage(message, local);
525
+ return;
526
+ case ContainerMessageType.Alias:
527
+ this.processAliasMessage(message, localMessageMetadata, local);
528
+ return;
529
+ case ContainerMessageType.FluidDataStoreOp: {
530
+ const envelope = message.contents;
531
+ const innerContents = envelope.contents;
532
+ const transformed = {
533
+ ...message,
534
+ type: innerContents.type,
535
+ contents: innerContents.content,
536
+ };
537
+ this.processChannelOp(envelope.address, transformed, local, localMessageMetadata);
538
+ // By default, we use the new behavior of detecting outbound routes here.
539
+ // If this setting is true, then DataStoreContext would be notifying GC instead.
540
+ if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
541
+ addedOutboundReference !== undefined) {
542
+ // Notify GC of any outbound references that were added by this op.
543
+ detectOutboundReferences(envelope.address, transformed.contents, addedOutboundReference);
544
+ }
545
+ break;
546
+ }
547
+ default:
548
+ assert(false, 0x8e9 /* unreached */);
549
+ }
550
+ }
551
+ processChannelOp(address, message, local, localMessageMetadata) {
552
+ const context = this.contexts.get(address);
307
553
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
308
554
  // corruption in case a deleted data store accidentally submitted an op.
309
- if (this.checkAndLogIfDeleted(envelope.address, context, "Changed", "processFluidDataStoreOp")) {
555
+ if (this.checkAndLogIfDeleted(address, context, "Changed", "processFluidDataStoreOp")) {
310
556
  return;
311
557
  }
312
- assert(!!context, 0x162 /* "There should be a store context for the op" */);
313
- context.process(transformed, local, localMessageMetadata);
314
- // By default, we use the new behavior of detecting outbound routes here.
315
- // If this setting is true, then DataStoreContext would be notifying GC instead.
316
- if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true) {
317
- // Notify GC of any outbound references that were added by this op.
318
- detectOutboundReferences(envelope, addedOutboundReference);
558
+ if (context === undefined) {
559
+ // Former assert 0x162
560
+ throw DataProcessingError.create("No context for op", "processFluidDataStoreOp", message, {
561
+ local,
562
+ messageDetails: JSON.stringify({
563
+ type: message.type,
564
+ contentType: typeof message.contents,
565
+ }),
566
+ ...tagCodeArtifacts({ address }),
567
+ });
319
568
  }
569
+ context.process(message, local, localMessageMetadata);
320
570
  // Notify that a GC node for the data store changed. This is used to detect if a deleted data store is
321
571
  // being used.
322
- this.gcNodeUpdated(`/${envelope.address}`, message.timestamp, context.isLoaded ? context.packagePath : undefined);
572
+ this.gcNodeUpdated(`/${address}`, "Changed", message.timestamp, context.isLoaded ? context.packagePath : undefined);
323
573
  }
324
574
  async getDataStore(id, requestHeaderData) {
325
575
  const headerData = { ...defaultRuntimeHeaderData, ...requestHeaderData };
@@ -373,7 +623,10 @@ export class DataStores {
373
623
  });
374
624
  return true;
375
625
  }
376
- processSignal(fluidDataStoreId, message, local) {
626
+ processSignal(messageArg, local) {
627
+ const envelope = messageArg.content;
628
+ const fluidDataStoreId = envelope.address;
629
+ const message = { ...messageArg, content: envelope.contents };
377
630
  const context = this.contexts.get(fluidDataStoreId);
378
631
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
379
632
  // corruption in case a deleted data store accidentally submitted a signal.
@@ -406,7 +659,7 @@ export class DataStores {
406
659
  fluidDataStoreId,
407
660
  }),
408
661
  details: JSON.stringify({
409
- runtimeConnected: this.runtime.connected,
662
+ runtimeConnected: this.parentContext.connected,
410
663
  connected,
411
664
  }),
412
665
  }, error);
@@ -414,11 +667,10 @@ export class DataStores {
414
667
  }
415
668
  }
416
669
  setAttachState(attachState) {
417
- const eventName = attachState === AttachState.Attaching ? "attaching" : "attached";
418
670
  for (const [, context] of this.contexts) {
419
671
  // Fire only for bounded stores.
420
672
  if (!this.contexts.isNotBound(context.id)) {
421
- context.emit(eventName);
673
+ context.setAttachState(attachState);
422
674
  }
423
675
  }
424
676
  }
@@ -446,7 +698,10 @@ export class DataStores {
446
698
  }));
447
699
  return summaryBuilder.getSummaryTree();
448
700
  }
449
- createSummary(telemetryContext) {
701
+ /**
702
+ * Create a summary. Used when attaching or serializing a detached container.
703
+ */
704
+ getAttachSummary(telemetryContext) {
450
705
  const builder = new SummaryTreeBuilder();
451
706
  // Attaching graph of some stores can cause other stores to get bound too.
452
707
  // So keep taking summary until no new stores get bound.
@@ -466,8 +721,8 @@ export class DataStores {
466
721
  .map(([key, value]) => {
467
722
  let dataStoreSummary;
468
723
  if (value.isLoaded) {
469
- const snapshot = value.generateAttachMessage().snapshot;
470
- dataStoreSummary = convertToSummaryTree(snapshot, true);
724
+ dataStoreSummary = value.getAttachData(
725
+ /* includeGCCData: */ false, telemetryContext).attachSummary;
471
726
  }
472
727
  else {
473
728
  // If this data store is not yet loaded, then there should be no changes in the snapshot from
@@ -491,8 +746,8 @@ export class DataStores {
491
746
  assert(context !== undefined, 0x2b6 /* Missing data store context */);
492
747
  if (await context.isRoot()) {
493
748
  // A root data store is basically a reference from the container runtime to the data store.
494
- const handle = new FluidObjectHandle(context, id, this.runtime.IFluidHandleContext);
495
- this.runtime.addedGCOutboundReference(this.containerRuntimeHandle, handle);
749
+ const handle = new FluidObjectHandle(context, id, this.parentContext.IFluidHandleContext);
750
+ this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
496
751
  }
497
752
  }
498
753
  this.dataStoresSinceLastGC = [];
@@ -551,26 +806,6 @@ export class DataStores {
551
806
  context.updateUsedRoutes(usedDataStoreRoutes.get(contextId) ?? []);
552
807
  }
553
808
  }
554
- /**
555
- * This is called to update objects whose routes are unused. The unused objects are deleted.
556
- * @param unusedRoutes - The routes that are unused in all data stores in this Container.
557
- */
558
- updateUnusedRoutes(unusedRoutes) {
559
- for (const route of unusedRoutes) {
560
- const pathParts = route.split("/");
561
- // Delete data store only if its route (/datastoreId) is in unusedRoutes. We don't want to delete a data
562
- // store based on its DDS being unused.
563
- if (pathParts.length > 2) {
564
- continue;
565
- }
566
- const dataStoreId = pathParts[1];
567
- assert(this.contexts.has(dataStoreId), 0x2d7 /* No data store with specified id */);
568
- // Delete the contexts of unused data stores.
569
- this.contexts.delete(dataStoreId);
570
- // Delete the summarizer node of the unused data stores.
571
- this.deleteChildSummarizerNodeFn(dataStoreId);
572
- }
573
- }
574
809
  /**
575
810
  * Delete data stores and its objects that are sweep ready.
576
811
  * @param sweepReadyDataStoreRoutes - The routes of data stores and its objects that are sweep ready and should
@@ -578,15 +813,12 @@ export class DataStores {
578
813
  * @returns The routes of data stores and its objects that were deleted.
579
814
  */
580
815
  deleteSweepReadyNodes(sweepReadyDataStoreRoutes) {
581
- // If sweep for data stores is not enabled, return empty list indicating nothing is deleted.
582
- if (this.mc.config.getBoolean(disableDatastoreSweepKey) === true) {
583
- return [];
584
- }
585
816
  for (const route of sweepReadyDataStoreRoutes) {
586
817
  const pathParts = route.split("/");
587
818
  const dataStoreId = pathParts[1];
588
819
  // Ignore sub-data store routes because a data store and its sub-routes are deleted together, so, we only
589
820
  // need to delete the data store.
821
+ // These routes will still be returned below as among the deleted routes
590
822
  if (pathParts.length > 2) {
591
823
  continue;
592
824
  }
@@ -608,7 +840,7 @@ export class DataStores {
608
840
  // Delete the contexts of sweep ready data stores.
609
841
  this.contexts.delete(dataStoreId);
610
842
  // Delete the summarizer node of the sweep ready data stores.
611
- this.deleteChildSummarizerNodeFn(dataStoreId);
843
+ this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
612
844
  }
613
845
  return Array.from(sweepReadyDataStoreRoutes);
614
846
  }
@@ -676,6 +908,49 @@ export class DataStores {
676
908
  }
677
909
  return GCNodeType.SubDataStore;
678
910
  }
911
+ internalId(maybeAlias) {
912
+ return this.aliases.get(maybeAlias) ?? maybeAlias;
913
+ }
914
+ async request(request) {
915
+ const requestParser = RequestParser.create(request);
916
+ const id = requestParser.pathParts[0];
917
+ // Differentiate between requesting the dataStore directly, or one of its children
918
+ const requestForChild = !requestParser.isLeaf(1);
919
+ const headerData = {};
920
+ if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
921
+ headerData.wait = request.headers[RuntimeHeaders.wait];
922
+ }
923
+ if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
924
+ headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
925
+ }
926
+ if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
927
+ headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
928
+ }
929
+ if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
930
+ headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
931
+ }
932
+ // We allow Tombstone requests for sub-DataStore objects
933
+ if (requestForChild) {
934
+ headerData.allowTombstone = true;
935
+ }
936
+ await this.waitIfPendingAlias(id);
937
+ const internalId = this.internalId(id);
938
+ const dataStoreContext = await this.getDataStore(internalId, headerData);
939
+ // Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
940
+ // the same as GC nodes id.
941
+ const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
942
+ // Get the initial snapshot details which contain the data store package path.
943
+ const details = await dataStoreContext.getInitialSnapshotDetails();
944
+ // Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
945
+ // is configured.
946
+ this.gcNodeUpdated(`/${urlWithoutQuery}`, "Loaded", undefined /* timestampMs */, details.pkg, request, headerData);
947
+ const dataStore = await dataStoreContext.realize();
948
+ const subRequest = requestParser.createSubRequest(1);
949
+ // We always expect createSubRequest to include a leading slash, but asserting here to protect against
950
+ // unintentionally modifying the url if that changes.
951
+ assert(subRequest.url.startsWith("/"), 0x126 /* "Expected createSubRequest url to include a leading slash" */);
952
+ return dataStore.request(subRequest);
953
+ }
679
954
  }
680
955
  export function getSummaryForDatastores(snapshot, metadata) {
681
956
  if (!snapshot) {
@@ -705,7 +980,7 @@ export function getSummaryForDatastores(snapshot, metadata) {
705
980
  *
706
981
  * @internal
707
982
  */
708
- export function detectOutboundReferences(envelope, addedOutboundReference) {
983
+ export function detectOutboundReferences(address, contents, addedOutboundReference) {
709
984
  // These will be built up as we traverse the envelope contents
710
985
  const outboundPaths = [];
711
986
  let ddsAddress;
@@ -726,10 +1001,32 @@ export function detectOutboundReferences(envelope, addedOutboundReference) {
726
1001
  }
727
1002
  }
728
1003
  }
729
- recursivelyFindHandles(envelope.contents);
1004
+ recursivelyFindHandles(contents);
730
1005
  // GC node paths are all absolute paths, hence the "" prefix.
731
1006
  // e.g. this will yield "/dataStoreId/ddsId"
732
- const fromPath = ["", envelope.address, ddsAddress].join("/");
1007
+ const fromPath = ["", address, ddsAddress].join("/");
733
1008
  outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
734
1009
  }
735
- //# sourceMappingURL=dataStores.mjs.map
1010
+ /** @internal */
1011
+ export class ChannelCollectionFactory {
1012
+ constructor(registryEntries,
1013
+ // ADO:7302 We need a better type here
1014
+ provideEntryPoint, ctor) {
1015
+ this.provideEntryPoint = provideEntryPoint;
1016
+ this.ctor = ctor;
1017
+ this.type = "ChannelCollectionChannel";
1018
+ this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
1019
+ }
1020
+ get IFluidDataStoreFactory() {
1021
+ return this;
1022
+ }
1023
+ async instantiateDataStore(context, _existing) {
1024
+ const runtime = this.ctor(context.baseSnapshot, context, // parentContext
1025
+ context.logger, () => { }, // gcNodeUpdated
1026
+ (_nodePath) => false, // isDataStoreDeleted
1027
+ new Map(), // aliasMap
1028
+ this.provideEntryPoint);
1029
+ return runtime;
1030
+ }
1031
+ }
1032
+ //# sourceMappingURL=channelCollection.js.map