@fluidframework/routerlicious-driver 0.52.0 → 0.54.0-47413

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 (33) hide show
  1. package/dist/deltaStorageService.d.ts +1 -1
  2. package/dist/deltaStorageService.d.ts.map +1 -1
  3. package/dist/deltaStorageService.js +2 -2
  4. package/dist/deltaStorageService.js.map +1 -1
  5. package/dist/documentService.d.ts.map +1 -1
  6. package/dist/documentService.js +4 -0
  7. package/dist/documentService.js.map +1 -1
  8. package/dist/packageVersion.d.ts +1 -1
  9. package/dist/packageVersion.d.ts.map +1 -1
  10. package/dist/packageVersion.js +1 -1
  11. package/dist/packageVersion.js.map +1 -1
  12. package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  13. package/dist/wholeSummaryDocumentStorageService.js +1 -4
  14. package/dist/wholeSummaryDocumentStorageService.js.map +1 -1
  15. package/lib/deltaStorageService.d.ts +1 -1
  16. package/lib/deltaStorageService.d.ts.map +1 -1
  17. package/lib/deltaStorageService.js +2 -2
  18. package/lib/deltaStorageService.js.map +1 -1
  19. package/lib/documentService.d.ts.map +1 -1
  20. package/lib/documentService.js +4 -0
  21. package/lib/documentService.js.map +1 -1
  22. package/lib/packageVersion.d.ts +1 -1
  23. package/lib/packageVersion.d.ts.map +1 -1
  24. package/lib/packageVersion.js +1 -1
  25. package/lib/packageVersion.js.map +1 -1
  26. package/lib/wholeSummaryDocumentStorageService.d.ts.map +1 -1
  27. package/lib/wholeSummaryDocumentStorageService.js +1 -4
  28. package/lib/wholeSummaryDocumentStorageService.js.map +1 -1
  29. package/package.json +6 -6
  30. package/src/deltaStorageService.ts +2 -0
  31. package/src/documentService.ts +5 -0
  32. package/src/packageVersion.ts +1 -1
  33. package/src/wholeSummaryDocumentStorageService.ts +1 -7
@@ -17,7 +17,7 @@ export declare class DocumentDeltaStorageService implements IDocumentDeltaStorag
17
17
  private readonly documentStorageService;
18
18
  constructor(tenantId: string, id: string, storageService: IDeltaStorageService, documentStorageService: DocumentStorageService);
19
19
  private logtailSha;
20
- fetchMessages(from: number, to: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean): IStream<ISequencedDocumentMessage[]>;
20
+ fetchMessages(from: number, to: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): IStream<ISequencedDocumentMessage[]>;
21
21
  private getCore;
22
22
  }
23
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAExE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAHtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,oBAAoB,EACpC,sBAAsB,EAAE,sBAAsB;IAGnE,OAAO,CAAC,UAAU,CAA8D;IAEhF,aAAa,CAAC,IAAI,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC;YAkBzB,OAAO;CAgBxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB;IAGhC,GAAG,CACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACP,OAAO,CAAC,kBAAkB,CAAC;CAwBrC"}
1
+ {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAExE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAHtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,oBAAoB,EACpC,sBAAsB,EAAE,sBAAsB;IAGnE,OAAO,CAAC,UAAU,CAA8D;IAEhF,aAAa,CAAC,IAAI,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC;YAmBzB,OAAO;CAgBxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB;IAGhC,GAAG,CACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACP,OAAO,CAAC,kBAAkB,CAAC;CAwBrC"}
@@ -20,7 +20,7 @@ class DocumentDeltaStorageService {
20
20
  this.documentStorageService = documentStorageService;
21
21
  this.logtailSha = this.documentStorageService.logTailSha;
22
22
  }
23
- fetchMessages(from, to, abortSignal, cachedOnly) {
23
+ fetchMessages(from, to, abortSignal, cachedOnly, fetchReason) {
24
24
  if (cachedOnly) {
25
25
  return driver_utils_1.emptyMessageStream;
26
26
  }
@@ -30,7 +30,7 @@ class DocumentDeltaStorageService {
30
30
  1, // concurrency
31
31
  from, // inclusive
32
32
  to, // exclusive
33
- MaxBatchDeltas, new common_utils_1.TelemetryNullLogger(), abortSignal);
33
+ MaxBatchDeltas, new common_utils_1.TelemetryNullLogger(), abortSignal, fetchReason);
34
34
  }
35
35
  async getCore(from, to) {
36
36
  const opsFromLogTail = this.logtailSha ? await driver_utils_1.readAndParse(this.documentStorageService, this.logtailSha) : [];
@@ -1 +1 @@
1
- {"version":3,"file":"deltaStorageService.js","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AASH,+DAA4F;AAC5F,+DAAmE;AAEnE,qEAAmE;AAInE,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,+CAA+C;AAE5E;;GAEG;AACH,MAAa,2BAA2B;IACpC,YACqB,QAAgB,EAChB,EAAU,EACV,cAAoC,EACpC,sBAA8C;QAH9C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAAQ;QACV,mBAAc,GAAd,cAAc,CAAsB;QACpC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAG3D,eAAU,GAAuB,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;IAFhF,CAAC;IAID,aAAa,CAAC,IAAY,EACtB,EAAsB,EACtB,WAAyB,EACzB,UAAoB;QAGpB,IAAI,UAAU,EAAE;YACZ,OAAO,iCAAkB,CAAC;SAC7B;QACD,OAAO,yBAAU,CACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,uEAAuE;QACvE,0DAA0D;QAC1D,CAAC,EAAE,cAAc;QACjB,IAAI,EAAE,YAAY;QAClB,EAAE,EAAE,YAAY;QAChB,cAAc,EACd,IAAI,kCAAmB,EAAE,EACzB,WAAW,CACd,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,EAAU;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,2BAAY,CACtD,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1C,EAAE,CAAC,cAAc,IAAI,IAAI,CAC5B,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC5C;SACJ;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;CACJ;AAhDD,kEAgDC;AAED;;GAEG;AACH,MAAa,mBAAmB;IAC5B,YACqB,GAAW,EACX,WAAwB,EACxB,MAAwB;QAFxB,QAAG,GAAH,GAAG,CAAQ;QACX,gBAAW,GAAX,WAAW,CAAa;QACxB,WAAM,GAAN,MAAM,CAAkB;IAC7C,CAAC;IAEM,KAAK,CAAC,GAAG,CACZ,QAAgB,EAChB,EAAU,EACV,IAAY,EAAE,YAAY;IAC1B,EAAU;QAGV,MAAM,GAAG,GAAG,MAAM,kCAAgB,CAAC,cAAc,CAC7C,IAAI,CAAC,MAAM,EACX;YACI,SAAS,EAAE,WAAW;YACtB,IAAI;YACJ,EAAE;SACL,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACvC,IAAI,CAAC,GAAG,EACR,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC;gBACN,KAAK,EAAE,QAAQ,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACpB,CAAC,CACJ,CAAC;QAEF,oGAAoG;QACpG,4GAA4G;QAC5G,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;CACJ;AApCD,kDAoCC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IDeltaStorageService,\n IDocumentDeltaStorageService,\n IDeltasFetchResult,\n IStream,\n} from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { readAndParse, requestOps, emptyMessageStream } from \"@fluidframework/driver-utils\";\nimport { TelemetryNullLogger } from \"@fluidframework/common-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { RestWrapper } from \"@fluidframework/server-services-client\";\nimport { DocumentStorageService } from \"./documentStorageService\";\n\nconst MaxBatchDeltas = 2000; // Maximum number of ops we can fetch at a time\n\n/**\n * Storage service limited to only being able to fetch documents for a specific document\n */\nexport class DocumentDeltaStorageService implements IDocumentDeltaStorageService {\n constructor(\n private readonly tenantId: string,\n private readonly id: string,\n private readonly storageService: IDeltaStorageService,\n private readonly documentStorageService: DocumentStorageService) {\n }\n\n private logtailSha: string | undefined = this.documentStorageService.logTailSha;\n\n fetchMessages(from: number,\n to: number | undefined,\n abortSignal?: AbortSignal,\n cachedOnly?: boolean,\n ): IStream<ISequencedDocumentMessage[]>\n {\n if (cachedOnly) {\n return emptyMessageStream;\n }\n return requestOps(\n this.getCore.bind(this),\n // Staging: starting with no concurrency, listening for feedback first.\n // In future releases we will switch to actual concurrency\n 1, // concurrency\n from, // inclusive\n to, // exclusive\n MaxBatchDeltas,\n new TelemetryNullLogger(),\n abortSignal,\n );\n }\n\n private async getCore(from: number, to: number): Promise<IDeltasFetchResult> {\n const opsFromLogTail = this.logtailSha ? await readAndParse<ISequencedDocumentMessage[]>\n (this.documentStorageService, this.logtailSha) : [];\n\n this.logtailSha = undefined;\n if (opsFromLogTail.length > 0) {\n const messages = opsFromLogTail.filter((op) =>\n op.sequenceNumber >= from,\n );\n if (messages.length > 0) {\n return { messages, partialResult: true };\n }\n }\n\n return this.storageService.get(this.tenantId, this.id, from, to);\n }\n}\n\n/**\n * Provides access to the underlying delta storage on the server for routerlicious driver.\n */\nexport class DeltaStorageService implements IDeltaStorageService {\n constructor(\n private readonly url: string,\n private readonly restWrapper: RestWrapper,\n private readonly logger: ITelemetryLogger) {\n }\n\n public async get(\n tenantId: string,\n id: string,\n from: number, // inclusive\n to: number, // exclusive\n ): Promise<IDeltasFetchResult>\n {\n const ops = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getDeltas\",\n from,\n to,\n },\n async (event) => {\n const response = await this.restWrapper.get<ISequencedDocumentMessage[]>(\n this.url,\n { from: from - 1, to });\n event.end({\n count: response.length,\n });\n return response;\n },\n );\n\n // It is assumed that server always returns all the ops that it has in the range that was requested.\n // This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n return { messages: ops, partialResult: false };\n }\n}\n"]}
1
+ {"version":3,"file":"deltaStorageService.js","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IDeltaStorageService,\n IDocumentDeltaStorageService,\n IDeltasFetchResult,\n IStream,\n} from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { readAndParse, requestOps, emptyMessageStream } from \"@fluidframework/driver-utils\";\nimport { TelemetryNullLogger } from \"@fluidframework/common-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { RestWrapper } from \"@fluidframework/server-services-client\";\nimport { DocumentStorageService } from \"./documentStorageService\";\n\nconst MaxBatchDeltas = 2000; // Maximum number of ops we can fetch at a time\n\n/**\n * Storage service limited to only being able to fetch documents for a specific document\n */\nexport class DocumentDeltaStorageService implements IDocumentDeltaStorageService {\n constructor(\n private readonly tenantId: string,\n private readonly id: string,\n private readonly storageService: IDeltaStorageService,\n private readonly documentStorageService: DocumentStorageService) {\n }\n\n private logtailSha: string | undefined = this.documentStorageService.logTailSha;\n\n fetchMessages(from: number,\n to: number | undefined,\n abortSignal?: AbortSignal,\n cachedOnly?: boolean,\n fetchReason?: string,\n ): IStream<ISequencedDocumentMessage[]>\n {\n if (cachedOnly) {\n return emptyMessageStream;\n }\n return requestOps(\n this.getCore.bind(this),\n // Staging: starting with no concurrency, listening for feedback first.\n // In future releases we will switch to actual concurrency\n 1, // concurrency\n from, // inclusive\n to, // exclusive\n MaxBatchDeltas,\n new TelemetryNullLogger(),\n abortSignal,\n fetchReason,\n );\n }\n\n private async getCore(from: number, to: number): Promise<IDeltasFetchResult> {\n const opsFromLogTail = this.logtailSha ? await readAndParse<ISequencedDocumentMessage[]>\n (this.documentStorageService, this.logtailSha) : [];\n\n this.logtailSha = undefined;\n if (opsFromLogTail.length > 0) {\n const messages = opsFromLogTail.filter((op) =>\n op.sequenceNumber >= from,\n );\n if (messages.length > 0) {\n return { messages, partialResult: true };\n }\n }\n\n return this.storageService.get(this.tenantId, this.id, from, to);\n }\n}\n\n/**\n * Provides access to the underlying delta storage on the server for routerlicious driver.\n */\nexport class DeltaStorageService implements IDeltaStorageService {\n constructor(\n private readonly url: string,\n private readonly restWrapper: RestWrapper,\n private readonly logger: ITelemetryLogger) {\n }\n\n public async get(\n tenantId: string,\n id: string,\n from: number, // inclusive\n to: number, // exclusive\n ): Promise<IDeltasFetchResult>\n {\n const ops = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getDeltas\",\n from,\n to,\n },\n async (event) => {\n const response = await this.restWrapper.get<ISequencedDocumentMessage[]>(\n this.url,\n { from: from - 1, to });\n event.end({\n count: response.length,\n });\n return response;\n },\n );\n\n // It is assumed that server always returns all the ops that it has in the range that was requested.\n // This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n return { messages: ops, partialResult: false };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;aAEpC,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7C,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAVlB,WAAW,EAAE,GAAG,CAAC,YAAY,EACnC,UAAU,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IAI7D,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAuCrE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAiB/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;CA+B5F"}
1
+ {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;aAEpC,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7C,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAVlB,WAAW,EAAE,GAAG,CAAC,YAAY,EACnC,UAAU,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IAI7D,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IA2CrE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAkB/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;CA+B5F"}
@@ -62,6 +62,9 @@ class DocumentService {
62
62
  * @returns returns the document storage service for routerlicious driver.
63
63
  */
64
64
  async connectToStorage() {
65
+ if (this.documentStorageService !== undefined) {
66
+ return this.documentStorageService;
67
+ }
65
68
  if (this.gitUrl === undefined) {
66
69
  return new nullBlobStorageService_1.NullBlobStorageService();
67
70
  }
@@ -84,6 +87,7 @@ class DocumentService {
84
87
  * @returns returns the document delta storage service for routerlicious driver.
85
88
  */
86
89
  async connectToDeltaStorage() {
90
+ await this.connectToStorage();
87
91
  common_utils_1.assert(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
88
92
  const rateLimiter = new driver_utils_1.RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
89
93
  const ordererRestWrapper = await restWrapper_1.RouterliciousOrdererRestWrapper.load(this.tenantId, this.documentId, this.tokenProvider, this.logger, rateLimiter, this.driverPolicies.enableRestLess);
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient, ISnapshotTree} from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients\n */\nexport class DocumentService implements api.IDocumentService {\n constructor(\n public readonly resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private readonly deltaStorageUrl: string,\n private readonly gitUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTree>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() {}\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.gitUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.gitUrl,\n );\n const historian = new Historian(\n this.gitUrl,\n true,\n false,\n storageRestWrapper);\n const gitManager = new GitManager(historian);\n const documentStorageServicePolicies: api.IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? api.LoaderCachingPolicy.Prefetch\n : api.LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n };\n\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n gitManager,\n this.logger,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n const deltaStorage = new DeltaStorageService(this.deltaStorageUrl, ordererRestWrapper, this.logger);\n return new DocumentDeltaStorageService(this.tenantId, this.documentId,\n deltaStorage, this.documentStorageService);\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async () => {\n const ordererToken = await this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n );\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.ordererUrl,\n this.logger,\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect();\n }\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient, ISnapshotTree} from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients\n */\nexport class DocumentService implements api.IDocumentService {\n constructor(\n public readonly resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private readonly deltaStorageUrl: string,\n private readonly gitUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTree>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() {}\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.documentStorageService !== undefined) {\n return this.documentStorageService;\n }\n\n if (this.gitUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.gitUrl,\n );\n const historian = new Historian(\n this.gitUrl,\n true,\n false,\n storageRestWrapper);\n const gitManager = new GitManager(historian);\n const documentStorageServicePolicies: api.IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? api.LoaderCachingPolicy.Prefetch\n : api.LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n };\n\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n gitManager,\n this.logger,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n await this.connectToStorage();\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n const deltaStorage = new DeltaStorageService(this.deltaStorageUrl, ordererRestWrapper, this.logger);\n return new DocumentDeltaStorageService(this.tenantId, this.documentId,\n deltaStorage, this.documentStorageService);\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async () => {\n const ordererToken = await this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n );\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.ordererUrl,\n this.logger,\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect();\n }\n throw error;\n }\n }\n}\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/routerlicious-driver";
8
- export declare const pkgVersion = "0.52.0";
8
+ export declare const pkgVersion = "0.54.0-47413";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yCAAyC,CAAC;AAC9D,eAAO,MAAM,UAAU,WAAW,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yCAAyC,CAAC;AAC9D,eAAO,MAAM,UAAU,iBAAiB,CAAC"}
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/routerlicious-driver";
11
- exports.pkgVersion = "0.52.0";
11
+ exports.pkgVersion = "0.54.0-47413";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sCAAsC,CAAC;AACjD,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/routerlicious-driver\";\nexport const pkgVersion = \"0.52.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,sCAAsC,CAAC;AACjD,QAAA,UAAU,GAAG,cAAc,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/routerlicious-driver\";\nexport const pkgVersion = \"0.54.0-47413\";\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,EACjC,MAAM,oCAAoC,CAAC;AAC7C,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,EACL,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAIhD,qBAAa,kCAAmC,YAAW,uBAAuB;IAS1E,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAbtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAC7D,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;gBAGsB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,GAAE,+BAAoC,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,aAAa,CAAuB;IAItE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoCzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,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;IAW1F,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItF,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,yBAAyB;YAqDzB,aAAa;CAO9B"}
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,EACjC,MAAM,oCAAoC,CAAC;AAC7C,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,EACL,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAIhD,qBAAa,kCAAmC,YAAW,uBAAuB;IAS1E,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAbtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAC7D,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;gBAGsB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,GAAE,+BAAoC,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,aAAa,CAAuB;IAItE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoCzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,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;IAW1F,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItF,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,yBAAyB;YA+CzB,aAAa;CAO9B"}
@@ -139,10 +139,7 @@ class WholeSummaryDocumentStorageService {
139
139
  // cache with versionId?
140
140
  cachePs.push(this.snapshotTreeCache.put(versionId, normalizedWholeSummary.snapshotTree));
141
141
  }
142
- await Promise.all([
143
- this.snapshotTreeCache.put(snapshotId, normalizedWholeSummary.snapshotTree),
144
- this.initBlobCache(normalizedWholeSummary.blobs),
145
- ]);
142
+ await Promise.all(cachePs);
146
143
  return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree };
147
144
  }
148
145
  async initBlobCache(blobs) {
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 assert,\n stringToBuffer,\n Uint8ArrayToString,\n} from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n ISummaryContext,\n IDocumentStorageServicePolicies,\n } from \"@fluidframework/driver-definitions\";\nimport {\n ICreateBlobResponse,\n ISnapshotTree,\n ISummaryHandle,\n ISummaryTree,\n ITree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n convertWholeFlatSummaryToSnapshotTreeAndBlobs,\n GitManager,\n ISummaryUploadManager,\n WholeSummaryUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ICache, InMemoryCache } from \"./cache\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n private readonly summaryUploadManager: ISummaryUploadManager;\n private firstVersionsCall: boolean = true;\n\n public get repositoryUrl(): string {\n return \"\";\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 private readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n private readonly snapshotTreeCache: ICache<ISnapshotTree> = new InMemoryCache()) {\n this.summaryUploadManager = new WholeSummaryUploadManager(manager);\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n if (versionId !== this.id && versionId !== null) {\n // Blobs in this scenario will never have multiple versions, so return blobId as is\n return [{\n id: versionId,\n treeId: undefined!,\n }];\n }\n // If this is the first versions call for the document, we know we will want the latest summary.\n // Fetch latest summary, cache it, and return its id.\n if (this.firstVersionsCall && count === 1) {\n this.firstVersionsCall = false;\n return [{\n id: (await this.fetchAndCacheSnapshotTree(latestSnapshotId)).id,\n treeId: undefined!,\n }];\n }\n\n // Otherwise, get the latest version of the document as normal.\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 () => this.manager.getCommits(id, count),\n );\n return commits.map((commit) => ({\n date: commit.commit.author.date,\n id: commit.sha,\n treeId: undefined!,\n }));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | 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 return (await this.fetchAndCacheSnapshotTree(requestVersion.id)).snapshotTree;\n }\n\n public async readBlob(blobId: string): Promise<ArrayBufferLike> {\n const cachedBlob = await this.blobCache.get(blobId);\n if (cachedBlob !== undefined) {\n return cachedBlob;\n }\n\n const blob = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"readBlob\",\n blobId,\n },\n async (event) => {\n const response = await this.manager.getBlob(blobId);\n event.end({\n size: response.size,\n });\n return response;\n },\n );\n const bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n await this.blobCache.put(blob.sha, bufferValue);\n\n return bufferValue;\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 },\n async () => this.summaryUploadManager.writeSummaryTree(summary, context.ackHandle ?? \"\", \"channel\"),\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 write(tree: ITree, parents: string[], message: string, ref: string): Promise<IVersion> {\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 response = await this.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 fetchAndCacheSnapshotTree(versionId: string): Promise<{ id: string, snapshotTree: ISnapshotTree }> {\n const cachedSnapshotTree = await this.snapshotTreeCache.get(versionId);\n if (cachedSnapshotTree !== undefined) {\n return { id: cachedSnapshotTree.id!, snapshotTree: cachedSnapshotTree };\n }\n\n const wholeFlatSummary = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getWholeFlatSummary\",\n treeId: versionId,\n },\n async (event) => {\n const response = await this.manager.getSummary(versionId);\n event.end({\n size: response.trees[0]?.entries.length,\n });\n return response;\n },\n );\n const normalizedWholeSummary = convertWholeFlatSummaryToSnapshotTreeAndBlobs(wholeFlatSummary);\n const snapshotId = normalizedWholeSummary.snapshotTree.id;\n assert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\n const cachePs: Promise<any>[] = [\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ];\n if (snapshotId !== versionId) {\n // versionId could be \"latest\". When summarizer checks cache for \"latest\", we want it to be available.\n // TODO: For in-memory cache, <latest,snapshotTree> will be a shared pointer with <snapshotId,snapshotTree>,\n // However, for something like Redis, this will cache the same value twice. Alternatively, could we simply\n // cache with versionId?\n cachePs.push(this.snapshotTreeCache.put(\n versionId,\n normalizedWholeSummary.snapshotTree,\n ));\n }\n\n await Promise.all([\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ]);\n\n return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree};\n }\n\n private async initBlobCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n const blobCachePutPs: Promise<void>[] = [];\n blobs.forEach((value, id) => {\n blobCachePutPs.push(this.blobCache.put(id, value));\n });\n await Promise.all(blobCachePutPs);\n }\n}\n"]}
1
+ {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 assert,\n stringToBuffer,\n Uint8ArrayToString,\n} from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n ISummaryContext,\n IDocumentStorageServicePolicies,\n } from \"@fluidframework/driver-definitions\";\nimport {\n ICreateBlobResponse,\n ISnapshotTree,\n ISummaryHandle,\n ISummaryTree,\n ITree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n convertWholeFlatSummaryToSnapshotTreeAndBlobs,\n GitManager,\n ISummaryUploadManager,\n WholeSummaryUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ICache, InMemoryCache } from \"./cache\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n private readonly summaryUploadManager: ISummaryUploadManager;\n private firstVersionsCall: boolean = true;\n\n public get repositoryUrl(): string {\n return \"\";\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 private readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n private readonly snapshotTreeCache: ICache<ISnapshotTree> = new InMemoryCache()) {\n this.summaryUploadManager = new WholeSummaryUploadManager(manager);\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n if (versionId !== this.id && versionId !== null) {\n // Blobs in this scenario will never have multiple versions, so return blobId as is\n return [{\n id: versionId,\n treeId: undefined!,\n }];\n }\n // If this is the first versions call for the document, we know we will want the latest summary.\n // Fetch latest summary, cache it, and return its id.\n if (this.firstVersionsCall && count === 1) {\n this.firstVersionsCall = false;\n return [{\n id: (await this.fetchAndCacheSnapshotTree(latestSnapshotId)).id,\n treeId: undefined!,\n }];\n }\n\n // Otherwise, get the latest version of the document as normal.\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 () => this.manager.getCommits(id, count),\n );\n return commits.map((commit) => ({\n date: commit.commit.author.date,\n id: commit.sha,\n treeId: undefined!,\n }));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | 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 return (await this.fetchAndCacheSnapshotTree(requestVersion.id)).snapshotTree;\n }\n\n public async readBlob(blobId: string): Promise<ArrayBufferLike> {\n const cachedBlob = await this.blobCache.get(blobId);\n if (cachedBlob !== undefined) {\n return cachedBlob;\n }\n\n const blob = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"readBlob\",\n blobId,\n },\n async (event) => {\n const response = await this.manager.getBlob(blobId);\n event.end({\n size: response.size,\n });\n return response;\n },\n );\n const bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n await this.blobCache.put(blob.sha, bufferValue);\n\n return bufferValue;\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 },\n async () => this.summaryUploadManager.writeSummaryTree(summary, context.ackHandle ?? \"\", \"channel\"),\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 write(tree: ITree, parents: string[], message: string, ref: string): Promise<IVersion> {\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 response = await this.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 fetchAndCacheSnapshotTree(versionId: string): Promise<{ id: string, snapshotTree: ISnapshotTree }> {\n const cachedSnapshotTree = await this.snapshotTreeCache.get(versionId);\n if (cachedSnapshotTree !== undefined) {\n return { id: cachedSnapshotTree.id!, snapshotTree: cachedSnapshotTree };\n }\n\n const wholeFlatSummary = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getWholeFlatSummary\",\n treeId: versionId,\n },\n async (event) => {\n const response = await this.manager.getSummary(versionId);\n event.end({\n size: response.trees[0]?.entries.length,\n });\n return response;\n },\n );\n const normalizedWholeSummary = convertWholeFlatSummaryToSnapshotTreeAndBlobs(wholeFlatSummary);\n const snapshotId = normalizedWholeSummary.snapshotTree.id;\n assert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\n const cachePs: Promise<any>[] = [\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ];\n if (snapshotId !== versionId) {\n // versionId could be \"latest\". When summarizer checks cache for \"latest\", we want it to be available.\n // TODO: For in-memory cache, <latest,snapshotTree> will be a shared pointer with <snapshotId,snapshotTree>,\n // However, for something like Redis, this will cache the same value twice. Alternatively, could we simply\n // cache with versionId?\n cachePs.push(this.snapshotTreeCache.put(\n versionId,\n normalizedWholeSummary.snapshotTree,\n ));\n }\n\n await Promise.all(cachePs);\n\n return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree};\n }\n\n private async initBlobCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n const blobCachePutPs: Promise<void>[] = [];\n blobs.forEach((value, id) => {\n blobCachePutPs.push(this.blobCache.put(id, value));\n });\n await Promise.all(blobCachePutPs);\n }\n}\n"]}
@@ -17,7 +17,7 @@ export declare class DocumentDeltaStorageService implements IDocumentDeltaStorag
17
17
  private readonly documentStorageService;
18
18
  constructor(tenantId: string, id: string, storageService: IDeltaStorageService, documentStorageService: DocumentStorageService);
19
19
  private logtailSha;
20
- fetchMessages(from: number, to: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean): IStream<ISequencedDocumentMessage[]>;
20
+ fetchMessages(from: number, to: number | undefined, abortSignal?: AbortSignal, cachedOnly?: boolean, fetchReason?: string): IStream<ISequencedDocumentMessage[]>;
21
21
  private getCore;
22
22
  }
23
23
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAExE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAHtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,oBAAoB,EACpC,sBAAsB,EAAE,sBAAsB;IAGnE,OAAO,CAAC,UAAU,CAA8D;IAEhF,aAAa,CAAC,IAAI,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,GACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC;YAkBzB,OAAO;CAgBxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB;IAGhC,GAAG,CACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACP,OAAO,CAAC,kBAAkB,CAAC;CAwBrC"}
1
+ {"version":3,"file":"deltaStorageService.d.ts","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACH,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,OAAO,EACV,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,sCAAsC,CAAC;AAGjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;GAEG;AACH,qBAAa,2BAA4B,YAAW,4BAA4B;IAExE,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,sBAAsB;gBAHtB,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,cAAc,EAAE,oBAAoB,EACpC,sBAAsB,EAAE,sBAAsB;IAGnE,OAAO,CAAC,UAAU,CAA8D;IAEhF,aAAa,CAAC,IAAI,EAAE,MAAM,EACtB,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,WAAW,CAAC,EAAE,WAAW,EACzB,UAAU,CAAC,EAAE,OAAO,EACpB,WAAW,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,yBAAyB,EAAE,CAAC;YAmBzB,OAAO;CAgBxB;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,oBAAoB;IAExD,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,gBAAgB;IAGhC,GAAG,CACZ,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EAAE,YAAY;IAC1B,EAAE,EAAE,MAAM,GACP,OAAO,CAAC,kBAAkB,CAAC;CAwBrC"}
@@ -17,7 +17,7 @@ export class DocumentDeltaStorageService {
17
17
  this.documentStorageService = documentStorageService;
18
18
  this.logtailSha = this.documentStorageService.logTailSha;
19
19
  }
20
- fetchMessages(from, to, abortSignal, cachedOnly) {
20
+ fetchMessages(from, to, abortSignal, cachedOnly, fetchReason) {
21
21
  if (cachedOnly) {
22
22
  return emptyMessageStream;
23
23
  }
@@ -27,7 +27,7 @@ export class DocumentDeltaStorageService {
27
27
  1, // concurrency
28
28
  from, // inclusive
29
29
  to, // exclusive
30
- MaxBatchDeltas, new TelemetryNullLogger(), abortSignal);
30
+ MaxBatchDeltas, new TelemetryNullLogger(), abortSignal, fetchReason);
31
31
  }
32
32
  async getCore(from, to) {
33
33
  const opsFromLogTail = this.logtailSha ? await readAndParse(this.documentStorageService, this.logtailSha) : [];
@@ -1 +1 @@
1
- {"version":3,"file":"deltaStorageService.js","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IDeltaStorageService,\n IDocumentDeltaStorageService,\n IDeltasFetchResult,\n IStream,\n} from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { readAndParse, requestOps, emptyMessageStream } from \"@fluidframework/driver-utils\";\nimport { TelemetryNullLogger } from \"@fluidframework/common-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { RestWrapper } from \"@fluidframework/server-services-client\";\nimport { DocumentStorageService } from \"./documentStorageService\";\n\nconst MaxBatchDeltas = 2000; // Maximum number of ops we can fetch at a time\n\n/**\n * Storage service limited to only being able to fetch documents for a specific document\n */\nexport class DocumentDeltaStorageService implements IDocumentDeltaStorageService {\n constructor(\n private readonly tenantId: string,\n private readonly id: string,\n private readonly storageService: IDeltaStorageService,\n private readonly documentStorageService: DocumentStorageService) {\n }\n\n private logtailSha: string | undefined = this.documentStorageService.logTailSha;\n\n fetchMessages(from: number,\n to: number | undefined,\n abortSignal?: AbortSignal,\n cachedOnly?: boolean,\n ): IStream<ISequencedDocumentMessage[]>\n {\n if (cachedOnly) {\n return emptyMessageStream;\n }\n return requestOps(\n this.getCore.bind(this),\n // Staging: starting with no concurrency, listening for feedback first.\n // In future releases we will switch to actual concurrency\n 1, // concurrency\n from, // inclusive\n to, // exclusive\n MaxBatchDeltas,\n new TelemetryNullLogger(),\n abortSignal,\n );\n }\n\n private async getCore(from: number, to: number): Promise<IDeltasFetchResult> {\n const opsFromLogTail = this.logtailSha ? await readAndParse<ISequencedDocumentMessage[]>\n (this.documentStorageService, this.logtailSha) : [];\n\n this.logtailSha = undefined;\n if (opsFromLogTail.length > 0) {\n const messages = opsFromLogTail.filter((op) =>\n op.sequenceNumber >= from,\n );\n if (messages.length > 0) {\n return { messages, partialResult: true };\n }\n }\n\n return this.storageService.get(this.tenantId, this.id, from, to);\n }\n}\n\n/**\n * Provides access to the underlying delta storage on the server for routerlicious driver.\n */\nexport class DeltaStorageService implements IDeltaStorageService {\n constructor(\n private readonly url: string,\n private readonly restWrapper: RestWrapper,\n private readonly logger: ITelemetryLogger) {\n }\n\n public async get(\n tenantId: string,\n id: string,\n from: number, // inclusive\n to: number, // exclusive\n ): Promise<IDeltasFetchResult>\n {\n const ops = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getDeltas\",\n from,\n to,\n },\n async (event) => {\n const response = await this.restWrapper.get<ISequencedDocumentMessage[]>(\n this.url,\n { from: from - 1, to });\n event.end({\n count: response.length,\n });\n return response;\n },\n );\n\n // It is assumed that server always returns all the ops that it has in the range that was requested.\n // This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n return { messages: ops, partialResult: false };\n }\n}\n"]}
1
+ {"version":3,"file":"deltaStorageService.js","sourceRoot":"","sources":["../src/deltaStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAInE,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,+CAA+C;AAE5E;;GAEG;AACH,MAAM,OAAO,2BAA2B;IACpC,YACqB,QAAgB,EAChB,EAAU,EACV,cAAoC,EACpC,sBAA8C;QAH9C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,OAAE,GAAF,EAAE,CAAQ;QACV,mBAAc,GAAd,cAAc,CAAsB;QACpC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAG3D,eAAU,GAAuB,IAAI,CAAC,sBAAsB,CAAC,UAAU,CAAC;IAFhF,CAAC;IAID,aAAa,CAAC,IAAY,EACtB,EAAsB,EACtB,WAAyB,EACzB,UAAoB,EACpB,WAAoB;QAGpB,IAAI,UAAU,EAAE;YACZ,OAAO,kBAAkB,CAAC;SAC7B;QACD,OAAO,UAAU,CACb,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QACvB,uEAAuE;QACvE,0DAA0D;QAC1D,CAAC,EAAE,cAAc;QACjB,IAAI,EAAE,YAAY;QAClB,EAAE,EAAE,YAAY;QAChB,cAAc,EACd,IAAI,mBAAmB,EAAE,EACzB,WAAW,EACX,WAAW,CACd,CAAC;IACN,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,EAAU;QAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,YAAY,CACtD,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAExD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAC1C,EAAE,CAAC,cAAc,IAAI,IAAI,CAC5B,CAAC;YACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBACrB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;aAC5C;SACJ;QAED,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACrE,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,mBAAmB;IAC5B,YACqB,GAAW,EACX,WAAwB,EACxB,MAAwB;QAFxB,QAAG,GAAH,GAAG,CAAQ;QACX,gBAAW,GAAX,WAAW,CAAa;QACxB,WAAM,GAAN,MAAM,CAAkB;IAC7C,CAAC;IAEM,KAAK,CAAC,GAAG,CACZ,QAAgB,EAChB,EAAU,EACV,IAAY,EAAE,YAAY;IAC1B,EAAU;QAGV,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAC7C,IAAI,CAAC,MAAM,EACX;YACI,SAAS,EAAE,WAAW;YACtB,IAAI;YACJ,EAAE;SACL,EACD,KAAK,EAAE,KAAK,EAAE,EAAE;YACZ,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CACvC,IAAI,CAAC,GAAG,EACR,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAC5B,KAAK,CAAC,GAAG,CAAC;gBACN,KAAK,EAAE,QAAQ,CAAC,MAAM;aACzB,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QACpB,CAAC,CACJ,CAAC;QAEF,oGAAoG;QACpG,4GAA4G;QAC5G,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACnD,CAAC;CACJ","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport {\n IDeltaStorageService,\n IDocumentDeltaStorageService,\n IDeltasFetchResult,\n IStream,\n} from \"@fluidframework/driver-definitions\";\nimport { ISequencedDocumentMessage } from \"@fluidframework/protocol-definitions\";\nimport { readAndParse, requestOps, emptyMessageStream } from \"@fluidframework/driver-utils\";\nimport { TelemetryNullLogger } from \"@fluidframework/common-utils\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { RestWrapper } from \"@fluidframework/server-services-client\";\nimport { DocumentStorageService } from \"./documentStorageService\";\n\nconst MaxBatchDeltas = 2000; // Maximum number of ops we can fetch at a time\n\n/**\n * Storage service limited to only being able to fetch documents for a specific document\n */\nexport class DocumentDeltaStorageService implements IDocumentDeltaStorageService {\n constructor(\n private readonly tenantId: string,\n private readonly id: string,\n private readonly storageService: IDeltaStorageService,\n private readonly documentStorageService: DocumentStorageService) {\n }\n\n private logtailSha: string | undefined = this.documentStorageService.logTailSha;\n\n fetchMessages(from: number,\n to: number | undefined,\n abortSignal?: AbortSignal,\n cachedOnly?: boolean,\n fetchReason?: string,\n ): IStream<ISequencedDocumentMessage[]>\n {\n if (cachedOnly) {\n return emptyMessageStream;\n }\n return requestOps(\n this.getCore.bind(this),\n // Staging: starting with no concurrency, listening for feedback first.\n // In future releases we will switch to actual concurrency\n 1, // concurrency\n from, // inclusive\n to, // exclusive\n MaxBatchDeltas,\n new TelemetryNullLogger(),\n abortSignal,\n fetchReason,\n );\n }\n\n private async getCore(from: number, to: number): Promise<IDeltasFetchResult> {\n const opsFromLogTail = this.logtailSha ? await readAndParse<ISequencedDocumentMessage[]>\n (this.documentStorageService, this.logtailSha) : [];\n\n this.logtailSha = undefined;\n if (opsFromLogTail.length > 0) {\n const messages = opsFromLogTail.filter((op) =>\n op.sequenceNumber >= from,\n );\n if (messages.length > 0) {\n return { messages, partialResult: true };\n }\n }\n\n return this.storageService.get(this.tenantId, this.id, from, to);\n }\n}\n\n/**\n * Provides access to the underlying delta storage on the server for routerlicious driver.\n */\nexport class DeltaStorageService implements IDeltaStorageService {\n constructor(\n private readonly url: string,\n private readonly restWrapper: RestWrapper,\n private readonly logger: ITelemetryLogger) {\n }\n\n public async get(\n tenantId: string,\n id: string,\n from: number, // inclusive\n to: number, // exclusive\n ): Promise<IDeltasFetchResult>\n {\n const ops = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getDeltas\",\n from,\n to,\n },\n async (event) => {\n const response = await this.restWrapper.get<ISequencedDocumentMessage[]>(\n this.url,\n { from: from - 1, to });\n event.end({\n count: response.length,\n });\n return response;\n },\n );\n\n // It is assumed that server always returns all the ops that it has in the range that was requested.\n // This may change in the future, if so, we need to adjust and receive \"end\" value from server in such case.\n return { messages: ops, partialResult: false };\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;aAEpC,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7C,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAVlB,WAAW,EAAE,GAAG,CAAC,YAAY,EACnC,UAAU,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IAI7D,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IAuCrE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAiB/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;CA+B5F"}
1
+ {"version":3,"file":"documentService.d.ts","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,GAAG,MAAM,oCAAoC,CAAC;AAE1D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAC,MAAM,sCAAsC,CAAC;AAG7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAKtE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC;;;GAGG;AACH,qBAAa,eAAgB,YAAW,GAAG,CAAC,gBAAgB;aAEpC,WAAW,EAAE,GAAG,CAAC,YAAY;IAC7C,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,SAAS,CAAC,aAAa,EAAE,cAAc;IACvC,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,UAAU,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAVlB,WAAW,EAAE,GAAG,CAAC,YAAY,EACnC,UAAU,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,gBAAgB,EAC/B,aAAa,EAAE,cAAc,EAC7B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EACX,cAAc,EAAE,4BAA4B,EAC5C,SAAS,EAAE,MAAM,CAAC,eAAe,CAAC,EAClC,iBAAiB,EAAE,MAAM,CAAC,aAAa,CAAC;IAI7D,OAAO,CAAC,sBAAsB,CAAqC;IAE5D,OAAO;IAEd;;;;OAIG;IACU,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IA2CrE;;;;OAIG;IACU,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;IAkB/E;;;;OAIG;IACU,oBAAoB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC;CA+B5F"}
@@ -37,6 +37,9 @@ export class DocumentService {
37
37
  * @returns returns the document storage service for routerlicious driver.
38
38
  */
39
39
  async connectToStorage() {
40
+ if (this.documentStorageService !== undefined) {
41
+ return this.documentStorageService;
42
+ }
40
43
  if (this.gitUrl === undefined) {
41
44
  return new NullBlobStorageService();
42
45
  }
@@ -59,6 +62,7 @@ export class DocumentService {
59
62
  * @returns returns the document delta storage service for routerlicious driver.
60
63
  */
61
64
  async connectToDeltaStorage() {
65
+ await this.connectToStorage();
62
66
  assert(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
63
67
  const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
64
68
  const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(this.tenantId, this.documentId, this.tokenProvider, this.logger, rateLimiter, this.driverPolicies.enableRestLess);
@@ -1 +1 @@
1
- {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient, ISnapshotTree} from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients\n */\nexport class DocumentService implements api.IDocumentService {\n constructor(\n public readonly resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private readonly deltaStorageUrl: string,\n private readonly gitUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTree>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() {}\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.gitUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.gitUrl,\n );\n const historian = new Historian(\n this.gitUrl,\n true,\n false,\n storageRestWrapper);\n const gitManager = new GitManager(historian);\n const documentStorageServicePolicies: api.IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? api.LoaderCachingPolicy.Prefetch\n : api.LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n };\n\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n gitManager,\n this.logger,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n const deltaStorage = new DeltaStorageService(this.deltaStorageUrl, ordererRestWrapper, this.logger);\n return new DocumentDeltaStorageService(this.tenantId, this.documentId,\n deltaStorage, this.documentStorageService);\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async () => {\n const ordererToken = await this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n );\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.ordererUrl,\n this.logger,\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect();\n }\n throw error;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"documentService.js","sourceRoot":"","sources":["../src/documentService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert } from \"@fluidframework/common-utils\";\nimport * as api from \"@fluidframework/driver-definitions\";\nimport { RateLimiter } from \"@fluidframework/driver-utils\";\nimport { IClient, ISnapshotTree} from \"@fluidframework/protocol-definitions\";\nimport { GitManager, Historian } from \"@fluidframework/server-services-client\";\nimport io from \"socket.io-client\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { DeltaStorageService, DocumentDeltaStorageService } from \"./deltaStorageService\";\nimport { DocumentStorageService } from \"./documentStorageService\";\nimport { R11sDocumentDeltaConnection } from \"./documentDeltaConnection\";\nimport { NullBlobStorageService } from \"./nullBlobStorageService\";\nimport { ITokenProvider } from \"./tokens\";\nimport { RouterliciousOrdererRestWrapper, RouterliciousStorageRestWrapper } from \"./restWrapper\";\nimport { IRouterliciousDriverPolicies } from \"./policies\";\nimport { ICache } from \"./cache\";\n\n/**\n * The DocumentService manages the Socket.IO connection and manages routing requests to connected\n * clients\n */\nexport class DocumentService implements api.IDocumentService {\n constructor(\n public readonly resolvedUrl: api.IResolvedUrl,\n protected ordererUrl: string,\n private readonly deltaStorageUrl: string,\n private readonly gitUrl: string,\n private readonly logger: ITelemetryLogger,\n protected tokenProvider: ITokenProvider,\n protected tenantId: string,\n protected documentId: string,\n private readonly driverPolicies: IRouterliciousDriverPolicies,\n private readonly blobCache: ICache<ArrayBufferLike>,\n private readonly snapshotTreeCache: ICache<ISnapshotTree>,\n ) {\n }\n\n private documentStorageService: DocumentStorageService | undefined;\n\n public dispose() {}\n\n /**\n * Connects to a storage endpoint for snapshot service.\n *\n * @returns returns the document storage service for routerlicious driver.\n */\n public async connectToStorage(): Promise<api.IDocumentStorageService> {\n if (this.documentStorageService !== undefined) {\n return this.documentStorageService;\n }\n\n if (this.gitUrl === undefined) {\n return new NullBlobStorageService();\n }\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentStorageRequests);\n const storageRestWrapper = await RouterliciousStorageRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n this.gitUrl,\n );\n const historian = new Historian(\n this.gitUrl,\n true,\n false,\n storageRestWrapper);\n const gitManager = new GitManager(historian);\n const documentStorageServicePolicies: api.IDocumentStorageServicePolicies = {\n caching: this.driverPolicies.enablePrefetch\n ? api.LoaderCachingPolicy.Prefetch\n : api.LoaderCachingPolicy.NoCaching,\n minBlobSize: this.driverPolicies.aggregateBlobsSmallerThanBytes,\n };\n\n this.documentStorageService = new DocumentStorageService(\n this.documentId,\n gitManager,\n this.logger,\n documentStorageServicePolicies,\n this.driverPolicies,\n this.blobCache,\n this.snapshotTreeCache);\n return this.documentStorageService;\n }\n\n /**\n * Connects to a delta storage endpoint for getting ops between a range.\n *\n * @returns returns the document delta storage service for routerlicious driver.\n */\n public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {\n await this.connectToStorage();\n assert(!!this.documentStorageService, 0x0b1 /* \"Storage service not initialized\" */);\n\n const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);\n const ordererRestWrapper = await RouterliciousOrdererRestWrapper.load(\n this.tenantId,\n this.documentId,\n this.tokenProvider,\n this.logger,\n rateLimiter,\n this.driverPolicies.enableRestLess,\n );\n const deltaStorage = new DeltaStorageService(this.deltaStorageUrl, ordererRestWrapper, this.logger);\n return new DocumentDeltaStorageService(this.tenantId, this.documentId,\n deltaStorage, this.documentStorageService);\n }\n\n /**\n * Connects to a delta stream endpoint for emitting ops.\n *\n * @returns returns the document delta stream service for routerlicious driver.\n */\n public async connectToDeltaStream(client: IClient): Promise<api.IDocumentDeltaConnection> {\n const connect = async () => {\n const ordererToken = await this.tokenProvider.fetchOrdererToken(\n this.tenantId,\n this.documentId,\n );\n return R11sDocumentDeltaConnection.create(\n this.tenantId,\n this.documentId,\n ordererToken.jwt,\n io,\n client,\n this.ordererUrl,\n this.logger,\n );\n };\n\n // Attempt to establish connection.\n // Retry with new token on authorization error; otherwise, allow container layer to handle.\n try {\n const connection = await connect();\n return connection;\n } catch (error) {\n if (error?.statusCode === 401) {\n // Fetch new token and retry once,\n // otherwise 401 will be bubbled up as non-retriable AuthorizationError.\n return connect();\n }\n throw error;\n }\n }\n}\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/routerlicious-driver";
8
- export declare const pkgVersion = "0.52.0";
8
+ export declare const pkgVersion = "0.54.0-47413";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yCAAyC,CAAC;AAC9D,eAAO,MAAM,UAAU,WAAW,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,yCAAyC,CAAC;AAC9D,eAAO,MAAM,UAAU,iBAAiB,CAAC"}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export const pkgName = "@fluidframework/routerlicious-driver";
8
- export const pkgVersion = "0.52.0";
8
+ export const pkgVersion = "0.54.0-47413";
9
9
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/routerlicious-driver\";\nexport const pkgVersion = \"0.52.0\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,sCAAsC,CAAC;AAC9D,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/routerlicious-driver\";\nexport const pkgVersion = \"0.54.0-47413\";\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,EACjC,MAAM,oCAAoC,CAAC;AAC7C,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,EACL,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAIhD,qBAAa,kCAAmC,YAAW,uBAAuB;IAS1E,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAbtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAC7D,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;gBAGsB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,GAAE,+BAAoC,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,aAAa,CAAuB;IAItE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoCzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,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;IAW1F,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItF,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,yBAAyB;YAqDzB,aAAa;CAO9B"}
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,EACjC,MAAM,oCAAoC,CAAC;AAC7C,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,YAAY,EACZ,KAAK,EACL,QAAQ,EACX,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAEH,UAAU,EAGb,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAiB,MAAM,SAAS,CAAC;AAIhD,qBAAa,kCAAmC,YAAW,uBAAuB;IAS1E,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,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAbtC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAC7D,OAAO,CAAC,iBAAiB,CAAiB;IAE1C,IAAW,aAAa,IAAI,MAAM,CAEjC;gBAGsB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,gBAAgB,EAC3B,QAAQ,GAAE,+BAAoC,EAC7C,SAAS,GAAE,MAAM,CAAC,eAAe,CAAuB,EACxD,iBAAiB,GAAE,MAAM,CAAC,aAAa,CAAuB;IAItE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoCzE,eAAe,CAAC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAclE,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;IAW1F,eAAe,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,YAAY,CAAC;IAI9D,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItF,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,mBAAmB,CAAC;YAqB9D,yBAAyB;YA+CzB,aAAa;CAO9B"}
@@ -136,10 +136,7 @@ export class WholeSummaryDocumentStorageService {
136
136
  // cache with versionId?
137
137
  cachePs.push(this.snapshotTreeCache.put(versionId, normalizedWholeSummary.snapshotTree));
138
138
  }
139
- await Promise.all([
140
- this.snapshotTreeCache.put(snapshotId, normalizedWholeSummary.snapshotTree),
141
- this.initBlobCache(normalizedWholeSummary.blobs),
142
- ]);
139
+ await Promise.all(cachePs);
143
140
  return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree };
144
141
  }
145
142
  async initBlobCache(blobs) {
@@ -1 +1 @@
1
- {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 assert,\n stringToBuffer,\n Uint8ArrayToString,\n} from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n ISummaryContext,\n IDocumentStorageServicePolicies,\n } from \"@fluidframework/driver-definitions\";\nimport {\n ICreateBlobResponse,\n ISnapshotTree,\n ISummaryHandle,\n ISummaryTree,\n ITree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n convertWholeFlatSummaryToSnapshotTreeAndBlobs,\n GitManager,\n ISummaryUploadManager,\n WholeSummaryUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ICache, InMemoryCache } from \"./cache\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n private readonly summaryUploadManager: ISummaryUploadManager;\n private firstVersionsCall: boolean = true;\n\n public get repositoryUrl(): string {\n return \"\";\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 private readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n private readonly snapshotTreeCache: ICache<ISnapshotTree> = new InMemoryCache()) {\n this.summaryUploadManager = new WholeSummaryUploadManager(manager);\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n if (versionId !== this.id && versionId !== null) {\n // Blobs in this scenario will never have multiple versions, so return blobId as is\n return [{\n id: versionId,\n treeId: undefined!,\n }];\n }\n // If this is the first versions call for the document, we know we will want the latest summary.\n // Fetch latest summary, cache it, and return its id.\n if (this.firstVersionsCall && count === 1) {\n this.firstVersionsCall = false;\n return [{\n id: (await this.fetchAndCacheSnapshotTree(latestSnapshotId)).id,\n treeId: undefined!,\n }];\n }\n\n // Otherwise, get the latest version of the document as normal.\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 () => this.manager.getCommits(id, count),\n );\n return commits.map((commit) => ({\n date: commit.commit.author.date,\n id: commit.sha,\n treeId: undefined!,\n }));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | 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 return (await this.fetchAndCacheSnapshotTree(requestVersion.id)).snapshotTree;\n }\n\n public async readBlob(blobId: string): Promise<ArrayBufferLike> {\n const cachedBlob = await this.blobCache.get(blobId);\n if (cachedBlob !== undefined) {\n return cachedBlob;\n }\n\n const blob = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"readBlob\",\n blobId,\n },\n async (event) => {\n const response = await this.manager.getBlob(blobId);\n event.end({\n size: response.size,\n });\n return response;\n },\n );\n const bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n await this.blobCache.put(blob.sha, bufferValue);\n\n return bufferValue;\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 },\n async () => this.summaryUploadManager.writeSummaryTree(summary, context.ackHandle ?? \"\", \"channel\"),\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 write(tree: ITree, parents: string[], message: string, ref: string): Promise<IVersion> {\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 response = await this.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 fetchAndCacheSnapshotTree(versionId: string): Promise<{ id: string, snapshotTree: ISnapshotTree }> {\n const cachedSnapshotTree = await this.snapshotTreeCache.get(versionId);\n if (cachedSnapshotTree !== undefined) {\n return { id: cachedSnapshotTree.id!, snapshotTree: cachedSnapshotTree };\n }\n\n const wholeFlatSummary = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getWholeFlatSummary\",\n treeId: versionId,\n },\n async (event) => {\n const response = await this.manager.getSummary(versionId);\n event.end({\n size: response.trees[0]?.entries.length,\n });\n return response;\n },\n );\n const normalizedWholeSummary = convertWholeFlatSummaryToSnapshotTreeAndBlobs(wholeFlatSummary);\n const snapshotId = normalizedWholeSummary.snapshotTree.id;\n assert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\n const cachePs: Promise<any>[] = [\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ];\n if (snapshotId !== versionId) {\n // versionId could be \"latest\". When summarizer checks cache for \"latest\", we want it to be available.\n // TODO: For in-memory cache, <latest,snapshotTree> will be a shared pointer with <snapshotId,snapshotTree>,\n // However, for something like Redis, this will cache the same value twice. Alternatively, could we simply\n // cache with versionId?\n cachePs.push(this.snapshotTreeCache.put(\n versionId,\n normalizedWholeSummary.snapshotTree,\n ));\n }\n\n await Promise.all([\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ]);\n\n return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree};\n }\n\n private async initBlobCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n const blobCachePutPs: Promise<void>[] = [];\n blobs.forEach((value, id) => {\n blobCachePutPs.push(this.blobCache.put(id, value));\n });\n await Promise.all(blobCachePutPs);\n }\n}\n"]}
1
+ {"version":3,"file":"wholeSummaryDocumentStorageService.js","sourceRoot":"","sources":["../src/wholeSummaryDocumentStorageService.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 assert,\n stringToBuffer,\n Uint8ArrayToString,\n} from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n ISummaryContext,\n IDocumentStorageServicePolicies,\n } from \"@fluidframework/driver-definitions\";\nimport {\n ICreateBlobResponse,\n ISnapshotTree,\n ISummaryHandle,\n ISummaryTree,\n ITree,\n IVersion,\n} from \"@fluidframework/protocol-definitions\";\nimport {\n convertWholeFlatSummaryToSnapshotTreeAndBlobs,\n GitManager,\n ISummaryUploadManager,\n WholeSummaryUploadManager,\n} from \"@fluidframework/server-services-client\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport { ICache, InMemoryCache } from \"./cache\";\n\nconst latestSnapshotId: string = \"latest\";\n\nexport class WholeSummaryDocumentStorageService implements IDocumentStorageService {\n private readonly summaryUploadManager: ISummaryUploadManager;\n private firstVersionsCall: boolean = true;\n\n public get repositoryUrl(): string {\n return \"\";\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 private readonly blobCache: ICache<ArrayBufferLike> = new InMemoryCache(),\n private readonly snapshotTreeCache: ICache<ISnapshotTree> = new InMemoryCache()) {\n this.summaryUploadManager = new WholeSummaryUploadManager(manager);\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {\n if (versionId !== this.id && versionId !== null) {\n // Blobs in this scenario will never have multiple versions, so return blobId as is\n return [{\n id: versionId,\n treeId: undefined!,\n }];\n }\n // If this is the first versions call for the document, we know we will want the latest summary.\n // Fetch latest summary, cache it, and return its id.\n if (this.firstVersionsCall && count === 1) {\n this.firstVersionsCall = false;\n return [{\n id: (await this.fetchAndCacheSnapshotTree(latestSnapshotId)).id,\n treeId: undefined!,\n }];\n }\n\n // Otherwise, get the latest version of the document as normal.\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 () => this.manager.getCommits(id, count),\n );\n return commits.map((commit) => ({\n date: commit.commit.author.date,\n id: commit.sha,\n treeId: undefined!,\n }));\n }\n\n public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTree | 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 return (await this.fetchAndCacheSnapshotTree(requestVersion.id)).snapshotTree;\n }\n\n public async readBlob(blobId: string): Promise<ArrayBufferLike> {\n const cachedBlob = await this.blobCache.get(blobId);\n if (cachedBlob !== undefined) {\n return cachedBlob;\n }\n\n const blob = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"readBlob\",\n blobId,\n },\n async (event) => {\n const response = await this.manager.getBlob(blobId);\n event.end({\n size: response.size,\n });\n return response;\n },\n );\n const bufferValue = stringToBuffer(blob.content, blob.encoding);\n\n await this.blobCache.put(blob.sha, bufferValue);\n\n return bufferValue;\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 },\n async () => this.summaryUploadManager.writeSummaryTree(summary, context.ackHandle ?? \"\", \"channel\"),\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 write(tree: ITree, parents: string[], message: string, ref: string): Promise<IVersion> {\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 response = await this.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 fetchAndCacheSnapshotTree(versionId: string): Promise<{ id: string, snapshotTree: ISnapshotTree }> {\n const cachedSnapshotTree = await this.snapshotTreeCache.get(versionId);\n if (cachedSnapshotTree !== undefined) {\n return { id: cachedSnapshotTree.id!, snapshotTree: cachedSnapshotTree };\n }\n\n const wholeFlatSummary = await PerformanceEvent.timedExecAsync(\n this.logger,\n {\n eventName: \"getWholeFlatSummary\",\n treeId: versionId,\n },\n async (event) => {\n const response = await this.manager.getSummary(versionId);\n event.end({\n size: response.trees[0]?.entries.length,\n });\n return response;\n },\n );\n const normalizedWholeSummary = convertWholeFlatSummaryToSnapshotTreeAndBlobs(wholeFlatSummary);\n const snapshotId = normalizedWholeSummary.snapshotTree.id;\n assert(snapshotId !== undefined, 0x275 /* \"Root tree should contain the id\" */);\n\n const cachePs: Promise<any>[] = [\n this.snapshotTreeCache.put(\n snapshotId,\n normalizedWholeSummary.snapshotTree,\n ),\n this.initBlobCache(normalizedWholeSummary.blobs),\n ];\n if (snapshotId !== versionId) {\n // versionId could be \"latest\". When summarizer checks cache for \"latest\", we want it to be available.\n // TODO: For in-memory cache, <latest,snapshotTree> will be a shared pointer with <snapshotId,snapshotTree>,\n // However, for something like Redis, this will cache the same value twice. Alternatively, could we simply\n // cache with versionId?\n cachePs.push(this.snapshotTreeCache.put(\n versionId,\n normalizedWholeSummary.snapshotTree,\n ));\n }\n\n await Promise.all(cachePs);\n\n return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree};\n }\n\n private async initBlobCache(blobs: Map<string, ArrayBuffer>): Promise<void> {\n const blobCachePutPs: Promise<void>[] = [];\n blobs.forEach((value, id) => {\n blobCachePutPs.push(this.blobCache.put(id, value));\n });\n await Promise.all(blobCachePutPs);\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/routerlicious-driver",
3
- "version": "0.52.0",
3
+ "version": "0.54.0-47413",
4
4
  "description": "Socket.IO + Git implementation of Fluid service API",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": "https://github.com/microsoft/FluidFramework",
@@ -57,14 +57,14 @@
57
57
  "dependencies": {
58
58
  "@fluidframework/common-definitions": "^0.20.1",
59
59
  "@fluidframework/common-utils": "^0.32.1",
60
- "@fluidframework/driver-base": "^0.52.0",
61
- "@fluidframework/driver-definitions": "^0.42.0",
62
- "@fluidframework/driver-utils": "^0.52.0",
60
+ "@fluidframework/driver-base": "0.54.0-47413",
61
+ "@fluidframework/driver-definitions": "^0.43.0",
62
+ "@fluidframework/driver-utils": "0.54.0-47413",
63
63
  "@fluidframework/gitresources": "^0.1034.0",
64
64
  "@fluidframework/protocol-base": "^0.1034.0",
65
65
  "@fluidframework/protocol-definitions": "^0.1026.0",
66
66
  "@fluidframework/server-services-client": "^0.1034.0",
67
- "@fluidframework/telemetry-utils": "^0.52.0",
67
+ "@fluidframework/telemetry-utils": "0.54.0-47413",
68
68
  "axios": "^0.21.2",
69
69
  "json-stringify-safe": "5.0.1",
70
70
  "socket.io-client": "^2.4.0",
@@ -74,7 +74,7 @@
74
74
  "devDependencies": {
75
75
  "@fluidframework/build-common": "^0.23.0",
76
76
  "@fluidframework/eslint-config-fluid": "^0.24.0",
77
- "@fluidframework/mocha-test-setup": "^0.52.0",
77
+ "@fluidframework/mocha-test-setup": "0.54.0-47413",
78
78
  "@microsoft/api-extractor": "^7.16.1",
79
79
  "@types/mocha": "^8.2.2",
80
80
  "@types/nock": "^9.3.0",
@@ -36,6 +36,7 @@ export class DocumentDeltaStorageService implements IDocumentDeltaStorageService
36
36
  to: number | undefined,
37
37
  abortSignal?: AbortSignal,
38
38
  cachedOnly?: boolean,
39
+ fetchReason?: string,
39
40
  ): IStream<ISequencedDocumentMessage[]>
40
41
  {
41
42
  if (cachedOnly) {
@@ -51,6 +52,7 @@ export class DocumentDeltaStorageService implements IDocumentDeltaStorageService
51
52
  MaxBatchDeltas,
52
53
  new TelemetryNullLogger(),
53
54
  abortSignal,
55
+ fetchReason,
54
56
  );
55
57
  }
56
58
 
@@ -49,6 +49,10 @@ export class DocumentService implements api.IDocumentService {
49
49
  * @returns returns the document storage service for routerlicious driver.
50
50
  */
51
51
  public async connectToStorage(): Promise<api.IDocumentStorageService> {
52
+ if (this.documentStorageService !== undefined) {
53
+ return this.documentStorageService;
54
+ }
55
+
52
56
  if (this.gitUrl === undefined) {
53
57
  return new NullBlobStorageService();
54
58
  }
@@ -93,6 +97,7 @@ export class DocumentService implements api.IDocumentService {
93
97
  * @returns returns the document delta storage service for routerlicious driver.
94
98
  */
95
99
  public async connectToDeltaStorage(): Promise<api.IDocumentDeltaStorageService> {
100
+ await this.connectToStorage();
96
101
  assert(!!this.documentStorageService, 0x0b1 /* "Storage service not initialized" */);
97
102
 
98
103
  const rateLimiter = new RateLimiter(this.driverPolicies.maxConcurrentOrdererRequests);
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/routerlicious-driver";
9
- export const pkgVersion = "0.52.0";
9
+ export const pkgVersion = "0.54.0-47413";
@@ -210,13 +210,7 @@ export class WholeSummaryDocumentStorageService implements IDocumentStorageServi
210
210
  ));
211
211
  }
212
212
 
213
- await Promise.all([
214
- this.snapshotTreeCache.put(
215
- snapshotId,
216
- normalizedWholeSummary.snapshotTree,
217
- ),
218
- this.initBlobCache(normalizedWholeSummary.blobs),
219
- ]);
213
+ await Promise.all(cachePs);
220
214
 
221
215
  return { id: snapshotId, snapshotTree: normalizedWholeSummary.snapshotTree};
222
216
  }