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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (617) 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.d.ts.map +1 -1
  43. package/dist/createOdspCreateContainerRequest.js +6 -2
  44. package/dist/createOdspCreateContainerRequest.js.map +1 -1
  45. package/dist/createOdspUrl.d.ts +1 -1
  46. package/dist/createOdspUrl.d.ts.map +1 -1
  47. package/dist/createOdspUrl.js.map +1 -1
  48. package/dist/epochTracker.d.ts +10 -9
  49. package/dist/epochTracker.d.ts.map +1 -1
  50. package/dist/epochTracker.js +66 -43
  51. package/dist/epochTracker.js.map +1 -1
  52. package/dist/fetchSnapshot.d.ts +11 -8
  53. package/dist/fetchSnapshot.d.ts.map +1 -1
  54. package/dist/fetchSnapshot.js +79 -58
  55. package/dist/fetchSnapshot.js.map +1 -1
  56. package/dist/getFileLink.d.ts.map +1 -1
  57. package/dist/getFileLink.js +24 -17
  58. package/dist/getFileLink.js.map +1 -1
  59. package/dist/getQueryString.d.ts.map +1 -1
  60. package/dist/getQueryString.js +6 -0
  61. package/dist/getQueryString.js.map +1 -1
  62. package/dist/index.d.ts +19 -19
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +44 -44
  65. package/dist/index.js.map +1 -1
  66. package/dist/localOdspDriver/localOdspDocumentService.d.ts +1 -1
  67. package/dist/localOdspDriver/localOdspDocumentService.d.ts.map +1 -1
  68. package/dist/localOdspDriver/localOdspDocumentService.js +5 -5
  69. package/dist/localOdspDriver/localOdspDocumentService.js.map +1 -1
  70. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts +8 -6
  71. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  72. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +10 -9
  73. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  74. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts +1 -1
  75. package/dist/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -1
  76. package/dist/localOdspDriver/localOdspDocumentStorageManager.js +6 -6
  77. package/dist/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -1
  78. package/dist/odsp-driver-alpha.d.ts +27 -12
  79. package/dist/odsp-driver-beta.d.ts +1 -2
  80. package/dist/odsp-driver-public.d.ts +1 -2
  81. package/dist/odsp-driver-untrimmed.d.ts +29 -12
  82. package/dist/odspCache.d.ts +3 -3
  83. package/dist/odspCache.d.ts.map +1 -1
  84. package/dist/odspCache.js +3 -4
  85. package/dist/odspCache.js.map +1 -1
  86. package/dist/odspDelayLoadedDeltaStream.d.ts +7 -5
  87. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -1
  88. package/dist/odspDelayLoadedDeltaStream.js +41 -28
  89. package/dist/odspDelayLoadedDeltaStream.js.map +1 -1
  90. package/dist/odspDeltaStorageService.d.ts +7 -7
  91. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  92. package/dist/odspDeltaStorageService.js +5 -5
  93. package/dist/odspDeltaStorageService.js.map +1 -1
  94. package/dist/odspDocumentDeltaConnection.d.ts +1 -1
  95. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  96. package/dist/odspDocumentDeltaConnection.js +41 -23
  97. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  98. package/dist/odspDocumentService.d.ts +6 -4
  99. package/dist/odspDocumentService.d.ts.map +1 -1
  100. package/dist/odspDocumentService.js +19 -16
  101. package/dist/odspDocumentService.js.map +1 -1
  102. package/dist/odspDocumentServiceFactory.d.ts +6 -1
  103. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  104. package/dist/odspDocumentServiceFactory.js +9 -4
  105. package/dist/odspDocumentServiceFactory.js.map +1 -1
  106. package/dist/odspDocumentServiceFactoryCore.d.ts +4 -4
  107. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  108. package/dist/odspDocumentServiceFactoryCore.js +26 -22
  109. package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
  110. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +1 -1
  111. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  112. package/dist/odspDocumentServiceFactoryWithCodeSplit.js +2 -2
  113. package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  114. package/dist/odspDocumentStorageManager.d.ts +15 -9
  115. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  116. package/dist/odspDocumentStorageManager.js +219 -181
  117. package/dist/odspDocumentStorageManager.js.map +1 -1
  118. package/dist/odspDocumentStorageServiceBase.d.ts +2 -4
  119. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  120. package/dist/odspDocumentStorageServiceBase.js +32 -29
  121. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  122. package/dist/odspDriverUrlResolver.d.ts +5 -1
  123. package/dist/odspDriverUrlResolver.d.ts.map +1 -1
  124. package/dist/odspDriverUrlResolver.js +27 -24
  125. package/dist/odspDriverUrlResolver.js.map +1 -1
  126. package/dist/odspDriverUrlResolverForShareLink.d.ts +17 -6
  127. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  128. package/dist/odspDriverUrlResolverForShareLink.js +49 -39
  129. package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
  130. package/dist/odspError.d.ts +1 -1
  131. package/dist/odspError.d.ts.map +1 -1
  132. package/dist/odspError.js +5 -5
  133. package/dist/odspError.js.map +1 -1
  134. package/dist/odspFluidFileLink.d.ts +1 -1
  135. package/dist/odspFluidFileLink.d.ts.map +1 -1
  136. package/dist/odspFluidFileLink.js +2 -2
  137. package/dist/odspFluidFileLink.js.map +1 -1
  138. package/dist/odspLocationRedirection.js +2 -2
  139. package/dist/odspLocationRedirection.js.map +1 -1
  140. package/dist/odspPublicUtils.d.ts +3 -0
  141. package/dist/odspPublicUtils.d.ts.map +1 -1
  142. package/dist/odspPublicUtils.js +3 -0
  143. package/dist/odspPublicUtils.js.map +1 -1
  144. package/dist/odspSnapshotParser.d.ts +1 -1
  145. package/dist/odspSnapshotParser.d.ts.map +1 -1
  146. package/dist/odspSnapshotParser.js +3 -2
  147. package/dist/odspSnapshotParser.js.map +1 -1
  148. package/dist/odspSummaryUploadManager.d.ts +1 -1
  149. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  150. package/dist/odspSummaryUploadManager.js +9 -6
  151. package/dist/odspSummaryUploadManager.js.map +1 -1
  152. package/dist/odspUrlHelper.d.ts.map +1 -1
  153. package/dist/odspUrlHelper.js +1 -2
  154. package/dist/odspUrlHelper.js.map +1 -1
  155. package/dist/odspUtils.d.ts +19 -7
  156. package/dist/odspUtils.d.ts.map +1 -1
  157. package/dist/odspUtils.js +61 -31
  158. package/dist/odspUtils.js.map +1 -1
  159. package/dist/opsCaching.d.ts +1 -1
  160. package/dist/opsCaching.d.ts.map +1 -1
  161. package/dist/opsCaching.js +2 -1
  162. package/dist/opsCaching.js.map +1 -1
  163. package/dist/package.json +3 -0
  164. package/dist/packageVersion.d.ts +1 -1
  165. package/dist/packageVersion.js +1 -1
  166. package/dist/packageVersion.js.map +1 -1
  167. package/dist/prefetchLatestSnapshot.d.ts +2 -2
  168. package/dist/prefetchLatestSnapshot.d.ts.map +1 -1
  169. package/dist/prefetchLatestSnapshot.js +17 -12
  170. package/dist/prefetchLatestSnapshot.js.map +1 -1
  171. package/dist/retryErrorsStorageAdapter.d.ts +0 -1
  172. package/dist/retryErrorsStorageAdapter.d.ts.map +1 -1
  173. package/dist/retryErrorsStorageAdapter.js +2 -5
  174. package/dist/retryErrorsStorageAdapter.js.map +1 -1
  175. package/dist/retryUtils.d.ts.map +1 -1
  176. package/dist/retryUtils.js +6 -2
  177. package/dist/retryUtils.js.map +1 -1
  178. package/dist/socketModule.d.ts.map +1 -1
  179. package/dist/socketModule.js +2 -0
  180. package/dist/socketModule.js.map +1 -1
  181. package/dist/tsdoc-metadata.json +1 -1
  182. package/dist/vroom.d.ts +2 -2
  183. package/dist/vroom.d.ts.map +1 -1
  184. package/dist/vroom.js +5 -5
  185. package/dist/vroom.js.map +1 -1
  186. package/dist/zipItDataRepresentationUtils.d.ts +1 -1
  187. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  188. package/dist/zipItDataRepresentationUtils.js +15 -11
  189. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  190. package/lib/{ReadBufferUtils.d.mts → ReadBufferUtils.d.ts} +1 -1
  191. package/lib/ReadBufferUtils.d.ts.map +1 -0
  192. package/lib/{ReadBufferUtils.mjs → ReadBufferUtils.js} +1 -1
  193. package/lib/ReadBufferUtils.js.map +1 -0
  194. package/lib/{WriteBufferUtils.d.mts → WriteBufferUtils.d.ts} +2 -2
  195. package/lib/WriteBufferUtils.d.ts.map +1 -0
  196. package/lib/{WriteBufferUtils.mjs → WriteBufferUtils.js} +2 -2
  197. package/lib/WriteBufferUtils.js.map +1 -0
  198. package/lib/{checkUrl.d.mts → checkUrl.d.ts} +1 -1
  199. package/lib/checkUrl.d.ts.map +1 -0
  200. package/lib/{checkUrl.mjs → checkUrl.js} +5 -3
  201. package/lib/checkUrl.js.map +1 -0
  202. package/lib/{compactSnapshotParser.d.mts → compactSnapshotParser.d.ts} +1 -1
  203. package/lib/compactSnapshotParser.d.ts.map +1 -0
  204. package/lib/{compactSnapshotParser.mjs → compactSnapshotParser.js} +61 -43
  205. package/lib/compactSnapshotParser.js.map +1 -0
  206. package/lib/{compactSnapshotWriter.d.mts → compactSnapshotWriter.d.ts} +1 -1
  207. package/lib/compactSnapshotWriter.d.ts.map +1 -0
  208. package/lib/{compactSnapshotWriter.mjs → compactSnapshotWriter.js} +13 -7
  209. package/lib/compactSnapshotWriter.js.map +1 -0
  210. package/lib/{constants.d.mts → constants.d.ts} +1 -1
  211. package/lib/constants.d.ts.map +1 -0
  212. package/lib/{constants.mjs → constants.js} +1 -1
  213. package/lib/constants.js.map +1 -0
  214. package/lib/{contracts.d.mts → contracts.d.ts} +11 -5
  215. package/lib/contracts.d.ts.map +1 -0
  216. package/lib/{contracts.mjs → contracts.js} +1 -1
  217. package/lib/contracts.js.map +1 -0
  218. package/lib/{contractsPublic.d.mts → contractsPublic.d.ts} +1 -1
  219. package/lib/contractsPublic.d.ts.map +1 -0
  220. package/lib/{contractsPublic.mjs → contractsPublic.js} +1 -1
  221. package/lib/contractsPublic.js.map +1 -0
  222. package/lib/{createFile.d.mts → createFile.d.ts} +4 -4
  223. package/lib/createFile.d.ts.map +1 -0
  224. package/lib/{createFile.mjs → createFile.js} +15 -12
  225. package/lib/createFile.js.map +1 -0
  226. package/lib/{createNewContainerOnExistingFile.d.mts → createNewContainerOnExistingFile.d.ts} +3 -3
  227. package/lib/createNewContainerOnExistingFile.d.ts.map +1 -0
  228. package/lib/{createNewContainerOnExistingFile.mjs → createNewContainerOnExistingFile.js} +7 -7
  229. package/lib/createNewContainerOnExistingFile.js.map +1 -0
  230. package/lib/{createNewModule.mjs → createNewModule.d.ts} +3 -3
  231. package/lib/createNewModule.d.ts.map +1 -0
  232. package/lib/{createNewModule.d.mts → createNewModule.js} +3 -3
  233. package/lib/createNewModule.js.map +1 -0
  234. package/lib/{createNewUtils.d.mts → createNewUtils.d.ts} +3 -3
  235. package/lib/createNewUtils.d.ts.map +1 -0
  236. package/lib/{createNewUtils.mjs → createNewUtils.js} +9 -5
  237. package/lib/createNewUtils.js.map +1 -0
  238. package/lib/{createOdspCreateContainerRequest.d.mts → createOdspCreateContainerRequest.d.ts} +5 -1
  239. package/lib/createOdspCreateContainerRequest.d.ts.map +1 -0
  240. package/lib/{createOdspCreateContainerRequest.mjs → createOdspCreateContainerRequest.js} +6 -2
  241. package/lib/createOdspCreateContainerRequest.js.map +1 -0
  242. package/lib/{createOdspUrl.d.mts → createOdspUrl.d.ts} +2 -2
  243. package/lib/createOdspUrl.d.ts.map +1 -0
  244. package/lib/{createOdspUrl.mjs → createOdspUrl.js} +1 -1
  245. package/lib/createOdspUrl.js.map +1 -0
  246. package/lib/{epochTracker.d.mts → epochTracker.d.ts} +11 -10
  247. package/lib/epochTracker.d.ts.map +1 -0
  248. package/lib/{epochTracker.mjs → epochTracker.js} +56 -33
  249. package/lib/epochTracker.js.map +1 -0
  250. package/lib/{fetch.d.mts → fetch.d.ts} +1 -1
  251. package/lib/fetch.d.ts.map +1 -0
  252. package/lib/{fetch.mjs → fetch.js} +1 -1
  253. package/lib/fetch.js.map +1 -0
  254. package/lib/{fetchSnapshot.d.mts → fetchSnapshot.d.ts} +12 -9
  255. package/lib/fetchSnapshot.d.ts.map +1 -0
  256. package/lib/{fetchSnapshot.mjs → fetchSnapshot.js} +61 -40
  257. package/lib/fetchSnapshot.js.map +1 -0
  258. package/lib/{getFileLink.d.mts → getFileLink.d.ts} +1 -1
  259. package/lib/getFileLink.d.ts.map +1 -0
  260. package/lib/{getFileLink.mjs → getFileLink.js} +14 -7
  261. package/lib/getFileLink.js.map +1 -0
  262. package/lib/{getQueryString.d.mts → getQueryString.d.ts} +5 -1
  263. package/lib/getQueryString.d.ts.map +1 -0
  264. package/lib/{getQueryString.mjs → getQueryString.js} +7 -1
  265. package/lib/getQueryString.js.map +1 -0
  266. package/lib/{getUrlAndHeadersWithAuth.d.mts → getUrlAndHeadersWithAuth.d.ts} +1 -1
  267. package/lib/getUrlAndHeadersWithAuth.d.ts.map +1 -0
  268. package/lib/{getUrlAndHeadersWithAuth.mjs → getUrlAndHeadersWithAuth.js} +1 -1
  269. package/lib/getUrlAndHeadersWithAuth.js.map +1 -0
  270. package/lib/{index.d.mts → index.d.ts} +20 -20
  271. package/lib/index.d.ts.map +1 -0
  272. package/lib/index.js +29 -0
  273. package/lib/index.js.map +1 -0
  274. package/lib/localOdspDriver/{localOdspDeltaStorageService.d.mts → localOdspDeltaStorageService.d.ts} +1 -1
  275. package/lib/localOdspDriver/localOdspDeltaStorageService.d.ts.map +1 -0
  276. package/lib/localOdspDriver/{localOdspDeltaStorageService.mjs → localOdspDeltaStorageService.js} +1 -1
  277. package/lib/localOdspDriver/localOdspDeltaStorageService.js.map +1 -0
  278. package/lib/localOdspDriver/{localOdspDocumentService.d.mts → localOdspDocumentService.d.ts} +2 -2
  279. package/lib/localOdspDriver/localOdspDocumentService.d.ts.map +1 -0
  280. package/lib/localOdspDriver/{localOdspDocumentService.mjs → localOdspDocumentService.js} +4 -4
  281. package/lib/localOdspDriver/localOdspDocumentService.js.map +1 -0
  282. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.d.mts → localOdspDocumentServiceFactory.d.ts} +9 -7
  283. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -0
  284. package/lib/localOdspDriver/{localOdspDocumentServiceFactory.mjs → localOdspDocumentServiceFactory.js} +9 -8
  285. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -0
  286. package/lib/localOdspDriver/{localOdspDocumentStorageManager.d.mts → localOdspDocumentStorageManager.d.ts} +2 -2
  287. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.ts.map +1 -0
  288. package/lib/localOdspDriver/{localOdspDocumentStorageManager.mjs → localOdspDocumentStorageManager.js} +4 -4
  289. package/lib/localOdspDriver/localOdspDocumentStorageManager.js.map +1 -0
  290. package/lib/{odsp-driver-alpha.d.mts → odsp-driver-alpha.d.ts} +27 -12
  291. package/lib/{odsp-driver-public.d.mts → odsp-driver-beta.d.ts} +1 -2
  292. package/lib/{odsp-driver-beta.d.mts → odsp-driver-public.d.ts} +1 -2
  293. package/lib/{odsp-driver-untrimmed.d.mts → odsp-driver-untrimmed.d.ts} +29 -12
  294. package/lib/{odspCache.d.mts → odspCache.d.ts} +8 -4
  295. package/lib/odspCache.d.ts.map +1 -0
  296. package/lib/{odspCache.mjs → odspCache.js} +6 -3
  297. package/lib/odspCache.js.map +1 -0
  298. package/lib/{odspDelayLoadedDeltaStream.d.mts → odspDelayLoadedDeltaStream.d.ts} +8 -6
  299. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -0
  300. package/lib/{odspDelayLoadedDeltaStream.mjs → odspDelayLoadedDeltaStream.js} +33 -20
  301. package/lib/odspDelayLoadedDeltaStream.js.map +1 -0
  302. package/lib/{odspDeltaStorageService.d.mts → odspDeltaStorageService.d.ts} +8 -8
  303. package/lib/odspDeltaStorageService.d.ts.map +1 -0
  304. package/lib/{odspDeltaStorageService.mjs → odspDeltaStorageService.js} +5 -5
  305. package/lib/odspDeltaStorageService.js.map +1 -0
  306. package/lib/{odspDocumentDeltaConnection.d.mts → odspDocumentDeltaConnection.d.ts} +2 -2
  307. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -0
  308. package/lib/{odspDocumentDeltaConnection.mjs → odspDocumentDeltaConnection.js} +34 -16
  309. package/lib/odspDocumentDeltaConnection.js.map +1 -0
  310. package/lib/{odspDocumentService.d.mts → odspDocumentService.d.ts} +7 -5
  311. package/lib/odspDocumentService.d.ts.map +1 -0
  312. package/lib/{odspDocumentService.mjs → odspDocumentService.js} +16 -11
  313. package/lib/odspDocumentService.js.map +1 -0
  314. package/lib/{odspDocumentServiceFactory.d.mts → odspDocumentServiceFactory.d.ts} +7 -2
  315. package/lib/odspDocumentServiceFactory.d.ts.map +1 -0
  316. package/lib/{odspDocumentServiceFactory.mjs → odspDocumentServiceFactory.js} +9 -3
  317. package/lib/odspDocumentServiceFactory.js.map +1 -0
  318. package/lib/{odspDocumentServiceFactoryCore.d.mts → odspDocumentServiceFactoryCore.d.ts} +5 -5
  319. package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -0
  320. package/lib/{odspDocumentServiceFactoryCore.mjs → odspDocumentServiceFactoryCore.js} +23 -17
  321. package/lib/odspDocumentServiceFactoryCore.js.map +1 -0
  322. package/lib/{odspDocumentServiceFactoryWithCodeSplit.d.mts → odspDocumentServiceFactoryWithCodeSplit.d.ts} +2 -2
  323. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -0
  324. package/lib/{odspDocumentServiceFactoryWithCodeSplit.mjs → odspDocumentServiceFactoryWithCodeSplit.js} +2 -2
  325. package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -0
  326. package/lib/{odspDocumentStorageManager.d.mts → odspDocumentStorageManager.d.ts} +16 -10
  327. package/lib/odspDocumentStorageManager.d.ts.map +1 -0
  328. package/lib/{odspDocumentStorageManager.mjs → odspDocumentStorageManager.js} +207 -167
  329. package/lib/odspDocumentStorageManager.js.map +1 -0
  330. package/lib/{odspDocumentStorageServiceBase.d.mts → odspDocumentStorageServiceBase.d.ts} +3 -5
  331. package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -0
  332. package/lib/{odspDocumentStorageServiceBase.mjs → odspDocumentStorageServiceBase.js} +32 -29
  333. package/lib/odspDocumentStorageServiceBase.js.map +1 -0
  334. package/lib/{odspDriverUrlResolver.d.mts → odspDriverUrlResolver.d.ts} +6 -2
  335. package/lib/odspDriverUrlResolver.d.ts.map +1 -0
  336. package/lib/{odspDriverUrlResolver.mjs → odspDriverUrlResolver.js} +24 -17
  337. package/lib/odspDriverUrlResolver.js.map +1 -0
  338. package/lib/{odspDriverUrlResolverForShareLink.d.mts → odspDriverUrlResolverForShareLink.d.ts} +18 -7
  339. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -0
  340. package/lib/{odspDriverUrlResolverForShareLink.mjs → odspDriverUrlResolverForShareLink.js} +41 -27
  341. package/lib/odspDriverUrlResolverForShareLink.js.map +1 -0
  342. package/lib/{odspError.d.mts → odspError.d.ts} +2 -2
  343. package/lib/odspError.d.ts.map +1 -0
  344. package/lib/{odspError.mjs → odspError.js} +4 -4
  345. package/lib/odspError.js.map +1 -0
  346. package/lib/{odspFluidFileLink.d.mts → odspFluidFileLink.d.ts} +2 -2
  347. package/lib/odspFluidFileLink.d.ts.map +1 -0
  348. package/lib/{odspFluidFileLink.mjs → odspFluidFileLink.js} +2 -2
  349. package/lib/odspFluidFileLink.js.map +1 -0
  350. package/lib/{odspLocationRedirection.d.mts → odspLocationRedirection.d.ts} +1 -1
  351. package/lib/odspLocationRedirection.d.ts.map +1 -0
  352. package/lib/{odspLocationRedirection.mjs → odspLocationRedirection.js} +2 -2
  353. package/lib/odspLocationRedirection.js.map +1 -0
  354. package/lib/{odspPublicUtils.d.mts → odspPublicUtils.d.ts} +4 -1
  355. package/lib/odspPublicUtils.d.ts.map +1 -0
  356. package/lib/{odspPublicUtils.mjs → odspPublicUtils.js} +4 -1
  357. package/lib/odspPublicUtils.js.map +1 -0
  358. package/lib/{odspSnapshotParser.d.mts → odspSnapshotParser.d.ts} +2 -2
  359. package/lib/odspSnapshotParser.d.ts.map +1 -0
  360. package/lib/{odspSnapshotParser.mjs → odspSnapshotParser.js} +4 -3
  361. package/lib/odspSnapshotParser.js.map +1 -0
  362. package/lib/{odspSummaryUploadManager.d.mts → odspSummaryUploadManager.d.ts} +2 -2
  363. package/lib/odspSummaryUploadManager.d.ts.map +1 -0
  364. package/lib/{odspSummaryUploadManager.mjs → odspSummaryUploadManager.js} +8 -5
  365. package/lib/odspSummaryUploadManager.js.map +1 -0
  366. package/lib/{odspUrlHelper.d.mts → odspUrlHelper.d.ts} +1 -1
  367. package/lib/odspUrlHelper.d.ts.map +1 -0
  368. package/lib/{odspUrlHelper.mjs → odspUrlHelper.js} +2 -3
  369. package/lib/odspUrlHelper.js.map +1 -0
  370. package/lib/{odspUtils.d.mts → odspUtils.d.ts} +20 -8
  371. package/lib/odspUtils.d.ts.map +1 -0
  372. package/lib/{odspUtils.mjs → odspUtils.js} +45 -17
  373. package/lib/odspUtils.js.map +1 -0
  374. package/lib/{opsCaching.d.mts → opsCaching.d.ts} +2 -2
  375. package/lib/opsCaching.d.ts.map +1 -0
  376. package/lib/{opsCaching.mjs → opsCaching.js} +3 -2
  377. package/lib/opsCaching.js.map +1 -0
  378. package/lib/{packageVersion.d.mts → packageVersion.d.ts} +2 -2
  379. package/lib/packageVersion.d.ts.map +1 -0
  380. package/lib/{packageVersion.mjs → packageVersion.js} +2 -2
  381. package/lib/packageVersion.js.map +1 -0
  382. package/lib/{prefetchLatestSnapshot.d.mts → prefetchLatestSnapshot.d.ts} +3 -3
  383. package/lib/prefetchLatestSnapshot.d.ts.map +1 -0
  384. package/lib/{prefetchLatestSnapshot.mjs → prefetchLatestSnapshot.js} +16 -11
  385. package/lib/prefetchLatestSnapshot.js.map +1 -0
  386. package/lib/{retryErrorsStorageAdapter.d.mts → retryErrorsStorageAdapter.d.ts} +1 -2
  387. package/lib/retryErrorsStorageAdapter.d.ts.map +1 -0
  388. package/lib/{retryErrorsStorageAdapter.mjs → retryErrorsStorageAdapter.js} +2 -5
  389. package/lib/retryErrorsStorageAdapter.js.map +1 -0
  390. package/lib/{retryUtils.d.mts → retryUtils.d.ts} +1 -1
  391. package/lib/retryUtils.d.ts.map +1 -0
  392. package/lib/{retryUtils.mjs → retryUtils.js} +6 -2
  393. package/lib/retryUtils.js.map +1 -0
  394. package/lib/{socketModule.d.mts → socketModule.d.ts} +1 -1
  395. package/lib/socketModule.d.ts.map +1 -0
  396. package/lib/{socketModule.mjs → socketModule.js} +3 -1
  397. package/lib/socketModule.js.map +1 -0
  398. package/lib/test/buildOdspShareLinkReqParams.spec.js +25 -0
  399. package/lib/test/buildOdspShareLinkReqParams.spec.js.map +1 -0
  400. package/lib/test/createNewUtilsTests.spec.js +221 -0
  401. package/lib/test/createNewUtilsTests.spec.js.map +1 -0
  402. package/lib/test/deltaStorageService.spec.js +176 -0
  403. package/lib/test/deltaStorageService.spec.js.map +1 -0
  404. package/lib/test/epochTests.spec.js +340 -0
  405. package/lib/test/epochTests.spec.js.map +1 -0
  406. package/lib/test/epochTestsWithRedemption.spec.js +119 -0
  407. package/lib/test/epochTestsWithRedemption.spec.js.map +1 -0
  408. package/lib/test/fetchSnapshot.spec.js +412 -0
  409. package/lib/test/fetchSnapshot.spec.js.map +1 -0
  410. package/lib/test/getFileLink.spec.js +62 -0
  411. package/lib/test/getFileLink.spec.js.map +1 -0
  412. package/lib/test/getUrlAndHeadersWithAuth.spec.js +66 -0
  413. package/lib/test/getUrlAndHeadersWithAuth.spec.js.map +1 -0
  414. package/lib/test/getVersions.spec.js +284 -0
  415. package/lib/test/getVersions.spec.js.map +1 -0
  416. package/lib/test/joinSessionCacheTests.spec.js +53 -0
  417. package/lib/test/joinSessionCacheTests.spec.js.map +1 -0
  418. package/lib/test/joinSessionPeriodicCall.spec.js +158 -0
  419. package/lib/test/joinSessionPeriodicCall.spec.js.map +1 -0
  420. package/lib/test/jsonSnapshotFormatTests.spec.js +107 -0
  421. package/lib/test/jsonSnapshotFormatTests.spec.js.map +1 -0
  422. package/lib/test/localOdspDriver.spec.js +177 -0
  423. package/lib/test/localOdspDriver.spec.js.map +1 -0
  424. package/lib/test/mockFetch.js +61 -0
  425. package/lib/test/mockFetch.js.map +1 -0
  426. package/lib/test/odspCreateContainer.spec.js +116 -0
  427. package/lib/test/odspCreateContainer.spec.js.map +1 -0
  428. package/lib/test/odspDriverResolverTest.spec.js +289 -0
  429. package/lib/test/odspDriverResolverTest.spec.js.map +1 -0
  430. package/lib/test/odspDriverUrlResolverForShareLink.spec.js +287 -0
  431. package/lib/test/odspDriverUrlResolverForShareLink.spec.js.map +1 -0
  432. package/lib/test/odspError.spec.js +299 -0
  433. package/lib/test/odspError.spec.js.map +1 -0
  434. package/lib/test/opsCaching.spec.js +357 -0
  435. package/lib/test/opsCaching.spec.js.map +1 -0
  436. package/lib/test/prefetchSnapshotTests.spec.js +420 -0
  437. package/lib/test/prefetchSnapshotTests.spec.js.map +1 -0
  438. package/lib/test/snapshotFormatTests.spec.js +218 -0
  439. package/lib/test/snapshotFormatTests.spec.js.map +1 -0
  440. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js +152 -0
  441. package/lib/test/socketTests/deltaConnectionUpdateTests.spec.js.map +1 -0
  442. package/lib/test/socketTests/socketMock.js +109 -0
  443. package/lib/test/socketTests/socketMock.js.map +1 -0
  444. package/lib/test/socketTests/socketTests.spec.js +256 -0
  445. package/lib/test/socketTests/socketTests.spec.js.map +1 -0
  446. package/lib/test/tokenFetch.spec.js +39 -0
  447. package/lib/test/tokenFetch.spec.js.map +1 -0
  448. package/lib/test/types/validateOdspDriverPrevious.generated.js +96 -0
  449. package/lib/test/types/validateOdspDriverPrevious.generated.js.map +1 -0
  450. package/lib/test/zipItDataRepresentationTests.spec.js +207 -0
  451. package/lib/test/zipItDataRepresentationTests.spec.js.map +1 -0
  452. package/lib/{vroom.d.mts → vroom.d.ts} +3 -3
  453. package/lib/vroom.d.ts.map +1 -0
  454. package/lib/{vroom.mjs → vroom.js} +4 -4
  455. package/lib/vroom.js.map +1 -0
  456. package/lib/{zipItDataRepresentationUtils.d.mts → zipItDataRepresentationUtils.d.ts} +2 -2
  457. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -0
  458. package/lib/{zipItDataRepresentationUtils.mjs → zipItDataRepresentationUtils.js} +17 -9
  459. package/lib/zipItDataRepresentationUtils.js.map +1 -0
  460. package/package.json +90 -31
  461. package/src/ReadBufferUtils.ts +7 -7
  462. package/src/WriteBufferUtils.ts +13 -9
  463. package/src/checkUrl.ts +4 -2
  464. package/src/compactSnapshotParser.ts +87 -52
  465. package/src/compactSnapshotWriter.ts +19 -12
  466. package/src/contracts.ts +16 -4
  467. package/src/createFile.ts +16 -13
  468. package/src/createNewContainerOnExistingFile.ts +8 -8
  469. package/src/createNewModule.ts +2 -2
  470. package/src/createNewUtils.ts +19 -9
  471. package/src/createOdspCreateContainerRequest.ts +2 -1
  472. package/src/createOdspUrl.ts +1 -1
  473. package/src/epochTracker.ts +90 -55
  474. package/src/fetchSnapshot.ts +104 -47
  475. package/src/getFileLink.ts +21 -13
  476. package/src/getQueryString.ts +3 -0
  477. package/src/index.ts +27 -19
  478. package/src/localOdspDriver/localOdspDocumentService.ts +3 -3
  479. package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +12 -11
  480. package/src/localOdspDriver/localOdspDocumentStorageManager.ts +5 -5
  481. package/src/odspCache.ts +13 -9
  482. package/src/odspDelayLoadedDeltaStream.ts +54 -33
  483. package/src/odspDeltaStorageService.ts +17 -16
  484. package/src/odspDocumentDeltaConnection.ts +52 -34
  485. package/src/odspDocumentService.ts +23 -20
  486. package/src/odspDocumentServiceFactory.ts +7 -2
  487. package/src/odspDocumentServiceFactoryCore.ts +25 -18
  488. package/src/odspDocumentServiceFactoryWithCodeSplit.ts +1 -1
  489. package/src/odspDocumentStorageManager.ts +276 -216
  490. package/src/odspDocumentStorageServiceBase.ts +45 -43
  491. package/src/odspDriverUrlResolver.ts +39 -24
  492. package/src/odspDriverUrlResolverForShareLink.ts +51 -31
  493. package/src/odspError.ts +4 -4
  494. package/src/odspFluidFileLink.ts +3 -3
  495. package/src/odspLocationRedirection.ts +1 -1
  496. package/src/odspPublicUtils.ts +3 -0
  497. package/src/odspSnapshotParser.ts +4 -3
  498. package/src/odspSummaryUploadManager.ts +21 -9
  499. package/src/odspUrlHelper.ts +2 -3
  500. package/src/odspUtils.ts +73 -30
  501. package/src/opsCaching.ts +13 -12
  502. package/src/packageVersion.ts +1 -1
  503. package/src/prefetchLatestSnapshot.ts +24 -15
  504. package/src/retryErrorsStorageAdapter.ts +4 -8
  505. package/src/retryUtils.ts +6 -2
  506. package/src/socketModule.ts +2 -0
  507. package/src/vroom.ts +6 -6
  508. package/src/zipItDataRepresentationUtils.ts +63 -35
  509. package/tsconfig.cjs.json +7 -0
  510. package/tsconfig.json +2 -5
  511. package/lib/ReadBufferUtils.d.mts.map +0 -1
  512. package/lib/ReadBufferUtils.mjs.map +0 -1
  513. package/lib/WriteBufferUtils.d.mts.map +0 -1
  514. package/lib/WriteBufferUtils.mjs.map +0 -1
  515. package/lib/checkUrl.d.mts.map +0 -1
  516. package/lib/checkUrl.mjs.map +0 -1
  517. package/lib/compactSnapshotParser.d.mts.map +0 -1
  518. package/lib/compactSnapshotParser.mjs.map +0 -1
  519. package/lib/compactSnapshotWriter.d.mts.map +0 -1
  520. package/lib/compactSnapshotWriter.mjs.map +0 -1
  521. package/lib/constants.d.mts.map +0 -1
  522. package/lib/constants.mjs.map +0 -1
  523. package/lib/contracts.d.mts.map +0 -1
  524. package/lib/contracts.mjs.map +0 -1
  525. package/lib/contractsPublic.d.mts.map +0 -1
  526. package/lib/contractsPublic.mjs.map +0 -1
  527. package/lib/createFile.d.mts.map +0 -1
  528. package/lib/createFile.mjs.map +0 -1
  529. package/lib/createNewContainerOnExistingFile.d.mts.map +0 -1
  530. package/lib/createNewContainerOnExistingFile.mjs.map +0 -1
  531. package/lib/createNewModule.d.mts.map +0 -1
  532. package/lib/createNewModule.mjs.map +0 -1
  533. package/lib/createNewUtils.d.mts.map +0 -1
  534. package/lib/createNewUtils.mjs.map +0 -1
  535. package/lib/createOdspCreateContainerRequest.d.mts.map +0 -1
  536. package/lib/createOdspCreateContainerRequest.mjs.map +0 -1
  537. package/lib/createOdspUrl.d.mts.map +0 -1
  538. package/lib/createOdspUrl.mjs.map +0 -1
  539. package/lib/epochTracker.d.mts.map +0 -1
  540. package/lib/epochTracker.mjs.map +0 -1
  541. package/lib/fetch.d.mts.map +0 -1
  542. package/lib/fetch.mjs.map +0 -1
  543. package/lib/fetchSnapshot.d.mts.map +0 -1
  544. package/lib/fetchSnapshot.mjs.map +0 -1
  545. package/lib/getFileLink.d.mts.map +0 -1
  546. package/lib/getFileLink.mjs.map +0 -1
  547. package/lib/getQueryString.d.mts.map +0 -1
  548. package/lib/getQueryString.mjs.map +0 -1
  549. package/lib/getUrlAndHeadersWithAuth.d.mts.map +0 -1
  550. package/lib/getUrlAndHeadersWithAuth.mjs.map +0 -1
  551. package/lib/index.d.mts.map +0 -1
  552. package/lib/index.mjs +0 -22
  553. package/lib/index.mjs.map +0 -1
  554. package/lib/localOdspDriver/localOdspDeltaStorageService.d.mts.map +0 -1
  555. package/lib/localOdspDriver/localOdspDeltaStorageService.mjs.map +0 -1
  556. package/lib/localOdspDriver/localOdspDocumentService.d.mts.map +0 -1
  557. package/lib/localOdspDriver/localOdspDocumentService.mjs.map +0 -1
  558. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.mts.map +0 -1
  559. package/lib/localOdspDriver/localOdspDocumentServiceFactory.mjs.map +0 -1
  560. package/lib/localOdspDriver/localOdspDocumentStorageManager.d.mts.map +0 -1
  561. package/lib/localOdspDriver/localOdspDocumentStorageManager.mjs.map +0 -1
  562. package/lib/odspCache.d.mts.map +0 -1
  563. package/lib/odspCache.mjs.map +0 -1
  564. package/lib/odspDelayLoadedDeltaStream.d.mts.map +0 -1
  565. package/lib/odspDelayLoadedDeltaStream.mjs.map +0 -1
  566. package/lib/odspDeltaStorageService.d.mts.map +0 -1
  567. package/lib/odspDeltaStorageService.mjs.map +0 -1
  568. package/lib/odspDocumentDeltaConnection.d.mts.map +0 -1
  569. package/lib/odspDocumentDeltaConnection.mjs.map +0 -1
  570. package/lib/odspDocumentService.d.mts.map +0 -1
  571. package/lib/odspDocumentService.mjs.map +0 -1
  572. package/lib/odspDocumentServiceFactory.d.mts.map +0 -1
  573. package/lib/odspDocumentServiceFactory.mjs.map +0 -1
  574. package/lib/odspDocumentServiceFactoryCore.d.mts.map +0 -1
  575. package/lib/odspDocumentServiceFactoryCore.mjs.map +0 -1
  576. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.mts.map +0 -1
  577. package/lib/odspDocumentServiceFactoryWithCodeSplit.mjs.map +0 -1
  578. package/lib/odspDocumentStorageManager.d.mts.map +0 -1
  579. package/lib/odspDocumentStorageManager.mjs.map +0 -1
  580. package/lib/odspDocumentStorageServiceBase.d.mts.map +0 -1
  581. package/lib/odspDocumentStorageServiceBase.mjs.map +0 -1
  582. package/lib/odspDriverUrlResolver.d.mts.map +0 -1
  583. package/lib/odspDriverUrlResolver.mjs.map +0 -1
  584. package/lib/odspDriverUrlResolverForShareLink.d.mts.map +0 -1
  585. package/lib/odspDriverUrlResolverForShareLink.mjs.map +0 -1
  586. package/lib/odspError.d.mts.map +0 -1
  587. package/lib/odspError.mjs.map +0 -1
  588. package/lib/odspFluidFileLink.d.mts.map +0 -1
  589. package/lib/odspFluidFileLink.mjs.map +0 -1
  590. package/lib/odspLocationRedirection.d.mts.map +0 -1
  591. package/lib/odspLocationRedirection.mjs.map +0 -1
  592. package/lib/odspPublicUtils.d.mts.map +0 -1
  593. package/lib/odspPublicUtils.mjs.map +0 -1
  594. package/lib/odspSnapshotParser.d.mts.map +0 -1
  595. package/lib/odspSnapshotParser.mjs.map +0 -1
  596. package/lib/odspSummaryUploadManager.d.mts.map +0 -1
  597. package/lib/odspSummaryUploadManager.mjs.map +0 -1
  598. package/lib/odspUrlHelper.d.mts.map +0 -1
  599. package/lib/odspUrlHelper.mjs.map +0 -1
  600. package/lib/odspUtils.d.mts.map +0 -1
  601. package/lib/odspUtils.mjs.map +0 -1
  602. package/lib/opsCaching.d.mts.map +0 -1
  603. package/lib/opsCaching.mjs.map +0 -1
  604. package/lib/packageVersion.d.mts.map +0 -1
  605. package/lib/packageVersion.mjs.map +0 -1
  606. package/lib/prefetchLatestSnapshot.d.mts.map +0 -1
  607. package/lib/prefetchLatestSnapshot.mjs.map +0 -1
  608. package/lib/retryErrorsStorageAdapter.d.mts.map +0 -1
  609. package/lib/retryErrorsStorageAdapter.mjs.map +0 -1
  610. package/lib/retryUtils.d.mts.map +0 -1
  611. package/lib/retryUtils.mjs.map +0 -1
  612. package/lib/socketModule.d.mts.map +0 -1
  613. package/lib/socketModule.mjs.map +0 -1
  614. package/lib/vroom.d.mts.map +0 -1
  615. package/lib/vroom.mjs.map +0 -1
  616. package/lib/zipItDataRepresentationUtils.d.mts.map +0 -1
  617. package/lib/zipItDataRepresentationUtils.mjs.map +0 -1
@@ -0,0 +1,287 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ /* eslint-disable @typescript-eslint/dot-notation */
6
+ import { strict as assert } from "node:assert";
7
+ import { stub } from "sinon";
8
+ import { OdspDriverUrlResolverForShareLink } from "../odspDriverUrlResolverForShareLink.js";
9
+ import { getHashedDocumentId } from "../odspPublicUtils.js";
10
+ import { createOdspUrl } from "../createOdspUrl.js";
11
+ import * as fileLinkImport from "../getFileLink.js";
12
+ import { getLocatorFromOdspUrl, locatorQueryParamName, storeLocatorInOdspUrl, } from "../odspFluidFileLink.js";
13
+ import { SharingLinkHeader } from "../contractsPublic.js";
14
+ import { createOdspCreateContainerRequest } from "../createOdspCreateContainerRequest.js";
15
+ describe("Tests for OdspDriverUrlResolverForShareLink resolver", () => {
16
+ const siteUrl = "https://microsoft.sharepoint-df.com/siteUrl";
17
+ const driveId = "driveId";
18
+ const itemId = "fileId";
19
+ const dataStorePath = "dataStorePath";
20
+ const fileName = "fileName";
21
+ const fileVersion = "173.0";
22
+ const contextObject = { w: "id1", i: "id2" };
23
+ const contextStringified = JSON.stringify(contextObject);
24
+ const sharelink = "https://microsoft.sharepoint-df.com/site/SHARELINK";
25
+ const urlsWithNavParams = [
26
+ // Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&v=173.0
27
+ {
28
+ hasVersion: true,
29
+ hasContext: false,
30
+ url: "https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZ2PTE3My4w",
31
+ },
32
+ // Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1
33
+ {
34
+ hasVersion: false,
35
+ hasContext: false,
36
+ url: "https://microsoft.sharepoint-df.com/test?nav=cz0lMkZzaXRlVXJsJmQ9ZHJpdmVJZCZmPWZpbGVJZCZjPWRhdGFTdG9yZVBhdGgmZmx1aWQ9MQ%3D%3D",
37
+ },
38
+ // Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&v=173.0&c=%7B%22w%22%3A%22id1%22%2C%22i%22%3A%22id2%22%7D
39
+ {
40
+ hasVersion: true,
41
+ hasContext: true,
42
+ url: "https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZ2PTE3My4wJmM9JTdCJTIydyUyMiUzQSUyMmlkMSUyMiUyQyUyMmklMjIlM0ElMjJpZDIlMjIlN0Q%3D",
43
+ },
44
+ // Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&c=%7B%22w%22%3A%22id1%22%2C%22i%22%3A%22id2%22%7D
45
+ {
46
+ hasVersion: false,
47
+ hasContext: true,
48
+ url: "https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZjPSU3QiUyMnclMjIlM0ElMjJpZDElMjIlMkMlMjJpJTIyJTNBJTIyaWQyJTIyJTdE",
49
+ },
50
+ ];
51
+ let urlResolverWithShareLinkFetcher;
52
+ let urlResolverWithoutShareLinkFetcher;
53
+ const mockResolvedUrl = {
54
+ siteUrl,
55
+ driveId,
56
+ itemId,
57
+ odspResolvedUrl: true,
58
+ };
59
+ beforeEach(() => {
60
+ urlResolverWithShareLinkFetcher = new OdspDriverUrlResolverForShareLink({
61
+ tokenFetcher: async () => "SharingLinkToken",
62
+ identityType: "Enterprise",
63
+ });
64
+ urlResolverWithoutShareLinkFetcher = new OdspDriverUrlResolverForShareLink();
65
+ });
66
+ async function mockGetFileLink(response, callback) {
67
+ const getFileLinkStub = stub(fileLinkImport, "getFileLink");
68
+ getFileLinkStub.returns(response);
69
+ try {
70
+ return await callback();
71
+ }
72
+ finally {
73
+ getFileLinkStub.restore();
74
+ }
75
+ }
76
+ for (const urlWithNav of urlsWithNavParams) {
77
+ it(`resolve - Should resolve nav link correctly, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {
78
+ const runTest = async (resolver) => {
79
+ const resolvedUrl = await resolver.resolve({ url: urlWithNav.url });
80
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
81
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
82
+ assert.strictEqual(resolvedUrl.itemId, itemId, "Item id should be equal");
83
+ assert.strictEqual(resolvedUrl.fileVersion, urlWithNav.hasVersion ? fileVersion : undefined);
84
+ assert.strictEqual(resolvedUrl.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be equal");
85
+ assert(resolvedUrl.endpoints.snapshotStorageUrl !== undefined, "Snapshot url should not be empty");
86
+ };
87
+ await runTest(urlResolverWithShareLinkFetcher);
88
+ await runTest(urlResolverWithoutShareLinkFetcher);
89
+ });
90
+ it(`resolve - Should resolve odsp driver url correctly, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {
91
+ const runTest = async (resolver) => {
92
+ const resolvedUrl1 = await resolver.resolve({ url: urlWithNav.url });
93
+ const url = createOdspUrl({ ...resolvedUrl1, dataStorePath });
94
+ const resolvedUrl2 = await resolver.resolve({ url });
95
+ assert.strictEqual(resolvedUrl2.driveId, driveId, "Drive id should be equal");
96
+ assert.strictEqual(resolvedUrl2.siteUrl, siteUrl, "SiteUrl should be equal");
97
+ assert.strictEqual(resolvedUrl2.itemId, itemId, "Item id should be equal");
98
+ assert.strictEqual(resolvedUrl2.fileVersion, urlWithNav.hasVersion ? fileVersion : undefined);
99
+ assert.strictEqual(resolvedUrl2.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be equal");
100
+ assert(resolvedUrl2.endpoints.snapshotStorageUrl !== undefined, "Snapshot url should not be empty");
101
+ };
102
+ await runTest(urlResolverWithShareLinkFetcher);
103
+ await runTest(urlResolverWithoutShareLinkFetcher);
104
+ });
105
+ it(`resolve - Check conversion in either direction, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {
106
+ const resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {
107
+ return urlResolverWithShareLinkFetcher.resolve({ url: urlWithNav.url });
108
+ });
109
+ const absoluteUrl = await urlResolverWithShareLinkFetcher.getAbsoluteUrl(resolvedUrl, dataStorePath);
110
+ const actualNavParam = new URLSearchParams(absoluteUrl).get("nav");
111
+ const expectedNavParam = new URLSearchParams(sharelink).get("nav");
112
+ assert(actualNavParam !== undefined, "Nav param should be defined!!");
113
+ assert.strictEqual(expectedNavParam, actualNavParam, "Nav param should match");
114
+ });
115
+ it(`getAbsoluteUrl - Should resolve and then getAbsoluteUrl should pick dataStorePath from resolvedUrl, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {
116
+ const resolvedUrl1 = await mockGetFileLink(Promise.resolve(sharelink), async () => {
117
+ return urlResolverWithShareLinkFetcher.resolve({ url: urlWithNav.url });
118
+ });
119
+ const absoluteUrl = await urlResolverWithShareLinkFetcher.getAbsoluteUrl(resolvedUrl1, "");
120
+ const actualNavParam = new URLSearchParams(absoluteUrl).get("nav");
121
+ const expectedNavParam = new URLSearchParams(sharelink).get("nav");
122
+ assert(actualNavParam !== undefined, "Nav param should be defined!!");
123
+ assert.strictEqual(expectedNavParam, actualNavParam, "Nav param should match");
124
+ // Then resolve again.
125
+ const resolvedUrl2 = await mockGetFileLink(Promise.resolve(sharelink), async () => {
126
+ return urlResolverWithShareLinkFetcher.resolve({ url: absoluteUrl });
127
+ });
128
+ assert.strictEqual(resolvedUrl2.dataStorePath, dataStorePath, "dataStorePath should be preserved");
129
+ assert.strictEqual(resolvedUrl2.driveId, driveId, "Drive id should be equal");
130
+ assert.strictEqual(resolvedUrl2.siteUrl, siteUrl, "SiteUrl should be equal");
131
+ assert.strictEqual(resolvedUrl2.itemId, itemId, "Item id should be equal");
132
+ assert.strictEqual(resolvedUrl2.fileVersion, urlWithNav.hasVersion ? fileVersion : undefined);
133
+ assert.strictEqual(resolvedUrl2.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be equal");
134
+ assert(resolvedUrl2.endpoints.snapshotStorageUrl !== undefined, "Snapshot url should not be empty");
135
+ });
136
+ }
137
+ it("resolve - Should generate sharelink and set it in shareLinkMap if using resolver with TokenFetcher", async () => {
138
+ const url = createOdspUrl({ siteUrl, driveId, itemId, dataStorePath });
139
+ await mockGetFileLink(Promise.resolve(sharelink), async () => {
140
+ return urlResolverWithShareLinkFetcher.resolve({ url });
141
+ });
142
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
143
+ const actualShareLink = await urlResolverWithShareLinkFetcher["sharingLinkCache"].get(`${siteUrl},${driveId},${itemId}`);
144
+ return assert.strictEqual(actualShareLink, sharelink, "Sharing link should be equal!!");
145
+ });
146
+ it("resolve - Should not generate sharelink if using resolver without TokenFetcher", async () => {
147
+ const url = createOdspUrl({ siteUrl, driveId, itemId, dataStorePath });
148
+ await mockGetFileLink(Promise.resolve(sharelink), async () => {
149
+ return urlResolverWithoutShareLinkFetcher.resolve({ url });
150
+ });
151
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
152
+ const actualShareLink = await urlResolverWithoutShareLinkFetcher["sharingLinkCache"].get(`${siteUrl},${driveId},${itemId}`);
153
+ return assert.strictEqual(actualShareLink, undefined, "Sharing link should be undefined");
154
+ });
155
+ it("getAbsoluteUrl - Should generate sharelink if none was generated on resolve", async () => {
156
+ const absoluteUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {
157
+ return urlResolverWithShareLinkFetcher.getAbsoluteUrl(mockResolvedUrl, dataStorePath);
158
+ });
159
+ assert(absoluteUrl !== undefined, "Absolute url should be defined!!");
160
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
161
+ const actualShareLink = await urlResolverWithShareLinkFetcher["sharingLinkCache"].get(`${siteUrl},${driveId},${itemId}`);
162
+ assert.strictEqual(actualShareLink, sharelink, "Sharing link should be equal!!");
163
+ const url = new URL(sharelink);
164
+ storeLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });
165
+ assert.strictEqual(absoluteUrl, url.toString(), "Absolute url should be equal!!");
166
+ });
167
+ it("getAbsoluteUrl - Should throw if getShareLink throws and clear the promise from shareLinkMap", async () => {
168
+ let success = true;
169
+ const absoluteUrl = await mockGetFileLink(Promise.reject(new Error("No Sharelink")), async () => {
170
+ return urlResolverWithShareLinkFetcher.getAbsoluteUrl(mockResolvedUrl, dataStorePath);
171
+ }).catch((error) => {
172
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
173
+ assert.strictEqual(error.message, "No Sharelink", "Error should be as expected.");
174
+ success = false;
175
+ });
176
+ assert(absoluteUrl === undefined, "Absolute url should be undefined!!");
177
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
178
+ const actualShareLink = await urlResolverWithShareLinkFetcher["sharingLinkCache"].get(`${siteUrl},${driveId},${itemId}`);
179
+ assert(actualShareLink === undefined, "Sharing link should be undefined!!");
180
+ assert.strictEqual(success, false, "Error should be as expected!!");
181
+ });
182
+ it("getAbsoluteUrl - Should throw if using resolver without TokenFetcher", async () => {
183
+ let success = true;
184
+ const absoluteUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {
185
+ return urlResolverWithoutShareLinkFetcher.getAbsoluteUrl(mockResolvedUrl, dataStorePath);
186
+ }).catch(() => {
187
+ success = false;
188
+ });
189
+ assert(absoluteUrl === undefined, "Absolute url should be undefined!!");
190
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call
191
+ const actualShareLink = await urlResolverWithShareLinkFetcher["sharingLinkCache"].get(`${siteUrl},${driveId},${itemId}`);
192
+ assert(actualShareLink === undefined, "Sharing link should be undefined!!");
193
+ assert.strictEqual(success, false, "Error should be thrown!!");
194
+ });
195
+ it("Should resolve createNew request", async () => {
196
+ const runTest = async (resolver) => {
197
+ const request = createOdspCreateContainerRequest(siteUrl, driveId, dataStorePath, fileName);
198
+ const resolvedUrl = await resolver.resolve(request);
199
+ assert.strictEqual(resolvedUrl.fileName, fileName, "FileName should be equal");
200
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
201
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
202
+ assert.strictEqual(resolvedUrl.itemId, "", "Item id should be absent");
203
+ assert.strictEqual(resolvedUrl.hashedDocumentId, "", "No doc id should be present");
204
+ assert.strictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be empty");
205
+ const [, queryString] = request.url.split("?");
206
+ const searchParams = new URLSearchParams(queryString);
207
+ assert.strictEqual(searchParams.get("path"), dataStorePath, "dataStorePath should match");
208
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive id should match");
209
+ };
210
+ await runTest(urlResolverWithShareLinkFetcher);
211
+ await runTest(urlResolverWithoutShareLinkFetcher);
212
+ });
213
+ it("Sharing link should be set when isSharingLinkToRedeem header is set", async () => {
214
+ const url = new URL(sharelink);
215
+ const resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {
216
+ storeLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });
217
+ return urlResolverWithShareLinkFetcher.resolve({
218
+ url: url.toString(),
219
+ headers: { [SharingLinkHeader.isSharingLinkToRedeem]: true },
220
+ });
221
+ });
222
+ assert(resolvedUrl.shareLinkInfo?.sharingLinkToRedeem !== undefined, "Sharing link should be set in resolved url");
223
+ });
224
+ it("Encode and decode nav param", async () => {
225
+ const encodedUrl = new URL(sharelink);
226
+ storeLocatorInOdspUrl(encodedUrl, {
227
+ siteUrl,
228
+ driveId,
229
+ itemId,
230
+ dataStorePath,
231
+ context: contextStringified,
232
+ });
233
+ const locator = getLocatorFromOdspUrl(encodedUrl);
234
+ assert.strictEqual(locator?.driveId, driveId, "Drive id should be equal");
235
+ assert.strictEqual(locator?.itemId, itemId, "Item id should be equal");
236
+ assert.strictEqual(locator?.dataStorePath, dataStorePath, "DataStore path should be equal");
237
+ assert.strictEqual(locator?.siteUrl, siteUrl, "SiteUrl should be equal");
238
+ assert.strictEqual(locator?.context, contextStringified, "Context should be equal");
239
+ const parsedContext = JSON.parse(locator?.context);
240
+ assert.deepStrictEqual(parsedContext, contextObject, "Context should be de-serializable");
241
+ });
242
+ it("Check nav param removal for share link", async () => {
243
+ const customShareLink = `${sharelink}?query1=q1`;
244
+ const url = new URL(customShareLink);
245
+ storeLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });
246
+ const resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {
247
+ return urlResolverWithShareLinkFetcher.resolve({
248
+ url: url.toString(),
249
+ headers: { [SharingLinkHeader.isSharingLinkToRedeem]: true },
250
+ });
251
+ });
252
+ assert.strictEqual(resolvedUrl.shareLinkInfo?.sharingLinkToRedeem, customShareLink, "Nav param should not exist on sharelink");
253
+ });
254
+ it("appendLocatorParams - Appends the correct nav param", async () => {
255
+ const testQueryParam = { name: "query1", value: "q1" };
256
+ const customShareLink = `${sharelink}?${testQueryParam.name}=${testQueryParam.value}`;
257
+ const testDataStorePath = "/testpath";
258
+ const appName = "AppName1";
259
+ const contextVal = "Context1";
260
+ const testFileVersion = "123";
261
+ const containerName = "containerA";
262
+ const urlResolverForShareLink = new OdspDriverUrlResolverForShareLink(undefined /* tokenFetcher */, undefined /* logger */, appName /* appName */, async (_resolvedUrl, _dataStorePath) => contextVal /* context */);
263
+ const resolvedUrl = {
264
+ siteUrl,
265
+ driveId,
266
+ itemId,
267
+ odspResolvedUrl: true,
268
+ fileVersion: testFileVersion,
269
+ codeHint: { containerPackageName: containerName },
270
+ };
271
+ const resultUrl = new URL(await urlResolverForShareLink.appendLocatorParams(customShareLink, resolvedUrl, testDataStorePath));
272
+ const testQueryParamValue = resultUrl.searchParams.get(testQueryParam.name);
273
+ assert.strictEqual(testQueryParamValue, testQueryParam.value, "original url's query params should be preserved");
274
+ const locatorParamValue = resultUrl.searchParams.get(locatorQueryParamName);
275
+ assert(locatorParamValue != null, "locator parameter should exist is the resulting url");
276
+ const decodedLocatorParam = getLocatorFromOdspUrl(resultUrl);
277
+ assert.strictEqual(decodedLocatorParam?.driveId, driveId, "driveId should be equal");
278
+ assert.strictEqual(decodedLocatorParam?.itemId, itemId, "itemId should be equal");
279
+ assert.strictEqual(decodedLocatorParam?.siteUrl, siteUrl, "siteUrl should be equal");
280
+ assert.strictEqual(decodedLocatorParam?.containerPackageName, containerName, "containerPackageName should be equal");
281
+ assert.strictEqual(decodedLocatorParam?.appName, appName, "appName should be as provided to the OdspDriverUrlResolverForShareLink constructor");
282
+ assert.strictEqual(decodedLocatorParam?.dataStorePath, testDataStorePath, "dataStore path should be as provided to the appendLocatorParams");
283
+ assert.strictEqual(decodedLocatorParam?.fileVersion, testFileVersion, "fileVersion should be equal");
284
+ assert.strictEqual(decodedLocatorParam?.context, contextVal, "context value should be as provided to the OdspDriverUrlResolverForShareLink constructor");
285
+ });
286
+ });
287
+ //# sourceMappingURL=odspDriverUrlResolverForShareLink.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDriverUrlResolverForShareLink.spec.js","sourceRoot":"","sources":["../../src/test/odspDriverUrlResolverForShareLink.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* eslint-disable @typescript-eslint/dot-notation */\n\nimport { strict as assert } from \"node:assert\";\nimport { stub } from \"sinon\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { IOdspResolvedUrl } from \"@fluidframework/odsp-driver-definitions\";\nimport { OdspDriverUrlResolverForShareLink } from \"../odspDriverUrlResolverForShareLink.js\";\nimport { getHashedDocumentId } from \"../odspPublicUtils.js\";\nimport { createOdspUrl } from \"../createOdspUrl.js\";\nimport * as fileLinkImport from \"../getFileLink.js\";\nimport {\n\tgetLocatorFromOdspUrl,\n\tlocatorQueryParamName,\n\tstoreLocatorInOdspUrl,\n} from \"../odspFluidFileLink.js\";\nimport { SharingLinkHeader } from \"../contractsPublic.js\";\nimport { createOdspCreateContainerRequest } from \"../createOdspCreateContainerRequest.js\";\n\ndescribe(\"Tests for OdspDriverUrlResolverForShareLink resolver\", () => {\n\tconst siteUrl = \"https://microsoft.sharepoint-df.com/siteUrl\";\n\tconst driveId = \"driveId\";\n\tconst itemId = \"fileId\";\n\tconst dataStorePath = \"dataStorePath\";\n\tconst fileName = \"fileName\";\n\tconst fileVersion = \"173.0\";\n\tconst contextObject = { w: \"id1\", i: \"id2\" };\n\tconst contextStringified = JSON.stringify(contextObject);\n\tconst sharelink = \"https://microsoft.sharepoint-df.com/site/SHARELINK\";\n\tconst urlsWithNavParams = [\n\t\t// Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&v=173.0\n\t\t{\n\t\t\thasVersion: true,\n\t\t\thasContext: false,\n\t\t\turl: \"https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZ2PTE3My4w\",\n\t\t},\n\t\t// Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1\n\t\t{\n\t\t\thasVersion: false,\n\t\t\thasContext: false,\n\t\t\turl: \"https://microsoft.sharepoint-df.com/test?nav=cz0lMkZzaXRlVXJsJmQ9ZHJpdmVJZCZmPWZpbGVJZCZjPWRhdGFTdG9yZVBhdGgmZmx1aWQ9MQ%3D%3D\",\n\t\t},\n\t\t// Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&v=173.0&c=%7B%22w%22%3A%22id1%22%2C%22i%22%3A%22id2%22%7D\n\t\t{\n\t\t\thasVersion: true,\n\t\t\thasContext: true,\n\t\t\turl: \"https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZ2PTE3My4wJmM9JTdCJTIydyUyMiUzQSUyMmlkMSUyMiUyQyUyMmklMjIlM0ElMjJpZDIlMjIlN0Q%3D\",\n\t\t},\n\t\t// Base64 encoded and then URI encoded string: d=driveId&f=fileId&c=dataStorePath&s=siteUrl&fluid=1&c=%7B%22w%22%3A%22id1%22%2C%22i%22%3A%22id2%22%7D\n\t\t{\n\t\t\thasVersion: false,\n\t\t\thasContext: true,\n\t\t\turl: \"https://microsoft.sharepoint-df.com/test?nav=ZD1kcml2ZUlkJmY9ZmlsZUlkJmM9ZGF0YVN0b3JlUGF0aCZzPXNpdGVVcmwmZmx1aWQ9MSZjPSU3QiUyMnclMjIlM0ElMjJpZDElMjIlMkMlMjJpJTIyJTNBJTIyaWQyJTIyJTdE\",\n\t\t},\n\t];\n\tlet urlResolverWithShareLinkFetcher: OdspDriverUrlResolverForShareLink;\n\tlet urlResolverWithoutShareLinkFetcher: OdspDriverUrlResolverForShareLink;\n\tconst mockResolvedUrl = {\n\t\tsiteUrl,\n\t\tdriveId,\n\t\titemId,\n\t\todspResolvedUrl: true,\n\t} as unknown as IOdspResolvedUrl;\n\n\tbeforeEach(() => {\n\t\turlResolverWithShareLinkFetcher = new OdspDriverUrlResolverForShareLink({\n\t\t\ttokenFetcher: async (): Promise<string> => \"SharingLinkToken\",\n\t\t\tidentityType: \"Enterprise\",\n\t\t});\n\t\turlResolverWithoutShareLinkFetcher = new OdspDriverUrlResolverForShareLink();\n\t});\n\n\tasync function mockGetFileLink<T>(\n\t\tresponse: Promise<string>,\n\t\tcallback: () => Promise<T>,\n\t): Promise<T> {\n\t\tconst getFileLinkStub = stub(fileLinkImport, \"getFileLink\");\n\t\tgetFileLinkStub.returns(response);\n\t\ttry {\n\t\t\treturn await callback();\n\t\t} finally {\n\t\t\tgetFileLinkStub.restore();\n\t\t}\n\t}\n\tfor (const urlWithNav of urlsWithNavParams) {\n\t\tit(`resolve - Should resolve nav link correctly, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {\n\t\t\tconst runTest = async (resolver: OdspDriverUrlResolverForShareLink): Promise<void> => {\n\t\t\t\tconst resolvedUrl = await resolver.resolve({ url: urlWithNav.url });\n\t\t\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\t\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\t\t\tassert.strictEqual(resolvedUrl.itemId, itemId, \"Item id should be equal\");\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tresolvedUrl.fileVersion,\n\t\t\t\t\turlWithNav.hasVersion ? fileVersion : undefined,\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tresolvedUrl.hashedDocumentId,\n\t\t\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\t\t\"Doc id should be equal\",\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tresolvedUrl.endpoints.snapshotStorageUrl !== undefined,\n\t\t\t\t\t\"Snapshot url should not be empty\",\n\t\t\t\t);\n\t\t\t};\n\t\t\tawait runTest(urlResolverWithShareLinkFetcher);\n\t\t\tawait runTest(urlResolverWithoutShareLinkFetcher);\n\t\t});\n\n\t\tit(`resolve - Should resolve odsp driver url correctly, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {\n\t\t\tconst runTest = async (resolver: OdspDriverUrlResolverForShareLink): Promise<void> => {\n\t\t\t\tconst resolvedUrl1 = await resolver.resolve({ url: urlWithNav.url });\n\t\t\t\tconst url: string = createOdspUrl({ ...resolvedUrl1, dataStorePath });\n\t\t\t\tconst resolvedUrl2 = await resolver.resolve({ url });\n\t\t\t\tassert.strictEqual(resolvedUrl2.driveId, driveId, \"Drive id should be equal\");\n\t\t\t\tassert.strictEqual(resolvedUrl2.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\t\t\tassert.strictEqual(resolvedUrl2.itemId, itemId, \"Item id should be equal\");\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tresolvedUrl2.fileVersion,\n\t\t\t\t\turlWithNav.hasVersion ? fileVersion : undefined,\n\t\t\t\t);\n\t\t\t\tassert.strictEqual(\n\t\t\t\t\tresolvedUrl2.hashedDocumentId,\n\t\t\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\t\t\"Doc id should be equal\",\n\t\t\t\t);\n\t\t\t\tassert(\n\t\t\t\t\tresolvedUrl2.endpoints.snapshotStorageUrl !== undefined,\n\t\t\t\t\t\"Snapshot url should not be empty\",\n\t\t\t\t);\n\t\t\t};\n\t\t\tawait runTest(urlResolverWithShareLinkFetcher);\n\t\t\tawait runTest(urlResolverWithoutShareLinkFetcher);\n\t\t});\n\n\t\tit(`resolve - Check conversion in either direction, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {\n\t\t\tconst resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\t\treturn urlResolverWithShareLinkFetcher.resolve({ url: urlWithNav.url });\n\t\t\t});\n\t\t\tconst absoluteUrl = await urlResolverWithShareLinkFetcher.getAbsoluteUrl(\n\t\t\t\tresolvedUrl,\n\t\t\t\tdataStorePath,\n\t\t\t);\n\t\t\tconst actualNavParam = new URLSearchParams(absoluteUrl).get(\"nav\");\n\t\t\tconst expectedNavParam = new URLSearchParams(sharelink).get(\"nav\");\n\t\t\tassert(actualNavParam !== undefined, \"Nav param should be defined!!\");\n\t\t\tassert.strictEqual(expectedNavParam, actualNavParam, \"Nav param should match\");\n\t\t});\n\n\t\tit(`getAbsoluteUrl - Should resolve and then getAbsoluteUrl should pick dataStorePath from resolvedUrl, hasVersion: ${urlWithNav.hasVersion}, hasContext: ${urlWithNav.hasContext}`, async () => {\n\t\t\tconst resolvedUrl1 = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\t\treturn urlResolverWithShareLinkFetcher.resolve({ url: urlWithNav.url });\n\t\t\t});\n\t\t\tconst absoluteUrl = await urlResolverWithShareLinkFetcher.getAbsoluteUrl(\n\t\t\t\tresolvedUrl1,\n\t\t\t\t\"\",\n\t\t\t);\n\t\t\tconst actualNavParam = new URLSearchParams(absoluteUrl).get(\"nav\");\n\t\t\tconst expectedNavParam = new URLSearchParams(sharelink).get(\"nav\");\n\t\t\tassert(actualNavParam !== undefined, \"Nav param should be defined!!\");\n\t\t\tassert.strictEqual(expectedNavParam, actualNavParam, \"Nav param should match\");\n\n\t\t\t// Then resolve again.\n\t\t\tconst resolvedUrl2 = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\t\treturn urlResolverWithShareLinkFetcher.resolve({ url: absoluteUrl });\n\t\t\t});\n\t\t\tassert.strictEqual(\n\t\t\t\tresolvedUrl2.dataStorePath,\n\t\t\t\tdataStorePath,\n\t\t\t\t\"dataStorePath should be preserved\",\n\t\t\t);\n\t\t\tassert.strictEqual(resolvedUrl2.driveId, driveId, \"Drive id should be equal\");\n\t\t\tassert.strictEqual(resolvedUrl2.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\t\tassert.strictEqual(resolvedUrl2.itemId, itemId, \"Item id should be equal\");\n\t\t\tassert.strictEqual(\n\t\t\t\tresolvedUrl2.fileVersion,\n\t\t\t\turlWithNav.hasVersion ? fileVersion : undefined,\n\t\t\t);\n\t\t\tassert.strictEqual(\n\t\t\t\tresolvedUrl2.hashedDocumentId,\n\t\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\t\"Doc id should be equal\",\n\t\t\t);\n\t\t\tassert(\n\t\t\t\tresolvedUrl2.endpoints.snapshotStorageUrl !== undefined,\n\t\t\t\t\"Snapshot url should not be empty\",\n\t\t\t);\n\t\t});\n\t}\n\n\tit(\"resolve - Should generate sharelink and set it in shareLinkMap if using resolver with TokenFetcher\", async () => {\n\t\tconst url: string = createOdspUrl({ siteUrl, driveId, itemId, dataStorePath });\n\t\tawait mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\treturn urlResolverWithShareLinkFetcher.resolve({ url });\n\t\t});\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\tconst actualShareLink = await urlResolverWithShareLinkFetcher[\"sharingLinkCache\"].get(\n\t\t\t`${siteUrl},${driveId},${itemId}`,\n\t\t);\n\t\treturn assert.strictEqual(actualShareLink, sharelink, \"Sharing link should be equal!!\");\n\t});\n\n\tit(\"resolve - Should not generate sharelink if using resolver without TokenFetcher\", async () => {\n\t\tconst url: string = createOdspUrl({ siteUrl, driveId, itemId, dataStorePath });\n\t\tawait mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\treturn urlResolverWithoutShareLinkFetcher.resolve({ url });\n\t\t});\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\tconst actualShareLink = await urlResolverWithoutShareLinkFetcher[\"sharingLinkCache\"].get(\n\t\t\t`${siteUrl},${driveId},${itemId}`,\n\t\t);\n\t\treturn assert.strictEqual(actualShareLink, undefined, \"Sharing link should be undefined\");\n\t});\n\n\tit(\"getAbsoluteUrl - Should generate sharelink if none was generated on resolve\", async () => {\n\t\tconst absoluteUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\treturn urlResolverWithShareLinkFetcher.getAbsoluteUrl(mockResolvedUrl, dataStorePath);\n\t\t});\n\n\t\tassert(absoluteUrl !== undefined, \"Absolute url should be defined!!\");\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\tconst actualShareLink = await urlResolverWithShareLinkFetcher[\"sharingLinkCache\"].get(\n\t\t\t`${siteUrl},${driveId},${itemId}`,\n\t\t);\n\t\tassert.strictEqual(actualShareLink, sharelink, \"Sharing link should be equal!!\");\n\n\t\tconst url = new URL(sharelink);\n\t\tstoreLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });\n\t\tassert.strictEqual(absoluteUrl, url.toString(), \"Absolute url should be equal!!\");\n\t});\n\n\tit(\"getAbsoluteUrl - Should throw if getShareLink throws and clear the promise from shareLinkMap\", async () => {\n\t\tlet success = true;\n\t\tconst absoluteUrl = await mockGetFileLink(\n\t\t\tPromise.reject(new Error(\"No Sharelink\")),\n\t\t\tasync () => {\n\t\t\t\treturn urlResolverWithShareLinkFetcher.getAbsoluteUrl(\n\t\t\t\t\tmockResolvedUrl,\n\t\t\t\t\tdataStorePath,\n\t\t\t\t);\n\t\t\t},\n\t\t).catch((error) => {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tassert.strictEqual(error.message, \"No Sharelink\", \"Error should be as expected.\");\n\t\t\tsuccess = false;\n\t\t});\n\n\t\tassert(absoluteUrl === undefined, \"Absolute url should be undefined!!\");\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\tconst actualShareLink = await urlResolverWithShareLinkFetcher[\"sharingLinkCache\"].get(\n\t\t\t`${siteUrl},${driveId},${itemId}`,\n\t\t);\n\t\tassert(actualShareLink === undefined, \"Sharing link should be undefined!!\");\n\t\tassert.strictEqual(success, false, \"Error should be as expected!!\");\n\t});\n\n\tit(\"getAbsoluteUrl - Should throw if using resolver without TokenFetcher\", async () => {\n\t\tlet success = true;\n\t\tconst absoluteUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\treturn urlResolverWithoutShareLinkFetcher.getAbsoluteUrl(\n\t\t\t\tmockResolvedUrl,\n\t\t\t\tdataStorePath,\n\t\t\t);\n\t\t}).catch(() => {\n\t\t\tsuccess = false;\n\t\t});\n\n\t\tassert(absoluteUrl === undefined, \"Absolute url should be undefined!!\");\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call\n\t\tconst actualShareLink = await urlResolverWithShareLinkFetcher[\"sharingLinkCache\"].get(\n\t\t\t`${siteUrl},${driveId},${itemId}`,\n\t\t);\n\t\tassert(actualShareLink === undefined, \"Sharing link should be undefined!!\");\n\t\tassert.strictEqual(success, false, \"Error should be thrown!!\");\n\t});\n\n\tit(\"Should resolve createNew request\", async () => {\n\t\tconst runTest = async (resolver: OdspDriverUrlResolverForShareLink): Promise<void> => {\n\t\t\tconst request: IRequest = createOdspCreateContainerRequest(\n\t\t\t\tsiteUrl,\n\t\t\t\tdriveId,\n\t\t\t\tdataStorePath,\n\t\t\t\tfileName,\n\t\t\t);\n\t\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\t\tassert.strictEqual(resolvedUrl.fileName, fileName, \"FileName should be equal\");\n\t\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\t\tassert.strictEqual(resolvedUrl.itemId, \"\", \"Item id should be absent\");\n\t\t\tassert.strictEqual(resolvedUrl.hashedDocumentId, \"\", \"No doc id should be present\");\n\t\t\tassert.strictEqual(\n\t\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\t\"\",\n\t\t\t\t\"Snapshot url should be empty\",\n\t\t\t);\n\n\t\t\tconst [, queryString] = request.url.split(\"?\");\n\t\t\tconst searchParams = new URLSearchParams(queryString);\n\t\t\tassert.strictEqual(\n\t\t\t\tsearchParams.get(\"path\"),\n\t\t\t\tdataStorePath,\n\t\t\t\t\"dataStorePath should match\",\n\t\t\t);\n\t\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive id should match\");\n\t\t};\n\t\tawait runTest(urlResolverWithShareLinkFetcher);\n\t\tawait runTest(urlResolverWithoutShareLinkFetcher);\n\t});\n\n\tit(\"Sharing link should be set when isSharingLinkToRedeem header is set\", async () => {\n\t\tconst url = new URL(sharelink);\n\t\tconst resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\tstoreLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });\n\t\t\treturn urlResolverWithShareLinkFetcher.resolve({\n\t\t\t\turl: url.toString(),\n\t\t\t\theaders: { [SharingLinkHeader.isSharingLinkToRedeem]: true },\n\t\t\t});\n\t\t});\n\t\tassert(\n\t\t\tresolvedUrl.shareLinkInfo?.sharingLinkToRedeem !== undefined,\n\t\t\t\"Sharing link should be set in resolved url\",\n\t\t);\n\t});\n\n\tit(\"Encode and decode nav param\", async () => {\n\t\tconst encodedUrl = new URL(sharelink);\n\t\tstoreLocatorInOdspUrl(encodedUrl, {\n\t\t\tsiteUrl,\n\t\t\tdriveId,\n\t\t\titemId,\n\t\t\tdataStorePath,\n\t\t\tcontext: contextStringified,\n\t\t});\n\n\t\tconst locator = getLocatorFromOdspUrl(encodedUrl);\n\t\tassert.strictEqual(locator?.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(locator?.itemId, itemId, \"Item id should be equal\");\n\t\tassert.strictEqual(locator?.dataStorePath, dataStorePath, \"DataStore path should be equal\");\n\t\tassert.strictEqual(locator?.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(locator?.context, contextStringified, \"Context should be equal\");\n\t\tconst parsedContext = JSON.parse(locator?.context) as Record<\n\t\t\tstring | number | symbol,\n\t\t\tunknown\n\t\t>;\n\t\tassert.deepStrictEqual(parsedContext, contextObject, \"Context should be de-serializable\");\n\t});\n\n\tit(\"Check nav param removal for share link\", async () => {\n\t\tconst customShareLink = `${sharelink}?query1=q1`;\n\t\tconst url = new URL(customShareLink);\n\t\tstoreLocatorInOdspUrl(url, { siteUrl, driveId, itemId, dataStorePath });\n\t\tconst resolvedUrl = await mockGetFileLink(Promise.resolve(sharelink), async () => {\n\t\t\treturn urlResolverWithShareLinkFetcher.resolve({\n\t\t\t\turl: url.toString(),\n\t\t\t\theaders: { [SharingLinkHeader.isSharingLinkToRedeem]: true },\n\t\t\t});\n\t\t});\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.shareLinkInfo?.sharingLinkToRedeem,\n\t\t\tcustomShareLink,\n\t\t\t\"Nav param should not exist on sharelink\",\n\t\t);\n\t});\n\n\tit(\"appendLocatorParams - Appends the correct nav param\", async () => {\n\t\tconst testQueryParam = { name: \"query1\", value: \"q1\" };\n\t\tconst customShareLink = `${sharelink}?${testQueryParam.name}=${testQueryParam.value}`;\n\t\tconst testDataStorePath = \"/testpath\";\n\t\tconst appName = \"AppName1\";\n\t\tconst contextVal = \"Context1\";\n\t\tconst testFileVersion = \"123\";\n\t\tconst containerName = \"containerA\";\n\t\tconst urlResolverForShareLink = new OdspDriverUrlResolverForShareLink(\n\t\t\tundefined /* tokenFetcher */,\n\t\t\tundefined /* logger */,\n\t\t\tappName /* appName */,\n\t\t\tasync (_resolvedUrl, _dataStorePath) => contextVal /* context */,\n\t\t);\n\t\tconst resolvedUrl = {\n\t\t\tsiteUrl,\n\t\t\tdriveId,\n\t\t\titemId,\n\t\t\todspResolvedUrl: true,\n\t\t\tfileVersion: testFileVersion,\n\t\t\tcodeHint: { containerPackageName: containerName },\n\t\t} as unknown as IOdspResolvedUrl;\n\n\t\tconst resultUrl = new URL(\n\t\t\tawait urlResolverForShareLink.appendLocatorParams(\n\t\t\t\tcustomShareLink,\n\t\t\t\tresolvedUrl,\n\t\t\t\ttestDataStorePath,\n\t\t\t),\n\t\t);\n\n\t\tconst testQueryParamValue = resultUrl.searchParams.get(testQueryParam.name);\n\t\tassert.strictEqual(\n\t\t\ttestQueryParamValue,\n\t\t\ttestQueryParam.value,\n\t\t\t\"original url's query params should be preserved\",\n\t\t);\n\n\t\tconst locatorParamValue = resultUrl.searchParams.get(locatorQueryParamName);\n\t\tassert(locatorParamValue != null, \"locator parameter should exist is the resulting url\");\n\n\t\tconst decodedLocatorParam = getLocatorFromOdspUrl(resultUrl);\n\t\tassert.strictEqual(decodedLocatorParam?.driveId, driveId, \"driveId should be equal\");\n\t\tassert.strictEqual(decodedLocatorParam?.itemId, itemId, \"itemId should be equal\");\n\t\tassert.strictEqual(decodedLocatorParam?.siteUrl, siteUrl, \"siteUrl should be equal\");\n\t\tassert.strictEqual(\n\t\t\tdecodedLocatorParam?.containerPackageName,\n\t\t\tcontainerName,\n\t\t\t\"containerPackageName should be equal\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tdecodedLocatorParam?.appName,\n\t\t\tappName,\n\t\t\t\"appName should be as provided to the OdspDriverUrlResolverForShareLink constructor\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tdecodedLocatorParam?.dataStorePath,\n\t\t\ttestDataStorePath,\n\t\t\t\"dataStore path should be as provided to the appendLocatorParams\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tdecodedLocatorParam?.fileVersion,\n\t\t\ttestFileVersion,\n\t\t\t\"fileVersion should be equal\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tdecodedLocatorParam?.context,\n\t\t\tcontextVal,\n\t\t\t\"context value should be as provided to the OdspDriverUrlResolverForShareLink constructor\",\n\t\t);\n\t});\n});\n"]}