@fluidframework/odsp-driver 2.0.0-dev-rc.2.0.0.246488 → 2.0.0-dev-rc.3.0.0.250606

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 (353) hide show
  1. package/dist/WriteBufferUtils.d.ts.map +1 -1
  2. package/dist/WriteBufferUtils.js.map +1 -1
  3. package/dist/compactSnapshotParser.d.ts +1 -1
  4. package/dist/compactSnapshotParser.d.ts.map +1 -1
  5. package/dist/compactSnapshotParser.js +1 -1
  6. package/dist/compactSnapshotParser.js.map +1 -1
  7. package/dist/compactSnapshotWriter.d.ts.map +1 -1
  8. package/dist/compactSnapshotWriter.js +1 -1
  9. package/dist/compactSnapshotWriter.js.map +1 -1
  10. package/dist/contracts.d.ts +2 -2
  11. package/dist/contracts.d.ts.map +1 -1
  12. package/dist/contracts.js.map +1 -1
  13. package/dist/createFile.d.ts +2 -2
  14. package/dist/createFile.d.ts.map +1 -1
  15. package/dist/createFile.js +7 -7
  16. package/dist/createFile.js.map +1 -1
  17. package/dist/createNewContainerOnExistingFile.d.ts +2 -2
  18. package/dist/createNewContainerOnExistingFile.d.ts.map +1 -1
  19. package/dist/createNewContainerOnExistingFile.js +4 -4
  20. package/dist/createNewContainerOnExistingFile.js.map +1 -1
  21. package/dist/createNewUtils.d.ts +2 -2
  22. package/dist/createNewUtils.d.ts.map +1 -1
  23. package/dist/createNewUtils.js +4 -4
  24. package/dist/createNewUtils.js.map +1 -1
  25. package/dist/epochTracker.d.ts +3 -3
  26. package/dist/epochTracker.d.ts.map +1 -1
  27. package/dist/epochTracker.js +4 -4
  28. package/dist/epochTracker.js.map +1 -1
  29. package/dist/fetch.js.map +1 -1
  30. package/dist/fetchSnapshot.d.ts +2 -2
  31. package/dist/fetchSnapshot.d.ts.map +1 -1
  32. package/dist/fetchSnapshot.js +5 -5
  33. package/dist/fetchSnapshot.js.map +1 -1
  34. package/dist/getFileLink.d.ts +1 -1
  35. package/dist/getFileLink.d.ts.map +1 -1
  36. package/dist/getFileLink.js +1 -1
  37. package/dist/getFileLink.js.map +1 -1
  38. package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts +1 -1
  39. package/dist/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -1
  40. package/dist/localOdspDriver/localOdspDeltaStorageService.js +1 -1
  41. package/dist/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  42. package/dist/localOdspDriver/localOdspDocumentService.d.ts +1 -1
  43. package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
  44. package/dist/localOdspDriver/localOdspDocumentService.js.map +1 -1
  45. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +1 -1
  46. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  47. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +1 -1
  48. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  49. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +1 -1
  50. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
  51. package/dist/localOdspDriver/localOdspDocumentStorageManager.js +2 -2
  52. package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  53. package/dist/odspCache.d.ts +1 -1
  54. package/dist/odspCache.d.ts.map +1 -1
  55. package/dist/odspCache.js.map +1 -1
  56. package/dist/odspDelayLoadedDeltaStream.d.ts +4 -4
  57. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  58. package/dist/odspDelayLoadedDeltaStream.js +11 -6
  59. package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
  60. package/dist/odspDeltaStorageService.d.ts +3 -3
  61. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  62. package/dist/odspDeltaStorageService.js +3 -3
  63. package/dist/odspDeltaStorageService.js.map +1 -1
  64. package/dist/odspDocumentDeltaConnection.d.ts +5 -4
  65. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  66. package/dist/odspDocumentDeltaConnection.js +3 -5
  67. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  68. package/dist/odspDocumentService.d.ts +4 -4
  69. package/dist/odspDocumentService.d.ts.map +1 -1
  70. package/dist/odspDocumentService.js +2 -2
  71. package/dist/odspDocumentService.js.map +1 -1
  72. package/dist/odspDocumentServiceFactory.d.ts +1 -1
  73. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  74. package/dist/odspDocumentServiceFactory.js +1 -1
  75. package/dist/odspDocumentServiceFactory.js.map +1 -1
  76. package/dist/odspDocumentServiceFactoryCore.d.ts +2 -2
  77. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  78. package/dist/odspDocumentServiceFactoryCore.js +2 -2
  79. package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
  80. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +1 -1
  81. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  82. package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  83. package/dist/odspDocumentStorageManager.d.ts +4 -4
  84. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  85. package/dist/odspDocumentStorageManager.js +3 -3
  86. package/dist/odspDocumentStorageManager.js.map +1 -1
  87. package/dist/odspDocumentStorageServiceBase.d.ts +1 -1
  88. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  89. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  90. package/dist/odspDriverUrlResolver.d.ts.map +1 -1
  91. package/dist/odspDriverUrlResolver.js +3 -3
  92. package/dist/odspDriverUrlResolver.js.map +1 -1
  93. package/dist/odspDriverUrlResolverForShareLink.d.ts +1 -1
  94. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  95. package/dist/odspDriverUrlResolverForShareLink.js +2 -2
  96. package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
  97. package/dist/odspError.d.ts.map +1 -1
  98. package/dist/odspError.js +1 -1
  99. package/dist/odspError.js.map +1 -1
  100. package/dist/odspFluidFileLink.d.ts.map +1 -1
  101. package/dist/odspFluidFileLink.js.map +1 -1
  102. package/dist/odspPublicUtils.js.map +1 -1
  103. package/dist/odspSnapshotParser.d.ts.map +1 -1
  104. package/dist/odspSnapshotParser.js.map +1 -1
  105. package/dist/odspSummaryUploadManager.d.ts +1 -1
  106. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  107. package/dist/odspSummaryUploadManager.js +1 -1
  108. package/dist/odspSummaryUploadManager.js.map +1 -1
  109. package/dist/odspUtils.d.ts +2 -2
  110. package/dist/odspUtils.d.ts.map +1 -1
  111. package/dist/odspUtils.js +2 -2
  112. package/dist/odspUtils.js.map +1 -1
  113. package/dist/opsCaching.d.ts.map +1 -1
  114. package/dist/opsCaching.js.map +1 -1
  115. package/dist/packageVersion.d.ts +1 -1
  116. package/dist/packageVersion.js +1 -1
  117. package/dist/packageVersion.js.map +1 -1
  118. package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
  119. package/dist/prefetchLatestSnapshot.js +1 -1
  120. package/dist/prefetchLatestSnapshot.js.map +1 -1
  121. package/dist/retryErrorsStorageAdapter.d.ts +2 -2
  122. package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
  123. package/dist/retryErrorsStorageAdapter.js.map +1 -1
  124. package/dist/retryUtils.d.ts.map +1 -1
  125. package/dist/retryUtils.js.map +1 -1
  126. package/dist/vroom.d.ts +2 -2
  127. package/dist/vroom.d.ts.map +1 -1
  128. package/dist/vroom.js +2 -2
  129. package/dist/vroom.js.map +1 -1
  130. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  131. package/dist/zipItDataRepresentationUtils.js +1 -1
  132. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  133. package/lib/WriteBufferUtils.d.ts.map +1 -1
  134. package/lib/WriteBufferUtils.js +1 -1
  135. package/lib/WriteBufferUtils.js.map +1 -1
  136. package/lib/compactSnapshotParser.d.ts +1 -1
  137. package/lib/compactSnapshotParser.d.ts.map +1 -1
  138. package/lib/compactSnapshotParser.js +1 -1
  139. package/lib/compactSnapshotParser.js.map +1 -1
  140. package/lib/compactSnapshotWriter.d.ts.map +1 -1
  141. package/lib/compactSnapshotWriter.js +2 -2
  142. package/lib/compactSnapshotWriter.js.map +1 -1
  143. package/lib/contracts.d.ts +2 -2
  144. package/lib/contracts.d.ts.map +1 -1
  145. package/lib/contracts.js.map +1 -1
  146. package/lib/createFile.d.ts +2 -2
  147. package/lib/createFile.d.ts.map +1 -1
  148. package/lib/createFile.js +7 -7
  149. package/lib/createFile.js.map +1 -1
  150. package/lib/createNewContainerOnExistingFile.d.ts +2 -2
  151. package/lib/createNewContainerOnExistingFile.d.ts.map +1 -1
  152. package/lib/createNewContainerOnExistingFile.js +4 -4
  153. package/lib/createNewContainerOnExistingFile.js.map +1 -1
  154. package/lib/createNewUtils.d.ts +2 -2
  155. package/lib/createNewUtils.d.ts.map +1 -1
  156. package/lib/createNewUtils.js +5 -5
  157. package/lib/createNewUtils.js.map +1 -1
  158. package/lib/epochTracker.d.ts +3 -3
  159. package/lib/epochTracker.d.ts.map +1 -1
  160. package/lib/epochTracker.js +6 -6
  161. package/lib/epochTracker.js.map +1 -1
  162. package/lib/fetch.js.map +1 -1
  163. package/lib/fetchSnapshot.d.ts +2 -2
  164. package/lib/fetchSnapshot.d.ts.map +1 -1
  165. package/lib/fetchSnapshot.js +6 -6
  166. package/lib/fetchSnapshot.js.map +1 -1
  167. package/lib/getFileLink.d.ts +1 -1
  168. package/lib/getFileLink.d.ts.map +1 -1
  169. package/lib/getFileLink.js +1 -1
  170. package/lib/getFileLink.js.map +1 -1
  171. package/lib/localOdspDriver/localOdspDeltaStorageService.d.ts +1 -1
  172. package/lib/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -1
  173. package/lib/localOdspDriver/localOdspDeltaStorageService.js +1 -1
  174. package/lib/localOdspDriver/localOdspDeltaStorageService.js.map +1 -1
  175. package/lib/localOdspDriver/localOdspDocumentService.d.ts +1 -1
  176. package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
  177. package/lib/localOdspDriver/localOdspDocumentService.js.map +1 -1
  178. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts +1 -1
  179. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  180. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js +1 -1
  181. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  182. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts +1 -1
  183. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
  184. package/lib/localOdspDriver/localOdspDocumentStorageManager.js +2 -2
  185. package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  186. package/lib/odspCache.d.ts +1 -1
  187. package/lib/odspCache.d.ts.map +1 -1
  188. package/lib/odspCache.js.map +1 -1
  189. package/lib/odspDelayLoadedDeltaStream.d.ts +4 -4
  190. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  191. package/lib/odspDelayLoadedDeltaStream.js +11 -6
  192. package/lib/odspDelayLoadedDeltaStream.js.map +1 -1
  193. package/lib/odspDeltaStorageService.d.ts +3 -3
  194. package/lib/odspDeltaStorageService.d.ts.map +1 -1
  195. package/lib/odspDeltaStorageService.js +3 -3
  196. package/lib/odspDeltaStorageService.js.map +1 -1
  197. package/lib/odspDocumentDeltaConnection.d.ts +5 -4
  198. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
  199. package/lib/odspDocumentDeltaConnection.js +4 -6
  200. package/lib/odspDocumentDeltaConnection.js.map +1 -1
  201. package/lib/odspDocumentService.d.ts +4 -4
  202. package/lib/odspDocumentService.d.ts.map +1 -1
  203. package/lib/odspDocumentService.js +2 -2
  204. package/lib/odspDocumentService.js.map +1 -1
  205. package/lib/odspDocumentServiceFactory.d.ts +1 -1
  206. package/lib/odspDocumentServiceFactory.d.ts.map +1 -1
  207. package/lib/odspDocumentServiceFactory.js +1 -1
  208. package/lib/odspDocumentServiceFactory.js.map +1 -1
  209. package/lib/odspDocumentServiceFactoryCore.d.ts +2 -2
  210. package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  211. package/lib/odspDocumentServiceFactoryCore.js +4 -4
  212. package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
  213. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts +1 -1
  214. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  215. package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  216. package/lib/odspDocumentStorageManager.d.ts +4 -4
  217. package/lib/odspDocumentStorageManager.d.ts.map +1 -1
  218. package/lib/odspDocumentStorageManager.js +4 -4
  219. package/lib/odspDocumentStorageManager.js.map +1 -1
  220. package/lib/odspDocumentStorageServiceBase.d.ts +1 -1
  221. package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -1
  222. package/lib/odspDocumentStorageServiceBase.js.map +1 -1
  223. package/lib/odspDriverUrlResolver.d.ts.map +1 -1
  224. package/lib/odspDriverUrlResolver.js +3 -3
  225. package/lib/odspDriverUrlResolver.js.map +1 -1
  226. package/lib/odspDriverUrlResolverForShareLink.d.ts +1 -1
  227. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  228. package/lib/odspDriverUrlResolverForShareLink.js +3 -3
  229. package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
  230. package/lib/odspError.d.ts.map +1 -1
  231. package/lib/odspError.js +1 -1
  232. package/lib/odspError.js.map +1 -1
  233. package/lib/odspFluidFileLink.d.ts.map +1 -1
  234. package/lib/odspFluidFileLink.js +1 -1
  235. package/lib/odspFluidFileLink.js.map +1 -1
  236. package/lib/odspPublicUtils.js +1 -1
  237. package/lib/odspPublicUtils.js.map +1 -1
  238. package/lib/odspSnapshotParser.d.ts.map +1 -1
  239. package/lib/odspSnapshotParser.js.map +1 -1
  240. package/lib/odspSummaryUploadManager.d.ts +1 -1
  241. package/lib/odspSummaryUploadManager.d.ts.map +1 -1
  242. package/lib/odspSummaryUploadManager.js +2 -2
  243. package/lib/odspSummaryUploadManager.js.map +1 -1
  244. package/lib/odspUtils.d.ts +2 -2
  245. package/lib/odspUtils.d.ts.map +1 -1
  246. package/lib/odspUtils.js +3 -3
  247. package/lib/odspUtils.js.map +1 -1
  248. package/lib/opsCaching.d.ts.map +1 -1
  249. package/lib/opsCaching.js.map +1 -1
  250. package/lib/packageVersion.d.ts +1 -1
  251. package/lib/packageVersion.js +1 -1
  252. package/lib/packageVersion.js.map +1 -1
  253. package/lib/prefetchLatestSnapshot.d.ts.map +1 -1
  254. package/lib/prefetchLatestSnapshot.js +2 -2
  255. package/lib/prefetchLatestSnapshot.js.map +1 -1
  256. package/lib/retryErrorsStorageAdapter.d.ts +2 -2
  257. package/lib/retryErrorsStorageAdapter.d.ts.map +1 -1
  258. package/lib/retryErrorsStorageAdapter.js.map +1 -1
  259. package/lib/retryUtils.d.ts.map +1 -1
  260. package/lib/retryUtils.js.map +1 -1
  261. package/lib/test/createNewUtilsTests.spec.js +3 -3
  262. package/lib/test/createNewUtilsTests.spec.js.map +1 -1
  263. package/lib/test/deltaStorageService.spec.js +2 -2
  264. package/lib/test/deltaStorageService.spec.js.map +1 -1
  265. package/lib/test/epochTests.spec.js +2 -2
  266. package/lib/test/epochTests.spec.js.map +1 -1
  267. package/lib/test/epochTestsWithRedemption.spec.js +2 -2
  268. package/lib/test/epochTestsWithRedemption.spec.js.map +1 -1
  269. package/lib/test/fetchSnapshot.spec.js +8 -8
  270. package/lib/test/fetchSnapshot.spec.js.map +1 -1
  271. package/lib/test/getFileLink.spec.js +1 -1
  272. package/lib/test/getFileLink.spec.js.map +1 -1
  273. package/lib/test/getVersions.spec.js +6 -6
  274. package/lib/test/getVersions.spec.js.map +1 -1
  275. package/lib/test/joinSessionCacheTests.spec.js +117 -1
  276. package/lib/test/joinSessionCacheTests.spec.js.map +1 -1
  277. package/lib/test/joinSessionPeriodicCall.spec.js +3 -3
  278. package/lib/test/joinSessionPeriodicCall.spec.js.map +1 -1
  279. package/lib/test/localOdspDriver.spec.js +2 -2
  280. package/lib/test/localOdspDriver.spec.js.map +1 -1
  281. package/lib/test/mockFetch.js +1 -1
  282. package/lib/test/mockFetch.js.map +1 -1
  283. package/lib/test/odspCreateContainer.spec.js +7 -7
  284. package/lib/test/odspCreateContainer.spec.js.map +1 -1
  285. package/lib/test/odspDriverResolverTest.spec.js +2 -2
  286. package/lib/test/odspDriverResolverTest.spec.js.map +1 -1
  287. package/lib/test/odspDriverUrlResolverForShareLink.spec.js +4 -4
  288. package/lib/test/odspDriverUrlResolverForShareLink.spec.js.map +1 -1
  289. package/lib/test/odspError.spec.js +2 -2
  290. package/lib/test/odspError.spec.js.map +1 -1
  291. package/lib/test/opsCaching.spec.js +1 -1
  292. package/lib/test/opsCaching.spec.js.map +1 -1
  293. package/lib/test/prefetchSnapshotTests.spec.js +8 -8
  294. package/lib/test/prefetchSnapshotTests.spec.js.map +1 -1
  295. package/lib/test/snapshotFormatTests.spec.js.map +1 -1
  296. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js +4 -4
  297. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js.map +1 -1
  298. package/lib/test/socketTests/socketMock.js +6 -2
  299. package/lib/test/socketTests/socketMock.js.map +1 -1
  300. package/lib/test/socketTests/socketTests.spec.js +4 -4
  301. package/lib/test/socketTests/socketTests.spec.js.map +1 -1
  302. package/lib/test/tokenFetch.spec.js +1 -1
  303. package/lib/test/tokenFetch.spec.js.map +1 -1
  304. package/lib/test/zipItDataRepresentationTests.spec.js +1 -1
  305. package/lib/test/zipItDataRepresentationTests.spec.js.map +1 -1
  306. package/lib/vroom.d.ts +2 -2
  307. package/lib/vroom.d.ts.map +1 -1
  308. package/lib/vroom.js +2 -2
  309. package/lib/vroom.js.map +1 -1
  310. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
  311. package/lib/zipItDataRepresentationUtils.js +1 -1
  312. package/lib/zipItDataRepresentationUtils.js.map +1 -1
  313. package/package.json +19 -16
  314. package/src/WriteBufferUtils.ts +2 -2
  315. package/src/compactSnapshotParser.ts +6 -6
  316. package/src/compactSnapshotWriter.ts +4 -4
  317. package/src/contracts.ts +2 -2
  318. package/src/createFile.ts +18 -18
  319. package/src/createNewContainerOnExistingFile.ts +10 -10
  320. package/src/createNewUtils.ts +13 -13
  321. package/src/epochTracker.ts +21 -21
  322. package/src/fetch.ts +1 -1
  323. package/src/fetchSnapshot.ts +24 -24
  324. package/src/getFileLink.ts +1 -1
  325. package/src/localOdspDriver/localOdspDeltaStorageService.ts +2 -2
  326. package/src/localOdspDriver/localOdspDocumentService.ts +1 -1
  327. package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +2 -2
  328. package/src/localOdspDriver/localOdspDocumentStorageManager.ts +3 -3
  329. package/src/odspCache.ts +4 -4
  330. package/src/odspDelayLoadedDeltaStream.ts +26 -22
  331. package/src/odspDeltaStorageService.ts +6 -6
  332. package/src/odspDocumentDeltaConnection.ts +17 -14
  333. package/src/odspDocumentService.ts +15 -15
  334. package/src/odspDocumentServiceFactory.ts +3 -3
  335. package/src/odspDocumentServiceFactoryCore.ts +14 -14
  336. package/src/odspDocumentServiceFactoryWithCodeSplit.ts +2 -2
  337. package/src/odspDocumentStorageManager.ts +22 -22
  338. package/src/odspDocumentStorageServiceBase.ts +4 -4
  339. package/src/odspDriverUrlResolver.ts +4 -4
  340. package/src/odspDriverUrlResolverForShareLink.ts +8 -8
  341. package/src/odspError.ts +2 -2
  342. package/src/odspFluidFileLink.ts +1 -1
  343. package/src/odspPublicUtils.ts +1 -1
  344. package/src/odspSnapshotParser.ts +1 -1
  345. package/src/odspSummaryUploadManager.ts +4 -4
  346. package/src/odspUtils.ts +25 -25
  347. package/src/opsCaching.ts +1 -1
  348. package/src/packageVersion.ts +1 -1
  349. package/src/prefetchLatestSnapshot.ts +12 -12
  350. package/src/retryErrorsStorageAdapter.ts +2 -2
  351. package/src/retryUtils.ts +1 -1
  352. package/src/vroom.ts +6 -6
  353. package/src/zipItDataRepresentationUtils.ts +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"deltaConnectionUpdateTests.spec.js","sourceRoot":"","sources":["../../../src/test/socketTests/deltaConnectionUpdateTests.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 \"node:assert\";\nimport { stub, useFakeTimers, SinonFakeTimers, type SinonStub } from \"sinon\";\nimport { ISocketStorageDiscovery } from \"@fluidframework/odsp-driver-definitions\";\nimport { IClient, ISignalMessage } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt, MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { Socket } from \"socket.io-client\";\nimport { EpochTracker } from \"../../epochTracker.js\";\nimport { LocalPersistentCache } from \"../../odspCache.js\";\nimport { getHashedDocumentId } from \"../../odspPublicUtils.js\";\nimport { OdspDocumentDeltaConnection } from \"../../odspDocumentDeltaConnection.js\";\nimport * as socketModule from \"../../socketModule.js\";\nimport * as joinSession from \"../../vroom.js\";\nimport { OdspDocumentService } from \"../../odspDocumentService.js\";\nimport { OdspDocumentServiceFactory } from \"../../odspDocumentServiceFactory.js\";\nimport { OdspFluidDataStoreLocator } from \"../../contractsPublic.js\";\nimport { createOdspUrl } from \"../../createOdspUrl.js\";\nimport { OdspDriverUrlResolver } from \"../../odspDriverUrlResolver.js\";\nimport { ClientSocketMock } from \"./socketMock.js\";\n\ndescribe(\"DeltaConnectionMetadata update tests\", () => {\n\tlet clock: SinonFakeTimers;\n\tconst client: IClient = {\n\t\tmode: \"write\",\n\t\tscopes: [\"doc:read\", \"doc:write\"],\n\t\tdetails: { capabilities: { interactive: true } },\n\t\tpermission: [],\n\t\tuser: { id: \"userId\" },\n\t};\n\n\tlet logger: ITelemetryLoggerExt;\n\tconst siteUrl = \"https://microsoft.sharepoint-df.com/siteUrl\";\n\tconst driveId = \"driveId\";\n\tconst itemId = \"itemId\";\n\tlet epochTracker: EpochTracker;\n\tlet localCache: LocalPersistentCache;\n\tlet hashedDocumentId: string;\n\tlet service: OdspDocumentService;\n\tlet socket: ClientSocketMock | undefined;\n\tconst resolver = new OdspDriverUrlResolver();\n\tconst joinSessionResponse: ISocketStorageDiscovery = {\n\t\tdeltaStorageUrl: \"https://fake/deltaStorageUrl\",\n\t\tdeltaStreamSocketUrl: \"https://localhost:3001\",\n\t\tid: \"id\",\n\t\ttenantId: \"tenantId\",\n\t\tsnapshotStorageUrl: \"https://fake/snapshotStorageUrl\",\n\t\trefreshSessionDurationSeconds: 100,\n\t};\n\tlet odspDocumentServiceFactory: OdspDocumentServiceFactory;\n\n\t// Stash the real setTimeout because sinon fake timers will hijack it.\n\tconst realSetTimeout = setTimeout;\n\n\t// function to yield control in the Javascript event loop.\n\tasync function yieldEventLoop(): Promise<void> {\n\t\tawait new Promise<void>((resolve) => {\n\t\t\trealSetTimeout(resolve, 0);\n\t\t});\n\t}\n\n\tasync function tickClock(tickValue: number): Promise<void> {\n\t\tclock.tick(tickValue);\n\n\t\t// Yield the event loop because the outbound op will be processed asynchronously.\n\t\tawait yieldEventLoop();\n\t}\n\n\tfunction addJoinSessionStub(label: string): SinonStub {\n\t\tjoinSessionResponse.sensitivityLabelsInfo = JSON.stringify({\n\t\t\tlabels: label,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t\tconst joinSessionStub = stub(joinSession, \"fetchJoinSession\").callsFake(\n\t\t\tasync () => joinSessionResponse,\n\t\t);\n\t\treturn joinSessionStub;\n\t}\n\n\tbefore(async () => {\n\t\thashedDocumentId = await getHashedDocumentId(driveId, itemId);\n\t});\n\n\tbeforeEach(async () => {\n\t\tclock = useFakeTimers();\n\t\todspDocumentServiceFactory = new OdspDocumentServiceFactory(\n\t\t\tasync (_options) => \"token\",\n\t\t\tasync (_options) => \"token\",\n\t\t\tnew LocalPersistentCache(2000),\n\t\t\t{ snapshotOptions: { timeout: 2000 } },\n\t\t);\n\t\tconst locator: OdspFluidDataStoreLocator = { driveId, itemId, siteUrl, dataStorePath: \"/\" };\n\t\tconst request = createOdspUrl(locator);\n\t\tconst resolvedUrl = await resolver.resolve({ url: request });\n\t\tlogger = new MockLogger().toTelemetryLogger();\n\t\tepochTracker = new EpochTracker(\n\t\t\tlocalCache,\n\t\t\t{\n\t\t\t\tdocId: hashedDocumentId,\n\t\t\t\tresolvedUrl,\n\t\t\t},\n\t\t\tlogger,\n\t\t);\n\n\t\tservice = (await odspDocumentServiceFactory.createDocumentService(\n\t\t\tresolvedUrl,\n\t\t\tlogger,\n\t\t)) as OdspDocumentService;\n\t});\n\n\tasync function mockSocket<T>(_response: Socket, callback: () => Promise<T>): Promise<T> {\n\t\tconst getSocketCreationStub = stub(socketModule, \"SocketIOClientStatic\");\n\t\tgetSocketCreationStub.returns(_response);\n\t\ttry {\n\t\t\treturn await callback();\n\t\t} finally {\n\t\t\tgetSocketCreationStub.restore();\n\t\t}\n\t}\n\n\tit(\"Delta connection metadata should be updated via Fluid signals and join session response\", async () => {\n\t\tawait tickClock(1);\n\t\tsocket = new ClientSocketMock();\n\t\tlet eventRaised = false;\n\t\tlet content: Record<string, string>;\n\n\t\tconst handler = (metadata: Record<string, string>): void => {\n\t\t\teventRaised = true;\n\t\t\tassert.strictEqual(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tJSON.parse(metadata.sensitivityLabelsInfo).labels,\n\t\t\t\tcontent.labels,\n\t\t\t\t\"label via event should match\",\n\t\t\t);\n\t\t};\n\n\t\tlet joinSessionStub = addJoinSessionStub(\"label1\");\n\n\t\tcontent = { labels: \"label1\" };\n\t\tservice.on(\"metadataUpdate\", handler);\n\t\tconst connection = (await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tservice.connectToDeltaStream(client),\n\t\t)) as OdspDocumentDeltaConnection;\n\t\tassert(eventRaised, \"event1 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\t\tjoinSessionStub.restore();\n\n\t\tassert(!connection.disposed, \"connection should not be disposed\");\n\n\t\tassert(joinSessionStub.calledOnce, \"Should called once on first try\");\n\n\t\tawait tickClock(1);\n\n\t\t// Now change label through signal and listen as event on service.\n\t\t// eslint-disable-next-line require-atomic-updates\n\t\teventRaised = false;\n\t\tcontent = { labels: \"label2\" };\n\t\tconst signalContent1 = { labels: \"label2\", timestamp: Date.now() };\n\t\tconst signalMessage1: ISignalMessage = {\n\t\t\tclientId: null,\n\t\t\tcontent: JSON.stringify({\n\t\t\t\tcontents: {\n\t\t\t\t\ttype: \"PolicyLabelsUpdate\",\n\t\t\t\t\tcontent: signalContent1,\n\t\t\t\t},\n\t\t\t}),\n\t\t};\n\n\t\tservice.on(\"metadataUpdate\", handler);\n\n\t\tsocket.emit(\"signal\", signalMessage1);\n\t\tassert(eventRaised, \"event2 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\n\t\tawait tickClock(1);\n\n\t\t// Now update through join session response\n\t\t// eslint-disable-next-line require-atomic-updates\n\t\teventRaised = false;\n\t\tcontent = { labels: \"label3\" };\n\t\tservice.on(\"metadataUpdate\", handler);\n\t\tjoinSessionStub = addJoinSessionStub(\"label3\");\n\t\tawait tickClock(70000);\n\t\tjoinSessionStub.restore();\n\t\tassert(eventRaised, \"event3 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\t});\n\n\tafterEach(async () => {\n\t\tclock.reset();\n\t\tsocket?.close();\n\t\tawait epochTracker.removeEntries().catch(() => {});\n\t});\n\n\tafterEach(async () => {\n\t\tclock.restore();\n\t});\n});\n"]}
1
+ {"version":3,"file":"deltaConnectionUpdateTests.spec.js","sourceRoot":"","sources":["../../../src/test/socketTests/deltaConnectionUpdateTests.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 \"node:assert\";\nimport { ISocketStorageDiscovery } from \"@fluidframework/odsp-driver-definitions\";\nimport { IClient, ISignalMessage } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt, MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { SinonFakeTimers, type SinonStub, stub, useFakeTimers } from \"sinon\";\nimport { Socket } from \"socket.io-client\";\nimport { OdspFluidDataStoreLocator } from \"../../contractsPublic.js\";\nimport { createOdspUrl } from \"../../createOdspUrl.js\";\nimport { EpochTracker } from \"../../epochTracker.js\";\nimport { LocalPersistentCache } from \"../../odspCache.js\";\nimport { OdspDocumentDeltaConnection } from \"../../odspDocumentDeltaConnection.js\";\nimport { OdspDocumentService } from \"../../odspDocumentService.js\";\nimport { OdspDocumentServiceFactory } from \"../../odspDocumentServiceFactory.js\";\nimport { OdspDriverUrlResolver } from \"../../odspDriverUrlResolver.js\";\nimport { getHashedDocumentId } from \"../../odspPublicUtils.js\";\nimport * as socketModule from \"../../socketModule.js\";\nimport * as joinSession from \"../../vroom.js\";\nimport { ClientSocketMock } from \"./socketMock.js\";\n\ndescribe(\"DeltaConnectionMetadata update tests\", () => {\n\tlet clock: SinonFakeTimers;\n\tconst client: IClient = {\n\t\tmode: \"write\",\n\t\tscopes: [\"doc:read\", \"doc:write\"],\n\t\tdetails: { capabilities: { interactive: true } },\n\t\tpermission: [],\n\t\tuser: { id: \"userId\" },\n\t};\n\n\tlet logger: ITelemetryLoggerExt;\n\tconst siteUrl = \"https://microsoft.sharepoint-df.com/siteUrl\";\n\tconst driveId = \"driveId\";\n\tconst itemId = \"itemId\";\n\tlet epochTracker: EpochTracker;\n\tlet localCache: LocalPersistentCache;\n\tlet hashedDocumentId: string;\n\tlet service: OdspDocumentService;\n\tlet socket: ClientSocketMock | undefined;\n\tconst resolver = new OdspDriverUrlResolver();\n\tconst joinSessionResponse: ISocketStorageDiscovery = {\n\t\tdeltaStorageUrl: \"https://fake/deltaStorageUrl\",\n\t\tdeltaStreamSocketUrl: \"https://localhost:3001\",\n\t\tid: \"id\",\n\t\ttenantId: \"tenantId\",\n\t\tsnapshotStorageUrl: \"https://fake/snapshotStorageUrl\",\n\t\trefreshSessionDurationSeconds: 100,\n\t};\n\tlet odspDocumentServiceFactory: OdspDocumentServiceFactory;\n\n\t// Stash the real setTimeout because sinon fake timers will hijack it.\n\tconst realSetTimeout = setTimeout;\n\n\t// function to yield control in the Javascript event loop.\n\tasync function yieldEventLoop(): Promise<void> {\n\t\tawait new Promise<void>((resolve) => {\n\t\t\trealSetTimeout(resolve, 0);\n\t\t});\n\t}\n\n\tasync function tickClock(tickValue: number): Promise<void> {\n\t\tclock.tick(tickValue);\n\n\t\t// Yield the event loop because the outbound op will be processed asynchronously.\n\t\tawait yieldEventLoop();\n\t}\n\n\tfunction addJoinSessionStub(label: string): SinonStub {\n\t\tjoinSessionResponse.sensitivityLabelsInfo = JSON.stringify({\n\t\t\tlabels: label,\n\t\t\ttimestamp: Date.now(),\n\t\t});\n\t\tconst joinSessionStub = stub(joinSession, \"fetchJoinSession\").callsFake(\n\t\t\tasync () => joinSessionResponse,\n\t\t);\n\t\treturn joinSessionStub;\n\t}\n\n\tbefore(async () => {\n\t\thashedDocumentId = await getHashedDocumentId(driveId, itemId);\n\t});\n\n\tbeforeEach(async () => {\n\t\tclock = useFakeTimers();\n\t\todspDocumentServiceFactory = new OdspDocumentServiceFactory(\n\t\t\tasync (_options) => \"token\",\n\t\t\tasync (_options) => \"token\",\n\t\t\tnew LocalPersistentCache(2000),\n\t\t\t{ snapshotOptions: { timeout: 2000 } },\n\t\t);\n\t\tconst locator: OdspFluidDataStoreLocator = { driveId, itemId, siteUrl, dataStorePath: \"/\" };\n\t\tconst request = createOdspUrl(locator);\n\t\tconst resolvedUrl = await resolver.resolve({ url: request });\n\t\tlogger = new MockLogger().toTelemetryLogger();\n\t\tepochTracker = new EpochTracker(\n\t\t\tlocalCache,\n\t\t\t{\n\t\t\t\tdocId: hashedDocumentId,\n\t\t\t\tresolvedUrl,\n\t\t\t},\n\t\t\tlogger,\n\t\t);\n\n\t\tservice = (await odspDocumentServiceFactory.createDocumentService(\n\t\t\tresolvedUrl,\n\t\t\tlogger,\n\t\t)) as OdspDocumentService;\n\t});\n\n\tasync function mockSocket<T>(_response: Socket, callback: () => Promise<T>): Promise<T> {\n\t\tconst getSocketCreationStub = stub(socketModule, \"SocketIOClientStatic\");\n\t\tgetSocketCreationStub.returns(_response);\n\t\ttry {\n\t\t\treturn await callback();\n\t\t} finally {\n\t\t\tgetSocketCreationStub.restore();\n\t\t}\n\t}\n\n\tit(\"Delta connection metadata should be updated via Fluid signals and join session response\", async () => {\n\t\tawait tickClock(1);\n\t\tsocket = new ClientSocketMock();\n\t\tlet eventRaised = false;\n\t\tlet content: Record<string, string>;\n\n\t\tconst handler = (metadata: Record<string, string>): void => {\n\t\t\teventRaised = true;\n\t\t\tassert.strictEqual(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\tJSON.parse(metadata.sensitivityLabelsInfo).labels,\n\t\t\t\tcontent.labels,\n\t\t\t\t\"label via event should match\",\n\t\t\t);\n\t\t};\n\n\t\tlet joinSessionStub = addJoinSessionStub(\"label1\");\n\n\t\tcontent = { labels: \"label1\" };\n\t\tservice.on(\"metadataUpdate\", handler);\n\t\tconst connection = (await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tservice.connectToDeltaStream(client),\n\t\t)) as OdspDocumentDeltaConnection;\n\t\tassert(eventRaised, \"event1 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\t\tjoinSessionStub.restore();\n\n\t\tassert(!connection.disposed, \"connection should not be disposed\");\n\n\t\tassert(joinSessionStub.calledOnce, \"Should called once on first try\");\n\n\t\tawait tickClock(1);\n\n\t\t// Now change label through signal and listen as event on service.\n\t\t// eslint-disable-next-line require-atomic-updates\n\t\teventRaised = false;\n\t\tcontent = { labels: \"label2\" };\n\t\tconst signalContent1 = { labels: \"label2\", timestamp: Date.now() };\n\t\tconst signalMessage1: ISignalMessage = {\n\t\t\tclientId: null,\n\t\t\tcontent: JSON.stringify({\n\t\t\t\tcontents: {\n\t\t\t\t\ttype: \"PolicyLabelsUpdate\",\n\t\t\t\t\tcontent: signalContent1,\n\t\t\t\t},\n\t\t\t}),\n\t\t};\n\n\t\tservice.on(\"metadataUpdate\", handler);\n\n\t\tsocket.emit(\"signal\", signalMessage1);\n\t\tassert(eventRaised, \"event2 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\n\t\tawait tickClock(1);\n\n\t\t// Now update through join session response\n\t\t// eslint-disable-next-line require-atomic-updates\n\t\teventRaised = false;\n\t\tcontent = { labels: \"label3\" };\n\t\tservice.on(\"metadataUpdate\", handler);\n\t\tjoinSessionStub = addJoinSessionStub(\"label3\");\n\t\tawait tickClock(70000);\n\t\tjoinSessionStub.restore();\n\t\tassert(eventRaised, \"event3 should have been raised\");\n\t\tservice.off(\"metadataUpdate\", handler);\n\t});\n\n\tafterEach(async () => {\n\t\tclock.reset();\n\t\tsocket?.close();\n\t\tawait epochTracker.removeEntries().catch(() => {});\n\t});\n\n\tafterEach(async () => {\n\t\tclock.restore();\n\t});\n});\n"]}
@@ -2,10 +2,10 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { v4 as uuid } from "uuid";
6
5
  import { TypedEventEmitter } from "@fluid-internal/client-utils";
7
6
  import { createGenericNetworkError } from "@fluidframework/driver-utils";
8
7
  import { ScopeType } from "@fluidframework/protocol-definitions";
8
+ import { v4 as uuid } from "uuid";
9
9
  import { pkgVersion as driverVersion } from "../../packageVersion.js";
10
10
  /**
11
11
  * Class to mock the client socket connection. It can intercepts the events made on the socket
@@ -53,7 +53,11 @@ export class ClientSocketMock extends TypedEventEmitter {
53
53
  case "connect_document": {
54
54
  const connectMessage = args[0];
55
55
  switch (this.mockSocketConnectResponse.connect_document.eventToEmit) {
56
- case "connect_document_error":
56
+ case "connect_document_error": {
57
+ const errorToThrow = this.mockSocketConnectResponse.connect_document.errorToThrow ??
58
+ createGenericNetworkError("TestError", { canRetry: false }, { driverVersion, isSocketError: false });
59
+ this.emit(this.mockSocketConnectResponse.connect_document.eventToEmit, errorToThrow);
60
+ }
57
61
  case "connect_error": {
58
62
  const errorToThrow = this.mockSocketConnectResponse.connect_document.errorToThrow ??
59
63
  createGenericNetworkError("TestError", { canRetry: false }, { driverVersion });
@@ -1 +1 @@
1
- {"version":3,"file":"socketMock.js","sourceRoot":"","sources":["../../../src/test/socketTests/socketMock.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 { v4 as uuid } from \"uuid\";\nimport { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { IEvent } from \"@fluidframework/core-interfaces\";\nimport { IAnyDriverError } from \"@fluidframework/driver-definitions\";\nimport { createGenericNetworkError } from \"@fluidframework/driver-utils\";\nimport { IConnect, IConnected, ScopeType } from \"@fluidframework/protocol-definitions\";\nimport { pkgVersion as driverVersion } from \"../../packageVersion.js\";\nimport { IOdspSocketError } from \"../../contracts.js\";\n\nexport interface SocketMockEvents extends IEvent {\n\t(event: \"disconnect\", listener: (reason?: IAnyDriverError, details?: unknown) => void): void;\n\t(event: \"error\", listener: (error?: IAnyDriverError) => void): void;\n\t(\n\t\tevent: \"server_disconnect\",\n\t\tlistener: (socketError: IOdspSocketError, clientId?: string) => void,\n\t): void;\n}\n\nexport interface IMockSocketConnectResponse {\n\tconnect_document:\n\t\t| {\n\t\t\t\teventToEmit: \"connect_document_success\";\n\t\t\t\tconnectMessage?: IConnected;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_document_error\";\n\t\t\t\terrorToThrow?: IAnyDriverError;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_error\";\n\t\t\t\terrorToThrow?: IAnyDriverError;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_timeout\";\n\t\t };\n}\n\n/**\n * Class to mock the client socket connection. It can intercepts the events made on the socket\n * and then do its custom logic and can also send events to the client back.\n */\nexport class ClientSocketMock extends TypedEventEmitter<SocketMockEvents> {\n\tpublic disconnected = false;\n\tconstructor(\n\t\tprivate readonly mockSocketConnectResponse: IMockSocketConnectResponse = {\n\t\t\tconnect_document: { eventToEmit: \"connect_document_success\" },\n\t\t},\n\t) {\n\t\tsuper();\n\t}\n\n\tpublic get connected(): boolean {\n\t\treturn !this.disconnected;\n\t}\n\n\tpublic close(): void {\n\t\tthis.disconnect();\n\t}\n\n\tpublic disconnect(): void {\n\t\tthis.disconnected = true;\n\t}\n\n\tpublic get io(): {\n\t\treconnection: () => boolean;\n\t\treconnectionAttempts: () => number;\n\t} {\n\t\treturn {\n\t\t\treconnection: () => false,\n\t\t\treconnectionAttempts: () => 0,\n\t\t};\n\t}\n\n\tpublic sendDisconnectEvent(\n\t\treason?: IAnyDriverError,\n\t\tdetails?: { context: { type?: string; code?: number } },\n\t): void {\n\t\tconst error =\n\t\t\treason ??\n\t\t\tcreateGenericNetworkError(\"TestError\", { canRetry: false }, { driverVersion });\n\t\tthis.emit(\"disconnect\", error, details);\n\t}\n\n\tpublic sendErrorEvent(error?: IAnyDriverError): void {\n\t\tthis.emit(\n\t\t\t\"error\",\n\t\t\terror ?? createGenericNetworkError(\"TestError\", { canRetry: false }, { driverVersion }),\n\t\t);\n\t}\n\n\tpublic sendServerDisconnectEvent(socketError: IOdspSocketError, clientId?: string): void {\n\t\tif (clientId === undefined) {\n\t\t\tthis.disconnect();\n\t\t}\n\t\tthis.emit(\"server_disconnect\", socketError, clientId);\n\t}\n\n\tpublic emit(eventName: string, ...args: unknown[]): boolean {\n\t\tswitch (eventName) {\n\t\t\tcase \"connect_document\": {\n\t\t\t\tconst connectMessage = args[0] as IConnect;\n\t\t\t\tswitch (this.mockSocketConnectResponse.connect_document.eventToEmit) {\n\t\t\t\t\tcase \"connect_document_error\":\n\t\t\t\t\tcase \"connect_error\": {\n\t\t\t\t\t\tconst errorToThrow =\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.errorToThrow ??\n\t\t\t\t\t\t\tcreateGenericNetworkError(\n\t\t\t\t\t\t\t\t\"TestError\",\n\t\t\t\t\t\t\t\t{ canRetry: false },\n\t\t\t\t\t\t\t\t{ driverVersion },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.eventToEmit,\n\t\t\t\t\t\t\terrorToThrow,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"connect_document_success\": {\n\t\t\t\t\t\tconst iConnected: IConnected = this.mockSocketConnectResponse\n\t\t\t\t\t\t\t.connect_document.connectMessage ?? {\n\t\t\t\t\t\t\tclientId: uuid(),\n\t\t\t\t\t\t\texisting: true,\n\t\t\t\t\t\t\tinitialClients: [],\n\t\t\t\t\t\t\tinitialMessages: [],\n\t\t\t\t\t\t\tinitialSignals: [],\n\t\t\t\t\t\t\tmaxMessageSize: 1000,\n\t\t\t\t\t\t\tmode: connectMessage.mode,\n\t\t\t\t\t\t\tversion: connectMessage.versions[0],\n\t\t\t\t\t\t\tserviceConfiguration: { maxMessageSize: 1000, blockSize: 1000 },\n\t\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\t\tdocumentId: connectMessage.id,\n\t\t\t\t\t\t\t\tscopes: [\n\t\t\t\t\t\t\t\t\tScopeType.DocWrite,\n\t\t\t\t\t\t\t\t\tScopeType.DocRead,\n\t\t\t\t\t\t\t\t\tScopeType.SummaryWrite,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttenantId: connectMessage.tenantId,\n\t\t\t\t\t\t\t\tver: \"1.0.0\",\n\t\t\t\t\t\t\t\tiat: 10,\n\t\t\t\t\t\t\t\texp: 10,\n\t\t\t\t\t\t\t\tuser: connectMessage.client.user,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsupportedVersions: connectMessage.versions,\n\t\t\t\t\t\t\tepoch: \"testEpoch\",\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.emit(\"connect_document_success\", iConnected);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"connect_timeout\": {\n\t\t\t\t\t\tthis.emit(\"connect_timeout\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: // No-op\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuper.emit(eventName, ...args);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"socketMock.js","sourceRoot":"","sources":["../../../src/test/socketTests/socketMock.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 { TypedEventEmitter } from \"@fluid-internal/client-utils\";\nimport { IEvent } from \"@fluidframework/core-interfaces\";\nimport { IAnyDriverError } from \"@fluidframework/driver-definitions\";\nimport { createGenericNetworkError } from \"@fluidframework/driver-utils\";\nimport { IConnect, IConnected, ScopeType } from \"@fluidframework/protocol-definitions\";\nimport { v4 as uuid } from \"uuid\";\nimport { IOdspSocketError } from \"../../contracts.js\";\nimport { pkgVersion as driverVersion } from \"../../packageVersion.js\";\n\nexport interface SocketMockEvents extends IEvent {\n\t(event: \"disconnect\", listener: (reason?: IAnyDriverError, details?: unknown) => void): void;\n\t(event: \"error\", listener: (error?: IAnyDriverError) => void): void;\n\t(\n\t\tevent: \"server_disconnect\",\n\t\tlistener: (socketError: IOdspSocketError, clientId?: string) => void,\n\t): void;\n}\n\nexport interface IMockSocketConnectResponse {\n\tconnect_document:\n\t\t| {\n\t\t\t\teventToEmit: \"connect_document_success\";\n\t\t\t\tconnectMessage?: IConnected;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_document_error\";\n\t\t\t\terrorToThrow?: IAnyDriverError;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_error\";\n\t\t\t\terrorToThrow?: IAnyDriverError;\n\t\t }\n\t\t| {\n\t\t\t\teventToEmit: \"connect_timeout\";\n\t\t };\n}\n\n/**\n * Class to mock the client socket connection. It can intercepts the events made on the socket\n * and then do its custom logic and can also send events to the client back.\n */\nexport class ClientSocketMock extends TypedEventEmitter<SocketMockEvents> {\n\tpublic disconnected = false;\n\tconstructor(\n\t\tprivate readonly mockSocketConnectResponse: IMockSocketConnectResponse = {\n\t\t\tconnect_document: { eventToEmit: \"connect_document_success\" },\n\t\t},\n\t) {\n\t\tsuper();\n\t}\n\n\tpublic get connected(): boolean {\n\t\treturn !this.disconnected;\n\t}\n\n\tpublic close(): void {\n\t\tthis.disconnect();\n\t}\n\n\tpublic disconnect(): void {\n\t\tthis.disconnected = true;\n\t}\n\n\tpublic get io(): {\n\t\treconnection: () => boolean;\n\t\treconnectionAttempts: () => number;\n\t} {\n\t\treturn {\n\t\t\treconnection: () => false,\n\t\t\treconnectionAttempts: () => 0,\n\t\t};\n\t}\n\n\tpublic sendDisconnectEvent(\n\t\treason?: IAnyDriverError,\n\t\tdetails?: { context: { type?: string; code?: number } },\n\t): void {\n\t\tconst error =\n\t\t\treason ??\n\t\t\tcreateGenericNetworkError(\"TestError\", { canRetry: false }, { driverVersion });\n\t\tthis.emit(\"disconnect\", error, details);\n\t}\n\n\tpublic sendErrorEvent(error?: IAnyDriverError): void {\n\t\tthis.emit(\n\t\t\t\"error\",\n\t\t\terror ?? createGenericNetworkError(\"TestError\", { canRetry: false }, { driverVersion }),\n\t\t);\n\t}\n\n\tpublic sendServerDisconnectEvent(socketError: IOdspSocketError, clientId?: string): void {\n\t\tif (clientId === undefined) {\n\t\t\tthis.disconnect();\n\t\t}\n\t\tthis.emit(\"server_disconnect\", socketError, clientId);\n\t}\n\n\tpublic emit(eventName: string, ...args: unknown[]): boolean {\n\t\tswitch (eventName) {\n\t\t\tcase \"connect_document\": {\n\t\t\t\tconst connectMessage = args[0] as IConnect;\n\t\t\t\tswitch (this.mockSocketConnectResponse.connect_document.eventToEmit) {\n\t\t\t\t\tcase \"connect_document_error\": {\n\t\t\t\t\t\tconst errorToThrow =\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.errorToThrow ??\n\t\t\t\t\t\t\tcreateGenericNetworkError(\n\t\t\t\t\t\t\t\t\"TestError\",\n\t\t\t\t\t\t\t\t{ canRetry: false },\n\t\t\t\t\t\t\t\t{ driverVersion, isSocketError: false },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.eventToEmit,\n\t\t\t\t\t\t\terrorToThrow,\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tcase \"connect_error\": {\n\t\t\t\t\t\tconst errorToThrow =\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.errorToThrow ??\n\t\t\t\t\t\t\tcreateGenericNetworkError(\n\t\t\t\t\t\t\t\t\"TestError\",\n\t\t\t\t\t\t\t\t{ canRetry: false },\n\t\t\t\t\t\t\t\t{ driverVersion },\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\tthis.emit(\n\t\t\t\t\t\t\tthis.mockSocketConnectResponse.connect_document.eventToEmit,\n\t\t\t\t\t\t\terrorToThrow,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"connect_document_success\": {\n\t\t\t\t\t\tconst iConnected: IConnected = this.mockSocketConnectResponse\n\t\t\t\t\t\t\t.connect_document.connectMessage ?? {\n\t\t\t\t\t\t\tclientId: uuid(),\n\t\t\t\t\t\t\texisting: true,\n\t\t\t\t\t\t\tinitialClients: [],\n\t\t\t\t\t\t\tinitialMessages: [],\n\t\t\t\t\t\t\tinitialSignals: [],\n\t\t\t\t\t\t\tmaxMessageSize: 1000,\n\t\t\t\t\t\t\tmode: connectMessage.mode,\n\t\t\t\t\t\t\tversion: connectMessage.versions[0],\n\t\t\t\t\t\t\tserviceConfiguration: { maxMessageSize: 1000, blockSize: 1000 },\n\t\t\t\t\t\t\tclaims: {\n\t\t\t\t\t\t\t\tdocumentId: connectMessage.id,\n\t\t\t\t\t\t\t\tscopes: [\n\t\t\t\t\t\t\t\t\tScopeType.DocWrite,\n\t\t\t\t\t\t\t\t\tScopeType.DocRead,\n\t\t\t\t\t\t\t\t\tScopeType.SummaryWrite,\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\ttenantId: connectMessage.tenantId,\n\t\t\t\t\t\t\t\tver: \"1.0.0\",\n\t\t\t\t\t\t\t\tiat: 10,\n\t\t\t\t\t\t\t\texp: 10,\n\t\t\t\t\t\t\t\tuser: connectMessage.client.user,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tsupportedVersions: connectMessage.versions,\n\t\t\t\t\t\t\tepoch: \"testEpoch\",\n\t\t\t\t\t\t};\n\t\t\t\t\t\tthis.emit(\"connect_document_success\", iConnected);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tcase \"connect_timeout\": {\n\t\t\t\t\t\tthis.emit(\"connect_timeout\");\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tdefault: // No-op\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tsuper.emit(eventName, ...args);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n}\n"]}
@@ -3,14 +3,14 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { strict as assert } from "node:assert";
6
- import { stub } from "sinon";
7
- import { v4 as uuid } from "uuid";
6
+ import { createOdspNetworkError } from "@fluidframework/odsp-doclib-utils/internal";
8
7
  import { OdspErrorTypes } from "@fluidframework/odsp-driver-definitions";
9
8
  import { MockLogger, isFluidError } from "@fluidframework/telemetry-utils";
10
- import { createOdspNetworkError } from "@fluidframework/odsp-doclib-utils/internal";
9
+ import { stub } from "sinon";
10
+ import { v4 as uuid } from "uuid";
11
11
  import { EpochTracker } from "../../epochTracker.js";
12
- import { getHashedDocumentId } from "../../odspPublicUtils.js";
13
12
  import { OdspDocumentDeltaConnection } from "../../odspDocumentDeltaConnection.js";
13
+ import { getHashedDocumentId } from "../../odspPublicUtils.js";
14
14
  import * as socketModule from "../../socketModule.js";
15
15
  import { ClientSocketMock } from "./socketMock.js";
16
16
  describe("OdspDocumentDeltaConnection tests", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"socketTests.spec.js","sourceRoot":"","sources":["../../../src/test/socketTests/socketTests.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAoB,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE3F,OAAO,EAAuB,UAAU,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEhG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AAEpF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,KAAK,YAAY,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IAClD,IAAI,QAAQ,GAAG,UAAU,CAAC;IAC1B,IAAI,UAAU,GAAG,YAAY,CAAC;IAC9B,MAAM,KAAK,GAAG,OAAO,CAAC;IACtB,MAAM,MAAM,GAAY;QACvB,IAAI,EAAE,OAAO;QACb,MAAM,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;QACjC,OAAO,EAAE,EAAE,YAAY,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;QAChD,UAAU,EAAE,EAAE;QACd,IAAI,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE;KACtB,CAAC;IACF,MAAM,YAAY,GAAG,sBAAsB,CAAC;IAC5C,IAAI,MAA2B,CAAC;IAChC,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC1C,MAAM,OAAO,GAAG,6CAA6C,CAAC;IAC9D,MAAM,OAAO,GAAG,SAAS,CAAC;IAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC;IACxB,IAAI,YAA0B,CAAC;IAC/B,IAAI,UAAgC,CAAC;IACrC,IAAI,gBAAwB,CAAC;IAC7B,MAAM,WAAW,GAAG;QACnB,OAAO;QACP,OAAO;QACP,MAAM;QACN,eAAe,EAAE,IAAI;KACU,CAAC;IACjC,IAAI,MAAoC,CAAC;IAEzC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,gBAAgB,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,KAAK,IAAI,EAAE;QACrB,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAC9C,UAAU,GAAG,IAAI,EAAE,CAAC;QACpB,QAAQ,GAAG,IAAI,EAAE,CAAC;QAClB,2CAA2C;QAC3C,YAAY,GAAG,IAAI,YAAY,CAC9B,UAAU,EACV;YACC,KAAK,EAAE,gBAAgB;YACvB,WAAW;SACX,EACD,MAAM,CACN,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,kBAAkB,GAAG,CAAC,OAAyB,EAAQ,EAAE;QAC9D,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,eAAe,CAAC,KAAK,CAAC,EAC5C,yCAAyC,CACzC,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,KAAK,CAAC,EACrD,kDAAkD,CAClD,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAC9C,2CAA2C,CAC3C,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,0BAA0B,CAAC,KAAK,CAAC,EACvD,oDAAoD,CACpD,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAChD,6CAA6C,CAC7C,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAC/C,4CAA4C,CAC5C,CAAC;QACF,MAAM,CACL,OAAO,CAAC,aAAa,CAAC,oBAAoB,CAAC,KAAK,CAAC,EACjD,8CAA8C,CAC9C,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,iCAAiC,CAAC,CAAC;QAChF,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,sCAAsC,CAAC,CAAC;IAC3F,CAAC,CAAC;IAEF,SAAS,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,EAAE,KAAK,EAAE,CAAC;QAChB,MAAM,YAAY,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,UAAU,CAAI,SAAiB,EAAE,QAA0B;QACzE,MAAM,qBAAqB,GAAG,IAAI,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;QACzE,qBAAqB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI;YACH,OAAO,MAAM,QAAQ,EAAE,CAAC;SACxB;gBAAS;YACT,qBAAqB,CAAC,OAAO,EAAE,CAAC;SAChC;IACF,CAAC;IAED,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC3E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,0BAA0B,CAAC,CAAC;QAClF,MAAM,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QAClE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,4BAA4B,CAAC,CAAC;QAE3E,IAAI,iBAAiB,GAAG,KAAK,CAAC;QAC9B,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACvD,iBAAiB,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,mCAAmC,CAAC,CAAC;QACjE,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,YAAY,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,GAAG,IAAI,gBAAgB,CAAC;YAC7B,gBAAgB,EAAE,EAAE,WAAW,EAAE,wBAAwB,EAAE,YAAY,EAAE;SACzE,CAAC,CAAC;QACH,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,UAAmD,CAAC;QACxD,IAAI;YACH,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CACrE,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;SACF;QAAC,OAAO,KAAK,EAAE;YACf,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,CAAC;YAChF,MAAM,CACL,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,mBAAmB,EACtD,6BAA6B,CAC7B,CAAC;SACF;QACD,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,8BAA8B,CAAC,CAAC;QACjE,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,YAAY,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,GAAG,IAAI,gBAAgB,CAAC;YAC7B,gBAAgB,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,YAAY,EAAE;SAChE,CAAC,CAAC;QACH,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI;YACH,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CACxD,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;SACF;QAAC,OAAO,KAAK,EAAE;YACf,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,CAAC;YAChF,MAAM,CACL,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,mBAAmB,EACtD,6BAA6B,CAC7B,CAAC;SACF;QACD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,GAAG,IAAI,gBAAgB,CAAC;YAC7B,gBAAgB,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE;SACpD,CAAC,CAAC;QACH,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI;YACH,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CACxD,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;SACF;QAAC,OAAO,KAAK,EAAE;YACf,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,yBAAyB,CAAC,CAAC;YACvD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,4BAA4B,CAAC,CAAC;YAChF,MAAM,CACL,KAAK,CAAC,SAAS,KAAK,cAAc,CAAC,mBAAmB,EACtD,6BAA6B,CAC7B,CAAC;SACF;QACD,MAAM,CAAC,aAAa,EAAE,oBAAoB,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC3E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/D,IAAI,aAA0C,CAAC;QAC/C,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACvD,aAAa,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;QAEpE,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;QACtE,MAAM,CACL,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACnD,0CAA0C,CAC1C,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,kCAAkC,CAAC,CAAC;QAC9D,MAAM,CACL,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC/C,gDAAgD,CAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC3E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,IAAI,aAA0C,CAAC;QAC/C,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/D,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACvD,aAAa,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QAE/C,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;QACtE,MAAM,CACL,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EACnD,0CAA0C,CAC1C,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;QACnF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC3E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,IAAI,aAA0C,CAAC;QAC/C,MAAM,YAAY,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;QAC7D,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACvD,aAAa,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,mBAAmB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAElD,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;QACtE,MAAM,CACL,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,yCAAyC,CAAC,EACzE,mCAAmC,CACnC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpE,0GAA0G;QAC1G,MAAM,CAAE,aAAqB,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxE,0GAA0G;QAC1G,MAAM,CAAE,aAAqB,CAAC,UAAU,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC7E,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,UAAU,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC3E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QAEF,IAAI,aAA0C,CAAC;QAC/C,MAAM,YAAY,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QACpE,UAAU,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACvD,aAAa,GAAG,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpC,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,gCAAgC,CAAC,CAAC;QACtE,MAAM,CACL,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EACpE,mCAAmC,CACnC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,yBAAyB,CAAC,CAAC;QAC7E,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oFAAoF,EAAE,KAAK,IAAI,EAAE;QACnG,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC5E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC5E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/D,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACxD,kBAAkB,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACxD,kBAAkB,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC;QAE/C,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAC;QAC7E,MAAM,CAAC,kBAAkB,EAAE,iDAAiD,CAAC,CAAC;QAE9E,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC,CAAC;QACnF,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4FAA4F,EAAE,KAAK,IAAI,EAAE;QAC3G,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC5E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QAEF,MAAM,WAAW,GAAG,MAAM,UAAU,CAAC,MAA2B,EAAE,KAAK,IAAI,EAAE,CAC5E,2BAA2B,CAAC,MAAM,CACjC,QAAQ,EACR,UAAU,EACV,KAAK,EACL,MAAM,EACN,YAAY,EACZ,MAAM,EACN,KAAK,EACL,YAAY,EACZ,wBAAwB,CACxB,CACD,CAAC;QACF,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,IAAI,kBAAkB,GAAG,KAAK,CAAC;QAC/B,MAAM,YAAY,GAAG,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAC/D,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACxD,kBAAkB,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAuB,EAAE,EAAE;YACxD,kBAAkB,GAAG,IAAI,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,yBAAyB,CAAC,YAAY,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAErE,MAAM,CAAC,kBAAkB,EAAE,gDAAgD,CAAC,CAAC;QAC7E,MAAM,CAAC,CAAC,kBAAkB,EAAE,qDAAqD,CAAC,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,4BAA4B,CAAC,CAAC;QACvD,MAAM,CACL,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAC/C,gDAAgD,CAChD,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,gCAAgC,CAAC,CAAC;QAC9E,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,qCAAqC,CAAC,CAAC;QACxF,MAAM,CACL,MAAM,CAAC,aAAa,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAC9C,2CAA2C,CAC3C,CAAC;IACH,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\nimport { stub } from \"sinon\";\nimport { v4 as uuid } from \"uuid\";\nimport { IOdspResolvedUrl, OdspErrorTypes } from \"@fluidframework/odsp-driver-definitions\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt, MockLogger, isFluidError } from \"@fluidframework/telemetry-utils\";\nimport { IAnyDriverError } from \"@fluidframework/driver-definitions\";\nimport { createOdspNetworkError } from \"@fluidframework/odsp-doclib-utils/internal\";\nimport { Socket } from \"socket.io-client\";\nimport { EpochTracker } from \"../../epochTracker.js\";\nimport { LocalPersistentCache } from \"../../odspCache.js\";\nimport { getHashedDocumentId } from \"../../odspPublicUtils.js\";\nimport { OdspDocumentDeltaConnection } from \"../../odspDocumentDeltaConnection.js\";\nimport * as socketModule from \"../../socketModule.js\";\nimport { ClientSocketMock } from \"./socketMock.js\";\n\ndescribe(\"OdspDocumentDeltaConnection tests\", () => {\n\tlet tenantId = \"tenantId\";\n\tlet documentId = \"documentId\";\n\tconst token = \"token\";\n\tconst client: IClient = {\n\t\tmode: \"write\",\n\t\tscopes: [\"doc:read\", \"doc:write\"],\n\t\tdetails: { capabilities: { interactive: true } },\n\t\tpermission: [],\n\t\tuser: { id: \"userId\" },\n\t};\n\tconst webSocketUrl = \"https://webSocketUrl\";\n\tlet logger: ITelemetryLoggerExt;\n\tconst socketReferenceKeyPrefix = \"prefix\";\n\tconst siteUrl = \"https://microsoft.sharepoint-df.com/siteUrl\";\n\tconst driveId = \"driveId\";\n\tconst itemId = \"itemId\";\n\tlet epochTracker: EpochTracker;\n\tlet localCache: LocalPersistentCache;\n\tlet hashedDocumentId: string;\n\tconst resolvedUrl = {\n\t\tsiteUrl,\n\t\tdriveId,\n\t\titemId,\n\t\todspResolvedUrl: true,\n\t} as unknown as IOdspResolvedUrl;\n\tlet socket: ClientSocketMock | undefined;\n\n\tbefore(async () => {\n\t\thashedDocumentId = await getHashedDocumentId(driveId, itemId);\n\t});\n\n\tbeforeEach(async () => {\n\t\tlogger = new MockLogger().toTelemetryLogger();\n\t\tdocumentId = uuid();\n\t\ttenantId = uuid();\n\t\t// use null logger here as we expect errors\n\t\tepochTracker = new EpochTracker(\n\t\t\tlocalCache,\n\t\t\t{\n\t\t\t\tdocId: hashedDocumentId,\n\t\t\t\tresolvedUrl,\n\t\t\t},\n\t\t\tlogger,\n\t\t);\n\t});\n\n\tconst checkListenerCount = (_socket: ClientSocketMock): void => {\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_error\") === 0,\n\t\t\t\"no connect_error listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_document_error\") === 0,\n\t\t\t\"no connect_document_error listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_timeout\") === 0,\n\t\t\t\"no connect_timeout listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_document_success\") === 0,\n\t\t\t\"no connect_document_success listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"server_disconnect\") === 0,\n\t\t\t\"no server_disconnect listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"get_ops_response\") === 0,\n\t\t\t\"no get_ops_response listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"flush_ops_response\") === 0,\n\t\t\t\"no flush_ops_response listener should exiist\",\n\t\t);\n\t\tassert(_socket.listenerCount(\"error\") === 0, \"no error listener should exiist\");\n\t\tassert(_socket.listenerCount(\"disconnect\") === 0, \"no disconnect listener should exiist\");\n\t};\n\n\tafterEach(async () => {\n\t\tsocket?.close();\n\t\tawait epochTracker.removeEntries().catch(() => {});\n\t});\n\n\tasync function mockSocket<T>(_response: Socket, callback: () => Promise<T>): Promise<T> {\n\t\tconst getSocketCreationStub = stub(socketModule, \"SocketIOClientStatic\");\n\t\tgetSocketCreationStub.returns(_response);\n\t\ttry {\n\t\t\treturn await callback();\n\t\t} finally {\n\t\t\tgetSocketCreationStub.restore();\n\t\t}\n\t}\n\n\tit(\"Connect document success on connection\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tassert.strictEqual(connection.documentId, documentId, \"document id should match\");\n\t\tassert(!connection.disposed, \"connection should not be disposed\");\n\t\tassert(connection.existing, \"doucment should already exist\");\n\t\tassert.strictEqual(connection.mode, \"write\", \"connection should be write\");\n\n\t\tlet disconnectedEvent = false;\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent = true;\n\t\t});\n\n\t\tconnection.dispose();\n\t\tassert(connection.disposed, \"connection should be disposed now\");\n\t\tassert(disconnectedEvent, \"disconnect Event should happed\");\n\t\tassert(socket.connected, \"socket should still be connected\");\n\t});\n\n\tit(\"Connect document error on connection\", async () => {\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 401);\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_document_error\", errorToThrow },\n\t\t});\n\t\tlet errorhappened = false;\n\t\tlet connection: OdspDocumentDeltaConnection | undefined;\n\t\ttry {\n\t\t\tconnection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"TestSocketError\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(connection === undefined, \"connection should not happen\");\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connect error on connection\", async () => {\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 401);\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_error\", errorToThrow },\n\t\t});\n\t\tlet errorhappened = false;\n\t\ttry {\n\t\t\tawait mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"TestSocketError\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connect timeout on connection\", async () => {\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_timeout\" },\n\t\t});\n\t\tlet errorhappened = false;\n\t\ttry {\n\t\t\tawait mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"connect_timeout\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connection object should handle server_disconnect event with clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow, connection.clientId);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"server_disconnect\"),\n\t\t\t\"should container server disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket?.connected, \"socket should still be connected\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"server_disconnect\") === 1,\n\t\t\t\"server_disconnect listener should still exiist\",\n\t\t);\n\t});\n\n\tit(\"Connection object should handle server_disconnect event without clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"server_disconnect\"),\n\t\t\t\"should container server disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be disconnected\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Connection object should handle disconnect event\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 400);\n\t\tconst details = { context: { code: 400, type: \"badError\" } };\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendDisconnectEvent(errorToThrow, details);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"socket.io (disconnect): TestSocketError\"),\n\t\t\t\"should container disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\tassert((errorReceived as any).socketErrorType === details.context.type);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\tassert((errorReceived as any).socketCode === details.context.code);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be closed\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Connection object should handle error event\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 400);\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendErrorEvent(errorToThrow);\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"socket.io (error): TestSocketError\"),\n\t\t\t\"should container disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be closed\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Multiple connection objects should handle server_disconnect event without clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection1 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tconst connection2 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet disconnectedEvent1 = false;\n\t\tlet disconnectedEvent2 = false;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection1.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent1 = true;\n\t\t});\n\t\tconnection2.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent2 = true;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow);\n\n\t\tassert(disconnectedEvent1, \"disconnect event should happen on first object\");\n\t\tassert(disconnectedEvent2, \"disconnect event should happen on second object\");\n\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be disconnected\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Multiple connection objects should handle server_disconnect event with particular clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection1 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tconst connection2 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet disconnectedEvent1 = false;\n\t\tlet disconnectedEvent2 = false;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection1.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent1 = true;\n\t\t});\n\t\tconnection2.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent2 = true;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow, connection1.clientId);\n\n\t\tassert(disconnectedEvent1, \"disconnect event should happen on first object\");\n\t\tassert(!disconnectedEvent2, \"disconnect event should not happen on second object\");\n\n\t\tassert(socket.connected, \"socket should be connected\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"server_disconnect\") === 1,\n\t\t\t\"server_disconnect listener should still exiist\",\n\t\t);\n\t\tassert(socket.listenerCount(\"error\") === 1, \"1 error listener should exiist\");\n\t\tassert(socket.listenerCount(\"disconnect\") === 1, \"1 disconnect listener should exiist\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"get_ops_response\") === 1,\n\t\t\t\"1 get_ops_response listener should exiist\",\n\t\t);\n\t});\n});\n"]}
1
+ {"version":3,"file":"socketTests.spec.js","sourceRoot":"","sources":["../../../src/test/socketTests/socketTests.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 \"node:assert\";\nimport { IAnyDriverError } from \"@fluidframework/driver-definitions\";\nimport { createOdspNetworkError } from \"@fluidframework/odsp-doclib-utils/internal\";\nimport { IOdspResolvedUrl, OdspErrorTypes } from \"@fluidframework/odsp-driver-definitions\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLoggerExt, MockLogger, isFluidError } from \"@fluidframework/telemetry-utils\";\nimport { stub } from \"sinon\";\nimport { Socket } from \"socket.io-client\";\nimport { v4 as uuid } from \"uuid\";\nimport { EpochTracker } from \"../../epochTracker.js\";\nimport { LocalPersistentCache } from \"../../odspCache.js\";\nimport { OdspDocumentDeltaConnection } from \"../../odspDocumentDeltaConnection.js\";\nimport { getHashedDocumentId } from \"../../odspPublicUtils.js\";\nimport * as socketModule from \"../../socketModule.js\";\nimport { ClientSocketMock } from \"./socketMock.js\";\n\ndescribe(\"OdspDocumentDeltaConnection tests\", () => {\n\tlet tenantId = \"tenantId\";\n\tlet documentId = \"documentId\";\n\tconst token = \"token\";\n\tconst client: IClient = {\n\t\tmode: \"write\",\n\t\tscopes: [\"doc:read\", \"doc:write\"],\n\t\tdetails: { capabilities: { interactive: true } },\n\t\tpermission: [],\n\t\tuser: { id: \"userId\" },\n\t};\n\tconst webSocketUrl = \"https://webSocketUrl\";\n\tlet logger: ITelemetryLoggerExt;\n\tconst socketReferenceKeyPrefix = \"prefix\";\n\tconst siteUrl = \"https://microsoft.sharepoint-df.com/siteUrl\";\n\tconst driveId = \"driveId\";\n\tconst itemId = \"itemId\";\n\tlet epochTracker: EpochTracker;\n\tlet localCache: LocalPersistentCache;\n\tlet hashedDocumentId: string;\n\tconst resolvedUrl = {\n\t\tsiteUrl,\n\t\tdriveId,\n\t\titemId,\n\t\todspResolvedUrl: true,\n\t} as unknown as IOdspResolvedUrl;\n\tlet socket: ClientSocketMock | undefined;\n\n\tbefore(async () => {\n\t\thashedDocumentId = await getHashedDocumentId(driveId, itemId);\n\t});\n\n\tbeforeEach(async () => {\n\t\tlogger = new MockLogger().toTelemetryLogger();\n\t\tdocumentId = uuid();\n\t\ttenantId = uuid();\n\t\t// use null logger here as we expect errors\n\t\tepochTracker = new EpochTracker(\n\t\t\tlocalCache,\n\t\t\t{\n\t\t\t\tdocId: hashedDocumentId,\n\t\t\t\tresolvedUrl,\n\t\t\t},\n\t\t\tlogger,\n\t\t);\n\t});\n\n\tconst checkListenerCount = (_socket: ClientSocketMock): void => {\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_error\") === 0,\n\t\t\t\"no connect_error listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_document_error\") === 0,\n\t\t\t\"no connect_document_error listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_timeout\") === 0,\n\t\t\t\"no connect_timeout listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"connect_document_success\") === 0,\n\t\t\t\"no connect_document_success listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"server_disconnect\") === 0,\n\t\t\t\"no server_disconnect listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"get_ops_response\") === 0,\n\t\t\t\"no get_ops_response listener should exiist\",\n\t\t);\n\t\tassert(\n\t\t\t_socket.listenerCount(\"flush_ops_response\") === 0,\n\t\t\t\"no flush_ops_response listener should exiist\",\n\t\t);\n\t\tassert(_socket.listenerCount(\"error\") === 0, \"no error listener should exiist\");\n\t\tassert(_socket.listenerCount(\"disconnect\") === 0, \"no disconnect listener should exiist\");\n\t};\n\n\tafterEach(async () => {\n\t\tsocket?.close();\n\t\tawait epochTracker.removeEntries().catch(() => {});\n\t});\n\n\tasync function mockSocket<T>(_response: Socket, callback: () => Promise<T>): Promise<T> {\n\t\tconst getSocketCreationStub = stub(socketModule, \"SocketIOClientStatic\");\n\t\tgetSocketCreationStub.returns(_response);\n\t\ttry {\n\t\t\treturn await callback();\n\t\t} finally {\n\t\t\tgetSocketCreationStub.restore();\n\t\t}\n\t}\n\n\tit(\"Connect document success on connection\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tassert.strictEqual(connection.documentId, documentId, \"document id should match\");\n\t\tassert(!connection.disposed, \"connection should not be disposed\");\n\t\tassert(connection.existing, \"doucment should already exist\");\n\t\tassert.strictEqual(connection.mode, \"write\", \"connection should be write\");\n\n\t\tlet disconnectedEvent = false;\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent = true;\n\t\t});\n\n\t\tconnection.dispose();\n\t\tassert(connection.disposed, \"connection should be disposed now\");\n\t\tassert(disconnectedEvent, \"disconnect Event should happed\");\n\t\tassert(socket.connected, \"socket should still be connected\");\n\t});\n\n\tit(\"Connect document error on connection\", async () => {\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 401);\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_document_error\", errorToThrow },\n\t\t});\n\t\tlet errorhappened = false;\n\t\tlet connection: OdspDocumentDeltaConnection | undefined;\n\t\ttry {\n\t\t\tconnection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"TestSocketError\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(connection === undefined, \"connection should not happen\");\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connect error on connection\", async () => {\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 401);\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_error\", errorToThrow },\n\t\t});\n\t\tlet errorhappened = false;\n\t\ttry {\n\t\t\tawait mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"TestSocketError\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connect timeout on connection\", async () => {\n\t\tsocket = new ClientSocketMock({\n\t\t\tconnect_document: { eventToEmit: \"connect_timeout\" },\n\t\t});\n\t\tlet errorhappened = false;\n\t\ttry {\n\t\t\tawait mockSocket(socket as unknown as Socket, async () =>\n\t\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\t\ttenantId,\n\t\t\t\t\tdocumentId,\n\t\t\t\t\ttoken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebSocketUrl,\n\t\t\t\t\tlogger,\n\t\t\t\t\t60000,\n\t\t\t\t\tepochTracker,\n\t\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t\t),\n\t\t\t);\n\t\t} catch (error) {\n\t\t\terrorhappened = true;\n\t\t\tassert(isFluidError(error), \"should be a Fluid error\");\n\t\t\tassert(error.message.includes(\"connect_timeout\"), \"error message should match\");\n\t\t\tassert(\n\t\t\t\terror.errorType === OdspErrorTypes.genericNetworkError,\n\t\t\t\t\"errortype should be correct\",\n\t\t\t);\n\t\t}\n\t\tassert(errorhappened, \"error should occur\");\n\t});\n\n\tit(\"Connection object should handle server_disconnect event with clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow, connection.clientId);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"server_disconnect\"),\n\t\t\t\"should container server disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket?.connected, \"socket should still be connected\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"server_disconnect\") === 1,\n\t\t\t\"server_disconnect listener should still exiist\",\n\t\t);\n\t});\n\n\tit(\"Connection object should handle server_disconnect event without clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"server_disconnect\"),\n\t\t\t\"should container server disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be disconnected\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Connection object should handle disconnect event\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 400);\n\t\tconst details = { context: { code: 400, type: \"badError\" } };\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendDisconnectEvent(errorToThrow, details);\n\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"socket.io (disconnect): TestSocketError\"),\n\t\t\t\"should container disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\tassert((errorReceived as any).socketErrorType === details.context.type);\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\tassert((errorReceived as any).socketCode === details.context.code);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be closed\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Connection object should handle error event\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tlet errorReceived: IAnyDriverError | undefined;\n\t\tconst errorToThrow = createOdspNetworkError(\"TestSocketError\", 400);\n\t\tconnection.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\terrorReceived = reason;\n\t\t});\n\t\tsocket.sendErrorEvent(errorToThrow);\n\t\tassert(errorReceived !== undefined, \"disconnect event should happen\");\n\t\tassert(\n\t\t\terrorReceived.message.includes(\"socket.io (error): TestSocketError\"),\n\t\t\t\"should container disconnect event\",\n\t\t);\n\t\tassert(errorReceived.errorType, OdspErrorTypes.genericNetworkError);\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be closed\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Multiple connection objects should handle server_disconnect event without clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection1 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tconst connection2 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet disconnectedEvent1 = false;\n\t\tlet disconnectedEvent2 = false;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection1.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent1 = true;\n\t\t});\n\t\tconnection2.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent2 = true;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow);\n\n\t\tassert(disconnectedEvent1, \"disconnect event should happen on first object\");\n\t\tassert(disconnectedEvent2, \"disconnect event should happen on second object\");\n\n\t\tassert(socket !== undefined && !socket.connected, \"socket should be disconnected\");\n\t\tcheckListenerCount(socket);\n\t});\n\n\tit(\"Multiple connection objects should handle server_disconnect event with particular clientId\", async () => {\n\t\tsocket = new ClientSocketMock();\n\t\tconst connection1 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\n\t\tconst connection2 = await mockSocket(socket as unknown as Socket, async () =>\n\t\t\tOdspDocumentDeltaConnection.create(\n\t\t\t\ttenantId,\n\t\t\t\tdocumentId,\n\t\t\t\ttoken,\n\t\t\t\tclient,\n\t\t\t\twebSocketUrl,\n\t\t\t\tlogger,\n\t\t\t\t60000,\n\t\t\t\tepochTracker,\n\t\t\t\tsocketReferenceKeyPrefix,\n\t\t\t),\n\t\t);\n\t\tlet disconnectedEvent1 = false;\n\t\tlet disconnectedEvent2 = false;\n\t\tconst errorToThrow = { message: \"OdspSocketError\", code: 400 };\n\t\tconnection1.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent1 = true;\n\t\t});\n\t\tconnection2.on(\"disconnect\", (reason: IAnyDriverError) => {\n\t\t\tdisconnectedEvent2 = true;\n\t\t});\n\t\tsocket.sendServerDisconnectEvent(errorToThrow, connection1.clientId);\n\n\t\tassert(disconnectedEvent1, \"disconnect event should happen on first object\");\n\t\tassert(!disconnectedEvent2, \"disconnect event should not happen on second object\");\n\n\t\tassert(socket.connected, \"socket should be connected\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"server_disconnect\") === 1,\n\t\t\t\"server_disconnect listener should still exiist\",\n\t\t);\n\t\tassert(socket.listenerCount(\"error\") === 1, \"1 error listener should exiist\");\n\t\tassert(socket.listenerCount(\"disconnect\") === 1, \"1 disconnect listener should exiist\");\n\t\tassert(\n\t\t\tsocket.listenerCount(\"get_ops_response\") === 1,\n\t\t\t\"1 get_ops_response listener should exiist\",\n\t\t);\n\t});\n});\n"]}
@@ -3,7 +3,7 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import assert from "node:assert";
6
- import { tokenFromResponse, isTokenFromCache } from "@fluidframework/odsp-driver-definitions";
6
+ import { isTokenFromCache, tokenFromResponse } from "@fluidframework/odsp-driver-definitions";
7
7
  describe("tokenFromResponse", () => {
8
8
  it("returns token verbatim when token value is passed as a string", async () => {
9
9
  const token = "fake token";
@@ -1 +1 @@
1
- {"version":3,"file":"tokenFetch.spec.js","sourceRoot":"","sources":["../../src/test/tokenFetch.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE9F,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport assert from \"node:assert\";\nimport { tokenFromResponse, isTokenFromCache } from \"@fluidframework/odsp-driver-definitions\";\n\ndescribe(\"tokenFromResponse\", () => {\n\tit(\"returns token verbatim when token value is passed as a string\", async () => {\n\t\tconst token = \"fake token\";\n\t\tconst result = tokenFromResponse(token);\n\t\tassert.equal(result, token);\n\t});\n\n\tit(\"returns token extracted from TokenResponse when token value is passed as object\", async () => {\n\t\tconst tokenResponse = { token: \"fake token\", fromCache: false };\n\t\tconst result = tokenFromResponse(tokenResponse);\n\t\tassert.equal(result, tokenResponse.token);\n\t});\n\n\tit(\"returns null when token value is passed as null\", async () => {\n\t\tconst result = tokenFromResponse(null);\n\t\tassert.equal(result, null);\n\t});\n});\n\ndescribe(\"isTokenFromCache\", () => {\n\tit(\"returns undefined when token value is passed as a string\", async () => {\n\t\tconst token = \"fake token\";\n\t\tconst result = isTokenFromCache(token);\n\t\tassert.equal(result, undefined);\n\t});\n\n\tit(\"returns fromCache value extracted from TokenResponse when token value is passed as object\", async () => {\n\t\tconst tokenResponse = { token: \"fake token\", fromCache: true };\n\t\tconst result = isTokenFromCache(tokenResponse);\n\t\tassert.equal(result, tokenResponse.fromCache);\n\t});\n\n\tit(\"returns undefined when token value is passed as null\", async () => {\n\t\tconst result = isTokenFromCache(null);\n\t\tassert.equal(result, undefined);\n\t});\n});\n"]}
1
+ {"version":3,"file":"tokenFetch.spec.js","sourceRoot":"","sources":["../../src/test/tokenFetch.spec.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAE9F,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,YAAY,CAAC;QAC3B,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2FAA2F,EAAE,KAAK,IAAI,EAAE;QAC1G,MAAM,aAAa,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QAC/D,MAAM,MAAM,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport assert from \"node:assert\";\nimport { isTokenFromCache, tokenFromResponse } from \"@fluidframework/odsp-driver-definitions\";\n\ndescribe(\"tokenFromResponse\", () => {\n\tit(\"returns token verbatim when token value is passed as a string\", async () => {\n\t\tconst token = \"fake token\";\n\t\tconst result = tokenFromResponse(token);\n\t\tassert.equal(result, token);\n\t});\n\n\tit(\"returns token extracted from TokenResponse when token value is passed as object\", async () => {\n\t\tconst tokenResponse = { token: \"fake token\", fromCache: false };\n\t\tconst result = tokenFromResponse(tokenResponse);\n\t\tassert.equal(result, tokenResponse.token);\n\t});\n\n\tit(\"returns null when token value is passed as null\", async () => {\n\t\tconst result = tokenFromResponse(null);\n\t\tassert.equal(result, null);\n\t});\n});\n\ndescribe(\"isTokenFromCache\", () => {\n\tit(\"returns undefined when token value is passed as a string\", async () => {\n\t\tconst token = \"fake token\";\n\t\tconst result = isTokenFromCache(token);\n\t\tassert.equal(result, undefined);\n\t});\n\n\tit(\"returns fromCache value extracted from TokenResponse when token value is passed as object\", async () => {\n\t\tconst tokenResponse = { token: \"fake token\", fromCache: true };\n\t\tconst result = isTokenFromCache(tokenResponse);\n\t\tassert.equal(result, tokenResponse.fromCache);\n\t});\n\n\tit(\"returns undefined when token value is passed as null\", async () => {\n\t\tconst result = isTokenFromCache(null);\n\t\tassert.equal(result, undefined);\n\t});\n});\n"]}
@@ -7,7 +7,7 @@ import { Uint8ArrayToString } from "@fluid-internal/client-utils";
7
7
  import { MockLogger } from "@fluidframework/telemetry-utils";
8
8
  import { ReadBuffer } from "../ReadBufferUtils.js";
9
9
  import { TreeBuilderSerializer } from "../WriteBufferUtils.js";
10
- import { TreeBuilder, BlobCore, NodeCore, BlobShallowCopy, assertBlobCoreInstance, assertNodeCoreInstance, assertNumberInstance, assertBoolInstance, } from "../zipItDataRepresentationUtils.js";
10
+ import { BlobCore, BlobShallowCopy, NodeCore, TreeBuilder, assertBlobCoreInstance, assertBoolInstance, assertNodeCoreInstance, assertNumberInstance, } from "../zipItDataRepresentationUtils.js";
11
11
  function compareNodes(node1, node2) {
12
12
  if (node1 instanceof NodeCore) {
13
13
  assert(node2 instanceof NodeCore, "Node 2 should be a NodeCore type");
@@ -1 +1 @@
1
- {"version":3,"file":"zipItDataRepresentationTests.spec.js","sourceRoot":"","sources":["../../src/test/zipItDataRepresentationTests.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 \"node:assert\";\nimport { Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { ReadBuffer } from \"../ReadBufferUtils.js\";\nimport { TreeBuilderSerializer } from \"../WriteBufferUtils.js\";\nimport {\n\tTreeBuilder,\n\tBlobCore,\n\tNodeCore,\n\tNodeTypes,\n\tBlobShallowCopy,\n\tassertBlobCoreInstance,\n\tassertNodeCoreInstance,\n\tassertNumberInstance,\n\tassertBoolInstance,\n\tIStringElement,\n} from \"../zipItDataRepresentationUtils.js\";\n\nfunction compareNodes(node1: NodeTypes, node2: NodeTypes): void {\n\tif (node1 instanceof NodeCore) {\n\t\tassert(node2 instanceof NodeCore, \"Node 2 should be a NodeCore type\");\n\t\tassert.strictEqual(node1.length, node2.length, \"Node lengths are not same\");\n\t\tfor (let i = 0; i < node1.length; i++) {\n\t\t\tcompareNodes(node1.get(i), node2.get(i));\n\t\t}\n\t} else if (node1 instanceof BlobCore) {\n\t\tassert(node2 instanceof BlobCore, \"Node2 should also be a blob\");\n\t\tassert(\n\t\t\tUint8ArrayToString(node1.buffer, \"utf8\") === Uint8ArrayToString(node2.buffer, \"utf8\"),\n\t\t\t\"Blob contents not same\",\n\t\t);\n\t} else if (typeof node1 === \"number\") {\n\t\tassert(Number.isInteger(node1), \"Content 1 should be an integer\");\n\t\tassert(Number.isInteger(node2), \"Content 2 should be an integer\");\n\t\tassert.strictEqual(node1, node2, \"Number should be equal\");\n\t} else if (typeof node1 === \"boolean\") {\n\t\tassert(typeof node2 === \"boolean\", \"Content2 should be boolean\");\n\t\tassert.strictEqual(node1, node2, \"Bool value should be equal\");\n\t} else {\n\t\tassert(node1._stringElement, \"Unknown entity type!!\");\n\t\tconst maybeString2 = node2 as IStringElement;\n\t\tassert(maybeString2._stringElement, \"Content2 is not a string\");\n\t\tassert(node1.content === maybeString2.content, \"Blob contents not same\");\n\t}\n}\n\nfunction createLongBuffer(length: number): Uint8Array {\n\tconst buffer = new Uint8Array(length);\n\tfor (let i = 0; i < length; i++) {\n\t\tbuffer[i] = 30 + (i % 10); // 0-9\n\t}\n\treturn buffer;\n}\n\ndescribe(\"Tree Representation tests\", () => {\n\tlet builder: TreeBuilderSerializer;\n\tconst logger = new MockLogger();\n\tbeforeEach(() => {\n\t\tbuilder = new TreeBuilderSerializer();\n\t});\n\tafterEach(() => {\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tfunction validate(length = -1): void {\n\t\tconst buffer = builder.serialize();\n\t\tassert.strictEqual(buffer.length, length, \"buffer size not equal\");\n\t\tconst builder2 = TreeBuilder.load(\n\t\t\tnew ReadBuffer(buffer),\n\t\t\tlogger.toTelemetryLogger(),\n\t\t).builder;\n\t\tcompareNodes(builder, builder2);\n\t}\n\n\tit(\"empty\", async () => {\n\t\tvalidate(0);\n\t});\n\n\tit(\"single node\", async () => {\n\t\tbuilder.addNode();\n\t\tvalidate(2);\n\t});\n\n\tit(\"number 0\", async () => {\n\t\tbuilder.addNumber(0);\n\t\tvalidate(1);\n\t});\n\n\tit(\"number\", async () => {\n\t\tbuilder.addNumber(1);\n\t\tvalidate(1 + 1);\n\t});\n\n\tit(\"big number\", async () => {\n\t\tbuilder.addNumber(65536 * 65536);\n\t\t// 1 for Marker Code and 8 for representation\n\t\tvalidate(1 + 8);\n\t});\n\n\tit(\"boolean\", async () => {\n\t\tbuilder.addBool(true);\n\t\tvalidate(1);\n\t});\n\n\tit(\"empty string\", async () => {\n\t\tbuilder.addString(\"\");\n\t\t// 1 for Marker Code is enough for empty string.\n\t\tvalidate(1);\n\t});\n\n\tit(\"small string\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tvalidate(2 + 5);\n\t});\n\n\tit(\"small const string\", async () => {\n\t\tbuilder.addDictionaryString(\"first\");\n\t\tvalidate(8 + 2);\n\t});\n\n\tit(\"empty buffer\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(0));\n\t\tvalidate(1);\n\t});\n\n\tit(\"single long buffer (255)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(255));\n\t\tvalidate(2 + 255);\n\t});\n\n\tit(\"single long buffer (256)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(256));\n\t\t// 1 for Marker Code, 2 for representing length of buffer and 256 for data\n\t\tvalidate(1 + 2 + 256);\n\t});\n\n\tit(\"single long buffer (257)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(257));\n\t\tvalidate(1 + 2 + 257);\n\t});\n\n\tit(\"single long buffer\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(65538));\n\t\tvalidate(1 + 4 + 65538);\n\t});\n\n\tit(\"two node\", async () => {\n\t\tbuilder.addNode();\n\t\tbuilder.addNode();\n\t\tvalidate(2 + 2);\n\t});\n\n\tit(\"two buffer\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tbuilder.addString(\"Seventeen\");\n\t\tvalidate(2 + 5 + 2 + 9);\n\t});\n\n\tit(\"single node + buffer\", async () => {\n\t\tbuilder.addNode().addString(\"first\");\n\t\tvalidate(2 + 2 + 5);\n\t});\n\n\tit(\"single node + const string\", async () => {\n\t\tbuilder.addNode().addDictionaryString(\"first\");\n\t\tvalidate(2 + 8 + 2);\n\t});\n\n\tit(\">1 byte length string\", async () => {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i <= 256; ++i) {\n\t\t\tstr += \"a\";\n\t\t}\n\t\tbuilder.addNode().addDictionaryString(str);\n\t\tvalidate(2 + 9 + 257 + 2);\n\t});\n\n\tit(\"complex tree structure\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tconst node = builder.addNode();\n\t\tnode.addString(\"second\");\n\t\tnode.addString(\"third\");\n\t\tconst node2 = node.addNode();\n\t\tnode2.addString(\"fourth\");\n\t\tvalidate(2 + 5 + 2 + 2 + 6 + 2 + 5 + 2 + 2 + 6);\n\t});\n\n\tit(\"blob instance test\", async () => {\n\t\tconst blobNode = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\tassertBlobCoreInstance(blobNode, \"should be a blob\");\n\n\t\tlet success = true;\n\t\tconst nonBlobNode: NodeTypes = 5;\n\t\ttry {\n\t\t\tassertBlobCoreInstance(nonBlobNode, \"should be a blob\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"node instance test\", async () => {\n\t\tconst node = new NodeCore();\n\t\tassertNodeCoreInstance(node, \"should be a node\");\n\n\t\tlet success = true;\n\t\tconst nonNode: NodeTypes = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\ttry {\n\t\t\tassertNodeCoreInstance(nonNode, \"should be a node\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"number instance test\", async () => {\n\t\tconst numNode = 5;\n\t\tassertNumberInstance(numNode, \"should be a number\");\n\n\t\tlet success = true;\n\t\tconst nonNumberNode: NodeTypes = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\ttry {\n\t\t\tassertNumberInstance(nonNumberNode, \"should be a number\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"bool instance test\", async () => {\n\t\tconst boolNode = true;\n\t\tassertBoolInstance(boolNode, \"should be a boolean\");\n\n\t\tlet success = true;\n\t\tconst nonBoolNode: NodeTypes = 0;\n\t\ttry {\n\t\t\tassertBoolInstance(nonBoolNode, \"should be a bool\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n});\n"]}
1
+ {"version":3,"file":"zipItDataRepresentationTests.spec.js","sourceRoot":"","sources":["../../src/test/zipItDataRepresentationTests.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 \"node:assert\";\nimport { Uint8ArrayToString } from \"@fluid-internal/client-utils\";\nimport { MockLogger } from \"@fluidframework/telemetry-utils\";\nimport { ReadBuffer } from \"../ReadBufferUtils.js\";\nimport { TreeBuilderSerializer } from \"../WriteBufferUtils.js\";\nimport {\n\tBlobCore,\n\tBlobShallowCopy,\n\tIStringElement,\n\tNodeCore,\n\tNodeTypes,\n\tTreeBuilder,\n\tassertBlobCoreInstance,\n\tassertBoolInstance,\n\tassertNodeCoreInstance,\n\tassertNumberInstance,\n} from \"../zipItDataRepresentationUtils.js\";\n\nfunction compareNodes(node1: NodeTypes, node2: NodeTypes): void {\n\tif (node1 instanceof NodeCore) {\n\t\tassert(node2 instanceof NodeCore, \"Node 2 should be a NodeCore type\");\n\t\tassert.strictEqual(node1.length, node2.length, \"Node lengths are not same\");\n\t\tfor (let i = 0; i < node1.length; i++) {\n\t\t\tcompareNodes(node1.get(i), node2.get(i));\n\t\t}\n\t} else if (node1 instanceof BlobCore) {\n\t\tassert(node2 instanceof BlobCore, \"Node2 should also be a blob\");\n\t\tassert(\n\t\t\tUint8ArrayToString(node1.buffer, \"utf8\") === Uint8ArrayToString(node2.buffer, \"utf8\"),\n\t\t\t\"Blob contents not same\",\n\t\t);\n\t} else if (typeof node1 === \"number\") {\n\t\tassert(Number.isInteger(node1), \"Content 1 should be an integer\");\n\t\tassert(Number.isInteger(node2), \"Content 2 should be an integer\");\n\t\tassert.strictEqual(node1, node2, \"Number should be equal\");\n\t} else if (typeof node1 === \"boolean\") {\n\t\tassert(typeof node2 === \"boolean\", \"Content2 should be boolean\");\n\t\tassert.strictEqual(node1, node2, \"Bool value should be equal\");\n\t} else {\n\t\tassert(node1._stringElement, \"Unknown entity type!!\");\n\t\tconst maybeString2 = node2 as IStringElement;\n\t\tassert(maybeString2._stringElement, \"Content2 is not a string\");\n\t\tassert(node1.content === maybeString2.content, \"Blob contents not same\");\n\t}\n}\n\nfunction createLongBuffer(length: number): Uint8Array {\n\tconst buffer = new Uint8Array(length);\n\tfor (let i = 0; i < length; i++) {\n\t\tbuffer[i] = 30 + (i % 10); // 0-9\n\t}\n\treturn buffer;\n}\n\ndescribe(\"Tree Representation tests\", () => {\n\tlet builder: TreeBuilderSerializer;\n\tconst logger = new MockLogger();\n\tbeforeEach(() => {\n\t\tbuilder = new TreeBuilderSerializer();\n\t});\n\tafterEach(() => {\n\t\tlogger.assertMatchNone([{ category: \"error\" }]);\n\t});\n\n\tfunction validate(length = -1): void {\n\t\tconst buffer = builder.serialize();\n\t\tassert.strictEqual(buffer.length, length, \"buffer size not equal\");\n\t\tconst builder2 = TreeBuilder.load(\n\t\t\tnew ReadBuffer(buffer),\n\t\t\tlogger.toTelemetryLogger(),\n\t\t).builder;\n\t\tcompareNodes(builder, builder2);\n\t}\n\n\tit(\"empty\", async () => {\n\t\tvalidate(0);\n\t});\n\n\tit(\"single node\", async () => {\n\t\tbuilder.addNode();\n\t\tvalidate(2);\n\t});\n\n\tit(\"number 0\", async () => {\n\t\tbuilder.addNumber(0);\n\t\tvalidate(1);\n\t});\n\n\tit(\"number\", async () => {\n\t\tbuilder.addNumber(1);\n\t\tvalidate(1 + 1);\n\t});\n\n\tit(\"big number\", async () => {\n\t\tbuilder.addNumber(65536 * 65536);\n\t\t// 1 for Marker Code and 8 for representation\n\t\tvalidate(1 + 8);\n\t});\n\n\tit(\"boolean\", async () => {\n\t\tbuilder.addBool(true);\n\t\tvalidate(1);\n\t});\n\n\tit(\"empty string\", async () => {\n\t\tbuilder.addString(\"\");\n\t\t// 1 for Marker Code is enough for empty string.\n\t\tvalidate(1);\n\t});\n\n\tit(\"small string\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tvalidate(2 + 5);\n\t});\n\n\tit(\"small const string\", async () => {\n\t\tbuilder.addDictionaryString(\"first\");\n\t\tvalidate(8 + 2);\n\t});\n\n\tit(\"empty buffer\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(0));\n\t\tvalidate(1);\n\t});\n\n\tit(\"single long buffer (255)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(255));\n\t\tvalidate(2 + 255);\n\t});\n\n\tit(\"single long buffer (256)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(256));\n\t\t// 1 for Marker Code, 2 for representing length of buffer and 256 for data\n\t\tvalidate(1 + 2 + 256);\n\t});\n\n\tit(\"single long buffer (257)\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(257));\n\t\tvalidate(1 + 2 + 257);\n\t});\n\n\tit(\"single long buffer\", async () => {\n\t\tbuilder.addBlob(createLongBuffer(65538));\n\t\tvalidate(1 + 4 + 65538);\n\t});\n\n\tit(\"two node\", async () => {\n\t\tbuilder.addNode();\n\t\tbuilder.addNode();\n\t\tvalidate(2 + 2);\n\t});\n\n\tit(\"two buffer\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tbuilder.addString(\"Seventeen\");\n\t\tvalidate(2 + 5 + 2 + 9);\n\t});\n\n\tit(\"single node + buffer\", async () => {\n\t\tbuilder.addNode().addString(\"first\");\n\t\tvalidate(2 + 2 + 5);\n\t});\n\n\tit(\"single node + const string\", async () => {\n\t\tbuilder.addNode().addDictionaryString(\"first\");\n\t\tvalidate(2 + 8 + 2);\n\t});\n\n\tit(\">1 byte length string\", async () => {\n\t\tlet str = \"\";\n\t\tfor (let i = 0; i <= 256; ++i) {\n\t\t\tstr += \"a\";\n\t\t}\n\t\tbuilder.addNode().addDictionaryString(str);\n\t\tvalidate(2 + 9 + 257 + 2);\n\t});\n\n\tit(\"complex tree structure\", async () => {\n\t\tbuilder.addString(\"first\");\n\t\tconst node = builder.addNode();\n\t\tnode.addString(\"second\");\n\t\tnode.addString(\"third\");\n\t\tconst node2 = node.addNode();\n\t\tnode2.addString(\"fourth\");\n\t\tvalidate(2 + 5 + 2 + 2 + 6 + 2 + 5 + 2 + 2 + 6);\n\t});\n\n\tit(\"blob instance test\", async () => {\n\t\tconst blobNode = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\tassertBlobCoreInstance(blobNode, \"should be a blob\");\n\n\t\tlet success = true;\n\t\tconst nonBlobNode: NodeTypes = 5;\n\t\ttry {\n\t\t\tassertBlobCoreInstance(nonBlobNode, \"should be a blob\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"node instance test\", async () => {\n\t\tconst node = new NodeCore();\n\t\tassertNodeCoreInstance(node, \"should be a node\");\n\n\t\tlet success = true;\n\t\tconst nonNode: NodeTypes = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\ttry {\n\t\t\tassertNodeCoreInstance(nonNode, \"should be a node\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"number instance test\", async () => {\n\t\tconst numNode = 5;\n\t\tassertNumberInstance(numNode, \"should be a number\");\n\n\t\tlet success = true;\n\t\tconst nonNumberNode: NodeTypes = new BlobShallowCopy(new Uint8Array(), 0, 0);\n\t\ttry {\n\t\t\tassertNumberInstance(nonNumberNode, \"should be a number\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n\n\tit(\"bool instance test\", async () => {\n\t\tconst boolNode = true;\n\t\tassertBoolInstance(boolNode, \"should be a boolean\");\n\n\t\tlet success = true;\n\t\tconst nonBoolNode: NodeTypes = 0;\n\t\ttry {\n\t\t\tassertBoolInstance(nonBoolNode, \"should be a bool\");\n\t\t} catch {\n\t\t\tsuccess = false;\n\t\t}\n\t\tassert(!success, \"Error should have occured\");\n\t});\n});\n"]}
package/lib/vroom.d.ts CHANGED
@@ -2,10 +2,10 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
+ import { IOdspUrlParts, ISocketStorageDiscovery, InstrumentedStorageTokenFetcher } from "@fluidframework/odsp-driver-definitions";
5
6
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
- import { InstrumentedStorageTokenFetcher, ISocketStorageDiscovery, IOdspUrlParts } from "@fluidframework/odsp-driver-definitions";
7
- import { TokenFetchOptionsEx } from "./odspUtils.js";
8
7
  import { EpochTracker } from "./epochTracker.js";
8
+ import { TokenFetchOptionsEx } from "./odspUtils.js";
9
9
  /**
10
10
  * Makes join session call on SPO to get information about the web socket for a document
11
11
  * @param urlParts - The SPO drive id, itemId, siteUrl that this request should be made against
@@ -1 +1 @@
1
- {"version":3,"file":"vroom.d.ts","sourceRoot":"","sources":["../src/vroom.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iCAAiC,CAAC;AACxF,OAAO,EACN,+BAA+B,EAC/B,uBAAuB,EACvB,aAAa,EACb,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAa,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAQjD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,eAAe,EAAE,+BAA+B,EAChD,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,mBAAmB,EAC5B,yBAAyB,EAAE,OAAO,GAAG,SAAS,EAC9C,uBAAuB,EAAE,OAAO,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,uBAAuB,CAAC,CA+ElC"}
1
+ {"version":3,"file":"vroom.d.ts","sourceRoot":"","sources":["../src/vroom.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,aAAa,EACb,uBAAuB,EACvB,+BAA+B,EAC/B,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iCAAiC,CAAC;AAExF,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAa,MAAM,gBAAgB,CAAC;AAQhE;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CACrC,QAAQ,EAAE,aAAa,EACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,EAC3B,eAAe,EAAE,+BAA+B,EAChD,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,OAAO,EAC3B,OAAO,EAAE,mBAAmB,EAC5B,yBAAyB,EAAE,OAAO,GAAG,SAAS,EAC9C,uBAAuB,EAAE,OAAO,EAChC,gBAAgB,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,uBAAuB,CAAC,CA+ElC"}
package/lib/vroom.js CHANGED
@@ -2,10 +2,10 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { v4 as uuid } from "uuid";
6
5
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
7
- import { getOrigin } from "./odspUtils.js";
6
+ import { v4 as uuid } from "uuid";
8
7
  import { getApiRoot } from "./odspUrlHelper.js";
8
+ import { getOrigin } from "./odspUtils.js";
9
9
  import { runWithRetry } from "./retryUtils.js";
10
10
  /**
11
11
  * Makes join session call on SPO to get information about the web socket for a document
package/lib/vroom.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"vroom.js","sourceRoot":"","sources":["../src/vroom.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 { v4 as uuid } from \"uuid\";\nimport { ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport { ITelemetryLoggerExt, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport {\n\tInstrumentedStorageTokenFetcher,\n\tISocketStorageDiscovery,\n\tIOdspUrlParts,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { getOrigin, TokenFetchOptionsEx } from \"./odspUtils.js\";\nimport { getApiRoot } from \"./odspUrlHelper.js\";\nimport { EpochTracker } from \"./epochTracker.js\";\nimport { runWithRetry } from \"./retryUtils.js\";\n\ninterface IJoinSessionBody {\n\trequestSocketToken: boolean;\n\tguestDisplayName: string;\n}\n\n/**\n * Makes join session call on SPO to get information about the web socket for a document\n * @param urlParts - The SPO drive id, itemId, siteUrl that this request should be made against\n * @param path - The API path that is relevant to this request\n * @param method - The type of request, such as GET or POST\n * @param logger - A logger to use for this request\n * @param getStorageToken - A function that is able to provide the access token for this request\n * @param epochTracker - fetch wrapper which incorporates epoch logic around joinSession call\n * @param requestSocketToken - flag indicating whether joinSession is expected to return access token\n * which is used when establishing websocket connection with collab session backend service.\n * @param options - Options to fetch the token.\n * @param disableJoinSessionRefresh - Whether the caller wants to disable refreshing join session periodically.\n * @param isRefreshingJoinSession - whether call is to refresh the session before expiry.\n * @param guestDisplayName - display name used to identify guest user joining a session.\n * This is optional and used only when collab session is being joined via invite.\n */\nexport async function fetchJoinSession(\n\turlParts: IOdspUrlParts,\n\tpath: string,\n\tmethod: string,\n\tlogger: ITelemetryLoggerExt,\n\tgetStorageToken: InstrumentedStorageTokenFetcher,\n\tepochTracker: EpochTracker,\n\trequestSocketToken: boolean,\n\toptions: TokenFetchOptionsEx,\n\tdisableJoinSessionRefresh: boolean | undefined,\n\tisRefreshingJoinSession: boolean,\n\tguestDisplayName?: string,\n): Promise<ISocketStorageDiscovery> {\n\tconst token = await getStorageToken(options, \"JoinSession\");\n\n\tconst tokenRefreshProps = options.refresh\n\t\t? { hasClaims: !!options.claims, hasTenantId: !!options.tenantId }\n\t\t: {};\n\tconst details: ITelemetryBaseProperties = {\n\t\trefreshedToken: options.refresh,\n\t\trequestSocketToken,\n\t\t...tokenRefreshProps,\n\t\trefreshingSession: isRefreshingJoinSession,\n\t};\n\n\treturn PerformanceEvent.timedExecAsync(\n\t\tlogger,\n\t\t{\n\t\t\teventName: \"JoinSession\",\n\t\t\tattempts: options.refresh ? 2 : 1,\n\t\t\tdetails: JSON.stringify(details),\n\t\t\t...tokenRefreshProps,\n\t\t},\n\t\tasync (event) => {\n\t\t\tconst siteOrigin = getOrigin(urlParts.siteUrl);\n\t\t\tconst formBoundary = uuid();\n\t\t\tlet postBody = `--${formBoundary}\\r\\n`;\n\t\t\tpostBody += `Authorization: Bearer ${token}\\r\\n`;\n\t\t\tpostBody += `X-HTTP-Method-Override: POST\\r\\n`;\n\t\t\tpostBody += `Content-Type: application/json\\r\\n`;\n\t\t\tif (!disableJoinSessionRefresh) {\n\t\t\t\tpostBody += `prefer: FluidRemoveCheckAccess\\r\\n`;\n\t\t\t}\n\t\t\tpostBody += `_post: 1\\r\\n`;\n\t\t\t// Name should be there when socket token is requested and vice-versa.\n\t\t\tif (requestSocketToken && guestDisplayName !== undefined) {\n\t\t\t\tconst body: IJoinSessionBody = {\n\t\t\t\t\trequestSocketToken: true,\n\t\t\t\t\tguestDisplayName,\n\t\t\t\t};\n\t\t\t\tpostBody += `\\r\\n${JSON.stringify(body)}\\r\\n`;\n\t\t\t}\n\t\t\tpostBody += `\\r\\n--${formBoundary}--`;\n\t\t\tconst headers: { [index: string]: string } = {\n\t\t\t\t\"Content-Type\": `multipart/form-data;boundary=${formBoundary}`,\n\t\t\t};\n\n\t\t\tconst response = await runWithRetry(\n\t\t\t\tasync () =>\n\t\t\t\t\tepochTracker.fetchAndParseAsJSON<ISocketStorageDiscovery>(\n\t\t\t\t\t\t`${getApiRoot(siteOrigin)}/drives/${urlParts.driveId}/items/${\n\t\t\t\t\t\t\turlParts.itemId\n\t\t\t\t\t\t}/${path}?ump=1`,\n\t\t\t\t\t\t{ method, headers, body: postBody },\n\t\t\t\t\t\t\"joinSession\",\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t),\n\t\t\t\t\"joinSession\",\n\t\t\t\tlogger,\n\t\t\t);\n\n\t\t\tconst socketUrl = response.content.deltaStreamSocketUrl;\n\t\t\t// expecting socketUrl to be something like https://{hostName}/...\n\t\t\tconst webSocketHostName = socketUrl.split(\"/\")[2];\n\n\t\t\t// TODO SPO-specific telemetry\n\t\t\tevent.end({\n\t\t\t\t...response.propsToLog,\n\t\t\t\t// pushV2 websocket urls will contain pushf\n\t\t\t\tpushv2: socketUrl.includes(\"pushf\"),\n\t\t\t\twebSocketHostName,\n\t\t\t\trefreshSessionDurationSeconds: response.content.refreshSessionDurationSeconds,\n\t\t\t});\n\n\t\t\tif (response.content.runtimeTenantId && !response.content.tenantId) {\n\t\t\t\tresponse.content.tenantId = response.content.runtimeTenantId;\n\t\t\t}\n\n\t\t\treturn response.content;\n\t\t},\n\t);\n}\n"]}
1
+ {"version":3,"file":"vroom.js","sourceRoot":"","sources":["../src/vroom.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 { ITelemetryBaseProperties } from \"@fluidframework/core-interfaces\";\nimport {\n\tIOdspUrlParts,\n\tISocketStorageDiscovery,\n\tInstrumentedStorageTokenFetcher,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { ITelemetryLoggerExt, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { v4 as uuid } from \"uuid\";\nimport { EpochTracker } from \"./epochTracker.js\";\nimport { getApiRoot } from \"./odspUrlHelper.js\";\nimport { TokenFetchOptionsEx, getOrigin } from \"./odspUtils.js\";\nimport { runWithRetry } from \"./retryUtils.js\";\n\ninterface IJoinSessionBody {\n\trequestSocketToken: boolean;\n\tguestDisplayName: string;\n}\n\n/**\n * Makes join session call on SPO to get information about the web socket for a document\n * @param urlParts - The SPO drive id, itemId, siteUrl that this request should be made against\n * @param path - The API path that is relevant to this request\n * @param method - The type of request, such as GET or POST\n * @param logger - A logger to use for this request\n * @param getStorageToken - A function that is able to provide the access token for this request\n * @param epochTracker - fetch wrapper which incorporates epoch logic around joinSession call\n * @param requestSocketToken - flag indicating whether joinSession is expected to return access token\n * which is used when establishing websocket connection with collab session backend service.\n * @param options - Options to fetch the token.\n * @param disableJoinSessionRefresh - Whether the caller wants to disable refreshing join session periodically.\n * @param isRefreshingJoinSession - whether call is to refresh the session before expiry.\n * @param guestDisplayName - display name used to identify guest user joining a session.\n * This is optional and used only when collab session is being joined via invite.\n */\nexport async function fetchJoinSession(\n\turlParts: IOdspUrlParts,\n\tpath: string,\n\tmethod: string,\n\tlogger: ITelemetryLoggerExt,\n\tgetStorageToken: InstrumentedStorageTokenFetcher,\n\tepochTracker: EpochTracker,\n\trequestSocketToken: boolean,\n\toptions: TokenFetchOptionsEx,\n\tdisableJoinSessionRefresh: boolean | undefined,\n\tisRefreshingJoinSession: boolean,\n\tguestDisplayName?: string,\n): Promise<ISocketStorageDiscovery> {\n\tconst token = await getStorageToken(options, \"JoinSession\");\n\n\tconst tokenRefreshProps = options.refresh\n\t\t? { hasClaims: !!options.claims, hasTenantId: !!options.tenantId }\n\t\t: {};\n\tconst details: ITelemetryBaseProperties = {\n\t\trefreshedToken: options.refresh,\n\t\trequestSocketToken,\n\t\t...tokenRefreshProps,\n\t\trefreshingSession: isRefreshingJoinSession,\n\t};\n\n\treturn PerformanceEvent.timedExecAsync(\n\t\tlogger,\n\t\t{\n\t\t\teventName: \"JoinSession\",\n\t\t\tattempts: options.refresh ? 2 : 1,\n\t\t\tdetails: JSON.stringify(details),\n\t\t\t...tokenRefreshProps,\n\t\t},\n\t\tasync (event) => {\n\t\t\tconst siteOrigin = getOrigin(urlParts.siteUrl);\n\t\t\tconst formBoundary = uuid();\n\t\t\tlet postBody = `--${formBoundary}\\r\\n`;\n\t\t\tpostBody += `Authorization: Bearer ${token}\\r\\n`;\n\t\t\tpostBody += `X-HTTP-Method-Override: POST\\r\\n`;\n\t\t\tpostBody += `Content-Type: application/json\\r\\n`;\n\t\t\tif (!disableJoinSessionRefresh) {\n\t\t\t\tpostBody += `prefer: FluidRemoveCheckAccess\\r\\n`;\n\t\t\t}\n\t\t\tpostBody += `_post: 1\\r\\n`;\n\t\t\t// Name should be there when socket token is requested and vice-versa.\n\t\t\tif (requestSocketToken && guestDisplayName !== undefined) {\n\t\t\t\tconst body: IJoinSessionBody = {\n\t\t\t\t\trequestSocketToken: true,\n\t\t\t\t\tguestDisplayName,\n\t\t\t\t};\n\t\t\t\tpostBody += `\\r\\n${JSON.stringify(body)}\\r\\n`;\n\t\t\t}\n\t\t\tpostBody += `\\r\\n--${formBoundary}--`;\n\t\t\tconst headers: { [index: string]: string } = {\n\t\t\t\t\"Content-Type\": `multipart/form-data;boundary=${formBoundary}`,\n\t\t\t};\n\n\t\t\tconst response = await runWithRetry(\n\t\t\t\tasync () =>\n\t\t\t\t\tepochTracker.fetchAndParseAsJSON<ISocketStorageDiscovery>(\n\t\t\t\t\t\t`${getApiRoot(siteOrigin)}/drives/${urlParts.driveId}/items/${\n\t\t\t\t\t\t\turlParts.itemId\n\t\t\t\t\t\t}/${path}?ump=1`,\n\t\t\t\t\t\t{ method, headers, body: postBody },\n\t\t\t\t\t\t\"joinSession\",\n\t\t\t\t\t\ttrue,\n\t\t\t\t\t),\n\t\t\t\t\"joinSession\",\n\t\t\t\tlogger,\n\t\t\t);\n\n\t\t\tconst socketUrl = response.content.deltaStreamSocketUrl;\n\t\t\t// expecting socketUrl to be something like https://{hostName}/...\n\t\t\tconst webSocketHostName = socketUrl.split(\"/\")[2];\n\n\t\t\t// TODO SPO-specific telemetry\n\t\t\tevent.end({\n\t\t\t\t...response.propsToLog,\n\t\t\t\t// pushV2 websocket urls will contain pushf\n\t\t\t\tpushv2: socketUrl.includes(\"pushf\"),\n\t\t\t\twebSocketHostName,\n\t\t\t\trefreshSessionDurationSeconds: response.content.refreshSessionDurationSeconds,\n\t\t\t});\n\n\t\t\tif (response.content.runtimeTenantId && !response.content.tenantId) {\n\t\t\t\tresponse.content.tenantId = response.content.runtimeTenantId;\n\t\t\t}\n\n\t\t\treturn response.content;\n\t\t},\n\t);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"zipItDataRepresentationUtils.d.ts","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zipItDataRepresentationUtils.d.ts","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ import { Uint8ArrayToArrayBuffer, Uint8ArrayToString } from "@fluid-internal/cli
10
10
  import { assert } from "@fluidframework/core-utils";
11
11
  import { NonRetryableError } from "@fluidframework/driver-utils";
12
12
  import { OdspErrorTypes } from "@fluidframework/odsp-driver-definitions";
13
- import { pkgVersion as driverVersion } from "./packageVersion.js";
14
13
  import { measure } from "./odspUtils.js";
14
+ import { pkgVersion as driverVersion } from "./packageVersion.js";
15
15
  // https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents
16
16
  /**
17
17
  * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on