@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,289 @@
1
+ /*!
2
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
+ * Licensed under the MIT License.
4
+ */
5
+ import { strict as assert } from "node:assert";
6
+ import { DriverHeader } from "@fluidframework/driver-definitions";
7
+ import { OdspDriverUrlResolver } from "../odspDriverUrlResolver.js";
8
+ import { getHashedDocumentId } from "../odspPublicUtils.js";
9
+ import { createOdspCreateContainerRequest } from "../createOdspCreateContainerRequest.js";
10
+ import { createOdspUrl } from "../createOdspUrl.js";
11
+ describe("Odsp Driver Resolver", () => {
12
+ const siteUrl = "https://localhost";
13
+ const driveId = "driveId";
14
+ const filePath = "path";
15
+ const fileName = "fileName";
16
+ const packageName = "packageName";
17
+ let resolver;
18
+ let request;
19
+ beforeEach(() => {
20
+ resolver = new OdspDriverUrlResolver();
21
+ request = createOdspCreateContainerRequest(siteUrl, driveId, filePath, fileName);
22
+ });
23
+ it("Can create new request", async () => {
24
+ assert.strictEqual(
25
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
26
+ request.headers?.[DriverHeader.createNew].fileName, fileName, "Request should contain fileName");
27
+ const url = `${siteUrl}?driveId=${encodeURIComponent(driveId)}&path=${encodeURIComponent(filePath)}`;
28
+ assert.strictEqual(request.url, url, "Request url should match");
29
+ });
30
+ it("Should resolve createNew request", async () => {
31
+ const resolvedUrl = await resolver.resolve(request);
32
+ assert.strictEqual(resolvedUrl.fileName, fileName, "FileName should be equal");
33
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
34
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
35
+ assert.strictEqual(resolvedUrl.itemId, "", "Item id should be absent");
36
+ assert.strictEqual(resolvedUrl.hashedDocumentId, "", "No doc id should be present");
37
+ assert.strictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be empty");
38
+ const [, queryString] = request.url.split("?");
39
+ const searchParams = new URLSearchParams(queryString);
40
+ assert.strictEqual(searchParams.get("path"), filePath, "filePath should match");
41
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive id should match");
42
+ });
43
+ it("Should resolve url with a data store", async () => {
44
+ const resolvedUrl = await resolver.resolve(request);
45
+ const expected = {
46
+ endpoints: {
47
+ snapshotStorageUrl: "",
48
+ attachmentGETStorageUrl: "",
49
+ attachmentPOSTStorageUrl: "",
50
+ deltaStorageUrl: "",
51
+ },
52
+ tokens: {},
53
+ type: "fluid",
54
+ odspResolvedUrl: true,
55
+ id: "odspCreateNew",
56
+ url: "https://https://localhost?driveId=driveId&path=path&version=null",
57
+ siteUrl: "https://localhost",
58
+ hashedDocumentId: "",
59
+ driveId: "driveId",
60
+ itemId: "",
61
+ fileName: "fileName",
62
+ fileVersion: undefined,
63
+ summarizer: false,
64
+ codeHint: { containerPackageName: undefined },
65
+ shareLinkInfo: undefined,
66
+ isClpCompliantApp: undefined,
67
+ };
68
+ assert.deepStrictEqual(resolvedUrl, expected);
69
+ const response = await resolver.getAbsoluteUrl(resolvedUrl, "/datastore");
70
+ const [url, queryString] = response?.split("?") ?? [];
71
+ const searchParams = new URLSearchParams(queryString);
72
+ assert.strictEqual(searchParams.get("itemId"), resolvedUrl.itemId, "Item id should match");
73
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive Id should match");
74
+ assert.strictEqual(searchParams.get("path"), "datastore", "Path should match");
75
+ assert.strictEqual(url, `${siteUrl}`, "Url should match");
76
+ });
77
+ it("Should add codeHint if request contains containerPackageName", async () => {
78
+ const newRequest = request;
79
+ newRequest.url += `&containerPackageName=${encodeURIComponent(packageName)}`;
80
+ const resolvedUrl = await resolver.resolve(request);
81
+ assert.strictEqual(resolvedUrl.codeHint?.containerPackageName, packageName, "containerPackageName should match");
82
+ });
83
+ it("Should resolve url with a string in the codeDetails package", async () => {
84
+ const resolvedUrl = await resolver.resolve(request);
85
+ const codeDetails = {
86
+ package: packageName,
87
+ };
88
+ // codeDetails is cast to any for testing the IFluidCodeDetails approach
89
+ const response = await resolver.getAbsoluteUrl(resolvedUrl, "/datastore",
90
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
91
+ codeDetails);
92
+ const [url, queryString] = response?.split("?") ?? [];
93
+ const searchParams = new URLSearchParams(queryString);
94
+ assert.strictEqual(searchParams.get("itemId"), resolvedUrl.itemId, "Item id should match");
95
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive Id should match");
96
+ assert.strictEqual(searchParams.get("path"), "datastore", "Path should match");
97
+ assert.strictEqual(searchParams.get("containerPackageName"), packageName, "ContainerPackageName should match");
98
+ assert.strictEqual(url, `${siteUrl}`, "Url should match");
99
+ });
100
+ it("should resolve and then getAbsoluteUrl should pick dataStorePath from resolvedUrl", async () => {
101
+ const resolvedUrl1 = await resolver.resolve({
102
+ url: createOdspUrl({
103
+ driveId,
104
+ itemId: "itemId",
105
+ siteUrl,
106
+ dataStorePath: "datastore",
107
+ fileVersion: "0.1",
108
+ appName: "app",
109
+ containerPackageName: packageName,
110
+ }),
111
+ });
112
+ const response = await resolver.getAbsoluteUrl(resolvedUrl1, "");
113
+ const resolvedUrl2 = await resolver.resolve({ url: response });
114
+ assert.strictEqual(resolvedUrl2.driveId, driveId, "Drive id should be equal");
115
+ assert.strictEqual(resolvedUrl2.dataStorePath, "datastore", "DataStorePath should be equal");
116
+ assert.strictEqual(resolvedUrl2.codeHint?.containerPackageName, packageName, "DataStorePath should be equal");
117
+ assert.strictEqual(resolvedUrl2.siteUrl, siteUrl, "SiteUrl should be equal");
118
+ assert.strictEqual(resolvedUrl2.itemId, "itemId", "Item id should be absent");
119
+ });
120
+ it("Should resolve url given container package info", async () => {
121
+ const resolvedUrl = await resolver.resolve(request);
122
+ const response = await resolver.getAbsoluteUrl(resolvedUrl, "/datastore", {
123
+ name: packageName,
124
+ });
125
+ const [url, queryString] = response?.split("?") ?? [];
126
+ const searchParams = new URLSearchParams(queryString);
127
+ assert.strictEqual(searchParams.get("itemId"), resolvedUrl.itemId, "Item id should match");
128
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive Id should match");
129
+ assert.strictEqual(searchParams.get("path"), "datastore", "Path should match");
130
+ assert.strictEqual(searchParams.get("containerPackageName"), packageName, "ContainerPackageName should match");
131
+ assert.strictEqual(url, `${siteUrl}`, "Url should match");
132
+ });
133
+ it("Should resolve url with a IFluidPackage in the codeDetails package", async () => {
134
+ const resolvedUrl = await resolver.resolve(request);
135
+ const fluidPackage = {
136
+ name: packageName,
137
+ fluid: {},
138
+ };
139
+ const codeDetails = { package: fluidPackage };
140
+ // codeDetails is cast to any for testing the IFluidCodeDetails approach
141
+ const response = await resolver.getAbsoluteUrl(resolvedUrl, "/datastore",
142
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any
143
+ codeDetails);
144
+ const [url, queryString] = response?.split("?") ?? [];
145
+ const searchParams = new URLSearchParams(queryString);
146
+ assert.strictEqual(searchParams.get("itemId"), resolvedUrl.itemId, "Item id should match");
147
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive Id should match");
148
+ assert.strictEqual(searchParams.get("path"), "datastore", "Path should match");
149
+ assert.strictEqual(searchParams.get("containerPackageName"), packageName, "ContainerPackageName should match");
150
+ assert.strictEqual(url, `${siteUrl}`, "Url should match");
151
+ });
152
+ it("Should resolve url with a codeHint in the resolved url", async () => {
153
+ const newRequest = request;
154
+ newRequest.url += `&containerPackageName=${encodeURIComponent(packageName)}`;
155
+ const resolvedUrl = await resolver.resolve(request);
156
+ const response = await resolver.getAbsoluteUrl(resolvedUrl, "/datastore");
157
+ const [url, queryString] = response?.split("?") ?? [];
158
+ const searchParams = new URLSearchParams(queryString);
159
+ assert.strictEqual(searchParams.get("itemId"), resolvedUrl.itemId, "Item id should match");
160
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive Id should match");
161
+ assert.strictEqual(searchParams.get("path"), "datastore", "Path should match");
162
+ assert.strictEqual(searchParams.get("containerPackageName"), packageName, "ContainerPackageName should match");
163
+ assert.strictEqual(url, `${siteUrl}`, "Url should match");
164
+ });
165
+ it("Should resolve url with empty file path", async () => {
166
+ // Arrange
167
+ const testFilePath = "";
168
+ request = createOdspCreateContainerRequest(siteUrl, driveId, testFilePath, fileName);
169
+ // Act
170
+ const resolvedUrl = await resolver.resolve(request);
171
+ // Assert
172
+ assert.strictEqual(resolvedUrl.fileName, fileName, "FileName should be equal");
173
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
174
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
175
+ assert.strictEqual(resolvedUrl.itemId, "", "Item id should be absent");
176
+ assert.strictEqual(resolvedUrl.hashedDocumentId, "", "No doc id should be present");
177
+ assert.strictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be empty");
178
+ assert.strictEqual(resolvedUrl.codeHint?.containerPackageName, undefined, "Container Package Name should be undefined");
179
+ const [, queryString] = request.url.split("?");
180
+ const searchParams = new URLSearchParams(queryString);
181
+ assert.strictEqual(searchParams.get("path"), testFilePath, "filePath should match");
182
+ assert.strictEqual(searchParams.get("driveId"), driveId, "Drive id should match");
183
+ });
184
+ it("Should resolve url with non-empty file path and item id", async () => {
185
+ // Arrange
186
+ const testFilePath = "data1";
187
+ const itemId = "item1";
188
+ const testRequest = {
189
+ url: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,
190
+ headers: { createNew: { fileName: `${fileName}` } },
191
+ };
192
+ // Act
193
+ const resolvedUrl = await resolver.resolve(testRequest);
194
+ // Assert
195
+ assert.strictEqual(resolvedUrl.fileName, fileName, "FileName should be equal");
196
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
197
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
198
+ assert.strictEqual(resolvedUrl.itemId, "", "Item id should be absent");
199
+ assert.strictEqual(resolvedUrl.hashedDocumentId, "", "No doc id should be present");
200
+ assert.strictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be empty");
201
+ const expectedResolvedUrl = `https://${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}` +
202
+ `&version=null`;
203
+ assert.strictEqual(resolvedUrl.url, expectedResolvedUrl, "resolved url is wrong");
204
+ });
205
+ it("Should resolve url with file path containing 3 data object ids", async () => {
206
+ // Arrange
207
+ const testFilePath = "data1/data2/data3";
208
+ const itemId = "item1";
209
+ const testRequest = {
210
+ url: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,
211
+ };
212
+ // Act
213
+ const resolvedUrl = await resolver.resolve(testRequest);
214
+ // Assert
215
+ assert.strictEqual(resolvedUrl.fileName, "", "FileName should be absent");
216
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
217
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
218
+ assert.strictEqual(resolvedUrl.itemId, itemId, "Item id should be equal");
219
+ assert.strictEqual(resolvedUrl.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be present");
220
+ assert.notStrictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be present");
221
+ const expectedResolvedUrl = `https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;
222
+ assert.strictEqual(resolvedUrl.url, expectedResolvedUrl, "resolved url is wrong");
223
+ });
224
+ it("Should resolve url with file path containing ending slashes", async () => {
225
+ // Arrange
226
+ const testFilePath = "data1/data2//";
227
+ const itemId = "item1";
228
+ const testRequest = {
229
+ url: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,
230
+ };
231
+ // Act
232
+ const resolvedUrl = await resolver.resolve(testRequest);
233
+ // Assert
234
+ assert.strictEqual(resolvedUrl.fileName, "", "FileName should be absent");
235
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
236
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
237
+ assert.strictEqual(resolvedUrl.itemId, itemId, "Item id should be equal");
238
+ assert.strictEqual(resolvedUrl.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be present");
239
+ assert.notStrictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be present");
240
+ const expectedResolvedUrl = `https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;
241
+ assert.strictEqual(resolvedUrl.url, expectedResolvedUrl, "resolved url is wrong");
242
+ });
243
+ it("Should resolve url with special characters", async () => {
244
+ // Arrange
245
+ const testFilePath = "data1/data2/!@$";
246
+ const itemId = "item!@$";
247
+ const testRequest = {
248
+ url: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,
249
+ };
250
+ // Act
251
+ const resolvedUrl = await resolver.resolve(testRequest);
252
+ // Assert
253
+ assert.strictEqual(resolvedUrl.fileName, "", "FileName should be absent");
254
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
255
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
256
+ assert.strictEqual(resolvedUrl.itemId, itemId, "Item id should be equal");
257
+ assert.strictEqual(resolvedUrl.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be present");
258
+ assert.notStrictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be present");
259
+ const expectedResolvedUrl = `https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;
260
+ assert.strictEqual(resolvedUrl.url, expectedResolvedUrl, "resolved url is wrong");
261
+ });
262
+ it("resolves urls with datastore path in url path", async () => {
263
+ const absoluteUrl = "https://localhost/datastore?driveId=driveId&itemId=&path=/";
264
+ const resolvedUrl = await resolver.resolve({ url: absoluteUrl });
265
+ assert.strictEqual(resolvedUrl.url, "https://placeholder/placeholder/AV5r7rhbMqs3T5cL8TUpqk6FpWldev0qKsKlnjkC5mg%3D/");
266
+ });
267
+ it("Should resolve url with file version", async () => {
268
+ // Arrange
269
+ const testFilePath = "data1";
270
+ const itemId = "item";
271
+ const fileVersion = "285.0";
272
+ const testRequest = {
273
+ url: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}&fileVersion=${fileVersion}`,
274
+ };
275
+ // Act
276
+ const resolvedUrl = await resolver.resolve(testRequest);
277
+ // Assert
278
+ assert.strictEqual(resolvedUrl.fileName, "", "FileName should be absent");
279
+ assert.strictEqual(resolvedUrl.driveId, driveId, "Drive id should be equal");
280
+ assert.strictEqual(resolvedUrl.siteUrl, siteUrl, "SiteUrl should be equal");
281
+ assert.strictEqual(resolvedUrl.itemId, itemId, "Item id should be equal");
282
+ assert.strictEqual(resolvedUrl.hashedDocumentId, await getHashedDocumentId(driveId, itemId), "Doc id should be present");
283
+ assert.notStrictEqual(resolvedUrl.endpoints.snapshotStorageUrl, "", "Snapshot url should be present");
284
+ assert.strictEqual(resolvedUrl.fileVersion, fileVersion, "FileVersion should be equal");
285
+ const expectedResolvedUrl = `https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;
286
+ assert.strictEqual(resolvedUrl.url, expectedResolvedUrl, "resolved url is wrong");
287
+ });
288
+ });
289
+ //# sourceMappingURL=odspDriverResolverTest.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspDriverResolverTest.spec.js","sourceRoot":"","sources":["../../src/test/odspDriverResolverTest.spec.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { strict as assert } from \"node:assert\";\nimport { DriverHeader } from \"@fluidframework/driver-definitions\";\nimport { IRequest } from \"@fluidframework/core-interfaces\";\nimport { IOdspResolvedUrl } from \"@fluidframework/odsp-driver-definitions\";\nimport { OdspDriverUrlResolver } from \"../odspDriverUrlResolver.js\";\nimport { getHashedDocumentId } from \"../odspPublicUtils.js\";\nimport { createOdspCreateContainerRequest } from \"../createOdspCreateContainerRequest.js\";\nimport { createOdspUrl } from \"../createOdspUrl.js\";\n\ndescribe(\"Odsp Driver Resolver\", () => {\n\tconst siteUrl = \"https://localhost\";\n\tconst driveId = \"driveId\";\n\tconst filePath = \"path\";\n\tconst fileName = \"fileName\";\n\tconst packageName = \"packageName\";\n\tlet resolver: OdspDriverUrlResolver;\n\tlet request: IRequest;\n\n\tbeforeEach(() => {\n\t\tresolver = new OdspDriverUrlResolver();\n\t\trequest = createOdspCreateContainerRequest(siteUrl, driveId, filePath, fileName);\n\t});\n\n\tit(\"Can create new request\", async () => {\n\t\tassert.strictEqual(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\trequest.headers?.[DriverHeader.createNew].fileName,\n\t\t\tfileName,\n\t\t\t\"Request should contain fileName\",\n\t\t);\n\t\tconst url = `${siteUrl}?driveId=${encodeURIComponent(driveId)}&path=${encodeURIComponent(\n\t\t\tfilePath,\n\t\t)}`;\n\t\tassert.strictEqual(request.url, url, \"Request url should match\");\n\t});\n\n\tit(\"Should resolve createNew request\", async () => {\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tassert.strictEqual(resolvedUrl.fileName, fileName, \"FileName should be equal\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, \"\", \"Item id should be absent\");\n\t\tassert.strictEqual(resolvedUrl.hashedDocumentId, \"\", \"No doc id should be present\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be empty\",\n\t\t);\n\n\t\tconst [, queryString] = request.url.split(\"?\");\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"path\"), filePath, \"filePath should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive id should match\");\n\t});\n\n\tit(\"Should resolve url with a data store\", async () => {\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tconst expected: IOdspResolvedUrl = {\n\t\t\tendpoints: {\n\t\t\t\tsnapshotStorageUrl: \"\",\n\t\t\t\tattachmentGETStorageUrl: \"\",\n\t\t\t\tattachmentPOSTStorageUrl: \"\",\n\t\t\t\tdeltaStorageUrl: \"\",\n\t\t\t},\n\t\t\ttokens: {},\n\t\t\ttype: \"fluid\",\n\t\t\todspResolvedUrl: true,\n\t\t\tid: \"odspCreateNew\",\n\t\t\turl: \"https://https://localhost?driveId=driveId&path=path&version=null\",\n\t\t\tsiteUrl: \"https://localhost\",\n\t\t\thashedDocumentId: \"\",\n\t\t\tdriveId: \"driveId\",\n\t\t\titemId: \"\",\n\t\t\tfileName: \"fileName\",\n\t\t\tfileVersion: undefined,\n\t\t\tsummarizer: false,\n\t\t\tcodeHint: { containerPackageName: undefined },\n\t\t\tshareLinkInfo: undefined,\n\t\t\tisClpCompliantApp: undefined,\n\t\t};\n\t\tassert.deepStrictEqual(resolvedUrl, expected);\n\t\tconst response = await resolver.getAbsoluteUrl(resolvedUrl, \"/datastore\");\n\n\t\tconst [url, queryString] = response?.split(\"?\") ?? [];\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"itemId\"), resolvedUrl.itemId, \"Item id should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive Id should match\");\n\t\tassert.strictEqual(searchParams.get(\"path\"), \"datastore\", \"Path should match\");\n\t\tassert.strictEqual(url, `${siteUrl}`, \"Url should match\");\n\t});\n\n\tit(\"Should add codeHint if request contains containerPackageName\", async () => {\n\t\tconst newRequest = request;\n\t\tnewRequest.url += `&containerPackageName=${encodeURIComponent(packageName)}`;\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.codeHint?.containerPackageName,\n\t\t\tpackageName,\n\t\t\t\"containerPackageName should match\",\n\t\t);\n\t});\n\n\tit(\"Should resolve url with a string in the codeDetails package\", async () => {\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tconst codeDetails = {\n\t\t\tpackage: packageName,\n\t\t};\n\t\t// codeDetails is cast to any for testing the IFluidCodeDetails approach\n\t\tconst response = await resolver.getAbsoluteUrl(\n\t\t\tresolvedUrl,\n\t\t\t\"/datastore\",\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n\t\t\tcodeDetails as any,\n\t\t);\n\n\t\tconst [url, queryString] = response?.split(\"?\") ?? [];\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"itemId\"), resolvedUrl.itemId, \"Item id should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive Id should match\");\n\t\tassert.strictEqual(searchParams.get(\"path\"), \"datastore\", \"Path should match\");\n\t\tassert.strictEqual(\n\t\t\tsearchParams.get(\"containerPackageName\"),\n\t\t\tpackageName,\n\t\t\t\"ContainerPackageName should match\",\n\t\t);\n\t\tassert.strictEqual(url, `${siteUrl}`, \"Url should match\");\n\t});\n\n\tit(\"should resolve and then getAbsoluteUrl should pick dataStorePath from resolvedUrl\", async () => {\n\t\tconst resolvedUrl1 = await resolver.resolve({\n\t\t\turl: createOdspUrl({\n\t\t\t\tdriveId,\n\t\t\t\titemId: \"itemId\",\n\t\t\t\tsiteUrl,\n\t\t\t\tdataStorePath: \"datastore\",\n\t\t\t\tfileVersion: \"0.1\",\n\t\t\t\tappName: \"app\",\n\t\t\t\tcontainerPackageName: packageName,\n\t\t\t}),\n\t\t});\n\t\tconst response = await resolver.getAbsoluteUrl(resolvedUrl1, \"\");\n\n\t\tconst resolvedUrl2 = await resolver.resolve({ url: response });\n\t\tassert.strictEqual(resolvedUrl2.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl2.dataStorePath,\n\t\t\t\"datastore\",\n\t\t\t\"DataStorePath should be equal\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl2.codeHint?.containerPackageName,\n\t\t\tpackageName,\n\t\t\t\"DataStorePath should be equal\",\n\t\t);\n\t\tassert.strictEqual(resolvedUrl2.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl2.itemId, \"itemId\", \"Item id should be absent\");\n\t});\n\n\tit(\"Should resolve url given container package info\", async () => {\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tconst response = await resolver.getAbsoluteUrl(resolvedUrl, \"/datastore\", {\n\t\t\tname: packageName,\n\t\t});\n\n\t\tconst [url, queryString] = response?.split(\"?\") ?? [];\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"itemId\"), resolvedUrl.itemId, \"Item id should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive Id should match\");\n\t\tassert.strictEqual(searchParams.get(\"path\"), \"datastore\", \"Path should match\");\n\t\tassert.strictEqual(\n\t\t\tsearchParams.get(\"containerPackageName\"),\n\t\t\tpackageName,\n\t\t\t\"ContainerPackageName should match\",\n\t\t);\n\t\tassert.strictEqual(url, `${siteUrl}`, \"Url should match\");\n\t});\n\n\tit(\"Should resolve url with a IFluidPackage in the codeDetails package\", async () => {\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tconst fluidPackage = {\n\t\t\tname: packageName,\n\t\t\tfluid: {},\n\t\t};\n\t\tconst codeDetails = { package: fluidPackage };\n\t\t// codeDetails is cast to any for testing the IFluidCodeDetails approach\n\t\tconst response = await resolver.getAbsoluteUrl(\n\t\t\tresolvedUrl,\n\t\t\t\"/datastore\",\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any\n\t\t\tcodeDetails as any,\n\t\t);\n\n\t\tconst [url, queryString] = response?.split(\"?\") ?? [];\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"itemId\"), resolvedUrl.itemId, \"Item id should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive Id should match\");\n\t\tassert.strictEqual(searchParams.get(\"path\"), \"datastore\", \"Path should match\");\n\t\tassert.strictEqual(\n\t\t\tsearchParams.get(\"containerPackageName\"),\n\t\t\tpackageName,\n\t\t\t\"ContainerPackageName should match\",\n\t\t);\n\t\tassert.strictEqual(url, `${siteUrl}`, \"Url should match\");\n\t});\n\n\tit(\"Should resolve url with a codeHint in the resolved url\", async () => {\n\t\tconst newRequest = request;\n\t\tnewRequest.url += `&containerPackageName=${encodeURIComponent(packageName)}`;\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\t\tconst response = await resolver.getAbsoluteUrl(resolvedUrl, \"/datastore\");\n\n\t\tconst [url, queryString] = response?.split(\"?\") ?? [];\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"itemId\"), resolvedUrl.itemId, \"Item id should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive Id should match\");\n\t\tassert.strictEqual(searchParams.get(\"path\"), \"datastore\", \"Path should match\");\n\t\tassert.strictEqual(\n\t\t\tsearchParams.get(\"containerPackageName\"),\n\t\t\tpackageName,\n\t\t\t\"ContainerPackageName should match\",\n\t\t);\n\t\tassert.strictEqual(url, `${siteUrl}`, \"Url should match\");\n\t});\n\n\tit(\"Should resolve url with empty file path\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"\";\n\t\trequest = createOdspCreateContainerRequest(siteUrl, driveId, testFilePath, fileName);\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(request);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, fileName, \"FileName should be equal\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, \"\", \"Item id should be absent\");\n\t\tassert.strictEqual(resolvedUrl.hashedDocumentId, \"\", \"No doc id should be present\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be empty\",\n\t\t);\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.codeHint?.containerPackageName,\n\t\t\tundefined,\n\t\t\t\"Container Package Name should be undefined\",\n\t\t);\n\n\t\tconst [, queryString] = request.url.split(\"?\");\n\t\tconst searchParams = new URLSearchParams(queryString);\n\t\tassert.strictEqual(searchParams.get(\"path\"), testFilePath, \"filePath should match\");\n\t\tassert.strictEqual(searchParams.get(\"driveId\"), driveId, \"Drive id should match\");\n\t});\n\n\tit(\"Should resolve url with non-empty file path and item id\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"data1\";\n\t\tconst itemId = \"item1\";\n\t\tconst testRequest: IRequest = {\n\t\t\turl: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,\n\t\t\theaders: { createNew: { fileName: `${fileName}` } },\n\t\t};\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(testRequest);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, fileName, \"FileName should be equal\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, \"\", \"Item id should be absent\");\n\t\tassert.strictEqual(resolvedUrl.hashedDocumentId, \"\", \"No doc id should be present\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be empty\",\n\t\t);\n\n\t\tconst expectedResolvedUrl =\n\t\t\t`https://${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}` +\n\t\t\t`&version=null`;\n\t\tassert.strictEqual(resolvedUrl.url, expectedResolvedUrl, \"resolved url is wrong\");\n\t});\n\n\tit(\"Should resolve url with file path containing 3 data object ids\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"data1/data2/data3\";\n\t\tconst itemId = \"item1\";\n\t\tconst testRequest: IRequest = {\n\t\t\turl: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,\n\t\t};\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(testRequest);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, \"\", \"FileName should be absent\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, itemId, \"Item id should be equal\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.hashedDocumentId,\n\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\"Doc id should be present\",\n\t\t);\n\t\tassert.notStrictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be present\",\n\t\t);\n\n\t\tconst expectedResolvedUrl =\n\t\t\t`https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;\n\t\tassert.strictEqual(resolvedUrl.url, expectedResolvedUrl, \"resolved url is wrong\");\n\t});\n\n\tit(\"Should resolve url with file path containing ending slashes\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"data1/data2//\";\n\t\tconst itemId = \"item1\";\n\t\tconst testRequest: IRequest = {\n\t\t\turl: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,\n\t\t};\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(testRequest);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, \"\", \"FileName should be absent\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, itemId, \"Item id should be equal\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.hashedDocumentId,\n\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\"Doc id should be present\",\n\t\t);\n\t\tassert.notStrictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be present\",\n\t\t);\n\n\t\tconst expectedResolvedUrl =\n\t\t\t`https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;\n\t\tassert.strictEqual(resolvedUrl.url, expectedResolvedUrl, \"resolved url is wrong\");\n\t});\n\n\tit(\"Should resolve url with special characters\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"data1/data2/!@$\";\n\t\tconst itemId = \"item!@$\";\n\t\tconst testRequest: IRequest = {\n\t\t\turl: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}`,\n\t\t};\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(testRequest);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, \"\", \"FileName should be absent\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, itemId, \"Item id should be equal\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.hashedDocumentId,\n\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\"Doc id should be present\",\n\t\t);\n\t\tassert.notStrictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be present\",\n\t\t);\n\n\t\tconst expectedResolvedUrl =\n\t\t\t`https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;\n\t\tassert.strictEqual(resolvedUrl.url, expectedResolvedUrl, \"resolved url is wrong\");\n\t});\n\n\tit(\"resolves urls with datastore path in url path\", async () => {\n\t\tconst absoluteUrl = \"https://localhost/datastore?driveId=driveId&itemId=&path=/\";\n\t\tconst resolvedUrl = await resolver.resolve({ url: absoluteUrl });\n\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.url,\n\t\t\t\"https://placeholder/placeholder/AV5r7rhbMqs3T5cL8TUpqk6FpWldev0qKsKlnjkC5mg%3D/\",\n\t\t);\n\t});\n\n\tit(\"Should resolve url with file version\", async () => {\n\t\t// Arrange\n\t\tconst testFilePath = \"data1\";\n\t\tconst itemId = \"item\";\n\t\tconst fileVersion = \"285.0\";\n\t\tconst testRequest: IRequest = {\n\t\t\turl: `${siteUrl}?driveId=${driveId}&path=${testFilePath}&itemId=${itemId}&fileVersion=${fileVersion}`,\n\t\t};\n\n\t\t// Act\n\t\tconst resolvedUrl = await resolver.resolve(testRequest);\n\n\t\t// Assert\n\t\tassert.strictEqual(resolvedUrl.fileName, \"\", \"FileName should be absent\");\n\t\tassert.strictEqual(resolvedUrl.driveId, driveId, \"Drive id should be equal\");\n\t\tassert.strictEqual(resolvedUrl.siteUrl, siteUrl, \"SiteUrl should be equal\");\n\t\tassert.strictEqual(resolvedUrl.itemId, itemId, \"Item id should be equal\");\n\t\tassert.strictEqual(\n\t\t\tresolvedUrl.hashedDocumentId,\n\t\t\tawait getHashedDocumentId(driveId, itemId),\n\t\t\t\"Doc id should be present\",\n\t\t);\n\t\tassert.notStrictEqual(\n\t\t\tresolvedUrl.endpoints.snapshotStorageUrl,\n\t\t\t\"\",\n\t\t\t\"Snapshot url should be present\",\n\t\t);\n\t\tassert.strictEqual(resolvedUrl.fileVersion, fileVersion, \"FileVersion should be equal\");\n\n\t\tconst expectedResolvedUrl =\n\t\t\t`https://placeholder/placeholder/${resolvedUrl.hashedDocumentId}/` + `${testFilePath}`;\n\t\tassert.strictEqual(resolvedUrl.url, expectedResolvedUrl, \"resolved url is wrong\");\n\t});\n});\n"]}