@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,299 @@
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 { createOdspNetworkError, throwOdspNetworkError, } from "@fluidframework/odsp-doclib-utils/internal";
7
+ import { NonRetryableError } from "@fluidframework/driver-utils";
8
+ import { OdspErrorTypes } from "@fluidframework/odsp-driver-definitions";
9
+ import { fetchAndParseAsJSONHelper, getWithRetryForTokenRefresh } from "../odspUtils.js";
10
+ import { errorObjectFromSocketError } from "../odspError.js";
11
+ import { pkgVersion } from "../packageVersion.js";
12
+ import { mockFetchError } from "./mockFetch.js";
13
+ describe("Odsp Error", () => {
14
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
15
+ const testResponse = {
16
+ // Implements only part of Response.headers
17
+ statusText: "testStatusText",
18
+ type: "default",
19
+ headers: {
20
+ get(name) {
21
+ if (name === "sprequestguid") {
22
+ return "xxx-xxx";
23
+ }
24
+ return null;
25
+ },
26
+ },
27
+ };
28
+ /**
29
+ * Checks if the input is an {@link IGenericNetworkError}.
30
+ */
31
+ function isIGenericNetworkError(input) {
32
+ return (input?.errorType ===
33
+ OdspErrorTypes.genericNetworkError);
34
+ }
35
+ /**
36
+ * Checks if the input is an {@link IThrottlingWarning}.
37
+ */
38
+ function isIThrottlingWarning(input) {
39
+ return input?.errorType === OdspErrorTypes.throttlingError;
40
+ }
41
+ /**
42
+ * Checks if the input is an {@link IThrottlingWarning}.
43
+ */
44
+ function isIAuthorizationError(input) {
45
+ return (input?.errorType === OdspErrorTypes.authorizationError);
46
+ }
47
+ function createOdspNetworkErrorWithResponse(errorMessage, statusCode, response, responseText) {
48
+ try {
49
+ throwOdspNetworkError(errorMessage, statusCode, response ?? testResponse, responseText);
50
+ assert.fail("Not reached - throwOdspNetworkError should have thrown");
51
+ }
52
+ catch (error) {
53
+ return error;
54
+ }
55
+ }
56
+ it("throwOdspNetworkError first-class properties", async () => {
57
+ const networkError = createOdspNetworkErrorWithResponse("some message", 400);
58
+ if (networkError.errorType !== OdspErrorTypes.genericNetworkError) {
59
+ assert.fail("networkError should be a genericNetworkError");
60
+ }
61
+ assert(networkError.message.includes("some message"), "message should contain original message");
62
+ assert(
63
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any
64
+ networkError.responseType === "default", "message should contain Response.type");
65
+ assert.equal(false, networkError.canRetry, "canRetry should be false");
66
+ });
67
+ it("throwOdspNetworkError sprequestguid exists", async () => {
68
+ const error1 = createOdspNetworkErrorWithResponse("some message", 400);
69
+ const errorBag = { ...error1.getTelemetryProperties() };
70
+ assert.equal("xxx-xxx", errorBag.sprequestguid, "sprequestguid should be 'xxx-xxx'");
71
+ });
72
+ it("throwOdspNetworkError sprequestguid undefined", async () => {
73
+ const error1 = createOdspNetworkError("some message", 400);
74
+ const errorBag = { ...error1.getTelemetryProperties() };
75
+ assert.equal(undefined, errorBag.sprequestguid, "sprequestguid should not be defined");
76
+ });
77
+ it("errorObjectFromSocketError no retryAfter", async () => {
78
+ const socketError = {
79
+ message: "testMessage",
80
+ code: 400,
81
+ };
82
+ const networkError = errorObjectFromSocketError(socketError, "disconnect");
83
+ assert(isIGenericNetworkError(networkError), "networkError should be a genericNetworkError");
84
+ assert(networkError.message.includes("disconnect"), "error message should include handler name");
85
+ assert(networkError.message.includes("testMessage"), "error message should include socket error message");
86
+ assert.equal(networkError.canRetry, false);
87
+ assert.equal(networkError.statusCode, 400);
88
+ });
89
+ it("errorObjectFromSocketError with retryFilter", async () => {
90
+ const socketError = {
91
+ message: "testMessage",
92
+ code: 400,
93
+ };
94
+ const networkError = errorObjectFromSocketError(socketError, "error");
95
+ assert(isIGenericNetworkError(networkError), "networkError should be a genericNetworkError");
96
+ assert(networkError.message.includes("error"), "error message should include handler name");
97
+ assert(networkError.message.includes("testMessage"), "error message should include socket error message");
98
+ assert.equal(networkError.canRetry, false);
99
+ assert.equal(networkError.statusCode, 400);
100
+ });
101
+ it("errorObjectFromSocketError with inner errors", async () => {
102
+ const socketError = {
103
+ message: "testMessage",
104
+ code: 400,
105
+ error: {
106
+ code: "notAllowed",
107
+ innerError: {
108
+ code: "ipBlocked",
109
+ innerError: {
110
+ code: "SurelyBlocked",
111
+ },
112
+ },
113
+ message: "Blocking due to policy",
114
+ },
115
+ };
116
+ const networkError = errorObjectFromSocketError(socketError, "error");
117
+ assert(isIGenericNetworkError(networkError), "networkError should be a genericNetworkError");
118
+ assert(networkError.message.includes("error"), "error message should include handler name");
119
+ assert(networkError.message.includes("testMessage"), "error message should include socket error message");
120
+ assert.equal(networkError.canRetry, false);
121
+ assert.equal(networkError.statusCode, 400);
122
+ assert.equal(networkError.getTelemetryProperties().innerMostErrorCode, "SurelyBlocked", "Innermost error code should be correct");
123
+ assert.equal(networkError.facetCodes?.length, 3, "3 facet codes should be there");
124
+ });
125
+ it("errorObjectFromSocketError with retryAfter", async () => {
126
+ const socketError = {
127
+ message: "testMessage",
128
+ code: 429,
129
+ retryAfter: 10,
130
+ };
131
+ const networkError = errorObjectFromSocketError(socketError, "handler");
132
+ assert(isIThrottlingWarning(networkError), "networkError should be a throttlingError");
133
+ assert(networkError.message.includes("handler"), "error message should include handler name");
134
+ assert(networkError.message.includes("testMessage"), "error message should include socket error message");
135
+ assert.equal(networkError.retryAfterSeconds, 10);
136
+ });
137
+ it("Access Denied retries", async () => {
138
+ const res = await getWithRetryForTokenRefresh(async (options) => {
139
+ if (options.refresh) {
140
+ return 1;
141
+ }
142
+ else {
143
+ throwOdspNetworkError("some error", 401, testResponse);
144
+ }
145
+ });
146
+ assert.equal(res, 1, "did not successfully retried with new token");
147
+ });
148
+ it("fetch incorrect response retries", async () => {
149
+ const res = await getWithRetryForTokenRefresh(async (options) => {
150
+ if (options.refresh) {
151
+ return 1;
152
+ }
153
+ else {
154
+ throw new NonRetryableError("some message", OdspErrorTypes.incorrectServerResponse, { driverVersion: pkgVersion });
155
+ }
156
+ });
157
+ assert.equal(res, 1, "did not successfully retried with new token");
158
+ });
159
+ it("404 errors - no retries", async () => {
160
+ const res = getWithRetryForTokenRefresh(async (options) => {
161
+ if (options.refresh) {
162
+ return 1;
163
+ }
164
+ else {
165
+ throwOdspNetworkError("some error", 404, testResponse);
166
+ }
167
+ });
168
+ await assert.rejects(res, "Other errors should not result in retries!");
169
+ });
170
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
171
+ const testResponseWithInsufficientClaims = {
172
+ statusText: "testStatusText",
173
+ type: "default",
174
+ headers: {
175
+ get(name) {
176
+ if (name === "sprequestguid") {
177
+ return "xxx-xxx";
178
+ }
179
+ if (name === "www-authenticate") {
180
+ return 'Bearer realm="6c482541-f706-4168-9e58-8e35a9992f58",client_id="00000003-0000-0ff1-ce00-000000000000",trusted_issuers="00000001-0000-0000-c000-000000000000@*,D3776938-3DBA-481F-A652-4BEDFCAB7CD8@*,https://sts.windows.net/*/,00000003-0000-0ff1-ce00-000000000000@90140122-8516-11e1-8eff-49304924019b",authorization_uri="https://login.windows.net/common/oauth2/authorize",error="insufficient_claims",claims="eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTU5Nzk1OTA5MCJ9fX0="';
181
+ }
182
+ return null;
183
+ },
184
+ },
185
+ };
186
+ function throwAuthorizationErrorWithInsufficientClaims(errorMessage) {
187
+ throwOdspNetworkError(errorMessage, 401, testResponseWithInsufficientClaims);
188
+ }
189
+ it("Authorization error with insufficient claims first-class properties", async () => {
190
+ try {
191
+ throwAuthorizationErrorWithInsufficientClaims("TestMessage");
192
+ }
193
+ catch (error) {
194
+ assert(isIAuthorizationError(error), "error should be a IAuthorizationError");
195
+ assert(error.message.includes("TestMessage"), "message should contain original message");
196
+ assert.equal(error.canRetry, false, "canRetry should be false");
197
+ assert.equal(error.claims, '{"access_token":{"nbf":{"essential":true, "value":"1597959090"}}}', "claims should be extracted from response");
198
+ }
199
+ });
200
+ it("Authorization error with insufficient claims results in retry with claims passed in options", async () => {
201
+ const res = await getWithRetryForTokenRefresh(async (options) => {
202
+ if (options.refresh &&
203
+ options.claims ===
204
+ '{"access_token":{"nbf":{"essential":true, "value":"1597959090"}}}') {
205
+ return 1;
206
+ }
207
+ else {
208
+ throwAuthorizationErrorWithInsufficientClaims("some error");
209
+ }
210
+ });
211
+ assert.equal(res, 1, "did not successfully retried with claims");
212
+ });
213
+ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions
214
+ const testResponseWithRealm = {
215
+ statusText: "testStatusText",
216
+ type: "default",
217
+ headers: {
218
+ get(name) {
219
+ if (name === "sprequestguid") {
220
+ return "xxx-xxx";
221
+ }
222
+ if (name === "www-authenticate") {
223
+ return 'Bearer realm="6c482541-f706-4168-9e58-8e35a9992f58",client_id="00000003-0000-0ff1-ce00-000000000000",trusted_issuers="00000001-0000-0000-c000-000000000000@*,D3776938-3DBA-481F-A652-4BEDFCAB7CD8@*,https://sts.windows.net/*/,00000003-0000-0ff1-ce00-000000000000@90140122-8516-11e1-8eff-49304924019b",authorization_uri="https://login.windows.net/common/oauth2/authorize"';
224
+ }
225
+ return null;
226
+ },
227
+ },
228
+ };
229
+ function throwAuthorizationErrorWithRealm(errorMessage) {
230
+ throwOdspNetworkError(errorMessage, 401, testResponseWithRealm);
231
+ }
232
+ it("Authorization error with realm first-class properties", async () => {
233
+ try {
234
+ throwAuthorizationErrorWithRealm("TestMessage");
235
+ }
236
+ catch (error) {
237
+ assert(isIAuthorizationError(error), "error should be a IAuthorizationError");
238
+ assert(error.message.includes("TestMessage"), "message should contain original message");
239
+ assert.strictEqual(error.canRetry, false, "canRetry should be false");
240
+ assert.strictEqual(error.tenantId, "6c482541-f706-4168-9e58-8e35a9992f58", "realm should be extracted from response");
241
+ }
242
+ });
243
+ it("Authorization error with realm results in retry and realm passed as tenant id", async () => {
244
+ const res = await getWithRetryForTokenRefresh(async (options) => {
245
+ if (options.refresh && options.tenantId === "6c482541-f706-4168-9e58-8e35a9992f58") {
246
+ return 1;
247
+ }
248
+ else {
249
+ throwAuthorizationErrorWithRealm("some error");
250
+ }
251
+ });
252
+ assert.strictEqual(res, 1, "did not successfully retried with realm passed as tenantId");
253
+ });
254
+ it("Check Epoch Mismatch error props", async () => {
255
+ const error = createOdspNetworkErrorWithResponse("epochMismatch", 409);
256
+ assert.strictEqual(error.errorType, OdspErrorTypes.fileOverwrittenInStorage, "Error type should be fileOverwrittenInStorage");
257
+ const errorBag = { ...error.getTelemetryProperties() };
258
+ assert.strictEqual(errorBag.errorType, OdspErrorTypes.fileOverwrittenInStorage, "Error type should exist in prop bag");
259
+ });
260
+ it("Check odsp domain move error", async () => {
261
+ const redirectLocation = "www.fake.com";
262
+ const responseText = {
263
+ error: {
264
+ "@error.redirectLocation": redirectLocation,
265
+ "code": "itemNotFound",
266
+ "message": "The site has been moved to a new location.",
267
+ "innerError": {},
268
+ },
269
+ };
270
+ const error = createOdspNetworkErrorWithResponse("The site has been moved to a new location.", 404, undefined, JSON.stringify(responseText));
271
+ assert.strictEqual(error.errorType, OdspErrorTypes.fileNotFoundOrAccessDeniedError, "Error type should be fileNotFoundOrAccessDeniedError");
272
+ assert.strictEqual(error.redirectLocation, redirectLocation, "Site location should match");
273
+ assert.strictEqual(error.statusCode, 404, "Status code should match");
274
+ });
275
+ it("Sharepoint url should be redacted in the error", async () => {
276
+ try {
277
+ await mockFetchError(async () => fetchAndParseAsJSONHelper("https://microsoft.sharepoint-df.com/siteUrl", {}), new Error("Request to https://6c482541-f706-4168-9e58-8e35a9992f58.sharepoint.com failed"));
278
+ assert.fail("Fetch should throw an error");
279
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
280
+ }
281
+ catch (error) {
282
+ assert(
283
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
284
+ error.message.includes("REDACTED_URL"), "sharepoint url should get redacted");
285
+ }
286
+ });
287
+ it("url should be redacted in the error", async () => {
288
+ try {
289
+ await mockFetchError(async () => fetchAndParseAsJSONHelper("https://microsoft.sharepoint-df.com/siteUrl", {}), new Error("Request to http://f706-4168-9e58-8e35a9992f58.COM failed"));
290
+ assert.fail("Fetch should throw an error");
291
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
292
+ }
293
+ catch (error) {
294
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
295
+ assert(error.message.includes("REDACTED_URL"), "url should get redacted");
296
+ }
297
+ });
298
+ });
299
+ //# sourceMappingURL=odspError.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"odspError.spec.js","sourceRoot":"","sources":["../../src/test/odspError.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 {\n\tcreateOdspNetworkError,\n\tthrowOdspNetworkError,\n} from \"@fluidframework/odsp-doclib-utils/internal\";\nimport { NonRetryableError, type AuthorizationError } from \"@fluidframework/driver-utils\";\nimport { OdspError, OdspErrorTypes } from \"@fluidframework/odsp-driver-definitions\";\nimport { IAuthorizationError, IGenericNetworkError } from \"@fluidframework/driver-definitions\";\nimport { IThrottlingWarning } from \"@fluidframework/core-interfaces\";\nimport { IFluidErrorBase } from \"@fluidframework/telemetry-utils\";\nimport { IOdspSocketError } from \"../contracts.js\";\nimport { fetchAndParseAsJSONHelper, getWithRetryForTokenRefresh } from \"../odspUtils.js\";\nimport { errorObjectFromSocketError } from \"../odspError.js\";\nimport { pkgVersion } from \"../packageVersion.js\";\nimport { mockFetchError } from \"./mockFetch.js\";\n\ndescribe(\"Odsp Error\", () => {\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\tconst testResponse = {\n\t\t// Implements only part of Response.headers\n\t\tstatusText: \"testStatusText\",\n\t\ttype: \"default\",\n\t\theaders: {\n\t\t\tget(name: string): string | null {\n\t\t\t\tif (name === \"sprequestguid\") {\n\t\t\t\t\treturn \"xxx-xxx\";\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t},\n\t} as Response;\n\n\t/**\n\t * Checks if the input is an {@link IGenericNetworkError}.\n\t */\n\tfunction isIGenericNetworkError(input: unknown): input is IGenericNetworkError {\n\t\treturn (\n\t\t\t(input as Partial<IGenericNetworkError>)?.errorType ===\n\t\t\tOdspErrorTypes.genericNetworkError\n\t\t);\n\t}\n\n\t/**\n\t * Checks if the input is an {@link IThrottlingWarning}.\n\t */\n\tfunction isIThrottlingWarning(input: unknown): input is IThrottlingWarning {\n\t\treturn (input as Partial<IThrottlingWarning>)?.errorType === OdspErrorTypes.throttlingError;\n\t}\n\n\t/**\n\t * Checks if the input is an {@link IThrottlingWarning}.\n\t */\n\tfunction isIAuthorizationError(input: unknown): input is IAuthorizationError {\n\t\treturn (\n\t\t\t(input as Partial<IAuthorizationError>)?.errorType === OdspErrorTypes.authorizationError\n\t\t);\n\t}\n\n\tfunction createOdspNetworkErrorWithResponse(\n\t\terrorMessage: string,\n\t\tstatusCode: number,\n\t\tresponse?: Response,\n\t\tresponseText?: string,\n\t): IFluidErrorBase & OdspError {\n\t\ttry {\n\t\t\tthrowOdspNetworkError(errorMessage, statusCode, response ?? testResponse, responseText);\n\t\t\tassert.fail(\"Not reached - throwOdspNetworkError should have thrown\");\n\t\t} catch (error) {\n\t\t\treturn error as IFluidErrorBase & OdspError;\n\t\t}\n\t}\n\n\tit(\"throwOdspNetworkError first-class properties\", async () => {\n\t\tconst networkError = createOdspNetworkErrorWithResponse(\"some message\", 400);\n\t\tif (networkError.errorType !== OdspErrorTypes.genericNetworkError) {\n\t\t\tassert.fail(\"networkError should be a genericNetworkError\");\n\t\t}\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"some message\"),\n\t\t\t\"message should contain original message\",\n\t\t);\n\t\tassert(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n\t\t\t(networkError as any).responseType === \"default\",\n\t\t\t\"message should contain Response.type\",\n\t\t);\n\t\tassert.equal(false, networkError.canRetry, \"canRetry should be false\");\n\t});\n\n\tit(\"throwOdspNetworkError sprequestguid exists\", async () => {\n\t\tconst error1 = createOdspNetworkErrorWithResponse(\"some message\", 400);\n\t\tconst errorBag = { ...error1.getTelemetryProperties() };\n\t\tassert.equal(\"xxx-xxx\", errorBag.sprequestguid, \"sprequestguid should be 'xxx-xxx'\");\n\t});\n\n\tit(\"throwOdspNetworkError sprequestguid undefined\", async () => {\n\t\tconst error1 = createOdspNetworkError(\"some message\", 400);\n\t\tconst errorBag = { ...error1.getTelemetryProperties() };\n\t\tassert.equal(undefined, errorBag.sprequestguid, \"sprequestguid should not be defined\");\n\t});\n\n\tit(\"errorObjectFromSocketError no retryAfter\", async () => {\n\t\tconst socketError: IOdspSocketError = {\n\t\t\tmessage: \"testMessage\",\n\t\t\tcode: 400,\n\t\t};\n\t\tconst networkError = errorObjectFromSocketError(socketError, \"disconnect\");\n\t\tassert(\n\t\t\tisIGenericNetworkError(networkError),\n\t\t\t\"networkError should be a genericNetworkError\",\n\t\t);\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"disconnect\"),\n\t\t\t\"error message should include handler name\",\n\t\t);\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"testMessage\"),\n\t\t\t\"error message should include socket error message\",\n\t\t);\n\t\tassert.equal(networkError.canRetry, false);\n\t\tassert.equal(networkError.statusCode, 400);\n\t});\n\n\tit(\"errorObjectFromSocketError with retryFilter\", async () => {\n\t\tconst socketError: IOdspSocketError = {\n\t\t\tmessage: \"testMessage\",\n\t\t\tcode: 400,\n\t\t};\n\t\tconst networkError = errorObjectFromSocketError(socketError, \"error\");\n\t\tassert(\n\t\t\tisIGenericNetworkError(networkError),\n\t\t\t\"networkError should be a genericNetworkError\",\n\t\t);\n\t\tassert(networkError.message.includes(\"error\"), \"error message should include handler name\");\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"testMessage\"),\n\t\t\t\"error message should include socket error message\",\n\t\t);\n\t\tassert.equal(networkError.canRetry, false);\n\t\tassert.equal(networkError.statusCode, 400);\n\t});\n\n\tit(\"errorObjectFromSocketError with inner errors\", async () => {\n\t\tconst socketError: IOdspSocketError = {\n\t\t\tmessage: \"testMessage\",\n\t\t\tcode: 400,\n\t\t\terror: {\n\t\t\t\tcode: \"notAllowed\",\n\t\t\t\tinnerError: {\n\t\t\t\t\tcode: \"ipBlocked\",\n\t\t\t\t\tinnerError: {\n\t\t\t\t\t\tcode: \"SurelyBlocked\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tmessage: \"Blocking due to policy\",\n\t\t\t},\n\t\t};\n\t\tconst networkError = errorObjectFromSocketError(socketError, \"error\");\n\t\tassert(\n\t\t\tisIGenericNetworkError(networkError),\n\t\t\t\"networkError should be a genericNetworkError\",\n\t\t);\n\t\tassert(networkError.message.includes(\"error\"), \"error message should include handler name\");\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"testMessage\"),\n\t\t\t\"error message should include socket error message\",\n\t\t);\n\t\tassert.equal(networkError.canRetry, false);\n\t\tassert.equal(networkError.statusCode, 400);\n\t\tassert.equal(\n\t\t\tnetworkError.getTelemetryProperties().innerMostErrorCode,\n\t\t\t\"SurelyBlocked\",\n\t\t\t\"Innermost error code should be correct\",\n\t\t);\n\t\tassert.equal(networkError.facetCodes?.length, 3, \"3 facet codes should be there\");\n\t});\n\n\tit(\"errorObjectFromSocketError with retryAfter\", async () => {\n\t\tconst socketError: IOdspSocketError = {\n\t\t\tmessage: \"testMessage\",\n\t\t\tcode: 429,\n\t\t\tretryAfter: 10,\n\t\t};\n\t\tconst networkError = errorObjectFromSocketError(socketError, \"handler\");\n\t\tassert(isIThrottlingWarning(networkError), \"networkError should be a throttlingError\");\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"handler\"),\n\t\t\t\"error message should include handler name\",\n\t\t);\n\t\tassert(\n\t\t\tnetworkError.message.includes(\"testMessage\"),\n\t\t\t\"error message should include socket error message\",\n\t\t);\n\t\tassert.equal(networkError.retryAfterSeconds, 10);\n\t});\n\n\tit(\"Access Denied retries\", async () => {\n\t\tconst res = await getWithRetryForTokenRefresh(async (options) => {\n\t\t\tif (options.refresh) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\tthrowOdspNetworkError(\"some error\", 401, testResponse);\n\t\t\t}\n\t\t});\n\t\tassert.equal(res, 1, \"did not successfully retried with new token\");\n\t});\n\n\tit(\"fetch incorrect response retries\", async () => {\n\t\tconst res = await getWithRetryForTokenRefresh(async (options) => {\n\t\t\tif (options.refresh) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\tthrow new NonRetryableError(\n\t\t\t\t\t\"some message\",\n\t\t\t\t\tOdspErrorTypes.incorrectServerResponse,\n\t\t\t\t\t{ driverVersion: pkgVersion },\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t\tassert.equal(res, 1, \"did not successfully retried with new token\");\n\t});\n\n\tit(\"404 errors - no retries\", async () => {\n\t\tconst res = getWithRetryForTokenRefresh(async (options) => {\n\t\t\tif (options.refresh) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\tthrowOdspNetworkError(\"some error\", 404, testResponse);\n\t\t\t}\n\t\t});\n\t\tawait assert.rejects(res, \"Other errors should not result in retries!\");\n\t});\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\tconst testResponseWithInsufficientClaims = {\n\t\tstatusText: \"testStatusText\",\n\t\ttype: \"default\",\n\t\theaders: {\n\t\t\tget(name: string): string | null {\n\t\t\t\tif (name === \"sprequestguid\") {\n\t\t\t\t\treturn \"xxx-xxx\";\n\t\t\t\t}\n\t\t\t\tif (name === \"www-authenticate\") {\n\t\t\t\t\treturn 'Bearer realm=\"6c482541-f706-4168-9e58-8e35a9992f58\",client_id=\"00000003-0000-0ff1-ce00-000000000000\",trusted_issuers=\"00000001-0000-0000-c000-000000000000@*,D3776938-3DBA-481F-A652-4BEDFCAB7CD8@*,https://sts.windows.net/*/,00000003-0000-0ff1-ce00-000000000000@90140122-8516-11e1-8eff-49304924019b\",authorization_uri=\"https://login.windows.net/common/oauth2/authorize\",error=\"insufficient_claims\",claims=\"eyJhY2Nlc3NfdG9rZW4iOnsibmJmIjp7ImVzc2VudGlhbCI6dHJ1ZSwgInZhbHVlIjoiMTU5Nzk1OTA5MCJ9fX0=\"';\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t},\n\t} as Response;\n\n\tfunction throwAuthorizationErrorWithInsufficientClaims(errorMessage: string): void {\n\t\tthrowOdspNetworkError(errorMessage, 401, testResponseWithInsufficientClaims);\n\t}\n\n\tit(\"Authorization error with insufficient claims first-class properties\", async () => {\n\t\ttry {\n\t\t\tthrowAuthorizationErrorWithInsufficientClaims(\"TestMessage\");\n\t\t} catch (error: unknown) {\n\t\t\tassert(isIAuthorizationError(error), \"error should be a IAuthorizationError\");\n\t\t\tassert(\n\t\t\t\terror.message.includes(\"TestMessage\"),\n\t\t\t\t\"message should contain original message\",\n\t\t\t);\n\t\t\tassert.equal((error as AuthorizationError).canRetry, false, \"canRetry should be false\");\n\t\t\tassert.equal(\n\t\t\t\t(error as AuthorizationError).claims,\n\t\t\t\t'{\"access_token\":{\"nbf\":{\"essential\":true, \"value\":\"1597959090\"}}}',\n\t\t\t\t\"claims should be extracted from response\",\n\t\t\t);\n\t\t}\n\t});\n\n\tit(\"Authorization error with insufficient claims results in retry with claims passed in options\", async () => {\n\t\tconst res = await getWithRetryForTokenRefresh(async (options) => {\n\t\t\tif (\n\t\t\t\toptions.refresh &&\n\t\t\t\toptions.claims ===\n\t\t\t\t\t'{\"access_token\":{\"nbf\":{\"essential\":true, \"value\":\"1597959090\"}}}'\n\t\t\t) {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\tthrowAuthorizationErrorWithInsufficientClaims(\"some error\");\n\t\t\t}\n\t\t});\n\t\tassert.equal(res, 1, \"did not successfully retried with claims\");\n\t});\n\n\t// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n\tconst testResponseWithRealm = {\n\t\tstatusText: \"testStatusText\",\n\t\ttype: \"default\",\n\t\theaders: {\n\t\t\tget(name: string): string | null {\n\t\t\t\tif (name === \"sprequestguid\") {\n\t\t\t\t\treturn \"xxx-xxx\";\n\t\t\t\t}\n\t\t\t\tif (name === \"www-authenticate\") {\n\t\t\t\t\treturn 'Bearer realm=\"6c482541-f706-4168-9e58-8e35a9992f58\",client_id=\"00000003-0000-0ff1-ce00-000000000000\",trusted_issuers=\"00000001-0000-0000-c000-000000000000@*,D3776938-3DBA-481F-A652-4BEDFCAB7CD8@*,https://sts.windows.net/*/,00000003-0000-0ff1-ce00-000000000000@90140122-8516-11e1-8eff-49304924019b\",authorization_uri=\"https://login.windows.net/common/oauth2/authorize\"';\n\t\t\t\t}\n\t\t\t\treturn null;\n\t\t\t},\n\t\t},\n\t} as Response;\n\n\tfunction throwAuthorizationErrorWithRealm(errorMessage: string): void {\n\t\tthrowOdspNetworkError(errorMessage, 401, testResponseWithRealm);\n\t}\n\n\tit(\"Authorization error with realm first-class properties\", async () => {\n\t\ttry {\n\t\t\tthrowAuthorizationErrorWithRealm(\"TestMessage\");\n\t\t} catch (error: unknown) {\n\t\t\tassert(isIAuthorizationError(error), \"error should be a IAuthorizationError\");\n\t\t\tassert(\n\t\t\t\terror.message.includes(\"TestMessage\"),\n\t\t\t\t\"message should contain original message\",\n\t\t\t);\n\t\t\tassert.strictEqual(\n\t\t\t\t(error as AuthorizationError).canRetry,\n\t\t\t\tfalse,\n\t\t\t\t\"canRetry should be false\",\n\t\t\t);\n\t\t\tassert.strictEqual(\n\t\t\t\t(error as AuthorizationError).tenantId,\n\t\t\t\t\"6c482541-f706-4168-9e58-8e35a9992f58\",\n\t\t\t\t\"realm should be extracted from response\",\n\t\t\t);\n\t\t}\n\t});\n\n\tit(\"Authorization error with realm results in retry and realm passed as tenant id\", async () => {\n\t\tconst res = await getWithRetryForTokenRefresh(async (options) => {\n\t\t\tif (options.refresh && options.tenantId === \"6c482541-f706-4168-9e58-8e35a9992f58\") {\n\t\t\t\treturn 1;\n\t\t\t} else {\n\t\t\t\tthrowAuthorizationErrorWithRealm(\"some error\");\n\t\t\t}\n\t\t});\n\t\tassert.strictEqual(res, 1, \"did not successfully retried with realm passed as tenantId\");\n\t});\n\n\tit(\"Check Epoch Mismatch error props\", async () => {\n\t\tconst error = createOdspNetworkErrorWithResponse(\"epochMismatch\", 409);\n\t\tassert.strictEqual(\n\t\t\terror.errorType,\n\t\t\tOdspErrorTypes.fileOverwrittenInStorage,\n\t\t\t\"Error type should be fileOverwrittenInStorage\",\n\t\t);\n\t\tconst errorBag = { ...error.getTelemetryProperties() };\n\t\tassert.strictEqual(\n\t\t\terrorBag.errorType,\n\t\t\tOdspErrorTypes.fileOverwrittenInStorage,\n\t\t\t\"Error type should exist in prop bag\",\n\t\t);\n\t});\n\n\tit(\"Check odsp domain move error\", async () => {\n\t\tconst redirectLocation = \"www.fake.com\";\n\t\tconst responseText = {\n\t\t\terror: {\n\t\t\t\t\"@error.redirectLocation\": redirectLocation,\n\t\t\t\t\"code\": \"itemNotFound\",\n\t\t\t\t\"message\": \"The site has been moved to a new location.\",\n\t\t\t\t\"innerError\": {},\n\t\t\t},\n\t\t};\n\t\tconst error = createOdspNetworkErrorWithResponse(\n\t\t\t\"The site has been moved to a new location.\",\n\t\t\t404,\n\t\t\tundefined,\n\t\t\tJSON.stringify(responseText),\n\t\t);\n\t\tassert.strictEqual(\n\t\t\terror.errorType,\n\t\t\tOdspErrorTypes.fileNotFoundOrAccessDeniedError,\n\t\t\t\"Error type should be fileNotFoundOrAccessDeniedError\",\n\t\t);\n\t\tassert.strictEqual(error.redirectLocation, redirectLocation, \"Site location should match\");\n\t\tassert.strictEqual(\n\t\t\t(error as IGenericNetworkError).statusCode,\n\t\t\t404,\n\t\t\t\"Status code should match\",\n\t\t);\n\t});\n\n\tit(\"Sharepoint url should be redacted in the error\", async () => {\n\t\ttry {\n\t\t\tawait mockFetchError(\n\t\t\t\tasync () =>\n\t\t\t\t\tfetchAndParseAsJSONHelper(\"https://microsoft.sharepoint-df.com/siteUrl\", {}),\n\t\t\t\tnew Error(\n\t\t\t\t\t\"Request to https://6c482541-f706-4168-9e58-8e35a9992f58.sharepoint.com failed\",\n\t\t\t\t),\n\t\t\t);\n\t\t\tassert.fail(\"Fetch should throw an error\");\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t} catch (error: any) {\n\t\t\tassert(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\t\t(error.message as string).includes(\"REDACTED_URL\"),\n\t\t\t\t\"sharepoint url should get redacted\",\n\t\t\t);\n\t\t}\n\t});\n\n\tit(\"url should be redacted in the error\", async () => {\n\t\ttry {\n\t\t\tawait mockFetchError(\n\t\t\t\tasync () =>\n\t\t\t\t\tfetchAndParseAsJSONHelper(\"https://microsoft.sharepoint-df.com/siteUrl\", {}),\n\t\t\t\tnew Error(\"Request to http://f706-4168-9e58-8e35a9992f58.COM failed\"),\n\t\t\t);\n\t\t\tassert.fail(\"Fetch should throw an error\");\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t} catch (error: any) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n\t\t\tassert((error.message as string).includes(\"REDACTED_URL\"), \"url should get redacted\");\n\t\t}\n\t});\n});\n"]}