@fluidframework/routerlicious-driver 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419

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 (365) hide show
  1. package/.eslintrc.js +10 -12
  2. package/.mocharc.js +12 -0
  3. package/CHANGELOG.md +156 -0
  4. package/README.md +39 -1
  5. package/api-extractor-lint.json +4 -0
  6. package/api-extractor.json +2 -2
  7. package/api-report/routerlicious-driver.api.md +108 -0
  8. package/dist/cache.cjs +30 -0
  9. package/dist/cache.cjs.map +1 -0
  10. package/dist/cache.d.ts +7 -0
  11. package/dist/cache.d.ts.map +1 -1
  12. package/dist/{definitions.js → contracts.cjs} +1 -1
  13. package/dist/contracts.cjs.map +1 -0
  14. package/dist/contracts.d.ts +42 -0
  15. package/dist/contracts.d.ts.map +1 -0
  16. package/dist/{createNewUtils.js → createNewUtils.cjs} +7 -5
  17. package/dist/createNewUtils.cjs.map +1 -0
  18. package/dist/createNewUtils.d.ts +1 -1
  19. package/dist/createNewUtils.d.ts.map +1 -1
  20. package/dist/{defaultTokenProvider.js → defaultTokenProvider.cjs} +2 -1
  21. package/dist/defaultTokenProvider.cjs.map +1 -0
  22. package/dist/defaultTokenProvider.d.ts +1 -0
  23. package/dist/defaultTokenProvider.d.ts.map +1 -1
  24. package/dist/definitions.cjs +7 -0
  25. package/dist/definitions.cjs.map +1 -0
  26. package/dist/definitions.d.ts.map +1 -1
  27. package/dist/deltaStorageService.cjs +122 -0
  28. package/dist/deltaStorageService.cjs.map +1 -0
  29. package/dist/deltaStorageService.d.ts +7 -6
  30. package/dist/deltaStorageService.d.ts.map +1 -1
  31. package/dist/{documentDeltaConnection.js → documentDeltaConnection.cjs} +8 -13
  32. package/dist/documentDeltaConnection.cjs.map +1 -0
  33. package/dist/documentDeltaConnection.d.ts +3 -4
  34. package/dist/documentDeltaConnection.d.ts.map +1 -1
  35. package/dist/{documentService.js → documentService.cjs} +61 -64
  36. package/dist/documentService.cjs.map +1 -0
  37. package/dist/documentService.d.ts +12 -4
  38. package/dist/documentService.d.ts.map +1 -1
  39. package/dist/{documentServiceFactory.js → documentServiceFactory.cjs} +87 -33
  40. package/dist/documentServiceFactory.cjs.map +1 -0
  41. package/dist/documentServiceFactory.d.ts +5 -3
  42. package/dist/documentServiceFactory.d.ts.map +1 -1
  43. package/dist/{documentStorageService.js → documentStorageService.cjs} +18 -16
  44. package/dist/documentStorageService.cjs.map +1 -0
  45. package/dist/documentStorageService.d.ts +4 -3
  46. package/dist/documentStorageService.d.ts.map +1 -1
  47. package/dist/errorUtils.cjs +87 -0
  48. package/dist/errorUtils.cjs.map +1 -0
  49. package/dist/errorUtils.d.ts +56 -10
  50. package/dist/errorUtils.d.ts.map +1 -1
  51. package/dist/gitManager.cjs +46 -0
  52. package/dist/gitManager.cjs.map +1 -0
  53. package/dist/gitManager.d.ts +27 -0
  54. package/dist/gitManager.d.ts.map +1 -0
  55. package/dist/historian.cjs +72 -0
  56. package/dist/historian.cjs.map +1 -0
  57. package/dist/historian.d.ts +34 -0
  58. package/dist/historian.d.ts.map +1 -0
  59. package/dist/index.cjs +19 -0
  60. package/dist/index.cjs.map +1 -0
  61. package/dist/index.d.ts +5 -8
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/mapWithExpiration.cjs +105 -0
  64. package/dist/mapWithExpiration.cjs.map +1 -0
  65. package/dist/mapWithExpiration.d.ts +34 -0
  66. package/dist/mapWithExpiration.d.ts.map +1 -0
  67. package/dist/{nullBlobStorageService.js → nullBlobStorageService.cjs} +5 -5
  68. package/dist/nullBlobStorageService.cjs.map +1 -0
  69. package/dist/nullBlobStorageService.d.ts.map +1 -1
  70. package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
  71. package/dist/packageVersion.cjs.map +1 -0
  72. package/dist/packageVersion.d.ts +1 -1
  73. package/dist/packageVersion.d.ts.map +1 -1
  74. package/dist/{policies.js → policies.cjs} +1 -1
  75. package/dist/policies.cjs.map +1 -0
  76. package/dist/policies.d.ts +22 -9
  77. package/dist/policies.d.ts.map +1 -1
  78. package/dist/r11sSnapshotParser.cjs +73 -0
  79. package/dist/r11sSnapshotParser.cjs.map +1 -0
  80. package/dist/r11sSnapshotParser.d.ts +14 -0
  81. package/dist/r11sSnapshotParser.d.ts.map +1 -0
  82. package/dist/restWrapper.cjs +249 -0
  83. package/dist/restWrapper.cjs.map +1 -0
  84. package/dist/restWrapper.d.ts +32 -12
  85. package/dist/restWrapper.d.ts.map +1 -1
  86. package/dist/restWrapperBase.cjs +89 -0
  87. package/dist/restWrapperBase.cjs.map +1 -0
  88. package/dist/restWrapperBase.d.ts +26 -0
  89. package/dist/restWrapperBase.d.ts.map +1 -0
  90. package/dist/retriableGitManager.cjs +40 -0
  91. package/dist/retriableGitManager.cjs.map +1 -0
  92. package/dist/retriableGitManager.d.ts +13 -23
  93. package/dist/retriableGitManager.d.ts.map +1 -1
  94. package/dist/routerlicious-driver-alpha.d.ts +92 -0
  95. package/dist/routerlicious-driver-beta.d.ts +98 -0
  96. package/dist/routerlicious-driver-public.d.ts +98 -0
  97. package/dist/routerlicious-driver-untrimmed.d.ts +261 -0
  98. package/dist/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.cjs} +41 -34
  99. package/dist/shreddedSummaryDocumentStorageService.cjs.map +1 -0
  100. package/dist/shreddedSummaryDocumentStorageService.d.ts +6 -5
  101. package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  102. package/dist/storageContracts.cjs +7 -0
  103. package/dist/storageContracts.cjs.map +1 -0
  104. package/dist/storageContracts.d.ts +45 -0
  105. package/dist/storageContracts.d.ts.map +1 -0
  106. package/dist/summaryTreeUploadManager.cjs +110 -0
  107. package/dist/summaryTreeUploadManager.cjs.map +1 -0
  108. package/dist/summaryTreeUploadManager.d.ts +23 -0
  109. package/dist/summaryTreeUploadManager.d.ts.map +1 -0
  110. package/dist/{tokens.js → tokens.cjs} +1 -1
  111. package/dist/tokens.cjs.map +1 -0
  112. package/dist/tokens.d.ts +34 -5
  113. package/dist/tokens.d.ts.map +1 -1
  114. package/dist/treeUtils.cjs +107 -0
  115. package/dist/treeUtils.cjs.map +1 -0
  116. package/dist/treeUtils.d.ts +58 -0
  117. package/dist/treeUtils.d.ts.map +1 -0
  118. package/dist/tsdoc-metadata.json +11 -0
  119. package/dist/{urlUtils.js → urlUtils.cjs} +21 -25
  120. package/dist/urlUtils.cjs.map +1 -0
  121. package/dist/urlUtils.d.ts +2 -2
  122. package/dist/urlUtils.d.ts.map +1 -1
  123. package/dist/wholeSummaryDocumentStorageService.cjs +253 -0
  124. package/dist/wholeSummaryDocumentStorageService.cjs.map +1 -0
  125. package/dist/wholeSummaryDocumentStorageService.d.ts +10 -8
  126. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  127. package/dist/wholeSummaryUploadManager.cjs +37 -0
  128. package/dist/wholeSummaryUploadManager.cjs.map +1 -0
  129. package/dist/wholeSummaryUploadManager.d.ts +16 -0
  130. package/dist/wholeSummaryUploadManager.d.ts.map +1 -0
  131. package/lib/{cache.d.ts → cache.d.mts} +7 -0
  132. package/lib/cache.d.mts.map +1 -0
  133. package/lib/cache.mjs +25 -0
  134. package/lib/cache.mjs.map +1 -0
  135. package/lib/contracts.d.mts +42 -0
  136. package/lib/contracts.d.mts.map +1 -0
  137. package/lib/{definitions.js → contracts.mjs} +1 -1
  138. package/lib/contracts.mjs.map +1 -0
  139. package/lib/{createNewUtils.d.ts → createNewUtils.d.mts} +1 -1
  140. package/lib/{createNewUtils.d.ts.map → createNewUtils.d.mts.map} +1 -1
  141. package/lib/{createNewUtils.js → createNewUtils.mjs} +7 -5
  142. package/lib/createNewUtils.mjs.map +1 -0
  143. package/lib/{defaultTokenProvider.d.ts → defaultTokenProvider.d.mts} +2 -1
  144. package/lib/defaultTokenProvider.d.mts.map +1 -0
  145. package/lib/{defaultTokenProvider.js → defaultTokenProvider.mjs} +2 -1
  146. package/lib/defaultTokenProvider.mjs.map +1 -0
  147. package/lib/definitions.d.mts.map +1 -0
  148. package/lib/definitions.mjs +6 -0
  149. package/{dist/definitions.js.map → lib/definitions.mjs.map} +1 -1
  150. package/lib/{deltaStorageService.d.ts → deltaStorageService.d.mts} +8 -7
  151. package/lib/deltaStorageService.d.mts.map +1 -0
  152. package/lib/deltaStorageService.mjs +117 -0
  153. package/lib/deltaStorageService.mjs.map +1 -0
  154. package/lib/{documentDeltaConnection.d.ts → documentDeltaConnection.d.mts} +3 -4
  155. package/lib/documentDeltaConnection.d.mts.map +1 -0
  156. package/lib/{documentDeltaConnection.js → documentDeltaConnection.mjs} +8 -13
  157. package/lib/documentDeltaConnection.mjs.map +1 -0
  158. package/lib/{documentService.d.ts → documentService.d.mts} +16 -8
  159. package/lib/documentService.d.mts.map +1 -0
  160. package/lib/{documentService.js → documentService.mjs} +60 -44
  161. package/lib/documentService.mjs.map +1 -0
  162. package/lib/{documentServiceFactory.d.ts → documentServiceFactory.d.mts} +7 -5
  163. package/lib/documentServiceFactory.d.mts.map +1 -0
  164. package/lib/{documentServiceFactory.js → documentServiceFactory.mjs} +88 -34
  165. package/lib/documentServiceFactory.mjs.map +1 -0
  166. package/lib/{documentStorageService.d.ts → documentStorageService.d.mts} +7 -6
  167. package/lib/documentStorageService.d.mts.map +1 -0
  168. package/lib/{documentStorageService.js → documentStorageService.mjs} +19 -17
  169. package/lib/documentStorageService.mjs.map +1 -0
  170. package/lib/errorUtils.d.mts +93 -0
  171. package/lib/errorUtils.d.mts.map +1 -0
  172. package/lib/errorUtils.mjs +81 -0
  173. package/lib/errorUtils.mjs.map +1 -0
  174. package/lib/gitManager.d.mts +27 -0
  175. package/lib/gitManager.d.mts.map +1 -0
  176. package/lib/gitManager.mjs +42 -0
  177. package/lib/gitManager.mjs.map +1 -0
  178. package/lib/historian.d.mts +34 -0
  179. package/lib/historian.d.mts.map +1 -0
  180. package/lib/historian.mjs +67 -0
  181. package/lib/historian.mjs.map +1 -0
  182. package/lib/index.d.mts +10 -0
  183. package/lib/index.d.mts.map +1 -0
  184. package/lib/index.mjs +8 -0
  185. package/lib/index.mjs.map +1 -0
  186. package/lib/mapWithExpiration.d.mts +34 -0
  187. package/lib/mapWithExpiration.d.mts.map +1 -0
  188. package/lib/mapWithExpiration.mjs +101 -0
  189. package/lib/mapWithExpiration.mjs.map +1 -0
  190. package/lib/nullBlobStorageService.d.mts.map +1 -0
  191. package/lib/{nullBlobStorageService.js → nullBlobStorageService.mjs} +5 -5
  192. package/lib/nullBlobStorageService.mjs.map +1 -0
  193. package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
  194. package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
  195. package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
  196. package/lib/packageVersion.mjs.map +1 -0
  197. package/lib/{policies.d.ts → policies.d.mts} +22 -9
  198. package/lib/policies.d.mts.map +1 -0
  199. package/lib/{policies.js → policies.mjs} +1 -1
  200. package/lib/policies.mjs.map +1 -0
  201. package/lib/r11sSnapshotParser.d.mts +14 -0
  202. package/lib/r11sSnapshotParser.d.mts.map +1 -0
  203. package/lib/r11sSnapshotParser.mjs +69 -0
  204. package/lib/r11sSnapshotParser.mjs.map +1 -0
  205. package/lib/restWrapper.d.mts +53 -0
  206. package/lib/restWrapper.d.mts.map +1 -0
  207. package/lib/restWrapper.mjs +236 -0
  208. package/lib/restWrapper.mjs.map +1 -0
  209. package/lib/restWrapperBase.d.mts +26 -0
  210. package/lib/restWrapperBase.d.mts.map +1 -0
  211. package/lib/restWrapperBase.mjs +84 -0
  212. package/lib/restWrapperBase.mjs.map +1 -0
  213. package/lib/retriableGitManager.d.mts +24 -0
  214. package/lib/retriableGitManager.d.mts.map +1 -0
  215. package/lib/retriableGitManager.mjs +36 -0
  216. package/lib/retriableGitManager.mjs.map +1 -0
  217. package/lib/routerlicious-driver-alpha.d.mts +92 -0
  218. package/lib/routerlicious-driver-beta.d.mts +98 -0
  219. package/lib/routerlicious-driver-public.d.mts +98 -0
  220. package/lib/routerlicious-driver-untrimmed.d.mts +261 -0
  221. package/lib/{shreddedSummaryDocumentStorageService.d.ts → shreddedSummaryDocumentStorageService.d.mts} +9 -8
  222. package/lib/shreddedSummaryDocumentStorageService.d.mts.map +1 -0
  223. package/lib/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.mjs} +41 -34
  224. package/lib/shreddedSummaryDocumentStorageService.mjs.map +1 -0
  225. package/lib/storageContracts.d.mts +45 -0
  226. package/lib/storageContracts.d.mts.map +1 -0
  227. package/lib/storageContracts.mjs +6 -0
  228. package/lib/storageContracts.mjs.map +1 -0
  229. package/lib/summaryTreeUploadManager.d.mts +23 -0
  230. package/lib/summaryTreeUploadManager.d.mts.map +1 -0
  231. package/lib/summaryTreeUploadManager.mjs +106 -0
  232. package/lib/summaryTreeUploadManager.mjs.map +1 -0
  233. package/lib/{tokens.d.ts → tokens.d.mts} +34 -5
  234. package/lib/tokens.d.mts.map +1 -0
  235. package/lib/{tokens.js → tokens.mjs} +1 -1
  236. package/lib/tokens.mjs.map +1 -0
  237. package/lib/treeUtils.d.mts +58 -0
  238. package/lib/treeUtils.d.mts.map +1 -0
  239. package/lib/treeUtils.mjs +100 -0
  240. package/lib/treeUtils.mjs.map +1 -0
  241. package/lib/{urlUtils.d.ts → urlUtils.d.mts} +2 -2
  242. package/lib/urlUtils.d.mts.map +1 -0
  243. package/lib/urlUtils.mjs +38 -0
  244. package/lib/urlUtils.mjs.map +1 -0
  245. package/lib/{wholeSummaryDocumentStorageService.d.ts → wholeSummaryDocumentStorageService.d.mts} +12 -10
  246. package/lib/wholeSummaryDocumentStorageService.d.mts.map +1 -0
  247. package/lib/wholeSummaryDocumentStorageService.mjs +249 -0
  248. package/lib/wholeSummaryDocumentStorageService.mjs.map +1 -0
  249. package/lib/wholeSummaryUploadManager.d.mts +16 -0
  250. package/lib/wholeSummaryUploadManager.d.mts.map +1 -0
  251. package/lib/wholeSummaryUploadManager.mjs +33 -0
  252. package/lib/wholeSummaryUploadManager.mjs.map +1 -0
  253. package/package.json +104 -68
  254. package/prettier.config.cjs +8 -0
  255. package/src/cache.ts +25 -9
  256. package/src/contracts.ts +60 -0
  257. package/src/createNewUtils.ts +26 -24
  258. package/src/defaultTokenProvider.ts +14 -15
  259. package/src/definitions.ts +2 -2
  260. package/src/deltaStorageService.ts +145 -91
  261. package/src/documentDeltaConnection.ts +54 -52
  262. package/src/documentService.ts +272 -242
  263. package/src/documentServiceFactory.ts +338 -237
  264. package/src/documentStorageService.ts +92 -84
  265. package/src/errorUtils.ts +117 -79
  266. package/src/gitManager.ts +67 -0
  267. package/src/historian.ts +121 -0
  268. package/src/index.ts +15 -8
  269. package/src/mapWithExpiration.ts +124 -0
  270. package/src/nullBlobStorageService.ts +24 -21
  271. package/src/packageVersion.ts +1 -1
  272. package/src/policies.ts +51 -38
  273. package/src/r11sSnapshotParser.ts +82 -0
  274. package/src/restWrapper.ts +400 -216
  275. package/src/restWrapperBase.ts +146 -0
  276. package/src/retriableGitManager.ts +76 -153
  277. package/src/shreddedSummaryDocumentStorageService.ts +214 -195
  278. package/src/storageContracts.ts +63 -0
  279. package/src/summaryTreeUploadManager.ts +155 -0
  280. package/src/tokens.ts +74 -39
  281. package/src/treeUtils.ts +138 -0
  282. package/src/urlUtils.ts +27 -28
  283. package/src/wholeSummaryDocumentStorageService.ts +352 -252
  284. package/src/wholeSummaryUploadManager.ts +64 -0
  285. package/tsc-multi.test.json +4 -0
  286. package/tsconfig.json +10 -13
  287. package/dist/cache.js +0 -20
  288. package/dist/cache.js.map +0 -1
  289. package/dist/createNewUtils.js.map +0 -1
  290. package/dist/defaultTokenProvider.js.map +0 -1
  291. package/dist/deltaStorageService.js +0 -82
  292. package/dist/deltaStorageService.js.map +0 -1
  293. package/dist/documentDeltaConnection.js.map +0 -1
  294. package/dist/documentService.js.map +0 -1
  295. package/dist/documentServiceFactory.js.map +0 -1
  296. package/dist/documentStorageService.js.map +0 -1
  297. package/dist/errorUtils.js +0 -56
  298. package/dist/errorUtils.js.map +0 -1
  299. package/dist/index.js +0 -25
  300. package/dist/index.js.map +0 -1
  301. package/dist/nullBlobStorageService.js.map +0 -1
  302. package/dist/packageVersion.js.map +0 -1
  303. package/dist/policies.js.map +0 -1
  304. package/dist/restWrapper.js +0 -153
  305. package/dist/restWrapper.js.map +0 -1
  306. package/dist/retriableGitManager.js +0 -76
  307. package/dist/retriableGitManager.js.map +0 -1
  308. package/dist/shreddedSummaryDocumentStorageService.js.map +0 -1
  309. package/dist/tokens.js.map +0 -1
  310. package/dist/urlUtils.js.map +0 -1
  311. package/dist/wholeSummaryDocumentStorageService.js +0 -191
  312. package/dist/wholeSummaryDocumentStorageService.js.map +0 -1
  313. package/lib/cache.d.ts.map +0 -1
  314. package/lib/cache.js +0 -16
  315. package/lib/cache.js.map +0 -1
  316. package/lib/createNewUtils.js.map +0 -1
  317. package/lib/defaultTokenProvider.d.ts.map +0 -1
  318. package/lib/defaultTokenProvider.js.map +0 -1
  319. package/lib/definitions.d.ts.map +0 -1
  320. package/lib/definitions.js.map +0 -1
  321. package/lib/deltaStorageService.d.ts.map +0 -1
  322. package/lib/deltaStorageService.js +0 -77
  323. package/lib/deltaStorageService.js.map +0 -1
  324. package/lib/documentDeltaConnection.d.ts.map +0 -1
  325. package/lib/documentDeltaConnection.js.map +0 -1
  326. package/lib/documentService.d.ts.map +0 -1
  327. package/lib/documentService.js.map +0 -1
  328. package/lib/documentServiceFactory.d.ts.map +0 -1
  329. package/lib/documentServiceFactory.js.map +0 -1
  330. package/lib/documentStorageService.d.ts.map +0 -1
  331. package/lib/documentStorageService.js.map +0 -1
  332. package/lib/errorUtils.d.ts +0 -47
  333. package/lib/errorUtils.d.ts.map +0 -1
  334. package/lib/errorUtils.js +0 -50
  335. package/lib/errorUtils.js.map +0 -1
  336. package/lib/index.d.ts +0 -13
  337. package/lib/index.d.ts.map +0 -1
  338. package/lib/index.js +0 -13
  339. package/lib/index.js.map +0 -1
  340. package/lib/nullBlobStorageService.d.ts.map +0 -1
  341. package/lib/nullBlobStorageService.js.map +0 -1
  342. package/lib/packageVersion.js.map +0 -1
  343. package/lib/policies.d.ts.map +0 -1
  344. package/lib/policies.js.map +0 -1
  345. package/lib/restWrapper.d.ts +0 -33
  346. package/lib/restWrapper.d.ts.map +0 -1
  347. package/lib/restWrapper.js +0 -144
  348. package/lib/restWrapper.js.map +0 -1
  349. package/lib/retriableGitManager.d.ts +0 -34
  350. package/lib/retriableGitManager.d.ts.map +0 -1
  351. package/lib/retriableGitManager.js +0 -72
  352. package/lib/retriableGitManager.js.map +0 -1
  353. package/lib/shreddedSummaryDocumentStorageService.d.ts.map +0 -1
  354. package/lib/shreddedSummaryDocumentStorageService.js.map +0 -1
  355. package/lib/tokens.d.ts.map +0 -1
  356. package/lib/tokens.js.map +0 -1
  357. package/lib/urlUtils.d.ts.map +0 -1
  358. package/lib/urlUtils.js +0 -42
  359. package/lib/urlUtils.js.map +0 -1
  360. package/lib/wholeSummaryDocumentStorageService.d.ts.map +0 -1
  361. package/lib/wholeSummaryDocumentStorageService.js +0 -187
  362. package/lib/wholeSummaryDocumentStorageService.js.map +0 -1
  363. package/tsconfig.esnext.json +0 -7
  364. /package/lib/{definitions.d.ts → definitions.d.mts} +0 -0
  365. /package/lib/{nullBlobStorageService.d.ts → nullBlobStorageService.d.mts} +0 -0
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ /*!
3
+ * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
+ * Licensed under the MIT License.
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.DeltaStorageService = exports.DocumentDeltaStorageService = void 0;
8
+ const driver_base_1 = require("@fluidframework/driver-base");
9
+ const driver_utils_1 = require("@fluidframework/driver-utils");
10
+ const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
11
+ /**
12
+ * Maximum number of ops we can fetch at a time. This should be kept at 2k, as
13
+ * server determines whether to try to fallback to long-term storage if the ops range requested is larger than
14
+ * what they have locally available in short-term storage. So if we request 2k ops, they know it is not a
15
+ * specific request and they don't fall to long term storage which takes time.
16
+ * Please coordinate to AFR team if this value need to be changed.
17
+ */
18
+ const MaxBatchDeltas = 2000;
19
+ /**
20
+ * Storage service limited to only being able to fetch documents for a specific document
21
+ */
22
+ class DocumentDeltaStorageService {
23
+ constructor(tenantId, id, deltaStorageService, documentStorageService, logger) {
24
+ this.tenantId = tenantId;
25
+ this.id = id;
26
+ this.deltaStorageService = deltaStorageService;
27
+ this.documentStorageService = documentStorageService;
28
+ this.logger = logger;
29
+ this.logtailSha = this.documentStorageService.logTailSha;
30
+ }
31
+ fetchMessages(fromTotal, toTotal, abortSignal, cachedOnly, fetchReason) {
32
+ if (cachedOnly) {
33
+ return driver_utils_1.emptyMessageStream;
34
+ }
35
+ let opsFromSnapshot = 0;
36
+ let opsFromStorage = 0;
37
+ const requestCallback = async (from, to, telemetryProps) => {
38
+ this.snapshotOps = this.logtailSha
39
+ ? await (0, driver_utils_1.readAndParse)(this.documentStorageService, this.logtailSha)
40
+ : [];
41
+ this.logtailSha = undefined;
42
+ if (this.snapshotOps !== undefined && this.snapshotOps.length !== 0) {
43
+ const messages = this.snapshotOps.filter((op) => op.sequenceNumber >= from && op.sequenceNumber < to);
44
+ (0, driver_base_1.validateMessages)("snapshotOps", messages, from, this.logger, false /* strict */);
45
+ if (messages.length > 0 && messages[0].sequenceNumber === from) {
46
+ this.snapshotOps = this.snapshotOps.filter((op) => op.sequenceNumber >= to);
47
+ opsFromSnapshot += messages.length;
48
+ return { messages, partialResult: true };
49
+ }
50
+ this.snapshotOps = undefined;
51
+ }
52
+ const ops = await this.deltaStorageService.get(this.tenantId, this.id, from, to);
53
+ (0, driver_base_1.validateMessages)("storage", ops.messages, from, this.logger, false /* strict */);
54
+ opsFromStorage += ops.messages.length;
55
+ return ops;
56
+ };
57
+ const stream = (0, driver_utils_1.requestOps)(async (from, to, telemetryProps) => {
58
+ const result = await requestCallback(from, to, telemetryProps);
59
+ // Catch all case, just in case
60
+ (0, driver_base_1.validateMessages)("catch all", result.messages, from, this.logger);
61
+ return result;
62
+ },
63
+ // Staging: starting with no concurrency, listening for feedback first.
64
+ // In future releases we will switch to actual concurrency
65
+ 1, // concurrency
66
+ fromTotal, // inclusive
67
+ toTotal, // exclusive
68
+ MaxBatchDeltas, this.logger, abortSignal, fetchReason);
69
+ return (0, driver_utils_1.streamObserver)(stream, (result) => {
70
+ if (result.done && opsFromSnapshot + opsFromStorage !== 0) {
71
+ this.logger.sendPerformanceEvent({
72
+ eventName: "CacheOpsRetrieved",
73
+ opsFromSnapshot,
74
+ opsFromStorage,
75
+ });
76
+ }
77
+ });
78
+ }
79
+ }
80
+ exports.DocumentDeltaStorageService = DocumentDeltaStorageService;
81
+ /**
82
+ * Provides access to the underlying delta storage on the server for routerlicious driver.
83
+ */
84
+ class DeltaStorageService {
85
+ constructor(url, restWrapper, logger, getRestWrapper = async () => this.restWrapper, getDeltaStorageUrl = () => this.url) {
86
+ this.url = url;
87
+ this.restWrapper = restWrapper;
88
+ this.logger = logger;
89
+ this.getRestWrapper = getRestWrapper;
90
+ this.getDeltaStorageUrl = getDeltaStorageUrl;
91
+ }
92
+ async get(tenantId, id, from, // inclusive
93
+ to) {
94
+ const ops = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
95
+ eventName: "OpsFetch",
96
+ from,
97
+ to,
98
+ }, async (event) => {
99
+ const restWrapper = await this.getRestWrapper();
100
+ const url = this.getDeltaStorageUrl();
101
+ const response = await restWrapper.get(url, {
102
+ from: from - 1,
103
+ to,
104
+ });
105
+ event.end({
106
+ length: response.content.length,
107
+ details: JSON.stringify({
108
+ firstOpSeqNumber: response.content[0]?.sequenceNumber,
109
+ lastOpSeqNumber: response.content[response.content.length - 1]?.sequenceNumber,
110
+ }),
111
+ ...response.propsToLog,
112
+ ...(0, driver_base_1.getW3CData)(response.requestUrl, "xmlhttprequest"),
113
+ });
114
+ return response.content;
115
+ });
116
+ // It is assumed that server always returns all the ops that it has in the range that was requested.
117
+ // This may change in the future, if so, we need to adjust and receive "end" value from server in such case.
118
+ return { messages: ops, partialResult: false };
119
+ }
120
+ }
121
+ exports.DeltaStorageService = DeltaStorageService;
122
+ //# sourceMappingURL=deltaStorageService.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deltaStorageService.cjs","sourceRoot":"","sources":["../src/deltaStorageService.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 { ITelemetryProperties } from \"@fluidframework/core-interfaces\";\nimport { getW3CData, validateMessages } from \"@fluidframework/driver-base\";\nimport {\n\tIDeltaStorageService,\n\tIDocumentDeltaStorageService,\n\tIDeltasFetchResult,\n\tIStream,\n} from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport {\n\treadAndParse,\n\trequestOps,\n\temptyMessageStream,\n\tstreamObserver,\n} from \"@fluidframework/driver-utils\";\nimport { ITelemetryLoggerExt, PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { RestWrapper } from \"./restWrapperBase\";\n\n/**\n * Maximum number of ops we can fetch at a time. This should be kept at 2k, as\n * server determines whether to try to fallback to long-term storage if the ops range requested is larger than\n * what they have locally available in short-term storage. So if we request 2k ops, they know it is not a\n * specific request and they don't fall to long term storage which takes time.\n * Please coordinate to AFR team if this value need to be changed.\n */\nconst MaxBatchDeltas = 2000;\n\n/**\n * Storage service limited to only being able to fetch documents for a specific document\n */\nexport class DocumentDeltaStorageService implements IDocumentDeltaStorageService {\n\tconstructor(\n\t\tprivate readonly tenantId: string,\n\t\tprivate readonly id: string,\n\t\tprivate readonly deltaStorageService: IDeltaStorageService,\n\t\tprivate readonly documentStorageService: DocumentStorageService,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t) {}\n\n\tprivate logtailSha: string | undefined = this.documentStorageService.logTailSha;\n\tprivate snapshotOps: ISequencedDocumentMessage[] | undefined;\n\n\tfetchMessages(\n\t\tfromTotal: number,\n\t\ttoTotal: number | undefined,\n\t\tabortSignal?: AbortSignal,\n\t\tcachedOnly?: boolean,\n\t\tfetchReason?: string,\n\t): IStream<ISequencedDocumentMessage[]> {\n\t\tif (cachedOnly) {\n\t\t\treturn emptyMessageStream;\n\t\t}\n\n\t\tlet opsFromSnapshot = 0;\n\t\tlet opsFromStorage = 0;\n\t\tconst requestCallback = async (\n\t\t\tfrom: number,\n\t\t\tto: number,\n\t\t\ttelemetryProps: ITelemetryProperties,\n\t\t) => {\n\t\t\tthis.snapshotOps = this.logtailSha\n\t\t\t\t? await readAndParse<ISequencedDocumentMessage[]>(\n\t\t\t\t\t\tthis.documentStorageService,\n\t\t\t\t\t\tthis.logtailSha,\n\t\t\t\t )\n\t\t\t\t: [];\n\t\t\tthis.logtailSha = undefined;\n\n\t\t\tif (this.snapshotOps !== undefined && this.snapshotOps.length !== 0) {\n\t\t\t\tconst messages = this.snapshotOps.filter(\n\t\t\t\t\t(op) => op.sequenceNumber >= from && op.sequenceNumber < to,\n\t\t\t\t);\n\t\t\t\tvalidateMessages(\"snapshotOps\", messages, from, this.logger, false /* strict */);\n\t\t\t\tif (messages.length > 0 && messages[0].sequenceNumber === from) {\n\t\t\t\t\tthis.snapshotOps = this.snapshotOps.filter((op) => op.sequenceNumber >= to);\n\t\t\t\t\topsFromSnapshot += messages.length;\n\t\t\t\t\treturn { messages, partialResult: true };\n\t\t\t\t}\n\t\t\t\tthis.snapshotOps = undefined;\n\t\t\t}\n\n\t\t\tconst ops = await this.deltaStorageService.get(this.tenantId, this.id, from, to);\n\t\t\tvalidateMessages(\"storage\", ops.messages, from, this.logger, false /* strict */);\n\t\t\topsFromStorage += ops.messages.length;\n\t\t\treturn ops;\n\t\t};\n\n\t\tconst stream = requestOps(\n\t\t\tasync (from: number, to: number, telemetryProps: ITelemetryProperties) => {\n\t\t\t\tconst result = await requestCallback(from, to, telemetryProps);\n\t\t\t\t// Catch all case, just in case\n\t\t\t\tvalidateMessages(\"catch all\", result.messages, from, this.logger);\n\t\t\t\treturn result;\n\t\t\t},\n\t\t\t// Staging: starting with no concurrency, listening for feedback first.\n\t\t\t// In future releases we will switch to actual concurrency\n\t\t\t1, // concurrency\n\t\t\tfromTotal, // inclusive\n\t\t\ttoTotal, // exclusive\n\t\t\tMaxBatchDeltas,\n\t\t\tthis.logger,\n\t\t\tabortSignal,\n\t\t\tfetchReason,\n\t\t);\n\n\t\treturn streamObserver(stream, (result) => {\n\t\t\tif (result.done && opsFromSnapshot + opsFromStorage !== 0) {\n\t\t\t\tthis.logger.sendPerformanceEvent({\n\t\t\t\t\teventName: \"CacheOpsRetrieved\",\n\t\t\t\t\topsFromSnapshot,\n\t\t\t\t\topsFromStorage,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t}\n}\n\n/**\n * Provides access to the underlying delta storage on the server for routerlicious driver.\n */\nexport class DeltaStorageService implements IDeltaStorageService {\n\tconstructor(\n\t\tprivate readonly url: string,\n\t\tprivate readonly restWrapper: RestWrapper,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprivate readonly getRestWrapper: () => Promise<RestWrapper> = async () => this.restWrapper,\n\t\tprivate readonly getDeltaStorageUrl: () => string = () => this.url,\n\t) {}\n\n\tpublic async get(\n\t\ttenantId: string,\n\t\tid: string,\n\t\tfrom: number, // inclusive\n\t\tto: number, // exclusive\n\t): Promise<IDeltasFetchResult> {\n\t\tconst ops = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"OpsFetch\",\n\t\t\t\tfrom,\n\t\t\t\tto,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst restWrapper = await this.getRestWrapper();\n\t\t\t\tconst url = this.getDeltaStorageUrl();\n\t\t\t\tconst response = await restWrapper.get<ISequencedDocumentMessage[]>(url, {\n\t\t\t\t\tfrom: from - 1,\n\t\t\t\t\tto,\n\t\t\t\t});\n\t\t\t\tevent.end({\n\t\t\t\t\tlength: response.content.length,\n\t\t\t\t\tdetails: JSON.stringify({\n\t\t\t\t\t\tfirstOpSeqNumber: response.content[0]?.sequenceNumber,\n\t\t\t\t\t\tlastOpSeqNumber:\n\t\t\t\t\t\t\tresponse.content[response.content.length - 1]?.sequenceNumber,\n\t\t\t\t\t}),\n\t\t\t\t\t...response.propsToLog,\n\t\t\t\t\t...getW3CData(response.requestUrl, \"xmlhttprequest\"),\n\t\t\t\t});\n\t\t\t\treturn response.content;\n\t\t\t},\n\t\t);\n\n\t\t// It is assumed that server always returns all the ops that it has in the range that was requested.\n\t\t// This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n\t\treturn { messages: ops, partialResult: false };\n\t}\n}\n"]}
@@ -4,9 +4,9 @@
4
4
  */
5
5
  import { IDeltaStorageService, IDocumentDeltaStorageService, IDeltasFetchResult, IStream } from "@fluidframework/driver-definitions";
6
6
  import { ISequencedDocumentMessage } from "@fluidframework/protocol-definitions";
7
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
8
- import { RestWrapper } from "@fluidframework/server-services-client";
7
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
9
8
  import { DocumentStorageService } from "./documentStorageService";
9
+ import { RestWrapper } from "./restWrapperBase";
10
10
  /**
11
11
  * Storage service limited to only being able to fetch documents for a specific document
12
12
  */
@@ -15,10 +15,11 @@ export declare class DocumentDeltaStorageService implements IDocumentDeltaStorag
15
15
  private readonly id;
16
16
  private readonly deltaStorageService;
17
17
  private readonly documentStorageService;
18
- constructor(tenantId: string, id: string, deltaStorageService: IDeltaStorageService, documentStorageService: DocumentStorageService);
18
+ private readonly logger;
19
+ constructor(tenantId: string, id: string, deltaStorageService: IDeltaStorageService, documentStorageService: DocumentStorageService, logger: ITelemetryLoggerExt);
19
20
  private logtailSha;
20
- fetchMessages(from: number, to: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): IStream<ISequencedDocumentMessage[]>;
21
- private getCore;
21
+ private snapshotOps;
22
+ fetchMessages(fromTotal: number, toTotal: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): IStream<ISequencedDocumentMessage[]>;
22
23
  }
23
24
  /**
24
25
  * Provides access to the underlying delta storage on the server for routerlicious driver.
@@ -29,7 +30,7 @@ export declare class DeltaStorageService implements IDeltaStorageService {
29
30
  private readonly logger;
30
31
  private readonly getRestWrapper;
31
32
  private readonly getDeltaStorageUrl;
32
- constructor(url: string, restWrapper: RestWrapper, logger: ITelemetryLogger, getRestWrapper?: () => Promise<RestWrapper>, getDeltaStorageUrl?: () => string);
33
+ constructor(url: string, restWrapper: RestWrapper, logger: ITelemetryLoggerExt, getRestWrapper?: () => Promise<RestWrapper>, getDeltaStorageUrl?: () => string);
33
34
  get(tenantId: string, id: string, from: number, // inclusive
34
35
  to: number): Promise<IDeltasFetchResult>;
35
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAExE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAHtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,mBAAmB,EAAE,oBAAoB,EACzC,sBAAsB,EAAE,sBAAsB;IAGnE,OAAO,CAAC,UAAU,CAA8D;IAEhF,aAAa,CAAC,IAAI,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC;YAkBzB,OAAO;CAiBxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAJlB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB,EACxB,cAAc,GAAE,MAAM,OAAO,CAAC,WAAW,CAAgC,EACzE,kBAAkB,GAAE,MAAM,MAAuB;IAIzD,GAAG,CACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACX,OAAO,CAAC,kBAAkB,CAAC;CAyBjC"}
1
+ {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACN,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACP,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAOjF,OAAO,EAAE,mBAAmB,EAAoB,MAAM,iCAAiC,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAE9E,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAJN,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,mBAAmB,EAAE,oBAAoB,EACzC,sBAAsB,EAAE,sBAAsB,EAC9C,MAAM,EAAE,mBAAmB;IAG7C,OAAO,CAAC,UAAU,CAA8D;IAChF,OAAO,CAAC,WAAW,CAA0C;IAE7D,aAAa,CACZ,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,yBAAyB,EAAE,CAAC;CAmEvC;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAE9D,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBAJlB,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,mBAAmB,EAC3B,cAAc,GAAE,MAAM,OAAO,CAAC,WAAW,CAAgC,EACzE,kBAAkB,GAAE,MAAM,MAAuB;IAGtD,GAAG,CACf,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACR,OAAO,CAAC,kBAAkB,CAAC;CAiC9B"}
@@ -6,14 +6,14 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.R11sDocumentDeltaConnection = void 0;
8
8
  const driver_base_1 = require("@fluidframework/driver-base");
9
- const errorUtils_1 = require("./errorUtils");
10
- const packageVersion_1 = require("./packageVersion");
9
+ const errorUtils_1 = require("./errorUtils.cjs");
10
+ const packageVersion_1 = require("./packageVersion.cjs");
11
11
  const protocolVersions = ["^0.4.0", "^0.3.0", "^0.2.0", "^0.1.0"];
12
12
  /**
13
13
  * Wrapper over the shared one for driver specific translation.
14
14
  */
15
15
  class R11sDocumentDeltaConnection extends driver_base_1.DocumentDeltaConnection {
16
- static async create(tenantId, id, token, io, client, url, logger, timeoutMs = 20000) {
16
+ static async create(tenantId, id, token, io, client, url, logger, timeoutMs = 20000, enableLongPollingDowngrade = true) {
17
17
  const socket = io(url, {
18
18
  query: {
19
19
  documentId: id,
@@ -33,9 +33,7 @@ class R11sDocumentDeltaConnection extends driver_base_1.DocumentDeltaConnection
33
33
  versions: protocolVersions,
34
34
  relayUserAgent: [client.details.environment, ` driverVersion:${packageVersion_1.pkgVersion}`].join(";"),
35
35
  };
36
- // TODO: expose to host at factory level
37
- const enableLongPollingDowngrades = true;
38
- const deltaConnection = new R11sDocumentDeltaConnection(socket, id, logger, enableLongPollingDowngrades);
36
+ const deltaConnection = new R11sDocumentDeltaConnection(socket, id, logger, enableLongPollingDowngrade);
39
37
  await deltaConnection.initialize(connectMessage, timeoutMs);
40
38
  return deltaConnection;
41
39
  }
@@ -46,13 +44,10 @@ class R11sDocumentDeltaConnection extends driver_base_1.DocumentDeltaConnection
46
44
  // Note: we suspect the incoming error object is either:
47
45
  // - a socketError: add it to the R11sError object for driver to be able to parse it and reason over it.
48
46
  // - anything else: let base class handle it
49
- if (canRetry && Number.isInteger(error === null || error === void 0 ? void 0 : error.code) && typeof (error === null || error === void 0 ? void 0 : error.message) === "string") {
50
- return (0, errorUtils_1.errorObjectFromSocketError)(error, handler);
51
- }
52
- else {
53
- return super.createErrorObject(handler, error, canRetry);
54
- }
47
+ return canRetry && Number.isInteger(error?.code) && typeof error?.message === "string"
48
+ ? (0, errorUtils_1.errorObjectFromSocketError)(error, handler)
49
+ : super.createErrorObject(handler, error, canRetry);
55
50
  }
56
51
  }
57
52
  exports.R11sDocumentDeltaConnection = R11sDocumentDeltaConnection;
58
- //# sourceMappingURL=documentDeltaConnection.js.map
53
+ //# sourceMappingURL=documentDeltaConnection.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentDeltaConnection.cjs","sourceRoot":"","sources":["../src/documentDeltaConnection.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,6DAAsE;AAItE,iDAA4E;AAC5E,yDAA+D;AAE/D,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AAElE;;GAEG;AACH,MAAa,2BAA4B,SAAQ,qCAAuB;IAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CACzB,QAAgB,EAChB,EAAU,EACV,KAAoB,EACpB,EAA+B,EAC/B,MAAe,EACf,GAAW,EACX,MAA2B,EAC3B,SAAS,GAAG,KAAK,EACjB,0BAA0B,GAAG,IAAI;QAEjC,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;YACtB,KAAK,EAAE;gBACN,UAAU,EAAE,EAAE;gBACd,QAAQ;aACR;YACD,YAAY,EAAE,KAAK;YACnB,8DAA8D;YAC9D,UAAU,EAAE,CAAC,WAAW,CAAC;YACzB,OAAO,EAAE,SAAS;SAClB,CAAC,CAAC;QAEH,MAAM,cAAc,GAAa;YAChC,MAAM;YACN,EAAE;YACF,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,QAAQ;YACR,KAAK;YACL,QAAQ,EAAE,gBAAgB;YAC1B,cAAc,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE,kBAAkB,2BAAa,EAAE,CAAC,CAAC,IAAI,CACnF,GAAG,CACH;SACD,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,2BAA2B,CACtD,MAAM,EACN,EAAE,EACF,MAAM,EACN,0BAA0B,CAC1B,CAAC;QAEF,MAAM,eAAe,CAAC,UAAU,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAC5D,OAAO,eAAe,CAAC;IACxB,CAAC;IAED;;OAEG;IACO,iBAAiB,CAAC,OAAe,EAAE,KAAW,EAAE,QAAQ,GAAG,IAAI;QACxE,wDAAwD;QACxD,wGAAwG;QACxG,4CAA4C;QAC5C,OAAO,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ;YACrF,CAAC,CAAC,IAAA,uCAA0B,EAAC,KAAyB,EAAE,OAAO,CAAC;YAChE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;CACD;AAzDD,kEAyDC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { DocumentDeltaConnection } from \"@fluidframework/driver-base\";\nimport { IAnyDriverError, IDocumentDeltaConnection } from \"@fluidframework/driver-definitions\";\nimport { IClient, IConnect } from \"@fluidframework/protocol-definitions\";\nimport type { io as SocketIOClientStatic } from \"socket.io-client\";\nimport { errorObjectFromSocketError, IR11sSocketError } from \"./errorUtils\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\n\nconst protocolVersions = [\"^0.4.0\", \"^0.3.0\", \"^0.2.0\", \"^0.1.0\"];\n\n/**\n * Wrapper over the shared one for driver specific translation.\n */\nexport class R11sDocumentDeltaConnection extends DocumentDeltaConnection {\n\tpublic static async create(\n\t\ttenantId: string,\n\t\tid: string,\n\t\ttoken: string | null,\n\t\tio: typeof SocketIOClientStatic,\n\t\tclient: IClient,\n\t\turl: string,\n\t\tlogger: ITelemetryLoggerExt,\n\t\ttimeoutMs = 20000,\n\t\tenableLongPollingDowngrade = true,\n\t): Promise<IDocumentDeltaConnection> {\n\t\tconst socket = io(url, {\n\t\t\tquery: {\n\t\t\t\tdocumentId: id,\n\t\t\t\ttenantId,\n\t\t\t},\n\t\t\treconnection: false,\n\t\t\t// Default to websocket connection, with long-polling disabled\n\t\t\ttransports: [\"websocket\"],\n\t\t\ttimeout: timeoutMs,\n\t\t});\n\n\t\tconst connectMessage: IConnect = {\n\t\t\tclient,\n\t\t\tid,\n\t\t\tmode: client.mode,\n\t\t\ttenantId,\n\t\t\ttoken, // Token is going to indicate tenant level information, etc...\n\t\t\tversions: protocolVersions,\n\t\t\trelayUserAgent: [client.details.environment, ` driverVersion:${driverVersion}`].join(\n\t\t\t\t\";\",\n\t\t\t),\n\t\t};\n\n\t\tconst deltaConnection = new R11sDocumentDeltaConnection(\n\t\t\tsocket,\n\t\t\tid,\n\t\t\tlogger,\n\t\t\tenableLongPollingDowngrade,\n\t\t);\n\n\t\tawait deltaConnection.initialize(connectMessage, timeoutMs);\n\t\treturn deltaConnection;\n\t}\n\n\t/**\n\t * Error raising for socket.io issues\n\t */\n\tprotected createErrorObject(handler: string, error?: any, canRetry = true): IAnyDriverError {\n\t\t// Note: we suspect the incoming error object is either:\n\t\t// - a socketError: add it to the R11sError object for driver to be able to parse it and reason over it.\n\t\t// - anything else: let base class handle it\n\t\treturn canRetry && Number.isInteger(error?.code) && typeof error?.message === \"string\"\n\t\t\t? errorObjectFromSocketError(error as IR11sSocketError, handler)\n\t\t\t: super.createErrorObject(handler, error, canRetry);\n\t}\n}\n"]}
@@ -2,17 +2,16 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
5
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
6
6
  import { DocumentDeltaConnection } from "@fluidframework/driver-base";
7
- import { IDocumentDeltaConnection } from "@fluidframework/driver-definitions";
8
- import { IAnyDriverError } from "@fluidframework/driver-utils";
7
+ import { IAnyDriverError, IDocumentDeltaConnection } from "@fluidframework/driver-definitions";
9
8
  import { IClient } from "@fluidframework/protocol-definitions";
10
9
  import type { io as SocketIOClientStatic } from "socket.io-client";
11
10
  /**
12
11
  * Wrapper over the shared one for driver specific translation.
13
12
  */
14
13
  export declare class R11sDocumentDeltaConnection extends DocumentDeltaConnection {
15
- static create(tenantId: string, id: string, token: string | null, io: typeof SocketIOClientStatic, client: IClient, url: string, logger: ITelemetryLogger, timeoutMs?: number): Promise<IDocumentDeltaConnection>;
14
+ static create(tenantId: string, id: string, token: string | null, io: typeof SocketIOClientStatic, client: IClient, url: string, logger: ITelemetryLoggerExt, timeoutMs?: number, enableLongPollingDowngrade?: boolean): Promise<IDocumentDeltaConnection>;
16
15
  /**
17
16
  * Error raising for socket.io issues
18
17
  */
@@ -1 +1 @@
1
- {"version":3,"file":"documentDeltaConnection.d.ts","sourceRoot":"","sources":["../src/documentDeltaConnection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAY,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,EAAE,IAAI,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMnE;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,uBAAuB;WAChD,MAAM,CACtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,EAAE,EAAE,OAAO,oBAAoB,EAC/B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,gBAAgB,EACxB,SAAS,SAAQ,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAgCzD;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,UAAO,GAAG,eAAe;CAU9F"}
1
+ {"version":3,"file":"documentDeltaConnection.d.ts","sourceRoot":"","sources":["../src/documentDeltaConnection.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC/F,OAAO,EAAE,OAAO,EAAY,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,EAAE,IAAI,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAMnE;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,uBAAuB;WACnD,MAAM,CACzB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,EAAE,EAAE,OAAO,oBAAoB,EAC/B,MAAM,EAAE,OAAO,EACf,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,SAAS,SAAQ,EACjB,0BAA0B,UAAO,GAC/B,OAAO,CAAC,wBAAwB,CAAC;IAmCpC;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,UAAO,GAAG,eAAe;CAQ3F"}
@@ -3,41 +3,24 @@
3
3
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
4
4
  * Licensed under the MIT License.
5
5
  */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
6
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
7
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
8
  };
28
9
  Object.defineProperty(exports, "__esModule", { value: true });
29
10
  exports.DocumentService = void 0;
30
- const common_utils_1 = require("@fluidframework/common-utils");
31
- const api = __importStar(require("@fluidframework/driver-definitions"));
11
+ const core_utils_1 = require("@fluidframework/core-utils");
12
+ const driver_definitions_1 = require("@fluidframework/driver-definitions");
32
13
  const driver_utils_1 = require("@fluidframework/driver-utils");
33
- const server_services_client_1 = require("@fluidframework/server-services-client");
34
14
  const socket_io_client_1 = __importDefault(require("socket.io-client"));
35
15
  const telemetry_utils_1 = require("@fluidframework/telemetry-utils");
36
- const deltaStorageService_1 = require("./deltaStorageService");
37
- const documentStorageService_1 = require("./documentStorageService");
38
- const documentDeltaConnection_1 = require("./documentDeltaConnection");
39
- const nullBlobStorageService_1 = require("./nullBlobStorageService");
40
- const restWrapper_1 = require("./restWrapper");
16
+ const deltaStorageService_1 = require("./deltaStorageService.cjs");
17
+ const documentStorageService_1 = require("./documentStorageService.cjs");
18
+ const documentDeltaConnection_1 = require("./documentDeltaConnection.cjs");
19
+ const nullBlobStorageService_1 = require("./nullBlobStorageService.cjs");
20
+ const restWrapper_1 = require("./restWrapper.cjs");
21
+ const packageVersion_1 = require("./packageVersion.cjs");
22
+ const gitManager_1 = require("./gitManager.cjs");
23
+ const historian_1 = require("./historian.cjs");
41
24
  /**
42
25
  * Amount of time between discoveries within which we don't need to rediscover on re-connect.
43
26
  * Currently, R11s defines session length at 10 minutes. To avoid any weird unknown edge-cases though,
@@ -49,25 +32,33 @@ const RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute
49
32
  * The DocumentService manages the Socket.IO connection and manages routing requests to connected
50
33
  * clients.
51
34
  */
35
+ // eslint-disable-next-line import/namespace
52
36
  class DocumentService {
53
- constructor(_resolvedUrl, ordererUrl, deltaStorageUrl, storageUrl, logger, tokenProvider, tenantId, documentId, driverPolicies, blobCache, snapshotTreeCache, discoverFluidResolvedUrl) {
37
+ get resolvedUrl() {
38
+ return this._resolvedUrl;
39
+ }
40
+ constructor(_resolvedUrl, ordererUrl, deltaStorageUrl, deltaStreamUrl, storageUrl, logger, tokenProvider, tenantId, documentId, ordererRestWrapper, documentStorageServicePolicies, driverPolicies, blobCache, wholeSnapshotTreeCache, shreddedSummaryTreeCache, discoverFluidResolvedUrl, storageRestWrapper, storageTokenFetcher, ordererTokenFetcher) {
54
41
  this._resolvedUrl = _resolvedUrl;
55
42
  this.ordererUrl = ordererUrl;
56
43
  this.deltaStorageUrl = deltaStorageUrl;
44
+ this.deltaStreamUrl = deltaStreamUrl;
57
45
  this.storageUrl = storageUrl;
58
46
  this.logger = logger;
59
47
  this.tokenProvider = tokenProvider;
60
48
  this.tenantId = tenantId;
61
49
  this.documentId = documentId;
50
+ this.ordererRestWrapper = ordererRestWrapper;
51
+ this.documentStorageServicePolicies = documentStorageServicePolicies;
62
52
  this.driverPolicies = driverPolicies;
63
53
  this.blobCache = blobCache;
64
- this.snapshotTreeCache = snapshotTreeCache;
54
+ this.wholeSnapshotTreeCache = wholeSnapshotTreeCache;
55
+ this.shreddedSummaryTreeCache = shreddedSummaryTreeCache;
65
56
  this.discoverFluidResolvedUrl = discoverFluidResolvedUrl;
57
+ this.storageRestWrapper = storageRestWrapper;
58
+ this.storageTokenFetcher = storageTokenFetcher;
59
+ this.ordererTokenFetcher = ordererTokenFetcher;
66
60
  this.lastDiscoveredAt = Date.now();
67
61
  }
68
- get resolvedUrl() {
69
- return this._resolvedUrl;
70
- }
71
62
  dispose() { }
72
63
  /**
73
64
  * Connects to a storage endpoint for snapshot service.
@@ -86,26 +77,24 @@ class DocumentService {
86
77
  if (shouldUpdateDiscoveredSessionInfo) {
87
78
  await this.refreshDiscovery();
88
79
  }
89
- if (!this.storageManager || !this.noCacheStorageManager || shouldUpdateDiscoveredSessionInfo) {
90
- const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);
91
- const storageRestWrapper = await restWrapper_1.RouterliciousStorageRestWrapper.load(this.tenantId, this.documentId, this.tokenProvider, this.logger, rateLimiter, this.driverPolicies.enableRestLess, this.storageUrl);
92
- const historian = new server_services_client_1.Historian(this.storageUrl, true, false, storageRestWrapper);
93
- this.storageManager = new server_services_client_1.GitManager(historian);
94
- const noCacheHistorian = new server_services_client_1.Historian(this.storageUrl, true, true, storageRestWrapper);
95
- this.noCacheStorageManager = new server_services_client_1.GitManager(noCacheHistorian);
80
+ if (!this.storageManager ||
81
+ !this.noCacheStorageManager ||
82
+ shouldUpdateDiscoveredSessionInfo) {
83
+ if (shouldUpdateDiscoveredSessionInfo) {
84
+ const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);
85
+ this.storageRestWrapper = await restWrapper_1.RouterliciousStorageRestWrapper.load(this.tenantId, this.storageTokenFetcher, this.logger, rateLimiter, this.driverPolicies.enableRestLess, this.storageUrl);
86
+ }
87
+ const historian = new historian_1.Historian(true, false, this.storageRestWrapper);
88
+ this.storageManager = new gitManager_1.GitManager(historian);
89
+ const noCacheHistorian = new historian_1.Historian(true, true, this.storageRestWrapper);
90
+ this.noCacheStorageManager = new gitManager_1.GitManager(noCacheHistorian);
96
91
  }
97
92
  return disableCache ? this.noCacheStorageManager : this.storageManager;
98
93
  };
99
94
  // Initialize storageManager and noCacheStorageManager
100
95
  const storageManager = await getStorageManager();
101
96
  const noCacheStorageManager = await getStorageManager(true);
102
- const documentStorageServicePolicies = {
103
- caching: this.driverPolicies.enablePrefetch
104
- ? api.LoaderCachingPolicy.Prefetch
105
- : api.LoaderCachingPolicy.NoCaching,
106
- minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,
107
- };
108
- this.documentStorageService = new documentStorageService_1.DocumentStorageService(this.documentId, storageManager, this.logger, documentStorageServicePolicies, this.driverPolicies, this.blobCache, this.snapshotTreeCache, noCacheStorageManager, getStorageManager);
97
+ this.documentStorageService = new documentStorageService_1.DocumentStorageService(this.documentId, storageManager, this.logger, this.documentStorageServicePolicies, this.driverPolicies, this.blobCache, this.wholeSnapshotTreeCache, this.shreddedSummaryTreeCache, noCacheStorageManager, getStorageManager);
109
98
  return this.documentStorageService;
110
99
  }
111
100
  /**
@@ -115,21 +104,19 @@ class DocumentService {
115
104
  */
116
105
  async connectToDeltaStorage() {
117
106
  await this.connectToStorage();
118
- (0, common_utils_1.assert)(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
107
+ (0, core_utils_1.assert)(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
119
108
  const getRestWrapper = async () => {
120
109
  const shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();
121
110
  if (shouldUpdateDiscoveredSessionInfo) {
122
111
  await this.refreshDiscovery();
123
- }
124
- if (!this.ordererRestWrapper || shouldUpdateDiscoveredSessionInfo) {
125
112
  const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
126
- this.ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(this.tenantId, this.documentId, this.tokenProvider, this.logger, rateLimiter, this.driverPolicies.enableRestLess);
113
+ this.ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(this.ordererTokenFetcher, this.logger, rateLimiter, this.driverPolicies.enableRestLess);
127
114
  }
128
115
  return this.ordererRestWrapper;
129
116
  };
130
117
  const restWrapper = await getRestWrapper();
131
118
  const deltaStorageService = new deltaStorageService_1.DeltaStorageService(this.deltaStorageUrl, restWrapper, this.logger, getRestWrapper, () => this.deltaStorageUrl);
132
- return new deltaStorageService_1.DocumentDeltaStorageService(this.tenantId, this.documentId, deltaStorageService, this.documentStorageService);
119
+ return new deltaStorageService_1.DocumentDeltaStorageService(this.tenantId, this.documentId, deltaStorageService, this.documentStorageService, this.logger);
133
120
  }
134
121
  /**
135
122
  * Connects to a delta stream endpoint for emitting ops.
@@ -138,23 +125,32 @@ class DocumentService {
138
125
  */
139
126
  async connectToDeltaStream(client) {
140
127
  const connect = async (refreshToken) => {
128
+ let ordererToken = await this.ordererRestWrapper.getToken();
141
129
  if (this.shouldUpdateDiscoveredSessionInfo()) {
142
130
  await this.refreshDiscovery();
143
131
  }
144
- const ordererToken = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
145
- eventName: "GetDeltaStreamToken",
146
- docId: this.documentId,
147
- details: JSON.stringify({
148
- refreshToken,
149
- }),
150
- }, async () => {
151
- return this.tokenProvider.fetchOrdererToken(this.tenantId, this.documentId, refreshToken);
152
- });
132
+ if (refreshToken) {
133
+ ordererToken = await telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
134
+ eventName: "GetDeltaStreamToken",
135
+ docId: this.documentId,
136
+ details: JSON.stringify({
137
+ refreshToken,
138
+ }),
139
+ }, async () => this.tokenProvider
140
+ .fetchOrdererToken(this.tenantId, this.documentId, refreshToken)
141
+ .then((newOrdererToken) => {
142
+ this.ordererRestWrapper.setToken(newOrdererToken);
143
+ return newOrdererToken;
144
+ }, (error) => {
145
+ const tokenError = (0, telemetry_utils_1.wrapError)(error, (errorMessage) => new driver_utils_1.NetworkErrorBasic(`The Host-provided token fetcher threw an error`, driver_definitions_1.DriverErrorTypes.fetchTokenError, (0, driver_utils_1.canRetryOnError)(error), { errorMessage, driverVersion: packageVersion_1.pkgVersion }));
146
+ throw tokenError;
147
+ }));
148
+ }
153
149
  return telemetry_utils_1.PerformanceEvent.timedExecAsync(this.logger, {
154
150
  eventName: "ConnectToDeltaStream",
155
151
  docId: this.documentId,
156
152
  }, async () => {
157
- return documentDeltaConnection_1.R11sDocumentDeltaConnection.create(this.tenantId, this.documentId, ordererToken.jwt, socket_io_client_1.default, client, this.ordererUrl, this.logger);
153
+ return documentDeltaConnection_1.R11sDocumentDeltaConnection.create(this.tenantId, this.documentId, ordererToken.jwt, socket_io_client_1.default, client, this.deltaStreamUrl, this.logger, undefined /* timeoutMs */, this.driverPolicies.enableLongPollingDowngrade);
158
154
  });
159
155
  };
160
156
  // Attempt to establish connection.
@@ -164,7 +160,7 @@ class DocumentService {
164
160
  return connection;
165
161
  }
166
162
  catch (error) {
167
- if ((error === null || error === void 0 ? void 0 : error.statusCode) === 401) {
163
+ if (error?.statusCode === 401) {
168
164
  // Fetch new token and retry once,
169
165
  // otherwise 401 will be bubbled up as non-retriable AuthorizationError.
170
166
  return connect(true /* refreshToken */);
@@ -189,6 +185,7 @@ class DocumentService {
189
185
  this.storageUrl = fluidResolvedUrl.endpoints.storageUrl;
190
186
  this.ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;
191
187
  this.deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;
188
+ this.deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || this.ordererUrl;
192
189
  }
193
190
  /**
194
191
  * Whether enough time has passed since last disconnect to warrant a new discovery call on reconnect.
@@ -202,7 +199,7 @@ class DocumentService {
202
199
  // without re-doing discovery on the next attempt to connect.
203
200
  // Disconnect event is not so reliable in local testing. To ensure re-discovery when necessary,
204
201
  // re-discover if enough time has passed since last discovery.
205
- const pastLastDiscoveryTimeThreshold = (now - this.lastDiscoveredAt) > RediscoverAfterTimeSinceDiscoveryMs;
202
+ const pastLastDiscoveryTimeThreshold = now - this.lastDiscoveredAt > RediscoverAfterTimeSinceDiscoveryMs;
206
203
  if (pastLastDiscoveryTimeThreshold) {
207
204
  // Reset discover promise and refresh discovery.
208
205
  this.lastDiscoveredAt = Date.now();
@@ -216,4 +213,4 @@ class DocumentService {
216
213
  }
217
214
  }
218
215
  exports.DocumentService = DocumentService;
219
- //# sourceMappingURL=documentService.js.map
216
+ //# sourceMappingURL=documentService.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentService.cjs","sourceRoot":"","sources":["../src/documentService.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 { assert } from \"@fluidframework/core-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { DriverErrorTypes } from \"@fluidframework/driver-definitions\";\nimport { RateLimiter, NetworkErrorBasic, canRetryOnError } from \"@fluidframework/driver-utils\";\nimport { IClient } from \"@fluidframework/protocol-definitions\";\nimport io from \"socket.io-client\";\nimport { PerformanceEvent, wrapError, ITelemetryLoggerExt } from \"@fluidframework/telemetry-utils\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport {\n\tRouterliciousOrdererRestWrapper,\n\tRouterliciousStorageRestWrapper,\n\tTokenFetcher,\n} from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { GitManager } from \"./gitManager\";\nimport { Historian } from \"./historian\";\nimport { RestWrapper } from \"./restWrapperBase\";\nimport { INormalizedWholeSnapshot } from \"./contracts\";\n\n/**\n * Amount of time between discoveries within which we don't need to rediscover on re-connect.\n * Currently, R11s defines session length at 10 minutes. To avoid any weird unknown edge-cases though,\n * we set the limit to 5 minutes here.\n * In the future, we likely want to retrieve this information from service's \"inactive session\" definition.\n */\nconst RediscoverAfterTimeSinceDiscoveryMs = 5 * 60000; // 5 minute\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients.\n */\n// eslint-disable-next-line import/namespace\nexport class DocumentService implements api.IDocumentService {\n\tprivate lastDiscoveredAt: number = Date.now();\n\tprivate discoverP: Promise<void> | undefined;\n\n\tprivate storageManager: GitManager | undefined;\n\tprivate noCacheStorageManager: GitManager | undefined;\n\n\tpublic get resolvedUrl() {\n\t\treturn this._resolvedUrl;\n\t}\n\n\tconstructor(\n\t\tprivate _resolvedUrl: api.IResolvedUrl,\n\t\tprotected ordererUrl: string,\n\t\tprivate deltaStorageUrl: string,\n\t\tprivate deltaStreamUrl: string,\n\t\tprivate storageUrl: string,\n\t\tprivate readonly logger: ITelemetryLoggerExt,\n\t\tprotected tokenProvider: ITokenProvider,\n\t\tprotected tenantId: string,\n\t\tprotected documentId: string,\n\t\tprotected ordererRestWrapper: RouterliciousOrdererRestWrapper,\n\t\tprivate readonly documentStorageServicePolicies: api.IDocumentStorageServicePolicies,\n\t\tprivate readonly driverPolicies: IRouterliciousDriverPolicies,\n\t\tprivate readonly blobCache: ICache<ArrayBufferLike>,\n\t\tprivate readonly wholeSnapshotTreeCache: ICache<INormalizedWholeSnapshot>,\n\t\tprivate readonly shreddedSummaryTreeCache: ICache<ISnapshotTreeVersion>,\n\t\tprivate readonly discoverFluidResolvedUrl: () => Promise<api.IResolvedUrl>,\n\t\tprivate storageRestWrapper: RouterliciousStorageRestWrapper,\n\t\tprivate readonly storageTokenFetcher: TokenFetcher,\n\t\tprivate readonly ordererTokenFetcher: TokenFetcher,\n\t) {}\n\n\tprivate documentStorageService: DocumentStorageService | undefined;\n\n\tpublic dispose() {}\n\n\t/**\n\t * Connects to a storage endpoint for snapshot service.\n\t *\n\t * @returns returns the document storage service for routerlicious driver.\n\t */\n\tpublic async connectToStorage(): Promise<api.IDocumentStorageService> {\n\t\tif (this.documentStorageService !== undefined) {\n\t\t\treturn this.documentStorageService;\n\t\t}\n\n\t\tif (this.storageUrl === undefined) {\n\t\t\treturn new NullBlobStorageService();\n\t\t}\n\n\t\tconst getStorageManager = async (disableCache?: boolean): Promise<GitManager> => {\n\t\t\tconst shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n\t\t\tif (shouldUpdateDiscoveredSessionInfo) {\n\t\t\t\tawait this.refreshDiscovery();\n\t\t\t}\n\t\t\tif (\n\t\t\t\t!this.storageManager ||\n\t\t\t\t!this.noCacheStorageManager ||\n\t\t\t\tshouldUpdateDiscoveredSessionInfo\n\t\t\t) {\n\t\t\t\tif (shouldUpdateDiscoveredSessionInfo) {\n\t\t\t\t\tconst rateLimiter = new RateLimiter(\n\t\t\t\t\t\tthis.driverPolicies.maxConcurrentStorageRequests,\n\t\t\t\t\t);\n\t\t\t\t\tthis.storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n\t\t\t\t\t\tthis.tenantId,\n\t\t\t\t\t\tthis.storageTokenFetcher,\n\t\t\t\t\t\tthis.logger,\n\t\t\t\t\t\trateLimiter,\n\t\t\t\t\t\tthis.driverPolicies.enableRestLess,\n\t\t\t\t\t\tthis.storageUrl,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst historian = new Historian(true, false, this.storageRestWrapper);\n\t\t\t\tthis.storageManager = new GitManager(historian);\n\t\t\t\tconst noCacheHistorian = new Historian(true, true, this.storageRestWrapper);\n\t\t\t\tthis.noCacheStorageManager = new GitManager(noCacheHistorian);\n\t\t\t}\n\n\t\t\treturn disableCache ? this.noCacheStorageManager : this.storageManager;\n\t\t};\n\t\t// Initialize storageManager and noCacheStorageManager\n\t\tconst storageManager = await getStorageManager();\n\t\tconst noCacheStorageManager = await getStorageManager(true);\n\t\tthis.documentStorageService = new DocumentStorageService(\n\t\t\tthis.documentId,\n\t\t\tstorageManager,\n\t\t\tthis.logger,\n\t\t\tthis.documentStorageServicePolicies,\n\t\t\tthis.driverPolicies,\n\t\t\tthis.blobCache,\n\t\t\tthis.wholeSnapshotTreeCache,\n\t\t\tthis.shreddedSummaryTreeCache,\n\t\t\tnoCacheStorageManager,\n\t\t\tgetStorageManager,\n\t\t);\n\t\treturn this.documentStorageService;\n\t}\n\n\t/**\n\t * Connects to a delta storage endpoint for getting ops between a range.\n\t *\n\t * @returns returns the document delta storage service for routerlicious driver.\n\t */\n\tpublic async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n\t\tawait this.connectToStorage();\n\t\tassert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n\t\tconst getRestWrapper = async (): Promise<RestWrapper> => {\n\t\t\tconst shouldUpdateDiscoveredSessionInfo = this.shouldUpdateDiscoveredSessionInfo();\n\n\t\t\tif (shouldUpdateDiscoveredSessionInfo) {\n\t\t\t\tawait this.refreshDiscovery();\n\t\t\t\tconst rateLimiter = new RateLimiter(\n\t\t\t\t\tthis.driverPolicies.maxConcurrentOrdererRequests,\n\t\t\t\t);\n\t\t\t\tthis.ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n\t\t\t\t\tthis.ordererTokenFetcher,\n\t\t\t\t\tthis.logger,\n\t\t\t\t\trateLimiter,\n\t\t\t\t\tthis.driverPolicies.enableRestLess,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn this.ordererRestWrapper;\n\t\t};\n\t\tconst restWrapper = await getRestWrapper();\n\t\tconst deltaStorageService = new DeltaStorageService(\n\t\t\tthis.deltaStorageUrl,\n\t\t\trestWrapper,\n\t\t\tthis.logger,\n\t\t\tgetRestWrapper,\n\t\t\t() => this.deltaStorageUrl,\n\t\t);\n\t\treturn new DocumentDeltaStorageService(\n\t\t\tthis.tenantId,\n\t\t\tthis.documentId,\n\t\t\tdeltaStorageService,\n\t\t\tthis.documentStorageService,\n\t\t\tthis.logger,\n\t\t);\n\t}\n\n\t/**\n\t * Connects to a delta stream endpoint for emitting ops.\n\t *\n\t * @returns returns the document delta stream service for routerlicious driver.\n\t */\n\tpublic async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n\t\tconst connect = async (refreshToken?: boolean) => {\n\t\t\tlet ordererToken = await this.ordererRestWrapper.getToken();\n\t\t\tif (this.shouldUpdateDiscoveredSessionInfo()) {\n\t\t\t\tawait this.refreshDiscovery();\n\t\t\t}\n\n\t\t\tif (refreshToken) {\n\t\t\t\tordererToken = await PerformanceEvent.timedExecAsync(\n\t\t\t\t\tthis.logger,\n\t\t\t\t\t{\n\t\t\t\t\t\teventName: \"GetDeltaStreamToken\",\n\t\t\t\t\t\tdocId: this.documentId,\n\t\t\t\t\t\tdetails: JSON.stringify({\n\t\t\t\t\t\t\trefreshToken,\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t\tasync () =>\n\t\t\t\t\t\tthis.tokenProvider\n\t\t\t\t\t\t\t.fetchOrdererToken(this.tenantId, this.documentId, refreshToken)\n\t\t\t\t\t\t\t.then(\n\t\t\t\t\t\t\t\t(newOrdererToken) => {\n\t\t\t\t\t\t\t\t\tthis.ordererRestWrapper.setToken(newOrdererToken);\n\t\t\t\t\t\t\t\t\treturn newOrdererToken;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t(error) => {\n\t\t\t\t\t\t\t\t\tconst tokenError = wrapError(\n\t\t\t\t\t\t\t\t\t\terror,\n\t\t\t\t\t\t\t\t\t\t(errorMessage) =>\n\t\t\t\t\t\t\t\t\t\t\tnew NetworkErrorBasic(\n\t\t\t\t\t\t\t\t\t\t\t\t`The Host-provided token fetcher threw an error`,\n\t\t\t\t\t\t\t\t\t\t\t\tDriverErrorTypes.fetchTokenError,\n\t\t\t\t\t\t\t\t\t\t\t\tcanRetryOnError(error),\n\t\t\t\t\t\t\t\t\t\t\t\t{ errorMessage, driverVersion },\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tthrow tokenError;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\t\tthis.logger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"ConnectToDeltaStream\",\n\t\t\t\t\tdocId: this.documentId,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\treturn R11sDocumentDeltaConnection.create(\n\t\t\t\t\t\tthis.tenantId,\n\t\t\t\t\t\tthis.documentId,\n\t\t\t\t\t\tordererToken.jwt,\n\t\t\t\t\t\tio,\n\t\t\t\t\t\tclient,\n\t\t\t\t\t\tthis.deltaStreamUrl,\n\t\t\t\t\t\tthis.logger,\n\t\t\t\t\t\tundefined /* timeoutMs */,\n\t\t\t\t\t\tthis.driverPolicies.enableLongPollingDowngrade,\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\t// Attempt to establish connection.\n\t\t// Retry with new token on authorization error; otherwise, allow container layer to handle.\n\t\ttry {\n\t\t\tconst connection = await connect();\n\t\t\treturn connection;\n\t\t} catch (error: any) {\n\t\t\tif (error?.statusCode === 401) {\n\t\t\t\t// Fetch new token and retry once,\n\t\t\t\t// otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n\t\t\t\treturn connect(true /* refreshToken */);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Re-discover session URLs if necessary.\n\t */\n\tprivate async refreshDiscovery(): Promise<void> {\n\t\tif (!this.discoverP) {\n\t\t\tthis.discoverP = PerformanceEvent.timedExecAsync(\n\t\t\t\tthis.logger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"RefreshDiscovery\",\n\t\t\t\t},\n\t\t\t\tasync () => this.refreshDiscoveryCore(),\n\t\t\t);\n\t\t}\n\t\treturn this.discoverP;\n\t}\n\n\tprivate async refreshDiscoveryCore(): Promise<void> {\n\t\tconst fluidResolvedUrl = await this.discoverFluidResolvedUrl();\n\t\tthis._resolvedUrl = fluidResolvedUrl;\n\t\tthis.storageUrl = fluidResolvedUrl.endpoints.storageUrl;\n\t\tthis.ordererUrl = fluidResolvedUrl.endpoints.ordererUrl;\n\t\tthis.deltaStorageUrl = fluidResolvedUrl.endpoints.deltaStorageUrl;\n\t\tthis.deltaStreamUrl = fluidResolvedUrl.endpoints.deltaStreamUrl || this.ordererUrl;\n\t}\n\n\t/**\n\t * Whether enough time has passed since last disconnect to warrant a new discovery call on reconnect.\n\t */\n\tprivate shouldUpdateDiscoveredSessionInfo(): boolean {\n\t\tif (!this.driverPolicies.enableDiscovery) {\n\t\t\treturn false;\n\t\t}\n\t\tconst now = Date.now();\n\t\t// When connection is disconnected, we cannot know if session has moved or document has been deleted\n\t\t// without re-doing discovery on the next attempt to connect.\n\t\t// Disconnect event is not so reliable in local testing. To ensure re-discovery when necessary,\n\t\t// re-discover if enough time has passed since last discovery.\n\t\tconst pastLastDiscoveryTimeThreshold =\n\t\t\tnow - this.lastDiscoveredAt > RediscoverAfterTimeSinceDiscoveryMs;\n\t\tif (pastLastDiscoveryTimeThreshold) {\n\t\t\t// Reset discover promise and refresh discovery.\n\t\t\tthis.lastDiscoveredAt = Date.now();\n\t\t\tthis.discoverP = undefined;\n\t\t\tthis.refreshDiscovery().catch(() => {\n\t\t\t\t// Undo discovery time set on failure, so that next check refreshes.\n\t\t\t\tthis.lastDiscoveredAt = 0;\n\t\t\t});\n\t\t}\n\t\treturn pastLastDiscoveryTimeThreshold;\n\t}\n}\n"]}
@@ -4,11 +4,13 @@
4
4
  */
5
5
  import * as api from "@fluidframework/driver-definitions";
6
6
  import { IClient } from "@fluidframework/protocol-definitions";
7
- import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
+ import { ITelemetryLoggerExt } from "@fluidframework/telemetry-utils";
8
8
  import { ITokenProvider } from "./tokens";
9
+ import { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper, TokenFetcher } from "./restWrapper";
9
10
  import { IRouterliciousDriverPolicies } from "./policies";
10
11
  import { ICache } from "./cache";
11
12
  import { ISnapshotTreeVersion } from "./definitions";
13
+ import { INormalizedWholeSnapshot } from "./contracts";
12
14
  /**
13
15
  * The DocumentService manages the Socket.IO connection and manages routing requests to connected
14
16
  * clients.
@@ -17,22 +19,28 @@ export declare class DocumentService implements api.IDocumentService {
17
19
  private _resolvedUrl;
18
20
  protected ordererUrl: string;
19
21
  private deltaStorageUrl;
22
+ private deltaStreamUrl;
20
23
  private storageUrl;
21
24
  private readonly logger;
22
25
  protected tokenProvider: ITokenProvider;
23
26
  protected tenantId: string;
24
27
  protected documentId: string;
28
+ protected ordererRestWrapper: RouterliciousOrdererRestWrapper;
29
+ private readonly documentStorageServicePolicies;
25
30
  private readonly driverPolicies;
26
31
  private readonly blobCache;
27
- private readonly snapshotTreeCache;
32
+ private readonly wholeSnapshotTreeCache;
33
+ private readonly shreddedSummaryTreeCache;
28
34
  private readonly discoverFluidResolvedUrl;
35
+ private storageRestWrapper;
36
+ private readonly storageTokenFetcher;
37
+ private readonly ordererTokenFetcher;
29
38
  private lastDiscoveredAt;
30
39
  private discoverP;
31
40
  private storageManager;
32
41
  private noCacheStorageManager;
33
- private ordererRestWrapper;
34
42
  get resolvedUrl(): api.IResolvedUrl;
35
- constructor(_resolvedUrl: api.IResolvedUrl, ordererUrl: string, deltaStorageUrl: string, storageUrl: string, logger: ITelemetryLogger, tokenProvider: ITokenProvider, tenantId: string, documentId: string, driverPolicies: IRouterliciousDriverPolicies, blobCache: ICache<ArrayBufferLike>, snapshotTreeCache: ICache<ISnapshotTreeVersion>, discoverFluidResolvedUrl: () => Promise<api.IFluidResolvedUrl>);
43
+ constructor(_resolvedUrl: api.IResolvedUrl, ordererUrl: string, deltaStorageUrl: string, deltaStreamUrl: string, storageUrl: string, logger: ITelemetryLoggerExt, tokenProvider: ITokenProvider, tenantId: string, documentId: string, ordererRestWrapper: RouterliciousOrdererRestWrapper, documentStorageServicePolicies: api.IDocumentStorageServicePolicies, driverPolicies: IRouterliciousDriverPolicies, blobCache: ICache<ArrayBufferLike>, wholeSnapshotTreeCache: ICache<INormalizedWholeSnapshot>, shreddedSummaryTreeCache: ICache<ISnapshotTreeVersion>, discoverFluidResolvedUrl: () => Promise<api.IResolvedUrl>, storageRestWrapper: RouterliciousStorageRestWrapper, storageTokenFetcher: TokenFetcher, ordererTokenFetcher: TokenFetcher);
36
44
  private documentStorageService;
37
45
  dispose(): void;
38
46
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAI/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAUrD;;;GAGG;AACH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;IAapD,OAAO,CAAC,YAAY;IACpB,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,eAAe;IACvB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IAvB7C,OAAO,CAAC,gBAAgB,CAAsB;IAC9C,OAAO,CAAC,SAAS,CAA4B;IAE7C,OAAO,CAAC,cAAc,CAAyB;IAC/C,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,kBAAkB,CAA0B;IAEpD,IAAW,WAAW,qBAErB;gBAGW,YAAY,EAAE,GAAG,CAAC,YAAY,EAC5B,UAAU,EAAE,MAAM,EACpB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EACT,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAC/C,wBAAwB,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IAInF,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAgErE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAsC/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;IA2DzF;;OAEG;YACW,gBAAgB;YAahB,oBAAoB;IAQlC;;OAEG;IACH,OAAO,CAAC,iCAAiC;CAqB5C"}
1
+ {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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"}