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

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