@fluidframework/driver-utils 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.246488

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 (287) hide show
  1. package/.eslintrc.cjs +5 -2
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +32 -0
  4. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  5. package/api-extractor-lint.json +1 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/driver-utils.api.md +7 -10
  8. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts +2 -2
  9. package/dist/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -1
  10. package/dist/adapters/compression/documentServiceCompressionAdapter.js +4 -4
  11. package/dist/adapters/compression/documentServiceCompressionAdapter.js.map +1 -1
  12. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts +2 -2
  13. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts.map +1 -1
  14. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.js +7 -7
  15. package/dist/adapters/compression/documentServiceFactoryCompressionAdapter.js.map +1 -1
  16. package/dist/adapters/compression/index.d.ts +3 -3
  17. package/dist/adapters/compression/index.d.ts.map +1 -1
  18. package/dist/adapters/compression/index.js +7 -7
  19. package/dist/adapters/compression/index.js.map +1 -1
  20. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts +2 -2
  21. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts.map +1 -1
  22. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.js +11 -11
  23. package/dist/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.js.map +1 -1
  24. package/dist/adapters/compression/summaryblob/index.d.ts +1 -1
  25. package/dist/adapters/compression/summaryblob/index.d.ts.map +1 -1
  26. package/dist/adapters/compression/summaryblob/index.js +3 -3
  27. package/dist/adapters/compression/summaryblob/index.js.map +1 -1
  28. package/dist/adapters/index.d.ts +2 -2
  29. package/dist/adapters/index.d.ts.map +1 -1
  30. package/dist/adapters/index.js +6 -6
  31. package/dist/adapters/index.js.map +1 -1
  32. package/dist/adapters/predefinedAdapters.d.ts +1 -1
  33. package/dist/adapters/predefinedAdapters.d.ts.map +1 -1
  34. package/dist/adapters/predefinedAdapters.js +4 -4
  35. package/dist/adapters/predefinedAdapters.js.map +1 -1
  36. package/dist/documentStorageServiceProxy.d.ts +0 -1
  37. package/dist/documentStorageServiceProxy.d.ts.map +1 -1
  38. package/dist/documentStorageServiceProxy.js +0 -3
  39. package/dist/documentStorageServiceProxy.js.map +1 -1
  40. package/dist/driver-utils-alpha.d.ts +2 -2
  41. package/dist/driver-utils-beta.d.ts +2 -2
  42. package/dist/driver-utils-public.d.ts +2 -2
  43. package/dist/driver-utils-untrimmed.d.ts +9 -9
  44. package/dist/index.d.ts +17 -17
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +63 -63
  47. package/dist/index.js.map +1 -1
  48. package/dist/insecureUrlResolver.d.ts +3 -2
  49. package/dist/insecureUrlResolver.d.ts.map +1 -1
  50. package/dist/insecureUrlResolver.js +8 -6
  51. package/dist/insecureUrlResolver.js.map +1 -1
  52. package/dist/messageRecognition.d.ts.map +1 -1
  53. package/dist/messageRecognition.js +2 -2
  54. package/dist/messageRecognition.js.map +1 -1
  55. package/dist/network.d.ts +2 -2
  56. package/dist/network.d.ts.map +1 -1
  57. package/dist/network.js.map +1 -1
  58. package/dist/networkUtils.d.ts +2 -3
  59. package/dist/networkUtils.d.ts.map +1 -1
  60. package/dist/networkUtils.js +3 -3
  61. package/dist/networkUtils.js.map +1 -1
  62. package/dist/package.json +3 -0
  63. package/dist/packageVersion.d.ts +1 -1
  64. package/dist/packageVersion.js +1 -1
  65. package/dist/packageVersion.js.map +1 -1
  66. package/dist/parallelRequests.d.ts +7 -3
  67. package/dist/parallelRequests.d.ts.map +1 -1
  68. package/dist/parallelRequests.js +12 -12
  69. package/dist/parallelRequests.js.map +1 -1
  70. package/dist/prefetchDocumentStorageService.d.ts +1 -1
  71. package/dist/prefetchDocumentStorageService.d.ts.map +1 -1
  72. package/dist/prefetchDocumentStorageService.js +6 -6
  73. package/dist/prefetchDocumentStorageService.js.map +1 -1
  74. package/dist/runWithRetry.js +6 -6
  75. package/dist/runWithRetry.js.map +1 -1
  76. package/dist/treeConversions.d.ts.map +1 -1
  77. package/dist/treeConversions.js +7 -6
  78. package/dist/treeConversions.js.map +1 -1
  79. package/dist/tsdoc-metadata.json +1 -1
  80. package/lib/adapters/compression/{compressionTypes.d.mts → compressionTypes.d.ts} +1 -1
  81. package/lib/adapters/compression/compressionTypes.d.ts.map +1 -0
  82. package/lib/adapters/compression/{compressionTypes.mjs → compressionTypes.js} +1 -1
  83. package/lib/adapters/compression/compressionTypes.js.map +1 -0
  84. package/lib/adapters/compression/{documentServiceCompressionAdapter.d.mts → documentServiceCompressionAdapter.d.ts} +3 -3
  85. package/lib/adapters/compression/documentServiceCompressionAdapter.d.ts.map +1 -0
  86. package/lib/adapters/compression/{documentServiceCompressionAdapter.mjs → documentServiceCompressionAdapter.js} +3 -3
  87. package/lib/adapters/compression/documentServiceCompressionAdapter.js.map +1 -0
  88. package/lib/adapters/compression/{documentServiceFactoryCompressionAdapter.d.mts → documentServiceFactoryCompressionAdapter.d.ts} +3 -3
  89. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.ts.map +1 -0
  90. package/lib/adapters/compression/{documentServiceFactoryCompressionAdapter.mjs → documentServiceFactoryCompressionAdapter.js} +4 -4
  91. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.js.map +1 -0
  92. package/lib/adapters/compression/{index.d.mts → index.d.ts} +4 -4
  93. package/lib/adapters/compression/index.d.ts.map +1 -0
  94. package/lib/adapters/compression/{index.mjs → index.js} +4 -4
  95. package/lib/adapters/compression/index.js.map +1 -0
  96. package/lib/adapters/compression/summaryblob/{documentStorageServiceSummaryBlobCompressionAdapter.d.mts → documentStorageServiceSummaryBlobCompressionAdapter.d.ts} +3 -3
  97. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.ts.map +1 -0
  98. package/lib/adapters/compression/summaryblob/{documentStorageServiceSummaryBlobCompressionAdapter.mjs → documentStorageServiceSummaryBlobCompressionAdapter.js} +3 -3
  99. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.js.map +1 -0
  100. package/lib/adapters/compression/summaryblob/{index.mjs → index.d.ts} +2 -2
  101. package/lib/adapters/compression/summaryblob/index.d.ts.map +1 -0
  102. package/lib/adapters/compression/summaryblob/{index.d.mts → index.js} +2 -2
  103. package/lib/adapters/compression/summaryblob/index.js.map +1 -0
  104. package/lib/adapters/{index.d.mts → index.d.ts} +3 -3
  105. package/lib/adapters/index.d.ts.map +1 -0
  106. package/lib/adapters/{index.mjs → index.js} +3 -3
  107. package/lib/adapters/index.js.map +1 -0
  108. package/lib/adapters/{predefinedAdapters.d.mts → predefinedAdapters.d.ts} +2 -2
  109. package/lib/adapters/predefinedAdapters.d.ts.map +1 -0
  110. package/lib/adapters/{predefinedAdapters.mjs → predefinedAdapters.js} +2 -2
  111. package/lib/adapters/predefinedAdapters.js.map +1 -0
  112. package/lib/{blob.d.mts → blob.d.ts} +1 -1
  113. package/lib/blob.d.ts.map +1 -0
  114. package/lib/{blob.mjs → blob.js} +1 -1
  115. package/lib/blob.js.map +1 -0
  116. package/lib/{buildSnapshotTree.d.mts → buildSnapshotTree.d.ts} +1 -1
  117. package/lib/buildSnapshotTree.d.ts.map +1 -0
  118. package/lib/{buildSnapshotTree.mjs → buildSnapshotTree.js} +1 -1
  119. package/lib/buildSnapshotTree.js.map +1 -0
  120. package/lib/{documentServiceFactoryProxy.d.mts → documentServiceFactoryProxy.d.ts} +1 -1
  121. package/lib/documentServiceFactoryProxy.d.ts.map +1 -0
  122. package/lib/{documentServiceFactoryProxy.mjs → documentServiceFactoryProxy.js} +1 -1
  123. package/lib/documentServiceFactoryProxy.js.map +1 -0
  124. package/lib/{documentServiceProxy.d.mts → documentServiceProxy.d.ts} +1 -1
  125. package/lib/documentServiceProxy.d.ts.map +1 -0
  126. package/lib/{documentServiceProxy.mjs → documentServiceProxy.js} +1 -1
  127. package/lib/documentServiceProxy.js.map +1 -0
  128. package/lib/{documentStorageServiceProxy.d.mts → documentStorageServiceProxy.d.ts} +1 -2
  129. package/lib/documentStorageServiceProxy.d.ts.map +1 -0
  130. package/lib/{documentStorageServiceProxy.mjs → documentStorageServiceProxy.js} +1 -4
  131. package/lib/documentStorageServiceProxy.js.map +1 -0
  132. package/lib/{driver-utils-alpha.d.mts → driver-utils-alpha.d.ts} +2 -2
  133. package/lib/{driver-utils-public.d.mts → driver-utils-beta.d.ts} +2 -2
  134. package/lib/{driver-utils-beta.d.mts → driver-utils-public.d.ts} +2 -2
  135. package/lib/{driver-utils-untrimmed.d.mts → driver-utils-untrimmed.d.ts} +9 -9
  136. package/lib/{error.d.mts → error.d.ts} +1 -1
  137. package/lib/error.d.ts.map +1 -0
  138. package/lib/{error.mjs → error.js} +1 -1
  139. package/lib/error.js.map +1 -0
  140. package/lib/{index.d.mts → index.d.ts} +18 -18
  141. package/lib/index.d.ts.map +1 -0
  142. package/lib/{index.mjs → index.js} +18 -18
  143. package/lib/index.js.map +1 -0
  144. package/lib/{insecureUrlResolver.d.mts → insecureUrlResolver.d.ts} +4 -3
  145. package/lib/insecureUrlResolver.d.ts.map +1 -0
  146. package/lib/{insecureUrlResolver.mjs → insecureUrlResolver.js} +9 -7
  147. package/lib/insecureUrlResolver.js.map +1 -0
  148. package/lib/{messageRecognition.d.mts → messageRecognition.d.ts} +5 -1
  149. package/lib/messageRecognition.d.ts.map +1 -0
  150. package/lib/{messageRecognition.mjs → messageRecognition.js} +5 -1
  151. package/lib/messageRecognition.js.map +1 -0
  152. package/lib/{network.d.mts → network.d.ts} +3 -3
  153. package/lib/network.d.ts.map +1 -0
  154. package/lib/{network.mjs → network.js} +1 -1
  155. package/lib/network.js.map +1 -0
  156. package/lib/networkUtils.d.ts +10 -0
  157. package/lib/networkUtils.d.ts.map +1 -0
  158. package/lib/{networkUtils.mjs → networkUtils.js} +2 -2
  159. package/lib/networkUtils.js.map +1 -0
  160. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  161. package/lib/packageVersion.d.ts.map +1 -0
  162. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  163. package/lib/packageVersion.js.map +1 -0
  164. package/lib/{parallelRequests.d.mts → parallelRequests.d.ts} +8 -4
  165. package/lib/parallelRequests.d.ts.map +1 -0
  166. package/lib/{parallelRequests.mjs → parallelRequests.js} +10 -5
  167. package/lib/parallelRequests.js.map +1 -0
  168. package/lib/{prefetchDocumentStorageService.d.mts → prefetchDocumentStorageService.d.ts} +6 -2
  169. package/lib/prefetchDocumentStorageService.d.ts.map +1 -0
  170. package/lib/{prefetchDocumentStorageService.mjs → prefetchDocumentStorageService.js} +7 -3
  171. package/lib/prefetchDocumentStorageService.js.map +1 -0
  172. package/lib/{rateLimiter.d.mts → rateLimiter.d.ts} +1 -1
  173. package/lib/rateLimiter.d.ts.map +1 -0
  174. package/lib/{rateLimiter.mjs → rateLimiter.js} +1 -1
  175. package/lib/rateLimiter.js.map +1 -0
  176. package/lib/{readAndParse.d.mts → readAndParse.d.ts} +1 -1
  177. package/lib/readAndParse.d.ts.map +1 -0
  178. package/lib/{readAndParse.mjs → readAndParse.js} +1 -1
  179. package/lib/readAndParse.js.map +1 -0
  180. package/lib/{runWithRetry.d.mts → runWithRetry.d.ts} +1 -1
  181. package/lib/runWithRetry.d.ts.map +1 -0
  182. package/lib/{runWithRetry.mjs → runWithRetry.js} +3 -3
  183. package/lib/runWithRetry.js.map +1 -0
  184. package/lib/{storageUtils.d.mts → storageUtils.d.ts} +1 -1
  185. package/lib/storageUtils.d.ts.map +1 -0
  186. package/lib/{storageUtils.mjs → storageUtils.js} +1 -1
  187. package/lib/storageUtils.js.map +1 -0
  188. package/lib/{summaryForCreateNew.d.mts → summaryForCreateNew.d.ts} +1 -1
  189. package/lib/summaryForCreateNew.d.ts.map +1 -0
  190. package/lib/{summaryForCreateNew.mjs → summaryForCreateNew.js} +1 -1
  191. package/lib/summaryForCreateNew.js.map +1 -0
  192. package/lib/test/insecureUrlResolverTest.spec.js +101 -0
  193. package/lib/test/insecureUrlResolverTest.spec.js.map +1 -0
  194. package/lib/test/parallelRequests.spec.js +186 -0
  195. package/lib/test/parallelRequests.spec.js.map +1 -0
  196. package/lib/test/rateLimiter.spec.js +85 -0
  197. package/lib/test/rateLimiter.spec.js.map +1 -0
  198. package/lib/test/runWithRetry.spec.js +180 -0
  199. package/lib/test/runWithRetry.spec.js.map +1 -0
  200. package/lib/test/summaryCompressionData.js +170 -0
  201. package/lib/test/summaryCompressionData.js.map +1 -0
  202. package/lib/test/summaryCompresssionTester.spec.js +429 -0
  203. package/lib/test/summaryCompresssionTester.spec.js.map +1 -0
  204. package/lib/test/types/validateDriverUtilsPrevious.generated.js +108 -0
  205. package/lib/test/types/validateDriverUtilsPrevious.generated.js.map +1 -0
  206. package/lib/{treeConversions.d.mts → treeConversions.d.ts} +1 -1
  207. package/lib/treeConversions.d.ts.map +1 -0
  208. package/lib/{treeConversions.mjs → treeConversions.js} +4 -3
  209. package/lib/treeConversions.js.map +1 -0
  210. package/package.json +74 -27
  211. package/src/adapters/compression/documentServiceCompressionAdapter.ts +3 -3
  212. package/src/adapters/compression/documentServiceFactoryCompressionAdapter.ts +4 -4
  213. package/src/adapters/compression/index.ts +3 -3
  214. package/src/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.ts +2 -2
  215. package/src/adapters/compression/summaryblob/index.ts +1 -1
  216. package/src/adapters/index.ts +2 -2
  217. package/src/adapters/predefinedAdapters.ts +1 -1
  218. package/src/documentStorageServiceProxy.ts +0 -4
  219. package/src/index.ts +17 -17
  220. package/src/insecureUrlResolver.ts +7 -5
  221. package/src/messageRecognition.ts +1 -0
  222. package/src/network.ts +2 -2
  223. package/src/networkUtils.ts +3 -4
  224. package/src/packageVersion.ts +1 -1
  225. package/src/parallelRequests.ts +12 -11
  226. package/src/prefetchDocumentStorageService.ts +3 -2
  227. package/src/runWithRetry.ts +2 -2
  228. package/src/treeConversions.ts +3 -2
  229. package/tsconfig.cjs.json +7 -0
  230. package/tsconfig.json +2 -5
  231. package/lib/adapters/compression/compressionTypes.d.mts.map +0 -1
  232. package/lib/adapters/compression/compressionTypes.mjs.map +0 -1
  233. package/lib/adapters/compression/documentServiceCompressionAdapter.d.mts.map +0 -1
  234. package/lib/adapters/compression/documentServiceCompressionAdapter.mjs.map +0 -1
  235. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.d.mts.map +0 -1
  236. package/lib/adapters/compression/documentServiceFactoryCompressionAdapter.mjs.map +0 -1
  237. package/lib/adapters/compression/index.d.mts.map +0 -1
  238. package/lib/adapters/compression/index.mjs.map +0 -1
  239. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.d.mts.map +0 -1
  240. package/lib/adapters/compression/summaryblob/documentStorageServiceSummaryBlobCompressionAdapter.mjs.map +0 -1
  241. package/lib/adapters/compression/summaryblob/index.d.mts.map +0 -1
  242. package/lib/adapters/compression/summaryblob/index.mjs.map +0 -1
  243. package/lib/adapters/index.d.mts.map +0 -1
  244. package/lib/adapters/index.mjs.map +0 -1
  245. package/lib/adapters/predefinedAdapters.d.mts.map +0 -1
  246. package/lib/adapters/predefinedAdapters.mjs.map +0 -1
  247. package/lib/blob.d.mts.map +0 -1
  248. package/lib/blob.mjs.map +0 -1
  249. package/lib/buildSnapshotTree.d.mts.map +0 -1
  250. package/lib/buildSnapshotTree.mjs.map +0 -1
  251. package/lib/documentServiceFactoryProxy.d.mts.map +0 -1
  252. package/lib/documentServiceFactoryProxy.mjs.map +0 -1
  253. package/lib/documentServiceProxy.d.mts.map +0 -1
  254. package/lib/documentServiceProxy.mjs.map +0 -1
  255. package/lib/documentStorageServiceProxy.d.mts.map +0 -1
  256. package/lib/documentStorageServiceProxy.mjs.map +0 -1
  257. package/lib/error.d.mts.map +0 -1
  258. package/lib/error.mjs.map +0 -1
  259. package/lib/index.d.mts.map +0 -1
  260. package/lib/index.mjs.map +0 -1
  261. package/lib/insecureUrlResolver.d.mts.map +0 -1
  262. package/lib/insecureUrlResolver.mjs.map +0 -1
  263. package/lib/messageRecognition.d.mts.map +0 -1
  264. package/lib/messageRecognition.mjs.map +0 -1
  265. package/lib/network.d.mts.map +0 -1
  266. package/lib/network.mjs.map +0 -1
  267. package/lib/networkUtils.d.mts +0 -11
  268. package/lib/networkUtils.d.mts.map +0 -1
  269. package/lib/networkUtils.mjs.map +0 -1
  270. package/lib/packageVersion.d.mts.map +0 -1
  271. package/lib/packageVersion.mjs.map +0 -1
  272. package/lib/parallelRequests.d.mts.map +0 -1
  273. package/lib/parallelRequests.mjs.map +0 -1
  274. package/lib/prefetchDocumentStorageService.d.mts.map +0 -1
  275. package/lib/prefetchDocumentStorageService.mjs.map +0 -1
  276. package/lib/rateLimiter.d.mts.map +0 -1
  277. package/lib/rateLimiter.mjs.map +0 -1
  278. package/lib/readAndParse.d.mts.map +0 -1
  279. package/lib/readAndParse.mjs.map +0 -1
  280. package/lib/runWithRetry.d.mts.map +0 -1
  281. package/lib/runWithRetry.mjs.map +0 -1
  282. package/lib/storageUtils.d.mts.map +0 -1
  283. package/lib/storageUtils.mjs.map +0 -1
  284. package/lib/summaryForCreateNew.d.mts.map +0 -1
  285. package/lib/summaryForCreateNew.mjs.map +0 -1
  286. package/lib/treeConversions.d.mts.map +0 -1
  287. package/lib/treeConversions.mjs.map +0 -1
@@ -0,0 +1,180 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { strict as assert } from "assert";
6
+ import { DriverErrorTypes } from "@fluidframework/driver-definitions";
7
+ import { createChildLogger } from "@fluidframework/telemetry-utils";
8
+ import { runWithRetry } from "../runWithRetry.js";
9
+ const _setTimeout = global.setTimeout;
10
+ const fastSetTimeout = (callback, ms, ...args) => _setTimeout(callback, ms / 1000.0, ...args);
11
+ async function runWithFastSetTimeout(callback) {
12
+ global.setTimeout = fastSetTimeout;
13
+ return callback().finally(() => {
14
+ global.setTimeout = _setTimeout;
15
+ });
16
+ }
17
+ describe("runWithRetry Tests", () => {
18
+ const logger = createChildLogger();
19
+ it("Should succeed at first time", async () => {
20
+ let retryTimes = 1;
21
+ let success = false;
22
+ const api = async () => {
23
+ retryTimes -= 1;
24
+ return true;
25
+ };
26
+ let emitDelayInfoTimes = 0;
27
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {
28
+ onRetry: () => {
29
+ emitDelayInfoTimes += 1;
30
+ },
31
+ }));
32
+ assert.strictEqual(retryTimes, 0, "Should succeed at first time");
33
+ assert.strictEqual(success, true, "Retry should succeed ultimately");
34
+ assert.strictEqual(emitDelayInfoTimes, 0, "Should not emit delay at first time");
35
+ });
36
+ it("Check that it retries infinitely", async () => {
37
+ const maxTries = 5;
38
+ let retryTimes = maxTries;
39
+ let success = false;
40
+ const api = async () => {
41
+ if (retryTimes > 0) {
42
+ retryTimes -= 1;
43
+ const error = new Error("Throw error");
44
+ error.retryAfterSeconds = 10;
45
+ error.canRetry = true;
46
+ throw error;
47
+ }
48
+ return true;
49
+ };
50
+ let emitDelayInfoTimes = 0;
51
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {
52
+ onRetry: () => {
53
+ emitDelayInfoTimes += 1;
54
+ },
55
+ }));
56
+ assert.strictEqual(retryTimes, 0, "Should keep retrying until success");
57
+ assert.strictEqual(success, true, "Retry should succeed ultimately");
58
+ assert.strictEqual(emitDelayInfoTimes, maxTries, "Should emit delay at each try");
59
+ });
60
+ it("Check that it retries after retry seconds", async () => {
61
+ let retryTimes = 1;
62
+ let success = false;
63
+ const api = async () => {
64
+ if (retryTimes > 0) {
65
+ retryTimes -= 1;
66
+ const error = new Error("Throttle Error");
67
+ error.errorType = DriverErrorTypes.throttlingError;
68
+ error.retryAfterSeconds = 400;
69
+ error.canRetry = true;
70
+ throw error;
71
+ }
72
+ return true;
73
+ };
74
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {}));
75
+ assert.strictEqual(retryTimes, 0, "Should retry once");
76
+ assert.strictEqual(success, true, "Retry should succeed ultimately");
77
+ });
78
+ it("If error is just a string, should retry as canRetry is not false", async () => {
79
+ let retryTimes = 1;
80
+ let success = false;
81
+ const api = async () => {
82
+ if (retryTimes > 0) {
83
+ retryTimes -= 1;
84
+ const err = new Error("error");
85
+ err.canRetry = true;
86
+ throw err;
87
+ }
88
+ return true;
89
+ };
90
+ try {
91
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {}));
92
+ }
93
+ catch (error) { }
94
+ assert.strictEqual(retryTimes, 0, "Should retry");
95
+ assert.strictEqual(success, true, "Should succeed as retry should be successful");
96
+ });
97
+ it("Should not retry if canRetry is set as false", async () => {
98
+ let retryTimes = 1;
99
+ let success = false;
100
+ const api = async () => {
101
+ if (retryTimes > 0) {
102
+ retryTimes -= 1;
103
+ const error = new Error("error");
104
+ error.canRetry = false;
105
+ throw error;
106
+ }
107
+ return true;
108
+ };
109
+ try {
110
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {}));
111
+ assert.fail("Should not succeed");
112
+ }
113
+ catch (error) { }
114
+ assert.strictEqual(retryTimes, 0, "Should not retry");
115
+ assert.strictEqual(success, false, "Should not succeed as canRetry was not set");
116
+ });
117
+ it("Should not retry if canRetry is not set", async () => {
118
+ let retryTimes = 1;
119
+ let success = false;
120
+ const api = async () => {
121
+ if (retryTimes > 0) {
122
+ retryTimes -= 1;
123
+ const error = new Error("error");
124
+ throw error;
125
+ }
126
+ return true;
127
+ };
128
+ try {
129
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {}));
130
+ assert.fail("Should not succeed");
131
+ }
132
+ catch (error) { }
133
+ assert.strictEqual(retryTimes, 0, "Should not retry");
134
+ assert.strictEqual(success, false, "Should not succeed as canRetry was not set");
135
+ });
136
+ it("Should not retry if it is disabled", async () => {
137
+ let retryTimes = 1;
138
+ let success = false;
139
+ const api = async () => {
140
+ if (retryTimes > 0) {
141
+ retryTimes -= 1;
142
+ const error = new Error("error");
143
+ error.canRetry = true;
144
+ throw error;
145
+ }
146
+ return true;
147
+ };
148
+ try {
149
+ success = await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {
150
+ onRetry: () => {
151
+ throw new Error("disposed");
152
+ },
153
+ }));
154
+ assert.fail("Should not succeed");
155
+ }
156
+ catch (error) { }
157
+ assert.strictEqual(retryTimes, 0, "Should not retry");
158
+ assert.strictEqual(success, false, "Should not succeed as retrying was disabled");
159
+ });
160
+ it("Abort reason is included in thrown exception", async () => {
161
+ const abortController = new AbortController();
162
+ const api = () => {
163
+ abortController.abort("Sample abort reason");
164
+ const error = new Error("aborted");
165
+ error.canRetry = true;
166
+ throw error;
167
+ };
168
+ try {
169
+ await runWithFastSetTimeout(async () => runWithRetry(api, "test", logger, {
170
+ cancel: abortController.signal,
171
+ }));
172
+ assert.fail("Should not succeed");
173
+ }
174
+ catch (error) {
175
+ assert.strictEqual(error.message, "runWithRetry was Aborted");
176
+ assert.strictEqual(error.reason, "Sample abort reason");
177
+ }
178
+ });
179
+ });
180
+ //# sourceMappingURL=runWithRetry.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runWithRetry.spec.js","sourceRoot":"","sources":["../../src/test/runWithRetry.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"assert\";\nimport { DriverErrorTypes } from \"@fluidframework/driver-definitions\";\nimport { createChildLogger } from \"@fluidframework/telemetry-utils\";\nimport { runWithRetry } from \"../runWithRetry.js\";\n\nconst _setTimeout = global.setTimeout;\nconst fastSetTimeout: any = (callback: (...cbArgs: any[]) => void, ms: number, ...args: any[]) =>\n\t_setTimeout(callback, ms / 1000.0, ...args);\nasync function runWithFastSetTimeout<T>(callback: () => Promise<T>): Promise<T> {\n\tglobal.setTimeout = fastSetTimeout;\n\treturn callback().finally(() => {\n\t\tglobal.setTimeout = _setTimeout;\n\t});\n}\n\ndescribe(\"runWithRetry Tests\", () => {\n\tconst logger = createChildLogger();\n\n\tit(\"Should succeed at first time\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tretryTimes -= 1;\n\t\t\treturn true;\n\t\t};\n\n\t\tlet emitDelayInfoTimes: number = 0;\n\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\trunWithRetry(api, \"test\", logger, {\n\t\t\t\tonRetry: () => {\n\t\t\t\t\temitDelayInfoTimes += 1;\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tassert.strictEqual(retryTimes, 0, \"Should succeed at first time\");\n\t\tassert.strictEqual(success, true, \"Retry should succeed ultimately\");\n\t\tassert.strictEqual(emitDelayInfoTimes, 0, \"Should not emit delay at first time\");\n\t});\n\n\tit(\"Check that it retries infinitely\", async () => {\n\t\tconst maxTries: number = 5;\n\t\tlet retryTimes: number = maxTries;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst error = new Error(\"Throw error\");\n\t\t\t\t(error as any).retryAfterSeconds = 10;\n\t\t\t\t(error as any).canRetry = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\n\t\tlet emitDelayInfoTimes: number = 0;\n\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\trunWithRetry(api, \"test\", logger, {\n\t\t\t\tonRetry: () => {\n\t\t\t\t\temitDelayInfoTimes += 1;\n\t\t\t\t},\n\t\t\t}),\n\t\t);\n\t\tassert.strictEqual(retryTimes, 0, \"Should keep retrying until success\");\n\t\tassert.strictEqual(success, true, \"Retry should succeed ultimately\");\n\t\tassert.strictEqual(emitDelayInfoTimes, maxTries, \"Should emit delay at each try\");\n\t});\n\n\tit(\"Check that it retries after retry seconds\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst error = new Error(\"Throttle Error\");\n\t\t\t\t(error as any).errorType = DriverErrorTypes.throttlingError;\n\t\t\t\t(error as any).retryAfterSeconds = 400;\n\t\t\t\t(error as any).canRetry = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\tsuccess = await runWithFastSetTimeout(async () => runWithRetry(api, \"test\", logger, {}));\n\t\tassert.strictEqual(retryTimes, 0, \"Should retry once\");\n\t\tassert.strictEqual(success, true, \"Retry should succeed ultimately\");\n\t});\n\n\tit(\"If error is just a string, should retry as canRetry is not false\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst err = new Error(\"error\");\n\t\t\t\t(err as any).canRetry = true;\n\t\t\t\tthrow err;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\ttry {\n\t\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\t\trunWithRetry(api, \"test\", logger, {}),\n\t\t\t);\n\t\t} catch (error) {}\n\t\tassert.strictEqual(retryTimes, 0, \"Should retry\");\n\t\tassert.strictEqual(success, true, \"Should succeed as retry should be successful\");\n\t});\n\n\tit(\"Should not retry if canRetry is set as false\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst error = new Error(\"error\");\n\t\t\t\t(error as any).canRetry = false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\ttry {\n\t\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\t\trunWithRetry(api, \"test\", logger, {}),\n\t\t\t);\n\t\t\tassert.fail(\"Should not succeed\");\n\t\t} catch (error) {}\n\t\tassert.strictEqual(retryTimes, 0, \"Should not retry\");\n\t\tassert.strictEqual(success, false, \"Should not succeed as canRetry was not set\");\n\t});\n\n\tit(\"Should not retry if canRetry is not set\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst error = new Error(\"error\");\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\ttry {\n\t\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\t\trunWithRetry(api, \"test\", logger, {}),\n\t\t\t);\n\t\t\tassert.fail(\"Should not succeed\");\n\t\t} catch (error) {}\n\t\tassert.strictEqual(retryTimes, 0, \"Should not retry\");\n\t\tassert.strictEqual(success, false, \"Should not succeed as canRetry was not set\");\n\t});\n\n\tit(\"Should not retry if it is disabled\", async () => {\n\t\tlet retryTimes: number = 1;\n\t\tlet success = false;\n\t\tconst api = async () => {\n\t\t\tif (retryTimes > 0) {\n\t\t\t\tretryTimes -= 1;\n\t\t\t\tconst error = new Error(\"error\");\n\t\t\t\t(error as any).canRetry = true;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn true;\n\t\t};\n\t\ttry {\n\t\t\tsuccess = await runWithFastSetTimeout(async () =>\n\t\t\t\trunWithRetry(api, \"test\", logger, {\n\t\t\t\t\tonRetry: () => {\n\t\t\t\t\t\tthrow new Error(\"disposed\");\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t);\n\t\t\tassert.fail(\"Should not succeed\");\n\t\t} catch (error) {}\n\t\tassert.strictEqual(retryTimes, 0, \"Should not retry\");\n\t\tassert.strictEqual(success, false, \"Should not succeed as retrying was disabled\");\n\t});\n\n\tit(\"Abort reason is included in thrown exception\", async () => {\n\t\tconst abortController = new AbortController();\n\n\t\tconst api = () => {\n\t\t\tabortController.abort(\"Sample abort reason\");\n\t\t\tconst error = new Error(\"aborted\");\n\t\t\t(error as any).canRetry = true;\n\t\t\tthrow error;\n\t\t};\n\t\ttry {\n\t\t\tawait runWithFastSetTimeout(async () =>\n\t\t\t\trunWithRetry(api, \"test\", logger, {\n\t\t\t\t\tcancel: abortController.signal,\n\t\t\t\t}),\n\t\t\t);\n\t\t\tassert.fail(\"Should not succeed\");\n\t\t} catch (error) {\n\t\t\tassert.strictEqual((error as any).message, \"runWithRetry was Aborted\");\n\t\t\tassert.strictEqual((error as any).reason, \"Sample abort reason\");\n\t\t}\n\t});\n});\n"]}
@@ -0,0 +1,170 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /* eslint-disable @typescript-eslint/dot-notation */
6
+ export const summaryTemplate = {
7
+ type: 1,
8
+ tree: {
9
+ ".channels": {
10
+ type: 1,
11
+ tree: {
12
+ rootDOId: {
13
+ type: 1,
14
+ tree: {
15
+ ".channels": {
16
+ type: 1,
17
+ tree: {
18
+ "7a99532d-94ec-43ac-8a53-d9f978ad4ae9": {
19
+ type: 1,
20
+ tree: {
21
+ "header": {
22
+ type: 2,
23
+ content: '{"value":"123"}',
24
+ },
25
+ ".attributes": {
26
+ type: 2,
27
+ content: '{"type":"https://graph.microsoft.com/types/cell","snapshotFormatVersion":"0.1","packageVersion":"2.0.0-internal.4.2.0"}',
28
+ },
29
+ },
30
+ },
31
+ "root": {
32
+ type: 1,
33
+ tree: {
34
+ "header": {
35
+ type: 2,
36
+ content: '{"blobs":[],"content":{"ci":{"csn":0,"ccIds":[]},"subdirectories":{"initial-objects-key":{"ci":{"csn":-1,"ccIds":["detached"]},"storage":{"tree":{"type":"Plain","value":{"type":"__fluid_handle__","url":"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4"}}}}}}}',
37
+ },
38
+ ".attributes": {
39
+ type: 2,
40
+ content: '{"type":"https://graph.microsoft.com/types/directory","snapshotFormatVersion":"0.1","packageVersion":"2.0.0-internal.4.2.0"}',
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ ".component": {
47
+ type: 2,
48
+ content: '{"pkg":"[\\"rootDO\\"]","summaryFormatVersion":2,"isRootDataStore":true}',
49
+ },
50
+ },
51
+ },
52
+ },
53
+ },
54
+ ".metadata": {
55
+ type: 2,
56
+ content: '{"createContainerRuntimeVersion":"2.0.0-internal.4.2.0","createContainerTimestamp":1683180222333,"summaryNumber":2,"summaryFormatVersion":1,"gcFeature":2,"sessionExpiryTimeoutMs":2592000000,"sweepEnabled":false,"sweepTimeoutMs":3110400000,"message":{"clientId":null,"clientSequenceNumber":-1,"minimumSequenceNumber":5,"referenceSequenceNumber":-1,"sequenceNumber":7,"timestamp":1683180249726,"type":"join"},"telemetryDocumentId":"72d29676-b076-43e8-80aa-b8fc7aba1506"}',
57
+ },
58
+ ".protocol": {
59
+ type: 1,
60
+ tree: {
61
+ misotest: {
62
+ type: 2,
63
+ content: "ABC",
64
+ },
65
+ },
66
+ },
67
+ ".electedSummarizer": {
68
+ type: 2,
69
+ content: '{"electedClientId":"f3bda689-ca40-4b68-b2ea-4c02dac76206","electedParentId":"af12d248-f040-413c-a6d1-8e5bd6619313","electionSequenceNumber":7}',
70
+ },
71
+ "gc": {
72
+ type: 1,
73
+ tree: {
74
+ __gc_root: {
75
+ type: 2,
76
+ content: '{"gcNodes":{"/":{"outboundRoutes":["/rootDOId"]},"/rootDOId":{"outboundRoutes":["/rootDOId/de68ca53-be31-479e-8d34-a267958997e4","/rootDOId/root"]},"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4":{"outboundRoutes":["/rootDOId"]},"/rootDOId/root":{"outboundRoutes":["/rootDOId","/rootDOId/de68ca53-be31-479e-8d34-a267958997e4"]}}}',
77
+ },
78
+ },
79
+ },
80
+ },
81
+ };
82
+ export const snapshotTree = {
83
+ id: "c26019650fe7fc3c1e9f50b906071296008fd9e0",
84
+ blobs: {
85
+ ".electedSummarizer": "1779e5eec3d53d36c476f7e365fe09d5eadb5cb7",
86
+ ".metadata": "43a9378e44336b39fc8f86f0511a655511922f11",
87
+ ".metadata.blobHeaders": "1",
88
+ },
89
+ trees: {
90
+ ".channels": {
91
+ id: "1ac6a4929a0fb18b8093679b19d8eed478c908a0",
92
+ blobs: {},
93
+ commits: {},
94
+ trees: {
95
+ rootDOId: {
96
+ id: "5164ec1ecc2cfe24643347e30624aea2976f61e9",
97
+ blobs: {
98
+ ".component": "c35bbe00f9cb9ee99c8af3d4757411abdda3d8f3",
99
+ },
100
+ commits: {},
101
+ trees: {
102
+ ".channels": {
103
+ id: "9a415dc0f942849ac3d686ec8f8049a4d1484ee1",
104
+ blobs: {},
105
+ commits: {},
106
+ trees: {
107
+ "7a99532d-94ec-43ac-8a53-d9f978ad4ae9": {
108
+ id: "353aab1f600b0dd527073e286b4d6dd853c0d212",
109
+ blobs: {
110
+ ".attributes": "d67e9b02c97d8b2d13b1ea88c4198ea6cdae3c06",
111
+ "compressed_2_header": "ee84b67e86708c9dd7fc79ff8f3380b78f000b79",
112
+ },
113
+ commits: {},
114
+ trees: {},
115
+ },
116
+ "root": {
117
+ id: "771be006709c44442dbcd69424b8f89e14a05de8",
118
+ blobs: {
119
+ ".attributes": "3ec4a65a74f0e2fab11aaac9b31f284a8c931850",
120
+ "header": "c2de09aa55c92d79b9292d6efb469592915f0b1f",
121
+ },
122
+ commits: {},
123
+ trees: {},
124
+ },
125
+ },
126
+ },
127
+ },
128
+ },
129
+ },
130
+ },
131
+ ".logTail": {
132
+ id: "9ae35f3164c7c34c4ed29107af49f2913dc2e948",
133
+ blobs: {
134
+ logTail: "8240863a82570a9eff14ecbc06cee9886d5dc560",
135
+ },
136
+ commits: {},
137
+ trees: {},
138
+ },
139
+ ".protocol": {
140
+ id: "f4ab61e0c13030ccd4f56550fcf5e5c271de7152",
141
+ blobs: {
142
+ attributes: "78c80fb681c6b152c48f57526a76bd31ec3b1baf",
143
+ quorumMembers: "cf6929236bacbea80764beb3aba8645210f4af57",
144
+ quorumProposals: "0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc",
145
+ quorumValues: "c730f7a6ff8c606cc2b7d083e5a9705bff0d7029",
146
+ misotest: "misotest-id",
147
+ },
148
+ commits: {},
149
+ trees: {},
150
+ },
151
+ ".serviceProtocol": {
152
+ id: "029fc548f99d4b9ef43cd98c401bc5a9f3a2f117",
153
+ blobs: {
154
+ deli: "041b2b724ca853a9d65f4917d5ddb97e91fd7408",
155
+ scribe: "97a0b1e36b67946044b7141ce62cbab6a5996723",
156
+ },
157
+ commits: {},
158
+ trees: {},
159
+ },
160
+ "gc": {
161
+ id: "e8ed0760ac37fd8042020559779ce80b1d88f266",
162
+ blobs: {
163
+ __gc_root: "018d97818f8b519f99c418cb3c33ce5cc4e38e3f",
164
+ },
165
+ commits: {},
166
+ trees: {},
167
+ },
168
+ },
169
+ };
170
+ //# sourceMappingURL=summaryCompressionData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summaryCompressionData.js","sourceRoot":"","sources":["../../src/test/summaryCompressionData.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/dot-notation */\n\nexport const summaryTemplate = {\n\ttype: 1,\n\ttree: {\n\t\t\".channels\": {\n\t\t\ttype: 1,\n\t\t\ttree: {\n\t\t\t\trootDOId: {\n\t\t\t\t\ttype: 1,\n\t\t\t\t\ttree: {\n\t\t\t\t\t\t\".channels\": {\n\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\ttree: {\n\t\t\t\t\t\t\t\t\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\": {\n\t\t\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\t\t\ttree: {\n\t\t\t\t\t\t\t\t\t\t\"header\": {\n\t\t\t\t\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\t\t\t\t\tcontent: '{\"value\":\"123\"}',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\".attributes\": {\n\t\t\t\t\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t\t\t\t\t'{\"type\":\"https://graph.microsoft.com/types/cell\",\"snapshotFormatVersion\":\"0.1\",\"packageVersion\":\"2.0.0-internal.4.2.0\"}',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"root\": {\n\t\t\t\t\t\t\t\t\ttype: 1,\n\t\t\t\t\t\t\t\t\ttree: {\n\t\t\t\t\t\t\t\t\t\t\"header\": {\n\t\t\t\t\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t\t\t\t\t'{\"blobs\":[],\"content\":{\"ci\":{\"csn\":0,\"ccIds\":[]},\"subdirectories\":{\"initial-objects-key\":{\"ci\":{\"csn\":-1,\"ccIds\":[\"detached\"]},\"storage\":{\"tree\":{\"type\":\"Plain\",\"value\":{\"type\":\"__fluid_handle__\",\"url\":\"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4\"}}}}}}}',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\".attributes\": {\n\t\t\t\t\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t\t\t\t\t'{\"type\":\"https://graph.microsoft.com/types/directory\",\"snapshotFormatVersion\":\"0.1\",\"packageVersion\":\"2.0.0-internal.4.2.0\"}',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\".component\": {\n\t\t\t\t\t\t\ttype: 2,\n\t\t\t\t\t\t\tcontent:\n\t\t\t\t\t\t\t\t'{\"pkg\":\"[\\\\\"rootDO\\\\\"]\",\"summaryFormatVersion\":2,\"isRootDataStore\":true}',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\".metadata\": {\n\t\t\ttype: 2,\n\t\t\tcontent:\n\t\t\t\t'{\"createContainerRuntimeVersion\":\"2.0.0-internal.4.2.0\",\"createContainerTimestamp\":1683180222333,\"summaryNumber\":2,\"summaryFormatVersion\":1,\"gcFeature\":2,\"sessionExpiryTimeoutMs\":2592000000,\"sweepEnabled\":false,\"sweepTimeoutMs\":3110400000,\"message\":{\"clientId\":null,\"clientSequenceNumber\":-1,\"minimumSequenceNumber\":5,\"referenceSequenceNumber\":-1,\"sequenceNumber\":7,\"timestamp\":1683180249726,\"type\":\"join\"},\"telemetryDocumentId\":\"72d29676-b076-43e8-80aa-b8fc7aba1506\"}',\n\t\t},\n\t\t\".protocol\": {\n\t\t\ttype: 1,\n\t\t\ttree: {\n\t\t\t\tmisotest: {\n\t\t\t\t\ttype: 2,\n\t\t\t\t\tcontent: \"ABC\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\".electedSummarizer\": {\n\t\t\ttype: 2,\n\t\t\tcontent:\n\t\t\t\t'{\"electedClientId\":\"f3bda689-ca40-4b68-b2ea-4c02dac76206\",\"electedParentId\":\"af12d248-f040-413c-a6d1-8e5bd6619313\",\"electionSequenceNumber\":7}',\n\t\t},\n\t\t\"gc\": {\n\t\t\ttype: 1,\n\t\t\ttree: {\n\t\t\t\t__gc_root: {\n\t\t\t\t\ttype: 2,\n\t\t\t\t\tcontent:\n\t\t\t\t\t\t'{\"gcNodes\":{\"/\":{\"outboundRoutes\":[\"/rootDOId\"]},\"/rootDOId\":{\"outboundRoutes\":[\"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4\",\"/rootDOId/root\"]},\"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4\":{\"outboundRoutes\":[\"/rootDOId\"]},\"/rootDOId/root\":{\"outboundRoutes\":[\"/rootDOId\",\"/rootDOId/de68ca53-be31-479e-8d34-a267958997e4\"]}}}',\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n};\n\nexport const snapshotTree = {\n\tid: \"c26019650fe7fc3c1e9f50b906071296008fd9e0\",\n\tblobs: {\n\t\t\".electedSummarizer\": \"1779e5eec3d53d36c476f7e365fe09d5eadb5cb7\",\n\t\t\".metadata\": \"43a9378e44336b39fc8f86f0511a655511922f11\",\n\t\t\".metadata.blobHeaders\": \"1\",\n\t},\n\ttrees: {\n\t\t\".channels\": {\n\t\t\tid: \"1ac6a4929a0fb18b8093679b19d8eed478c908a0\",\n\t\t\tblobs: {},\n\t\t\tcommits: {},\n\t\t\ttrees: {\n\t\t\t\trootDOId: {\n\t\t\t\t\tid: \"5164ec1ecc2cfe24643347e30624aea2976f61e9\",\n\t\t\t\t\tblobs: {\n\t\t\t\t\t\t\".component\": \"c35bbe00f9cb9ee99c8af3d4757411abdda3d8f3\",\n\t\t\t\t\t},\n\t\t\t\t\tcommits: {},\n\t\t\t\t\ttrees: {\n\t\t\t\t\t\t\".channels\": {\n\t\t\t\t\t\t\tid: \"9a415dc0f942849ac3d686ec8f8049a4d1484ee1\",\n\t\t\t\t\t\t\tblobs: {},\n\t\t\t\t\t\t\tcommits: {},\n\t\t\t\t\t\t\ttrees: {\n\t\t\t\t\t\t\t\t\"7a99532d-94ec-43ac-8a53-d9f978ad4ae9\": {\n\t\t\t\t\t\t\t\t\tid: \"353aab1f600b0dd527073e286b4d6dd853c0d212\",\n\t\t\t\t\t\t\t\t\tblobs: {\n\t\t\t\t\t\t\t\t\t\t\".attributes\": \"d67e9b02c97d8b2d13b1ea88c4198ea6cdae3c06\",\n\t\t\t\t\t\t\t\t\t\t\"compressed_2_header\":\n\t\t\t\t\t\t\t\t\t\t\t\"ee84b67e86708c9dd7fc79ff8f3380b78f000b79\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcommits: {},\n\t\t\t\t\t\t\t\t\ttrees: {},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\"root\": {\n\t\t\t\t\t\t\t\t\tid: \"771be006709c44442dbcd69424b8f89e14a05de8\",\n\t\t\t\t\t\t\t\t\tblobs: {\n\t\t\t\t\t\t\t\t\t\t\".attributes\": \"3ec4a65a74f0e2fab11aaac9b31f284a8c931850\",\n\t\t\t\t\t\t\t\t\t\t\"header\": \"c2de09aa55c92d79b9292d6efb469592915f0b1f\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tcommits: {},\n\t\t\t\t\t\t\t\t\ttrees: {},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t\t\".logTail\": {\n\t\t\tid: \"9ae35f3164c7c34c4ed29107af49f2913dc2e948\",\n\t\t\tblobs: {\n\t\t\t\tlogTail: \"8240863a82570a9eff14ecbc06cee9886d5dc560\",\n\t\t\t},\n\t\t\tcommits: {},\n\t\t\ttrees: {},\n\t\t},\n\t\t\".protocol\": {\n\t\t\tid: \"f4ab61e0c13030ccd4f56550fcf5e5c271de7152\",\n\t\t\tblobs: {\n\t\t\t\tattributes: \"78c80fb681c6b152c48f57526a76bd31ec3b1baf\",\n\t\t\t\tquorumMembers: \"cf6929236bacbea80764beb3aba8645210f4af57\",\n\t\t\t\tquorumProposals: \"0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc\",\n\t\t\t\tquorumValues: \"c730f7a6ff8c606cc2b7d083e5a9705bff0d7029\",\n\t\t\t\tmisotest: \"misotest-id\",\n\t\t\t},\n\t\t\tcommits: {},\n\t\t\ttrees: {},\n\t\t},\n\t\t\".serviceProtocol\": {\n\t\t\tid: \"029fc548f99d4b9ef43cd98c401bc5a9f3a2f117\",\n\t\t\tblobs: {\n\t\t\t\tdeli: \"041b2b724ca853a9d65f4917d5ddb97e91fd7408\",\n\t\t\t\tscribe: \"97a0b1e36b67946044b7141ce62cbab6a5996723\",\n\t\t\t},\n\t\t\tcommits: {},\n\t\t\ttrees: {},\n\t\t},\n\t\t\"gc\": {\n\t\t\tid: \"e8ed0760ac37fd8042020559779ce80b1d88f266\",\n\t\t\tblobs: {\n\t\t\t\t__gc_root: \"018d97818f8b519f99c418cb3c33ce5cc4e38e3f\",\n\t\t\t},\n\t\t\tcommits: {},\n\t\t\ttrees: {},\n\t\t},\n\t},\n};\n"]}