@fluidframework/container-runtime 2.0.0-rc.1.0.6 → 2.0.0-rc.2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (687) 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 +63 -29
  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/{lib/dataStores.d.mts → dist/channelCollection.d.ts} +94 -27
  14. package/dist/channelCollection.d.ts.map +1 -0
  15. package/dist/{dataStores.js → channelCollection.js} +359 -84
  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 +93 -39
  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 +118 -39
  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 +74 -54
  29. package/dist/containerRuntime.d.ts.map +1 -1
  30. package/dist/containerRuntime.js +534 -410
  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 +34 -29
  37. package/dist/dataStoreContext.d.ts.map +1 -1
  38. package/dist/dataStoreContext.js +157 -133
  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 +5 -4
  48. package/dist/gc/garbageCollection.d.ts.map +1 -1
  49. package/dist/gc/garbageCollection.js +64 -53
  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 +10 -3
  56. package/dist/gc/gcDefinitions.d.ts.map +1 -1
  57. package/dist/gc/gcDefinitions.js.map +1 -1
  58. package/dist/gc/gcHelpers.d.ts +2 -2
  59. package/dist/gc/gcHelpers.d.ts.map +1 -1
  60. package/dist/gc/gcHelpers.js.map +1 -1
  61. package/dist/gc/gcReferenceGraphAlgorithm.d.ts +1 -1
  62. package/dist/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -1
  63. package/dist/gc/gcReferenceGraphAlgorithm.js.map +1 -1
  64. package/dist/gc/gcSummaryStateTracker.d.ts +4 -4
  65. package/dist/gc/gcSummaryStateTracker.d.ts.map +1 -1
  66. package/dist/gc/gcSummaryStateTracker.js +5 -5
  67. package/dist/gc/gcSummaryStateTracker.js.map +1 -1
  68. package/dist/gc/gcTelemetry.d.ts +6 -7
  69. package/dist/gc/gcTelemetry.d.ts.map +1 -1
  70. package/dist/gc/gcTelemetry.js +17 -17
  71. package/dist/gc/gcTelemetry.js.map +1 -1
  72. package/dist/gc/gcUnreferencedStateTracker.d.ts +1 -1
  73. package/dist/gc/gcUnreferencedStateTracker.d.ts.map +1 -1
  74. package/dist/gc/gcUnreferencedStateTracker.js +10 -10
  75. package/dist/gc/gcUnreferencedStateTracker.js.map +1 -1
  76. package/dist/gc/index.d.ts +8 -8
  77. package/dist/gc/index.d.ts.map +1 -1
  78. package/dist/gc/index.js +39 -39
  79. package/dist/gc/index.js.map +1 -1
  80. package/dist/index.d.ts +8 -20
  81. package/dist/index.d.ts.map +1 -1
  82. package/dist/index.js +28 -40
  83. package/dist/index.js.map +1 -1
  84. package/dist/messageTypes.d.ts +4 -4
  85. package/dist/messageTypes.d.ts.map +1 -1
  86. package/dist/messageTypes.js.map +1 -1
  87. package/dist/opLifecycle/batchManager.d.ts +2 -2
  88. package/dist/opLifecycle/batchManager.d.ts.map +1 -1
  89. package/dist/opLifecycle/batchManager.js.map +1 -1
  90. package/dist/opLifecycle/definitions.d.ts +2 -2
  91. package/dist/opLifecycle/definitions.d.ts.map +1 -1
  92. package/dist/opLifecycle/definitions.js.map +1 -1
  93. package/dist/opLifecycle/index.d.ts +8 -8
  94. package/dist/opLifecycle/index.d.ts.map +1 -1
  95. package/dist/opLifecycle/index.js +18 -18
  96. package/dist/opLifecycle/index.js.map +1 -1
  97. package/dist/opLifecycle/opCompressor.d.ts +1 -1
  98. package/dist/opLifecycle/opCompressor.d.ts.map +1 -1
  99. package/dist/opLifecycle/opCompressor.js +4 -4
  100. package/dist/opLifecycle/opCompressor.js.map +1 -1
  101. package/dist/opLifecycle/opDecompressor.d.ts +1 -1
  102. package/dist/opLifecycle/opDecompressor.d.ts.map +1 -1
  103. package/dist/opLifecycle/opDecompressor.js +3 -3
  104. package/dist/opLifecycle/opDecompressor.js.map +1 -1
  105. package/dist/opLifecycle/opGroupingManager.d.ts +1 -1
  106. package/dist/opLifecycle/opGroupingManager.d.ts.map +1 -1
  107. package/dist/opLifecycle/opGroupingManager.js +1 -10
  108. package/dist/opLifecycle/opGroupingManager.js.map +1 -1
  109. package/dist/opLifecycle/opSplitter.d.ts +1 -1
  110. package/dist/opLifecycle/opSplitter.d.ts.map +1 -1
  111. package/dist/opLifecycle/opSplitter.js +5 -5
  112. package/dist/opLifecycle/opSplitter.js.map +1 -1
  113. package/dist/opLifecycle/outbox.d.ts +7 -7
  114. package/dist/opLifecycle/outbox.d.ts.map +1 -1
  115. package/dist/opLifecycle/outbox.js +20 -12
  116. package/dist/opLifecycle/outbox.js.map +1 -1
  117. package/dist/opLifecycle/remoteMessageProcessor.d.ts +4 -4
  118. package/dist/opLifecycle/remoteMessageProcessor.d.ts.map +1 -1
  119. package/dist/opLifecycle/remoteMessageProcessor.js +2 -2
  120. package/dist/opLifecycle/remoteMessageProcessor.js.map +1 -1
  121. package/dist/package.json +3 -0
  122. package/dist/packageVersion.d.ts +1 -1
  123. package/dist/packageVersion.js +1 -1
  124. package/dist/packageVersion.js.map +1 -1
  125. package/dist/pendingStateManager.d.ts +2 -1
  126. package/dist/pendingStateManager.d.ts.map +1 -1
  127. package/dist/pendingStateManager.js +18 -10
  128. package/dist/pendingStateManager.js.map +1 -1
  129. package/dist/scheduleManager.d.ts +1 -2
  130. package/dist/scheduleManager.d.ts.map +1 -1
  131. package/dist/scheduleManager.js +5 -5
  132. package/dist/scheduleManager.js.map +1 -1
  133. package/dist/summary/index.d.ts +12 -12
  134. package/dist/summary/index.d.ts.map +1 -1
  135. package/dist/summary/index.js +43 -43
  136. package/dist/summary/index.js.map +1 -1
  137. package/dist/summary/orderedClientElection.js +8 -8
  138. package/dist/summary/orderedClientElection.js.map +1 -1
  139. package/dist/summary/runWhileConnectedCoordinator.d.ts +1 -1
  140. package/dist/summary/runWhileConnectedCoordinator.d.ts.map +1 -1
  141. package/dist/summary/runWhileConnectedCoordinator.js.map +1 -1
  142. package/dist/summary/runningSummarizer.d.ts +11 -10
  143. package/dist/summary/runningSummarizer.d.ts.map +1 -1
  144. package/dist/summary/runningSummarizer.js +114 -81
  145. package/dist/summary/runningSummarizer.js.map +1 -1
  146. package/dist/summary/summarizer.d.ts +4 -4
  147. package/dist/summary/summarizer.d.ts.map +1 -1
  148. package/dist/summary/summarizer.js +6 -6
  149. package/dist/summary/summarizer.js.map +1 -1
  150. package/dist/summary/summarizerClientElection.d.ts +2 -2
  151. package/dist/summary/summarizerClientElection.d.ts.map +1 -1
  152. package/dist/summary/summarizerClientElection.js.map +1 -1
  153. package/dist/summary/summarizerHeuristics.d.ts +3 -3
  154. package/dist/summary/summarizerHeuristics.d.ts.map +1 -1
  155. package/dist/summary/summarizerHeuristics.js.map +1 -1
  156. package/dist/summary/summarizerNode/index.d.ts +3 -3
  157. package/dist/summary/summarizerNode/index.d.ts.map +1 -1
  158. package/dist/summary/summarizerNode/index.js +4 -4
  159. package/dist/summary/summarizerNode/index.js.map +1 -1
  160. package/dist/summary/summarizerNode/summarizerNode.d.ts +17 -7
  161. package/dist/summary/summarizerNode/summarizerNode.d.ts.map +1 -1
  162. package/dist/summary/summarizerNode/summarizerNode.js +45 -57
  163. package/dist/summary/summarizerNode/summarizerNode.js.map +1 -1
  164. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts +10 -19
  165. package/dist/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -1
  166. package/dist/summary/summarizerNode/summarizerNodeUtils.js +1 -21
  167. package/dist/summary/summarizerNode/summarizerNodeUtils.js.map +1 -1
  168. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts +5 -6
  169. package/dist/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -1
  170. package/dist/summary/summarizerNode/summarizerNodeWithGc.js +16 -16
  171. package/dist/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -1
  172. package/dist/summary/summarizerTypes.d.ts +10 -21
  173. package/dist/summary/summarizerTypes.d.ts.map +1 -1
  174. package/dist/summary/summarizerTypes.js.map +1 -1
  175. package/dist/summary/summaryFormat.d.ts +15 -2
  176. package/dist/summary/summaryFormat.d.ts.map +1 -1
  177. package/dist/summary/summaryFormat.js.map +1 -1
  178. package/dist/summary/summaryGenerator.d.ts +6 -5
  179. package/dist/summary/summaryGenerator.d.ts.map +1 -1
  180. package/dist/summary/summaryGenerator.js +10 -1
  181. package/dist/summary/summaryGenerator.js.map +1 -1
  182. package/dist/summary/summaryManager.d.ts +5 -6
  183. package/dist/summary/summaryManager.d.ts.map +1 -1
  184. package/dist/summary/summaryManager.js +4 -5
  185. package/dist/summary/summaryManager.js.map +1 -1
  186. package/dist/tsdoc-metadata.json +1 -1
  187. package/lib/{batchTracker.d.mts → batchTracker.d.ts} +2 -3
  188. package/lib/batchTracker.d.ts.map +1 -0
  189. package/lib/{batchTracker.mjs → batchTracker.js} +1 -1
  190. package/lib/batchTracker.js.map +1 -0
  191. package/lib/{blobManager.d.mts → blobManager.d.ts} +1 -1
  192. package/lib/blobManager.d.ts.map +1 -0
  193. package/lib/{blobManager.mjs → blobManager.js} +1 -1
  194. package/lib/blobManager.js.map +1 -0
  195. package/{dist/dataStores.d.ts → lib/channelCollection.d.ts} +94 -27
  196. package/lib/channelCollection.d.ts.map +1 -0
  197. package/lib/{dataStores.mjs → channelCollection.js} +345 -73
  198. package/lib/channelCollection.js.map +1 -0
  199. package/lib/{connectionTelemetry.d.mts → connectionTelemetry.d.ts} +12 -2
  200. package/lib/connectionTelemetry.d.ts.map +1 -0
  201. package/lib/{connectionTelemetry.mjs → connectionTelemetry.js} +43 -5
  202. package/lib/connectionTelemetry.js.map +1 -0
  203. package/lib/{container-runtime-alpha.d.mts → container-runtime-alpha.d.ts} +93 -39
  204. package/lib/{container-runtime-public.d.mts → container-runtime-beta.d.ts} +27 -9
  205. package/lib/{container-runtime-beta.d.mts → container-runtime-public.d.ts} +27 -9
  206. package/lib/{container-runtime-untrimmed.d.mts → container-runtime-untrimmed.d.ts} +118 -39
  207. package/lib/{containerHandleContext.d.mts → containerHandleContext.d.ts} +2 -2
  208. package/lib/containerHandleContext.d.ts.map +1 -0
  209. package/lib/{containerHandleContext.mjs → containerHandleContext.js} +1 -1
  210. package/lib/containerHandleContext.js.map +1 -0
  211. package/lib/{containerRuntime.d.mts → containerRuntime.d.ts} +79 -55
  212. package/lib/containerRuntime.d.ts.map +1 -0
  213. package/lib/{containerRuntime.mjs → containerRuntime.js} +453 -331
  214. package/lib/containerRuntime.js.map +1 -0
  215. package/lib/{dataStore.d.mts → dataStore.d.ts} +3 -4
  216. package/lib/dataStore.d.ts.map +1 -0
  217. package/lib/{dataStore.mjs → dataStore.js} +13 -12
  218. package/lib/dataStore.js.map +1 -0
  219. package/lib/{dataStoreContext.d.mts → dataStoreContext.d.ts} +35 -30
  220. package/lib/dataStoreContext.d.ts.map +1 -0
  221. package/lib/{dataStoreContext.mjs → dataStoreContext.js} +146 -122
  222. package/lib/dataStoreContext.js.map +1 -0
  223. package/lib/{dataStoreContexts.d.mts → dataStoreContexts.d.ts} +2 -2
  224. package/lib/dataStoreContexts.d.ts.map +1 -0
  225. package/lib/{dataStoreContexts.mjs → dataStoreContexts.js} +1 -1
  226. package/lib/dataStoreContexts.js.map +1 -0
  227. package/lib/{dataStoreRegistry.d.mts → dataStoreRegistry.d.ts} +1 -1
  228. package/lib/dataStoreRegistry.d.ts.map +1 -0
  229. package/lib/{dataStoreRegistry.mjs → dataStoreRegistry.js} +5 -1
  230. package/lib/dataStoreRegistry.js.map +1 -0
  231. package/{dist/deltaManagerProxyBase.d.ts → lib/deltaManagerSummarizerProxy.d.ts} +16 -7
  232. package/lib/deltaManagerSummarizerProxy.d.ts.map +1 -0
  233. package/lib/deltaManagerSummarizerProxy.js +124 -0
  234. package/lib/deltaManagerSummarizerProxy.js.map +1 -0
  235. package/lib/{deltaScheduler.d.mts → deltaScheduler.d.ts} +1 -1
  236. package/lib/deltaScheduler.d.ts.map +1 -0
  237. package/lib/{deltaScheduler.mjs → deltaScheduler.js} +1 -1
  238. package/lib/deltaScheduler.js.map +1 -0
  239. package/lib/{error.d.mts → error.d.ts} +1 -1
  240. package/lib/error.d.ts.map +1 -0
  241. package/lib/{error.mjs → error.js} +1 -1
  242. package/lib/error.js.map +1 -0
  243. package/lib/gc/{garbageCollection.d.mts → garbageCollection.d.ts} +6 -5
  244. package/lib/gc/garbageCollection.d.ts.map +1 -0
  245. package/lib/gc/{garbageCollection.mjs → garbageCollection.js} +25 -14
  246. package/lib/gc/garbageCollection.js.map +1 -0
  247. package/lib/gc/{gcConfigs.d.mts → gcConfigs.d.ts} +3 -3
  248. package/lib/gc/gcConfigs.d.ts.map +1 -0
  249. package/lib/gc/{gcConfigs.mjs → gcConfigs.js} +3 -3
  250. package/lib/gc/gcConfigs.js.map +1 -0
  251. package/lib/gc/{gcDefinitions.d.mts → gcDefinitions.d.ts} +11 -4
  252. package/lib/gc/gcDefinitions.d.ts.map +1 -0
  253. package/lib/gc/{gcDefinitions.mjs → gcDefinitions.js} +1 -1
  254. package/lib/gc/gcDefinitions.js.map +1 -0
  255. package/lib/gc/{gcHelpers.d.mts → gcHelpers.d.ts} +3 -3
  256. package/lib/gc/{gcHelpers.d.mts.map → gcHelpers.d.ts.map} +1 -1
  257. package/lib/gc/{gcHelpers.mjs → gcHelpers.js} +1 -1
  258. package/lib/gc/gcHelpers.js.map +1 -0
  259. package/lib/gc/{gcReferenceGraphAlgorithm.d.mts → gcReferenceGraphAlgorithm.d.ts} +2 -2
  260. package/lib/gc/gcReferenceGraphAlgorithm.d.ts.map +1 -0
  261. package/lib/gc/{gcReferenceGraphAlgorithm.mjs → gcReferenceGraphAlgorithm.js} +1 -1
  262. package/lib/gc/gcReferenceGraphAlgorithm.js.map +1 -0
  263. package/lib/gc/{gcSummaryDefinitions.d.mts → gcSummaryDefinitions.d.ts} +1 -1
  264. package/lib/gc/gcSummaryDefinitions.d.ts.map +1 -0
  265. package/lib/gc/{gcSummaryDefinitions.mjs → gcSummaryDefinitions.js} +1 -1
  266. package/lib/gc/gcSummaryDefinitions.js.map +1 -0
  267. package/lib/gc/{gcSummaryStateTracker.d.mts → gcSummaryStateTracker.d.ts} +5 -5
  268. package/lib/gc/gcSummaryStateTracker.d.ts.map +1 -0
  269. package/lib/gc/{gcSummaryStateTracker.mjs → gcSummaryStateTracker.js} +4 -4
  270. package/lib/gc/gcSummaryStateTracker.js.map +1 -0
  271. package/lib/gc/{gcTelemetry.d.mts → gcTelemetry.d.ts} +7 -8
  272. package/lib/gc/gcTelemetry.d.ts.map +1 -0
  273. package/lib/gc/{gcTelemetry.mjs → gcTelemetry.js} +2 -2
  274. package/lib/gc/gcTelemetry.js.map +1 -0
  275. package/lib/gc/{gcUnreferencedStateTracker.d.mts → gcUnreferencedStateTracker.d.ts} +2 -2
  276. package/lib/gc/gcUnreferencedStateTracker.d.ts.map +1 -0
  277. package/lib/gc/{gcUnreferencedStateTracker.mjs → gcUnreferencedStateTracker.js} +2 -2
  278. package/lib/gc/gcUnreferencedStateTracker.js.map +1 -0
  279. package/lib/gc/{index.d.mts → index.d.ts} +9 -9
  280. package/lib/gc/index.d.ts.map +1 -0
  281. package/lib/gc/{index.mjs → index.js} +8 -8
  282. package/lib/gc/index.js.map +1 -0
  283. package/lib/{index.d.mts → index.d.ts} +9 -21
  284. package/lib/index.d.ts.map +1 -0
  285. package/lib/index.js +12 -0
  286. package/lib/index.js.map +1 -0
  287. package/lib/{messageTypes.d.mts → messageTypes.d.ts} +5 -5
  288. package/lib/messageTypes.d.ts.map +1 -0
  289. package/lib/{messageTypes.mjs → messageTypes.js} +1 -1
  290. package/lib/messageTypes.js.map +1 -0
  291. package/lib/{metadata.d.mts → metadata.d.ts} +1 -1
  292. package/lib/metadata.d.ts.map +1 -0
  293. package/lib/{metadata.mjs → metadata.js} +1 -1
  294. package/lib/metadata.js.map +1 -0
  295. package/lib/opLifecycle/{batchManager.d.mts → batchManager.d.ts} +3 -3
  296. package/lib/opLifecycle/batchManager.d.ts.map +1 -0
  297. package/lib/opLifecycle/{batchManager.mjs → batchManager.js} +1 -1
  298. package/lib/opLifecycle/batchManager.js.map +1 -0
  299. package/lib/opLifecycle/{definitions.d.mts → definitions.d.ts} +3 -3
  300. package/lib/opLifecycle/definitions.d.ts.map +1 -0
  301. package/lib/opLifecycle/{definitions.mjs → definitions.js} +1 -1
  302. package/lib/opLifecycle/definitions.js.map +1 -0
  303. package/lib/opLifecycle/index.d.ts +13 -0
  304. package/lib/opLifecycle/index.d.ts.map +1 -0
  305. package/lib/opLifecycle/index.js +12 -0
  306. package/lib/opLifecycle/index.js.map +1 -0
  307. package/lib/opLifecycle/{opCompressor.d.mts → opCompressor.d.ts} +2 -2
  308. package/lib/opLifecycle/opCompressor.d.ts.map +1 -0
  309. package/lib/opLifecycle/{opCompressor.mjs → opCompressor.js} +3 -3
  310. package/lib/opLifecycle/opCompressor.js.map +1 -0
  311. package/lib/opLifecycle/{opDecompressor.d.mts → opDecompressor.d.ts} +2 -2
  312. package/lib/opLifecycle/opDecompressor.d.ts.map +1 -0
  313. package/lib/opLifecycle/{opDecompressor.mjs → opDecompressor.js} +2 -2
  314. package/lib/opLifecycle/opDecompressor.js.map +1 -0
  315. package/lib/opLifecycle/{opGroupingManager.d.mts → opGroupingManager.d.ts} +2 -2
  316. package/lib/opLifecycle/opGroupingManager.d.ts.map +1 -0
  317. package/lib/opLifecycle/{opGroupingManager.mjs → opGroupingManager.js} +2 -11
  318. package/lib/opLifecycle/opGroupingManager.js.map +1 -0
  319. package/lib/opLifecycle/{opSplitter.d.mts → opSplitter.d.ts} +2 -2
  320. package/lib/opLifecycle/opSplitter.d.ts.map +1 -0
  321. package/lib/opLifecycle/{opSplitter.mjs → opSplitter.js} +3 -3
  322. package/lib/opLifecycle/opSplitter.js.map +1 -0
  323. package/lib/opLifecycle/{outbox.d.mts → outbox.d.ts} +8 -8
  324. package/lib/opLifecycle/outbox.d.ts.map +1 -0
  325. package/lib/opLifecycle/{outbox.mjs → outbox.js} +12 -4
  326. package/lib/opLifecycle/outbox.js.map +1 -0
  327. package/lib/opLifecycle/{remoteMessageProcessor.d.mts → remoteMessageProcessor.d.ts} +5 -5
  328. package/lib/opLifecycle/remoteMessageProcessor.d.ts.map +1 -0
  329. package/lib/opLifecycle/{remoteMessageProcessor.mjs → remoteMessageProcessor.js} +2 -2
  330. package/lib/opLifecycle/remoteMessageProcessor.js.map +1 -0
  331. package/lib/{opProperties.d.mts → opProperties.d.ts} +1 -1
  332. package/lib/opProperties.d.ts.map +1 -0
  333. package/lib/{opProperties.mjs → opProperties.js} +1 -1
  334. package/lib/opProperties.js.map +1 -0
  335. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  336. package/lib/packageVersion.d.ts.map +1 -0
  337. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  338. package/lib/packageVersion.js.map +1 -0
  339. package/lib/{pendingStateManager.d.mts → pendingStateManager.d.ts} +3 -2
  340. package/lib/pendingStateManager.d.ts.map +1 -0
  341. package/lib/{pendingStateManager.mjs → pendingStateManager.js} +18 -10
  342. package/lib/pendingStateManager.js.map +1 -0
  343. package/lib/{scheduleManager.d.mts → scheduleManager.d.ts} +6 -3
  344. package/lib/scheduleManager.d.ts.map +1 -0
  345. package/lib/{scheduleManager.mjs → scheduleManager.js} +3 -3
  346. package/lib/scheduleManager.js.map +1 -0
  347. package/lib/{storageServiceWithAttachBlobs.d.mts → storageServiceWithAttachBlobs.d.ts} +1 -1
  348. package/lib/storageServiceWithAttachBlobs.d.ts.map +1 -0
  349. package/lib/{storageServiceWithAttachBlobs.mjs → storageServiceWithAttachBlobs.js} +1 -1
  350. package/lib/storageServiceWithAttachBlobs.js.map +1 -0
  351. package/lib/summary/{index.d.mts → index.d.ts} +13 -13
  352. package/lib/summary/index.d.ts.map +1 -0
  353. package/lib/summary/{index.mjs → index.js} +12 -12
  354. package/lib/summary/index.js.map +1 -0
  355. package/lib/summary/{orderedClientElection.d.mts → orderedClientElection.d.ts} +5 -1
  356. package/lib/summary/orderedClientElection.d.ts.map +1 -0
  357. package/lib/summary/{orderedClientElection.mjs → orderedClientElection.js} +2 -2
  358. package/lib/summary/orderedClientElection.js.map +1 -0
  359. package/lib/summary/{runWhileConnectedCoordinator.d.mts → runWhileConnectedCoordinator.d.ts} +2 -2
  360. package/lib/summary/runWhileConnectedCoordinator.d.ts.map +1 -0
  361. package/lib/summary/{runWhileConnectedCoordinator.mjs → runWhileConnectedCoordinator.js} +1 -1
  362. package/lib/summary/runWhileConnectedCoordinator.js.map +1 -0
  363. package/lib/summary/{runningSummarizer.d.mts → runningSummarizer.d.ts} +12 -11
  364. package/lib/summary/runningSummarizer.d.ts.map +1 -0
  365. package/lib/summary/{runningSummarizer.mjs → runningSummarizer.js} +108 -75
  366. package/lib/summary/runningSummarizer.js.map +1 -0
  367. package/lib/summary/{summarizer.d.mts → summarizer.d.ts} +5 -5
  368. package/lib/summary/summarizer.d.ts.map +1 -0
  369. package/lib/summary/{summarizer.mjs → summarizer.js} +4 -4
  370. package/lib/summary/summarizer.js.map +1 -0
  371. package/lib/summary/{summarizerClientElection.d.mts → summarizerClientElection.d.ts} +3 -3
  372. package/lib/summary/summarizerClientElection.d.ts.map +1 -0
  373. package/lib/summary/{summarizerClientElection.mjs → summarizerClientElection.js} +1 -1
  374. package/lib/summary/summarizerClientElection.js.map +1 -0
  375. package/lib/summary/{summarizerHeuristics.d.mts → summarizerHeuristics.d.ts} +4 -4
  376. package/lib/summary/summarizerHeuristics.d.ts.map +1 -0
  377. package/lib/summary/{summarizerHeuristics.mjs → summarizerHeuristics.js} +1 -1
  378. package/lib/summary/summarizerHeuristics.js.map +1 -0
  379. package/lib/summary/summarizerNode/{index.d.mts → index.d.ts} +4 -4
  380. package/lib/summary/summarizerNode/index.d.ts.map +1 -0
  381. package/lib/summary/summarizerNode/index.js +7 -0
  382. package/lib/summary/summarizerNode/index.js.map +1 -0
  383. package/lib/summary/summarizerNode/{summarizerNode.d.mts → summarizerNode.d.ts} +18 -8
  384. package/lib/summary/summarizerNode/summarizerNode.d.ts.map +1 -0
  385. package/lib/summary/summarizerNode/{summarizerNode.mjs → summarizerNode.js} +41 -53
  386. package/lib/summary/summarizerNode/summarizerNode.js.map +1 -0
  387. package/lib/summary/summarizerNode/{summarizerNodeUtils.d.mts → summarizerNodeUtils.d.ts} +11 -20
  388. package/lib/summary/summarizerNode/summarizerNodeUtils.d.ts.map +1 -0
  389. package/lib/summary/summarizerNode/{summarizerNodeUtils.mjs → summarizerNodeUtils.js} +1 -20
  390. package/lib/summary/summarizerNode/summarizerNodeUtils.js.map +1 -0
  391. package/lib/summary/summarizerNode/{summarizerNodeWithGc.d.mts → summarizerNodeWithGc.d.ts} +6 -7
  392. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.ts.map +1 -0
  393. package/lib/summary/summarizerNode/{summarizerNodeWithGc.mjs → summarizerNodeWithGc.js} +12 -12
  394. package/lib/summary/summarizerNode/summarizerNodeWithGc.js.map +1 -0
  395. package/lib/summary/{summarizerTypes.d.mts → summarizerTypes.d.ts} +11 -22
  396. package/lib/summary/summarizerTypes.d.ts.map +1 -0
  397. package/lib/summary/{summarizerTypes.mjs → summarizerTypes.js} +1 -1
  398. package/lib/summary/summarizerTypes.js.map +1 -0
  399. package/lib/summary/{summaryCollection.d.mts → summaryCollection.d.ts} +1 -1
  400. package/lib/summary/summaryCollection.d.ts.map +1 -0
  401. package/lib/summary/{summaryCollection.mjs → summaryCollection.js} +1 -1
  402. package/lib/summary/summaryCollection.js.map +1 -0
  403. package/lib/summary/{summaryFormat.d.mts → summaryFormat.d.ts} +16 -3
  404. package/lib/summary/summaryFormat.d.ts.map +1 -0
  405. package/lib/summary/{summaryFormat.mjs → summaryFormat.js} +1 -1
  406. package/lib/summary/summaryFormat.js.map +1 -0
  407. package/lib/summary/{summaryGenerator.d.mts → summaryGenerator.d.ts} +7 -6
  408. package/lib/summary/summaryGenerator.d.ts.map +1 -0
  409. package/lib/summary/{summaryGenerator.mjs → summaryGenerator.js} +11 -2
  410. package/lib/summary/summaryGenerator.js.map +1 -0
  411. package/lib/summary/{summaryManager.d.mts → summaryManager.d.ts} +6 -7
  412. package/lib/summary/summaryManager.d.ts.map +1 -0
  413. package/lib/summary/{summaryManager.mjs → summaryManager.js} +4 -5
  414. package/lib/summary/summaryManager.js.map +1 -0
  415. package/lib/test/batchTracker.spec.js +88 -0
  416. package/lib/test/batchTracker.spec.js.map +1 -0
  417. package/lib/test/blobManager.spec.js +835 -0
  418. package/lib/test/blobManager.spec.js.map +1 -0
  419. package/lib/test/channelCollection.spec.js +141 -0
  420. package/lib/test/channelCollection.spec.js.map +1 -0
  421. package/lib/test/containerRuntime.spec.js +1748 -0
  422. package/lib/test/containerRuntime.spec.js.map +1 -0
  423. package/lib/test/dataStoreContext.spec.js +801 -0
  424. package/lib/test/dataStoreContext.spec.js.map +1 -0
  425. package/lib/test/dataStoreCreation.spec.js +312 -0
  426. package/lib/test/dataStoreCreation.spec.js.map +1 -0
  427. package/lib/test/dataStoreRegistry.spec.js +26 -0
  428. package/lib/test/dataStoreRegistry.spec.js.map +1 -0
  429. package/lib/test/fuzz/fuzzUtils.js +66 -0
  430. package/lib/test/fuzz/fuzzUtils.js.map +1 -0
  431. package/lib/test/fuzz/summarizer.fuzz.spec.js +31 -0
  432. package/lib/test/fuzz/summarizer.fuzz.spec.js.map +1 -0
  433. package/lib/test/fuzz/summarizerFuzzMocks.js +162 -0
  434. package/lib/test/fuzz/summarizerFuzzMocks.js.map +1 -0
  435. package/lib/test/fuzz/summarizerFuzzSuite.js +106 -0
  436. package/lib/test/fuzz/summarizerFuzzSuite.js.map +1 -0
  437. package/lib/test/gc/garbageCollection.spec.js +1465 -0
  438. package/lib/test/gc/garbageCollection.spec.js.map +1 -0
  439. package/lib/test/gc/gcConfigs.spec.js +690 -0
  440. package/lib/test/gc/gcConfigs.spec.js.map +1 -0
  441. package/lib/test/gc/gcHelpers.spec.js +110 -0
  442. package/lib/test/gc/gcHelpers.spec.js.map +1 -0
  443. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js +68 -0
  444. package/lib/test/gc/gcReferenceGraphAlgorithm.spec.js.map +1 -0
  445. package/lib/test/gc/gcStats.spec.js +391 -0
  446. package/lib/test/gc/gcStats.spec.js.map +1 -0
  447. package/lib/test/gc/gcSummaryStateTracker.spec.js +228 -0
  448. package/lib/test/gc/gcSummaryStateTracker.spec.js.map +1 -0
  449. package/lib/test/gc/gcTelemetry.spec.js +530 -0
  450. package/lib/test/gc/gcTelemetry.spec.js.map +1 -0
  451. package/lib/test/gc/gcUnitTestHelpers.js +29 -0
  452. package/lib/test/gc/gcUnitTestHelpers.js.map +1 -0
  453. package/lib/test/gc/gcUnreferencedStateTracker.spec.js +192 -0
  454. package/lib/test/gc/gcUnreferencedStateTracker.spec.js.map +1 -0
  455. package/lib/test/getPendingBlobs.spec.js +193 -0
  456. package/lib/test/getPendingBlobs.spec.js.map +1 -0
  457. package/lib/test/hardwareStats.spec.js +93 -0
  458. package/lib/test/hardwareStats.spec.js.map +1 -0
  459. package/lib/test/index.js +6 -0
  460. package/lib/test/index.js.map +1 -0
  461. package/lib/test/opLifecycle/OpGroupingManager.spec.js +225 -0
  462. package/lib/test/opLifecycle/OpGroupingManager.spec.js.map +1 -0
  463. package/lib/test/opLifecycle/batchManager.spec.js +189 -0
  464. package/lib/test/opLifecycle/batchManager.spec.js.map +1 -0
  465. package/lib/test/opLifecycle/opCompressor.spec.js +74 -0
  466. package/lib/test/opLifecycle/opCompressor.spec.js.map +1 -0
  467. package/lib/test/opLifecycle/opDecompressor.spec.js +218 -0
  468. package/lib/test/opLifecycle/opDecompressor.spec.js.map +1 -0
  469. package/lib/test/opLifecycle/opSplitter.spec.js +272 -0
  470. package/lib/test/opLifecycle/opSplitter.spec.js.map +1 -0
  471. package/lib/test/opLifecycle/outbox.spec.js +675 -0
  472. package/lib/test/opLifecycle/outbox.spec.js.map +1 -0
  473. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js +196 -0
  474. package/lib/test/opLifecycle/remoteMessageProcessor.spec.js.map +1 -0
  475. package/lib/test/pendingStateManager.spec.js +329 -0
  476. package/lib/test/pendingStateManager.spec.js.map +1 -0
  477. package/lib/test/scheduleManager.spec.js +270 -0
  478. package/lib/test/scheduleManager.spec.js.map +1 -0
  479. package/lib/test/summarizerNode.spec.js +326 -0
  480. package/lib/test/summarizerNode.spec.js.map +1 -0
  481. package/lib/test/summarizerNodeWithGc.spec.js +318 -0
  482. package/lib/test/summarizerNodeWithGc.spec.js.map +1 -0
  483. package/lib/test/summary/orderedClientElection.spec.js +535 -0
  484. package/lib/test/summary/orderedClientElection.spec.js.map +1 -0
  485. package/lib/test/summary/runningSummarizer.spec.js +1349 -0
  486. package/lib/test/summary/runningSummarizer.spec.js.map +1 -0
  487. package/lib/test/summary/summarizer.spec.js +29 -0
  488. package/lib/test/summary/summarizer.spec.js.map +1 -0
  489. package/lib/test/summary/summarizerClientElection.spec.js +436 -0
  490. package/lib/test/summary/summarizerClientElection.spec.js.map +1 -0
  491. package/lib/test/summary/summarizerHeuristics.spec.js +289 -0
  492. package/lib/test/summary/summarizerHeuristics.spec.js.map +1 -0
  493. package/lib/test/summary/summaryCollection.spec.js +200 -0
  494. package/lib/test/summary/summaryCollection.spec.js.map +1 -0
  495. package/lib/test/summary/summaryManager.spec.js +430 -0
  496. package/lib/test/summary/summaryManager.spec.js.map +1 -0
  497. package/lib/test/summary/testQuorumClients.js +34 -0
  498. package/lib/test/summary/testQuorumClients.js.map +1 -0
  499. package/lib/test/throttler.spec.js +175 -0
  500. package/lib/test/throttler.spec.js.map +1 -0
  501. package/lib/test/types/validateContainerRuntimePrevious.generated.js +180 -0
  502. package/lib/test/types/validateContainerRuntimePrevious.generated.js.map +1 -0
  503. package/lib/{throttler.d.mts → throttler.d.ts} +1 -1
  504. package/lib/throttler.d.ts.map +1 -0
  505. package/lib/{throttler.mjs → throttler.js} +1 -1
  506. package/lib/throttler.js.map +1 -0
  507. package/package.json +99 -88
  508. package/src/batchTracker.ts +1 -1
  509. package/src/blobManager.ts +1 -1
  510. package/src/{dataStores.ts → channelCollection.ts} +467 -88
  511. package/src/connectionTelemetry.ts +42 -3
  512. package/src/containerHandleContext.ts +1 -1
  513. package/src/containerRuntime.ts +649 -462
  514. package/src/dataStore.ts +13 -15
  515. package/src/dataStoreContext.ts +203 -173
  516. package/src/dataStoreContexts.ts +1 -1
  517. package/src/deltaManagerSummarizerProxy.ts +132 -7
  518. package/src/gc/garbageCollection.ts +29 -16
  519. package/src/gc/gcConfigs.ts +3 -3
  520. package/src/gc/gcDefinitions.ts +10 -3
  521. package/src/gc/gcHelpers.ts +2 -2
  522. package/src/gc/gcReferenceGraphAlgorithm.ts +1 -1
  523. package/src/gc/gcSummaryStateTracker.ts +5 -6
  524. package/src/gc/gcTelemetry.ts +6 -6
  525. package/src/gc/gcUnreferencedStateTracker.ts +1 -1
  526. package/src/gc/index.ts +8 -8
  527. package/src/index.ts +16 -27
  528. package/src/messageTypes.ts +4 -4
  529. package/src/opLifecycle/README.md +2 -4
  530. package/src/opLifecycle/batchManager.ts +2 -2
  531. package/src/opLifecycle/definitions.ts +2 -2
  532. package/src/opLifecycle/index.ts +8 -8
  533. package/src/opLifecycle/opCompressor.ts +3 -3
  534. package/src/opLifecycle/opDecompressor.ts +3 -3
  535. package/src/opLifecycle/opGroupingManager.ts +3 -12
  536. package/src/opLifecycle/opSplitter.ts +3 -3
  537. package/src/opLifecycle/outbox.ts +29 -9
  538. package/src/opLifecycle/remoteMessageProcessor.ts +4 -4
  539. package/src/packageVersion.ts +1 -1
  540. package/src/pendingStateManager.ts +19 -13
  541. package/src/scheduleManager.ts +4 -4
  542. package/src/summary/index.ts +13 -12
  543. package/src/summary/orderedClientElection.ts +1 -1
  544. package/src/summary/runWhileConnectedCoordinator.ts +1 -1
  545. package/src/summary/runningSummarizer.ts +141 -93
  546. package/src/summary/summarizer.ts +7 -7
  547. package/src/summary/summarizerClientElection.ts +2 -2
  548. package/src/summary/summarizerHeuristics.ts +3 -3
  549. package/src/summary/summarizerNode/index.ts +6 -3
  550. package/src/summary/summarizerNode/summarizerNode.ts +54 -69
  551. package/src/summary/summarizerNode/summarizerNodeUtils.ts +16 -34
  552. package/src/summary/summarizerNode/summarizerNodeWithGc.ts +11 -17
  553. package/src/summary/summarizerTypes.ts +12 -24
  554. package/src/summary/summaryFormat.ts +16 -2
  555. package/src/summary/summaryGenerator.ts +16 -4
  556. package/src/summary/summaryManager.ts +6 -7
  557. package/tsconfig.cjs.json +7 -0
  558. package/tsconfig.json +2 -5
  559. package/dist/dataStores.d.ts.map +0 -1
  560. package/dist/dataStores.js.map +0 -1
  561. package/dist/deltaManagerProxyBase.d.ts.map +0 -1
  562. package/dist/deltaManagerProxyBase.js +0 -77
  563. package/dist/deltaManagerProxyBase.js.map +0 -1
  564. package/lib/batchTracker.d.mts.map +0 -1
  565. package/lib/batchTracker.mjs.map +0 -1
  566. package/lib/blobManager.d.mts.map +0 -1
  567. package/lib/blobManager.mjs.map +0 -1
  568. package/lib/connectionTelemetry.d.mts.map +0 -1
  569. package/lib/connectionTelemetry.mjs.map +0 -1
  570. package/lib/containerHandleContext.d.mts.map +0 -1
  571. package/lib/containerHandleContext.mjs.map +0 -1
  572. package/lib/containerRuntime.d.mts.map +0 -1
  573. package/lib/containerRuntime.mjs.map +0 -1
  574. package/lib/dataStore.d.mts.map +0 -1
  575. package/lib/dataStore.mjs.map +0 -1
  576. package/lib/dataStoreContext.d.mts.map +0 -1
  577. package/lib/dataStoreContext.mjs.map +0 -1
  578. package/lib/dataStoreContexts.d.mts.map +0 -1
  579. package/lib/dataStoreContexts.mjs.map +0 -1
  580. package/lib/dataStoreRegistry.d.mts.map +0 -1
  581. package/lib/dataStoreRegistry.mjs.map +0 -1
  582. package/lib/dataStores.d.mts.map +0 -1
  583. package/lib/dataStores.mjs.map +0 -1
  584. package/lib/deltaManagerProxyBase.d.mts +0 -35
  585. package/lib/deltaManagerProxyBase.d.mts.map +0 -1
  586. package/lib/deltaManagerProxyBase.mjs +0 -73
  587. package/lib/deltaManagerProxyBase.mjs.map +0 -1
  588. package/lib/deltaManagerSummarizerProxy.d.mts +0 -19
  589. package/lib/deltaManagerSummarizerProxy.d.mts.map +0 -1
  590. package/lib/deltaManagerSummarizerProxy.mjs +0 -38
  591. package/lib/deltaManagerSummarizerProxy.mjs.map +0 -1
  592. package/lib/deltaScheduler.d.mts.map +0 -1
  593. package/lib/deltaScheduler.mjs.map +0 -1
  594. package/lib/error.d.mts.map +0 -1
  595. package/lib/error.mjs.map +0 -1
  596. package/lib/gc/garbageCollection.d.mts.map +0 -1
  597. package/lib/gc/garbageCollection.mjs.map +0 -1
  598. package/lib/gc/gcConfigs.d.mts.map +0 -1
  599. package/lib/gc/gcConfigs.mjs.map +0 -1
  600. package/lib/gc/gcDefinitions.d.mts.map +0 -1
  601. package/lib/gc/gcDefinitions.mjs.map +0 -1
  602. package/lib/gc/gcHelpers.mjs.map +0 -1
  603. package/lib/gc/gcReferenceGraphAlgorithm.d.mts.map +0 -1
  604. package/lib/gc/gcReferenceGraphAlgorithm.mjs.map +0 -1
  605. package/lib/gc/gcSummaryDefinitions.d.mts.map +0 -1
  606. package/lib/gc/gcSummaryDefinitions.mjs.map +0 -1
  607. package/lib/gc/gcSummaryStateTracker.d.mts.map +0 -1
  608. package/lib/gc/gcSummaryStateTracker.mjs.map +0 -1
  609. package/lib/gc/gcTelemetry.d.mts.map +0 -1
  610. package/lib/gc/gcTelemetry.mjs.map +0 -1
  611. package/lib/gc/gcUnreferencedStateTracker.d.mts.map +0 -1
  612. package/lib/gc/gcUnreferencedStateTracker.mjs.map +0 -1
  613. package/lib/gc/index.d.mts.map +0 -1
  614. package/lib/gc/index.mjs.map +0 -1
  615. package/lib/index.d.mts.map +0 -1
  616. package/lib/index.mjs +0 -24
  617. package/lib/index.mjs.map +0 -1
  618. package/lib/messageTypes.d.mts.map +0 -1
  619. package/lib/messageTypes.mjs.map +0 -1
  620. package/lib/metadata.d.mts.map +0 -1
  621. package/lib/metadata.mjs.map +0 -1
  622. package/lib/opLifecycle/batchManager.d.mts.map +0 -1
  623. package/lib/opLifecycle/batchManager.mjs.map +0 -1
  624. package/lib/opLifecycle/definitions.d.mts.map +0 -1
  625. package/lib/opLifecycle/definitions.mjs.map +0 -1
  626. package/lib/opLifecycle/index.d.mts +0 -13
  627. package/lib/opLifecycle/index.d.mts.map +0 -1
  628. package/lib/opLifecycle/index.mjs +0 -12
  629. package/lib/opLifecycle/index.mjs.map +0 -1
  630. package/lib/opLifecycle/opCompressor.d.mts.map +0 -1
  631. package/lib/opLifecycle/opCompressor.mjs.map +0 -1
  632. package/lib/opLifecycle/opDecompressor.d.mts.map +0 -1
  633. package/lib/opLifecycle/opDecompressor.mjs.map +0 -1
  634. package/lib/opLifecycle/opGroupingManager.d.mts.map +0 -1
  635. package/lib/opLifecycle/opGroupingManager.mjs.map +0 -1
  636. package/lib/opLifecycle/opSplitter.d.mts.map +0 -1
  637. package/lib/opLifecycle/opSplitter.mjs.map +0 -1
  638. package/lib/opLifecycle/outbox.d.mts.map +0 -1
  639. package/lib/opLifecycle/outbox.mjs.map +0 -1
  640. package/lib/opLifecycle/remoteMessageProcessor.d.mts.map +0 -1
  641. package/lib/opLifecycle/remoteMessageProcessor.mjs.map +0 -1
  642. package/lib/opProperties.d.mts.map +0 -1
  643. package/lib/opProperties.mjs.map +0 -1
  644. package/lib/packageVersion.d.mts.map +0 -1
  645. package/lib/packageVersion.mjs.map +0 -1
  646. package/lib/pendingStateManager.d.mts.map +0 -1
  647. package/lib/pendingStateManager.mjs.map +0 -1
  648. package/lib/scheduleManager.d.mts.map +0 -1
  649. package/lib/scheduleManager.mjs.map +0 -1
  650. package/lib/storageServiceWithAttachBlobs.d.mts.map +0 -1
  651. package/lib/storageServiceWithAttachBlobs.mjs.map +0 -1
  652. package/lib/summary/index.d.mts.map +0 -1
  653. package/lib/summary/index.mjs.map +0 -1
  654. package/lib/summary/orderedClientElection.d.mts.map +0 -1
  655. package/lib/summary/orderedClientElection.mjs.map +0 -1
  656. package/lib/summary/runWhileConnectedCoordinator.d.mts.map +0 -1
  657. package/lib/summary/runWhileConnectedCoordinator.mjs.map +0 -1
  658. package/lib/summary/runningSummarizer.d.mts.map +0 -1
  659. package/lib/summary/runningSummarizer.mjs.map +0 -1
  660. package/lib/summary/summarizer.d.mts.map +0 -1
  661. package/lib/summary/summarizer.mjs.map +0 -1
  662. package/lib/summary/summarizerClientElection.d.mts.map +0 -1
  663. package/lib/summary/summarizerClientElection.mjs.map +0 -1
  664. package/lib/summary/summarizerHeuristics.d.mts.map +0 -1
  665. package/lib/summary/summarizerHeuristics.mjs.map +0 -1
  666. package/lib/summary/summarizerNode/index.d.mts.map +0 -1
  667. package/lib/summary/summarizerNode/index.mjs +0 -7
  668. package/lib/summary/summarizerNode/index.mjs.map +0 -1
  669. package/lib/summary/summarizerNode/summarizerNode.d.mts.map +0 -1
  670. package/lib/summary/summarizerNode/summarizerNode.mjs.map +0 -1
  671. package/lib/summary/summarizerNode/summarizerNodeUtils.d.mts.map +0 -1
  672. package/lib/summary/summarizerNode/summarizerNodeUtils.mjs.map +0 -1
  673. package/lib/summary/summarizerNode/summarizerNodeWithGc.d.mts.map +0 -1
  674. package/lib/summary/summarizerNode/summarizerNodeWithGc.mjs.map +0 -1
  675. package/lib/summary/summarizerTypes.d.mts.map +0 -1
  676. package/lib/summary/summarizerTypes.mjs.map +0 -1
  677. package/lib/summary/summaryCollection.d.mts.map +0 -1
  678. package/lib/summary/summaryCollection.mjs.map +0 -1
  679. package/lib/summary/summaryFormat.d.mts.map +0 -1
  680. package/lib/summary/summaryFormat.mjs.map +0 -1
  681. package/lib/summary/summaryGenerator.d.mts.map +0 -1
  682. package/lib/summary/summaryGenerator.mjs.map +0 -1
  683. package/lib/summary/summaryManager.d.mts.map +0 -1
  684. package/lib/summary/summaryManager.mjs.map +0 -1
  685. package/lib/throttler.d.mts.map +0 -1
  686. package/lib/throttler.mjs.map +0 -1
  687. package/src/deltaManagerProxyBase.ts +0 -111
@@ -8,28 +8,32 @@ 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
- gcDataBlobKey,
21
20
  IAttachMessage,
22
21
  IEnvelope,
22
+ IFluidDataStoreChannel,
23
23
  IFluidDataStoreContextDetached,
24
24
  IGarbageCollectionData,
25
25
  IInboundSignalMessage,
26
+ IFluidParentContext,
26
27
  InboundAttachMessage,
27
28
  ISummarizeResult,
28
29
  ISummaryTreeWithStats,
29
30
  ITelemetryContext,
31
+ IFluidDataStoreFactory,
32
+ IFluidDataStoreContext,
33
+ NamedFluidDataStoreRegistryEntries,
34
+ IFluidDataStoreRegistry,
30
35
  } from "@fluidframework/runtime-definitions";
31
36
  import {
32
- addBlobToSummary,
33
37
  convertSnapshotTreeToSummaryTree,
34
38
  convertSummaryTreeToITree,
35
39
  create404Response,
@@ -40,6 +44,8 @@ import {
40
44
  responseToException,
41
45
  SummaryTreeBuilder,
42
46
  unpackChildNodesUsedRoutes,
47
+ RequestParser,
48
+ encodeCompactIdToString,
43
49
  } from "@fluidframework/runtime-utils";
44
50
  import {
45
51
  createChildMonitoringContext,
@@ -49,32 +55,183 @@ import {
49
55
  LoggingError,
50
56
  MonitoringContext,
51
57
  tagCodeArtifacts,
58
+ createChildLogger,
52
59
  } from "@fluidframework/telemetry-utils";
53
60
  import { AttachState } from "@fluidframework/container-definitions";
54
61
  import { buildSnapshotTree } from "@fluidframework/driver-utils";
55
- import { assert, Lazy } from "@fluidframework/core-utils";
56
- import { v4 as uuid } from "uuid";
57
- import { DataStoreContexts } from "./dataStoreContexts";
58
- 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";
59
65
  import {
60
66
  FluidDataStoreContext,
61
67
  RemoteFluidDataStoreContext,
62
68
  LocalFluidDataStoreContext,
63
69
  createAttributesBlob,
64
70
  LocalDetachedFluidDataStoreContext,
65
- } from "./dataStoreContext";
66
- import { StorageServiceWithAttachBlobs } from "./storageServiceWithAttachBlobs";
67
- import { GCNodeType, detectOutboundRoutesViaDDSKey } from "./gc";
68
- import { IDataStoreAliasMessage, isDataStoreAliasMessage } from "./dataStore";
69
- 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
70
111
 
71
112
  type PendingAliasResolve = (success: boolean) => void;
72
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
+
73
229
  /**
74
230
  * This class encapsulates data store handling. Currently it is only used by the container runtime,
75
231
  * but eventually could be hosted on any channel once we formalize the channel api boundary.
232
+ * @internal
76
233
  */
77
- export class DataStores implements IDisposable {
234
+ export class ChannelCollection implements IFluidDataStoreChannel, IDisposable {
78
235
  // Stores tracked by the Domain
79
236
  private readonly pendingAttach = new Map<string, IAttachMessage>();
80
237
  // 0.24 back-compat attachingBeforeSummary
@@ -84,6 +241,8 @@ export class DataStores implements IDisposable {
84
241
 
85
242
  private readonly disposeOnce = new Lazy<void>(() => this.contexts.dispose());
86
243
 
244
+ public readonly entryPoint: IFluidHandle<FluidObject>;
245
+
87
246
  public readonly containerLoadStats: {
88
247
  // number of dataStores during loadContainer
89
248
  readonly containerLoadDataStoreCount: number;
@@ -102,30 +261,35 @@ export class DataStores implements IDisposable {
102
261
  Promise<AliasResult>
103
262
  >();
104
263
 
264
+ private readonly contexts: DataStoreContexts;
265
+
105
266
  constructor(
106
267
  private readonly baseSnapshot: ISnapshotTree | undefined,
107
- private readonly runtime: ContainerRuntime,
108
- private readonly submitAttachFn: (attachContent: IAttachMessage) => void,
109
- private readonly getCreateChildSummarizerNodeFn: (
110
- id: string,
111
- createParam: CreateChildSummarizerNodeParam,
112
- ) => CreateChildSummarizerNodeFn,
113
- private readonly deleteChildSummarizerNodeFn: (id: string) => void,
268
+ public readonly parentContext: IFluidParentContext,
114
269
  baseLogger: ITelemetryBaseLogger,
115
270
  private readonly gcNodeUpdated: (
116
271
  nodePath: string,
117
- timestampMs: number,
272
+ reason: "Loaded" | "Changed",
273
+ timestampMs?: number,
118
274
  packagePath?: readonly string[],
275
+ request?: IRequest,
276
+ headerData?: RuntimeHeaderData,
119
277
  ) => void,
120
278
  private readonly isDataStoreDeleted: (nodePath: string) => boolean,
121
279
  private readonly aliasMap: Map<string, string>,
122
- private readonly contexts: DataStoreContexts = new DataStoreContexts(baseLogger),
280
+ provideEntryPoint: (runtime: ChannelCollection) => Promise<FluidObject>,
123
281
  ) {
124
282
  this.mc = createChildMonitoringContext({ logger: baseLogger });
283
+ this.contexts = new DataStoreContexts(baseLogger);
125
284
  this.containerRuntimeHandle = new FluidObjectHandle(
126
- this.runtime,
285
+ this.parentContext,
127
286
  "/",
128
- 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,
129
293
  );
130
294
 
131
295
  // Extract stores stored inside the snapshot
@@ -146,16 +310,17 @@ export class DataStores implements IDisposable {
146
310
  unreferencedDataStoreCount++;
147
311
  }
148
312
  // If we have a detached container, then create local data store contexts.
149
- if (this.runtime.attachState !== AttachState.Detached) {
313
+ if (this.parentContext.attachState !== AttachState.Detached) {
150
314
  dataStoreContext = new RemoteFluidDataStoreContext({
151
315
  id: key,
152
316
  snapshotTree: value,
153
- runtime: this.runtime,
154
- storage: this.runtime.storage,
155
- scope: this.runtime.scope,
156
- 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, {
157
321
  type: CreateSummarizerNodeSource.FromSummary,
158
322
  }),
323
+ loadingGroupId: value.groupId,
159
324
  });
160
325
  } else {
161
326
  if (typeof value !== "object") {
@@ -165,10 +330,10 @@ export class DataStores implements IDisposable {
165
330
  dataStoreContext = new LocalFluidDataStoreContext({
166
331
  id: key,
167
332
  pkg: undefined,
168
- runtime: this.runtime,
169
- storage: this.runtime.storage,
170
- scope: this.runtime.scope,
171
- 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, {
172
337
  type: CreateSummarizerNodeSource.FromSummary,
173
338
  }),
174
339
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(key),
@@ -200,7 +365,20 @@ export class DataStores implements IDisposable {
200
365
  /** For sampling. Only log once per container */
201
366
  private shouldSendAttachLog = true;
202
367
 
203
- public processAttachMessage(message: ISequencedDocumentMessage, local: boolean) {
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) {
204
382
  const attachMessage = message.contents as InboundAttachMessage;
205
383
 
206
384
  this.dataStoresSinceLastGC.push(attachMessage.id);
@@ -209,7 +387,7 @@ export class DataStores implements IDisposable {
209
387
  const foundGCData = processAttachMessageGCData(attachMessage.snapshot, (nodeId, toPath) => {
210
388
  // nodeId is the relative path under the node being attached. Always starts with "/", but no trailing "/" after an id
211
389
  const fromPath = `/${attachMessage.id}${nodeId === "/" ? "" : nodeId}`;
212
- this.runtime.addedGCOutboundReference(
390
+ this.parentContext.addedGCOutboundReference?.(
213
391
  { absolutePath: fromPath },
214
392
  { absolutePath: toPath },
215
393
  );
@@ -268,23 +446,27 @@ export class DataStores implements IDisposable {
268
446
  const remoteFluidDataStoreContext = new RemoteFluidDataStoreContext({
269
447
  id: attachMessage.id,
270
448
  snapshotTree,
271
- runtime: this.runtime,
272
- storage: new StorageServiceWithAttachBlobs(this.runtime.storage, flatAttachBlobs),
273
- scope: this.runtime.scope,
274
- createSummarizerNodeFn: this.getCreateChildSummarizerNodeFn(attachMessage.id, {
275
- type: CreateSummarizerNodeSource.FromAttach,
276
- sequenceNumber: message.sequenceNumber,
277
- snapshot: attachMessage.snapshot ?? {
278
- 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
+ },
279
461
  },
280
- }),
462
+ ),
281
463
  pkg,
282
464
  });
283
465
 
284
466
  this.contexts.addBoundOrRemoted(remoteFluidDataStoreContext);
285
467
  }
286
468
 
287
- public processAliasMessage(
469
+ private processAliasMessage(
288
470
  message: ISequencedDocumentMessage,
289
471
  localOpMetadata: unknown,
290
472
  local: boolean,
@@ -333,9 +515,9 @@ export class DataStores implements IDisposable {
333
515
  const handle = new FluidObjectHandle(
334
516
  context,
335
517
  aliasMessage.internalId,
336
- this.runtime.IFluidHandleContext,
518
+ this.parentContext.IFluidHandleContext,
337
519
  );
338
- this.runtime.addedGCOutboundReference(this.containerRuntimeHandle, handle);
520
+ this.parentContext.addedGCOutboundReference?.(this.containerRuntimeHandle, handle);
339
521
 
340
522
  this.aliasMap.set(aliasMessage.alias, context.id);
341
523
  context.setInMemoryRoot();
@@ -348,13 +530,8 @@ export class DataStores implements IDisposable {
348
530
 
349
531
  /** Package up the context's attach summary etc into an IAttachMessage */
350
532
  private generateAttachMessage(localContext: LocalFluidDataStoreContext): IAttachMessage {
351
- const { attachSummary, type, gcData } = localContext.getAttachData(
352
- /* includeGCData: */ true,
353
- );
354
-
355
- if (gcData !== undefined) {
356
- addBlobToSummary(attachSummary, gcDataBlobKey, JSON.stringify(gcData));
357
- }
533
+ const { attachSummary } = localContext.getAttachData(/* includeGCData: */ true);
534
+ const type = localContext.packagePath[localContext.packagePath.length - 1];
358
535
 
359
536
  // Attach message needs the summary in ITree format. Convert the ISummaryTree into an ITree.
360
537
  const snapshot = convertSummaryTreeToITree(attachSummary.summary);
@@ -380,57 +557,102 @@ export class DataStores implements IDisposable {
380
557
  * globally visible. Move it to attaching state and send an "attach" op for it.
381
558
  * If the container is detached, this data store will be part of the summary that makes the container attached.
382
559
  */
383
- if (this.runtime.attachState !== AttachState.Detached) {
560
+ if (this.parentContext.attachState !== AttachState.Detached) {
384
561
  localContext.emit("attaching");
385
562
  const message = this.generateAttachMessage(localContext);
386
563
 
387
564
  this.pendingAttach.set(id, message);
388
- this.submitAttachFn(message);
565
+ this.parentContext.submitMessage(ContainerMessageType.Attach, message, undefined);
389
566
  this.attachOpFiredForDataStore.add(id);
390
567
  }
391
568
 
392
569
  this.contexts.bind(id);
393
570
  }
394
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
+
395
605
  public createDetachedDataStoreCore(
396
606
  pkg: Readonly<string[]>,
397
- isRoot: boolean,
398
- id = uuid(),
607
+ loadingGroupId?: string,
399
608
  ): IFluidDataStoreContextDetached {
400
- assert(!id.includes("/"), 0x30c /* Id cannot contain slashes */);
609
+ const id = this.createDataStoreId();
401
610
 
402
611
  const context = new LocalDetachedFluidDataStoreContext({
403
612
  id,
404
613
  pkg,
405
- runtime: this.runtime,
406
- storage: this.runtime.storage,
407
- scope: this.runtime.scope,
408
- 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, {
409
618
  type: CreateSummarizerNodeSource.Local,
410
619
  }),
411
620
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
412
621
  snapshotTree: undefined,
413
- 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
+ ),
414
631
  });
415
632
  this.contexts.addUnbound(context);
416
633
  return context;
417
634
  }
418
635
 
419
- public _createFluidDataStoreContext(pkg: string[], id: string, props?: any) {
420
- 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();
421
642
  const context = new LocalFluidDataStoreContext({
422
643
  id,
423
644
  pkg,
424
- runtime: this.runtime,
425
- storage: this.runtime.storage,
426
- scope: this.runtime.scope,
427
- 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, {
428
649
  type: CreateSummarizerNodeSource.Local,
429
650
  }),
430
651
  makeLocallyVisibleFn: () => this.makeDataStoreLocallyVisible(id),
431
652
  snapshotTree: undefined,
432
653
  isRootDataStore: false,
433
654
  createProps: props,
655
+ loadingGroupId,
434
656
  });
435
657
  this.contexts.addUnbound(context);
436
658
  return context;
@@ -441,7 +663,17 @@ export class DataStores implements IDisposable {
441
663
  }
442
664
  public readonly dispose = () => this.disposeOnce.value;
443
665
 
444
- 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;
445
677
  const context = this.contexts.get(envelope.address);
446
678
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
447
679
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -454,10 +686,13 @@ export class DataStores implements IDisposable {
454
686
  });
455
687
  }
456
688
  assert(!!context, 0x160 /* "There should be a store context for the op" */);
457
- context.reSubmit(envelope.contents, localOpMetadata);
689
+ const innerContents = envelope.contents as FluidDataStoreMessage;
690
+ context.reSubmit(innerContents.type, innerContents.content, localOpMetadata);
458
691
  }
459
692
 
460
- 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;
461
696
  const context = this.contexts.get(envelope.address);
462
697
  // If the data store has been deleted, log an error and throw an error. If there are local changes for a
463
698
  // deleted data store, it can otherwise lead to inconsistent state when compared to other clients.
@@ -470,10 +705,21 @@ export class DataStores implements IDisposable {
470
705
  });
471
706
  }
472
707
  assert(!!context, 0x2e8 /* "There should be a store context for the op" */);
473
- context.rollback(envelope.contents, localOpMetadata);
708
+ const innerContents = envelope.contents as FluidDataStoreMessage;
709
+ context.rollback(innerContents.type, innerContents.content, localOpMetadata);
474
710
  }
475
711
 
476
- 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;
477
723
  const context = this.contexts.get(envelope.address);
478
724
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
479
725
  // corruption in case the data store that stashed the op is deleted.
@@ -484,20 +730,39 @@ export class DataStores implements IDisposable {
484
730
  return context.applyStashedOp(envelope.contents);
485
731
  }
486
732
 
487
- public async applyStashedAttachOp(message: IAttachMessage) {
733
+ private async applyStashedAttachOp(message: IAttachMessage) {
488
734
  this.pendingAttach.set(message.id, message);
489
735
  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
490
736
  this.processAttachMessage({ contents: message } as ISequencedDocumentMessage, false);
491
737
  }
492
738
 
493
- public processFluidDataStoreOp(
739
+ public process(
494
740
  message: ISequencedDocumentMessage,
495
741
  local: boolean,
496
742
  localMessageMetadata: unknown,
497
- addedOutboundReference: (fromNodePath: string, toNodePath: string) => void,
743
+ addedOutboundReference?: (fromNodePath: string, toNodePath: string) => void,
498
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
+
499
758
  const envelope = message.contents as IEnvelope;
500
- 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
+
501
766
  const context = this.contexts.get(envelope.address);
502
767
 
503
768
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
@@ -534,7 +799,10 @@ export class DataStores implements IDisposable {
534
799
 
535
800
  // By default, we use the new behavior of detecting outbound routes here.
536
801
  // If this setting is true, then DataStoreContext would be notifying GC instead.
537
- if (this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true) {
802
+ if (
803
+ this.mc.config.getBoolean(detectOutboundRoutesViaDDSKey) !== true &&
804
+ addedOutboundReference !== undefined
805
+ ) {
538
806
  // Notify GC of any outbound references that were added by this op.
539
807
  detectOutboundReferences(envelope, addedOutboundReference);
540
808
  }
@@ -543,6 +811,7 @@ export class DataStores implements IDisposable {
543
811
  // being used.
544
812
  this.gcNodeUpdated(
545
813
  `/${envelope.address}`,
814
+ "Changed",
546
815
  message.timestamp,
547
816
  context.isLoaded ? context.packagePath : undefined,
548
817
  );
@@ -636,7 +905,10 @@ export class DataStores implements IDisposable {
636
905
  return true;
637
906
  }
638
907
 
639
- 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 };
640
912
  const context = this.contexts.get(fluidDataStoreId);
641
913
  // If the data store has been deleted, log an error and ignore this message. This helps prevent document
642
914
  // corruption in case a deleted data store accidentally submitted a signal.
@@ -672,7 +944,7 @@ export class DataStores implements IDisposable {
672
944
  fluidDataStoreId,
673
945
  }),
674
946
  details: JSON.stringify({
675
- runtimeConnected: this.runtime.connected,
947
+ runtimeConnected: this.parentContext.connected,
676
948
  connected,
677
949
  }),
678
950
  },
@@ -736,7 +1008,7 @@ export class DataStores implements IDisposable {
736
1008
  /**
737
1009
  * Create a summary. Used when attaching or serializing a detached container.
738
1010
  */
739
- public createSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
1011
+ public getAttachSummary(telemetryContext?: ITelemetryContext): ISummaryTreeWithStats {
740
1012
  const builder = new SummaryTreeBuilder();
741
1013
  // Attaching graph of some stores can cause other stores to get bound too.
742
1014
  // So keep taking summary until no new stores get bound.
@@ -793,8 +1065,12 @@ export class DataStores implements IDisposable {
793
1065
  assert(context !== undefined, 0x2b6 /* Missing data store context */);
794
1066
  if (await context.isRoot()) {
795
1067
  // A root data store is basically a reference from the container runtime to the data store.
796
- const handle = new FluidObjectHandle(context, id, this.runtime.IFluidHandleContext);
797
- 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);
798
1074
  }
799
1075
  }
800
1076
  this.dataStoresSinceLastGC = [];
@@ -885,7 +1161,7 @@ export class DataStores implements IDisposable {
885
1161
  // Delete the contexts of unused data stores.
886
1162
  this.contexts.delete(dataStoreId);
887
1163
  // Delete the summarizer node of the unused data stores.
888
- this.deleteChildSummarizerNodeFn(dataStoreId);
1164
+ this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
889
1165
  }
890
1166
  }
891
1167
 
@@ -927,7 +1203,7 @@ export class DataStores implements IDisposable {
927
1203
  // Delete the contexts of sweep ready data stores.
928
1204
  this.contexts.delete(dataStoreId);
929
1205
  // Delete the summarizer node of the sweep ready data stores.
930
- this.deleteChildSummarizerNodeFn(dataStoreId);
1206
+ this.parentContext.deleteChildSummarizerNode?.(dataStoreId);
931
1207
  }
932
1208
  return Array.from(sweepReadyDataStoreRoutes);
933
1209
  }
@@ -1001,6 +1277,69 @@ export class DataStores implements IDisposable {
1001
1277
  }
1002
1278
  return GCNodeType.SubDataStore;
1003
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
+ }
1004
1343
  }
1005
1344
 
1006
1345
  export function getSummaryForDatastores(
@@ -1032,6 +1371,8 @@ export function getSummaryForDatastores(
1032
1371
 
1033
1372
  /**
1034
1373
  * Traverse this op's contents and detect any outbound routes that were added by this op.
1374
+ *
1375
+ * @internal
1035
1376
  */
1036
1377
  export function detectOutboundReferences(
1037
1378
  envelope: IEnvelope,
@@ -1068,3 +1409,41 @@ export function detectOutboundReferences(
1068
1409
  const fromPath = ["", envelope.address, ddsAddress].join("/");
1069
1410
  outboundPaths.forEach((toPath) => addedOutboundReference(fromPath, toPath));
1070
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
+ }