@fluidframework/odsp-driver 2.0.0-dev-rc.1.0.0.232845 → 2.0.0-dev-rc.2.0.0.245554

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (616) hide show
  1. package/.eslintrc.cjs +18 -3
  2. package/{.mocharc.js → .mocharc.cjs} +1 -1
  3. package/CHANGELOG.md +44 -0
  4. package/{api-extractor-esm.json → api-extractor-cjs.json} +5 -1
  5. package/api-extractor-lint.json +1 -1
  6. package/api-extractor.json +1 -1
  7. package/api-report/odsp-driver.api.md +11 -12
  8. package/dist/ReadBufferUtils.d.ts.map +1 -1
  9. package/dist/ReadBufferUtils.js.map +1 -1
  10. package/dist/WriteBufferUtils.d.ts +1 -1
  11. package/dist/WriteBufferUtils.d.ts.map +1 -1
  12. package/dist/WriteBufferUtils.js +12 -12
  13. package/dist/WriteBufferUtils.js.map +1 -1
  14. package/dist/checkUrl.d.ts.map +1 -1
  15. package/dist/checkUrl.js +5 -3
  16. package/dist/checkUrl.js.map +1 -1
  17. package/dist/compactSnapshotParser.d.ts.map +1 -1
  18. package/dist/compactSnapshotParser.js +87 -69
  19. package/dist/compactSnapshotParser.js.map +1 -1
  20. package/dist/compactSnapshotWriter.d.ts.map +1 -1
  21. package/dist/compactSnapshotWriter.js +25 -19
  22. package/dist/compactSnapshotWriter.js.map +1 -1
  23. package/dist/contracts.d.ts +10 -4
  24. package/dist/contracts.d.ts.map +1 -1
  25. package/dist/contracts.js.map +1 -1
  26. package/dist/createFile.d.ts +3 -3
  27. package/dist/createFile.d.ts.map +1 -1
  28. package/dist/createFile.js +30 -27
  29. package/dist/createFile.js.map +1 -1
  30. package/dist/createNewContainerOnExistingFile.d.ts +2 -2
  31. package/dist/createNewContainerOnExistingFile.d.ts.map +1 -1
  32. package/dist/createNewContainerOnExistingFile.js +14 -14
  33. package/dist/createNewContainerOnExistingFile.js.map +1 -1
  34. package/dist/createNewModule.d.ts +2 -2
  35. package/dist/createNewModule.d.ts.map +1 -1
  36. package/dist/createNewModule.js +4 -4
  37. package/dist/createNewModule.js.map +1 -1
  38. package/dist/createNewUtils.d.ts +2 -2
  39. package/dist/createNewUtils.d.ts.map +1 -1
  40. package/dist/createNewUtils.js +12 -8
  41. package/dist/createNewUtils.js.map +1 -1
  42. package/dist/createOdspCreateContainerRequest.js +2 -2
  43. package/dist/createOdspCreateContainerRequest.js.map +1 -1
  44. package/dist/createOdspUrl.d.ts +1 -1
  45. package/dist/createOdspUrl.d.ts.map +1 -1
  46. package/dist/createOdspUrl.js.map +1 -1
  47. package/dist/epochTracker.d.ts +10 -9
  48. package/dist/epochTracker.d.ts.map +1 -1
  49. package/dist/epochTracker.js +66 -43
  50. package/dist/epochTracker.js.map +1 -1
  51. package/dist/fetchSnapshot.d.ts +11 -8
  52. package/dist/fetchSnapshot.d.ts.map +1 -1
  53. package/dist/fetchSnapshot.js +79 -58
  54. package/dist/fetchSnapshot.js.map +1 -1
  55. package/dist/getFileLink.d.ts.map +1 -1
  56. package/dist/getFileLink.js +24 -17
  57. package/dist/getFileLink.js.map +1 -1
  58. package/dist/getQueryString.d.ts.map +1 -1
  59. package/dist/getQueryString.js +2 -0
  60. package/dist/getQueryString.js.map +1 -1
  61. package/dist/index.d.ts +19 -19
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +44 -44
  64. package/dist/index.js.map +1 -1
  65. package/dist/localOdspDriver/localOdspDocumentService.d.ts +1 -1
  66. package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
  67. package/dist/localOdspDriver/localOdspDocumentService.js +5 -5
  68. package/dist/localOdspDriver/localOdspDocumentService.js.map +1 -1
  69. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +8 -6
  70. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  71. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +10 -9
  72. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  73. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +1 -1
  74. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
  75. package/dist/localOdspDriver/localOdspDocumentStorageManager.js +6 -6
  76. package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  77. package/dist/odsp-driver-alpha.d.ts +27 -12
  78. package/dist/odsp-driver-beta.d.ts +1 -2
  79. package/dist/odsp-driver-public.d.ts +1 -2
  80. package/dist/odsp-driver-untrimmed.d.ts +29 -12
  81. package/dist/odspCache.d.ts +3 -3
  82. package/dist/odspCache.d.ts.map +1 -1
  83. package/dist/odspCache.js +1 -2
  84. package/dist/odspCache.js.map +1 -1
  85. package/dist/odspDelayLoadedDeltaStream.d.ts +7 -5
  86. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  87. package/dist/odspDelayLoadedDeltaStream.js +41 -28
  88. package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
  89. package/dist/odspDeltaStorageService.d.ts +7 -7
  90. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  91. package/dist/odspDeltaStorageService.js +5 -5
  92. package/dist/odspDeltaStorageService.js.map +1 -1
  93. package/dist/odspDocumentDeltaConnection.d.ts +1 -1
  94. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  95. package/dist/odspDocumentDeltaConnection.js +41 -23
  96. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  97. package/dist/odspDocumentService.d.ts +6 -4
  98. package/dist/odspDocumentService.d.ts.map +1 -1
  99. package/dist/odspDocumentService.js +19 -16
  100. package/dist/odspDocumentService.js.map +1 -1
  101. package/dist/odspDocumentServiceFactory.d.ts +6 -1
  102. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  103. package/dist/odspDocumentServiceFactory.js +9 -4
  104. package/dist/odspDocumentServiceFactory.js.map +1 -1
  105. package/dist/odspDocumentServiceFactoryCore.d.ts +4 -4
  106. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  107. package/dist/odspDocumentServiceFactoryCore.js +26 -22
  108. package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
  109. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +1 -1
  110. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  111. package/dist/odspDocumentServiceFactoryWithCodeSplit.js +2 -2
  112. package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  113. package/dist/odspDocumentStorageManager.d.ts +15 -9
  114. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  115. package/dist/odspDocumentStorageManager.js +219 -181
  116. package/dist/odspDocumentStorageManager.js.map +1 -1
  117. package/dist/odspDocumentStorageServiceBase.d.ts +2 -4
  118. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  119. package/dist/odspDocumentStorageServiceBase.js +32 -29
  120. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  121. package/dist/odspDriverUrlResolver.d.ts +1 -1
  122. package/dist/odspDriverUrlResolver.d.ts.map +1 -1
  123. package/dist/odspDriverUrlResolver.js +25 -22
  124. package/dist/odspDriverUrlResolver.js.map +1 -1
  125. package/dist/odspDriverUrlResolverForShareLink.d.ts +13 -6
  126. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  127. package/dist/odspDriverUrlResolverForShareLink.js +47 -37
  128. package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
  129. package/dist/odspError.d.ts +1 -1
  130. package/dist/odspError.d.ts.map +1 -1
  131. package/dist/odspError.js +5 -5
  132. package/dist/odspError.js.map +1 -1
  133. package/dist/odspFluidFileLink.d.ts +1 -1
  134. package/dist/odspFluidFileLink.d.ts.map +1 -1
  135. package/dist/odspFluidFileLink.js +2 -2
  136. package/dist/odspFluidFileLink.js.map +1 -1
  137. package/dist/odspLocationRedirection.js +2 -2
  138. package/dist/odspLocationRedirection.js.map +1 -1
  139. package/dist/odspPublicUtils.d.ts +3 -0
  140. package/dist/odspPublicUtils.d.ts.map +1 -1
  141. package/dist/odspPublicUtils.js +3 -0
  142. package/dist/odspPublicUtils.js.map +1 -1
  143. package/dist/odspSnapshotParser.d.ts +1 -1
  144. package/dist/odspSnapshotParser.d.ts.map +1 -1
  145. package/dist/odspSnapshotParser.js +3 -2
  146. package/dist/odspSnapshotParser.js.map +1 -1
  147. package/dist/odspSummaryUploadManager.d.ts +1 -1
  148. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  149. package/dist/odspSummaryUploadManager.js +9 -6
  150. package/dist/odspSummaryUploadManager.js.map +1 -1
  151. package/dist/odspUrlHelper.d.ts.map +1 -1
  152. package/dist/odspUrlHelper.js +1 -2
  153. package/dist/odspUrlHelper.js.map +1 -1
  154. package/dist/odspUtils.d.ts +19 -7
  155. package/dist/odspUtils.d.ts.map +1 -1
  156. package/dist/odspUtils.js +61 -31
  157. package/dist/odspUtils.js.map +1 -1
  158. package/dist/opsCaching.d.ts +1 -1
  159. package/dist/opsCaching.d.ts.map +1 -1
  160. package/dist/opsCaching.js +2 -1
  161. package/dist/opsCaching.js.map +1 -1
  162. package/dist/package.json +3 -0
  163. package/dist/packageVersion.d.ts +1 -1
  164. package/dist/packageVersion.js +1 -1
  165. package/dist/packageVersion.js.map +1 -1
  166. package/dist/prefetchLatestSnapshot.d.ts +2 -2
  167. package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
  168. package/dist/prefetchLatestSnapshot.js +17 -12
  169. package/dist/prefetchLatestSnapshot.js.map +1 -1
  170. package/dist/retryErrorsStorageAdapter.d.ts +0 -1
  171. package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
  172. package/dist/retryErrorsStorageAdapter.js +2 -5
  173. package/dist/retryErrorsStorageAdapter.js.map +1 -1
  174. package/dist/retryUtils.d.ts.map +1 -1
  175. package/dist/retryUtils.js +6 -2
  176. package/dist/retryUtils.js.map +1 -1
  177. package/dist/socketModule.d.ts.map +1 -1
  178. package/dist/socketModule.js +2 -0
  179. package/dist/socketModule.js.map +1 -1
  180. package/dist/tsdoc-metadata.json +1 -1
  181. package/dist/vroom.d.ts +2 -2
  182. package/dist/vroom.d.ts.map +1 -1
  183. package/dist/vroom.js +5 -5
  184. package/dist/vroom.js.map +1 -1
  185. package/dist/zipItDataRepresentationUtils.d.ts +1 -1
  186. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  187. package/dist/zipItDataRepresentationUtils.js +15 -11
  188. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  189. package/lib/{ReadBufferUtils.d.mts → ReadBufferUtils.d.ts} +1 -1
  190. package/lib/ReadBufferUtils.d.ts.map +1 -0
  191. package/lib/{ReadBufferUtils.mjs → ReadBufferUtils.js} +1 -1
  192. package/lib/ReadBufferUtils.js.map +1 -0
  193. package/lib/{WriteBufferUtils.d.mts → WriteBufferUtils.d.ts} +2 -2
  194. package/lib/WriteBufferUtils.d.ts.map +1 -0
  195. package/lib/{WriteBufferUtils.mjs → WriteBufferUtils.js} +2 -2
  196. package/lib/WriteBufferUtils.js.map +1 -0
  197. package/lib/{checkUrl.d.mts → checkUrl.d.ts} +1 -1
  198. package/lib/checkUrl.d.ts.map +1 -0
  199. package/lib/{checkUrl.mjs → checkUrl.js} +5 -3
  200. package/lib/checkUrl.js.map +1 -0
  201. package/lib/{compactSnapshotParser.d.mts → compactSnapshotParser.d.ts} +1 -1
  202. package/lib/compactSnapshotParser.d.ts.map +1 -0
  203. package/lib/{compactSnapshotParser.mjs → compactSnapshotParser.js} +61 -43
  204. package/lib/compactSnapshotParser.js.map +1 -0
  205. package/lib/{compactSnapshotWriter.d.mts → compactSnapshotWriter.d.ts} +1 -1
  206. package/lib/compactSnapshotWriter.d.ts.map +1 -0
  207. package/lib/{compactSnapshotWriter.mjs → compactSnapshotWriter.js} +13 -7
  208. package/lib/compactSnapshotWriter.js.map +1 -0
  209. package/lib/{constants.d.mts → constants.d.ts} +1 -1
  210. package/lib/constants.d.ts.map +1 -0
  211. package/lib/{constants.mjs → constants.js} +1 -1
  212. package/lib/constants.js.map +1 -0
  213. package/lib/{contracts.d.mts → contracts.d.ts} +11 -5
  214. package/lib/contracts.d.ts.map +1 -0
  215. package/lib/{contracts.mjs → contracts.js} +1 -1
  216. package/lib/contracts.js.map +1 -0
  217. package/lib/{contractsPublic.d.mts → contractsPublic.d.ts} +1 -1
  218. package/lib/contractsPublic.d.ts.map +1 -0
  219. package/lib/{contractsPublic.mjs → contractsPublic.js} +1 -1
  220. package/lib/contractsPublic.js.map +1 -0
  221. package/lib/{createFile.d.mts → createFile.d.ts} +4 -4
  222. package/lib/createFile.d.ts.map +1 -0
  223. package/lib/{createFile.mjs → createFile.js} +15 -12
  224. package/lib/createFile.js.map +1 -0
  225. package/lib/{createNewContainerOnExistingFile.d.mts → createNewContainerOnExistingFile.d.ts} +3 -3
  226. package/lib/createNewContainerOnExistingFile.d.ts.map +1 -0
  227. package/lib/{createNewContainerOnExistingFile.mjs → createNewContainerOnExistingFile.js} +7 -7
  228. package/lib/createNewContainerOnExistingFile.js.map +1 -0
  229. package/lib/{createNewModule.mjs → createNewModule.d.ts} +3 -3
  230. package/lib/createNewModule.d.ts.map +1 -0
  231. package/lib/{createNewModule.d.mts → createNewModule.js} +3 -3
  232. package/lib/createNewModule.js.map +1 -0
  233. package/lib/{createNewUtils.d.mts → createNewUtils.d.ts} +3 -3
  234. package/lib/createNewUtils.d.ts.map +1 -0
  235. package/lib/{createNewUtils.mjs → createNewUtils.js} +9 -5
  236. package/lib/createNewUtils.js.map +1 -0
  237. package/lib/{createOdspCreateContainerRequest.d.mts → createOdspCreateContainerRequest.d.ts} +5 -1
  238. package/lib/createOdspCreateContainerRequest.d.ts.map +1 -0
  239. package/lib/{createOdspCreateContainerRequest.mjs → createOdspCreateContainerRequest.js} +2 -2
  240. package/lib/createOdspCreateContainerRequest.js.map +1 -0
  241. package/lib/{createOdspUrl.d.mts → createOdspUrl.d.ts} +2 -2
  242. package/lib/createOdspUrl.d.ts.map +1 -0
  243. package/lib/{createOdspUrl.mjs → createOdspUrl.js} +1 -1
  244. package/lib/createOdspUrl.js.map +1 -0
  245. package/lib/{epochTracker.d.mts → epochTracker.d.ts} +11 -10
  246. package/lib/epochTracker.d.ts.map +1 -0
  247. package/lib/{epochTracker.mjs → epochTracker.js} +56 -33
  248. package/lib/epochTracker.js.map +1 -0
  249. package/lib/{fetch.d.mts → fetch.d.ts} +1 -1
  250. package/lib/fetch.d.ts.map +1 -0
  251. package/lib/{fetch.mjs → fetch.js} +1 -1
  252. package/lib/fetch.js.map +1 -0
  253. package/lib/{fetchSnapshot.d.mts → fetchSnapshot.d.ts} +12 -9
  254. package/lib/fetchSnapshot.d.ts.map +1 -0
  255. package/lib/{fetchSnapshot.mjs → fetchSnapshot.js} +61 -40
  256. package/lib/fetchSnapshot.js.map +1 -0
  257. package/lib/{getFileLink.d.mts → getFileLink.d.ts} +1 -1
  258. package/lib/getFileLink.d.ts.map +1 -0
  259. package/lib/{getFileLink.mjs → getFileLink.js} +14 -7
  260. package/lib/getFileLink.js.map +1 -0
  261. package/lib/{getQueryString.d.mts → getQueryString.d.ts} +5 -1
  262. package/lib/getQueryString.d.ts.map +1 -0
  263. package/lib/{getQueryString.mjs → getQueryString.js} +3 -1
  264. package/lib/getQueryString.js.map +1 -0
  265. package/lib/{getUrlAndHeadersWithAuth.d.mts → getUrlAndHeadersWithAuth.d.ts} +1 -1
  266. package/lib/getUrlAndHeadersWithAuth.d.ts.map +1 -0
  267. package/lib/{getUrlAndHeadersWithAuth.mjs → getUrlAndHeadersWithAuth.js} +1 -1
  268. package/lib/getUrlAndHeadersWithAuth.js.map +1 -0
  269. package/lib/{index.d.mts → index.d.ts} +20 -20
  270. package/lib/index.d.ts.map +1 -0
  271. package/lib/index.js +29 -0
  272. package/lib/index.js.map +1 -0
  273. package/lib/localOdspDriver/{localOdspDeltaStorageService.d.mts → localOdspDeltaStorageService.d.ts} +1 -1
  274. package/lib/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -0
  275. package/lib/localOdspDriver/{localOdspDeltaStorageService.mjs → localOdspDeltaStorageService.js} +1 -1
  276. package/lib/localOdspDriver/localOdspDeltaStorageService.js.map +1 -0
  277. package/lib/localOdspDriver/{localOdspDocumentService.d.mts → localOdspDocumentService.d.ts} +2 -2
  278. package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +1 -0
  279. package/lib/localOdspDriver/{localOdspDocumentService.mjs → localOdspDocumentService.js} +4 -4
  280. package/lib/localOdspDriver/localOdspDocumentService.js.map +1 -0
  281. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.d.mts → localOdspDocumentServiceFactory.d.ts} +9 -7
  282. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -0
  283. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.mjs → localOdspDocumentServiceFactory.js} +9 -8
  284. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -0
  285. package/lib/localOdspDriver/{localOdspDocumentStorageManager.d.mts → localOdspDocumentStorageManager.d.ts} +2 -2
  286. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -0
  287. package/lib/localOdspDriver/{localOdspDocumentStorageManager.mjs → localOdspDocumentStorageManager.js} +4 -4
  288. package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -0
  289. package/lib/{odsp-driver-alpha.d.mts → odsp-driver-alpha.d.ts} +27 -12
  290. package/lib/{odsp-driver-public.d.mts → odsp-driver-beta.d.ts} +1 -2
  291. package/lib/{odsp-driver-beta.d.mts → odsp-driver-public.d.ts} +1 -2
  292. package/lib/{odsp-driver-untrimmed.d.mts → odsp-driver-untrimmed.d.ts} +29 -12
  293. package/lib/{odspCache.d.mts → odspCache.d.ts} +8 -4
  294. package/lib/odspCache.d.ts.map +1 -0
  295. package/lib/{odspCache.mjs → odspCache.js} +6 -3
  296. package/lib/odspCache.js.map +1 -0
  297. package/lib/{odspDelayLoadedDeltaStream.d.mts → odspDelayLoadedDeltaStream.d.ts} +8 -6
  298. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -0
  299. package/lib/{odspDelayLoadedDeltaStream.mjs → odspDelayLoadedDeltaStream.js} +33 -20
  300. package/lib/odspDelayLoadedDeltaStream.js.map +1 -0
  301. package/lib/{odspDeltaStorageService.d.mts → odspDeltaStorageService.d.ts} +8 -8
  302. package/lib/odspDeltaStorageService.d.ts.map +1 -0
  303. package/lib/{odspDeltaStorageService.mjs → odspDeltaStorageService.js} +5 -5
  304. package/lib/odspDeltaStorageService.js.map +1 -0
  305. package/lib/{odspDocumentDeltaConnection.d.mts → odspDocumentDeltaConnection.d.ts} +2 -2
  306. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -0
  307. package/lib/{odspDocumentDeltaConnection.mjs → odspDocumentDeltaConnection.js} +34 -16
  308. package/lib/odspDocumentDeltaConnection.js.map +1 -0
  309. package/lib/{odspDocumentService.d.mts → odspDocumentService.d.ts} +7 -5
  310. package/lib/odspDocumentService.d.ts.map +1 -0
  311. package/lib/{odspDocumentService.mjs → odspDocumentService.js} +16 -11
  312. package/lib/odspDocumentService.js.map +1 -0
  313. package/lib/{odspDocumentServiceFactory.d.mts → odspDocumentServiceFactory.d.ts} +7 -2
  314. package/lib/odspDocumentServiceFactory.d.ts.map +1 -0
  315. package/lib/{odspDocumentServiceFactory.mjs → odspDocumentServiceFactory.js} +9 -3
  316. package/lib/odspDocumentServiceFactory.js.map +1 -0
  317. package/lib/{odspDocumentServiceFactoryCore.d.mts → odspDocumentServiceFactoryCore.d.ts} +5 -5
  318. package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -0
  319. package/lib/{odspDocumentServiceFactoryCore.mjs → odspDocumentServiceFactoryCore.js} +23 -17
  320. package/lib/odspDocumentServiceFactoryCore.js.map +1 -0
  321. package/lib/{odspDocumentServiceFactoryWithCodeSplit.d.mts → odspDocumentServiceFactoryWithCodeSplit.d.ts} +2 -2
  322. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -0
  323. package/lib/{odspDocumentServiceFactoryWithCodeSplit.mjs → odspDocumentServiceFactoryWithCodeSplit.js} +2 -2
  324. package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -0
  325. package/lib/{odspDocumentStorageManager.d.mts → odspDocumentStorageManager.d.ts} +16 -10
  326. package/lib/odspDocumentStorageManager.d.ts.map +1 -0
  327. package/lib/{odspDocumentStorageManager.mjs → odspDocumentStorageManager.js} +207 -167
  328. package/lib/odspDocumentStorageManager.js.map +1 -0
  329. package/lib/{odspDocumentStorageServiceBase.d.mts → odspDocumentStorageServiceBase.d.ts} +3 -5
  330. package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -0
  331. package/lib/{odspDocumentStorageServiceBase.mjs → odspDocumentStorageServiceBase.js} +32 -29
  332. package/lib/odspDocumentStorageServiceBase.js.map +1 -0
  333. package/lib/{odspDriverUrlResolver.d.mts → odspDriverUrlResolver.d.ts} +2 -2
  334. package/lib/odspDriverUrlResolver.d.ts.map +1 -0
  335. package/lib/{odspDriverUrlResolver.mjs → odspDriverUrlResolver.js} +24 -17
  336. package/lib/odspDriverUrlResolver.js.map +1 -0
  337. package/lib/{odspDriverUrlResolverForShareLink.d.mts → odspDriverUrlResolverForShareLink.d.ts} +14 -7
  338. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -0
  339. package/lib/{odspDriverUrlResolverForShareLink.mjs → odspDriverUrlResolverForShareLink.js} +41 -27
  340. package/lib/odspDriverUrlResolverForShareLink.js.map +1 -0
  341. package/lib/{odspError.d.mts → odspError.d.ts} +2 -2
  342. package/lib/odspError.d.ts.map +1 -0
  343. package/lib/{odspError.mjs → odspError.js} +4 -4
  344. package/lib/odspError.js.map +1 -0
  345. package/lib/{odspFluidFileLink.d.mts → odspFluidFileLink.d.ts} +2 -2
  346. package/lib/odspFluidFileLink.d.ts.map +1 -0
  347. package/lib/{odspFluidFileLink.mjs → odspFluidFileLink.js} +2 -2
  348. package/lib/odspFluidFileLink.js.map +1 -0
  349. package/lib/{odspLocationRedirection.d.mts → odspLocationRedirection.d.ts} +1 -1
  350. package/lib/odspLocationRedirection.d.ts.map +1 -0
  351. package/lib/{odspLocationRedirection.mjs → odspLocationRedirection.js} +2 -2
  352. package/lib/odspLocationRedirection.js.map +1 -0
  353. package/lib/{odspPublicUtils.d.mts → odspPublicUtils.d.ts} +4 -1
  354. package/lib/odspPublicUtils.d.ts.map +1 -0
  355. package/lib/{odspPublicUtils.mjs → odspPublicUtils.js} +4 -1
  356. package/lib/odspPublicUtils.js.map +1 -0
  357. package/lib/{odspSnapshotParser.d.mts → odspSnapshotParser.d.ts} +2 -2
  358. package/lib/odspSnapshotParser.d.ts.map +1 -0
  359. package/lib/{odspSnapshotParser.mjs → odspSnapshotParser.js} +4 -3
  360. package/lib/odspSnapshotParser.js.map +1 -0
  361. package/lib/{odspSummaryUploadManager.d.mts → odspSummaryUploadManager.d.ts} +2 -2
  362. package/lib/odspSummaryUploadManager.d.ts.map +1 -0
  363. package/lib/{odspSummaryUploadManager.mjs → odspSummaryUploadManager.js} +8 -5
  364. package/lib/odspSummaryUploadManager.js.map +1 -0
  365. package/lib/{odspUrlHelper.d.mts → odspUrlHelper.d.ts} +1 -1
  366. package/lib/odspUrlHelper.d.ts.map +1 -0
  367. package/lib/{odspUrlHelper.mjs → odspUrlHelper.js} +2 -3
  368. package/lib/odspUrlHelper.js.map +1 -0
  369. package/lib/{odspUtils.d.mts → odspUtils.d.ts} +20 -8
  370. package/lib/odspUtils.d.ts.map +1 -0
  371. package/lib/{odspUtils.mjs → odspUtils.js} +45 -17
  372. package/lib/odspUtils.js.map +1 -0
  373. package/lib/{opsCaching.d.mts → opsCaching.d.ts} +2 -2
  374. package/lib/opsCaching.d.ts.map +1 -0
  375. package/lib/{opsCaching.mjs → opsCaching.js} +3 -2
  376. package/lib/opsCaching.js.map +1 -0
  377. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  378. package/lib/packageVersion.d.ts.map +1 -0
  379. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  380. package/lib/packageVersion.js.map +1 -0
  381. package/lib/{prefetchLatestSnapshot.d.mts → prefetchLatestSnapshot.d.ts} +3 -3
  382. package/lib/prefetchLatestSnapshot.d.ts.map +1 -0
  383. package/lib/{prefetchLatestSnapshot.mjs → prefetchLatestSnapshot.js} +16 -11
  384. package/lib/prefetchLatestSnapshot.js.map +1 -0
  385. package/lib/{retryErrorsStorageAdapter.d.mts → retryErrorsStorageAdapter.d.ts} +1 -2
  386. package/lib/retryErrorsStorageAdapter.d.ts.map +1 -0
  387. package/lib/{retryErrorsStorageAdapter.mjs → retryErrorsStorageAdapter.js} +2 -5
  388. package/lib/retryErrorsStorageAdapter.js.map +1 -0
  389. package/lib/{retryUtils.d.mts → retryUtils.d.ts} +1 -1
  390. package/lib/retryUtils.d.ts.map +1 -0
  391. package/lib/{retryUtils.mjs → retryUtils.js} +6 -2
  392. package/lib/retryUtils.js.map +1 -0
  393. package/lib/{socketModule.d.mts → socketModule.d.ts} +1 -1
  394. package/lib/socketModule.d.ts.map +1 -0
  395. package/lib/{socketModule.mjs → socketModule.js} +3 -1
  396. package/lib/socketModule.js.map +1 -0
  397. package/lib/test/buildOdspShareLinkReqParams.spec.js +25 -0
  398. package/lib/test/buildOdspShareLinkReqParams.spec.js.map +1 -0
  399. package/lib/test/createNewUtilsTests.spec.js +221 -0
  400. package/lib/test/createNewUtilsTests.spec.js.map +1 -0
  401. package/lib/test/deltaStorageService.spec.js +176 -0
  402. package/lib/test/deltaStorageService.spec.js.map +1 -0
  403. package/lib/test/epochTests.spec.js +340 -0
  404. package/lib/test/epochTests.spec.js.map +1 -0
  405. package/lib/test/epochTestsWithRedemption.spec.js +119 -0
  406. package/lib/test/epochTestsWithRedemption.spec.js.map +1 -0
  407. package/lib/test/fetchSnapshot.spec.js +412 -0
  408. package/lib/test/fetchSnapshot.spec.js.map +1 -0
  409. package/lib/test/getFileLink.spec.js +62 -0
  410. package/lib/test/getFileLink.spec.js.map +1 -0
  411. package/lib/test/getUrlAndHeadersWithAuth.spec.js +66 -0
  412. package/lib/test/getUrlAndHeadersWithAuth.spec.js.map +1 -0
  413. package/lib/test/getVersions.spec.js +284 -0
  414. package/lib/test/getVersions.spec.js.map +1 -0
  415. package/lib/test/joinSessionCacheTests.spec.js +53 -0
  416. package/lib/test/joinSessionCacheTests.spec.js.map +1 -0
  417. package/lib/test/joinSessionPeriodicCall.spec.js +158 -0
  418. package/lib/test/joinSessionPeriodicCall.spec.js.map +1 -0
  419. package/lib/test/jsonSnapshotFormatTests.spec.js +107 -0
  420. package/lib/test/jsonSnapshotFormatTests.spec.js.map +1 -0
  421. package/lib/test/localOdspDriver.spec.js +177 -0
  422. package/lib/test/localOdspDriver.spec.js.map +1 -0
  423. package/lib/test/mockFetch.js +61 -0
  424. package/lib/test/mockFetch.js.map +1 -0
  425. package/lib/test/odspCreateContainer.spec.js +116 -0
  426. package/lib/test/odspCreateContainer.spec.js.map +1 -0
  427. package/lib/test/odspDriverResolverTest.spec.js +289 -0
  428. package/lib/test/odspDriverResolverTest.spec.js.map +1 -0
  429. package/lib/test/odspDriverUrlResolverForShareLink.spec.js +287 -0
  430. package/lib/test/odspDriverUrlResolverForShareLink.spec.js.map +1 -0
  431. package/lib/test/odspError.spec.js +299 -0
  432. package/lib/test/odspError.spec.js.map +1 -0
  433. package/lib/test/opsCaching.spec.js +357 -0
  434. package/lib/test/opsCaching.spec.js.map +1 -0
  435. package/lib/test/prefetchSnapshotTests.spec.js +420 -0
  436. package/lib/test/prefetchSnapshotTests.spec.js.map +1 -0
  437. package/lib/test/snapshotFormatTests.spec.js +218 -0
  438. package/lib/test/snapshotFormatTests.spec.js.map +1 -0
  439. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js +152 -0
  440. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js.map +1 -0
  441. package/lib/test/socketTests/socketMock.js +109 -0
  442. package/lib/test/socketTests/socketMock.js.map +1 -0
  443. package/lib/test/socketTests/socketTests.spec.js +256 -0
  444. package/lib/test/socketTests/socketTests.spec.js.map +1 -0
  445. package/lib/test/tokenFetch.spec.js +39 -0
  446. package/lib/test/tokenFetch.spec.js.map +1 -0
  447. package/lib/test/types/validateOdspDriverPrevious.generated.js +96 -0
  448. package/lib/test/types/validateOdspDriverPrevious.generated.js.map +1 -0
  449. package/lib/test/zipItDataRepresentationTests.spec.js +207 -0
  450. package/lib/test/zipItDataRepresentationTests.spec.js.map +1 -0
  451. package/lib/{vroom.d.mts → vroom.d.ts} +3 -3
  452. package/lib/vroom.d.ts.map +1 -0
  453. package/lib/{vroom.mjs → vroom.js} +4 -4
  454. package/lib/vroom.js.map +1 -0
  455. package/lib/{zipItDataRepresentationUtils.d.mts → zipItDataRepresentationUtils.d.ts} +2 -2
  456. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -0
  457. package/lib/{zipItDataRepresentationUtils.mjs → zipItDataRepresentationUtils.js} +17 -9
  458. package/lib/zipItDataRepresentationUtils.js.map +1 -0
  459. package/package.json +90 -31
  460. package/src/ReadBufferUtils.ts +7 -7
  461. package/src/WriteBufferUtils.ts +13 -9
  462. package/src/checkUrl.ts +4 -2
  463. package/src/compactSnapshotParser.ts +87 -52
  464. package/src/compactSnapshotWriter.ts +19 -12
  465. package/src/contracts.ts +16 -4
  466. package/src/createFile.ts +16 -13
  467. package/src/createNewContainerOnExistingFile.ts +8 -8
  468. package/src/createNewModule.ts +2 -2
  469. package/src/createNewUtils.ts +19 -9
  470. package/src/createOdspCreateContainerRequest.ts +1 -1
  471. package/src/createOdspUrl.ts +1 -1
  472. package/src/epochTracker.ts +90 -55
  473. package/src/fetchSnapshot.ts +104 -47
  474. package/src/getFileLink.ts +21 -13
  475. package/src/getQueryString.ts +2 -0
  476. package/src/index.ts +27 -19
  477. package/src/localOdspDriver/localOdspDocumentService.ts +3 -3
  478. package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +12 -11
  479. package/src/localOdspDriver/localOdspDocumentStorageManager.ts +5 -5
  480. package/src/odspCache.ts +12 -9
  481. package/src/odspDelayLoadedDeltaStream.ts +54 -33
  482. package/src/odspDeltaStorageService.ts +17 -16
  483. package/src/odspDocumentDeltaConnection.ts +52 -34
  484. package/src/odspDocumentService.ts +23 -20
  485. package/src/odspDocumentServiceFactory.ts +7 -2
  486. package/src/odspDocumentServiceFactoryCore.ts +25 -18
  487. package/src/odspDocumentServiceFactoryWithCodeSplit.ts +1 -1
  488. package/src/odspDocumentStorageManager.ts +276 -216
  489. package/src/odspDocumentStorageServiceBase.ts +45 -43
  490. package/src/odspDriverUrlResolver.ts +38 -24
  491. package/src/odspDriverUrlResolverForShareLink.ts +50 -31
  492. package/src/odspError.ts +4 -4
  493. package/src/odspFluidFileLink.ts +3 -3
  494. package/src/odspLocationRedirection.ts +1 -1
  495. package/src/odspPublicUtils.ts +3 -0
  496. package/src/odspSnapshotParser.ts +4 -3
  497. package/src/odspSummaryUploadManager.ts +21 -9
  498. package/src/odspUrlHelper.ts +2 -3
  499. package/src/odspUtils.ts +73 -30
  500. package/src/opsCaching.ts +13 -12
  501. package/src/packageVersion.ts +1 -1
  502. package/src/prefetchLatestSnapshot.ts +24 -15
  503. package/src/retryErrorsStorageAdapter.ts +4 -8
  504. package/src/retryUtils.ts +6 -2
  505. package/src/socketModule.ts +2 -0
  506. package/src/vroom.ts +6 -6
  507. package/src/zipItDataRepresentationUtils.ts +63 -35
  508. package/tsconfig.cjs.json +7 -0
  509. package/tsconfig.json +2 -5
  510. package/lib/ReadBufferUtils.d.mts.map +0 -1
  511. package/lib/ReadBufferUtils.mjs.map +0 -1
  512. package/lib/WriteBufferUtils.d.mts.map +0 -1
  513. package/lib/WriteBufferUtils.mjs.map +0 -1
  514. package/lib/checkUrl.d.mts.map +0 -1
  515. package/lib/checkUrl.mjs.map +0 -1
  516. package/lib/compactSnapshotParser.d.mts.map +0 -1
  517. package/lib/compactSnapshotParser.mjs.map +0 -1
  518. package/lib/compactSnapshotWriter.d.mts.map +0 -1
  519. package/lib/compactSnapshotWriter.mjs.map +0 -1
  520. package/lib/constants.d.mts.map +0 -1
  521. package/lib/constants.mjs.map +0 -1
  522. package/lib/contracts.d.mts.map +0 -1
  523. package/lib/contracts.mjs.map +0 -1
  524. package/lib/contractsPublic.d.mts.map +0 -1
  525. package/lib/contractsPublic.mjs.map +0 -1
  526. package/lib/createFile.d.mts.map +0 -1
  527. package/lib/createFile.mjs.map +0 -1
  528. package/lib/createNewContainerOnExistingFile.d.mts.map +0 -1
  529. package/lib/createNewContainerOnExistingFile.mjs.map +0 -1
  530. package/lib/createNewModule.d.mts.map +0 -1
  531. package/lib/createNewModule.mjs.map +0 -1
  532. package/lib/createNewUtils.d.mts.map +0 -1
  533. package/lib/createNewUtils.mjs.map +0 -1
  534. package/lib/createOdspCreateContainerRequest.d.mts.map +0 -1
  535. package/lib/createOdspCreateContainerRequest.mjs.map +0 -1
  536. package/lib/createOdspUrl.d.mts.map +0 -1
  537. package/lib/createOdspUrl.mjs.map +0 -1
  538. package/lib/epochTracker.d.mts.map +0 -1
  539. package/lib/epochTracker.mjs.map +0 -1
  540. package/lib/fetch.d.mts.map +0 -1
  541. package/lib/fetch.mjs.map +0 -1
  542. package/lib/fetchSnapshot.d.mts.map +0 -1
  543. package/lib/fetchSnapshot.mjs.map +0 -1
  544. package/lib/getFileLink.d.mts.map +0 -1
  545. package/lib/getFileLink.mjs.map +0 -1
  546. package/lib/getQueryString.d.mts.map +0 -1
  547. package/lib/getQueryString.mjs.map +0 -1
  548. package/lib/getUrlAndHeadersWithAuth.d.mts.map +0 -1
  549. package/lib/getUrlAndHeadersWithAuth.mjs.map +0 -1
  550. package/lib/index.d.mts.map +0 -1
  551. package/lib/index.mjs +0 -22
  552. package/lib/index.mjs.map +0 -1
  553. package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts.map +0 -1
  554. package/lib/localOdspDriver/localOdspDeltaStorageService.mjs.map +0 -1
  555. package/lib/localOdspDriver/localOdspDocumentService.d.mts.map +0 -1
  556. package/lib/localOdspDriver/localOdspDocumentService.mjs.map +0 -1
  557. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.mts.map +0 -1
  558. package/lib/localOdspDriver/localOdspDocumentServiceFactory.mjs.map +0 -1
  559. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.mts.map +0 -1
  560. package/lib/localOdspDriver/localOdspDocumentStorageManager.mjs.map +0 -1
  561. package/lib/odspCache.d.mts.map +0 -1
  562. package/lib/odspCache.mjs.map +0 -1
  563. package/lib/odspDelayLoadedDeltaStream.d.mts.map +0 -1
  564. package/lib/odspDelayLoadedDeltaStream.mjs.map +0 -1
  565. package/lib/odspDeltaStorageService.d.mts.map +0 -1
  566. package/lib/odspDeltaStorageService.mjs.map +0 -1
  567. package/lib/odspDocumentDeltaConnection.d.mts.map +0 -1
  568. package/lib/odspDocumentDeltaConnection.mjs.map +0 -1
  569. package/lib/odspDocumentService.d.mts.map +0 -1
  570. package/lib/odspDocumentService.mjs.map +0 -1
  571. package/lib/odspDocumentServiceFactory.d.mts.map +0 -1
  572. package/lib/odspDocumentServiceFactory.mjs.map +0 -1
  573. package/lib/odspDocumentServiceFactoryCore.d.mts.map +0 -1
  574. package/lib/odspDocumentServiceFactoryCore.mjs.map +0 -1
  575. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.mts.map +0 -1
  576. package/lib/odspDocumentServiceFactoryWithCodeSplit.mjs.map +0 -1
  577. package/lib/odspDocumentStorageManager.d.mts.map +0 -1
  578. package/lib/odspDocumentStorageManager.mjs.map +0 -1
  579. package/lib/odspDocumentStorageServiceBase.d.mts.map +0 -1
  580. package/lib/odspDocumentStorageServiceBase.mjs.map +0 -1
  581. package/lib/odspDriverUrlResolver.d.mts.map +0 -1
  582. package/lib/odspDriverUrlResolver.mjs.map +0 -1
  583. package/lib/odspDriverUrlResolverForShareLink.d.mts.map +0 -1
  584. package/lib/odspDriverUrlResolverForShareLink.mjs.map +0 -1
  585. package/lib/odspError.d.mts.map +0 -1
  586. package/lib/odspError.mjs.map +0 -1
  587. package/lib/odspFluidFileLink.d.mts.map +0 -1
  588. package/lib/odspFluidFileLink.mjs.map +0 -1
  589. package/lib/odspLocationRedirection.d.mts.map +0 -1
  590. package/lib/odspLocationRedirection.mjs.map +0 -1
  591. package/lib/odspPublicUtils.d.mts.map +0 -1
  592. package/lib/odspPublicUtils.mjs.map +0 -1
  593. package/lib/odspSnapshotParser.d.mts.map +0 -1
  594. package/lib/odspSnapshotParser.mjs.map +0 -1
  595. package/lib/odspSummaryUploadManager.d.mts.map +0 -1
  596. package/lib/odspSummaryUploadManager.mjs.map +0 -1
  597. package/lib/odspUrlHelper.d.mts.map +0 -1
  598. package/lib/odspUrlHelper.mjs.map +0 -1
  599. package/lib/odspUtils.d.mts.map +0 -1
  600. package/lib/odspUtils.mjs.map +0 -1
  601. package/lib/opsCaching.d.mts.map +0 -1
  602. package/lib/opsCaching.mjs.map +0 -1
  603. package/lib/packageVersion.d.mts.map +0 -1
  604. package/lib/packageVersion.mjs.map +0 -1
  605. package/lib/prefetchLatestSnapshot.d.mts.map +0 -1
  606. package/lib/prefetchLatestSnapshot.mjs.map +0 -1
  607. package/lib/retryErrorsStorageAdapter.d.mts.map +0 -1
  608. package/lib/retryErrorsStorageAdapter.mjs.map +0 -1
  609. package/lib/retryUtils.d.mts.map +0 -1
  610. package/lib/retryUtils.mjs.map +0 -1
  611. package/lib/socketModule.d.mts.map +0 -1
  612. package/lib/socketModule.mjs.map +0 -1
  613. package/lib/vroom.d.mts.map +0 -1
  614. package/lib/vroom.mjs.map +0 -1
  615. package/lib/zipItDataRepresentationUtils.d.mts.map +0 -1
  616. package/lib/zipItDataRepresentationUtils.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspCache.js","sourceRoot":"","sources":["../src/odspCache.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAON,mBAAmB,GACnB,MAAM,yCAAyC,CAAC;AAiBjD;;;GAGG;AACH,MAAM,OAAO,oBAAoB;IAKhC,YAAoC,uBAAuB,IAAI,GAAG,IAAI;QAAlC,yBAAoB,GAApB,oBAAoB,CAAc;QAJrD,UAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;QACpD,wGAAwG;QACvF,uBAAkB,GAAG,IAAI,GAAG,EAAyC,CAAC;IAEd,CAAC;IAE1E,KAAK,CAAC,GAAG,CAAC,KAAkB;QAC3B,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,KAAkB,EAAE,KAAc;QAC3C,MAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAgB;QACnC,IAAI,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC;IAEO,2BAA2B,CAAC,KAAa;QAChD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE;YACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;gBAC9B,OAAO,IAAI,CAAC;aACZ;QACF,CAAC,CAAC;aACD,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,qBAAqB,CAAC,KAAa;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnD,IAAI,OAAO,KAAK,SAAS,EAAE;YAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACtC;IACF,CAAC;IAEO,qBAAqB,CAAC,KAAa;QAC1C,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QAClC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAC1B,KAAK,EACL,UAAU,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,2BAA2B,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAC7B,CAAC;IACH,CAAC;CACD;AACD,MAAM,OAAO,oCAAwC,SAAQ,YAAuB;IACnF,YAAY,aAA2C;QACtD,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;IAC9E,CAAC;CACD;AAsCD,MAAM,OAAO,kBAAkB;IAA/B;QACiB,qBAAgB,GAAG,IAAI,YAAY,EAGhD,CAAC;QAEY,iBAAY,GAAG,IAAI,YAAY,EAA4B,CAAC;QAE5D,gCAA2B,GAAG,IAAI,YAAY,EAG3D,CAAC;IACL,CAAC;CAAA","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\nimport { PromiseCache } from \"@fluidframework/core-utils\";\nimport {\n\tIOdspResolvedUrl,\n\tIFileEntry,\n\tIEntry,\n\tIPersistedCache,\n\tICacheEntry,\n\tISocketStorageDiscovery,\n\tgetKeyForCacheEntry,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { ISnapshot } from \"@fluidframework/driver-definitions\";\n\n/**\n * Similar to IPersistedCache, but exposes cache interface for single file\n * @alpha\n */\nexport interface IPersistedFileCache {\n\t// TODO: use a stronger type\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tget(entry: IEntry): Promise<any>;\n\t// TODO: use a stronger type\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tput(entry: IEntry, value: any): Promise<void>;\n\tremoveEntries(): Promise<void>;\n}\n\n/**\n * Default local-only implementation of IPersistedCache,\n * used if no persisted cache is provided by the host\n */\nexport class LocalPersistentCache implements IPersistedCache {\n\tprivate readonly cache = new Map<string, unknown>();\n\t// For every document id there will be a single expiration entry inspite of the number of cache entries.\n\tprivate readonly docIdExpirationMap = new Map<string, ReturnType<typeof setTimeout>>();\n\n\tpublic constructor(private readonly snapshotExpiryPolicy = 3600 * 1000) {}\n\n\tasync get(entry: ICacheEntry): Promise<unknown> {\n\t\tconst key = getKeyForCacheEntry(entry);\n\t\treturn this.cache.get(key);\n\t}\n\n\tasync put(entry: ICacheEntry, value: unknown): Promise<void> {\n\t\tconst key = getKeyForCacheEntry(entry);\n\t\tthis.cache.set(key, value);\n\t\tthis.updateExpirationEntry(entry.file.docId);\n\t}\n\n\tasync removeEntries(file: IFileEntry): Promise<void> {\n\t\tthis.removeDocIdEntriesFromCache(file.docId);\n\t}\n\n\tprivate removeDocIdEntriesFromCache(docId: string): void[] {\n\t\tthis.removeExpirationEntry(docId);\n\t\treturn [...this.cache]\n\t\t\t.filter(([cachekey]) => {\n\t\t\t\tconst docIdFromKey = cachekey.split(\"_\");\n\t\t\t\tif (docIdFromKey[0] === docId) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t})\n\t\t\t.map(([cachekey]) => {\n\t\t\t\tthis.cache.delete(cachekey);\n\t\t\t});\n\t}\n\n\tprivate removeExpirationEntry(docId: string): void {\n\t\tconst timeout = this.docIdExpirationMap.get(docId);\n\t\tif (timeout !== undefined) {\n\t\t\tclearTimeout(timeout);\n\t\t\tthis.docIdExpirationMap.delete(docId);\n\t\t}\n\t}\n\n\tprivate updateExpirationEntry(docId: string): void {\n\t\tthis.removeExpirationEntry(docId);\n\t\tthis.docIdExpirationMap.set(\n\t\t\tdocId,\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.removeDocIdEntriesFromCache(docId);\n\t\t\t}, this.snapshotExpiryPolicy),\n\t\t);\n\t}\n}\nexport class PromiseCacheWithOneHourSlidingExpiry<T> extends PromiseCache<string, T> {\n\tconstructor(removeOnError?: (error: unknown) => boolean) {\n\t\tsuper({ expiry: { policy: \"sliding\", durationMs: 3600000 }, removeOnError });\n\t}\n}\n\n/**\n * Internal cache interface used within driver only\n * @alpha\n */\nexport interface INonPersistentCache {\n\t/**\n\t * Cache of joined/joining session info\n\t */\n\treadonly sessionJoinCache: PromiseCache<\n\t\tstring,\n\t\t{ entryTime: number; joinSessionResponse: ISocketStorageDiscovery }\n\t>;\n\n\t/**\n\t * Cache of resolved/resolving file URLs\n\t */\n\treadonly fileUrlCache: PromiseCache<string, IOdspResolvedUrl>;\n\n\t/**\n\t * Used to store the snapshot fetch promise if the prefetch has been made using the prefetchLatestSnapshot api.\n\t * This is then used later to look for the promise during the container load.\n\t */\n\treadonly snapshotPrefetchResultCache: PromiseCache<string, IPrefetchSnapshotContents>;\n}\n\n/**\n * Internal cache interface used within driver only\n * @alpha\n */\nexport interface IOdspCache extends INonPersistentCache {\n\t/**\n\t * Persisted cache - only serializable content is allowed\n\t */\n\treadonly persistedCache: IPersistedFileCache;\n}\n\nexport class NonPersistentCache implements INonPersistentCache {\n\tpublic readonly sessionJoinCache = new PromiseCache<\n\t\tstring,\n\t\t{ entryTime: number; joinSessionResponse: ISocketStorageDiscovery }\n\t>();\n\n\tpublic readonly fileUrlCache = new PromiseCache<string, IOdspResolvedUrl>();\n\n\tpublic readonly snapshotPrefetchResultCache = new PromiseCache<\n\t\tstring,\n\t\tIPrefetchSnapshotContents\n\t>();\n}\n\n/**\n * @alpha\n */\nexport interface IPrefetchSnapshotContents extends ISnapshot {\n\tfluidEpoch: string;\n\tprefetchStartTime: number;\n}\n"]}
@@ -6,9 +6,9 @@ import { MonitoringContext } from "@fluidframework/telemetry-utils";
6
6
  import { IDocumentDeltaConnection, IResolvedUrl, IDocumentServicePolicies } from "@fluidframework/driver-definitions";
7
7
  import { IClient, ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
8
  import { IOdspResolvedUrl, TokenFetchOptions, HostStoragePolicy, InstrumentedStorageTokenFetcher } from "@fluidframework/odsp-driver-definitions";
9
- import { IOdspCache } from "./odspCache.mjs";
10
- import { OdspDocumentDeltaConnection } from "./odspDocumentDeltaConnection.mjs";
11
- import { EpochTracker } from "./epochTracker.mjs";
9
+ import { IOdspCache } from "./odspCache.js";
10
+ import { OdspDocumentDeltaConnection } from "./odspDocumentDeltaConnection.js";
11
+ import { EpochTracker } from "./epochTracker.js";
12
12
  /**
13
13
  * This OdspDelayLoadedDeltaStream is used by OdspDocumentService.ts to delay load the delta connection
14
14
  * as they are not on critical path of loading a container.
@@ -49,7 +49,9 @@ export declare class OdspDelayLoadedDeltaStream {
49
49
  get resolvedUrl(): IResolvedUrl;
50
50
  get currentDeltaConnection(): OdspDocumentDeltaConnection | undefined;
51
51
  get relayServiceTenantAndSessionId(): string | undefined;
52
- /** Annotate the given error indicating which connection step failed */
52
+ /**
53
+ * Annotate the given error indicating which connection step failed
54
+ */
53
55
  private annotateConnectionError;
54
56
  /**
55
57
  * Connects to a delta stream endpoint for emitting ops.
@@ -74,6 +76,6 @@ export declare class OdspDelayLoadedDeltaStream {
74
76
  * @param webSocketUrl - websocket URL
75
77
  */
76
78
  private createDeltaConnection;
77
- dispose(error?: any): void;
79
+ dispose(error?: unknown): void;
78
80
  }
79
- //# sourceMappingURL=odspDelayLoadedDeltaStream.d.mts.map
81
+ //# sourceMappingURL=odspDelayLoadedDeltaStream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDelayLoadedDeltaStream.d.ts","sourceRoot":"","sources":["../src/odspDelayLoadedDeltaStream.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAEN,iBAAiB,EAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,wBAAwB,EACxB,YAAY,EACZ,wBAAwB,EACxB,MAAM,oCAAoC,CAAC;AAK5C,OAAO,EACN,OAAO,EACP,yBAAyB,EAEzB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,+BAA+B,EAI/B,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAO/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAIjD;;;GAGG;AACH,qBAAa,0BAA0B;aAgCrB,eAAe,EAAE,gBAAgB;IAC1C,QAAQ,EAAE,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAGlC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IA1C3C,OAAO,CAAC,uBAAuB,CAA4C;IAE3E,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IAExC,OAAO,CAAC,iBAAiB,CAAC,CAA8B;IAExD,OAAO,CAAC,+BAA+B,CAAqB;IAM5D,OAAO,CAAC,oBAAoB,CAAc;IAE1C;;;;;;;;;;;;;;OAcG;gBAEc,eAAe,EAAE,gBAAgB,EAC1C,QAAQ,EAAE,wBAAwB,EACxB,eAAe,EAAE,+BAA+B,EAChD,iBAAiB,EAC/B,CAAC,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,GACxD,SAAS,EACK,EAAE,EAAE,iBAAiB,EACrB,KAAK,EAAE,UAAU,EACjB,UAAU,EAAE,iBAAiB,EAC7B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,IAAI,EACvD,qBAAqB,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,EACjE,wBAAwB,CAAC,oBAAQ;IAKnD,IAAW,WAAW,IAAI,YAAY,CAErC;IAED,IAAW,sBAAsB,IAAI,2BAA2B,GAAG,SAAS,CAE3E;IAED,IAAW,8BAA8B,IAAI,MAAM,GAAG,SAAS,CAE9D;IAED;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAwGrF,OAAO,CAAC,QAAQ,CAAC,aAAa,CAoB5B;IAEF,OAAO,CAAC,qBAAqB;YAOf,0BAA0B;YAyC1B,WAAW;YAgEX,eAAe;IAkG7B,OAAO,CAAC,uBAAuB;IAe/B,OAAO,CAAC,gCAAgC;IAQxC;;;;;;;;OAQG;YACW,qBAAqB;IAgC5B,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;CAKrC"}
@@ -7,12 +7,12 @@ import { assert } from "@fluidframework/core-utils";
7
7
  import { normalizeError, } from "@fluidframework/telemetry-utils";
8
8
  import { DeltaStreamConnectionForbiddenError, NonRetryableError, } from "@fluidframework/driver-utils";
9
9
  import { OdspErrorTypes, } from "@fluidframework/odsp-driver-definitions";
10
- import { hasFacetCodes } from "@fluidframework/odsp-doclib-utils";
11
- import { OdspDocumentDeltaConnection } from "./odspDocumentDeltaConnection.mjs";
12
- import { getJoinSessionCacheKey, getWithRetryForTokenRefresh, } from "./odspUtils.mjs";
13
- import { fetchJoinSession } from "./vroom.mjs";
14
- import { pkgVersion as driverVersion } from "./packageVersion.mjs";
15
- import { policyLabelsUpdatesSignalType } from "./contracts.mjs";
10
+ import { hasFacetCodes } from "@fluidframework/odsp-doclib-utils/internal";
11
+ import { OdspDocumentDeltaConnection } from "./odspDocumentDeltaConnection.js";
12
+ import { getJoinSessionCacheKey, getWithRetryForTokenRefresh, } from "./odspUtils.js";
13
+ import { fetchJoinSession } from "./vroom.js";
14
+ import { pkgVersion as driverVersion } from "./packageVersion.js";
15
+ import { policyLabelsUpdatesSignalType } from "./contracts.js";
16
16
  /**
17
17
  * This OdspDelayLoadedDeltaStream is used by OdspDocumentService.ts to delay load the delta connection
18
18
  * as they are not on critical path of loading a container.
@@ -52,7 +52,7 @@ export class OdspDelayLoadedDeltaStream {
52
52
  this.labelUpdateTimestamp = -1;
53
53
  this.signalHandler = (signalsArg) => {
54
54
  const signals = Array.isArray(signalsArg) ? signalsArg : [signalsArg];
55
- signals.forEach((signal) => {
55
+ for (const signal of signals) {
56
56
  // Make sure it is not for a specific client as `PolicyLabelsUpdate` is meant for all clients.
57
57
  if (signal.clientId === null) {
58
58
  // We could have some issues/irregularities in parsing signals, so put it in try/catch block
@@ -61,14 +61,16 @@ export class OdspDelayLoadedDeltaStream {
61
61
  try {
62
62
  envelope = JSON.parse(signal.content);
63
63
  }
64
- catch (err) { }
64
+ catch {
65
+ // Drop error
66
+ }
65
67
  if (envelope?.contents?.type === policyLabelsUpdatesSignalType) {
66
68
  this.emitMetaDataUpdateEvent({
67
69
  sensitivityLabelsInfo: JSON.stringify(envelope.contents.content),
68
70
  });
69
71
  }
70
72
  }
71
- });
73
+ }
72
74
  };
73
75
  this.joinSessionKey = getJoinSessionCacheKey(this.odspResolvedUrl);
74
76
  }
@@ -81,7 +83,9 @@ export class OdspDelayLoadedDeltaStream {
81
83
  get relayServiceTenantAndSessionId() {
82
84
  return this._relayServiceTenantAndSessionId;
83
85
  }
84
- /** Annotate the given error indicating which connection step failed */
86
+ /**
87
+ * Annotate the given error indicating which connection step failed
88
+ */
85
89
  annotateConnectionError(error, failedConnectionStep, separateTokenRequest) {
86
90
  return normalizeError(error, {
87
91
  props: {
@@ -103,7 +107,8 @@ export class OdspDelayLoadedDeltaStream {
103
107
  // websocket token or whether it is returned with joinSession response payload
104
108
  const requestWebsocketTokenFromJoinSession = this.getWebsocketToken === undefined;
105
109
  const websocketTokenPromise = requestWebsocketTokenFromJoinSession
106
- ? Promise.resolve(null)
110
+ ? // eslint-disable-next-line unicorn/no-null
111
+ Promise.resolve(null)
107
112
  : this.getWebsocketToken(options);
108
113
  const annotateAndRethrowConnectionError = (step) => (error) => {
109
114
  throw this.annotateConnectionError(error, step, !requestWebsocketTokenFromJoinSession);
@@ -113,6 +118,7 @@ export class OdspDelayLoadedDeltaStream {
113
118
  joinSessionPromise.catch(annotateAndRethrowConnectionError("joinSession")),
114
119
  websocketTokenPromise.catch(annotateAndRethrowConnectionError("getWebsocketToken")),
115
120
  ]);
121
+ // eslint-disable-next-line unicorn/no-null
116
122
  const finalWebsocketToken = websocketToken ?? websocketEndpoint.socketToken ?? null;
117
123
  if (finalWebsocketToken === null) {
118
124
  throw this.annotateConnectionError(new NonRetryableError("Websocket token is null", OdspErrorTypes.fetchTokenError, { driverVersion }), "getWebsocketToken", !requestWebsocketTokenFromJoinSession);
@@ -137,7 +143,8 @@ export class OdspDelayLoadedDeltaStream {
137
143
  this.clearJoinSessionTimer();
138
144
  if (typeof error === "object" &&
139
145
  error !== null &&
140
- error.errorType === OdspErrorTypes.authorizationError) {
146
+ error.errorType ===
147
+ OdspErrorTypes.authorizationError) {
141
148
  this.cache.sessionJoinCache.remove(this.joinSessionKey);
142
149
  }
143
150
  // If we hit this assert, it means that "disconnect" event is emitted before the connection went through
@@ -170,11 +177,15 @@ export class OdspDelayLoadedDeltaStream {
170
177
  async scheduleJoinSessionRefresh(delta, requestSocketToken, clientId) {
171
178
  if (this.joinSessionRefreshTimer !== undefined) {
172
179
  this.clearJoinSessionTimer();
180
+ // TODO: use a stronger type
181
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
173
182
  const originalStackTraceLimit = Error.stackTraceLimit;
183
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
174
184
  Error.stackTraceLimit = 50;
175
185
  this.mc.logger.sendTelemetryEvent({
176
186
  eventName: "DuplicateJoinSessionRefresh",
177
187
  }, new Error("DuplicateJoinSessionRefresh"));
188
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
178
189
  Error.stackTraceLimit = originalStackTraceLimit;
179
190
  }
180
191
  await new Promise((resolve, reject) => {
@@ -207,27 +218,29 @@ export class OdspDelayLoadedDeltaStream {
207
218
  }),
208
219
  });
209
220
  }
210
- const response = await this.joinSessionCore(requestSocketToken, options, isRefreshingJoinSession).catch((e) => {
211
- if (hasFacetCodes(e) && e.facetCodes !== undefined) {
212
- for (const code of e.facetCodes) {
221
+ const response = await this.joinSessionCore(requestSocketToken, options, isRefreshingJoinSession).catch((error) => {
222
+ if (hasFacetCodes(error) && error.facetCodes !== undefined) {
223
+ for (const code of error.facetCodes) {
213
224
  switch (code) {
214
225
  case "sessionForbidden":
215
226
  case "sessionForbiddenOnPreservedFiles":
216
227
  case "sessionForbiddenOnModerationEnabledLibrary":
217
228
  case "sessionForbiddenOnRequireCheckout":
218
229
  case "sessionForbiddenOnCheckoutFile":
219
- case "sessionForbiddenOnInvisibleMinorVersion":
230
+ case "sessionForbiddenOnInvisibleMinorVersion": {
220
231
  // This document can only be opened in storage-only mode.
221
232
  // DeltaManager will recognize this error
222
233
  // and load without a delta stream connection.
223
234
  this.policies = { ...this.policies, storageOnly: true };
224
235
  throw new DeltaStreamConnectionForbiddenError(`Storage-only due to ${code}`, { driverVersion }, code);
225
- default:
236
+ }
237
+ default: {
226
238
  continue;
239
+ }
227
240
  }
228
241
  }
229
242
  }
230
- throw e;
243
+ throw error;
231
244
  });
232
245
  this._relayServiceTenantAndSessionId = `${response.tenantId}/${response.id}`;
233
246
  return response;
@@ -293,7 +306,7 @@ export class OdspDelayLoadedDeltaStream {
293
306
  emitMetaDataUpdateEvent(metadata) {
294
307
  const label = JSON.parse(metadata.sensitivityLabelsInfo);
295
308
  const time = label.timestamp;
296
- assert(time > 0, "time should be positive");
309
+ assert(time > 0, 0x8e0 /* time should be positive */);
297
310
  if (time > this.labelUpdateTimestamp) {
298
311
  this.labelUpdateTimestamp = time;
299
312
  this.metadataUpdateHandler({
@@ -335,4 +348,4 @@ export class OdspDelayLoadedDeltaStream {
335
348
  this.currentConnection = undefined;
336
349
  }
337
350
  }
338
- //# sourceMappingURL=odspDelayLoadedDeltaStream.mjs.map
351
+ //# sourceMappingURL=odspDelayLoadedDeltaStream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDelayLoadedDeltaStream.js","sourceRoot":"","sources":["../src/odspDelayLoadedDeltaStream.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 { performance } from \"@fluid-internal/client-utils\";\nimport { ISignalEnvelope } from \"@fluidframework/core-interfaces\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport {\n\tIFluidErrorBase,\n\tMonitoringContext,\n\tnormalizeError,\n} from \"@fluidframework/telemetry-utils\";\nimport {\n\tIDocumentDeltaConnection,\n\tIResolvedUrl,\n\tIDocumentServicePolicies,\n} from \"@fluidframework/driver-definitions\";\nimport {\n\tDeltaStreamConnectionForbiddenError,\n\tNonRetryableError,\n} from \"@fluidframework/driver-utils\";\nimport {\n\tIClient,\n\tISequencedDocumentMessage,\n\tISignalMessage,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tIOdspResolvedUrl,\n\tTokenFetchOptions,\n\tHostStoragePolicy,\n\tInstrumentedStorageTokenFetcher,\n\tISocketStorageDiscovery,\n\tOdspErrorTypes,\n\ttype IOdspError,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { hasFacetCodes } from \"@fluidframework/odsp-doclib-utils/internal\";\nimport { IOdspCache } from \"./odspCache.js\";\nimport { OdspDocumentDeltaConnection } from \"./odspDocumentDeltaConnection.js\";\nimport {\n\tgetJoinSessionCacheKey,\n\tgetWithRetryForTokenRefresh,\n\tTokenFetchOptionsEx,\n} from \"./odspUtils.js\";\nimport { fetchJoinSession } from \"./vroom.js\";\nimport { EpochTracker } from \"./epochTracker.js\";\nimport { pkgVersion as driverVersion } from \"./packageVersion.js\";\nimport { policyLabelsUpdatesSignalType } from \"./contracts.js\";\n\n/**\n * This OdspDelayLoadedDeltaStream is used by OdspDocumentService.ts to delay load the delta connection\n * as they are not on critical path of loading a container.\n */\nexport class OdspDelayLoadedDeltaStream {\n\t// Timer which runs and executes the join session call after intervals.\n\tprivate joinSessionRefreshTimer: ReturnType<typeof setTimeout> | undefined;\n\n\tprivate readonly joinSessionKey: string;\n\n\tprivate currentConnection?: OdspDocumentDeltaConnection;\n\n\tprivate _relayServiceTenantAndSessionId: string | undefined;\n\n\t// Tracks the time at which the Policy Labels were updated the last time. This is used to resolve race conditions\n\t// between label updates from the join session and the Fluid signals and they could have same or different timestamps.\n\t// So this timestamp is updated with timestamp from the service/signals with the most recent timestamp. We could also\n\t// receive stale data from join session as that call is made at intervals, so we need to update with only most recent data.\n\tprivate labelUpdateTimestamp: number = -1;\n\n\t/**\n\t * @param odspResolvedUrl - resolved url identifying document that will be managed by this service instance.\n\t * @param policies - Document service policies.\n\t * @param getStorageToken - function that can provide the storage token. This is is also referred to as\n\t * the \"Vroom\" token in SPO.\n\t * @param getWebsocketToken - function that can provide a token for accessing the web socket. This is also referred\n\t * to as the \"Push\" token in SPO. If undefined then websocket token is expected to be returned with joinSession\n\t * response payload.\n\t * @param mc - a logger that can capture performance and diagnostic information\n\t * @param cache - This caches response for joinSession.\n\t * @param hostPolicy - host constructed policy which customizes service behavior.\n\t * @param epochTracker - This helper class which adds epoch to backend calls made by this service instance.\n\t * @param opsReceived - To register the ops received through socket.\n\t * @param socketReferenceKeyPrefix - (optional) prefix to isolate socket reuse cache\n\t */\n\tpublic constructor(\n\t\tpublic readonly odspResolvedUrl: IOdspResolvedUrl,\n\t\tpublic policies: IDocumentServicePolicies,\n\t\tprivate readonly getStorageToken: InstrumentedStorageTokenFetcher,\n\t\tprivate readonly getWebsocketToken:\n\t\t\t| ((options: TokenFetchOptions) => Promise<string | null>)\n\t\t\t| undefined,\n\t\tprivate readonly mc: MonitoringContext,\n\t\tprivate readonly cache: IOdspCache,\n\t\tprivate readonly hostPolicy: HostStoragePolicy,\n\t\tprivate readonly epochTracker: EpochTracker,\n\t\tprivate readonly opsReceived: (ops: ISequencedDocumentMessage[]) => void,\n\t\tprivate readonly metadataUpdateHandler: (metadata: Record<string, string>) => void,\n\t\tprivate readonly socketReferenceKeyPrefix?: string,\n\t) {\n\t\tthis.joinSessionKey = getJoinSessionCacheKey(this.odspResolvedUrl);\n\t}\n\n\tpublic get resolvedUrl(): IResolvedUrl {\n\t\treturn this.odspResolvedUrl;\n\t}\n\n\tpublic get currentDeltaConnection(): OdspDocumentDeltaConnection | undefined {\n\t\treturn this.currentConnection;\n\t}\n\n\tpublic get relayServiceTenantAndSessionId(): string | undefined {\n\t\treturn this._relayServiceTenantAndSessionId;\n\t}\n\n\t/**\n\t * Annotate the given error indicating which connection step failed\n\t */\n\tprivate annotateConnectionError(\n\t\terror: unknown,\n\t\tfailedConnectionStep: string,\n\t\tseparateTokenRequest: boolean,\n\t): IFluidErrorBase {\n\t\treturn normalizeError(error, {\n\t\t\tprops: {\n\t\t\t\tfailedConnectionStep,\n\t\t\t\tseparateTokenRequest,\n\t\t\t},\n\t\t});\n\t}\n\n\t/**\n\t * Connects to a delta stream endpoint for emitting ops.\n\t *\n\t * @returns returns the document delta stream service for onedrive/sharepoint driver.\n\t */\n\tpublic async connectToDeltaStream(client: IClient): Promise<IDocumentDeltaConnection> {\n\t\tassert(\n\t\t\tthis.currentConnection === undefined,\n\t\t\t0x4ad /* Should not be called when connection is already present! */,\n\t\t);\n\t\t// Attempt to connect twice, in case we used expired token.\n\t\treturn getWithRetryForTokenRefresh<IDocumentDeltaConnection>(async (options) => {\n\t\t\t// Presence of getWebsocketToken callback dictates whether callback is used for fetching\n\t\t\t// websocket token or whether it is returned with joinSession response payload\n\t\t\tconst requestWebsocketTokenFromJoinSession = this.getWebsocketToken === undefined;\n\t\t\tconst websocketTokenPromise = requestWebsocketTokenFromJoinSession\n\t\t\t\t? // eslint-disable-next-line unicorn/no-null\n\t\t\t\t Promise.resolve(null)\n\t\t\t\t: this.getWebsocketToken!(options);\n\n\t\t\tconst annotateAndRethrowConnectionError = (step: string) => (error: unknown) => {\n\t\t\t\tthrow this.annotateConnectionError(\n\t\t\t\t\terror,\n\t\t\t\t\tstep,\n\t\t\t\t\t!requestWebsocketTokenFromJoinSession,\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tconst joinSessionPromise = this.joinSession(\n\t\t\t\trequestWebsocketTokenFromJoinSession,\n\t\t\t\toptions,\n\t\t\t\tfalse /* isRefreshingJoinSession */,\n\t\t\t);\n\t\t\tconst [websocketEndpoint, websocketToken] = await Promise.all([\n\t\t\t\tjoinSessionPromise.catch(annotateAndRethrowConnectionError(\"joinSession\")),\n\t\t\t\twebsocketTokenPromise.catch(annotateAndRethrowConnectionError(\"getWebsocketToken\")),\n\t\t\t]);\n\n\t\t\t// eslint-disable-next-line unicorn/no-null\n\t\t\tconst finalWebsocketToken = websocketToken ?? websocketEndpoint.socketToken ?? null;\n\t\t\tif (finalWebsocketToken === null) {\n\t\t\t\tthrow this.annotateConnectionError(\n\t\t\t\t\tnew NonRetryableError(\n\t\t\t\t\t\t\"Websocket token is null\",\n\t\t\t\t\t\tOdspErrorTypes.fetchTokenError,\n\t\t\t\t\t\t{ driverVersion },\n\t\t\t\t\t),\n\t\t\t\t\t\"getWebsocketToken\",\n\t\t\t\t\t!requestWebsocketTokenFromJoinSession,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (websocketEndpoint.sensitivityLabelsInfo !== undefined) {\n\t\t\t\tthis.emitMetaDataUpdateEvent({\n\t\t\t\t\tsensitivityLabelsInfo: websocketEndpoint.sensitivityLabelsInfo,\n\t\t\t\t});\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tconst connection = await this.createDeltaConnection(\n\t\t\t\t\twebsocketEndpoint.tenantId,\n\t\t\t\t\twebsocketEndpoint.id,\n\t\t\t\t\tfinalWebsocketToken,\n\t\t\t\t\tclient,\n\t\t\t\t\twebsocketEndpoint.deltaStreamSocketUrl,\n\t\t\t\t);\n\t\t\t\tconnection.on(\"op\", (documentId, ops: ISequencedDocumentMessage[]) => {\n\t\t\t\t\tthis.opsReceived(ops);\n\t\t\t\t});\n\t\t\t\tconnection.on(\"signal\", this.signalHandler);\n\t\t\t\t// Also process the initial signals\n\t\t\t\tthis.signalHandler(connection.initialSignals);\n\t\t\t\t// On disconnect with 401/403 error code, we can just clear the joinSession cache as we will again\n\t\t\t\t// get the auth error on reconnecting and face latency.\n\t\t\t\tconnection.once(\"disconnect\", (error: unknown) => {\n\t\t\t\t\t// Clear the join session refresh timer so that it can be restarted on reconnection.\n\t\t\t\t\tthis.clearJoinSessionTimer();\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof error === \"object\" &&\n\t\t\t\t\t\terror !== null &&\n\t\t\t\t\t\t(error as Partial<IOdspError>).errorType ===\n\t\t\t\t\t\t\tOdspErrorTypes.authorizationError\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.cache.sessionJoinCache.remove(this.joinSessionKey);\n\t\t\t\t\t}\n\t\t\t\t\t// If we hit this assert, it means that \"disconnect\" event is emitted before the connection went through\n\t\t\t\t\t// dispose flow which is not correct and could lead to a bunch of errors.\n\t\t\t\t\tassert(connection.disposed, 0x4ae /* Connection should be disposed by now */);\n\t\t\t\t\tthis.currentConnection = undefined;\n\t\t\t\t});\n\t\t\t\tthis.currentConnection = connection;\n\t\t\t\treturn connection;\n\t\t\t} catch (error) {\n\t\t\t\tthis.clearJoinSessionTimer();\n\t\t\t\tthis.cache.sessionJoinCache.remove(this.joinSessionKey);\n\n\t\t\t\tconst normalizedError = this.annotateConnectionError(\n\t\t\t\t\terror,\n\t\t\t\t\t\"createDeltaConnection\",\n\t\t\t\t\t!requestWebsocketTokenFromJoinSession,\n\t\t\t\t);\n\t\t\t\tif (typeof error === \"object\" && error !== null) {\n\t\t\t\t\tnormalizedError.addTelemetryProperties({\n\t\t\t\t\t\tsocketDocumentId: websocketEndpoint.id,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow normalizedError;\n\t\t\t}\n\t\t});\n\t}\n\n\tprivate readonly signalHandler = (signalsArg: ISignalMessage | ISignalMessage[]): void => {\n\t\tconst signals = Array.isArray(signalsArg) ? signalsArg : [signalsArg];\n\t\tfor (const signal of signals) {\n\t\t\t// Make sure it is not for a specific client as `PolicyLabelsUpdate` is meant for all clients.\n\t\t\tif (signal.clientId === null) {\n\t\t\t\t// We could have some issues/irregularities in parsing signals, so put it in try/catch block\n\t\t\t\t// and ignore the error as we can have labels update later on through join session response.\n\t\t\t\tlet envelope: ISignalEnvelope | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tenvelope = JSON.parse(signal.content as string) as ISignalEnvelope;\n\t\t\t\t} catch {\n\t\t\t\t\t// Drop error\n\t\t\t\t}\n\t\t\t\tif (envelope?.contents?.type === policyLabelsUpdatesSignalType) {\n\t\t\t\t\tthis.emitMetaDataUpdateEvent({\n\t\t\t\t\t\tsensitivityLabelsInfo: JSON.stringify(envelope.contents.content),\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tprivate clearJoinSessionTimer(): void {\n\t\tif (this.joinSessionRefreshTimer !== undefined) {\n\t\t\tclearTimeout(this.joinSessionRefreshTimer);\n\t\t\tthis.joinSessionRefreshTimer = undefined;\n\t\t}\n\t}\n\n\tprivate async scheduleJoinSessionRefresh(\n\t\tdelta: number,\n\t\trequestSocketToken: boolean,\n\t\tclientId: string | undefined,\n\t): Promise<void> {\n\t\tif (this.joinSessionRefreshTimer !== undefined) {\n\t\t\tthis.clearJoinSessionTimer();\n\t\t\t// TODO: use a stronger type\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\t\tconst originalStackTraceLimit = (Error as any).stackTraceLimit;\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\t\t(Error as any).stackTraceLimit = 50;\n\t\t\tthis.mc.logger.sendTelemetryEvent(\n\t\t\t\t{\n\t\t\t\t\teventName: \"DuplicateJoinSessionRefresh\",\n\t\t\t\t},\n\t\t\t\tnew Error(\"DuplicateJoinSessionRefresh\"),\n\t\t\t);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\t\t(Error as any).stackTraceLimit = originalStackTraceLimit;\n\t\t}\n\n\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\tthis.joinSessionRefreshTimer = setTimeout(() => {\n\t\t\t\tthis.clearJoinSessionTimer();\n\t\t\t\t// Clear the timer as it is going to be scheduled again as part of refreshing join session.\n\t\t\t\tgetWithRetryForTokenRefresh(async (options) => {\n\t\t\t\t\tawait this.joinSession(\n\t\t\t\t\t\trequestSocketToken,\n\t\t\t\t\t\toptions,\n\t\t\t\t\t\ttrue /* isRefreshingJoinSession */,\n\t\t\t\t\t\tclientId,\n\t\t\t\t\t);\n\t\t\t\t\tresolve();\n\t\t\t\t}).catch((error) => {\n\t\t\t\t\treject(error);\n\t\t\t\t});\n\t\t\t}, delta);\n\t\t});\n\t}\n\n\tprivate async joinSession(\n\t\trequestSocketToken: boolean,\n\t\toptions: TokenFetchOptionsEx,\n\t\tisRefreshingJoinSession: boolean,\n\t\tclientId?: string,\n\t): Promise<ISocketStorageDiscovery> {\n\t\t// If this call is to refresh the join session for the current connection but we are already disconnected in\n\t\t// the meantime or disconnected and then reconnected then do not make the call. However, we should not have\n\t\t// come here if that is the case because timer should have been disposed, but due to race condition with the\n\t\t// timer we should not make the call and throw error.\n\t\tif (\n\t\t\tisRefreshingJoinSession &&\n\t\t\t(this.currentConnection === undefined ||\n\t\t\t\t(clientId !== undefined && this.currentConnection.clientId !== clientId))\n\t\t) {\n\t\t\tthis.clearJoinSessionTimer();\n\t\t\tthrow new NonRetryableError(\n\t\t\t\t\"JoinSessionRefreshTimerNotCancelled\",\n\t\t\t\tOdspErrorTypes.genericError,\n\t\t\t\t{\n\t\t\t\t\tdriverVersion,\n\t\t\t\t\tdetails: JSON.stringify({\n\t\t\t\t\t\tschedulerClientId: clientId,\n\t\t\t\t\t\tcurrentClientId: this.currentConnection?.clientId,\n\t\t\t\t\t}),\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tconst response = await this.joinSessionCore(\n\t\t\trequestSocketToken,\n\t\t\toptions,\n\t\t\tisRefreshingJoinSession,\n\t\t).catch((error) => {\n\t\t\tif (hasFacetCodes(error) && error.facetCodes !== undefined) {\n\t\t\t\tfor (const code of error.facetCodes) {\n\t\t\t\t\tswitch (code) {\n\t\t\t\t\t\tcase \"sessionForbidden\":\n\t\t\t\t\t\tcase \"sessionForbiddenOnPreservedFiles\":\n\t\t\t\t\t\tcase \"sessionForbiddenOnModerationEnabledLibrary\":\n\t\t\t\t\t\tcase \"sessionForbiddenOnRequireCheckout\":\n\t\t\t\t\t\tcase \"sessionForbiddenOnCheckoutFile\":\n\t\t\t\t\t\tcase \"sessionForbiddenOnInvisibleMinorVersion\": {\n\t\t\t\t\t\t\t// This document can only be opened in storage-only mode.\n\t\t\t\t\t\t\t// DeltaManager will recognize this error\n\t\t\t\t\t\t\t// and load without a delta stream connection.\n\t\t\t\t\t\t\tthis.policies = { ...this.policies, storageOnly: true };\n\t\t\t\t\t\t\tthrow new DeltaStreamConnectionForbiddenError(\n\t\t\t\t\t\t\t\t`Storage-only due to ${code}`,\n\t\t\t\t\t\t\t\t{ driverVersion },\n\t\t\t\t\t\t\t\tcode,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault: {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tthrow error;\n\t\t});\n\t\tthis._relayServiceTenantAndSessionId = `${response.tenantId}/${response.id}`;\n\t\treturn response;\n\t}\n\n\tprivate async joinSessionCore(\n\t\trequestSocketToken: boolean,\n\t\toptions: TokenFetchOptionsEx,\n\t\tisRefreshingJoinSession: boolean,\n\t): Promise<ISocketStorageDiscovery> {\n\t\tconst disableJoinSessionRefresh = this.mc.config.getBoolean(\n\t\t\t\"Fluid.Driver.Odsp.disableJoinSessionRefresh\",\n\t\t);\n\t\tconst executeFetch = async (): Promise<{\n\t\t\tentryTime: number;\n\t\t\tjoinSessionResponse: ISocketStorageDiscovery;\n\t\t}> => {\n\t\t\tconst joinSessionResponse = await fetchJoinSession(\n\t\t\t\tthis.odspResolvedUrl,\n\t\t\t\t\"opStream/joinSession\",\n\t\t\t\t\"POST\",\n\t\t\t\tthis.mc.logger,\n\t\t\t\tthis.getStorageToken,\n\t\t\t\tthis.epochTracker,\n\t\t\t\trequestSocketToken,\n\t\t\t\toptions,\n\t\t\t\tdisableJoinSessionRefresh,\n\t\t\t\tisRefreshingJoinSession,\n\t\t\t\tthis.hostPolicy.sessionOptions?.unauthenticatedUserDisplayName,\n\t\t\t);\n\t\t\t// Emit event only in case it is fetched from the network.\n\t\t\tif (joinSessionResponse.sensitivityLabelsInfo !== undefined) {\n\t\t\t\tthis.emitMetaDataUpdateEvent({\n\t\t\t\t\tsensitivityLabelsInfo: joinSessionResponse.sensitivityLabelsInfo,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tentryTime: Date.now(),\n\t\t\t\tjoinSessionResponse,\n\t\t\t};\n\t\t};\n\n\t\tconst getResponseAndRefreshAfterDeltaMs = async (): Promise<{\n\t\t\trefreshAfterDeltaMs: number;\n\t\t\tentryTime: number;\n\t\t\tjoinSessionResponse: ISocketStorageDiscovery;\n\t\t}> => {\n\t\t\tconst _response = await this.cache.sessionJoinCache.addOrGet(\n\t\t\t\tthis.joinSessionKey,\n\t\t\t\texecuteFetch,\n\t\t\t);\n\t\t\t// If the response does not contain refreshSessionDurationSeconds, then treat it as old flow and let the\n\t\t\t// cache entry to be treated as expired after 1 hour.\n\t\t\t_response.joinSessionResponse.refreshSessionDurationSeconds =\n\t\t\t\t_response.joinSessionResponse.refreshSessionDurationSeconds ?? 3600;\n\t\t\treturn {\n\t\t\t\t..._response,\n\t\t\t\trefreshAfterDeltaMs: this.calculateJoinSessionRefreshDelta(\n\t\t\t\t\t_response.entryTime,\n\t\t\t\t\t_response.joinSessionResponse.refreshSessionDurationSeconds,\n\t\t\t\t),\n\t\t\t};\n\t\t};\n\t\tlet response = await getResponseAndRefreshAfterDeltaMs();\n\t\t// This means that the cached entry has expired(This should not be possible if the response is fetched\n\t\t// from the network call). In this case we remove the cached entry and fetch the new response.\n\t\tif (response.refreshAfterDeltaMs <= 0) {\n\t\t\tthis.cache.sessionJoinCache.remove(this.joinSessionKey);\n\t\t\tresponse = await getResponseAndRefreshAfterDeltaMs();\n\t\t}\n\t\tif (!disableJoinSessionRefresh) {\n\t\t\tconst props = {\n\t\t\t\tentryTime: response.entryTime,\n\t\t\t\trefreshSessionDurationSeconds:\n\t\t\t\t\tresponse.joinSessionResponse.refreshSessionDurationSeconds,\n\t\t\t\trefreshAfterDeltaMs: response.refreshAfterDeltaMs,\n\t\t\t};\n\t\t\tif (response.refreshAfterDeltaMs > 0) {\n\t\t\t\tthis.scheduleJoinSessionRefresh(\n\t\t\t\t\tresponse.refreshAfterDeltaMs,\n\t\t\t\t\trequestSocketToken,\n\t\t\t\t\tthis.currentConnection?.clientId,\n\t\t\t\t).catch((error) => {\n\t\t\t\t\t// Log the error and do nothing as the reconnection would fetch the join session.\n\t\t\t\t\tthis.mc.logger.sendTelemetryEvent(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\teventName: \"JoinSessionRefreshError\",\n\t\t\t\t\t\t\tdetails: JSON.stringify(props),\n\t\t\t\t\t\t},\n\t\t\t\t\t\terror,\n\t\t\t\t\t);\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Logging just for informational purposes to help with debugging as this is a new feature.\n\t\t\t\tthis.mc.logger.sendTelemetryEvent({\n\t\t\t\t\teventName: \"JoinSessionRefreshNotScheduled\",\n\t\t\t\t\tdetails: JSON.stringify(props),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\treturn response.joinSessionResponse;\n\t}\n\n\tprivate emitMetaDataUpdateEvent(metadata: Record<string, string>): void {\n\t\tconst label = JSON.parse(metadata.sensitivityLabelsInfo) as {\n\t\t\tlabels: unknown;\n\t\t\ttimestamp: number;\n\t\t};\n\t\tconst time = label.timestamp;\n\t\tassert(time > 0, 0x8e0 /* time should be positive */);\n\t\tif (time > this.labelUpdateTimestamp) {\n\t\t\tthis.labelUpdateTimestamp = time;\n\t\t\tthis.metadataUpdateHandler({\n\t\t\t\tsensitivityLabelsInfo: metadata.sensitivityLabelsInfo,\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate calculateJoinSessionRefreshDelta(\n\t\tresponseFetchTime: number,\n\t\trefreshSessionDurationSeconds: number,\n\t): number {\n\t\t// 30 seconds is buffer time to refresh the session.\n\t\treturn responseFetchTime + (refreshSessionDurationSeconds * 1000 - 30000) - Date.now();\n\t}\n\n\t/**\n\t * Creates a connection to the given delta stream endpoint\n\t *\n\t * @param tenantId - the ID of the tenant\n\t * @param documentId - document ID\n\t * @param token - authorization token for delta service\n\t * @param client - information about the client\n\t * @param webSocketUrl - websocket URL\n\t */\n\tprivate async createDeltaConnection(\n\t\ttenantId: string,\n\t\tdocumentId: string,\n\t\ttoken: string | null,\n\t\tclient: IClient,\n\t\twebSocketUrl: string,\n\t): Promise<OdspDocumentDeltaConnection> {\n\t\tconst startTime = performance.now();\n\t\tconst connection = await OdspDocumentDeltaConnection.create(\n\t\t\ttenantId,\n\t\t\tdocumentId,\n\t\t\ttoken,\n\t\t\tclient,\n\t\t\twebSocketUrl,\n\t\t\tthis.mc.logger,\n\t\t\t60000,\n\t\t\tthis.epochTracker,\n\t\t\tthis.socketReferenceKeyPrefix,\n\t\t);\n\t\tconst duration = performance.now() - startTime;\n\t\t// This event happens rather often, so it adds up to cost of telemetry.\n\t\t// Given that most reconnects result in reusing socket and happen very quickly,\n\t\t// report event only if it took longer than threshold.\n\t\tif (duration >= 2000) {\n\t\t\tthis.mc.logger.sendPerformanceEvent({\n\t\t\t\teventName: \"ConnectionSuccess\",\n\t\t\t\tduration,\n\t\t\t});\n\t\t}\n\t\treturn connection;\n\t}\n\n\tpublic dispose(error?: unknown): void {\n\t\tthis.clearJoinSessionTimer();\n\t\tthis.currentConnection?.dispose();\n\t\tthis.currentConnection = undefined;\n\t}\n}\n"]}
@@ -2,13 +2,13 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { ITelemetryProperties } from "@fluidframework/core-interfaces";
5
+ import { ITelemetryBaseProperties } from "@fluidframework/core-interfaces";
6
6
  import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
7
7
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
8
8
  import { InstrumentedStorageTokenFetcher } from "@fluidframework/odsp-driver-definitions";
9
- import { IDeltasFetchResult, IDocumentDeltaStorageService } from "@fluidframework/driver-definitions";
10
- import { EpochTracker } from "./epochTracker.mjs";
11
- import { OdspDocumentStorageService } from "./odspDocumentStorageManager.mjs";
9
+ import { IDeltasFetchResult, IDocumentDeltaStorageService, type IStream } from "@fluidframework/driver-definitions";
10
+ import { EpochTracker } from "./epochTracker.js";
11
+ import { OdspDocumentStorageService } from "./odspDocumentStorageManager.js";
12
12
  /**
13
13
  * Provides access to the underlying delta storage on the server for sharepoint driver.
14
14
  */
@@ -26,7 +26,7 @@ export declare class OdspDeltaStorageService {
26
26
  * @param scenarioName - reason for fetching ops
27
27
  * @returns ops retrieved & info if result was partial (i.e. more is available)
28
28
  */
29
- get(from: number, to: number, telemetryProps: ITelemetryProperties, scenarioName?: string): Promise<IDeltasFetchResult>;
29
+ get(from: number, to: number, telemetryProps: ITelemetryBaseProperties, scenarioName?: string): Promise<IDeltasFetchResult>;
30
30
  buildUrl(from: number, to: number): string;
31
31
  }
32
32
  export declare class OdspDeltaStorageWithCache implements IDocumentDeltaStorageService {
@@ -40,7 +40,7 @@ export declare class OdspDeltaStorageWithCache implements IDocumentDeltaStorageS
40
40
  private readonly opsReceived;
41
41
  private readonly storageManagerGetter;
42
42
  private useCacheForOps;
43
- constructor(snapshotOps: ISequencedDocumentMessage[] | undefined, logger: ITelemetryLoggerExt, batchSize: number, concurrency: number, getFromStorage: (from: number, to: number, telemetryProps: ITelemetryProperties, fetchReason?: string) => Promise<IDeltasFetchResult>, getCached: (from: number, to: number) => Promise<ISequencedDocumentMessage[]>, requestFromSocket: (from: number, to: number) => void, opsReceived: (ops: ISequencedDocumentMessage[]) => void, storageManagerGetter: () => OdspDocumentStorageService | undefined);
44
- fetchMessages(fromTotal: number, toTotal: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): import("@fluidframework/driver-definitions").IStream<ISequencedDocumentMessage[]>;
43
+ constructor(snapshotOps: ISequencedDocumentMessage[] | undefined, logger: ITelemetryLoggerExt, batchSize: number, concurrency: number, getFromStorage: (from: number, to: number, telemetryProps: ITelemetryBaseProperties, fetchReason?: string) => Promise<IDeltasFetchResult>, getCached: (from: number, to: number) => Promise<ISequencedDocumentMessage[]>, requestFromSocket: (from: number, to: number) => void, opsReceived: (ops: ISequencedDocumentMessage[]) => void, storageManagerGetter: () => OdspDocumentStorageService | undefined);
44
+ fetchMessages(fromTotal: number, toTotal: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): IStream<ISequencedDocumentMessage[]>;
45
45
  }
46
- //# sourceMappingURL=odspDeltaStorageService.d.mts.map
46
+ //# sourceMappingURL=odspDeltaStorageService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDeltaStorageService.d.ts","sourceRoot":"","sources":["../src/odspDeltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iCAAiC,CAAC;AAExF,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AACjF,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAC1F,OAAO,EACN,kBAAkB,EAClB,4BAA4B,EAC5B,KAAK,OAAO,EACZ,MAAM,oCAAoC,CAAC;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAE7E;;GAEG;AACH,qBAAa,uBAAuB;IAElC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAHN,YAAY,EAAE,MAAM,EACpB,eAAe,EAAE,+BAA+B,EAChD,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,mBAAmB;IAG7C;;;;;;;OAOG;IACU,GAAG,CACf,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,wBAAwB,EACxC,YAAY,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC;IA0EvB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM;CAOjD;AAED,qBAAa,yBAA0B,YAAW,4BAA4B;IAI5E,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAM/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAI1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IAnBtC,OAAO,CAAC,cAAc,CAAQ;gBAGrB,WAAW,EAAE,yBAAyB,EAAE,GAAG,SAAS,EAC3C,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,CAChC,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,wBAAwB,EACxC,WAAW,CAAC,EAAE,MAAM,KAChB,OAAO,CAAC,kBAAkB,CAAC,EACf,SAAS,EAAE,CAC3B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,KACN,OAAO,CAAC,yBAAyB,EAAE,CAAC,EACxB,iBAAiB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,EACrD,WAAW,EAAE,CAAC,GAAG,EAAE,yBAAyB,EAAE,KAAK,IAAI,EACvD,oBAAoB,EAAE,MAAM,0BAA0B,GAAG,SAAS;IAG7E,aAAa,CACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,EAAE,CAAC;CA8FvC"}
@@ -7,7 +7,7 @@ import { validateMessages } from "@fluidframework/driver-base";
7
7
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
8
8
  import { assert } from "@fluidframework/core-utils";
9
9
  import { requestOps, streamObserver } from "@fluidframework/driver-utils";
10
- import { getWithRetryForTokenRefresh } from "./odspUtils.mjs";
10
+ import { getWithRetryForTokenRefresh } from "./odspUtils.js";
11
11
  /**
12
12
  * Provides access to the underlying delta storage on the server for sharepoint driver.
13
13
  */
@@ -69,7 +69,7 @@ export class OdspDeltaStorageService {
69
69
  ? deltaStorageResponse.value.map((operation) => operation.op)
70
70
  : deltaStorageResponse.value;
71
71
  event.end({
72
- headers: Object.keys(headers).length !== 0 ? true : undefined,
72
+ headers: Object.keys(headers).length > 0 ? true : undefined,
73
73
  length: messages.length,
74
74
  ...response.propsToLog,
75
75
  });
@@ -112,7 +112,7 @@ export class OdspDeltaStorageWithCache {
112
112
  let opsFromCache = 0;
113
113
  let opsFromStorage = 0;
114
114
  const requestCallback = async (from, to, telemetryProps) => {
115
- if (this.snapshotOps !== undefined && this.snapshotOps.length !== 0) {
115
+ if (this.snapshotOps !== undefined && this.snapshotOps.length > 0) {
116
116
  const messages = this.snapshotOps.filter((op) => op.sequenceNumber >= from && op.sequenceNumber < to);
117
117
  validateMessages("cached", messages, from, this.logger);
118
118
  if (messages.length > 0 && messages[0].sequenceNumber === from) {
@@ -132,7 +132,7 @@ export class OdspDeltaStorageWithCache {
132
132
  // Set the firstCacheMiss as true in case we didn't get all the ops.
133
133
  // This will save an extra cache read on "DocumentOpen" or "PostDocumentOpen".
134
134
  this.useCacheForOps = from + messagesFromCache.length >= to;
135
- if (messagesFromCache.length !== 0) {
135
+ if (messagesFromCache.length > 0) {
136
136
  opsFromCache += messagesFromCache.length;
137
137
  return {
138
138
  messages: messagesFromCache,
@@ -173,4 +173,4 @@ export class OdspDeltaStorageWithCache {
173
173
  });
174
174
  }
175
175
  }
176
- //# sourceMappingURL=odspDeltaStorageService.mjs.map
176
+ //# sourceMappingURL=odspDeltaStorageService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDeltaStorageService.js","sourceRoot":"","sources":["../src/odspDeltaStorageService.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 { validateMessages } from \"@fluidframework/driver-base\";\nimport { ITelemetryLoggerExt, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { assert } from \"@fluidframework/core-utils\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { InstrumentedStorageTokenFetcher } from \"@fluidframework/odsp-driver-definitions\";\nimport {\n\tIDeltasFetchResult,\n\tIDocumentDeltaStorageService,\n\ttype IStream,\n} from \"@fluidframework/driver-definitions\";\nimport { requestOps, streamObserver } from \"@fluidframework/driver-utils\";\nimport { IDeltaStorageGetResponse, ISequencedDeltaOpMessage } from \"./contracts.js\";\nimport { EpochTracker } from \"./epochTracker.js\";\nimport { getWithRetryForTokenRefresh } from \"./odspUtils.js\";\nimport { OdspDocumentStorageService } from \"./odspDocumentStorageManager.js\";\n\n/**\n * Provides access to the underlying delta storage on the server for sharepoint driver.\n */\nexport class OdspDeltaStorageService {\n\tconstructor(\n\t\tprivate readonly deltaFeedUrl: string,\n\t\tprivate readonly getStorageToken: InstrumentedStorageTokenFetcher,\n\t\tprivate readonly epochTracker: EpochTracker,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t) {}\n\n\t/**\n\t * Retrieves ops from storage\n\t * @param from - inclusive\n\t * @param to - exclusive\n\t * @param telemetryProps - properties to add when issuing telemetry events\n\t * @param scenarioName - reason for fetching ops\n\t * @returns ops retrieved & info if result was partial (i.e. more is available)\n\t */\n\tpublic async get(\n\t\tfrom: number,\n\t\tto: number,\n\t\ttelemetryProps: ITelemetryBaseProperties,\n\t\tscenarioName?: string,\n\t): Promise<IDeltasFetchResult> {\n\t\treturn getWithRetryForTokenRefresh(async (options) => {\n\t\t\t// Note - this call ends up in getSocketStorageDiscovery() and can refresh token\n\t\t\t// Thus it needs to be done before we call getStorageToken() to reduce extra calls\n\t\t\tconst baseUrl = this.buildUrl(from, to);\n\t\t\tconst storageToken = await this.getStorageToken(options, \"DeltaStorage\");\n\n\t\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\t\tthis.logger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"OpsFetch\",\n\t\t\t\t\tattempts: options.refresh ? 2 : 1,\n\t\t\t\t\tfrom,\n\t\t\t\t\tto,\n\t\t\t\t\t...telemetryProps,\n\t\t\t\t\treason: scenarioName,\n\t\t\t\t},\n\t\t\t\tasync (event) => {\n\t\t\t\t\tconst formBoundary = uuid();\n\t\t\t\t\tlet postBody = `--${formBoundary}\\r\\n`;\n\t\t\t\t\tpostBody += `Authorization: Bearer ${storageToken}\\r\\n`;\n\t\t\t\t\tpostBody += `X-HTTP-Method-Override: GET\\r\\n`;\n\n\t\t\t\t\tpostBody += `_post: 1\\r\\n`;\n\t\t\t\t\tpostBody += `\\r\\n--${formBoundary}--`;\n\t\t\t\t\tconst headers: { [index: string]: string } = {\n\t\t\t\t\t\t\"Content-Type\": `multipart/form-data;boundary=${formBoundary}`,\n\t\t\t\t\t};\n\n\t\t\t\t\t// Some request take a long time (1-2 minutes) to complete, where telemetry shows very small amount\n\t\t\t\t\t// of time spent on server, and usually small payload sizes. I.e. all the time is spent somewhere in\n\t\t\t\t\t// networking. Even bigger problem - a lot of requests timeout (based on cursory look - after 1-2 minutes)\n\t\t\t\t\t// So adding some timeout to ensure we retry again in hope of faster success.\n\t\t\t\t\t// Please see https://github.com/microsoft/FluidFramework/issues/6997 for details.\n\t\t\t\t\tconst abort = new AbortController();\n\t\t\t\t\tconst timer = setTimeout(() => abort.abort(), 30000);\n\n\t\t\t\t\tconst response =\n\t\t\t\t\t\tawait this.epochTracker.fetchAndParseAsJSON<IDeltaStorageGetResponse>(\n\t\t\t\t\t\t\tbaseUrl,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\theaders,\n\t\t\t\t\t\t\t\tbody: postBody,\n\t\t\t\t\t\t\t\tmethod: \"POST\",\n\t\t\t\t\t\t\t\tsignal: abort.signal,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\"ops\",\n\t\t\t\t\t\t\ttrue,\n\t\t\t\t\t\t\tscenarioName,\n\t\t\t\t\t\t);\n\t\t\t\t\tclearTimeout(timer);\n\t\t\t\t\tconst deltaStorageResponse = response.content;\n\t\t\t\t\tconst messages =\n\t\t\t\t\t\tdeltaStorageResponse.value.length > 0 &&\n\t\t\t\t\t\t\"op\" in deltaStorageResponse.value[0]\n\t\t\t\t\t\t\t? (deltaStorageResponse.value as ISequencedDeltaOpMessage[]).map(\n\t\t\t\t\t\t\t\t\t(operation) => operation.op,\n\t\t\t\t\t\t\t )\n\t\t\t\t\t\t\t: (deltaStorageResponse.value as ISequencedDocumentMessage[]);\n\n\t\t\t\t\tevent.end({\n\t\t\t\t\t\theaders: Object.keys(headers).length > 0 ? true : undefined,\n\t\t\t\t\t\tlength: messages.length,\n\t\t\t\t\t\t...response.propsToLog,\n\t\t\t\t\t});\n\n\t\t\t\t\t// It is assumed that server always returns all the ops that it has in the range that was requested.\n\t\t\t\t\t// This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n\t\t\t\t\treturn { messages, partialResult: false };\n\t\t\t\t},\n\t\t\t);\n\t\t});\n\t}\n\n\tpublic buildUrl(from: number, to: number): string {\n\t\tconst filter = encodeURIComponent(\n\t\t\t`sequenceNumber ge ${from} and sequenceNumber le ${to - 1}`,\n\t\t);\n\t\tconst queryString = `?ump=1&filter=${filter}`;\n\t\treturn `${this.deltaFeedUrl}${queryString}`;\n\t}\n}\n\nexport class OdspDeltaStorageWithCache implements IDocumentDeltaStorageService {\n\tprivate useCacheForOps = true;\n\n\tpublic constructor(\n\t\tprivate snapshotOps: ISequencedDocumentMessage[] | undefined,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly batchSize: number,\n\t\tprivate readonly concurrency: number,\n\t\tprivate readonly getFromStorage: (\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t\ttelemetryProps: ITelemetryBaseProperties,\n\t\t\tfetchReason?: string,\n\t\t) => Promise<IDeltasFetchResult>,\n\t\tprivate readonly getCached: (\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t) => Promise<ISequencedDocumentMessage[]>,\n\t\tprivate readonly requestFromSocket: (from: number, to: number) => void,\n\t\tprivate readonly opsReceived: (ops: ISequencedDocumentMessage[]) => void,\n\t\tprivate readonly storageManagerGetter: () => OdspDocumentStorageService | undefined,\n\t) {}\n\n\tpublic fetchMessages(\n\t\tfromTotal: number,\n\t\ttoTotal: number | undefined,\n\t\tabortSignal?: AbortSignal,\n\t\tcachedOnly?: boolean,\n\t\tfetchReason?: string,\n\t): IStream<ISequencedDocumentMessage[]> {\n\t\t// We do not control what's in the cache. Current API assumes that fetchMessages() keeps banging on\n\t\t// storage / cache until it gets ops it needs. This would result in deadlock if fixed range is asked from\n\t\t// cache and it's not there.\n\t\t// Better implementation would be to return only what we have in cache, but that also breaks API\n\t\tassert(!cachedOnly || toTotal === undefined, 0x1e3);\n\n\t\t// Don't use cache for ops is snapshot is fetched from network or if it was not fetched at all.\n\t\tthis.useCacheForOps =\n\t\t\tthis.useCacheForOps &&\n\t\t\tthis.storageManagerGetter()?.isFirstSnapshotFromNetwork === false;\n\t\tlet opsFromSnapshot = 0;\n\t\tlet opsFromCache = 0;\n\t\tlet opsFromStorage = 0;\n\n\t\tconst requestCallback = async (\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t\ttelemetryProps: ITelemetryBaseProperties,\n\t\t): Promise<IDeltasFetchResult> => {\n\t\t\tif (this.snapshotOps !== undefined && this.snapshotOps.length > 0) {\n\t\t\t\tconst messages = this.snapshotOps.filter(\n\t\t\t\t\t(op) => op.sequenceNumber >= from && op.sequenceNumber < to,\n\t\t\t\t);\n\t\t\t\tvalidateMessages(\"cached\", messages, from, this.logger);\n\t\t\t\tif (messages.length > 0 && messages[0].sequenceNumber === from) {\n\t\t\t\t\tthis.snapshotOps = this.snapshotOps.filter((op) => op.sequenceNumber >= to);\n\t\t\t\t\topsFromSnapshot += messages.length;\n\t\t\t\t\treturn { messages, partialResult: true };\n\t\t\t\t}\n\t\t\t\tthis.snapshotOps = undefined;\n\t\t\t}\n\n\t\t\t// Kick out request to PUSH for ops if it has them\n\t\t\tthis.requestFromSocket(from, to);\n\n\t\t\t// Cache in normal flow is continuous. Once there is a miss, stop consulting cache.\n\t\t\t// This saves a bit of processing time.\n\t\t\tif (this.useCacheForOps) {\n\t\t\t\tconst messagesFromCache = await this.getCached(from, to);\n\t\t\t\tvalidateMessages(\"cached\", messagesFromCache, from, this.logger);\n\t\t\t\t// Set the firstCacheMiss as true in case we didn't get all the ops.\n\t\t\t\t// This will save an extra cache read on \"DocumentOpen\" or \"PostDocumentOpen\".\n\t\t\t\tthis.useCacheForOps = from + messagesFromCache.length >= to;\n\t\t\t\tif (messagesFromCache.length > 0) {\n\t\t\t\t\topsFromCache += messagesFromCache.length;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tmessages: messagesFromCache,\n\t\t\t\t\t\tpartialResult: true,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (cachedOnly) {\n\t\t\t\treturn { messages: [], partialResult: false };\n\t\t\t}\n\n\t\t\tconst ops = await this.getFromStorage(from, to, telemetryProps, fetchReason);\n\t\t\tvalidateMessages(\"storage\", ops.messages, from, this.logger);\n\t\t\topsFromStorage += ops.messages.length;\n\t\t\tthis.opsReceived(ops.messages);\n\t\t\treturn ops;\n\t\t};\n\n\t\tconst stream = requestOps(\n\t\t\tasync (from: number, to: number, telemetryProps: ITelemetryBaseProperties) => {\n\t\t\t\tconst result = await requestCallback(from, to, telemetryProps);\n\t\t\t\t// Catch all case, just in case\n\t\t\t\tvalidateMessages(\"catch all\", result.messages, from, this.logger);\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t// Staging: starting with no concurrency, listening for feedback first.\n\t\t\t// In future releases we will switch to actual concurrency\n\t\t\tthis.concurrency,\n\t\t\tfromTotal, // inclusive\n\t\t\ttoTotal, // exclusive\n\t\t\tthis.batchSize,\n\t\t\tthis.logger,\n\t\t\tabortSignal,\n\t\t\tfetchReason,\n\t\t);\n\n\t\treturn streamObserver(stream, (result) => {\n\t\t\tif (result.done && opsFromSnapshot + opsFromCache + opsFromStorage !== 0) {\n\t\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"CacheOpsRetrieved\",\n\t\t\t\t\topsFromSnapshot,\n\t\t\t\t\topsFromCache,\n\t\t\t\t\topsFromStorage,\n\t\t\t\t\treason: fetchReason,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n"]}
@@ -7,7 +7,7 @@ import { DocumentDeltaConnection } from "@fluidframework/driver-base";
7
7
  import { IAnyDriverError } from "@fluidframework/driver-definitions";
8
8
  import { OdspError } from "@fluidframework/odsp-driver-definitions";
9
9
  import { IClient, IConnect, IDocumentMessage } from "@fluidframework/protocol-definitions";
10
- import { EpochTracker } from "./epochTracker.mjs";
10
+ import { EpochTracker } from "./epochTracker.js";
11
11
  export interface FlushResult {
12
12
  lastPersistedSequenceNumber?: number;
13
13
  retryAfter?: number;
@@ -97,4 +97,4 @@ export declare class OdspDocumentDeltaConnection extends DocumentDeltaConnection
97
97
  */
98
98
  protected disconnectCore(): void;
99
99
  }
100
- //# sourceMappingURL=odspDocumentDeltaConnection.d.mts.map
100
+ //# sourceMappingURL=odspDocumentDeltaConnection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDocumentDeltaConnection.d.ts","sourceRoot":"","sources":["../src/odspDocumentDeltaConnection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACN,mBAAmB,EACnB,eAAe,EAEf,MAAM,iCAAiC,CAAC;AAGzC,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EACN,OAAO,EACP,QAAQ,EACR,gBAAgB,EAKhB,MAAM,sCAAsC,CAAC;AAK9C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAUjD,MAAM,WAAW,WAAW;IAC3B,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AA8LD;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,uBAAuB;IAqLtE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IApLrC;;;;;;;;;;;;;;OAcG;WACiB,MAAM,CACzB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAElB,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,mBAAmB,EACpC,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,wBAAwB,EAAE,MAAM,GAAG,SAAS,GAC1C,OAAO,CAAC,2BAA2B,CAAC;IAuFvC,OAAO,CAAC,eAAe,CAA8B;IAErD,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAS;IAC/C,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS,CACf;IACX,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,+BAA+B,CAA4C;IAEnF;;OAEG;IAEH,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,UAAO,GAAG,eAAe;IAU3F;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,4BAA4B;IA4B3C;;;;;;OAMG;IACH,OAAO;IAaP;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAwDpC,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC;IAmC1C,SAAS,CAAC,iBAAiB,UAAW,eAAe,GAAG,SAAS,aAAa,MAAM,KAAG,IAAI,CAczF;cAEc,UAAU,CAAC,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA0GpF,SAAS,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,IAAI;IAqErF,IAAW,QAAQ,IAAI,OAAO,CAmB7B;IAED;;;;OAIG;IACH,OAAO,KAAK,SAAS,GAEpB;IAED,SAAS,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,GAAG,IAAI;IAO1E;;;OAGG;IACI,MAAM,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,IAAI;IAIjD;;;;;OAKG;IACI,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI;IAW7E;;;OAGG;IACH,SAAS,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAUvD;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;CAahC"}
@@ -8,9 +8,9 @@ import { assert, Deferred } from "@fluidframework/core-utils";
8
8
  import { DocumentDeltaConnection } from "@fluidframework/driver-base";
9
9
  import { v4 as uuid } from "uuid";
10
10
  import { createGenericNetworkError } from "@fluidframework/driver-utils";
11
- import { errorObjectFromSocketError } from "./odspError.mjs";
12
- import { SocketIOClientStatic } from "./socketModule.mjs";
13
- import { pkgVersion } from "./packageVersion.mjs";
11
+ import { errorObjectFromSocketError } from "./odspError.js";
12
+ import { SocketIOClientStatic } from "./socketModule.js";
13
+ import { pkgVersion } from "./packageVersion.js";
14
14
  const protocolVersions = ["^0.4.0", "^0.3.0", "^0.2.0", "^0.1.0"];
15
15
  const feature_get_ops = "api_get_ops";
16
16
  const feature_flush_ops = "api_flush_ops";
@@ -199,9 +199,10 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
199
199
  try {
200
200
  await deltaConnection.initialize(connectMessage, timeoutMs);
201
201
  await epochTracker.validateEpoch(deltaConnection.details.epoch, "push");
202
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
203
  }
203
- catch (errorObject) {
204
- if (errorObject !== null && typeof errorObject === "object") {
204
+ catch (error) {
205
+ if (error !== null && typeof error === "object") {
205
206
  // We have to special-case error types here in terms of what is re-triable.
206
207
  // These errors have to re-retried, we just need new joinSession result to connect to right server:
207
208
  // 400: Invalid tenant or document id. The WebSocket is connected to a different document
@@ -215,21 +216,25 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
215
216
  // 401/403: Code will retry once with new token either way, then it becomes fatal - on this path
216
217
  // and on join Session path.
217
218
  // 501: (Fluid not enabled): this is fine either way, as joinSession is gatekeeper
218
- if (errorObject.statusCode === 400 || errorObject.statusCode === 404) {
219
- errorObject.canRetry = true;
219
+ // eslint-disable-next-line unicorn/no-lonely-if, @typescript-eslint/no-unsafe-member-access
220
+ if (error.statusCode === 400 || error.statusCode === 404) {
221
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
222
+ error.canRetry = true;
220
223
  }
221
224
  }
222
- throw errorObject;
225
+ throw error;
223
226
  }
224
227
  return deltaConnection;
225
228
  }
226
229
  /**
227
230
  * Error raising for socket.io issues
228
231
  */
232
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
229
233
  createErrorObject(handler, error, canRetry = true) {
230
234
  // Note: we suspect the incoming error object is either:
231
235
  // - a socketError: add it to the OdspError object for driver to be able to parse it and reason over it.
232
236
  // - anything else: let base class handle it
237
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
233
238
  return canRetry && Number.isInteger(error?.code) && typeof error?.message === "string"
234
239
  ? errorObjectFromSocketError(error, handler)
235
240
  : super.createErrorObject(handler, error, canRetry);
@@ -238,6 +243,7 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
238
243
  * Gets or create a socket io connection for the given key
239
244
  */
240
245
  static getOrCreateSocketIoReference(timeoutMs, key, url, enableMultiplexing, tenantId, documentId, logger) {
246
+ // eslint-disable-next-line unicorn/no-array-callback-reference, unicorn/no-array-method-this-argument
241
247
  const existingSocketReference = SocketReference.find(key, logger);
242
248
  if (existingSocketReference) {
243
249
  return existingSocketReference;
@@ -291,6 +297,7 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
291
297
  assert(to > from, 0x272 /* "empty request" */);
292
298
  // PUSH may disable this functionality
293
299
  // back-compat: remove cast to any once latest version of IConnected is consumed
300
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
294
301
  if (this.details.supportedFeatures?.[feature_get_ops] !== true) {
295
302
  return;
296
303
  }
@@ -338,6 +345,7 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
338
345
  async flush() {
339
346
  assert(!this.socketReference?.disconnected, 0x414 /* non-active socket */);
340
347
  // back-compat: remove cast to any once latest version of IConnected is consumed
348
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
341
349
  if (this.details.supportedFeatures?.[feature_flush_ops] !== true) {
342
350
  // Once single-commit summary is enabled end-to-end, flush support is a must!
343
351
  // The only alternative is change in design where SPO fetches ops from PUSH OR
@@ -424,14 +432,17 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
424
432
  if (result.lastPersistedSequenceNumber === undefined || result.code !== 200) {
425
433
  switch (result.code) {
426
434
  case 409:
427
- case 429:
435
+ case 429: {
428
436
  category = "error";
429
437
  break;
430
- case 204:
438
+ }
439
+ case 204: {
431
440
  break;
432
- default:
441
+ }
442
+ default: {
433
443
  category = "error";
434
444
  break;
445
+ }
435
446
  }
436
447
  }
437
448
  this.logger.sendTelemetryEvent({
@@ -452,10 +463,11 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
452
463
  });
453
464
  });
454
465
  }
466
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
467
  addTrackedListener(event, listener) {
456
468
  // override some event listeners in order to support multiple documents/clients over the same websocket
457
469
  switch (event) {
458
- case "op":
470
+ case "op": {
459
471
  // per document op handling
460
472
  super.addTrackedListener(event, (documentId, msgs) => {
461
473
  if (!this.enableMultiplexing || this.documentId === documentId) {
@@ -463,7 +475,8 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
463
475
  }
464
476
  });
465
477
  break;
466
- case "signal":
478
+ }
479
+ case "signal": {
467
480
  // per document signal handling
468
481
  super.addTrackedListener(event, (msg, documentId) => {
469
482
  if (!this.enableMultiplexing ||
@@ -473,7 +486,8 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
473
486
  }
474
487
  });
475
488
  break;
476
- case "nack":
489
+ }
490
+ case "nack": {
477
491
  // per client / document nack handling
478
492
  super.addTrackedListener(event, (clientIdOrDocumentId, nacks) => {
479
493
  const handle = clientIdOrDocumentId.length === 0 ||
@@ -498,14 +512,17 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
498
512
  }
499
513
  });
500
514
  break;
501
- default:
515
+ }
516
+ default: {
502
517
  super.addTrackedListener(event, listener);
503
518
  break;
519
+ }
504
520
  }
505
521
  }
506
522
  get disposed() {
507
523
  if (!(this._disposed || this.socket.connected)) {
508
524
  // Send error event if this connection is not yet disposed after socket is disconnected for 15s.
525
+ // eslint-disable-next-line unicorn/no-lonely-if
509
526
  if (this.connectionNotYetDisposedTimeout === undefined) {
510
527
  this.connectionNotYetDisposedTimeout = setTimeout(() => {
511
528
  if (!this._disposed) {
@@ -555,6 +572,7 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
555
572
  targetClientId,
556
573
  };
557
574
  // back-compat: the typing for this method and emitMessages is incorrect, will be fixed in a future PR
575
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
558
576
  this.emitMessages("submitSignal", [signal]);
559
577
  }
560
578
  /**
@@ -582,4 +600,4 @@ export class OdspDocumentDeltaConnection extends DocumentDeltaConnection {
582
600
  socket.removeSocketIoReference();
583
601
  }
584
602
  }
585
- //# sourceMappingURL=odspDocumentDeltaConnection.mjs.map
603
+ //# sourceMappingURL=odspDocumentDeltaConnection.js.map