@fluidframework/routerlicious-driver 2.0.0-internal.3.0.2 → 2.0.0-internal.3.2.0

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 (138) hide show
  1. package/.eslintrc.js +10 -12
  2. package/.mocharc.js +2 -2
  3. package/README.md +1 -1
  4. package/api-extractor.json +2 -2
  5. package/dist/cache.d.ts.map +1 -1
  6. package/dist/cache.js +2 -5
  7. package/dist/cache.js.map +1 -1
  8. package/dist/createNewUtils.d.ts.map +1 -1
  9. package/dist/createNewUtils.js +4 -2
  10. package/dist/createNewUtils.js.map +1 -1
  11. package/dist/defaultTokenProvider.d.ts.map +1 -1
  12. package/dist/defaultTokenProvider.js.map +1 -1
  13. package/dist/definitions.d.ts.map +1 -1
  14. package/dist/definitions.js.map +1 -1
  15. package/dist/deltaStorageService.d.ts.map +1 -1
  16. package/dist/deltaStorageService.js +4 -1
  17. package/dist/deltaStorageService.js.map +1 -1
  18. package/dist/documentDeltaConnection.d.ts.map +1 -1
  19. package/dist/documentDeltaConnection.js.map +1 -1
  20. package/dist/documentService.d.ts.map +1 -1
  21. package/dist/documentService.js +13 -5
  22. package/dist/documentService.js.map +1 -1
  23. package/dist/documentServiceFactory.d.ts.map +1 -1
  24. package/dist/documentServiceFactory.js +7 -4
  25. package/dist/documentServiceFactory.js.map +1 -1
  26. package/dist/documentStorageService.d.ts.map +1 -1
  27. package/dist/documentStorageService.js +7 -5
  28. package/dist/documentStorageService.js.map +1 -1
  29. package/dist/errorUtils.d.ts +9 -2
  30. package/dist/errorUtils.d.ts.map +1 -1
  31. package/dist/errorUtils.js +15 -8
  32. package/dist/errorUtils.js.map +1 -1
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +4 -1
  36. package/dist/index.js.map +1 -1
  37. package/dist/nullBlobStorageService.d.ts.map +1 -1
  38. package/dist/nullBlobStorageService.js.map +1 -1
  39. package/dist/packageVersion.d.ts +1 -1
  40. package/dist/packageVersion.js +1 -1
  41. package/dist/packageVersion.js.map +1 -1
  42. package/dist/policies.d.ts.map +1 -1
  43. package/dist/policies.js.map +1 -1
  44. package/dist/restWrapper.d.ts.map +1 -1
  45. package/dist/restWrapper.js +5 -6
  46. package/dist/restWrapper.js.map +1 -1
  47. package/dist/retriableGitManager.d.ts.map +1 -1
  48. package/dist/retriableGitManager.js.map +1 -1
  49. package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  50. package/dist/shreddedSummaryDocumentStorageService.js +8 -4
  51. package/dist/shreddedSummaryDocumentStorageService.js.map +1 -1
  52. package/dist/tokens.d.ts +24 -7
  53. package/dist/tokens.d.ts.map +1 -1
  54. package/dist/tokens.js.map +1 -1
  55. package/dist/urlUtils.d.ts.map +1 -1
  56. package/dist/urlUtils.js.map +1 -1
  57. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  58. package/dist/wholeSummaryDocumentStorageService.js +25 -11
  59. package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
  60. package/lib/cache.d.ts.map +1 -1
  61. package/lib/cache.js +2 -5
  62. package/lib/cache.js.map +1 -1
  63. package/lib/createNewUtils.d.ts.map +1 -1
  64. package/lib/createNewUtils.js +4 -2
  65. package/lib/createNewUtils.js.map +1 -1
  66. package/lib/defaultTokenProvider.d.ts.map +1 -1
  67. package/lib/defaultTokenProvider.js.map +1 -1
  68. package/lib/definitions.d.ts.map +1 -1
  69. package/lib/definitions.js.map +1 -1
  70. package/lib/deltaStorageService.d.ts.map +1 -1
  71. package/lib/deltaStorageService.js +4 -1
  72. package/lib/deltaStorageService.js.map +1 -1
  73. package/lib/documentDeltaConnection.d.ts.map +1 -1
  74. package/lib/documentDeltaConnection.js.map +1 -1
  75. package/lib/documentService.d.ts.map +1 -1
  76. package/lib/documentService.js +15 -7
  77. package/lib/documentService.js.map +1 -1
  78. package/lib/documentServiceFactory.d.ts.map +1 -1
  79. package/lib/documentServiceFactory.js +7 -4
  80. package/lib/documentServiceFactory.js.map +1 -1
  81. package/lib/documentStorageService.d.ts.map +1 -1
  82. package/lib/documentStorageService.js +8 -6
  83. package/lib/documentStorageService.js.map +1 -1
  84. package/lib/errorUtils.d.ts +9 -2
  85. package/lib/errorUtils.d.ts.map +1 -1
  86. package/lib/errorUtils.js +14 -7
  87. package/lib/errorUtils.js.map +1 -1
  88. package/lib/index.d.ts +2 -1
  89. package/lib/index.d.ts.map +1 -1
  90. package/lib/index.js +3 -1
  91. package/lib/index.js.map +1 -1
  92. package/lib/nullBlobStorageService.d.ts.map +1 -1
  93. package/lib/nullBlobStorageService.js.map +1 -1
  94. package/lib/packageVersion.d.ts +1 -1
  95. package/lib/packageVersion.js +1 -1
  96. package/lib/packageVersion.js.map +1 -1
  97. package/lib/policies.d.ts.map +1 -1
  98. package/lib/policies.js.map +1 -1
  99. package/lib/restWrapper.d.ts.map +1 -1
  100. package/lib/restWrapper.js +5 -6
  101. package/lib/restWrapper.js.map +1 -1
  102. package/lib/retriableGitManager.d.ts.map +1 -1
  103. package/lib/retriableGitManager.js.map +1 -1
  104. package/lib/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
  105. package/lib/shreddedSummaryDocumentStorageService.js +9 -5
  106. package/lib/shreddedSummaryDocumentStorageService.js.map +1 -1
  107. package/lib/tokens.d.ts +24 -7
  108. package/lib/tokens.d.ts.map +1 -1
  109. package/lib/tokens.js.map +1 -1
  110. package/lib/urlUtils.d.ts.map +1 -1
  111. package/lib/urlUtils.js.map +1 -1
  112. package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  113. package/lib/wholeSummaryDocumentStorageService.js +27 -13
  114. package/lib/wholeSummaryDocumentStorageService.js.map +1 -1
  115. package/package.json +42 -41
  116. package/prettier.config.cjs +1 -1
  117. package/src/cache.ts +16 -19
  118. package/src/createNewUtils.ts +24 -22
  119. package/src/defaultTokenProvider.ts +13 -15
  120. package/src/definitions.ts +2 -2
  121. package/src/deltaStorageService.ts +99 -95
  122. package/src/documentDeltaConnection.ts +53 -47
  123. package/src/documentService.ts +260 -239
  124. package/src/documentServiceFactory.ts +263 -250
  125. package/src/documentStorageService.ts +87 -83
  126. package/src/errorUtils.ts +91 -81
  127. package/src/index.ts +7 -1
  128. package/src/nullBlobStorageService.ts +24 -21
  129. package/src/packageVersion.ts +1 -1
  130. package/src/policies.ts +44 -44
  131. package/src/restWrapper.ts +266 -216
  132. package/src/retriableGitManager.ts +152 -151
  133. package/src/shreddedSummaryDocumentStorageService.ts +202 -194
  134. package/src/tokens.ts +69 -44
  135. package/src/urlUtils.ts +26 -23
  136. package/src/wholeSummaryDocumentStorageService.ts +246 -228
  137. package/tsconfig.esnext.json +6 -6
  138. package/tsconfig.json +9 -13
@@ -1 +1 @@
1
- {"version":3,"file":"policies.js","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport interface IRouterliciousDriverPolicies {\n /**\n * Enable prefetching entire snapshot tree into memory before it is loaded by the runtime.\n * Default: true\n */\n enablePrefetch: boolean;\n /**\n * Rate limit concurrent storage requests.\n * Default: 100\n */\n maxConcurrentStorageRequests: number;\n /**\n * Rate limit concurrent orderer requests.\n * Default: 100\n */\n maxConcurrentOrdererRequests: number;\n /**\n * Give hosts the option to change blob aggregation behavior to suit their needs.\n * Larger number means fewer blob individual requests, but less blob-deduping.\n * Smaller number means more blob individual requests, but more blob-deduping.\n * Setting to `undefined` disables blob aggregration.\n * Default: undefined\n */\n aggregateBlobsSmallerThanBytes: number | undefined;\n /**\n * Enable uploading entire summary tree as a IWholeSummaryPayload to storage.\n * Default: false\n */\n enableWholeSummaryUpload: boolean;\n /**\n * Enable service endpoint discovery when creating or joining a session.\n * Default: false\n */\n enableDiscovery?: boolean;\n /**\n * Enable using RestLess which avoids CORS preflight requests.\n * Default: true\n */\n enableRestLess: boolean;\n /**\n * Enable internal cache of summaries/snapshots.\n * Reduces Summarizer boot time and reduces server load in E2E tests.\n * Default: true\n */\n enableInternalSummaryCaching: boolean;\n}\n"]}
1
+ {"version":3,"file":"policies.js","sourceRoot":"","sources":["../src/policies.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport interface IRouterliciousDriverPolicies {\n\t/**\n\t * Enable prefetching entire snapshot tree into memory before it is loaded by the runtime.\n\t * Default: true\n\t */\n\tenablePrefetch: boolean;\n\t/**\n\t * Rate limit concurrent storage requests.\n\t * Default: 100\n\t */\n\tmaxConcurrentStorageRequests: number;\n\t/**\n\t * Rate limit concurrent orderer requests.\n\t * Default: 100\n\t */\n\tmaxConcurrentOrdererRequests: number;\n\t/**\n\t * Give hosts the option to change blob aggregation behavior to suit their needs.\n\t * Larger number means fewer blob individual requests, but less blob-deduping.\n\t * Smaller number means more blob individual requests, but more blob-deduping.\n\t * Setting to `undefined` disables blob aggregration.\n\t * Default: undefined\n\t */\n\taggregateBlobsSmallerThanBytes: number | undefined;\n\t/**\n\t * Enable uploading entire summary tree as a IWholeSummaryPayload to storage.\n\t * Default: false\n\t */\n\tenableWholeSummaryUpload: boolean;\n\t/**\n\t * Enable service endpoint discovery when creating or joining a session.\n\t * Default: false\n\t */\n\tenableDiscovery?: boolean;\n\t/**\n\t * Enable using RestLess which avoids CORS preflight requests.\n\t * Default: true\n\t */\n\tenableRestLess: boolean;\n\t/**\n\t * Enable internal cache of summaries/snapshots.\n\t * Reduces Summarizer boot time and reduces server load in E2E tests.\n\t * Default: true\n\t */\n\tenableInternalSummaryCaching: boolean;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"restWrapper.d.ts","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAGH,WAAW,EACd,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,OAAO,CAAC;AAIrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1D,aAAK,yBAAyB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;AACnE,aAAK,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAgBnE,qBAAa,wBAAyB,SAAQ,WAAW;IAKjD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IARhC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;gBAG7C,MAAM,EAAE,gBAAgB,EACP,WAAW,EAAE,WAAW,EACjC,KAAK,EAAE,cAAc,EACZ,mBAAmB,EAAE,YAAY,EACjC,sBAAsB,EAAE,yBAAyB,EACjD,WAAW,EAAE,OAAO,EACrC,OAAO,CAAC,EAAE,MAAM,EAChB,kBAAkB,GAAE,mBAAwB;cAKhC,OAAO,CAAC,CAAC,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,UAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAmD9G,OAAO,CAAC,eAAe;IAchB,QAAQ,IAAI,cAAc;IAI1B,QAAQ,CAAC,KAAK,EAAE,cAAc;CAGxC;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IACzE,OAAO;WAaa,IAAI,CACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,+BAA+B,CAAC;CAyC9C;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IACzE,OAAO;WAaa,IAAI,CACpB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,+BAA+B,CAAC;CA+B9C"}
1
+ {"version":3,"file":"restWrapper.d.ts","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"AAAA;;;GAGG;;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3D,OAAO,EAGN,WAAW,EACX,MAAM,wCAAwC,CAAC;AAGhD,OAAO,KAAK,EAAE,kBAAkB,EAAuB,MAAM,OAAO,CAAC;AAIrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAG1D,aAAK,yBAAyB,GAAG,CAAC,KAAK,EAAE,cAAc,KAAK,MAAM,CAAC;AACnE,aAAK,YAAY,GAAG,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAmBnE,qBAAa,wBAAyB,SAAQ,WAAW;IAKvD,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACpC,OAAO,CAAC,QAAQ,CAAC,sBAAsB;IACvC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAR7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;gBAGhD,MAAM,EAAE,gBAAgB,EACP,WAAW,EAAE,WAAW,EACjC,KAAK,EAAE,cAAc,EACZ,mBAAmB,EAAE,YAAY,EACjC,sBAAsB,EAAE,yBAAyB,EACjD,WAAW,EAAE,OAAO,EACrC,OAAO,CAAC,EAAE,MAAM,EAChB,kBAAkB,GAAE,mBAAwB;cAK7B,OAAO,CAAC,CAAC,EACxB,aAAa,EAAE,kBAAkB,EACjC,UAAU,EAAE,MAAM,EAClB,QAAQ,UAAO,GACb,OAAO,CAAC,CAAC,CAAC;IAwDb,OAAO,CAAC,eAAe;IAgBhB,QAAQ,IAAI,cAAc;IAI1B,QAAQ,CAAC,KAAK,EAAE,cAAc;CAGrC;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IAC5E,OAAO;WAsBa,IAAI,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,+BAA+B,CAAC;CAkD3C;AAED,qBAAa,+BAAgC,SAAQ,wBAAwB;IAC5E,OAAO;WAsBa,IAAI,CACvB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,aAAa,EAAE,cAAc,EAC7B,MAAM,EAAE,gBAAgB,EACxB,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,OAAO,EACpB,OAAO,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,+BAA+B,CAAC;CAwC3C"}
@@ -39,8 +39,7 @@ export class RouterliciousRestWrapper extends RestWrapper {
39
39
  const config = Object.assign(Object.assign({}, requestConfig), { headers: this.generateHeaders(requestConfig.headers) });
40
40
  const translatedConfig = this.useRestLess ? this.restLess.translate(config) : config;
41
41
  const fetchRequestConfig = axiosRequestConfigToFetchRequestConfig(translatedConfig);
42
- const response = await this.rateLimiter.schedule(async () => fetch(...fetchRequestConfig)
43
- .catch(async (error) => {
42
+ const response = await this.rateLimiter.schedule(async () => fetch(...fetchRequestConfig).catch(async (error) => {
44
43
  // Browser Fetch throws a TypeError on network error, `node-fetch` throws a FetchError
45
44
  const isNetworkError = ["TypeError", "FetchError"].includes(error === null || error === void 0 ? void 0 : error.name);
46
45
  throwR11sNetworkError(isNetworkError ? `NetworkError: ${error.message}` : safeStringify(error));
@@ -62,13 +61,13 @@ export class RouterliciousRestWrapper extends RestWrapper {
62
61
  if (response.status === 429 && (responseBody === null || responseBody === void 0 ? void 0 : responseBody.retryAfter) > 0) {
63
62
  // Retry based on retryAfter[Seconds]
64
63
  return new Promise((resolve, reject) => setTimeout(() => {
65
- this.request(config, statusCode)
66
- .then(resolve)
67
- .catch(reject);
64
+ this.request(config, statusCode).then(resolve).catch(reject);
68
65
  }, responseBody.retryAfter * 1000));
69
66
  }
70
67
  const responseSummary = responseBody !== undefined
71
- ? typeof responseBody === "string" ? responseBody : safeStringify(responseBody)
68
+ ? typeof responseBody === "string"
69
+ ? responseBody
70
+ : safeStringify(responseBody)
72
71
  : response.statusText;
73
72
  throwR11sNetworkError(`R11s fetch error: ${responseSummary}`, response.status, responseBody === null || responseBody === void 0 ? void 0 : responseBody.retryAfter);
74
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"restWrapper.js","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// Just using the type from a node.js module does not introduce a runtime dependency.\n// eslint-disable-next-line import/no-nodejs-modules\nimport type { ParsedUrlQueryInput } from \"querystring\";\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { fromUtf8ToBase64 } from \"@fluidframework/common-utils\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport {\n getAuthorizationTokenFromCredentials,\n RestLessClient,\n RestWrapper,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport fetch from \"cross-fetch\";\nimport type { AxiosRequestConfig, AxiosRequestHeaders } from \"axios\";\nimport safeStringify from \"json-stringify-safe\";\nimport { v4 as uuid } from \"uuid\";\nimport { throwR11sNetworkError } from \"./errorUtils\";\nimport { ITokenProvider, ITokenResponse } from \"./tokens\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\n\ntype AuthorizationHeaderGetter = (token: ITokenResponse) => string;\ntype TokenFetcher = (refresh?: boolean) => Promise<ITokenResponse>;\n\nconst axiosRequestConfigToFetchRequestConfig = (requestConfig: AxiosRequestConfig): [RequestInfo, RequestInit] => {\n const requestInfo: string = requestConfig.baseURL !== undefined\n ? `${requestConfig.baseURL}${requestConfig.url ?? \"\"}`\n : requestConfig.url ?? \"\";\n const requestInit: RequestInit = {\n method: requestConfig.method,\n // NOTE: I believe that although the Axios type permits non-string values in the header, here we are\n // guaranteed the requestConfig only has string values in its header.\n headers: requestConfig.headers as Record<string, string>,\n body: requestConfig.data,\n };\n return [requestInfo, requestInit];\n};\n\nexport class RouterliciousRestWrapper extends RestWrapper {\n private readonly restLess = new RestLessClient();\n\n constructor(\n logger: ITelemetryLogger,\n private readonly rateLimiter: RateLimiter,\n private token: ITokenResponse,\n private readonly fetchRefreshedToken: TokenFetcher,\n private readonly getAuthorizationHeader: AuthorizationHeaderGetter,\n private readonly useRestLess: boolean,\n baseurl?: string,\n defaultQueryString: ParsedUrlQueryInput = {},\n ) {\n super(baseurl, defaultQueryString);\n }\n\n protected async request<T>(requestConfig: AxiosRequestConfig, statusCode: number, canRetry = true): Promise<T> {\n const config = {\n ...requestConfig,\n headers: this.generateHeaders(requestConfig.headers),\n };\n\n const translatedConfig = this.useRestLess ? this.restLess.translate(config) : config;\n const fetchRequestConfig = axiosRequestConfigToFetchRequestConfig(translatedConfig);\n\n const response: Response = await this.rateLimiter.schedule(async () => fetch(...fetchRequestConfig)\n .catch(async (error) => {\n // Browser Fetch throws a TypeError on network error, `node-fetch` throws a FetchError\n const isNetworkError = [\"TypeError\", \"FetchError\"].includes(error?.name);\n throwR11sNetworkError(\n isNetworkError ? `NetworkError: ${error.message}` : safeStringify(error));\n }));\n\n const responseBody: any = response.headers.get(\"content-type\")?.includes(\"application/json\")\n ? await response.json()\n : await response.text();\n\n // Success\n if (response.ok || response.status === statusCode) {\n const result: T = responseBody;\n return result;\n }\n // Failure\n if (response.status === 401 && canRetry) {\n // Refresh Authorization header and retry once\n this.token = await this.fetchRefreshedToken(true /* refreshToken */);\n return this.request<T>(config, statusCode, false);\n }\n if (response.status === 429 && responseBody?.retryAfter > 0) {\n // Retry based on retryAfter[Seconds]\n return new Promise<T>((resolve, reject) => setTimeout(() => {\n this.request<T>(config, statusCode)\n .then(resolve)\n .catch(reject);\n }, responseBody.retryAfter * 1000));\n }\n\n const responseSummary = responseBody !== undefined\n ? typeof responseBody === \"string\" ? responseBody : safeStringify(responseBody)\n : response.statusText;\n throwR11sNetworkError(\n `R11s fetch error: ${responseSummary}`,\n response.status,\n responseBody?.retryAfter,\n );\n }\n\n private generateHeaders(requestHeaders?: AxiosRequestHeaders | undefined): Record<string, string> {\n const correlationId = requestHeaders?.[\"x-correlation-id\"] ?? uuid();\n\n return {\n ...requestHeaders,\n // TODO: replace header names with CorrelationIdHeaderName and DriverVersionHeaderName from services-client\n // NOTE: Can correlationId actually be number | true?\n \"x-correlation-id\": correlationId as string,\n \"x-driver-version\": driverVersion,\n // NOTE: If this.authorizationHeader is undefined, should \"Authorization\" be removed entirely?\n \"Authorization\": this.getAuthorizationHeader(this.token),\n };\n }\n\n public getToken(): ITokenResponse {\n return this.token;\n }\n\n public setToken(token: ITokenResponse) {\n this.token = token;\n }\n}\n\nexport class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {\n private constructor(\n logger: ITelemetryLogger,\n rateLimiter: RateLimiter,\n token: ITokenResponse,\n fetchToken: TokenFetcher,\n getAuthorizationHeader: AuthorizationHeaderGetter,\n useRestLess: boolean,\n baseurl?: string,\n defaultQueryString: ParsedUrlQueryInput = {},\n ) {\n super(logger, rateLimiter, token, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);\n }\n\n public static async load(\n tenantId: string,\n documentId: string,\n tokenProvider: ITokenProvider,\n logger: ITelemetryLogger,\n rateLimiter: RateLimiter,\n useRestLess: boolean,\n baseurl?: string,\n ): Promise<RouterliciousStorageRestWrapper> {\n const defaultQueryString = {\n token: `${fromUtf8ToBase64(tenantId)}`,\n };\n\n const fetchStorageToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {\n return PerformanceEvent.timedExecAsync(\n logger,\n {\n eventName: \"FetchStorageToken\",\n docId: documentId,\n },\n async () => {\n // Craft credentials using tenant id and token\n const storageToken = await tokenProvider.fetchStorageToken(\n tenantId,\n documentId,\n refreshToken\n );\n\n return storageToken;\n }\n );\n };\n\n const getAuthorizationHeader: AuthorizationHeaderGetter = (token: ITokenResponse): string => {\n const credentials = {\n password: token.jwt,\n user: tenantId,\n };\n return getAuthorizationTokenFromCredentials(credentials);\n };\n\n const storagetoken = await fetchStorageToken();\n\n const restWrapper = new RouterliciousStorageRestWrapper(\n logger, rateLimiter, storagetoken, \n fetchStorageToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);\n\n return restWrapper;\n }\n}\n\nexport class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {\n private constructor(\n logger: ITelemetryLogger,\n rateLimiter: RateLimiter,\n token: ITokenResponse,\n fetchToken: TokenFetcher,\n getAuthorizationHeader: AuthorizationHeaderGetter,\n useRestLess: boolean,\n baseurl?: string,\n defaultQueryString: ParsedUrlQueryInput = {},\n ) {\n super(logger, rateLimiter, token, fetchToken, getAuthorizationHeader, useRestLess, baseurl, defaultQueryString);\n }\n\n public static async load(\n tenantId: string,\n documentId: string | undefined,\n tokenProvider: ITokenProvider,\n logger: ITelemetryLogger,\n rateLimiter: RateLimiter,\n useRestLess: boolean,\n baseurl?: string,\n ): Promise<RouterliciousOrdererRestWrapper> {\n const getAuthorizationHeader: AuthorizationHeaderGetter = (token: ITokenResponse): string => {\n return `Basic ${token.jwt}`;\n };\n\n const fetchOrdererToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {\n return PerformanceEvent.timedExecAsync(\n logger,\n {\n eventName: \"FetchOrdererToken\",\n docId: documentId,\n },\n async () => {\n const ordererToken = await tokenProvider.fetchOrdererToken(\n tenantId,\n documentId,\n refreshToken,\n );\n\n return ordererToken;\n }\n );\n };\n\n const newtoken = await fetchOrdererToken();\n\n const restWrapper = new RouterliciousOrdererRestWrapper(\n logger, rateLimiter, newtoken, fetchOrdererToken, getAuthorizationHeader, useRestLess, baseurl);\n\n return restWrapper;\n }\n}\n"]}
1
+ {"version":3,"file":"restWrapper.js","sourceRoot":"","sources":["../src/restWrapper.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n// Just using the type from a node.js module does not introduce a runtime dependency.\n// eslint-disable-next-line import/no-nodejs-modules\nimport type { ParsedUrlQueryInput } from \"querystring\";\n\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { fromUtf8ToBase64 } from \"@fluidframework/common-utils\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport {\n\tgetAuthorizationTokenFromCredentials,\n\tRestLessClient,\n\tRestWrapper,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport fetch from \"cross-fetch\";\nimport type { AxiosRequestConfig, AxiosRequestHeaders } from \"axios\";\nimport safeStringify from \"json-stringify-safe\";\nimport { v4 as uuid } from \"uuid\";\nimport { throwR11sNetworkError } from \"./errorUtils\";\nimport { ITokenProvider, ITokenResponse } from \"./tokens\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\n\ntype AuthorizationHeaderGetter = (token: ITokenResponse) => string;\ntype TokenFetcher = (refresh?: boolean) => Promise<ITokenResponse>;\n\nconst axiosRequestConfigToFetchRequestConfig = (\n\trequestConfig: AxiosRequestConfig,\n): [RequestInfo, RequestInit] => {\n\tconst requestInfo: string =\n\t\trequestConfig.baseURL !== undefined\n\t\t\t? `${requestConfig.baseURL}${requestConfig.url ?? \"\"}`\n\t\t\t: requestConfig.url ?? \"\";\n\tconst requestInit: RequestInit = {\n\t\tmethod: requestConfig.method,\n\t\t// NOTE: I believe that although the Axios type permits non-string values in the header, here we are\n\t\t// guaranteed the requestConfig only has string values in its header.\n\t\theaders: requestConfig.headers as Record<string, string>,\n\t\tbody: requestConfig.data,\n\t};\n\treturn [requestInfo, requestInit];\n};\n\nexport class RouterliciousRestWrapper extends RestWrapper {\n\tprivate readonly restLess = new RestLessClient();\n\n\tconstructor(\n\t\tlogger: ITelemetryLogger,\n\t\tprivate readonly rateLimiter: RateLimiter,\n\t\tprivate token: ITokenResponse,\n\t\tprivate readonly fetchRefreshedToken: TokenFetcher,\n\t\tprivate readonly getAuthorizationHeader: AuthorizationHeaderGetter,\n\t\tprivate readonly useRestLess: boolean,\n\t\tbaseurl?: string,\n\t\tdefaultQueryString: ParsedUrlQueryInput = {},\n\t) {\n\t\tsuper(baseurl, defaultQueryString);\n\t}\n\n\tprotected async request<T>(\n\t\trequestConfig: AxiosRequestConfig,\n\t\tstatusCode: number,\n\t\tcanRetry = true,\n\t): Promise<T> {\n\t\tconst config = {\n\t\t\t...requestConfig,\n\t\t\theaders: this.generateHeaders(requestConfig.headers),\n\t\t};\n\n\t\tconst translatedConfig = this.useRestLess ? this.restLess.translate(config) : config;\n\t\tconst fetchRequestConfig = axiosRequestConfigToFetchRequestConfig(translatedConfig);\n\n\t\tconst response: Response = await this.rateLimiter.schedule(async () =>\n\t\t\tfetch(...fetchRequestConfig).catch(async (error) => {\n\t\t\t\t// Browser Fetch throws a TypeError on network error, `node-fetch` throws a FetchError\n\t\t\t\tconst isNetworkError = [\"TypeError\", \"FetchError\"].includes(error?.name);\n\t\t\t\tthrowR11sNetworkError(\n\t\t\t\t\tisNetworkError ? `NetworkError: ${error.message}` : safeStringify(error),\n\t\t\t\t);\n\t\t\t}),\n\t\t);\n\n\t\tconst responseBody: any = response.headers.get(\"content-type\")?.includes(\"application/json\")\n\t\t\t? await response.json()\n\t\t\t: await response.text();\n\n\t\t// Success\n\t\tif (response.ok || response.status === statusCode) {\n\t\t\tconst result: T = responseBody;\n\t\t\treturn result;\n\t\t}\n\t\t// Failure\n\t\tif (response.status === 401 && canRetry) {\n\t\t\t// Refresh Authorization header and retry once\n\t\t\tthis.token = await this.fetchRefreshedToken(true /* refreshToken */);\n\t\t\treturn this.request<T>(config, statusCode, false);\n\t\t}\n\t\tif (response.status === 429 && responseBody?.retryAfter > 0) {\n\t\t\t// Retry based on retryAfter[Seconds]\n\t\t\treturn new Promise<T>((resolve, reject) =>\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.request<T>(config, statusCode).then(resolve).catch(reject);\n\t\t\t\t}, responseBody.retryAfter * 1000),\n\t\t\t);\n\t\t}\n\n\t\tconst responseSummary =\n\t\t\tresponseBody !== undefined\n\t\t\t\t? typeof responseBody === \"string\"\n\t\t\t\t\t? responseBody\n\t\t\t\t\t: safeStringify(responseBody)\n\t\t\t\t: response.statusText;\n\t\tthrowR11sNetworkError(\n\t\t\t`R11s fetch error: ${responseSummary}`,\n\t\t\tresponse.status,\n\t\t\tresponseBody?.retryAfter,\n\t\t);\n\t}\n\n\tprivate generateHeaders(\n\t\trequestHeaders?: AxiosRequestHeaders | undefined,\n\t): Record<string, string> {\n\t\tconst correlationId = requestHeaders?.[\"x-correlation-id\"] ?? uuid();\n\n\t\treturn {\n\t\t\t...requestHeaders,\n\t\t\t// TODO: replace header names with CorrelationIdHeaderName and DriverVersionHeaderName from services-client\n\t\t\t// NOTE: Can correlationId actually be number | true?\n\t\t\t\"x-correlation-id\": correlationId as string,\n\t\t\t\"x-driver-version\": driverVersion,\n\t\t\t// NOTE: If this.authorizationHeader is undefined, should \"Authorization\" be removed entirely?\n\t\t\t\"Authorization\": this.getAuthorizationHeader(this.token),\n\t\t};\n\t}\n\n\tpublic getToken(): ITokenResponse {\n\t\treturn this.token;\n\t}\n\n\tpublic setToken(token: ITokenResponse) {\n\t\tthis.token = token;\n\t}\n}\n\nexport class RouterliciousStorageRestWrapper extends RouterliciousRestWrapper {\n\tprivate constructor(\n\t\tlogger: ITelemetryLogger,\n\t\trateLimiter: RateLimiter,\n\t\ttoken: ITokenResponse,\n\t\tfetchToken: TokenFetcher,\n\t\tgetAuthorizationHeader: AuthorizationHeaderGetter,\n\t\tuseRestLess: boolean,\n\t\tbaseurl?: string,\n\t\tdefaultQueryString: ParsedUrlQueryInput = {},\n\t) {\n\t\tsuper(\n\t\t\tlogger,\n\t\t\trateLimiter,\n\t\t\ttoken,\n\t\t\tfetchToken,\n\t\t\tgetAuthorizationHeader,\n\t\t\tuseRestLess,\n\t\t\tbaseurl,\n\t\t\tdefaultQueryString,\n\t\t);\n\t}\n\n\tpublic static async load(\n\t\ttenantId: string,\n\t\tdocumentId: string,\n\t\ttokenProvider: ITokenProvider,\n\t\tlogger: ITelemetryLogger,\n\t\trateLimiter: RateLimiter,\n\t\tuseRestLess: boolean,\n\t\tbaseurl?: string,\n\t): Promise<RouterliciousStorageRestWrapper> {\n\t\tconst defaultQueryString = {\n\t\t\ttoken: `${fromUtf8ToBase64(tenantId)}`,\n\t\t};\n\n\t\tconst fetchStorageToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {\n\t\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\t\tlogger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"FetchStorageToken\",\n\t\t\t\t\tdocId: documentId,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\t// Craft credentials using tenant id and token\n\t\t\t\t\tconst storageToken = await tokenProvider.fetchStorageToken(\n\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\tdocumentId,\n\t\t\t\t\t\trefreshToken,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn storageToken;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst getAuthorizationHeader: AuthorizationHeaderGetter = (\n\t\t\ttoken: ITokenResponse,\n\t\t): string => {\n\t\t\tconst credentials = {\n\t\t\t\tpassword: token.jwt,\n\t\t\t\tuser: tenantId,\n\t\t\t};\n\t\t\treturn getAuthorizationTokenFromCredentials(credentials);\n\t\t};\n\n\t\tconst storagetoken = await fetchStorageToken();\n\n\t\tconst restWrapper = new RouterliciousStorageRestWrapper(\n\t\t\tlogger,\n\t\t\trateLimiter,\n\t\t\tstoragetoken,\n\t\t\tfetchStorageToken,\n\t\t\tgetAuthorizationHeader,\n\t\t\tuseRestLess,\n\t\t\tbaseurl,\n\t\t\tdefaultQueryString,\n\t\t);\n\n\t\treturn restWrapper;\n\t}\n}\n\nexport class RouterliciousOrdererRestWrapper extends RouterliciousRestWrapper {\n\tprivate constructor(\n\t\tlogger: ITelemetryLogger,\n\t\trateLimiter: RateLimiter,\n\t\ttoken: ITokenResponse,\n\t\tfetchToken: TokenFetcher,\n\t\tgetAuthorizationHeader: AuthorizationHeaderGetter,\n\t\tuseRestLess: boolean,\n\t\tbaseurl?: string,\n\t\tdefaultQueryString: ParsedUrlQueryInput = {},\n\t) {\n\t\tsuper(\n\t\t\tlogger,\n\t\t\trateLimiter,\n\t\t\ttoken,\n\t\t\tfetchToken,\n\t\t\tgetAuthorizationHeader,\n\t\t\tuseRestLess,\n\t\t\tbaseurl,\n\t\t\tdefaultQueryString,\n\t\t);\n\t}\n\n\tpublic static async load(\n\t\ttenantId: string,\n\t\tdocumentId: string | undefined,\n\t\ttokenProvider: ITokenProvider,\n\t\tlogger: ITelemetryLogger,\n\t\trateLimiter: RateLimiter,\n\t\tuseRestLess: boolean,\n\t\tbaseurl?: string,\n\t): Promise<RouterliciousOrdererRestWrapper> {\n\t\tconst getAuthorizationHeader: AuthorizationHeaderGetter = (\n\t\t\ttoken: ITokenResponse,\n\t\t): string => {\n\t\t\treturn `Basic ${token.jwt}`;\n\t\t};\n\n\t\tconst fetchOrdererToken = async (refreshToken?: boolean): Promise<ITokenResponse> => {\n\t\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\t\tlogger,\n\t\t\t\t{\n\t\t\t\t\teventName: \"FetchOrdererToken\",\n\t\t\t\t\tdocId: documentId,\n\t\t\t\t},\n\t\t\t\tasync () => {\n\t\t\t\t\tconst ordererToken = await tokenProvider.fetchOrdererToken(\n\t\t\t\t\t\ttenantId,\n\t\t\t\t\t\tdocumentId,\n\t\t\t\t\t\trefreshToken,\n\t\t\t\t\t);\n\n\t\t\t\t\treturn ordererToken;\n\t\t\t\t},\n\t\t\t);\n\t\t};\n\n\t\tconst newtoken = await fetchOrdererToken();\n\n\t\tconst restWrapper = new RouterliciousOrdererRestWrapper(\n\t\t\tlogger,\n\t\t\trateLimiter,\n\t\t\tnewtoken,\n\t\t\tfetchOrdererToken,\n\t\t\tgetAuthorizationHeader,\n\t\t\tuseRestLess,\n\t\t\tbaseurl,\n\t\t);\n\n\t\treturn restWrapper;\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retriableGitManager.d.ts","sourceRoot":"","sources":["../src/retriableGitManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,sCAAsC,CAAC;AACtE,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACxB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,qBAAa,mBAAoB,YAAW,WAAW;IAE/C,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,kBAAkB,EAAE,WAAW,EAC/B,MAAM,EAAE,gBAAgB;IAIhC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAOnE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAO5C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAOrE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO7D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIxB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO5D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAO/E,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAOhE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAOrD,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAOnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAOtC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAO/D,KAAK,CAAC,MAAM,EAAE,MAAM,EAC7B,SAAS,EAAE,QAAQ,CAAC,KAAK,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAO7B,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAO5E,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAOlD,YAAY;CAQ7B"}
1
+ {"version":3,"file":"retriableGitManager.d.ts","sourceRoot":"","sources":["../src/retriableGitManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,8BAA8B,CAAC;AACzD,OAAO,KAAK,KAAK,QAAQ,MAAM,sCAAsC,CAAC;AACtE,OAAO,EACN,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,qBAAa,mBAAoB,YAAW,WAAW;IAErD,OAAO,CAAC,QAAQ,CAAC,kBAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,kBAAkB,EAAE,WAAW,EAC/B,MAAM,EAAE,gBAAgB;IAG7B,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAOnE,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAOtC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAO5C,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC;IAOrE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO7D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO9C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIxB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAO5D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAO/E,aAAa,CAAC,MAAM,EAAE,GAAG,CAAC,iBAAiB,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAOhE,UAAU,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;IAOrD,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAOnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAOtC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAOzD,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAO/D,KAAK,CACjB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,QAAQ,CAAC,KAAK,EACzB,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,EAAE,MAAM,GACb,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IAOV,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAO5E,aAAa,CAAC,UAAU,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAOlD,YAAY;CAQ1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"retriableGitManager.js","sourceRoot":"","sources":["../src/retriableGitManager.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 type * as git from \"@fluidframework/gitresources\";\nimport type * as protocol from \"@fluidframework/protocol-definitions\";\nimport {\n IGitManager,\n IWholeFlatSummary,\n IWholeSummaryPayload,\n IWriteSummaryResponse,\n} from \"@fluidframework/server-services-client\";\nimport { runWithRetry } from \"@fluidframework/driver-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\n\nexport class RetriableGitManager implements IGitManager {\n constructor(\n private readonly internalGitManager: IGitManager,\n private readonly logger: ITelemetryLogger,\n ) {\n }\n\n public async getHeader(id: string, sha: string): Promise<protocol.ISnapshotTree> {\n return this.runWithRetry(\n async () => this.internalGitManager.getHeader(id, sha),\n \"gitManager_getHeader\",\n );\n }\n\n public async getFullTree(sha: string): Promise<any> {\n return this.runWithRetry(\n async () => this.internalGitManager.getFullTree(sha),\n \"gitManager_getFullTree\",\n );\n }\n\n public async getCommit(sha: string): Promise<git.ICommit> {\n return this.runWithRetry(\n async () => this.internalGitManager.getCommit(sha),\n \"gitManager_getCommit\",\n );\n }\n\n public async getCommits(sha: string, count: number): Promise<git.ICommitDetails[]> {\n return this.runWithRetry(\n async () => this.internalGitManager.getCommits(sha, count),\n \"gitManager_getCommits\",\n );\n }\n\n public async getTree(root: string, recursive: boolean): Promise<git.ITree> {\n return this.runWithRetry(\n async () => this.internalGitManager.getTree(root, recursive),\n \"gitManager_getTree\",\n );\n }\n\n public async getBlob(sha: string): Promise<git.IBlob> {\n return this.runWithRetry(\n async () => this.internalGitManager.getBlob(sha),\n \"gitManager_getBlob\",\n );\n }\n\n public getRawUrl(sha: string): string {\n return this.internalGitManager.getRawUrl(sha);\n }\n\n public async getContent(commit: string, path: string): Promise<git.IBlob> {\n return this.runWithRetry(\n async () => this.internalGitManager.getContent(commit, path),\n \"gitManager_getContent\",\n );\n }\n\n public async createBlob(content: string, encoding: string): Promise<git.ICreateBlobResponse> {\n return this.runWithRetry(\n async () => this.internalGitManager.createBlob(content, encoding),\n \"gitManager_createBlob\",\n );\n }\n\n public async createGitTree(params: git.ICreateTreeParams): Promise<git.ITree> {\n return this.runWithRetry(\n async () => this.internalGitManager.createGitTree(params),\n \"gitManager_createGitTree\",\n );\n }\n\n public async createTree(files: protocol.ITree): Promise<git.ITree> {\n return this.runWithRetry(\n async () => this.internalGitManager.createTree(files),\n \"gitManager_createTree\",\n );\n }\n\n public async createCommit(commit: git.ICreateCommitParams): Promise<git.ICommit> {\n return this.runWithRetry(\n async () => this.internalGitManager.createCommit(commit),\n \"gitManager_createCommit\",\n );\n }\n\n public async getRef(ref: string): Promise<git.IRef> {\n return this.runWithRetry(\n async () => this.internalGitManager.getRef(ref),\n \"gitManager_getRef\",\n );\n }\n\n public async createRef(branch: string, sha: string): Promise<git.IRef> {\n return this.runWithRetry(\n async () => this.internalGitManager.createRef(branch, sha),\n \"gitManager_createRef\",\n );\n }\n\n public async upsertRef(branch: string, commitSha: string): Promise<git.IRef> {\n return this.runWithRetry(\n async () => this.internalGitManager.upsertRef(branch, commitSha),\n \"gitManager_upsertRef\",\n );\n }\n\n public async write(branch: string,\n inputTree: protocol.ITree,\n parents: string[],\n message: string): Promise<git.ICommit> {\n return this.runWithRetry(\n async () => this.internalGitManager.write(branch, inputTree, parents, message),\n \"gitManager_write\",\n );\n }\n\n public async createSummary(summary: IWholeSummaryPayload): Promise<IWriteSummaryResponse> {\n return this.runWithRetry(\n async () => this.internalGitManager.createSummary(summary),\n \"gitManager_createSummary\",\n );\n }\n\n public async deleteSummary(softDelete: boolean): Promise<void> {\n return this.runWithRetry(\n async () => this.internalGitManager.deleteSummary(softDelete),\n \"gitManager_deleteSummary\",\n );\n }\n\n public async getSummary(sha: string): Promise<IWholeFlatSummary> {\n return this.runWithRetry(\n async () => this.internalGitManager.getSummary(sha),\n \"gitManager_getSummary\",\n );\n }\n\n private async runWithRetry<T>(api: () => Promise<T>, callName: string): Promise<T> {\n return runWithRetry(\n api,\n callName,\n this.logger,\n {}, // progress\n );\n }\n}\n"]}
1
+ {"version":3,"file":"retriableGitManager.js","sourceRoot":"","sources":["../src/retriableGitManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAG5D,MAAM,OAAO,mBAAmB;IAC/B,YACkB,kBAA+B,EAC/B,MAAwB;QADxB,uBAAkB,GAAlB,kBAAkB,CAAa;QAC/B,WAAM,GAAN,MAAM,CAAkB;IACvC,CAAC;IAEG,KAAK,CAAC,SAAS,CAAC,EAAU,EAAE,GAAW;QAC7C,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,EACtD,sBAAsB,CACtB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,GAAW;QACnC,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,EACpD,wBAAwB,CACxB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,GAAW;QACjC,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,EAClD,sBAAsB,CACtB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,KAAa;QACjD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,EAC1D,uBAAuB,CACvB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,SAAkB;QACpD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,EAC5D,oBAAoB,CACpB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,GAAW;QAC/B,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAChD,oBAAoB,CACpB,CAAC;IACH,CAAC;IAEM,SAAS,CAAC,GAAW;QAC3B,OAAO,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,IAAY;QACnD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAC5D,uBAAuB,CACvB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,OAAe,EAAE,QAAgB;QACxD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EACjE,uBAAuB,CACvB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,MAA6B;QACvD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,EACzD,0BAA0B,CAC1B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,KAAqB;QAC5C,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,EACrD,uBAAuB,CACvB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAA+B;QACxD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,EACxD,yBAAyB,CACzB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAW;QAC9B,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,EAC/C,mBAAmB,CACnB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,GAAW;QACjD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1D,sBAAsB,CACtB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,SAAiB;QACvD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAChE,sBAAsB,CACtB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,KAAK,CACjB,MAAc,EACd,SAAyB,EACzB,OAAiB,EACjB,OAAe;QAEf,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAC9E,kBAAkB,CAClB,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAA6B;QACvD,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,OAAO,CAAC,EAC1D,0BAA0B,CAC1B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,UAAmB;QAC7C,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,UAAU,CAAC,EAC7D,0BAA0B,CAC1B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,GAAW;QAClC,OAAO,IAAI,CAAC,YAAY,CACvB,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,GAAG,CAAC,EACnD,uBAAuB,CACvB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,YAAY,CAAI,GAAqB,EAAE,QAAgB;QACpE,OAAO,YAAY,CAClB,GAAG,EACH,QAAQ,EACR,IAAI,CAAC,MAAM,EACX,EAAE,CACF,CAAC;IACH,CAAC;CACD","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport type * as git from \"@fluidframework/gitresources\";\nimport type * as protocol from \"@fluidframework/protocol-definitions\";\nimport {\n\tIGitManager,\n\tIWholeFlatSummary,\n\tIWholeSummaryPayload,\n\tIWriteSummaryResponse,\n} from \"@fluidframework/server-services-client\";\nimport { runWithRetry } from \"@fluidframework/driver-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\n\nexport class RetriableGitManager implements IGitManager {\n\tconstructor(\n\t\tprivate readonly internalGitManager: IGitManager,\n\t\tprivate readonly logger: ITelemetryLogger,\n\t) {}\n\n\tpublic async getHeader(id: string, sha: string): Promise<protocol.ISnapshotTree> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getHeader(id, sha),\n\t\t\t\"gitManager_getHeader\",\n\t\t);\n\t}\n\n\tpublic async getFullTree(sha: string): Promise<any> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getFullTree(sha),\n\t\t\t\"gitManager_getFullTree\",\n\t\t);\n\t}\n\n\tpublic async getCommit(sha: string): Promise<git.ICommit> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getCommit(sha),\n\t\t\t\"gitManager_getCommit\",\n\t\t);\n\t}\n\n\tpublic async getCommits(sha: string, count: number): Promise<git.ICommitDetails[]> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getCommits(sha, count),\n\t\t\t\"gitManager_getCommits\",\n\t\t);\n\t}\n\n\tpublic async getTree(root: string, recursive: boolean): Promise<git.ITree> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getTree(root, recursive),\n\t\t\t\"gitManager_getTree\",\n\t\t);\n\t}\n\n\tpublic async getBlob(sha: string): Promise<git.IBlob> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getBlob(sha),\n\t\t\t\"gitManager_getBlob\",\n\t\t);\n\t}\n\n\tpublic getRawUrl(sha: string): string {\n\t\treturn this.internalGitManager.getRawUrl(sha);\n\t}\n\n\tpublic async getContent(commit: string, path: string): Promise<git.IBlob> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getContent(commit, path),\n\t\t\t\"gitManager_getContent\",\n\t\t);\n\t}\n\n\tpublic async createBlob(content: string, encoding: string): Promise<git.ICreateBlobResponse> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createBlob(content, encoding),\n\t\t\t\"gitManager_createBlob\",\n\t\t);\n\t}\n\n\tpublic async createGitTree(params: git.ICreateTreeParams): Promise<git.ITree> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createGitTree(params),\n\t\t\t\"gitManager_createGitTree\",\n\t\t);\n\t}\n\n\tpublic async createTree(files: protocol.ITree): Promise<git.ITree> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createTree(files),\n\t\t\t\"gitManager_createTree\",\n\t\t);\n\t}\n\n\tpublic async createCommit(commit: git.ICreateCommitParams): Promise<git.ICommit> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createCommit(commit),\n\t\t\t\"gitManager_createCommit\",\n\t\t);\n\t}\n\n\tpublic async getRef(ref: string): Promise<git.IRef> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getRef(ref),\n\t\t\t\"gitManager_getRef\",\n\t\t);\n\t}\n\n\tpublic async createRef(branch: string, sha: string): Promise<git.IRef> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createRef(branch, sha),\n\t\t\t\"gitManager_createRef\",\n\t\t);\n\t}\n\n\tpublic async upsertRef(branch: string, commitSha: string): Promise<git.IRef> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.upsertRef(branch, commitSha),\n\t\t\t\"gitManager_upsertRef\",\n\t\t);\n\t}\n\n\tpublic async write(\n\t\tbranch: string,\n\t\tinputTree: protocol.ITree,\n\t\tparents: string[],\n\t\tmessage: string,\n\t): Promise<git.ICommit> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.write(branch, inputTree, parents, message),\n\t\t\t\"gitManager_write\",\n\t\t);\n\t}\n\n\tpublic async createSummary(summary: IWholeSummaryPayload): Promise<IWriteSummaryResponse> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.createSummary(summary),\n\t\t\t\"gitManager_createSummary\",\n\t\t);\n\t}\n\n\tpublic async deleteSummary(softDelete: boolean): Promise<void> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.deleteSummary(softDelete),\n\t\t\t\"gitManager_deleteSummary\",\n\t\t);\n\t}\n\n\tpublic async getSummary(sha: string): Promise<IWholeFlatSummary> {\n\t\treturn this.runWithRetry(\n\t\t\tasync () => this.internalGitManager.getSummary(sha),\n\t\t\t\"gitManager_getSummary\",\n\t\t);\n\t}\n\n\tprivate async runWithRetry<T>(api: () => Promise<T>, callName: string): Promise<T> {\n\t\treturn runWithRetry(\n\t\t\tapi,\n\t\t\tcallName,\n\t\t\tthis.logger,\n\t\t\t{}, // progress\n\t\t);\n\t}\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"shreddedSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/shreddedSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAK3E,OAAO,EACH,uBAAuB,EACvB,eAAe,EACf,+BAA+B,EAClC,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD;;;;GAIG;AACH,qBAAa,qCAAsC,YAAW,uBAAuB;IAqB7E,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;aAC3B,QAAQ,EAAE,+BAA+B;IAIzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAzBtC,SAAS,CAAC,QAAQ,CAAC,aAAa,sBAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;IAE7E,IAAW,aAAa,IAAI,MAAM,CAEjC;YAEa,uBAAuB;gBAUd,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,+BAA+B,EACzD,cAAc,CAAC,EAAE,4BAA4B,EAC7C,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAC/B,iBAAiB,GAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CAA4B;IAQrG,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAqBzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAuCpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BlD,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB1F,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAsB9D,uBAAuB;IAWrC,OAAO,CAAC,WAAW;CAGtB"}
1
+ {"version":3,"file":"shreddedSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/shreddedSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EACN,uBAAuB,EACvB,eAAe,EACf,+BAA+B,EAC/B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACN,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACN,UAAU,EAGV,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAEhD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAIrD;;;;GAIG;AACH,qBAAa,qCAAsC,YAAW,uBAAuB;IAqBnF,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;aAC3B,QAAQ,EAAE,+BAA+B;IAIzD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAzBnC,SAAS,CAAC,QAAQ,CAAC,aAAa,sBAA6B;IAC7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsC;IAChE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA2C;IAE7E,IAAW,aAAa,IAAI,MAAM,CAEjC;YAEa,uBAAuB;gBAUjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,+BAA+B,EACzD,cAAc,CAAC,EAAE,4BAA4B,EAC7C,SAAS,CAAC,EAAE,MAAM,CAAC,eAAe,CAAC,EACnC,iBAAiB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC,EAC/B,iBAAiB,GAAE,CACnC,YAAY,CAAC,EAAE,OAAO,KAClB,OAAO,CAAC,UAAU,CAA4B;IAQvC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAqBzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAyCpE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA2BlD,wBAAwB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IAqBL,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,uBAAuB;IAYrC,OAAO,CAAC,WAAW;CAGnB"}
@@ -2,7 +2,7 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { stringToBuffer, Uint8ArrayToString, } from "@fluidframework/common-utils";
5
+ import { stringToBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
6
6
  import { buildHierarchy } from "@fluidframework/protocol-base";
7
7
  import { SummaryTreeUploadManager, } from "@fluidframework/server-services-client";
8
8
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
@@ -78,7 +78,10 @@ export class ShreddedSummaryDocumentStorageService {
78
78
  return response;
79
79
  });
80
80
  const tree = buildHierarchy(rawTree, this.blobsShaCache, true);
81
- await ((_b = this.snapshotTreeCache) === null || _b === void 0 ? void 0 : _b.put(this.getCacheKey(tree.id), { id: requestVersion.id, snapshotTree: tree }));
81
+ await ((_b = this.snapshotTreeCache) === null || _b === void 0 ? void 0 : _b.put(this.getCacheKey(tree.id), {
82
+ id: requestVersion.id,
83
+ snapshotTree: tree,
84
+ }));
82
85
  return tree;
83
86
  }
84
87
  async readBlob(blobId) {
@@ -126,7 +129,9 @@ export class ShreddedSummaryDocumentStorageService {
126
129
  size: uint8ArrayFile.length,
127
130
  }, async (event) => {
128
131
  const manager = await this.getStorageManager();
129
- const response = await manager.createBlob(Uint8ArrayToString(uint8ArrayFile, "base64"), "base64").then((r) => ({ id: r.sha, url: r.url }));
132
+ const response = await manager
133
+ .createBlob(Uint8ArrayToString(uint8ArrayFile, "base64"), "base64")
134
+ .then((r) => ({ id: r.sha, url: r.url }));
130
135
  event.end({
131
136
  blobId: response.id,
132
137
  });
@@ -135,8 +140,7 @@ export class ShreddedSummaryDocumentStorageService {
135
140
  }
136
141
  async getPreviousFullSnapshot(parentHandle) {
137
142
  return parentHandle
138
- ? this.getVersions(parentHandle, 1)
139
- .then(async (versions) => {
143
+ ? this.getVersions(parentHandle, 1).then(async (versions) => {
140
144
  // Clear the cache as the getSnapshotTree call will fill the cache.
141
145
  this.blobsShaCache.clear();
142
146
  return this.getSnapshotTree(versions[0]);
@@ -1 +1 @@
1
- {"version":3,"file":"shreddedSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/shreddedSummaryDocumentStorageService.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 type { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport {\n stringToBuffer,\n Uint8ArrayToString,\n} from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n ISummaryContext,\n IDocumentStorageServicePolicies,\n} from \"@fluidframework/driver-definitions\";\nimport { buildHierarchy } from \"@fluidframework/protocol-base\";\nimport {\n ICreateBlobResponse,\n ISnapshotTreeEx,\n ISummaryHandle,\n ISummaryTree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n GitManager,\n ISummaryUploadManager,\n SummaryTreeUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache, InMemoryCache } from \"./cache\";\nimport { RetriableGitManager } from \"./retriableGitManager\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nconst isNode = typeof window === \"undefined\";\n\n/**\n * Document access to underlying storage for routerlicious driver.\n * Uploads summaries piece-by-piece traversing the tree recursively.\n * Downloads summaries piece-by-piece on-demand, or up-front when prefetch is enabled.\n */\nexport class ShreddedSummaryDocumentStorageService implements IDocumentStorageService {\n // The values of this cache is useless. We only need the keys. So we are always putting\n // empty strings as values.\n protected readonly blobsShaCache = new Map<string, string>();\n private readonly blobCache: ICache<ArrayBufferLike> | undefined;\n private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion> | undefined;\n\n public get repositoryUrl(): string {\n return \"\";\n }\n\n private async getSummaryUploadManager(): Promise<ISummaryUploadManager> {\n const manager = await this.getStorageManager();\n return new SummaryTreeUploadManager(\n new RetriableGitManager(manager, this.logger),\n this.blobsShaCache,\n this.getPreviousFullSnapshot.bind(this),\n );\n }\n\n constructor(\n protected readonly id: string,\n protected readonly manager: GitManager,\n protected readonly logger: ITelemetryLogger,\n public readonly policies: IDocumentStorageServicePolicies,\n driverPolicies?: IRouterliciousDriverPolicies,\n blobCache?: ICache<ArrayBufferLike>,\n snapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n private readonly getStorageManager: (disableCache?: boolean) => Promise<GitManager> = async () => this.manager,\n ) {\n if (driverPolicies?.enableRestLess === true || isNode) {\n this.blobCache = blobCache ?? new InMemoryCache();\n this.snapshotTreeCache = snapshotTreeCache ?? new InMemoryCache();\n }\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n const id = versionId ? versionId : this.id;\n const commits = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getVersions\",\n versionId: id,\n count,\n },\n async () => {\n const manager = await this.getStorageManager();\n return manager.getCommits(id, count);\n },\n );\n return commits.map((commit) => ({\n date: commit.commit.author.date,\n id: commit.sha,\n treeId: commit.commit.tree.sha,\n }));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTreeEx | null> {\n let requestVersion = version;\n if (!requestVersion) {\n const versions = await this.getVersions(this.id, 1);\n if (versions.length === 0) {\n return null;\n }\n\n requestVersion = versions[0];\n }\n\n const cachedSnapshotTree = await this.snapshotTreeCache?.get(this.getCacheKey(requestVersion.treeId));\n if (cachedSnapshotTree) {\n return cachedSnapshotTree.snapshotTree as ISnapshotTreeEx;\n }\n\n const rawTree = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getSnapshotTree\",\n treeId: requestVersion.treeId,\n },\n async (event) => {\n const manager = await this.getStorageManager();\n const response = await manager.getTree(requestVersion!.treeId);\n event.end({\n size: response.tree.length,\n });\n return response;\n },\n );\n const tree = buildHierarchy(rawTree, this.blobsShaCache, true);\n await this.snapshotTreeCache?.put(\n this.getCacheKey(tree.id),\n { id: requestVersion.id, snapshotTree: tree },\n );\n return tree;\n }\n\n public async readBlob(blobId: string): Promise<ArrayBufferLike> {\n const cachedBlob = await this.blobCache?.get(this.getCacheKey(blobId));\n if (cachedBlob) {\n return cachedBlob;\n }\n\n const value = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"readBlob\",\n blobId,\n },\n async (event) => {\n const manager = await this.getStorageManager();\n const response = await manager.getBlob(blobId);\n event.end({\n size: response.size,\n });\n return response;\n },\n );\n this.blobsShaCache.set(value.sha, \"\");\n const bufferContent = stringToBuffer(value.content, value.encoding);\n await this.blobCache?.put(this.getCacheKey(value.sha), bufferContent);\n return bufferContent;\n }\n\n public async uploadSummaryWithContext(summary: ISummaryTree, context: ISummaryContext): Promise<string> {\n const summaryHandle = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"uploadSummaryWithContext\",\n proposalHandle: context.proposalHandle,\n ackHandle: context.ackHandle,\n referenceSequenceNumber: context.referenceSequenceNumber,\n },\n async () => {\n const summaryUploadManager = await this.getSummaryUploadManager();\n return summaryUploadManager.writeSummaryTree(summary, context.ackHandle ?? \"\", \"channel\");\n },\n );\n return summaryHandle;\n }\n\n public async downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {\n throw new Error(\"NOT IMPLEMENTED!\");\n }\n\n public async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n const uint8ArrayFile = new Uint8Array(file);\n return PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"createBlob\",\n size: uint8ArrayFile.length,\n },\n async (event) => {\n const manager = await this.getStorageManager();\n const response = await manager.createBlob(\n Uint8ArrayToString(\n uint8ArrayFile, \"base64\"),\n \"base64\").then((r) => ({ id: r.sha, url: r.url }));\n event.end({\n blobId: response.id,\n });\n return response;\n },\n );\n }\n\n private async getPreviousFullSnapshot(parentHandle: string): Promise<ISnapshotTreeEx | null | undefined> {\n return parentHandle\n ? this.getVersions(parentHandle, 1)\n .then(async (versions) => {\n // Clear the cache as the getSnapshotTree call will fill the cache.\n this.blobsShaCache.clear();\n return this.getSnapshotTree(versions[0]);\n })\n : undefined;\n }\n\n private getCacheKey(blobId: string): string {\n return `${this.id}:${blobId}`;\n }\n}\n"]}
1
+ {"version":3,"file":"shreddedSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/shreddedSummaryDocumentStorageService.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 type { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { stringToBuffer, Uint8ArrayToString } from \"@fluidframework/common-utils\";\nimport {\n\tIDocumentStorageService,\n\tISummaryContext,\n\tIDocumentStorageServicePolicies,\n} from \"@fluidframework/driver-definitions\";\nimport { buildHierarchy } from \"@fluidframework/protocol-base\";\nimport {\n\tICreateBlobResponse,\n\tISnapshotTreeEx,\n\tISummaryHandle,\n\tISummaryTree,\n\tIVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n\tGitManager,\n\tISummaryUploadManager,\n\tSummaryTreeUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache, InMemoryCache } from \"./cache\";\nimport { RetriableGitManager } from \"./retriableGitManager\";\nimport { ISnapshotTreeVersion } from \"./definitions\";\n\nconst isNode = typeof window === \"undefined\";\n\n/**\n * Document access to underlying storage for routerlicious driver.\n * Uploads summaries piece-by-piece traversing the tree recursively.\n * Downloads summaries piece-by-piece on-demand, or up-front when prefetch is enabled.\n */\nexport class ShreddedSummaryDocumentStorageService implements IDocumentStorageService {\n\t// The values of this cache is useless. We only need the keys. So we are always putting\n\t// empty strings as values.\n\tprotected readonly blobsShaCache = new Map<string, string>();\n\tprivate readonly blobCache: ICache<ArrayBufferLike> | undefined;\n\tprivate readonly snapshotTreeCache: ICache<ISnapshotTreeVersion> | undefined;\n\n\tpublic get repositoryUrl(): string {\n\t\treturn \"\";\n\t}\n\n\tprivate async getSummaryUploadManager(): Promise<ISummaryUploadManager> {\n\t\tconst manager = await this.getStorageManager();\n\t\treturn new SummaryTreeUploadManager(\n\t\t\tnew RetriableGitManager(manager, this.logger),\n\t\t\tthis.blobsShaCache,\n\t\t\tthis.getPreviousFullSnapshot.bind(this),\n\t\t);\n\t}\n\n\tconstructor(\n\t\tprotected readonly id: string,\n\t\tprotected readonly manager: GitManager,\n\t\tprotected readonly logger: ITelemetryLogger,\n\t\tpublic readonly policies: IDocumentStorageServicePolicies,\n\t\tdriverPolicies?: IRouterliciousDriverPolicies,\n\t\tblobCache?: ICache<ArrayBufferLike>,\n\t\tsnapshotTreeCache?: ICache<ISnapshotTreeVersion>,\n\t\tprivate readonly getStorageManager: (\n\t\t\tdisableCache?: boolean,\n\t\t) => Promise<GitManager> = async () => this.manager,\n\t) {\n\t\tif (driverPolicies?.enableRestLess === true || isNode) {\n\t\t\tthis.blobCache = blobCache ?? new InMemoryCache();\n\t\t\tthis.snapshotTreeCache = snapshotTreeCache ?? new InMemoryCache();\n\t\t}\n\t}\n\n\tpublic async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n\t\tconst id = versionId ? versionId : this.id;\n\t\tconst commits = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getVersions\",\n\t\t\t\tversionId: id,\n\t\t\t\tcount,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\treturn manager.getCommits(id, count);\n\t\t\t},\n\t\t);\n\t\treturn commits.map((commit) => ({\n\t\t\tdate: commit.commit.author.date,\n\t\t\tid: commit.sha,\n\t\t\ttreeId: commit.commit.tree.sha,\n\t\t}));\n\t}\n\n\tpublic async getSnapshotTree(version?: IVersion): Promise<ISnapshotTreeEx | null> {\n\t\tlet requestVersion = version;\n\t\tif (!requestVersion) {\n\t\t\tconst versions = await this.getVersions(this.id, 1);\n\t\t\tif (versions.length === 0) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\trequestVersion = versions[0];\n\t\t}\n\n\t\tconst cachedSnapshotTree = await this.snapshotTreeCache?.get(\n\t\t\tthis.getCacheKey(requestVersion.treeId),\n\t\t);\n\t\tif (cachedSnapshotTree) {\n\t\t\treturn cachedSnapshotTree.snapshotTree as ISnapshotTreeEx;\n\t\t}\n\n\t\tconst rawTree = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"getSnapshotTree\",\n\t\t\t\ttreeId: requestVersion.treeId,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager.getTree(requestVersion!.treeId);\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.tree.length,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t);\n\t\tconst tree = buildHierarchy(rawTree, this.blobsShaCache, true);\n\t\tawait this.snapshotTreeCache?.put(this.getCacheKey(tree.id), {\n\t\t\tid: requestVersion.id,\n\t\t\tsnapshotTree: tree,\n\t\t});\n\t\treturn tree;\n\t}\n\n\tpublic async readBlob(blobId: string): Promise<ArrayBufferLike> {\n\t\tconst cachedBlob = await this.blobCache?.get(this.getCacheKey(blobId));\n\t\tif (cachedBlob) {\n\t\t\treturn cachedBlob;\n\t\t}\n\n\t\tconst value = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"readBlob\",\n\t\t\t\tblobId,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager.getBlob(blobId);\n\t\t\t\tevent.end({\n\t\t\t\t\tsize: response.size,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t);\n\t\tthis.blobsShaCache.set(value.sha, \"\");\n\t\tconst bufferContent = stringToBuffer(value.content, value.encoding);\n\t\tawait this.blobCache?.put(this.getCacheKey(value.sha), bufferContent);\n\t\treturn bufferContent;\n\t}\n\n\tpublic async uploadSummaryWithContext(\n\t\tsummary: ISummaryTree,\n\t\tcontext: ISummaryContext,\n\t): Promise<string> {\n\t\tconst summaryHandle = await PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"uploadSummaryWithContext\",\n\t\t\t\tproposalHandle: context.proposalHandle,\n\t\t\t\tackHandle: context.ackHandle,\n\t\t\t\treferenceSequenceNumber: context.referenceSequenceNumber,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst summaryUploadManager = await this.getSummaryUploadManager();\n\t\t\t\treturn summaryUploadManager.writeSummaryTree(\n\t\t\t\t\tsummary,\n\t\t\t\t\tcontext.ackHandle ?? \"\",\n\t\t\t\t\t\"channel\",\n\t\t\t\t);\n\t\t\t},\n\t\t);\n\t\treturn summaryHandle;\n\t}\n\n\tpublic async downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {\n\t\tthrow new Error(\"NOT IMPLEMENTED!\");\n\t}\n\n\tpublic async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {\n\t\tconst uint8ArrayFile = new Uint8Array(file);\n\t\treturn PerformanceEvent.timedExecAsync(\n\t\t\tthis.logger,\n\t\t\t{\n\t\t\t\teventName: \"createBlob\",\n\t\t\t\tsize: uint8ArrayFile.length,\n\t\t\t},\n\t\t\tasync (event) => {\n\t\t\t\tconst manager = await this.getStorageManager();\n\t\t\t\tconst response = await manager\n\t\t\t\t\t.createBlob(Uint8ArrayToString(uint8ArrayFile, \"base64\"), \"base64\")\n\t\t\t\t\t.then((r) => ({ id: r.sha, url: r.url }));\n\t\t\t\tevent.end({\n\t\t\t\t\tblobId: response.id,\n\t\t\t\t});\n\t\t\t\treturn response;\n\t\t\t},\n\t\t);\n\t}\n\n\tprivate async getPreviousFullSnapshot(\n\t\tparentHandle: string,\n\t): Promise<ISnapshotTreeEx | null | undefined> {\n\t\treturn parentHandle\n\t\t\t? this.getVersions(parentHandle, 1).then(async (versions) => {\n\t\t\t\t\t// Clear the cache as the getSnapshotTree call will fill the cache.\n\t\t\t\t\tthis.blobsShaCache.clear();\n\t\t\t\t\treturn this.getSnapshotTree(versions[0]);\n\t\t\t })\n\t\t\t: undefined;\n\t}\n\n\tprivate getCacheKey(blobId: string): string {\n\t\treturn `${this.id}:${blobId}`;\n\t}\n}\n"]}
package/lib/tokens.d.ts CHANGED
@@ -4,9 +4,13 @@
4
4
  */
5
5
  import { ITokenClaims } from "@fluidframework/protocol-definitions";
6
6
  /**
7
- * The ITokenService abstracts the discovery of claims contained within a token
7
+ * Abstracts the discovery of claims contained within a token.
8
8
  */
9
9
  export interface ITokenService {
10
+ /**
11
+ * Extracts the {@link @fluidframework/protocol-definitions#ITokenClaims | token claims} from the provided
12
+ * {@link https://jwt.io/introduction/ | JSON Web Token (JWT)} string representation.
13
+ */
10
14
  extractClaims(token: string): ITokenClaims;
11
15
  }
12
16
  export interface ITokenResponse {
@@ -15,8 +19,9 @@ export interface ITokenResponse {
15
19
  */
16
20
  jwt: string;
17
21
  /**
18
- * Flag indicating whether token was obtained from local cache.
19
- * Undefined indicates that the source of the token could not be determined.
22
+ * A flag indicating whether token was obtained from local cache.
23
+ *
24
+ * @remarks `undefined` indicates that the source of the token could not be determined.
20
25
  */
21
26
  fromCache?: boolean;
22
27
  }
@@ -27,20 +32,30 @@ export interface ITokenResponse {
27
32
  export interface ITokenProvider {
28
33
  /**
29
34
  * Fetches the orderer token from host.
35
+ *
30
36
  * @param tenantId - Tenant ID.
31
37
  * @param documentId - Optional. Document ID is only required for document-scoped requests.
32
38
  * @param refresh - Optional flag indicating whether token fetch must bypass local cache.
33
- * @returns TokenResponse object representing token value along with flag indicating
34
- * whether token came from cache.
39
+ * This likely indicates that some previous request failed authorization due to an expired token,
40
+ * and so a fresh token is required.
41
+ *
42
+ * Default: `false`.
43
+ *
44
+ * NOTE: This parameter will be made required in the future.
35
45
  */
36
46
  fetchOrdererToken(tenantId: string, documentId?: string, refresh?: boolean): Promise<ITokenResponse>;
37
47
  /**
38
48
  * Fetches the storage token from host.
49
+ *
39
50
  * @param tenantId - Tenant ID.
40
51
  * @param documentId - Document ID.
41
52
  * @param refresh - Optional flag indicating whether token fetch must bypass local cache.
42
- * @returns TokenResponse object representing token value along with flag indicating
43
- * whether token came from cache.
53
+ * This likely indicates that some previous request failed authorization due to an expired token,
54
+ * and so a fresh token is required.
55
+ *
56
+ * Default: `false`.
57
+ *
58
+ * NOTE: This parameter will be made required in the future.
44
59
  */
45
60
  fetchStorageToken(tenantId: string, documentId: string, refresh?: boolean): Promise<ITokenResponse>;
46
61
  /**
@@ -49,7 +64,9 @@ export interface ITokenProvider {
49
64
  * created it.
50
65
  *
51
66
  * @remarks Notes:
67
+ *
52
68
  * * Using the callback may have performance impact on the document creation process.
69
+ *
53
70
  * * Any exceptions thrown in the callback would fail the creation workflow
54
71
  * (see {@link RouterliciousDocumentServiceFactory.createContainer} for more details).
55
72
  *
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC3B;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAErG;;;;;;;OAOG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAEpG;;;;;;;;;;;;;OAaG;IACH,0BAA0B,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACzF"}
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC9B;;OAEG;IACH,GAAG,EAAE,MAAM,CAAC;IAEZ;;;;OAIG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC9B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3B;;;;;;;;;;;;OAYG;IACH,iBAAiB,CAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,GACf,OAAO,CAAC,cAAc,CAAC,CAAC;IAE3B;;;;;;;;;;;;;;;OAeG;IACH,0BAA0B,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtF"}
package/lib/tokens.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITokenClaims } from \"@fluidframework/protocol-definitions\";\n\n/**\n * The ITokenService abstracts the discovery of claims contained within a token\n */\nexport interface ITokenService {\n extractClaims(token: string): ITokenClaims;\n}\n\nexport interface ITokenResponse {\n /**\n * {@link https://jwt.io/introduction/ | JSON Web Token (JWT)} value.\n */\n jwt: string;\n\n /**\n * Flag indicating whether token was obtained from local cache.\n * Undefined indicates that the source of the token could not be determined.\n */\n fromCache?: boolean;\n}\n\n/**\n * Abstracts the token fetching mechanism for a hosting application.\n * The hosting application is responsible for providing an implementation.\n */\nexport interface ITokenProvider {\n /**\n * Fetches the orderer token from host.\n * @param tenantId - Tenant ID.\n * @param documentId - Optional. Document ID is only required for document-scoped requests.\n * @param refresh - Optional flag indicating whether token fetch must bypass local cache.\n * @returns TokenResponse object representing token value along with flag indicating\n * whether token came from cache.\n */\n fetchOrdererToken(tenantId: string, documentId?: string, refresh?: boolean): Promise<ITokenResponse>;\n\n /**\n * Fetches the storage token from host.\n * @param tenantId - Tenant ID.\n * @param documentId - Document ID.\n * @param refresh - Optional flag indicating whether token fetch must bypass local cache.\n * @returns TokenResponse object representing token value along with flag indicating\n * whether token came from cache.\n */\n fetchStorageToken(tenantId: string, documentId: string, refresh?: boolean): Promise<ITokenResponse>;\n\n /**\n * A callback triggered directly after creating the document. In this callback the client has the opportunity, to\n * verify against an authorization service, if the user who claims to create the document is the same user who\n * created it.\n *\n * @remarks Notes:\n * * Using the callback may have performance impact on the document creation process.\n * * Any exceptions thrown in the callback would fail the creation workflow\n * (see {@link RouterliciousDocumentServiceFactory.createContainer} for more details).\n *\n * @param documentId - Document ID.\n * @param creationToken - A special token that doesn't provide any kind of access, but it has the user's payload\n * and document id. It can be used to validate the identity of the document creator.\n */\n documentPostCreateCallback?(documentId: string, creationToken: string): Promise<void>;\n}\n"]}
1
+ {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAAA;;;GAGG","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { ITokenClaims } from \"@fluidframework/protocol-definitions\";\n\n/**\n * Abstracts the discovery of claims contained within a token.\n */\nexport interface ITokenService {\n\t/**\n\t * Extracts the {@link @fluidframework/protocol-definitions#ITokenClaims | token claims} from the provided\n\t * {@link https://jwt.io/introduction/ | JSON Web Token (JWT)} string representation.\n\t */\n\textractClaims(token: string): ITokenClaims;\n}\n\nexport interface ITokenResponse {\n\t/**\n\t * {@link https://jwt.io/introduction/ | JSON Web Token (JWT)} value.\n\t */\n\tjwt: string;\n\n\t/**\n\t * A flag indicating whether token was obtained from local cache.\n\t *\n\t * @remarks `undefined` indicates that the source of the token could not be determined.\n\t */\n\tfromCache?: boolean;\n}\n\n/**\n * Abstracts the token fetching mechanism for a hosting application.\n * The hosting application is responsible for providing an implementation.\n */\nexport interface ITokenProvider {\n\t/**\n\t * Fetches the orderer token from host.\n\t *\n\t * @param tenantId - Tenant ID.\n\t * @param documentId - Optional. Document ID is only required for document-scoped requests.\n\t * @param refresh - Optional flag indicating whether token fetch must bypass local cache.\n\t * This likely indicates that some previous request failed authorization due to an expired token,\n\t * and so a fresh token is required.\n\t *\n\t * Default: `false`.\n\t *\n\t * NOTE: This parameter will be made required in the future.\n\t */\n\tfetchOrdererToken(\n\t\ttenantId: string,\n\t\tdocumentId?: string,\n\t\trefresh?: boolean,\n\t): Promise<ITokenResponse>;\n\n\t/**\n\t * Fetches the storage token from host.\n\t *\n\t * @param tenantId - Tenant ID.\n\t * @param documentId - Document ID.\n\t * @param refresh - Optional flag indicating whether token fetch must bypass local cache.\n\t * This likely indicates that some previous request failed authorization due to an expired token,\n\t * and so a fresh token is required.\n\t *\n\t * Default: `false`.\n\t *\n\t * NOTE: This parameter will be made required in the future.\n\t */\n\tfetchStorageToken(\n\t\ttenantId: string,\n\t\tdocumentId: string,\n\t\trefresh?: boolean,\n\t): Promise<ITokenResponse>;\n\n\t/**\n\t * A callback triggered directly after creating the document. In this callback the client has the opportunity, to\n\t * verify against an authorization service, if the user who claims to create the document is the same user who\n\t * created it.\n\t *\n\t * @remarks Notes:\n\t *\n\t * * Using the callback may have performance impact on the document creation process.\n\t *\n\t * * Any exceptions thrown in the callback would fail the creation workflow\n\t * (see {@link RouterliciousDocumentServiceFactory.createContainer} for more details).\n\t *\n\t * @param documentId - Document ID.\n\t * @param creationToken - A special token that doesn't provide any kind of access, but it has the user's payload\n\t * and document id. It can be used to validate the identity of the document creator.\n\t */\n\tdocumentPostCreateCallback?(documentId: string, creationToken: string): Promise<void>;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,QAEhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YAAa,MAAM,cAAc,MAAM,KAAG,MACZ,CAAC;AAEnE,eAAO,MAAM,6BAA6B,gBAAiB,iBAAiB,WAAW,QAAQ,KAAG,iBAuBjG,CAAC"}
1
+ {"version":3,"file":"urlUtils.d.ts","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AACvE,OAAO,QAAQ,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,wCAAwC,CAAC;AAElE,eAAO,MAAM,aAAa,aAAc,MAAM,KAAG,QAEhD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,YAAa,MAAM,cAAc,MAAM,KAAG,MACf,CAAC;AAEhE,eAAO,MAAM,6BAA6B,gBAC5B,iBAAiB,WACrB,QAAQ,KACf,iBAuBF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAY,EAAE;IACxD,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,UAAkB,EAAU,EAAE,CACnF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,WAA8B,EAAE,OAAiB,EAAqB,EAAE;IAClH,MAAM,oBAAoB,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5E,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,oBAAoB,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAClE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,qBAAqB,GAAsB;QAC7C,SAAS,EAAE;YACP,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SACpC;QACD,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,IAAI,QAAQ,CAAC,WAAW,oBAAoB,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KAC5F,CAAC;IACF,OAAO,qBAAqB,CAAC;AACjC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidResolvedUrl } from \"@fluidframework/driver-definitions\";\nimport URLParse from \"url-parse\";\nimport { ISession } from \"@fluidframework/server-services-client\";\n\nexport const parseFluidUrl = (fluidUrl: string): URLParse => {\n return new URLParse(fluidUrl, true);\n};\n\n/**\n * Assume documentId is at end of url path.\n * This is true for Routerlicious' and Tinylicious' documentUrl and deltaStorageUrl.\n * Routerlicious and Tinylicious do not use documentId in storageUrl nor ordererUrl.\n * TODO: Ideally we would be able to regenerate the resolvedUrl, rather than patching the current one.\n */\nexport const replaceDocumentIdInPath = (urlPath: string, documentId: string): string =>\n urlPath.split(\"/\").slice(0, -1).concat([documentId]).join(\"/\");\n\nexport const getDiscoveredFluidResolvedUrl = (resolvedUrl: IFluidResolvedUrl, session: ISession): IFluidResolvedUrl => {\n const discoveredOrdererUrl = new URLParse(session.ordererUrl);\n const deltaStorageUrl = new URLParse(resolvedUrl.endpoints.deltaStorageUrl);\n deltaStorageUrl.set(\"host\", discoveredOrdererUrl.host);\n\n const discoveredStorageUrl = new URLParse(session.historianUrl);\n const storageUrl = new URLParse(resolvedUrl.endpoints.storageUrl);\n storageUrl.set(\"host\", discoveredStorageUrl.host);\n\n const parsedUrl = parseFluidUrl(resolvedUrl.url);\n const discoveredResolvedUrl: IFluidResolvedUrl = {\n endpoints: {\n deltaStorageUrl: deltaStorageUrl.toString(),\n ordererUrl: session.ordererUrl,\n deltaStreamUrl: session.deltaStreamUrl,\n storageUrl: storageUrl.toString(),\n },\n id: resolvedUrl.id,\n tokens: resolvedUrl.tokens,\n type: resolvedUrl.type,\n url: new URLParse(`fluid://${discoveredOrdererUrl.host}${parsedUrl.pathname}`).toString(),\n };\n return discoveredResolvedUrl;\n};\n"]}
1
+ {"version":3,"file":"urlUtils.js","sourceRoot":"","sources":["../src/urlUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAY,EAAE;IAC3D,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,OAAe,EAAE,UAAkB,EAAU,EAAE,CACtF,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAEhE,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC5C,WAA8B,EAC9B,OAAiB,EACG,EAAE;IACtB,MAAM,oBAAoB,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAC5E,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAEvD,MAAM,oBAAoB,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;IAClE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAElD,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjD,MAAM,qBAAqB,GAAsB;QAChD,SAAS,EAAE;YACV,eAAe,EAAE,eAAe,CAAC,QAAQ,EAAE;YAC3C,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE;SACjC;QACD,EAAE,EAAE,WAAW,CAAC,EAAE;QAClB,MAAM,EAAE,WAAW,CAAC,MAAM;QAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;QACtB,GAAG,EAAE,IAAI,QAAQ,CAAC,WAAW,oBAAoB,CAAC,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;KACzF,CAAC;IACF,OAAO,qBAAqB,CAAC;AAC9B,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidResolvedUrl } from \"@fluidframework/driver-definitions\";\nimport URLParse from \"url-parse\";\nimport { ISession } from \"@fluidframework/server-services-client\";\n\nexport const parseFluidUrl = (fluidUrl: string): URLParse => {\n\treturn new URLParse(fluidUrl, true);\n};\n\n/**\n * Assume documentId is at end of url path.\n * This is true for Routerlicious' and Tinylicious' documentUrl and deltaStorageUrl.\n * Routerlicious and Tinylicious do not use documentId in storageUrl nor ordererUrl.\n * TODO: Ideally we would be able to regenerate the resolvedUrl, rather than patching the current one.\n */\nexport const replaceDocumentIdInPath = (urlPath: string, documentId: string): string =>\n\turlPath.split(\"/\").slice(0, -1).concat([documentId]).join(\"/\");\n\nexport const getDiscoveredFluidResolvedUrl = (\n\tresolvedUrl: IFluidResolvedUrl,\n\tsession: ISession,\n): IFluidResolvedUrl => {\n\tconst discoveredOrdererUrl = new URLParse(session.ordererUrl);\n\tconst deltaStorageUrl = new URLParse(resolvedUrl.endpoints.deltaStorageUrl);\n\tdeltaStorageUrl.set(\"host\", discoveredOrdererUrl.host);\n\n\tconst discoveredStorageUrl = new URLParse(session.historianUrl);\n\tconst storageUrl = new URLParse(resolvedUrl.endpoints.storageUrl);\n\tstorageUrl.set(\"host\", discoveredStorageUrl.host);\n\n\tconst parsedUrl = parseFluidUrl(resolvedUrl.url);\n\tconst discoveredResolvedUrl: IFluidResolvedUrl = {\n\t\tendpoints: {\n\t\t\tdeltaStorageUrl: deltaStorageUrl.toString(),\n\t\t\tordererUrl: session.ordererUrl,\n\t\t\tdeltaStreamUrl: session.deltaStreamUrl,\n\t\t\tstorageUrl: storageUrl.toString(),\n\t\t},\n\t\tid: resolvedUrl.id,\n\t\ttokens: resolvedUrl.tokens,\n\t\ttype: resolvedUrl.type,\n\t\turl: new URLParse(`fluid://${discoveredOrdererUrl.host}${parsedUrl.pathname}`).toString(),\n\t};\n\treturn discoveredResolvedUrl;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAM3E,OAAO,EACH,uBAAuB,EACvB,eAAe,EACf,+BAA+B,EAClC,MAAM,oCAAoC,CAAC;AAI5C,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAI1D,qBAAa,kCAAmC,YAAW,uBAAuB;IAa1E,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;aAC3B,QAAQ,EAAE,+BAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IApBtC,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;YAEa,uBAAuB;gBAMd,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,+BAA+B,EACxC,cAAc,CAAC,0CAA8B,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,oBAAoB,CAAuB,EACrE,iBAAiB,CAAC,wBAAY,EAC9B,iBAAiB,GAAE,CAAC,YAAY,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,UAAU,CACc;IAIvF,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA0CzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA4BlD,wBAAwB,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAiB1F,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAqBrE,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAsB9D,yBAAyB;YAkDzB,aAAa;IAS3B,OAAO,CAAC,WAAW;CAGtB"}
1
+ {"version":3,"file":"wholeSummaryDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAE3E,OAAO,EACN,uBAAuB,EACvB,eAAe,EACf,+BAA+B,EAC/B,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEN,UAAU,EAGV,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAI1D,qBAAa,kCAAmC,YAAW,uBAAuB;IAahF,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM;IAC7B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,UAAU;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB;aAC3B,QAAQ,EAAE,+BAA+B;IACzD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IACnC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IApBnC,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;YAEa,uBAAuB;gBAMjB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,EAAE,+BAA+B,EACxC,cAAc,CAAC,0CAA8B,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,oBAAoB,CAAuB,EACrE,iBAAiB,CAAC,wBAAY,EAC9B,iBAAiB,GAAE,CACnC,YAAY,CAAC,EAAE,OAAO,KAClB,OAAO,CAAC,UAAU,CAGP;IAGJ,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IA8CzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA4BlD,wBAAwB,CACpC,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC;IAqBL,eAAe,CAAC,aAAa,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAwBrE,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,yBAAyB;YA0DzB,aAAa;IAS3B,OAAO,CAAC,WAAW;CAGnB"}
@@ -2,14 +2,16 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { assert, stringToBuffer, Uint8ArrayToString, } from "@fluidframework/common-utils";
6
- import { convertSnapshotAndBlobsToSummaryTree, } from "@fluidframework/driver-utils";
5
+ import { assert, stringToBuffer, Uint8ArrayToString } from "@fluidframework/common-utils";
6
+ import { convertSnapshotAndBlobsToSummaryTree } from "@fluidframework/driver-utils";
7
7
  import { convertWholeFlatSummaryToSnapshotTreeAndBlobs, WholeSummaryUploadManager, } from "@fluidframework/server-services-client";
8
8
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
9
9
  import { InMemoryCache } from "./cache";
10
10
  const latestSnapshotId = "latest";
11
11
  export class WholeSummaryDocumentStorageService {
12
- constructor(id, manager, logger, policies, driverPolicies, blobCache = new InMemoryCache(), snapshotTreeCache = new InMemoryCache(), noCacheGitManager, getStorageManager = async (disableCache) => disableCache && this.noCacheGitManager !== undefined ? this.noCacheGitManager : this.manager) {
12
+ constructor(id, manager, logger, policies, driverPolicies, blobCache = new InMemoryCache(), snapshotTreeCache = new InMemoryCache(), noCacheGitManager, getStorageManager = async (disableCache) => disableCache && this.noCacheGitManager !== undefined
13
+ ? this.noCacheGitManager
14
+ : this.manager) {
13
15
  this.id = id;
14
16
  this.manager = manager;
15
17
  this.logger = logger;
@@ -32,22 +34,26 @@ export class WholeSummaryDocumentStorageService {
32
34
  var _a;
33
35
  if (versionId !== this.id && versionId !== null) {
34
36
  // Blobs/Trees in this scenario will never have multiple versions, so return versionId as is
35
- return [{
37
+ return [
38
+ {
36
39
  id: versionId,
37
40
  treeId: undefined,
38
- }];
41
+ },
42
+ ];
39
43
  }
40
44
  // If this is the first versions call for the document, we know we will want the latest summary.
41
45
  // Fetch latest summary, cache it, and return its id.
42
46
  if (this.firstVersionsCall && count === 1) {
43
47
  this.firstVersionsCall = false;
44
- const { id: _id, snapshotTree } = !((_a = this.driverPolicies) === null || _a === void 0 ? void 0 : _a.enableDiscovery) ?
45
- await this.fetchAndCacheSnapshotTree(latestSnapshotId, false) :
46
- await this.fetchAndCacheSnapshotTree(latestSnapshotId, true);
47
- return [{
48
+ const { id: _id, snapshotTree } = !((_a = this.driverPolicies) === null || _a === void 0 ? void 0 : _a.enableDiscovery)
49
+ ? await this.fetchAndCacheSnapshotTree(latestSnapshotId, false)
50
+ : await this.fetchAndCacheSnapshotTree(latestSnapshotId, true);
51
+ return [
52
+ {
48
53
  id: _id,
49
54
  treeId: snapshotTree.id,
50
- }];
55
+ },
56
+ ];
51
57
  }
52
58
  // Otherwise, get the latest version of the document as normal.
53
59
  const id = versionId ? versionId : this.id;
@@ -132,7 +138,9 @@ export class WholeSummaryDocumentStorageService {
132
138
  size: uint8ArrayFile.length,
133
139
  }, async (event) => {
134
140
  const manager = await this.getStorageManager();
135
- const response = await manager.createBlob(Uint8ArrayToString(uint8ArrayFile, "base64"), "base64").then((r) => ({ id: r.sha, url: r.url }));
141
+ const response = await manager
142
+ .createBlob(Uint8ArrayToString(uint8ArrayFile, "base64"), "base64")
143
+ .then((r) => ({ id: r.sha, url: r.url }));
136
144
  event.end({
137
145
  blobId: response.id,
138
146
  });
@@ -142,7 +150,10 @@ export class WholeSummaryDocumentStorageService {
142
150
  async fetchAndCacheSnapshotTree(versionId, disableCache) {
143
151
  const cachedSnapshotTreeVersion = await this.snapshotTreeCache.get(this.getCacheKey(versionId));
144
152
  if (cachedSnapshotTreeVersion !== undefined) {
145
- return { id: cachedSnapshotTreeVersion.id, snapshotTree: cachedSnapshotTreeVersion.snapshotTree };
153
+ return {
154
+ id: cachedSnapshotTreeVersion.id,
155
+ snapshotTree: cachedSnapshotTreeVersion.snapshotTree,
156
+ };
146
157
  }
147
158
  const wholeFlatSummary = await PerformanceEvent.timedExecAsync(this.logger, {
148
159
  eventName: "getWholeFlatSummary",
@@ -160,7 +171,10 @@ export class WholeSummaryDocumentStorageService {
160
171
  const wholeFlatSummaryId = wholeFlatSummary.id;
161
172
  const snapshotTreeId = normalizedWholeSummary.snapshotTree.id;
162
173
  assert(snapshotTreeId !== undefined, 0x275 /* "Root tree should contain the id" */);
163
- const snapshotTreeVersion = { id: wholeFlatSummaryId, snapshotTree: normalizedWholeSummary.snapshotTree };
174
+ const snapshotTreeVersion = {
175
+ id: wholeFlatSummaryId,
176
+ snapshotTree: normalizedWholeSummary.snapshotTree,
177
+ };
164
178
  const cachePs = [
165
179
  this.snapshotTreeCache.put(this.getCacheKey(snapshotTreeId), snapshotTreeVersion),
166
180
  this.initBlobCache(normalizedWholeSummary.blobs),