@fluidframework/container-runtime 2.0.0-rc.1.0.4 → 2.0.0-rc.2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/{.eslintrc.js → .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 +68 -30
  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.js.map +1 -1
  13. package/dist/channelCollection.d.ts +223 -0
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +399 -83
  16. package/dist/channelCollection.js.map +1 -0
  17. package/dist/connectionTelemetry.d.ts +11 -1
  18. package/dist/connectionTelemetry.d.ts.map +1 -1
  19. package/dist/connectionTelemetry.js +42 -4
  20. package/dist/connectionTelemetry.js.map +1 -1
  21. package/dist/container-runtime-alpha.d.ts +98 -40
  22. package/dist/container-runtime-beta.d.ts +27 -9
  23. package/dist/container-runtime-public.d.ts +27 -9
  24. package/dist/container-runtime-untrimmed.d.ts +123 -40
  25. package/dist/containerHandleContext.d.ts +1 -1
  26. package/dist/containerHandleContext.d.ts.map +1 -1
  27. package/dist/containerHandleContext.js.map +1 -1
  28. package/dist/containerRuntime.d.ts +79 -55
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +541 -411
  31. package/dist/containerRuntime.js.map +1 -1
  32. package/dist/dataStore.d.ts +2 -3
  33. package/dist/dataStore.d.ts.map +1 -1
  34. package/dist/dataStore.js +12 -11
  35. package/dist/dataStore.js.map +1 -1
  36. package/dist/dataStoreContext.d.ts +71 -30
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +182 -141
  39. package/dist/dataStoreContext.js.map +1 -1
  40. package/dist/dataStoreContexts.d.ts +1 -1
  41. package/dist/dataStoreContexts.d.ts.map +1 -1
  42. package/dist/dataStoreContexts.js.map +1 -1
  43. package/dist/deltaManagerSummarizerProxy.d.ts +29 -4
  44. package/dist/deltaManagerSummarizerProxy.d.ts.map +1 -1
  45. package/dist/deltaManagerSummarizerProxy.js +91 -5
  46. package/dist/deltaManagerSummarizerProxy.js.map +1 -1
  47. package/dist/gc/garbageCollection.d.ts +22 -5
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +134 -75
  50. package/dist/gc/garbageCollection.js.map +1 -1
  51. package/dist/gc/gcConfigs.d.ts +2 -2
  52. package/dist/gc/gcConfigs.d.ts.map +1 -1
  53. package/dist/gc/gcConfigs.js +21 -21
  54. package/dist/gc/gcConfigs.js.map +1 -1
  55. package/dist/gc/gcDefinitions.d.ts +29 -6
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js +5 -1
  58. package/dist/gc/gcDefinitions.js.map +1 -1
  59. package/dist/gc/gcHelpers.d.ts +2 -2
  60. package/dist/gc/gcHelpers.d.ts.map +1 -1
  61. package/dist/gc/gcHelpers.js.map +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  64. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  65. package/dist/gc/gcSummaryStateTracker.d.ts +12 -5
  66. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  67. package/dist/gc/gcSummaryStateTracker.js +18 -6
  68. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  69. package/dist/gc/gcTelemetry.d.ts +7 -7
  70. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  71. package/dist/gc/gcTelemetry.js +20 -20
  72. package/dist/gc/gcTelemetry.js.map +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts +6 -1
  74. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  75. package/dist/gc/gcUnreferencedStateTracker.js +22 -11
  76. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  77. package/dist/gc/index.d.ts +8 -8
  78. package/dist/gc/index.d.ts.map +1 -1
  79. package/dist/gc/index.js +40 -38
  80. package/dist/gc/index.js.map +1 -1
  81. package/dist/index.d.ts +8 -20
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +28 -40
  84. package/dist/index.js.map +1 -1
  85. package/dist/messageTypes.d.ts +4 -4
  86. package/dist/messageTypes.d.ts.map +1 -1
  87. package/dist/messageTypes.js.map +1 -1
  88. package/dist/opLifecycle/batchManager.d.ts +2 -2
  89. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  90. package/dist/opLifecycle/batchManager.js.map +1 -1
  91. package/dist/opLifecycle/definitions.d.ts +2 -2
  92. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  93. package/dist/opLifecycle/definitions.js.map +1 -1
  94. package/dist/opLifecycle/index.d.ts +8 -8
  95. package/dist/opLifecycle/index.d.ts.map +1 -1
  96. package/dist/opLifecycle/index.js +18 -18
  97. package/dist/opLifecycle/index.js.map +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  99. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  100. package/dist/opLifecycle/opCompressor.js +4 -4
  101. package/dist/opLifecycle/opCompressor.js.map +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  103. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  104. package/dist/opLifecycle/opDecompressor.js +3 -3
  105. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  107. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  108. package/dist/opLifecycle/opGroupingManager.js +1 -10
  109. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  111. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  112. package/dist/opLifecycle/opSplitter.js +5 -5
  113. package/dist/opLifecycle/opSplitter.js.map +1 -1
  114. package/dist/opLifecycle/outbox.d.ts +7 -7
  115. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  116. package/dist/opLifecycle/outbox.js +20 -12
  117. package/dist/opLifecycle/outbox.js.map +1 -1
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  119. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  120. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  121. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  122. package/dist/package.json +3 -0
  123. package/dist/packageVersion.d.ts +1 -1
  124. package/dist/packageVersion.js +1 -1
  125. package/dist/packageVersion.js.map +1 -1
  126. package/dist/pendingStateManager.d.ts +2 -1
  127. package/dist/pendingStateManager.d.ts.map +1 -1
  128. package/dist/pendingStateManager.js +18 -10
  129. package/dist/pendingStateManager.js.map +1 -1
  130. package/dist/scheduleManager.d.ts +1 -2
  131. package/dist/scheduleManager.d.ts.map +1 -1
  132. package/dist/scheduleManager.js +5 -5
  133. package/dist/scheduleManager.js.map +1 -1
  134. package/dist/summary/index.d.ts +12 -12
  135. package/dist/summary/index.d.ts.map +1 -1
  136. package/dist/summary/index.js +43 -43
  137. package/dist/summary/index.js.map +1 -1
  138. package/dist/summary/orderedClientElection.js +8 -8
  139. package/dist/summary/orderedClientElection.js.map +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  142. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  143. package/dist/summary/runningSummarizer.d.ts +11 -10
  144. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  145. package/dist/summary/runningSummarizer.js +114 -81
  146. package/dist/summary/runningSummarizer.js.map +1 -1
  147. package/dist/summary/summarizer.d.ts +4 -4
  148. package/dist/summary/summarizer.d.ts.map +1 -1
  149. package/dist/summary/summarizer.js +6 -6
  150. package/dist/summary/summarizer.js.map +1 -1
  151. package/dist/summary/summarizerClientElection.d.ts +2 -2
  152. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  153. package/dist/summary/summarizerClientElection.js.map +1 -1
  154. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  155. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  156. package/dist/summary/summarizerHeuristics.js.map +1 -1
  157. package/dist/summary/summarizerNode/index.d.ts +3 -3
  158. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  159. package/dist/summary/summarizerNode/index.js +4 -4
  160. package/dist/summary/summarizerNode/index.js.map +1 -1
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  162. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  163. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  164. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  168. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  172. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  173. package/dist/summary/summarizerTypes.d.ts +10 -21
  174. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  175. package/dist/summary/summarizerTypes.js.map +1 -1
  176. package/dist/summary/summaryFormat.d.ts +15 -2
  177. package/dist/summary/summaryFormat.d.ts.map +1 -1
  178. package/dist/summary/summaryFormat.js.map +1 -1
  179. package/dist/summary/summaryGenerator.d.ts +6 -5
  180. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  181. package/dist/summary/summaryGenerator.js +10 -1
  182. package/dist/summary/summaryGenerator.js.map +1 -1
  183. package/dist/summary/summaryManager.d.ts +5 -6
  184. package/dist/summary/summaryManager.d.ts.map +1 -1
  185. package/dist/summary/summaryManager.js +4 -5
  186. package/dist/summary/summaryManager.js.map +1 -1
  187. package/dist/tsdoc-metadata.json +1 -1
  188. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  189. package/lib/batchTracker.d.ts.map +1 -0
  190. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  191. package/lib/batchTracker.js.map +1 -0
  192. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  193. package/lib/blobManager.d.ts.map +1 -0
  194. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  195. package/lib/blobManager.js.map +1 -0
  196. package/lib/channelCollection.d.ts +223 -0
  197. package/lib/channelCollection.d.ts.map +1 -0
  198. package/lib/{dataStores.mjs → channelCollection.js} +384 -71
  199. package/lib/channelCollection.js.map +1 -0
  200. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  201. package/lib/connectionTelemetry.d.ts.map +1 -0
  202. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  203. package/lib/connectionTelemetry.js.map +1 -0
  204. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +98 -40
  205. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  206. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  207. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +123 -40
  208. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  209. package/lib/containerHandleContext.d.ts.map +1 -0
  210. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  211. package/lib/containerHandleContext.js.map +1 -0
  212. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +84 -56
  213. package/lib/containerRuntime.d.ts.map +1 -0
  214. package/lib/{containerRuntime.mjs → containerRuntime.js} +460 -332
  215. package/lib/containerRuntime.js.map +1 -0
  216. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  217. package/lib/dataStore.d.ts.map +1 -0
  218. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  219. package/lib/dataStore.js.map +1 -0
  220. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +72 -31
  221. package/lib/dataStoreContext.d.ts.map +1 -0
  222. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +174 -133
  223. package/lib/dataStoreContext.js.map +1 -0
  224. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  225. package/lib/dataStoreContexts.d.ts.map +1 -0
  226. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  227. package/lib/dataStoreContexts.js.map +1 -0
  228. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  229. package/lib/dataStoreRegistry.d.ts.map +1 -0
  230. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  231. package/lib/dataStoreRegistry.js.map +1 -0
  232. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  233. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  234. package/lib/deltaManagerSummarizerProxy.js +124 -0
  235. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  236. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  237. package/lib/deltaScheduler.d.ts.map +1 -0
  238. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  239. package/lib/deltaScheduler.js.map +1 -0
  240. package/lib/{error.d.mts → error.d.ts} +1 -1
  241. package/lib/error.d.ts.map +1 -0
  242. package/lib/{error.mjs → error.js} +1 -1
  243. package/lib/error.js.map +1 -0
  244. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +23 -6
  245. package/lib/gc/garbageCollection.d.ts.map +1 -0
  246. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +103 -44
  247. package/lib/gc/garbageCollection.js.map +1 -0
  248. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  249. package/lib/gc/gcConfigs.d.ts.map +1 -0
  250. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  251. package/lib/gc/gcConfigs.js.map +1 -0
  252. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +30 -7
  253. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  254. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +5 -1
  255. package/lib/gc/gcDefinitions.js.map +1 -0
  256. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  257. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  258. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  259. package/lib/gc/gcHelpers.js.map +1 -0
  260. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  261. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  262. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  263. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  264. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  265. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  266. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  267. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  268. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +13 -6
  269. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  270. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +17 -5
  271. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  272. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +8 -8
  273. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  274. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +5 -5
  275. package/lib/gc/gcTelemetry.js.map +1 -0
  276. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +7 -2
  277. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  278. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +12 -2
  279. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  280. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  281. package/lib/gc/index.d.ts.map +1 -0
  282. package/lib/gc/{index.mjs → index.js} +8 -8
  283. package/lib/gc/index.js.map +1 -0
  284. package/lib/{index.d.mts → index.d.ts} +9 -21
  285. package/lib/index.d.ts.map +1 -0
  286. package/lib/index.js +12 -0
  287. package/lib/index.js.map +1 -0
  288. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  289. package/lib/messageTypes.d.ts.map +1 -0
  290. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  291. package/lib/messageTypes.js.map +1 -0
  292. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  293. package/lib/metadata.d.ts.map +1 -0
  294. package/lib/{metadata.mjs → metadata.js} +1 -1
  295. package/lib/metadata.js.map +1 -0
  296. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  297. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  298. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  299. package/lib/opLifecycle/batchManager.js.map +1 -0
  300. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  301. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  302. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  303. package/lib/opLifecycle/definitions.js.map +1 -0
  304. package/lib/opLifecycle/index.d.ts +13 -0
  305. package/lib/opLifecycle/index.d.ts.map +1 -0
  306. package/lib/opLifecycle/index.js +12 -0
  307. package/lib/opLifecycle/index.js.map +1 -0
  308. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  309. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  310. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  311. package/lib/opLifecycle/opCompressor.js.map +1 -0
  312. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  313. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  314. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  315. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  316. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  317. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  318. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  319. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  320. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  321. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  322. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  323. package/lib/opLifecycle/opSplitter.js.map +1 -0
  324. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  325. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  326. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  327. package/lib/opLifecycle/outbox.js.map +1 -0
  328. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  329. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  330. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  331. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  332. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  333. package/lib/opProperties.d.ts.map +1 -0
  334. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  335. package/lib/opProperties.js.map +1 -0
  336. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  337. package/lib/packageVersion.d.ts.map +1 -0
  338. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  339. package/lib/packageVersion.js.map +1 -0
  340. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  341. package/lib/pendingStateManager.d.ts.map +1 -0
  342. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  343. package/lib/pendingStateManager.js.map +1 -0
  344. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  345. package/lib/scheduleManager.d.ts.map +1 -0
  346. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  347. package/lib/scheduleManager.js.map +1 -0
  348. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  349. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  350. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  351. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  352. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  353. package/lib/summary/index.d.ts.map +1 -0
  354. package/lib/summary/{index.mjs → index.js} +12 -12
  355. package/lib/summary/index.js.map +1 -0
  356. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  357. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  358. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  359. package/lib/summary/orderedClientElection.js.map +1 -0
  360. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  361. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  362. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  363. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  364. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  365. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  366. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  367. package/lib/summary/runningSummarizer.js.map +1 -0
  368. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  369. package/lib/summary/summarizer.d.ts.map +1 -0
  370. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  371. package/lib/summary/summarizer.js.map +1 -0
  372. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  373. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  374. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  375. package/lib/summary/summarizerClientElection.js.map +1 -0
  376. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  377. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  378. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  379. package/lib/summary/summarizerHeuristics.js.map +1 -0
  380. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  381. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  382. package/lib/summary/summarizerNode/index.js +7 -0
  383. package/lib/summary/summarizerNode/index.js.map +1 -0
  384. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  385. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  386. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  387. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  388. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  389. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  390. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  391. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  392. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  393. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  394. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  395. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  396. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  397. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  398. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  399. package/lib/summary/summarizerTypes.js.map +1 -0
  400. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  401. package/lib/summary/summaryCollection.d.ts.map +1 -0
  402. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  403. package/lib/summary/summaryCollection.js.map +1 -0
  404. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  405. package/lib/summary/summaryFormat.d.ts.map +1 -0
  406. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  407. package/lib/summary/summaryFormat.js.map +1 -0
  408. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  409. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  410. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  411. package/lib/summary/summaryGenerator.js.map +1 -0
  412. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  413. package/lib/summary/summaryManager.d.ts.map +1 -0
  414. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  415. package/lib/summary/summaryManager.js.map +1 -0
  416. package/lib/test/batchTracker.spec.js +88 -0
  417. package/lib/test/batchTracker.spec.js.map +1 -0
  418. package/lib/test/blobManager.spec.js +835 -0
  419. package/lib/test/blobManager.spec.js.map +1 -0
  420. package/lib/test/channelCollection.spec.js +141 -0
  421. package/lib/test/channelCollection.spec.js.map +1 -0
  422. package/lib/test/containerRuntime.spec.js +1748 -0
  423. package/lib/test/containerRuntime.spec.js.map +1 -0
  424. package/lib/test/dataStoreContext.spec.js +801 -0
  425. package/lib/test/dataStoreContext.spec.js.map +1 -0
  426. package/lib/test/dataStoreCreation.spec.js +312 -0
  427. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  428. package/lib/test/dataStoreRegistry.spec.js +26 -0
  429. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  430. package/lib/test/fuzz/fuzzUtils.js +66 -0
  431. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  433. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  435. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  437. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  438. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  439. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  440. package/lib/test/gc/gcConfigs.spec.js +690 -0
  441. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  442. package/lib/test/gc/gcHelpers.spec.js +110 -0
  443. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  445. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  446. package/lib/test/gc/gcStats.spec.js +391 -0
  447. package/lib/test/gc/gcStats.spec.js.map +1 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  449. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  450. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  451. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  453. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  455. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  456. package/lib/test/getPendingBlobs.spec.js +193 -0
  457. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  458. package/lib/test/hardwareStats.spec.js +93 -0
  459. package/lib/test/hardwareStats.spec.js.map +1 -0
  460. package/lib/test/index.js +6 -0
  461. package/lib/test/index.js.map +1 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  463. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  465. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  467. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  469. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  471. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  472. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  473. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  475. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  476. package/lib/test/pendingStateManager.spec.js +329 -0
  477. package/lib/test/pendingStateManager.spec.js.map +1 -0
  478. package/lib/test/scheduleManager.spec.js +270 -0
  479. package/lib/test/scheduleManager.spec.js.map +1 -0
  480. package/lib/test/summarizerNode.spec.js +326 -0
  481. package/lib/test/summarizerNode.spec.js.map +1 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  483. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  484. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  485. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  486. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  487. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  488. package/lib/test/summary/summarizer.spec.js +29 -0
  489. package/lib/test/summary/summarizer.spec.js.map +1 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  491. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  493. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  494. package/lib/test/summary/summaryCollection.spec.js +200 -0
  495. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  496. package/lib/test/summary/summaryManager.spec.js +430 -0
  497. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  498. package/lib/test/summary/testQuorumClients.js +34 -0
  499. package/lib/test/summary/testQuorumClients.js.map +1 -0
  500. package/lib/test/throttler.spec.js +175 -0
  501. package/lib/test/throttler.spec.js.map +1 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  503. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  504. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  505. package/lib/throttler.d.ts.map +1 -0
  506. package/lib/{throttler.mjs → throttler.js} +1 -1
  507. package/lib/throttler.js.map +1 -0
  508. package/package.json +99 -88
  509. package/src/batchTracker.ts +1 -1
  510. package/src/blobManager.ts +1 -1
  511. package/src/{dataStores.ts → channelCollection.ts} +520 -84
  512. package/src/connectionTelemetry.ts +42 -3
  513. package/src/containerHandleContext.ts +1 -1
  514. package/src/containerRuntime.ts +661 -464
  515. package/src/dataStore.ts +13 -15
  516. package/src/dataStoreContext.ts +257 -184
  517. package/src/dataStoreContexts.ts +1 -1
  518. package/src/deltaManagerSummarizerProxy.ts +132 -7
  519. package/src/gc/garbageCollection.ts +121 -46
  520. package/src/gc/gcConfigs.ts +3 -3
  521. package/src/gc/gcDefinitions.ts +30 -7
  522. package/src/gc/gcHelpers.ts +2 -2
  523. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  524. package/src/gc/gcSummaryStateTracker.ts +19 -7
  525. package/src/gc/gcTelemetry.ts +10 -9
  526. package/src/gc/gcUnreferencedStateTracker.ts +12 -1
  527. package/src/gc/index.ts +10 -8
  528. package/src/index.ts +16 -27
  529. package/src/messageTypes.ts +4 -4
  530. package/src/opLifecycle/README.md +2 -4
  531. package/src/opLifecycle/batchManager.ts +2 -2
  532. package/src/opLifecycle/definitions.ts +2 -2
  533. package/src/opLifecycle/index.ts +8 -8
  534. package/src/opLifecycle/opCompressor.ts +3 -3
  535. package/src/opLifecycle/opDecompressor.ts +3 -3
  536. package/src/opLifecycle/opGroupingManager.ts +3 -12
  537. package/src/opLifecycle/opSplitter.ts +3 -3
  538. package/src/opLifecycle/outbox.ts +29 -9
  539. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  540. package/src/packageVersion.ts +1 -1
  541. package/src/pendingStateManager.ts +19 -13
  542. package/src/scheduleManager.ts +4 -4
  543. package/src/summary/index.ts +13 -12
  544. package/src/summary/orderedClientElection.ts +1 -1
  545. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  546. package/src/summary/runningSummarizer.ts +141 -93
  547. package/src/summary/summarizer.ts +7 -7
  548. package/src/summary/summarizerClientElection.ts +2 -2
  549. package/src/summary/summarizerHeuristics.ts +3 -3
  550. package/src/summary/summarizerNode/index.ts +6 -3
  551. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  552. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  553. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  554. package/src/summary/summarizerTypes.ts +12 -24
  555. package/src/summary/summaryFormat.ts +16 -2
  556. package/src/summary/summaryGenerator.ts +16 -4
  557. package/src/summary/summaryManager.ts +6 -7
  558. package/tsconfig.cjs.json +7 -0
  559. package/tsconfig.json +2 -5
  560. package/dist/dataStores.d.ts +0 -149
  561. package/dist/dataStores.d.ts.map +0 -1
  562. package/dist/dataStores.js.map +0 -1
  563. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  564. package/dist/deltaManagerProxyBase.js +0 -77
  565. package/dist/deltaManagerProxyBase.js.map +0 -1
  566. package/lib/batchTracker.d.mts.map +0 -1
  567. package/lib/batchTracker.mjs.map +0 -1
  568. package/lib/blobManager.d.mts.map +0 -1
  569. package/lib/blobManager.mjs.map +0 -1
  570. package/lib/connectionTelemetry.d.mts.map +0 -1
  571. package/lib/connectionTelemetry.mjs.map +0 -1
  572. package/lib/containerHandleContext.d.mts.map +0 -1
  573. package/lib/containerHandleContext.mjs.map +0 -1
  574. package/lib/containerRuntime.d.mts.map +0 -1
  575. package/lib/containerRuntime.mjs.map +0 -1
  576. package/lib/dataStore.d.mts.map +0 -1
  577. package/lib/dataStore.mjs.map +0 -1
  578. package/lib/dataStoreContext.d.mts.map +0 -1
  579. package/lib/dataStoreContext.mjs.map +0 -1
  580. package/lib/dataStoreContexts.d.mts.map +0 -1
  581. package/lib/dataStoreContexts.mjs.map +0 -1
  582. package/lib/dataStoreRegistry.d.mts.map +0 -1
  583. package/lib/dataStoreRegistry.mjs.map +0 -1
  584. package/lib/dataStores.d.mts +0 -149
  585. package/lib/dataStores.d.mts.map +0 -1
  586. package/lib/dataStores.mjs.map +0 -1
  587. package/lib/deltaManagerProxyBase.d.mts +0 -35
  588. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  589. package/lib/deltaManagerProxyBase.mjs +0 -73
  590. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  591. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  592. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  593. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  594. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  595. package/lib/deltaScheduler.d.mts.map +0 -1
  596. package/lib/deltaScheduler.mjs.map +0 -1
  597. package/lib/error.d.mts.map +0 -1
  598. package/lib/error.mjs.map +0 -1
  599. package/lib/gc/garbageCollection.d.mts.map +0 -1
  600. package/lib/gc/garbageCollection.mjs.map +0 -1
  601. package/lib/gc/gcConfigs.d.mts.map +0 -1
  602. package/lib/gc/gcConfigs.mjs.map +0 -1
  603. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  604. package/lib/gc/gcDefinitions.mjs.map +0 -1
  605. package/lib/gc/gcHelpers.mjs.map +0 -1
  606. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  607. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  608. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  609. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  610. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  611. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  612. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  613. package/lib/gc/gcTelemetry.mjs.map +0 -1
  614. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  615. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  616. package/lib/gc/index.d.mts.map +0 -1
  617. package/lib/gc/index.mjs.map +0 -1
  618. package/lib/index.d.mts.map +0 -1
  619. package/lib/index.mjs +0 -24
  620. package/lib/index.mjs.map +0 -1
  621. package/lib/messageTypes.d.mts.map +0 -1
  622. package/lib/messageTypes.mjs.map +0 -1
  623. package/lib/metadata.d.mts.map +0 -1
  624. package/lib/metadata.mjs.map +0 -1
  625. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  626. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  627. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  628. package/lib/opLifecycle/definitions.mjs.map +0 -1
  629. package/lib/opLifecycle/index.d.mts +0 -13
  630. package/lib/opLifecycle/index.d.mts.map +0 -1
  631. package/lib/opLifecycle/index.mjs +0 -12
  632. package/lib/opLifecycle/index.mjs.map +0 -1
  633. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  634. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  635. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  636. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  637. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  638. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  639. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  640. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  641. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  642. package/lib/opLifecycle/outbox.mjs.map +0 -1
  643. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  644. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  645. package/lib/opProperties.d.mts.map +0 -1
  646. package/lib/opProperties.mjs.map +0 -1
  647. package/lib/packageVersion.d.mts.map +0 -1
  648. package/lib/packageVersion.mjs.map +0 -1
  649. package/lib/pendingStateManager.d.mts.map +0 -1
  650. package/lib/pendingStateManager.mjs.map +0 -1
  651. package/lib/scheduleManager.d.mts.map +0 -1
  652. package/lib/scheduleManager.mjs.map +0 -1
  653. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  654. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  655. package/lib/summary/index.d.mts.map +0 -1
  656. package/lib/summary/index.mjs.map +0 -1
  657. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  658. package/lib/summary/orderedClientElection.mjs.map +0 -1
  659. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  660. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  661. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  662. package/lib/summary/runningSummarizer.mjs.map +0 -1
  663. package/lib/summary/summarizer.d.mts.map +0 -1
  664. package/lib/summary/summarizer.mjs.map +0 -1
  665. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  666. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  667. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  668. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/index.mjs +0 -7
  671. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  675. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  676. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  677. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  678. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  679. package/lib/summary/summarizerTypes.mjs.map +0 -1
  680. package/lib/summary/summaryCollection.d.mts.map +0 -1
  681. package/lib/summary/summaryCollection.mjs.map +0 -1
  682. package/lib/summary/summaryFormat.d.mts.map +0 -1
  683. package/lib/summary/summaryFormat.mjs.map +0 -1
  684. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  685. package/lib/summary/summaryGenerator.mjs.map +0 -1
  686. package/lib/summary/summaryManager.d.mts.map +0 -1
  687. package/lib/summary/summaryManager.mjs.map +0 -1
  688. package/lib/throttler.d.mts.map +0 -1
  689. package/lib/throttler.mjs.map +0 -1
  690. package/src/deltaManagerProxyBase.ts +0 -111
@@ -8,35 +8,44 @@ import {
8
8
  IDisposable,
9
9
  IFluidHandle,
10
10
  IRequest,
11
+ FluidObject,
12
+ IResponse,
11
13
  } from "@fluidframework/core-interfaces";
12
14
  import { FluidObjectHandle } from "@fluidframework/datastore";
13
15
  import { ISequencedDocumentMessage, ISnapshotTree } from "@fluidframework/protocol-definitions";
14
16
  import {
15
17
  AliasResult,
16
18
  channelsTreeName,
17
- CreateChildSummarizerNodeFn,
18
- CreateChildSummarizerNodeParam,
19
19
  CreateSummarizerNodeSource,
20
20
  IAttachMessage,
21
21
  IEnvelope,
22
+ IFluidDataStoreChannel,
22
23
  IFluidDataStoreContextDetached,
23
24
  IGarbageCollectionData,
24
25
  IInboundSignalMessage,
26
+ IFluidParentContext,
25
27
  InboundAttachMessage,
26
28
  ISummarizeResult,
27
29
  ISummaryTreeWithStats,
28
30
  ITelemetryContext,
31
+ IFluidDataStoreFactory,
32
+ IFluidDataStoreContext,
33
+ NamedFluidDataStoreRegistryEntries,
34
+ IFluidDataStoreRegistry,
29
35
  } from "@fluidframework/runtime-definitions";
30
36
  import {
31
37
  convertSnapshotTreeToSummaryTree,
32
- convertToSummaryTree,
38
+ convertSummaryTreeToITree,
33
39
  create404Response,
34
40
  createResponseError,
35
41
  GCDataBuilder,
36
42
  isSerializedHandle,
43
+ processAttachMessageGCData,
37
44
  responseToException,
38
45
  SummaryTreeBuilder,
39
46
  unpackChildNodesUsedRoutes,
47
+ RequestParser,
48
+ encodeCompactIdToString,
40
49
  } from "@fluidframework/runtime-utils";
41
50
  import {
42
51
  createChildMonitoringContext,
@@ -46,32 +55,183 @@ import {
46
55
  LoggingError,
47
56
  MonitoringContext,
48
57
  tagCodeArtifacts,
58
+ createChildLogger,
49
59
  } from "@fluidframework/telemetry-utils";
50
60
  import { AttachState } from "@fluidframework/container-definitions";
51
61
  import { buildSnapshotTree } from "@fluidframework/driver-utils";
52
- import { assert, Lazy } from "@fluidframework/core-utils";
53
- import { v4 as uuid } from "uuid";
54
- import { DataStoreContexts } from "./dataStoreContexts";
55
- import { ContainerRuntime, defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime";
62
+ import { assert, Lazy, LazyPromise } from "@fluidframework/core-utils";
63
+ import { DataStoreContexts } from "./dataStoreContexts.js";
64
+ import { defaultRuntimeHeaderData, RuntimeHeaderData } from "./containerRuntime.js";
56
65
  import {
57
66
  FluidDataStoreContext,
58
67
  RemoteFluidDataStoreContext,
59
68
  LocalFluidDataStoreContext,
60
69
  createAttributesBlob,
61
70
  LocalDetachedFluidDataStoreContext,
62
- } from "./dataStoreContext";
63
- import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
64
- import { GCNodeType, detectOutboundRoutesViaDDSKey } from "./gc";
65
- import { IDataStoreAliasMessage, isDataStoreAliasMessage } from "./dataStore";
66
- import { IContainerRuntimeMetadata, nonDataStorePaths, rootHasIsolatedChannels } from "./summary";
71
+ } from "./dataStoreContext.js";
72
+ import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs.js";
73
+ import {
74
+ IDataStoreAliasMessage,
75
+ channelToDataStore,
76
+ isDataStoreAliasMessage,
77
+ } from "./dataStore.js";
78
+ import {
79
+ GCNodeType,
80
+ detectOutboundRoutesViaDDSKey,
81
+ trimLeadingAndTrailingSlashes,
82
+ } from "./gc/index.js";
83
+ import {
84
+ IContainerRuntimeMetadata,
85
+ nonDataStorePaths,
86
+ rootHasIsolatedChannels,
87
+ } from "./summary/index.js";
88
+ import { ContainerMessageType, LocalContainerRuntimeMessage } from "./messageTypes.js";
89
+ import { FluidDataStoreRegistry } from "./dataStoreRegistry.js";
90
+
91
+ /**
92
+ * Accepted header keys for requests coming to the runtime.
93
+ * @internal
94
+ */
95
+ export enum RuntimeHeaders {
96
+ /** True to wait for a data store to be created and loaded before returning it. */
97
+ wait = "wait",
98
+ /** True if the request is coming from an IFluidHandle. */
99
+ viaHandle = "viaHandle",
100
+ }
101
+
102
+ /** True if a tombstoned object should be returned without erroring
103
+ * @alpha
104
+ */
105
+ export const AllowTombstoneRequestHeaderKey = "allowTombstone"; // Belongs in the enum above, but avoiding the breaking change
106
+ /**
107
+ * [IRRELEVANT IF throwOnInactiveLoad OPTION NOT SET] True if an inactive object should be returned without erroring
108
+ * @internal
109
+ */
110
+ export const AllowInactiveRequestHeaderKey = "allowInactive"; // Belongs in the enum above, but avoiding the breaking change
67
111
 
68
112
  type PendingAliasResolve = (success: boolean) => void;
69
113
 
114
+ interface FluidDataStoreMessage {
115
+ content: any;
116
+ type: string;
117
+ }
118
+
119
+ /**
120
+ * Creates a shallow wrapper of {@link IFluidParentContext}. The wrapper can then have its methods overwritten as needed
121
+ */
122
+ export function wrapContext(context: IFluidParentContext): IFluidParentContext {
123
+ return {
124
+ get IFluidDataStoreRegistry() {
125
+ return context.IFluidDataStoreRegistry;
126
+ },
127
+ IFluidHandleContext: context.IFluidHandleContext,
128
+ options: context.options,
129
+ get clientId() {
130
+ return context.clientId;
131
+ },
132
+ get connected() {
133
+ return context.connected;
134
+ },
135
+ deltaManager: context.deltaManager,
136
+ storage: context.storage,
137
+ logger: context.logger,
138
+ get clientDetails() {
139
+ return context.clientDetails;
140
+ },
141
+ get idCompressor() {
142
+ return context.idCompressor;
143
+ },
144
+ loadingGroupId: context.loadingGroupId,
145
+ get attachState() {
146
+ return context.attachState;
147
+ },
148
+ containerRuntime: context.containerRuntime,
149
+ scope: context.scope,
150
+ gcThrowOnTombstoneUsage: context.gcThrowOnTombstoneUsage,
151
+ gcTombstoneEnforcementAllowed: context.gcTombstoneEnforcementAllowed,
152
+ getAbsoluteUrl: async (...args) => {
153
+ return context.getAbsoluteUrl(...args);
154
+ },
155
+ getQuorum: (...args) => {
156
+ return context.getQuorum(...args);
157
+ },
158
+ getAudience: (...args) => {
159
+ return context.getAudience(...args);
160
+ },
161
+ ensureNoDataModelChanges: (...args) => {
162
+ return context.ensureNoDataModelChanges(...args);
163
+ },
164
+ submitMessage: (...args) => {
165
+ return context.submitMessage(...args);
166
+ },
167
+ submitSignal: (...args) => {
168
+ return context.submitSignal(...args);
169
+ },
170
+ makeLocallyVisible: (...args) => {
171
+ return context.makeLocallyVisible(...args);
172
+ },
173
+ uploadBlob: async (...args) => {
174
+ return context.uploadBlob(...args);
175
+ },
176
+ addedGCOutboundReference: (...args) => {
177
+ return context.addedGCOutboundReference?.(...args);
178
+ },
179
+ getCreateChildSummarizerNodeFn: (...args) => {
180
+ return context.getCreateChildSummarizerNodeFn?.(...args);
181
+ },
182
+ deleteChildSummarizerNode: (...args) => {
183
+ return context.deleteChildSummarizerNode?.(...args);
184
+ },
185
+ };
186
+ }
187
+
188
+ /**
189
+ * Creates a wrapper of a {@link IFluidParentContext} to be provided to the inner datastore channels.
190
+ * The wrapper will have the submit methods overwritten with the appropriate id as the destination address.
191
+ *
192
+ * @param id - the id of the channel
193
+ * @param parentContext - the {@link IFluidParentContext} to wrap
194
+ * @returns A wrapped {@link IFluidParentContext}
195
+ */
196
+ export function wrapContextForInnerChannel(
197
+ id: string,
198
+ parentContext: IFluidParentContext,
199
+ ): IFluidParentContext {
200
+ const context = wrapContext(parentContext);
201
+
202
+ context.submitMessage = (type: string, content: any, localOpMetadata: unknown) => {
203
+ const fluidDataStoreContent: FluidDataStoreMessage = {
204
+ content,
205
+ type,
206
+ };
207
+ const envelope: IEnvelope = {
208
+ address: id,
209
+ contents: fluidDataStoreContent,
210
+ };
211
+ parentContext.submitMessage(
212
+ ContainerMessageType.FluidDataStoreOp,
213
+ envelope,
214
+ localOpMetadata,
215
+ );
216
+ };
217
+
218
+ context.submitSignal = (type: string, contents: any, targetClientId?: string) => {
219
+ const envelope: IEnvelope = {
220
+ address: id,
221
+ contents,
222
+ };
223
+ parentContext.submitSignal(type, envelope, targetClientId);
224
+ };
225
+
226
+ return context;
227
+ }
228
+
70
229
  /**
71
230
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
72
231
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
232
+ * @internal
73
233
  */
74
- export class DataStores implements IDisposable {
234
+ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
75
235
  // Stores tracked by the Domain
76
236
  private readonly pendingAttach = new Map<string, IAttachMessage>();
77
237
  // 0.24 back-compat attachingBeforeSummary
@@ -81,6 +241,8 @@ export class DataStores implements IDisposable {
81
241
 
82
242
  private readonly disposeOnce = new Lazy<void>(() => this.contexts.dispose());
83
243
 
244
+ public readonly entryPoint: IFluidHandle<FluidObject>;
245
+
84
246
  public readonly containerLoadStats: {
85
247
  // number of dataStores during loadContainer
86
248
  readonly containerLoadDataStoreCount: number;
@@ -99,30 +261,35 @@ export class DataStores implements IDisposable {
99
261
  Promise<AliasResult>
100
262
  >();
101
263
 
264
+ private readonly contexts: DataStoreContexts;
265
+
102
266
  constructor(
103
267
  private readonly baseSnapshot: ISnapshotTree | undefined,
104
- private readonly runtime: ContainerRuntime,
105
- private readonly submitAttachFn: (attachContent: IAttachMessage) => void,
106
- private readonly getCreateChildSummarizerNodeFn: (
107
- id: string,
108
- createParam: CreateChildSummarizerNodeParam,
109
- ) => CreateChildSummarizerNodeFn,
110
- private readonly deleteChildSummarizerNodeFn: (id: string) => void,
268
+ public readonly parentContext: IFluidParentContext,
111
269
  baseLogger: ITelemetryBaseLogger,
112
270
  private readonly gcNodeUpdated: (
113
271
  nodePath: string,
114
- timestampMs: number,
272
+ reason: "Loaded" | "Changed",
273
+ timestampMs?: number,
115
274
  packagePath?: readonly string[],
275
+ request?: IRequest,
276
+ headerData?: RuntimeHeaderData,
116
277
  ) => void,
117
278
  private readonly isDataStoreDeleted: (nodePath: string) => boolean,
118
279
  private readonly aliasMap: Map<string, string>,
119
- private readonly contexts: DataStoreContexts = new DataStoreContexts(baseLogger),
280
+ provideEntryPoint: (runtime: ChannelCollection) => Promise<FluidObject>,
120
281
  ) {
121
282
  this.mc = createChildMonitoringContext({ logger: baseLogger });
283
+ this.contexts = new DataStoreContexts(baseLogger);
122
284
  this.containerRuntimeHandle = new FluidObjectHandle(
123
- this.runtime,
285
+ this.parentContext,
124
286
  "/",
125
- this.runtime.IFluidHandleContext,
287
+ this.parentContext.IFluidHandleContext,
288
+ );
289
+ this.entryPoint = new FluidObjectHandle<FluidObject>(
290
+ new LazyPromise(async () => provideEntryPoint(this)),
291
+ "",
292
+ this.parentContext.IFluidHandleContext,
126
293
  );
127
294
 
128
295
  // Extract stores stored inside the snapshot
@@ -143,16 +310,17 @@ export class DataStores implements IDisposable {
143
310
  unreferencedDataStoreCount++;
144
311
  }
145
312
  // If we have a detached container, then create local data store contexts.
146
- if (this.runtime.attachState !== AttachState.Detached) {
313
+ if (this.parentContext.attachState !== AttachState.Detached) {
147
314
  dataStoreContext = new RemoteFluidDataStoreContext({
148
315
  id: key,
149
316
  snapshotTree: value,
150
- runtime: this.runtime,
151
- storage: this.runtime.storage,
152
- scope: this.runtime.scope,
153
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
317
+ parentContext: this.wrapContextForInnerChannel(key),
318
+ storage: this.parentContext.storage,
319
+ scope: this.parentContext.scope,
320
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
154
321
  type: CreateSummarizerNodeSource.FromSummary,
155
322
  }),
323
+ loadingGroupId: value.groupId,
156
324
  });
157
325
  } else {
158
326
  if (typeof value !== "object") {
@@ -162,10 +330,10 @@ export class DataStores implements IDisposable {
162
330
  dataStoreContext = new LocalFluidDataStoreContext({
163
331
  id: key,
164
332
  pkg: undefined,
165
- runtime: this.runtime,
166
- storage: this.runtime.storage,
167
- scope: this.runtime.scope,
168
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(key, {
333
+ parentContext: this.wrapContextForInnerChannel(key),
334
+ storage: this.parentContext.storage,
335
+ scope: this.parentContext.scope,
336
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(key, {
169
337
  type: CreateSummarizerNodeSource.FromSummary,
170
338
  }),
171
339
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
@@ -194,11 +362,53 @@ export class DataStores implements IDisposable {
194
362
  return pendingAliasPromise ?? "Success";
195
363
  }
196
364
 
197
- public processAttachMessage(message: ISequencedDocumentMessage, local: boolean) {
365
+ /** For sampling. Only log once per container */
366
+ private shouldSendAttachLog = true;
367
+
368
+ private wrapContextForInnerChannel(id: string): IFluidParentContext {
369
+ return wrapContextForInnerChannel(id, this.parentContext);
370
+ }
371
+
372
+ /**
373
+ * IFluidDataStoreChannel.makeVisibleAndAttachGraph implementation
374
+ * Not clear when it would be called and what it should do.
375
+ * Currently this API is called by context only for root data stores.
376
+ */
377
+ public makeVisibleAndAttachGraph() {
378
+ this.parentContext.makeLocallyVisible();
379
+ }
380
+
381
+ private processAttachMessage(message: ISequencedDocumentMessage, local: boolean) {
198
382
  const attachMessage = message.contents as InboundAttachMessage;
199
383
 
200
384
  this.dataStoresSinceLastGC.push(attachMessage.id);
201
385
 
386
+ // We need to process the GC Data for both local and remote attach messages
387
+ const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
388
+ // nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
389
+ const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
390
+ this.parentContext.addedGCOutboundReference?.(
391
+ { absolutePath: fromPath },
392
+ { absolutePath: toPath },
393
+ );
394
+ });
395
+
396
+ // Only log once per container to avoid noise/cost.
397
+ // Allows longitudinal tracking of various state (e.g. foundGCData), and some sampled details
398
+ if (this.shouldSendAttachLog) {
399
+ this.shouldSendAttachLog = false;
400
+ this.mc.logger.sendTelemetryEvent({
401
+ eventName: "dataStoreAttachMessage_sampled",
402
+ ...tagCodeArtifacts({ id: attachMessage.id, pkg: attachMessage.type }),
403
+ details: {
404
+ local,
405
+ snapshot: !!attachMessage.snapshot,
406
+ foundGCData,
407
+ },
408
+ ...extractSafePropertiesFromMessage(message),
409
+ });
410
+ }
411
+
202
412
  // The local object has already been attached
203
413
  if (local) {
204
414
  assert(
@@ -236,23 +446,27 @@ export class DataStores implements IDisposable {
236
446
  const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
237
447
  id: attachMessage.id,
238
448
  snapshotTree,
239
- runtime: this.runtime,
240
- storage: new StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
241
- scope: this.runtime.scope,
242
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
243
- type: CreateSummarizerNodeSource.FromAttach,
244
- sequenceNumber: message.sequenceNumber,
245
- snapshot: attachMessage.snapshot ?? {
246
- entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
449
+ parentContext: this.wrapContextForInnerChannel(attachMessage.id),
450
+ storage: new StorageServiceWithAttachBlobs(this.parentContext.storage, flatAttachBlobs),
451
+ scope: this.parentContext.scope,
452
+ loadingGroupId: attachMessage.snapshot?.groupId,
453
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(
454
+ attachMessage.id,
455
+ {
456
+ type: CreateSummarizerNodeSource.FromAttach,
457
+ sequenceNumber: message.sequenceNumber,
458
+ snapshot: attachMessage.snapshot ?? {
459
+ entries: [createAttributesBlob(pkg, true /* isRootDataStore */)],
460
+ },
247
461
  },
248
- }),
462
+ ),
249
463
  pkg,
250
464
  });
251
465
 
252
466
  this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
253
467
  }
254
468
 
255
- public processAliasMessage(
469
+ private processAliasMessage(
256
470
  message: ISequencedDocumentMessage,
257
471
  localOpMetadata: unknown,
258
472
  local: boolean,
@@ -301,9 +515,9 @@ export class DataStores implements IDisposable {
301
515
  const handle = new FluidObjectHandle(
302
516
  context,
303
517
  aliasMessage.internalId,
304
- this.runtime.IFluidHandleContext,
518
+ this.parentContext.IFluidHandleContext,
305
519
  );
306
- this.runtime.addedGCOutboundReference(this.containerRuntimeHandle, handle);
520
+ this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
307
521
 
308
522
  this.aliasMap.set(aliasMessage.alias, context.id);
309
523
  context.setInMemoryRoot();
@@ -314,9 +528,24 @@ export class DataStores implements IDisposable {
314
528
  return this.aliasMap.get(id) !== undefined || this.contexts.get(id) !== undefined;
315
529
  }
316
530
 
531
+ /** Package up the context's attach summary etc into an IAttachMessage */
532
+ private generateAttachMessage(localContext: LocalFluidDataStoreContext): IAttachMessage {
533
+ const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
534
+ const type = localContext.packagePath[localContext.packagePath.length - 1];
535
+
536
+ // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
537
+ const snapshot = convertSummaryTreeToITree(attachSummary.summary);
538
+
539
+ return {
540
+ id: localContext.id,
541
+ snapshot,
542
+ type,
543
+ } satisfies IAttachMessage;
544
+ }
545
+
317
546
  /**
318
- * Make the data stores locally visible in the container graph by moving the data store context from unbound to
319
- * bound list. This data store can now be reached from the root.
547
+ * Make the data store locally visible in the container graph by moving the data store context from unbound to
548
+ * bound list and submitting the attach message. This data store can now be reached from the root.
320
549
  * @param id - The id of the data store context to make visible.
321
550
  */
322
551
  private makeDataStoreLocallyVisible(id: string): void {
@@ -328,57 +557,102 @@ export class DataStores implements IDisposable {
328
557
  * globally visible. Move it to attaching state and send an "attach" op for it.
329
558
  * If the container is detached, this data store will be part of the summary that makes the container attached.
330
559
  */
331
- if (this.runtime.attachState !== AttachState.Detached) {
560
+ if (this.parentContext.attachState !== AttachState.Detached) {
332
561
  localContext.emit("attaching");
333
- const message = localContext.generateAttachMessage();
562
+ const message = this.generateAttachMessage(localContext);
334
563
 
335
564
  this.pendingAttach.set(id, message);
336
- this.submitAttachFn(message);
565
+ this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
337
566
  this.attachOpFiredForDataStore.add(id);
338
567
  }
339
568
 
340
569
  this.contexts.bind(id);
341
570
  }
342
571
 
572
+ /**
573
+ * Generate compact internal DataStore ID.
574
+ *
575
+ * A note about namespace and name collisions:
576
+ * This code assumes that that's the only way to generate internal IDs, and that it's Ok for this namespace to overlap with
577
+ * user-provided alias names namespace.
578
+ * There are two scenarios where it could cause trouble:
579
+ * 1) Old files, where (already removed) CreateRoot*DataStore*() API was used, and thus internal name of data store
580
+ * was provided by user. Such files may experience name collision with future data stores that receive a name generated
581
+ * by this function.
582
+ * 2) Much less likely, but if it happen that internal ID (generated by this function) is exactly the same as alias name
583
+ * that user might use in the future, them ContainerRuntime.getAliasedDataStoreEntryPoint() or
584
+ * ContainerRuntime.getDataStoreFromRequest() could return a data store with internalID matching user request, even though
585
+ * user expected some other data store (that would receive alias later).
586
+ * Please note that above mentioned functions have the implementation they have (allowing #2) due to #1.
587
+ */
588
+ protected createDataStoreId(): string {
589
+ // We use three non-overlapping namespaces:
590
+ // - detached state: even numbers
591
+ // - attached state: odd numbers
592
+ // - uuids
593
+ // In first two cases we will encode result as strings in more compact form.
594
+ if (this.parentContext.attachState === AttachState.Detached) {
595
+ // container is detached, only one client observes content, no way to hit collisions with other clients.
596
+ return encodeCompactIdToString(2 * this.contexts.size);
597
+ }
598
+ const id = this.parentContext.containerRuntime.generateDocumentUniqueId();
599
+ if (typeof id === "number") {
600
+ return encodeCompactIdToString(2 * id + 1);
601
+ }
602
+ return id;
603
+ }
604
+
343
605
  public createDetachedDataStoreCore(
344
606
  pkg: Readonly<string[]>,
345
- isRoot: boolean,
346
- id = uuid(),
607
+ loadingGroupId?: string,
347
608
  ): IFluidDataStoreContextDetached {
348
- assert(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
609
+ const id = this.createDataStoreId();
349
610
 
350
611
  const context = new LocalDetachedFluidDataStoreContext({
351
612
  id,
352
613
  pkg,
353
- runtime: this.runtime,
354
- storage: this.runtime.storage,
355
- scope: this.runtime.scope,
356
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
614
+ parentContext: this.wrapContextForInnerChannel(id),
615
+ storage: this.parentContext.storage,
616
+ scope: this.parentContext.scope,
617
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
357
618
  type: CreateSummarizerNodeSource.Local,
358
619
  }),
359
620
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
360
621
  snapshotTree: undefined,
361
- isRootDataStore: isRoot,
622
+ isRootDataStore: false,
623
+ loadingGroupId,
624
+ channelToDataStoreFn: (channel: IFluidDataStoreChannel) =>
625
+ channelToDataStore(
626
+ channel,
627
+ id,
628
+ this,
629
+ createChildLogger({ logger: this.parentContext.logger }),
630
+ ),
362
631
  });
363
632
  this.contexts.addUnbound(context);
364
633
  return context;
365
634
  }
366
635
 
367
- public _createFluidDataStoreContext(pkg: string[], id: string, props?: any) {
368
- assert(!id.includes("/"), 0x30d /* Id cannot contain slashes */);
636
+ public _createFluidDataStoreContext(
637
+ pkg: Readonly<string[]>,
638
+ props?: any,
639
+ loadingGroupId?: string,
640
+ ) {
641
+ const id = this.createDataStoreId();
369
642
  const context = new LocalFluidDataStoreContext({
370
643
  id,
371
644
  pkg,
372
- runtime: this.runtime,
373
- storage: this.runtime.storage,
374
- scope: this.runtime.scope,
375
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(id, {
645
+ parentContext: this.wrapContextForInnerChannel(id),
646
+ storage: this.parentContext.storage,
647
+ scope: this.parentContext.scope,
648
+ createSummarizerNodeFn: this.parentContext.getCreateChildSummarizerNodeFn(id, {
376
649
  type: CreateSummarizerNodeSource.Local,
377
650
  }),
378
651
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
379
652
  snapshotTree: undefined,
380
653
  isRootDataStore: false,
381
654
  createProps: props,
655
+ loadingGroupId,
382
656
  });
383
657
  this.contexts.addUnbound(context);
384
658
  return context;
@@ -389,7 +663,17 @@ export class DataStores implements IDisposable {
389
663
  }
390
664
  public readonly dispose = () => this.disposeOnce.value;
391
665
 
392
- public resubmitDataStoreOp(envelope: IEnvelope, localOpMetadata: unknown) {
666
+ public reSubmit(type: string, content: any, localOpMetadata: unknown) {
667
+ switch (type) {
668
+ case ContainerMessageType.Attach:
669
+ case ContainerMessageType.Alias:
670
+ this.parentContext.submitMessage(type, content, localOpMetadata);
671
+ return;
672
+ default:
673
+ }
674
+
675
+ assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e7 /* type */);
676
+ const envelope = content as IEnvelope;
393
677
  const context = this.contexts.get(envelope.address);
394
678
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
395
679
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -402,10 +686,13 @@ export class DataStores implements IDisposable {
402
686
  });
403
687
  }
404
688
  assert(!!context, 0x160 /* "There should be a store context for the op" */);
405
- context.reSubmit(envelope.contents, localOpMetadata);
689
+ const innerContents = envelope.contents as FluidDataStoreMessage;
690
+ context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
406
691
  }
407
692
 
408
- public rollbackDataStoreOp(envelope: IEnvelope, localOpMetadata: unknown) {
693
+ public rollback(type: string, content: any, localOpMetadata: unknown) {
694
+ assert(type === ContainerMessageType.FluidDataStoreOp, 0x8e8 /* type */);
695
+ const envelope = content as IEnvelope;
409
696
  const context = this.contexts.get(envelope.address);
410
697
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
411
698
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -418,10 +705,21 @@ export class DataStores implements IDisposable {
418
705
  });
419
706
  }
420
707
  assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
421
- context.rollback(envelope.contents, localOpMetadata);
708
+ const innerContents = envelope.contents as FluidDataStoreMessage;
709
+ context.rollback(innerContents.type, innerContents.content, localOpMetadata);
422
710
  }
423
711
 
424
- public async applyStashedOp(envelope: IEnvelope): Promise<unknown> {
712
+ public async applyStashedOp(content: unknown): Promise<unknown> {
713
+ const opContents = content as LocalContainerRuntimeMessage;
714
+ switch (opContents.type) {
715
+ case ContainerMessageType.Attach:
716
+ return this.applyStashedAttachOp(opContents.contents);
717
+ case ContainerMessageType.Alias:
718
+ return;
719
+ default:
720
+ }
721
+
722
+ const envelope = opContents.contents as IEnvelope;
425
723
  const context = this.contexts.get(envelope.address);
426
724
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
427
725
  // corruption in case the data store that stashed the op is deleted.
@@ -432,20 +730,39 @@ export class DataStores implements IDisposable {
432
730
  return context.applyStashedOp(envelope.contents);
433
731
  }
434
732
 
435
- public async applyStashedAttachOp(message: IAttachMessage) {
733
+ private async applyStashedAttachOp(message: IAttachMessage) {
436
734
  this.pendingAttach.set(message.id, message);
437
735
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
438
736
  this.processAttachMessage({ contents: message } as ISequencedDocumentMessage, false);
439
737
  }
440
738
 
441
- public processFluidDataStoreOp(
739
+ public process(
442
740
  message: ISequencedDocumentMessage,
443
741
  local: boolean,
444
742
  localMessageMetadata: unknown,
445
- addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
743
+ addedOutboundReference?: (fromNodePath: string, toNodePath: string) => void,
446
744
  ) {
745
+ switch (message.type) {
746
+ case ContainerMessageType.Attach:
747
+ this.processAttachMessage(message, local);
748
+ return;
749
+ case ContainerMessageType.Alias:
750
+ this.processAliasMessage(message, localMessageMetadata, local);
751
+ return;
752
+ case ContainerMessageType.FluidDataStoreOp:
753
+ break;
754
+ default:
755
+ assert(false, 0x8e9 /* unreached */);
756
+ }
757
+
447
758
  const envelope = message.contents as IEnvelope;
448
- const transformed = { ...message, contents: envelope.contents };
759
+ const innerContents = envelope.contents as FluidDataStoreMessage;
760
+ const transformed = {
761
+ ...message,
762
+ type: innerContents.type,
763
+ contents: innerContents.content,
764
+ };
765
+
449
766
  const context = this.contexts.get(envelope.address);
450
767
 
451
768
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
@@ -482,7 +799,10 @@ export class DataStores implements IDisposable {
482
799
 
483
800
  // By default, we use the new behavior of detecting outbound routes here.
484
801
  // If this setting is true, then DataStoreContext would be notifying GC instead.
485
- if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true) {
802
+ if (
803
+ this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
804
+ addedOutboundReference !== undefined
805
+ ) {
486
806
  // Notify GC of any outbound references that were added by this op.
487
807
  detectOutboundReferences(envelope, addedOutboundReference);
488
808
  }
@@ -491,6 +811,7 @@ export class DataStores implements IDisposable {
491
811
  // being used.
492
812
  this.gcNodeUpdated(
493
813
  `/${envelope.address}`,
814
+ "Changed",
494
815
  message.timestamp,
495
816
  context.isLoaded ? context.packagePath : undefined,
496
817
  );
@@ -584,7 +905,10 @@ export class DataStores implements IDisposable {
584
905
  return true;
585
906
  }
586
907
 
587
- public processSignal(fluidDataStoreId: string, message: IInboundSignalMessage, local: boolean) {
908
+ public processSignal(messageArg: IInboundSignalMessage, local: boolean) {
909
+ const envelope = messageArg.content as IEnvelope;
910
+ const fluidDataStoreId = envelope.address;
911
+ const message = { ...messageArg, content: envelope.contents };
588
912
  const context = this.contexts.get(fluidDataStoreId);
589
913
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
590
914
  // corruption in case a deleted data store accidentally submitted a signal.
@@ -620,7 +944,7 @@ export class DataStores implements IDisposable {
620
944
  fluidDataStoreId,
621
945
  }),
622
946
  details: JSON.stringify({
623
- runtimeConnected: this.runtime.connected,
947
+ runtimeConnected: this.parentContext.connected,
624
948
  connected,
625
949
  }),
626
950
  },
@@ -681,7 +1005,10 @@ export class DataStores implements IDisposable {
681
1005
  return summaryBuilder.getSummaryTree();
682
1006
  }
683
1007
 
684
- public createSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
1008
+ /**
1009
+ * Create a summary. Used when attaching or serializing a detached container.
1010
+ */
1011
+ public getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
685
1012
  const builder = new SummaryTreeBuilder();
686
1013
  // Attaching graph of some stores can cause other stores to get bound too.
687
1014
  // So keep taking summary until no new stores get bound.
@@ -705,8 +1032,10 @@ export class DataStores implements IDisposable {
705
1032
  .map(([key, value]) => {
706
1033
  let dataStoreSummary: ISummarizeResult;
707
1034
  if (value.isLoaded) {
708
- const snapshot = value.generateAttachMessage().snapshot;
709
- dataStoreSummary = convertToSummaryTree(snapshot, true);
1035
+ dataStoreSummary = value.getAttachData(
1036
+ /* includeGCCData: */ false,
1037
+ telemetryContext,
1038
+ ).attachSummary;
710
1039
  } else {
711
1040
  // If this data store is not yet loaded, then there should be no changes in the snapshot from
712
1041
  // which it was created as it is detached container. So just use the previous snapshot.
@@ -736,8 +1065,12 @@ export class DataStores implements IDisposable {
736
1065
  assert(context !== undefined, 0x2b6 /* Missing data store context */);
737
1066
  if (await context.isRoot()) {
738
1067
  // A root data store is basically a reference from the container runtime to the data store.
739
- const handle = new FluidObjectHandle(context, id, this.runtime.IFluidHandleContext);
740
- this.runtime.addedGCOutboundReference(this.containerRuntimeHandle, handle);
1068
+ const handle = new FluidObjectHandle(
1069
+ context,
1070
+ id,
1071
+ this.parentContext.IFluidHandleContext,
1072
+ );
1073
+ this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
741
1074
  }
742
1075
  }
743
1076
  this.dataStoresSinceLastGC = [];
@@ -828,7 +1161,7 @@ export class DataStores implements IDisposable {
828
1161
  // Delete the contexts of unused data stores.
829
1162
  this.contexts.delete(dataStoreId);
830
1163
  // Delete the summarizer node of the unused data stores.
831
- this.deleteChildSummarizerNodeFn(dataStoreId);
1164
+ this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
832
1165
  }
833
1166
  }
834
1167
 
@@ -870,7 +1203,7 @@ export class DataStores implements IDisposable {
870
1203
  // Delete the contexts of sweep ready data stores.
871
1204
  this.contexts.delete(dataStoreId);
872
1205
  // Delete the summarizer node of the sweep ready data stores.
873
- this.deleteChildSummarizerNodeFn(dataStoreId);
1206
+ this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
874
1207
  }
875
1208
  return Array.from(sweepReadyDataStoreRoutes);
876
1209
  }
@@ -944,6 +1277,69 @@ export class DataStores implements IDisposable {
944
1277
  }
945
1278
  return GCNodeType.SubDataStore;
946
1279
  }
1280
+
1281
+ public internalId(maybeAlias: string): string {
1282
+ return this.aliases.get(maybeAlias) ?? maybeAlias;
1283
+ }
1284
+
1285
+ public async request(request: IRequest): Promise<IResponse> {
1286
+ const requestParser = RequestParser.create(request);
1287
+ const id = requestParser.pathParts[0];
1288
+
1289
+ // Differentiate between requesting the dataStore directly, or one of its children
1290
+ const requestForChild = !requestParser.isLeaf(1);
1291
+
1292
+ const headerData: RuntimeHeaderData = {};
1293
+ if (typeof request.headers?.[RuntimeHeaders.wait] === "boolean") {
1294
+ headerData.wait = request.headers[RuntimeHeaders.wait];
1295
+ }
1296
+ if (typeof request.headers?.[RuntimeHeaders.viaHandle] === "boolean") {
1297
+ headerData.viaHandle = request.headers[RuntimeHeaders.viaHandle];
1298
+ }
1299
+ if (typeof request.headers?.[AllowTombstoneRequestHeaderKey] === "boolean") {
1300
+ headerData.allowTombstone = request.headers[AllowTombstoneRequestHeaderKey];
1301
+ }
1302
+ if (typeof request.headers?.[AllowInactiveRequestHeaderKey] === "boolean") {
1303
+ headerData.allowInactive = request.headers[AllowInactiveRequestHeaderKey];
1304
+ }
1305
+
1306
+ // We allow Tombstone requests for sub-DataStore objects
1307
+ if (requestForChild) {
1308
+ headerData.allowTombstone = true;
1309
+ }
1310
+
1311
+ await this.waitIfPendingAlias(id);
1312
+ const internalId = this.internalId(id);
1313
+ const dataStoreContext = await this.getDataStore(internalId, headerData);
1314
+
1315
+ // Remove query params, leading and trailing slashes from the url. This is done to make sure the format is
1316
+ // the same as GC nodes id.
1317
+ const urlWithoutQuery = trimLeadingAndTrailingSlashes(request.url.split("?")[0]);
1318
+ // Get the initial snapshot details which contain the data store package path.
1319
+ const details = await dataStoreContext.getInitialSnapshotDetails();
1320
+
1321
+ // Note that this will throw if the data store is inactive or tombstoned and throwing on incorrect usage
1322
+ // is configured.
1323
+ this.gcNodeUpdated(
1324
+ `/${urlWithoutQuery}`,
1325
+ "Loaded",
1326
+ undefined /* timestampMs */,
1327
+ details.pkg,
1328
+ request,
1329
+ headerData,
1330
+ );
1331
+ const dataStore = await dataStoreContext.realize();
1332
+
1333
+ const subRequest = requestParser.createSubRequest(1);
1334
+ // We always expect createSubRequest to include a leading slash, but asserting here to protect against
1335
+ // unintentionally modifying the url if that changes.
1336
+ assert(
1337
+ subRequest.url.startsWith("/"),
1338
+ 0x126 /* "Expected createSubRequest url to include a leading slash" */,
1339
+ );
1340
+
1341
+ return dataStore.request(subRequest);
1342
+ }
947
1343
  }
948
1344
 
949
1345
  export function getSummaryForDatastores(
@@ -975,6 +1371,8 @@ export function getSummaryForDatastores(
975
1371
 
976
1372
  /**
977
1373
  * Traverse this op's contents and detect any outbound routes that were added by this op.
1374
+ *
1375
+ * @internal
978
1376
  */
979
1377
  export function detectOutboundReferences(
980
1378
  envelope: IEnvelope,
@@ -1011,3 +1409,41 @@ export function detectOutboundReferences(
1011
1409
  const fromPath = ["", envelope.address, ddsAddress].join("/");
1012
1410
  outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
1013
1411
  }
1412
+
1413
+ /** @internal */
1414
+ export class ChannelCollectionFactory implements IFluidDataStoreFactory {
1415
+ public readonly type = "ChannelCollectionChannel";
1416
+
1417
+ public IFluidDataStoreRegistry: IFluidDataStoreRegistry;
1418
+
1419
+ constructor(
1420
+ registryEntries: NamedFluidDataStoreRegistryEntries,
1421
+ // ADO:7302 We need a better type here
1422
+ private readonly provideEntryPoint: (
1423
+ runtime: IFluidDataStoreChannel,
1424
+ ) => Promise<FluidObject>,
1425
+ ) {
1426
+ this.IFluidDataStoreRegistry = new FluidDataStoreRegistry(registryEntries);
1427
+ }
1428
+
1429
+ public get IFluidDataStoreFactory() {
1430
+ return this;
1431
+ }
1432
+
1433
+ public async instantiateDataStore(
1434
+ context: IFluidDataStoreContext,
1435
+ _existing: boolean,
1436
+ ): Promise<IFluidDataStoreChannel> {
1437
+ const runtime = new ChannelCollection(
1438
+ context.baseSnapshot,
1439
+ context, // parentContext
1440
+ context.logger,
1441
+ () => {}, // gcNodeUpdated
1442
+ (_nodePath: string) => false, // isDataStoreDeleted
1443
+ new Map(), // aliasMap
1444
+ this.provideEntryPoint,
1445
+ );
1446
+
1447
+ return runtime;
1448
+ }
1449
+ }