@fluidframework/odsp-driver 0.52.1 → 0.54.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/createFile.d.ts.map +1 -1
  2. package/dist/createFile.js +5 -4
  3. package/dist/createFile.js.map +1 -1
  4. package/dist/epochTracker.d.ts +2 -1
  5. package/dist/epochTracker.d.ts.map +1 -1
  6. package/dist/epochTracker.js +50 -21
  7. package/dist/epochTracker.js.map +1 -1
  8. package/dist/fetchSnapshot.d.ts.map +1 -1
  9. package/dist/fetchSnapshot.js +15 -14
  10. package/dist/fetchSnapshot.js.map +1 -1
  11. package/dist/getFileLink.js +3 -3
  12. package/dist/getFileLink.js.map +1 -1
  13. package/dist/odspDeltaStorageService.d.ts +3 -3
  14. package/dist/odspDeltaStorageService.d.ts.map +1 -1
  15. package/dist/odspDeltaStorageService.js +7 -4
  16. package/dist/odspDeltaStorageService.js.map +1 -1
  17. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  18. package/dist/odspDocumentDeltaConnection.js +2 -0
  19. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  20. package/dist/odspDocumentService.d.ts +1 -1
  21. package/dist/odspDocumentService.d.ts.map +1 -1
  22. package/dist/odspDocumentService.js +13 -25
  23. package/dist/odspDocumentService.js.map +1 -1
  24. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  25. package/dist/odspDocumentStorageManager.js +29 -26
  26. package/dist/odspDocumentStorageManager.js.map +1 -1
  27. package/dist/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  28. package/dist/odspDriverUrlResolverForShareLink.js +4 -3
  29. package/dist/odspDriverUrlResolverForShareLink.js.map +1 -1
  30. package/dist/odspError.d.ts.map +1 -1
  31. package/dist/odspError.js +3 -1
  32. package/dist/odspError.js.map +1 -1
  33. package/dist/odspSummaryUploadManager.d.ts +1 -1
  34. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  35. package/dist/odspSummaryUploadManager.js +7 -20
  36. package/dist/odspSummaryUploadManager.js.map +1 -1
  37. package/dist/odspUtils.d.ts.map +1 -1
  38. package/dist/odspUtils.js +31 -22
  39. package/dist/odspUtils.js.map +1 -1
  40. package/dist/packageVersion.d.ts +1 -1
  41. package/dist/packageVersion.js +1 -1
  42. package/dist/packageVersion.js.map +1 -1
  43. package/dist/vroom.d.ts.map +1 -1
  44. package/dist/vroom.js +4 -1
  45. package/dist/vroom.js.map +1 -1
  46. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  47. package/dist/zipItDataRepresentationUtils.js +3 -3
  48. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  49. package/lib/createFile.d.ts.map +1 -1
  50. package/lib/createFile.js +6 -5
  51. package/lib/createFile.js.map +1 -1
  52. package/lib/epochTracker.d.ts +2 -1
  53. package/lib/epochTracker.d.ts.map +1 -1
  54. package/lib/epochTracker.js +50 -21
  55. package/lib/epochTracker.js.map +1 -1
  56. package/lib/fetchSnapshot.d.ts.map +1 -1
  57. package/lib/fetchSnapshot.js +15 -14
  58. package/lib/fetchSnapshot.js.map +1 -1
  59. package/lib/getFileLink.js +4 -4
  60. package/lib/getFileLink.js.map +1 -1
  61. package/lib/odspDeltaStorageService.d.ts +3 -3
  62. package/lib/odspDeltaStorageService.d.ts.map +1 -1
  63. package/lib/odspDeltaStorageService.js +7 -4
  64. package/lib/odspDeltaStorageService.js.map +1 -1
  65. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
  66. package/lib/odspDocumentDeltaConnection.js +2 -0
  67. package/lib/odspDocumentDeltaConnection.js.map +1 -1
  68. package/lib/odspDocumentService.d.ts +1 -1
  69. package/lib/odspDocumentService.d.ts.map +1 -1
  70. package/lib/odspDocumentService.js +15 -27
  71. package/lib/odspDocumentService.js.map +1 -1
  72. package/lib/odspDocumentStorageManager.d.ts.map +1 -1
  73. package/lib/odspDocumentStorageManager.js +31 -28
  74. package/lib/odspDocumentStorageManager.js.map +1 -1
  75. package/lib/odspDriverUrlResolverForShareLink.d.ts.map +1 -1
  76. package/lib/odspDriverUrlResolverForShareLink.js +5 -4
  77. package/lib/odspDriverUrlResolverForShareLink.js.map +1 -1
  78. package/lib/odspError.d.ts.map +1 -1
  79. package/lib/odspError.js +3 -1
  80. package/lib/odspError.js.map +1 -1
  81. package/lib/odspSummaryUploadManager.d.ts +1 -1
  82. package/lib/odspSummaryUploadManager.d.ts.map +1 -1
  83. package/lib/odspSummaryUploadManager.js +8 -21
  84. package/lib/odspSummaryUploadManager.js.map +1 -1
  85. package/lib/odspUtils.d.ts.map +1 -1
  86. package/lib/odspUtils.js +33 -24
  87. package/lib/odspUtils.js.map +1 -1
  88. package/lib/packageVersion.d.ts +1 -1
  89. package/lib/packageVersion.js +1 -1
  90. package/lib/packageVersion.js.map +1 -1
  91. package/lib/vroom.d.ts.map +1 -1
  92. package/lib/vroom.js +4 -1
  93. package/lib/vroom.js.map +1 -1
  94. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
  95. package/lib/zipItDataRepresentationUtils.js +3 -3
  96. package/lib/zipItDataRepresentationUtils.js.map +1 -1
  97. package/package.json +8 -8
  98. package/src/createFile.ts +13 -9
  99. package/src/epochTracker.ts +50 -20
  100. package/src/fetchSnapshot.ts +15 -8
  101. package/src/getFileLink.ts +10 -4
  102. package/src/odspDeltaStorageService.ts +10 -3
  103. package/src/odspDocumentDeltaConnection.ts +2 -0
  104. package/src/odspDocumentService.ts +27 -29
  105. package/src/odspDocumentStorageManager.ts +48 -28
  106. package/src/odspDriverUrlResolverForShareLink.ts +8 -3
  107. package/src/odspError.ts +5 -1
  108. package/src/odspSummaryUploadManager.ts +7 -22
  109. package/src/odspUtils.ts +43 -34
  110. package/src/packageVersion.ts +1 -1
  111. package/src/vroom.ts +6 -1
  112. package/src/zipItDataRepresentationUtils.ts +4 -7
@@ -1 +1 @@
1
- {"version":3,"file":"zipItDataRepresentationUtils.js","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Data representation which is followed(zipIt Protocol) here is described in this document:\n * https://microsoft.sharepoint-df.com/:w:/t/ODSPFileStore/ER06b64K_XdDjEyAKl-UT60BJiId39SCVkYSyo_2pvH9gQ?e=KYQ0c5\n*/\n\nimport { assert, IsoBuffer, Uint8ArrayToArrayBuffer, Uint8ArrayToString } from \"@fluidframework/common-utils\";\nimport { createOdspNetworkError, fetchIncorrectResponse } from \"@fluidframework/odsp-doclib-utils\";\nimport { ReadBuffer } from \"./ReadBufferUtils\";\n\n// eslint-disable-next-line max-len\n// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents\n/**\n * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on\n * filestore code on server too at above link.\n */\nexport enum MarkerCodes {\n BoolTrue = 11, // value = true\n BoolFalse = 12, // value = false\n\n StringEmpty = 13, // value = \"\"\n String8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length\n String16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length\n String32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length\n\n ConstString8Id = 17, // unsigned-8-bit little-endian const string id follows\n ConstString16Id = 18, // unsigned-16-bit little-endian const string id follows\n ConstString32Id = 19, // unsigned-32-bit little-endian const string id follows\n ConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte\n ConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.\n\n Int0 = 1, // value = 0\n UInt8 = 3, // unsigned-8-bit little-endian follows\n UInt16 = 5, // unsigned-16-bit little-endian follows\n UInt32 = 7, // unsigned-32-bit little-endian follows\n UInt64 = 9, // unsigned-64-bit little-endian follows\n Int8 = 2, // signed-8-bit little-endian follows\n Int16 = 4, // signed-16-bit little-endian follows\n Int32 = 6, // signed-32-bit little-endian follows\n Int64 = 8, // signed-64-bit little-endian follows\n\n BinaryEmpty = 32, // value = byte[]\n BinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length\n BinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length\n BinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length\n BinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the start of sections.\n */\nexport enum MarkerCodesStart {\n \"list\" = 49,\n \"set\" = 51,\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the end of sections.\n */\nexport enum MarkerCodesEnd {\n \"list\" = 50,\n \"set\" = 52,\n}\n\n/**\n * This contains mapping of Marker Codes to number of bytes in which the corresponding data\n * will be stored.\n*/\nexport const codeToBytesMap = {\n // Integer code to bytes\n 1: 0,\n 2: 1,\n 3: 1,\n 4: 2,\n 5: 2,\n 6: 4,\n 7: 4,\n 8: 8,\n 9: 8,\n\n // String code to Bytes\n 13: 0,\n 14: 1,\n 15: 2,\n 16: 4,\n\n 17: 1,\n 18: 2,\n 19: 4,\n\n 20: 1,\n 21: 4,\n\n // Binary code to bytes\n 32: 0,\n 33: 1,\n 34: 2,\n 35: 4,\n 36: 8,\n};\n\nexport function getValueSafely(map: {[index: number]: number}, key: number) {\n const val = map[key];\n assert(val !== undefined, 0x287 /* `key= ${key} must exist in the map` */);\n return val;\n}\n\nexport function getAndValidateNodeProps(node: NodeCore, props: string[], enforceAllProps = true) {\n const propSet = new Set(props);\n const res: Record<string, NodeTypes> = {};\n for (const [keyNode, valueNode] of node.iteratePairs()) {\n assertBlobCoreInstance(keyNode, \"keynode should be a blob\");\n const keyStr = keyNode.toString();\n if (propSet.has(keyStr)) {\n propSet.delete(keyStr);\n res[keyStr] = valueNode;\n }\n }\n if (enforceAllProps) {\n assert(propSet.size === 0, 0x288 /* `All properties should exist, Not found: ${[...propSet.keys()]}` */);\n }\n return res;\n}\n\nexport function iteratePairs<T>(it: IterableIterator<T>) {\n const res: IterableIterator<[T, T]> = {\n next: () => {\n const a = it.next();\n if (a.done) {\n return { value: undefined, done: true };\n }\n const b = it.next();\n assert(b.done !== true, 0x22b /* \"Should be a pair\" */);\n return { value: [a.value, b.value], done: b.done };\n },\n [Symbol.iterator]: () => { return res; },\n };\n return res;\n}\n\n/**\n * Helper function that returns iterator from an object\n * @param obj - object that supports iteration\n */\nexport function iterate<T>(obj: {[Symbol.iterator]: () => IterableIterator<T>}) {\n return obj[Symbol.iterator]();\n}\n\n/**\n * Base class to represent binary blob element.\n * Binary blob is one of three types supported as a leaf node of a tree.\n * Note: concrete implementations (derived classes) are not exposed from this module\n */\nexport abstract class BlobCore {\n public abstract get buffer(): Uint8Array;\n public get arrayBuffer(): ArrayBufferLike {\n return Uint8ArrayToArrayBuffer(this.buffer);\n }\n\n /**\n * Represents a blob.\n * @param constString - Whether it contains const string declaration.\n * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.\n */\n constructor(public readonly constString: boolean, public readonly useUtf8Code: boolean = false) {}\n\n public toString() {\n return Uint8ArrayToString(this.buffer, \"utf-8\");\n }\n}\n\n/**\n * \"deep copy\" blob, holds to binary data passed in\n * It is called deep copy as a counter-part to BlobShallowCopy, which\n * is a reference to underlying binary stream (ReadBuffer).\n*/\nclass BlobDeepCopy extends BlobCore {\n /**\n * Represents a deep copy of the blob.\n * @param data - Data array of the blob\n * @param constString - Whether it contains const string declaration.\n * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.\n */\n constructor(protected readonly data: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {\n super(constString, useUtf8Code);\n }\n\n public get buffer() {\n return this.data;\n }\n\n public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {\n const length = buffer.read(lengthLen);\n const data = new Uint8Array(length);\n for (let counter = 0; counter < length; counter++) {\n data[counter] = buffer.read();\n }\n return new BlobDeepCopy(data, constString);\n }\n}\n\n/**\n * Shallow copy blob, keeps a reference to portion of ReadBuffer\n * it was constructed from. It takes much less memory compared to BlobDeepCopy\n */\n export class BlobShallowCopy extends BlobCore {\n /**\n * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.\n * @param data - Data array of the blob\n * @param start - Start point of the blob in the buffer.\n * @param end - End point of the blob in the buffer.\n * @param constString - Whether it contains const string declaration.\n */\n constructor(\n protected data: ReadBuffer,\n protected start: number,\n protected end: number,\n constString: boolean,\n ) {\n super(constString);\n }\n\n public get buffer() {\n return this.data.buffer.subarray(this.start, this.end);\n }\n\n public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {\n const length = buffer.read(lengthLen);\n const pos = buffer.pos;\n buffer.skip(length);\n return new BlobShallowCopy(buffer, pos, pos + length, constString);\n }\n}\n\nexport const addStringProperty = (node: NodeCore, a: string, b: string, encodeValAsConstString: boolean = false) =>\n { node.addString(a, true); node.addString(b, encodeValAsConstString); };\nexport const addNumberProperty = (node: NodeCore, a: string, b: number) =>\n { node.addString(a, true); node.addNumber(b); };\nexport const addBoolProperty = (node: NodeCore, a: string, b: boolean) =>\n { node.addString(a, true); node.addBool(b); };\n\n/**\n * Three leaf types supported by tree:\n * 1. Node (sub-tree)\n * 2. binary blob\n * 3. integer\n * 4. boolean\n */\nexport type NodeTypes = NodeCore | BlobCore | number | boolean;\n\nexport type NodeCoreTypes = \"list\" | \"set\";\n\n/**\n * Node - node in the tree (non-leaf element of the tree)\n */\nexport class NodeCore {\n // It is an array of nodes.\n private readonly children: NodeTypes[] = [];\n public get nodes() {\n return this.children;\n }\n\n constructor(public type: NodeCoreTypes = \"set\") {}\n\n public [Symbol.iterator]() {\n return this.children[Symbol.iterator]();\n }\n\n public iteratePairs() {\n assert((this.length % 2) === 0, 0x22c /* \"reading pairs\" */);\n return iteratePairs(iterate(this));\n }\n\n public get length() { return this.children.length; }\n\n public get(index: number) { return this.children[index]; }\n\n public getString(index: number): string {\n const node = this.children[index];\n assertBlobCoreInstance(node, \"getString should return stringblob\");\n return node.toString();\n }\n\n public getBlob(index: number): BlobCore {\n const node = this.children[index];\n assertBlobCoreInstance(node, \"getBlob should return a blob\");\n return node;\n }\n\n public getNode(index: number): NodeCore\n {\n const node = this.children[index];\n assertNodeCoreInstance(node, \"getNode should return a node\");\n return node;\n }\n\n public getNumber(index: number): number\n {\n const node = this.children[index];\n assertNumberInstance(node, \"getNumber should return a number\");\n return node;\n }\n\n public getBool(index: number): boolean {\n const node = this.children[index];\n assertBoolInstance(node, \"getBool should return a boolean\");\n return node;\n }\n\n public addNode(type?: NodeCoreTypes): NodeCore {\n const node = new NodeCore(type);\n this.children.push(node);\n return node;\n }\n\n public addBlob(blob: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {\n this.children.push(new BlobDeepCopy(blob, constString, useUtf8Code));\n }\n\n public addString(payload: string, constString: boolean) {\n this.addBlob(IsoBuffer.from(payload, \"utf-8\"), constString, true);\n }\n\n public addNumber(payload: number | undefined) {\n assert(Number.isInteger(payload), 0x231 /* \"Number should be an integer\" */);\n assert(payload !== undefined && payload >= 0, 0x232 /* \"Payload should not be negative\" */);\n this.children.push(payload);\n }\n\n public addBool(payload: boolean) {\n this.children.push(payload);\n }\n\n /**\n * Load and parse the buffer into a tree.\n * @param buffer - buffer to read from.\n */\n protected load(buffer: ReadBuffer, dictionary: BlobCore[]) {\n for (;!buffer.eof;) {\n let childValue: NodeTypes | undefined;\n const code = buffer.read();\n switch (code) {\n case MarkerCodesStart.list:\n case MarkerCodesStart.set: {\n childValue = new NodeCore(code === MarkerCodesStart.set ? \"set\" : \"list\");\n this.children.push(childValue);\n childValue.load(buffer, dictionary);\n break;\n }\n case MarkerCodes.ConstStringDeclare:\n case MarkerCodes.ConstStringDeclareBig:\n {\n const stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n const constString = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), true);\n dictionary[stringId] = constString;\n break;\n }\n case MarkerCodes.ConstString8Id:\n case MarkerCodes.ConstString16Id:\n case MarkerCodes.ConstString32Id:\n {\n const stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n childValue = dictionary[stringId];\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.StringEmpty:\n case MarkerCodes.String8Length:\n case MarkerCodes.String16Length:\n case MarkerCodes.String32Length:\n case MarkerCodes.BinaryEmpty:\n case MarkerCodes.BinarySingle8:\n case MarkerCodes.BinarySingle16:\n case MarkerCodes.BinarySingle32:\n case MarkerCodes.BinarySingle64:\n {\n childValue = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), false);\n this.children.push(childValue);\n break;\n }\n // If integer is 0.\n case MarkerCodes.Int0:\n {\n childValue = 0;\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.UInt8:\n case MarkerCodes.UInt16:\n case MarkerCodes.UInt32:\n case MarkerCodes.UInt64:\n case MarkerCodes.Int8:\n case MarkerCodes.Int16:\n case MarkerCodes.Int32:\n case MarkerCodes.Int64:\n {\n childValue = buffer.read(getValueSafely(codeToBytesMap, code));\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.BoolTrue:\n this.children.push(true);\n break;\n case MarkerCodes.BoolFalse:\n this.children.push(false);\n break;\n case MarkerCodesEnd.list:\n case MarkerCodesEnd.set:\n return;\n default:\n throw new Error(`Invalid code: ${code}`);\n }\n }\n }\n}\n\n /**\n * TreeBuilder - Root of the tree.\n * Provides loading and serialization capabilities.\n */\nexport class TreeBuilder extends NodeCore {\n static load(buffer: ReadBuffer): TreeBuilder {\n const builder = new TreeBuilder();\n const dictionary = new Array<BlobCore>();\n builder.load(buffer, dictionary);\n assert(buffer.eof, 0x233 /* \"Unexpected data at the end of buffer\" */);\n return builder;\n }\n}\n\nexport function assertBlobCoreInstance(\n node: NodeTypes,\n message: string,\n): asserts node is BlobCore {\n if (node instanceof BlobCore) {\n return;\n }\n throwBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertNodeCoreInstance(\n node: NodeTypes,\n message: string,\n): asserts node is NodeCore {\n if (node instanceof NodeCore) {\n return;\n }\n throwBufferParseException(node, \"NodeCore\", message);\n}\n\nexport function assertNumberInstance(\n node: NodeTypes,\n message: string,\n): asserts node is number {\n if (typeof node === \"number\") {\n return;\n }\n throwBufferParseException(node, \"Number\", message);\n}\n\nexport function assertBoolInstance(\n node: NodeTypes,\n message: string,\n): asserts node is boolean {\n if (typeof node === \"boolean\") {\n return;\n }\n throwBufferParseException(node, \"Boolean\", message);\n}\n\nfunction throwBufferParseException(\n node: NodeTypes,\n expectedNodeType: NodeType,\n message: string,\n): never {\n const error = createOdspNetworkError(\n \"bufferParsingException\",\n message,\n fetchIncorrectResponse,\n undefined,\n undefined,\n undefined,\n {\n nodeType: getNodeType(node),\n expectedNodeType,\n });\n throw error;\n}\n\nfunction getNodeType(value: NodeTypes): NodeType {\n if (typeof value === \"number\") {\n return \"Number\";\n } else if(value instanceof BlobCore) {\n return \"BlobCore\";\n } else if (value instanceof NodeCore) {\n return \"NodeCore\";\n } else if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n return \"UnknownType\";\n}\n\ntype NodeType = \"Number\" | \"BlobCore\" | \"NodeCore\" | \"Boolean\" | \"UnknownType\";\n"]}
1
+ {"version":3,"file":"zipItDataRepresentationUtils.js","sourceRoot":"","sources":["../src/zipItDataRepresentationUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH;;;EAGE;AAEF,+DAA8G;AAC9G,+DAAiE;AACjE,2EAAqE;AAGrE,mCAAmC;AACnC,wJAAwJ;AACxJ;;;GAGG;AACH,IAAY,WA8BX;AA9BD,WAAY,WAAW;IACnB,sDAAa,CAAA;IACb,wDAAc,CAAA;IAEd,4DAAgB,CAAA;IAChB,gEAAkB,CAAA;IAClB,kEAAmB,CAAA;IACnB,kEAAmB,CAAA;IAEnB,kEAAmB,CAAA;IACnB,oEAAoB,CAAA;IACpB,oEAAoB,CAAA;IACpB,0EAAuB,CAAA;IACvB,gFAA0B,CAAA;IAE1B,6CAAQ,CAAA;IACR,+CAAS,CAAA;IACT,iDAAU,CAAA;IACV,iDAAU,CAAA;IACV,iDAAU,CAAA;IACV,6CAAQ,CAAA;IACR,+CAAS,CAAA;IACT,+CAAS,CAAA;IACT,+CAAS,CAAA;IAET,4DAAgB,CAAA;IAChB,gEAAkB,CAAA;IAClB,kEAAmB,CAAA;IACnB,kEAAmB,CAAA;IACnB,kEAAmB,CAAA;AACvB,CAAC,EA9BW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QA8BtB;AAED;;GAEG;AACH,IAAY,gBAGX;AAHD,WAAY,gBAAgB;IACxB,wDAAW,CAAA;IACX,sDAAU,CAAA;AACd,CAAC,EAHW,gBAAgB,GAAhB,wBAAgB,KAAhB,wBAAgB,QAG3B;AAED;;GAEG;AACH,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,oDAAW,CAAA;IACX,kDAAU,CAAA;AACd,CAAC,EAHW,cAAc,GAAd,sBAAc,KAAd,sBAAc,QAGzB;AAED;;;EAGE;AACW,QAAA,cAAc,GAAG;IAC1B,wBAAwB;IACxB,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IAEJ,uBAAuB;IACvB,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IAEL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IAEL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IAEL,uBAAuB;IACvB,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACR,CAAC;AAEF,SAAgB,cAAc,CAAC,GAA8B,EAAE,GAAW;IACtE,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,qBAAM,CAAC,GAAG,KAAK,SAAS,EAAE,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC3E,OAAO,GAAG,CAAC;AACf,CAAC;AAJD,wCAIC;AAED,SAAgB,uBAAuB,CAAC,IAAc,EAAE,KAAe,EAAE,eAAe,GAAG,IAAI;IAC3F,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,GAAG,GAA8B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,EAAE;QACpD,sBAAsB,CAAC,OAAO,EAAE,0BAA0B,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACrB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACvB,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;SAC3B;KACJ;IACD,IAAI,eAAe,EAAE;QACjB,qBAAM,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,sEAAsE,CAAC,CAAC;KAC5G;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAfD,0DAeC;AAED,SAAgB,YAAY,CAAI,EAAuB;IACnD,MAAM,GAAG,GAA6B;QAClC,IAAI,EAAE,GAAG,EAAE;YACP,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,CAAC,IAAI,EAAE;gBACR,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aAC3C;YACD,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;YACpB,qBAAM,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE,KAAK,CAAC,wBAAwB,CAAC,CAAC;YACxD,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,CAAC;QACD,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC;KAC3C,CAAC;IACF,OAAO,GAAG,CAAC;AACf,CAAC;AAdD,oCAcC;AAED;;;GAGG;AACH,SAAgB,OAAO,CAAI,GAAmD;IAC1E,OAAO,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAClC,CAAC;AAFD,0BAEC;AAED;;;;GAIG;AACH,MAAsB,QAAQ;IAM1B;;;;OAIG;IACH,YAA4B,WAAoB,EAAkB,cAAuB,KAAK;QAAlE,gBAAW,GAAX,WAAW,CAAS;QAAkB,gBAAW,GAAX,WAAW,CAAiB;IAAG,CAAC;IATlG,IAAW,WAAW;QAClB,OAAO,sCAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;IASM,QAAQ;QACX,OAAO,iCAAkB,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;CACJ;AAhBD,4BAgBC;AAED;;;;EAIE;AACF,MAAM,YAAa,SAAQ,QAAQ;IAC/B;;;;;OAKG;IACH,YAA+B,IAAgB,EAAE,WAAoB,EAAE,cAAuB,KAAK;QAC/F,KAAK,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QADL,SAAI,GAAJ,IAAI,CAAY;IAE/C,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,MAAkB,EAAE,SAAiB,EAAE,WAAoB;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;SACjC;QACD,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC/C,CAAC;CACJ;AAED;;;GAGG;AACF,MAAa,eAAgB,SAAQ,QAAQ;IAC1C;;;;;;OAMG;IACH,YACc,IAAgB,EAChB,KAAa,EACb,GAAW,EACrB,WAAoB;QAEpB,KAAK,CAAC,WAAW,CAAC,CAAC;QALT,SAAI,GAAJ,IAAI,CAAY;QAChB,UAAK,GAAL,KAAK,CAAQ;QACb,QAAG,GAAH,GAAG,CAAQ;IAIzB,CAAC;IAED,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,MAAkB,EAAE,SAAiB,EAAE,WAAoB;QAC1E,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;QACvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,IAAI,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC;IACvE,CAAC;CACJ;AA3BA,0CA2BA;AAEM,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,CAAS,EAAE,CAAS,EAAE,yBAAkC,KAAK,EAAE,EAAE,GAC7G,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC;AAD/D,QAAA,iBAAiB,qBAC8C;AACrE,MAAM,iBAAiB,GAAG,CAAC,IAAc,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,GACpE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AADvC,QAAA,iBAAiB,qBACsB;AAC7C,MAAM,eAAe,GAAG,CAAC,IAAc,EAAE,CAAS,EAAE,CAAU,EAAE,EAAE,GACnE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AADrC,QAAA,eAAe,mBACsB;AAalD;;GAEG;AACH,MAAa,QAAQ;IAOjB,YAAmB,OAAsB,KAAK;QAA3B,SAAI,GAAJ,IAAI,CAAuB;QAN9C,2BAA2B;QACV,aAAQ,GAAgB,EAAE,CAAC;IAKK,CAAC;IAJlD,IAAW,KAAK;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAIM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5C,CAAC;IAEM,YAAY;QACf,qBAAM,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,qBAAqB,CAAC,CAAC;QAC7D,OAAO,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,IAAW,MAAM,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAE7C,GAAG,CAAC,KAAa,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnD,SAAS,CAAC,KAAa;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,sBAAsB,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,KAAa;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,sBAAsB,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,KAAa;QAExB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,sBAAsB,CAAC,IAAI,EAAE,8BAA8B,CAAC,CAAC;QAC7D,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,SAAS,CAAC,KAAa;QAE1B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,oBAAoB,CAAC,IAAI,EAAE,kCAAkC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,KAAa;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,kBAAkB,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;QAC5D,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,IAAoB;QAC/B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO,CAAC,IAAgB,EAAE,WAAoB,EAAE,cAAuB,KAAK;QAC/E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IACzE,CAAC;IAEM,SAAS,CAAC,OAAe,EAAE,WAAoB;QAClD,IAAI,CAAC,OAAO,CAAC,wBAAS,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACtE,CAAC;IAEM,SAAS,CAAC,OAA2B;QACxC,qBAAM,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC7E,qBAAM,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC5F,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAEM,OAAO,CAAC,OAAgB;QAC3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;IAED;;;OAGG;IACO,IAAI,CAAC,MAAkB,EAAE,UAAsB;QACrD,OAAM,CAAC,MAAM,CAAC,GAAG,GAAG;YAChB,IAAI,UAAiC,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;YAC3B,QAAQ,IAAI,EAAE;gBACV,KAAK,gBAAgB,CAAC,IAAI,CAAC;gBAC3B,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC;oBACvB,UAAU,GAAG,IAAI,QAAQ,CAAC,IAAI,KAAK,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC1E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAC/B,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBACpC,MAAM;iBACT;gBACD,KAAK,WAAW,CAAC,kBAAkB,CAAC;gBACpC,KAAK,WAAW,CAAC,qBAAqB;oBACtC;wBACI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAc,EAAE,IAAI,CAAC,CAAC,CAAC;wBACnE,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,sBAAc,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;wBAC7F,UAAU,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;wBACnC,MAAM;qBACT;gBACD,KAAK,WAAW,CAAC,cAAc,CAAC;gBAChC,KAAK,WAAW,CAAC,eAAe,CAAC;gBACjC,KAAK,WAAW,CAAC,eAAe;oBAChC;wBACI,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAc,EAAE,IAAI,CAAC,CAAC,CAAC;wBACnE,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;wBAClC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM;qBACT;gBACD,KAAK,WAAW,CAAC,WAAW,CAAC;gBAC7B,KAAK,WAAW,CAAC,aAAa,CAAC;gBAC/B,KAAK,WAAW,CAAC,cAAc,CAAC;gBAChC,KAAK,WAAW,CAAC,cAAc,CAAC;gBAChC,KAAK,WAAW,CAAC,WAAW,CAAC;gBAC7B,KAAK,WAAW,CAAC,aAAa,CAAC;gBAC/B,KAAK,WAAW,CAAC,cAAc,CAAC;gBAChC,KAAK,WAAW,CAAC,cAAc,CAAC;gBAChC,KAAK,WAAW,CAAC,cAAc;oBAC/B;wBACI,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,sBAAc,EAAE,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;wBACvF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM;qBACT;gBACD,mBAAmB;gBACnB,KAAK,WAAW,CAAC,IAAI;oBACrB;wBACI,UAAU,GAAG,CAAC,CAAC;wBACf,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM;qBACT;gBACD,KAAK,WAAW,CAAC,KAAK,CAAC;gBACvB,KAAK,WAAW,CAAC,MAAM,CAAC;gBACxB,KAAK,WAAW,CAAC,MAAM,CAAC;gBACxB,KAAK,WAAW,CAAC,MAAM,CAAC;gBACxB,KAAK,WAAW,CAAC,IAAI,CAAC;gBACtB,KAAK,WAAW,CAAC,KAAK,CAAC;gBACvB,KAAK,WAAW,CAAC,KAAK,CAAC;gBACvB,KAAK,WAAW,CAAC,KAAK;oBACtB;wBACI,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,sBAAc,EAAE,IAAI,CAAC,CAAC,CAAC;wBAC/D,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC/B,MAAM;qBACT;gBACD,KAAK,WAAW,CAAC,QAAQ;oBACrB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACzB,MAAM;gBACV,KAAK,WAAW,CAAC,SAAS;oBACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBAC1B,MAAM;gBACV,KAAK,cAAc,CAAC,IAAI,CAAC;gBACzB,KAAK,cAAc,CAAC,GAAG;oBACnB,OAAO;gBACX;oBACI,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;aAChD;SACJ;IACL,CAAC;CACJ;AA/JD,4BA+JC;AAEA;;;GAGG;AACJ,MAAa,WAAY,SAAQ,QAAQ;IACrC,MAAM,CAAC,IAAI,CAAC,MAAkB;QAC1B,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,MAAM,UAAU,GAAG,IAAI,KAAK,EAAY,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACjC,qBAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACvE,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ;AARD,kCAQC;AAED,SAAgB,sBAAsB,CAClC,IAAe,EACf,OAAe;IAEf,IAAI,IAAI,YAAY,QAAQ,EAAE;QAC1B,OAAO;KACV;IACD,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AARD,wDAQC;AAED,SAAgB,sBAAsB,CAClC,IAAe,EACf,OAAe;IAEf,IAAI,IAAI,YAAY,QAAQ,EAAE;QAC1B,OAAO;KACV;IACD,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC;AARD,wDAQC;AAED,SAAgB,oBAAoB,CAChC,IAAe,EACf,OAAe;IAEf,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;QAC1B,OAAO;KACV;IACD,yBAAyB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC;AARD,oDAQC;AAED,SAAgB,kBAAkB,CAC9B,IAAe,EACf,OAAe;IAEf,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE;QAC3B,OAAO;KACV;IACD,yBAAyB,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC;AARD,gDAQC;AAED,SAAS,yBAAyB,CAC9B,IAAe,EACf,gBAA0B,EAC1B,OAAe;IAEf,MAAM,IAAI,gCAAiB,CACvB,wBAAwB,EACxB,OAAO,EACP,oCAAe,CAAC,uBAAuB,EACvC;QACI,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC;QAC3B,gBAAgB;KACnB,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,KAAgB;IACjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC3B,OAAO,QAAQ,CAAC;KACnB;SAAM,IAAG,KAAK,YAAY,QAAQ,EAAE;QACjC,OAAO,UAAU,CAAC;KACrB;SAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;QAClC,OAAO,UAAU,CAAC;KACrB;SAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;QACnC,OAAO,SAAS,CAAC;KACpB;IACD,OAAO,aAAa,CAAC;AACzB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/**\n * Data representation which is followed(zipIt Protocol) here is described in this document:\n * https://microsoft.sharepoint-df.com/:w:/t/ODSPFileStore/ER06b64K_XdDjEyAKl-UT60BJiId39SCVkYSyo_2pvH9gQ?e=KYQ0c5\n*/\n\nimport { assert, IsoBuffer, Uint8ArrayToArrayBuffer, Uint8ArrayToString } from \"@fluidframework/common-utils\";\nimport { NonRetryableError } from \"@fluidframework/driver-utils\";\nimport { DriverErrorType } from \"@fluidframework/driver-definitions\";\nimport { ReadBuffer } from \"./ReadBufferUtils\";\n\n// eslint-disable-next-line max-len\n// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents\n/**\n * Control codes used by tree serialization / decentralization code. Same as on server. These can be found on\n * filestore code on server too at above link.\n */\nexport enum MarkerCodes {\n BoolTrue = 11, // value = true\n BoolFalse = 12, // value = false\n\n StringEmpty = 13, // value = \"\"\n String8Length = 14, // unsigned-8-bit little-endian length, follows by UTF-8 bytes of length\n String16Length = 15, // unsigned-16-bit little-endian length, follows by UTF-8 bytes of length\n String32Length = 16, // unsigned-32-bit little-endian length, follows by UTF-8 bytes of length\n\n ConstString8Id = 17, // unsigned-8-bit little-endian const string id follows\n ConstString16Id = 18, // unsigned-16-bit little-endian const string id follows\n ConstString32Id = 19, // unsigned-32-bit little-endian const string id follows\n ConstStringDeclare = 20, // Code for declaring a const string with size <= 1 byte\n ConstStringDeclareBig = 21, // Code for declaring a const string with size > 1 byte. It is represented in 4 bytes.\n\n Int0 = 1, // value = 0\n UInt8 = 3, // unsigned-8-bit little-endian follows\n UInt16 = 5, // unsigned-16-bit little-endian follows\n UInt32 = 7, // unsigned-32-bit little-endian follows\n UInt64 = 9, // unsigned-64-bit little-endian follows\n Int8 = 2, // signed-8-bit little-endian follows\n Int16 = 4, // signed-16-bit little-endian follows\n Int32 = 6, // signed-32-bit little-endian follows\n Int64 = 8, // signed-64-bit little-endian follows\n\n BinaryEmpty = 32, // value = byte[]\n BinarySingle8 = 33, // unsigned-8-bit little-endian length, follows by bytes of length\n BinarySingle16 = 34, // unsigned-16-bit little-endian length, follows by bytes of length\n BinarySingle32 = 35, // unsigned-32-bit little-endian length, follows by bytes of length\n BinarySingle64 = 36, // unsigned-64-bit little-endian length, follows by bytes of length\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the start of sections.\n */\nexport enum MarkerCodesStart {\n \"list\" = 49,\n \"set\" = 51,\n}\n\n/**\n * Control codes used by tree serialization / decentralization code. They mark the end of sections.\n */\nexport enum MarkerCodesEnd {\n \"list\" = 50,\n \"set\" = 52,\n}\n\n/**\n * This contains mapping of Marker Codes to number of bytes in which the corresponding data\n * will be stored.\n*/\nexport const codeToBytesMap = {\n // Integer code to bytes\n 1: 0,\n 2: 1,\n 3: 1,\n 4: 2,\n 5: 2,\n 6: 4,\n 7: 4,\n 8: 8,\n 9: 8,\n\n // String code to Bytes\n 13: 0,\n 14: 1,\n 15: 2,\n 16: 4,\n\n 17: 1,\n 18: 2,\n 19: 4,\n\n 20: 1,\n 21: 4,\n\n // Binary code to bytes\n 32: 0,\n 33: 1,\n 34: 2,\n 35: 4,\n 36: 8,\n};\n\nexport function getValueSafely(map: {[index: number]: number}, key: number) {\n const val = map[key];\n assert(val !== undefined, 0x287 /* `key= ${key} must exist in the map` */);\n return val;\n}\n\nexport function getAndValidateNodeProps(node: NodeCore, props: string[], enforceAllProps = true) {\n const propSet = new Set(props);\n const res: Record<string, NodeTypes> = {};\n for (const [keyNode, valueNode] of node.iteratePairs()) {\n assertBlobCoreInstance(keyNode, \"keynode should be a blob\");\n const keyStr = keyNode.toString();\n if (propSet.has(keyStr)) {\n propSet.delete(keyStr);\n res[keyStr] = valueNode;\n }\n }\n if (enforceAllProps) {\n assert(propSet.size === 0, 0x288 /* `All properties should exist, Not found: ${[...propSet.keys()]}` */);\n }\n return res;\n}\n\nexport function iteratePairs<T>(it: IterableIterator<T>) {\n const res: IterableIterator<[T, T]> = {\n next: () => {\n const a = it.next();\n if (a.done) {\n return { value: undefined, done: true };\n }\n const b = it.next();\n assert(b.done !== true, 0x22b /* \"Should be a pair\" */);\n return { value: [a.value, b.value], done: b.done };\n },\n [Symbol.iterator]: () => { return res; },\n };\n return res;\n}\n\n/**\n * Helper function that returns iterator from an object\n * @param obj - object that supports iteration\n */\nexport function iterate<T>(obj: {[Symbol.iterator]: () => IterableIterator<T>}) {\n return obj[Symbol.iterator]();\n}\n\n/**\n * Base class to represent binary blob element.\n * Binary blob is one of three types supported as a leaf node of a tree.\n * Note: concrete implementations (derived classes) are not exposed from this module\n */\nexport abstract class BlobCore {\n public abstract get buffer(): Uint8Array;\n public get arrayBuffer(): ArrayBufferLike {\n return Uint8ArrayToArrayBuffer(this.buffer);\n }\n\n /**\n * Represents a blob.\n * @param constString - Whether it contains const string declaration.\n * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.\n */\n constructor(public readonly constString: boolean, public readonly useUtf8Code: boolean = false) {}\n\n public toString() {\n return Uint8ArrayToString(this.buffer, \"utf-8\");\n }\n}\n\n/**\n * \"deep copy\" blob, holds to binary data passed in\n * It is called deep copy as a counter-part to BlobShallowCopy, which\n * is a reference to underlying binary stream (ReadBuffer).\n*/\nclass BlobDeepCopy extends BlobCore {\n /**\n * Represents a deep copy of the blob.\n * @param data - Data array of the blob\n * @param constString - Whether it contains const string declaration.\n * @param useUtf8Code - Represents if the utf8 string marker code should be used when representing.\n */\n constructor(protected readonly data: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {\n super(constString, useUtf8Code);\n }\n\n public get buffer() {\n return this.data;\n }\n\n public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {\n const length = buffer.read(lengthLen);\n const data = new Uint8Array(length);\n for (let counter = 0; counter < length; counter++) {\n data[counter] = buffer.read();\n }\n return new BlobDeepCopy(data, constString);\n }\n}\n\n/**\n * Shallow copy blob, keeps a reference to portion of ReadBuffer\n * it was constructed from. It takes much less memory compared to BlobDeepCopy\n */\n export class BlobShallowCopy extends BlobCore {\n /**\n * Represents a shallow copy of the blob. It is not a separate blob, just reference to original blobs.\n * @param data - Data array of the blob\n * @param start - Start point of the blob in the buffer.\n * @param end - End point of the blob in the buffer.\n * @param constString - Whether it contains const string declaration.\n */\n constructor(\n protected data: ReadBuffer,\n protected start: number,\n protected end: number,\n constString: boolean,\n ) {\n super(constString);\n }\n\n public get buffer() {\n return this.data.buffer.subarray(this.start, this.end);\n }\n\n public static read(buffer: ReadBuffer, lengthLen: number, constString: boolean): BlobCore {\n const length = buffer.read(lengthLen);\n const pos = buffer.pos;\n buffer.skip(length);\n return new BlobShallowCopy(buffer, pos, pos + length, constString);\n }\n}\n\nexport const addStringProperty = (node: NodeCore, a: string, b: string, encodeValAsConstString: boolean = false) =>\n { node.addString(a, true); node.addString(b, encodeValAsConstString); };\nexport const addNumberProperty = (node: NodeCore, a: string, b: number) =>\n { node.addString(a, true); node.addNumber(b); };\nexport const addBoolProperty = (node: NodeCore, a: string, b: boolean) =>\n { node.addString(a, true); node.addBool(b); };\n\n/**\n * Three leaf types supported by tree:\n * 1. Node (sub-tree)\n * 2. binary blob\n * 3. integer\n * 4. boolean\n */\nexport type NodeTypes = NodeCore | BlobCore | number | boolean;\n\nexport type NodeCoreTypes = \"list\" | \"set\";\n\n/**\n * Node - node in the tree (non-leaf element of the tree)\n */\nexport class NodeCore {\n // It is an array of nodes.\n private readonly children: NodeTypes[] = [];\n public get nodes() {\n return this.children;\n }\n\n constructor(public type: NodeCoreTypes = \"set\") {}\n\n public [Symbol.iterator]() {\n return this.children[Symbol.iterator]();\n }\n\n public iteratePairs() {\n assert((this.length % 2) === 0, 0x22c /* \"reading pairs\" */);\n return iteratePairs(iterate(this));\n }\n\n public get length() { return this.children.length; }\n\n public get(index: number) { return this.children[index]; }\n\n public getString(index: number): string {\n const node = this.children[index];\n assertBlobCoreInstance(node, \"getString should return stringblob\");\n return node.toString();\n }\n\n public getBlob(index: number): BlobCore {\n const node = this.children[index];\n assertBlobCoreInstance(node, \"getBlob should return a blob\");\n return node;\n }\n\n public getNode(index: number): NodeCore\n {\n const node = this.children[index];\n assertNodeCoreInstance(node, \"getNode should return a node\");\n return node;\n }\n\n public getNumber(index: number): number\n {\n const node = this.children[index];\n assertNumberInstance(node, \"getNumber should return a number\");\n return node;\n }\n\n public getBool(index: number): boolean {\n const node = this.children[index];\n assertBoolInstance(node, \"getBool should return a boolean\");\n return node;\n }\n\n public addNode(type?: NodeCoreTypes): NodeCore {\n const node = new NodeCore(type);\n this.children.push(node);\n return node;\n }\n\n public addBlob(blob: Uint8Array, constString: boolean, useUtf8Code: boolean = false) {\n this.children.push(new BlobDeepCopy(blob, constString, useUtf8Code));\n }\n\n public addString(payload: string, constString: boolean) {\n this.addBlob(IsoBuffer.from(payload, \"utf-8\"), constString, true);\n }\n\n public addNumber(payload: number | undefined) {\n assert(Number.isInteger(payload), 0x231 /* \"Number should be an integer\" */);\n assert(payload !== undefined && payload >= 0, 0x232 /* \"Payload should not be negative\" */);\n this.children.push(payload);\n }\n\n public addBool(payload: boolean) {\n this.children.push(payload);\n }\n\n /**\n * Load and parse the buffer into a tree.\n * @param buffer - buffer to read from.\n */\n protected load(buffer: ReadBuffer, dictionary: BlobCore[]) {\n for (;!buffer.eof;) {\n let childValue: NodeTypes | undefined;\n const code = buffer.read();\n switch (code) {\n case MarkerCodesStart.list:\n case MarkerCodesStart.set: {\n childValue = new NodeCore(code === MarkerCodesStart.set ? \"set\" : \"list\");\n this.children.push(childValue);\n childValue.load(buffer, dictionary);\n break;\n }\n case MarkerCodes.ConstStringDeclare:\n case MarkerCodes.ConstStringDeclareBig:\n {\n const stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n const constString = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), true);\n dictionary[stringId] = constString;\n break;\n }\n case MarkerCodes.ConstString8Id:\n case MarkerCodes.ConstString16Id:\n case MarkerCodes.ConstString32Id:\n {\n const stringId = buffer.read(getValueSafely(codeToBytesMap, code));\n childValue = dictionary[stringId];\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.StringEmpty:\n case MarkerCodes.String8Length:\n case MarkerCodes.String16Length:\n case MarkerCodes.String32Length:\n case MarkerCodes.BinaryEmpty:\n case MarkerCodes.BinarySingle8:\n case MarkerCodes.BinarySingle16:\n case MarkerCodes.BinarySingle32:\n case MarkerCodes.BinarySingle64:\n {\n childValue = BlobShallowCopy.read(buffer, getValueSafely(codeToBytesMap, code), false);\n this.children.push(childValue);\n break;\n }\n // If integer is 0.\n case MarkerCodes.Int0:\n {\n childValue = 0;\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.UInt8:\n case MarkerCodes.UInt16:\n case MarkerCodes.UInt32:\n case MarkerCodes.UInt64:\n case MarkerCodes.Int8:\n case MarkerCodes.Int16:\n case MarkerCodes.Int32:\n case MarkerCodes.Int64:\n {\n childValue = buffer.read(getValueSafely(codeToBytesMap, code));\n this.children.push(childValue);\n break;\n }\n case MarkerCodes.BoolTrue:\n this.children.push(true);\n break;\n case MarkerCodes.BoolFalse:\n this.children.push(false);\n break;\n case MarkerCodesEnd.list:\n case MarkerCodesEnd.set:\n return;\n default:\n throw new Error(`Invalid code: ${code}`);\n }\n }\n }\n}\n\n /**\n * TreeBuilder - Root of the tree.\n * Provides loading and serialization capabilities.\n */\nexport class TreeBuilder extends NodeCore {\n static load(buffer: ReadBuffer): TreeBuilder {\n const builder = new TreeBuilder();\n const dictionary = new Array<BlobCore>();\n builder.load(buffer, dictionary);\n assert(buffer.eof, 0x233 /* \"Unexpected data at the end of buffer\" */);\n return builder;\n }\n}\n\nexport function assertBlobCoreInstance(\n node: NodeTypes,\n message: string,\n): asserts node is BlobCore {\n if (node instanceof BlobCore) {\n return;\n }\n throwBufferParseException(node, \"BlobCore\", message);\n}\n\nexport function assertNodeCoreInstance(\n node: NodeTypes,\n message: string,\n): asserts node is NodeCore {\n if (node instanceof NodeCore) {\n return;\n }\n throwBufferParseException(node, \"NodeCore\", message);\n}\n\nexport function assertNumberInstance(\n node: NodeTypes,\n message: string,\n): asserts node is number {\n if (typeof node === \"number\") {\n return;\n }\n throwBufferParseException(node, \"Number\", message);\n}\n\nexport function assertBoolInstance(\n node: NodeTypes,\n message: string,\n): asserts node is boolean {\n if (typeof node === \"boolean\") {\n return;\n }\n throwBufferParseException(node, \"Boolean\", message);\n}\n\nfunction throwBufferParseException(\n node: NodeTypes,\n expectedNodeType: NodeType,\n message: string,\n): never {\n throw new NonRetryableError(\n \"bufferParsingException\",\n message,\n DriverErrorType.incorrectServerResponse,\n {\n nodeType: getNodeType(node),\n expectedNodeType,\n });\n}\n\nfunction getNodeType(value: NodeTypes): NodeType {\n if (typeof value === \"number\") {\n return \"Number\";\n } else if(value instanceof BlobCore) {\n return \"BlobCore\";\n } else if (value instanceof NodeCore) {\n return \"NodeCore\";\n } else if (typeof value === \"boolean\") {\n return \"Boolean\";\n }\n return \"UnknownType\";\n}\n\ntype NodeType = \"Number\" | \"BlobCore\" | \"NodeCore\" | \"Boolean\" | \"UnknownType\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"createFile.d.ts","sourceRoot":"","sources":["../src/createFile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,OAAO,EAAe,YAAY,EAAgB,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EACH,UAAU,EACV,+BAA+B,EAC/B,gBAAgB,EACnB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EACH,gBAAgB,EAGhB,mBAAmB,EAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGH,YAAY,EAGf,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CA6C3B;AAED,wBAAsB,uBAAuB,CACzC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,MAAM,CAAC,CA4CjB;AAED,wBAAsB,6BAA6B,CAC/C,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,YAAY,EAC9B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAgD9B;AA+BD;;GAEG;AACH,wBAAgB,wCAAwC,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAoDhG"}
1
+ {"version":3,"file":"createFile.d.ts","sourceRoot":"","sources":["../src/createFile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAe,YAAY,EAAgB,MAAM,sCAAsC,CAAC;AAC/F,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EACH,UAAU,EACV,+BAA+B,EAC/B,gBAAgB,EAEnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACH,gBAAgB,EAGhB,mBAAmB,EAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAGH,YAAY,EAGf,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAU9C;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,YAAY,GAAG,SAAS,EAC1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,UAAU,EACrB,gBAAgB,EAAE,OAAO,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CA8C3B;AAED,wBAAsB,uBAAuB,CACzC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,MAAM,CAAC,CA+CjB;AAED,wBAAsB,6BAA6B,CAC/C,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,gBAAgB,EAAE,YAAY,EAC9B,YAAY,EAAE,YAAY,GAC3B,OAAO,CAAC,mBAAmB,CAAC,CAmD9B;AA+BD;;GAEG;AACH,wBAAgB,wCAAwC,CAAC,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAoDhG"}
package/lib/createFile.js CHANGED
@@ -3,11 +3,12 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { assert, Uint8ArrayToString } from "@fluidframework/common-utils";
6
- import { getDocAttributesFromProtocolSummary } from "@fluidframework/driver-utils";
7
- import { fetchIncorrectResponse, invalidFileNameStatusCode, throwOdspNetworkError, } from "@fluidframework/odsp-doclib-utils";
6
+ import { getDocAttributesFromProtocolSummary, NonRetryableError } from "@fluidframework/driver-utils";
8
7
  import { getGitType } from "@fluidframework/protocol-base";
9
8
  import { SummaryType } from "@fluidframework/protocol-definitions";
10
9
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
10
+ import { OdspErrorType, } from "@fluidframework/odsp-driver-definitions";
11
+ import { DriverErrorType } from "@fluidframework/driver-definitions";
11
12
  import { getUrlAndHeadersWithAuth } from "./getUrlAndHeadersWithAuth";
12
13
  import { createCacheSnapshotKey, getWithRetryForTokenRefresh, getOrigin, } from "./odspUtils";
13
14
  import { createOdspUrl } from "./createOdspUrl";
@@ -26,7 +27,7 @@ const isInvalidFileName = (fileName) => {
26
27
  export async function createNewFluidFile(getStorageToken, newFileInfo, logger, createNewSummary, epochTracker, fileEntry, createNewCaching) {
27
28
  // Check for valid filename before the request to create file is actually made.
28
29
  if (isInvalidFileName(newFileInfo.filename)) {
29
- throwOdspNetworkError("invalidFilename", invalidFileNameStatusCode);
30
+ throw new NonRetryableError("createNewInvalidFilename", "Invalid filename", OdspErrorType.invalidFileNameError);
30
31
  }
31
32
  let itemId;
32
33
  let summaryHandle = "";
@@ -82,7 +83,7 @@ export async function createNewEmptyFluidFile(getStorageToken, newFileInfo, logg
82
83
  }, "createFile"), "createFile", logger);
83
84
  const content = fetchResponse.content;
84
85
  if (!content || !content.id) {
85
- throwOdspNetworkError("couldNotParseItemFromVroomResponse", fetchIncorrectResponse);
86
+ throw new NonRetryableError("createEmptyFileNoItemId", "ODSP CreateFile call returned no item ID", DriverErrorType.incorrectServerResponse);
86
87
  }
87
88
  event.end(Object.assign({ headers: Object.keys(headers).length !== 0 ? true : undefined }, fetchResponse.commonSpoHeaders));
88
89
  return content.id;
@@ -109,7 +110,7 @@ export async function createNewFluidFileFromSummary(getStorageToken, newFileInfo
109
110
  }, "createFile"), "createFile", logger);
110
111
  const content = fetchResponse.content;
111
112
  if (!content || !content.itemId) {
112
- throwOdspNetworkError("couldNotParseItemFromVroomResponse", fetchIncorrectResponse);
113
+ throw new NonRetryableError("createFileNoItemId", "ODSP CreateFile call returned no item ID", DriverErrorType.incorrectServerResponse);
113
114
  }
114
115
  event.end(Object.assign({ headers: Object.keys(headers).length !== 0 ? true : undefined, attempts: options.refresh ? 2 : 1 }, fetchResponse.commonSpoHeaders));
115
116
  return content;
@@ -1 +1 @@
1
- {"version":3,"file":"createFile.js","sourceRoot":"","sources":["../src/createFile.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, Uint8ArrayToString } from \"@fluidframework/common-utils\";\nimport { getDocAttributesFromProtocolSummary } from \"@fluidframework/driver-utils\";\nimport {\n fetchIncorrectResponse,\n invalidFileNameStatusCode,\n throwOdspNetworkError,\n} from \"@fluidframework/odsp-doclib-utils\";\nimport { getGitType } from \"@fluidframework/protocol-base\";\nimport { SummaryType, ISummaryTree, ISummaryBlob } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport {\n IFileEntry,\n InstrumentedStorageTokenFetcher,\n IOdspResolvedUrl,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport {\n IOdspSummaryTree,\n OdspSummaryTreeValue,\n OdspSummaryTreeEntry,\n ICreateFileResponse,\n IOdspSummaryPayload,\n} from \"./contracts\";\nimport { getUrlAndHeadersWithAuth } from \"./getUrlAndHeadersWithAuth\";\nimport {\n createCacheSnapshotKey,\n getWithRetryForTokenRefresh,\n INewFileInfo,\n getOrigin,\n ISnapshotContents,\n} from \"./odspUtils\";\nimport { createOdspUrl } from \"./createOdspUrl\";\nimport { getApiRoot } from \"./odspUrlHelper\";\nimport { EpochTracker } from \"./epochTracker\";\nimport { OdspDriverUrlResolver } from \"./odspDriverUrlResolver\";\nimport { convertCreateNewSummaryTreeToTreeAndBlobs } from \"./createNewUtils\";\nimport { runWithRetry } from \"./retryUtils\";\n\nconst isInvalidFileName = (fileName: string): boolean => {\n const invalidCharsRegex = /[\"*/:<>?\\\\|]+/g;\n return !!fileName.match(invalidCharsRegex);\n};\n\n/**\n * Creates a new Fluid file.\n * Returns resolved url\n */\nexport async function createNewFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n createNewSummary: ISummaryTree | undefined,\n epochTracker: EpochTracker,\n fileEntry: IFileEntry,\n createNewCaching: boolean,\n): Promise<IOdspResolvedUrl> {\n // Check for valid filename before the request to create file is actually made.\n if (isInvalidFileName(newFileInfo.filename)) {\n throwOdspNetworkError(\"invalidFilename\", invalidFileNameStatusCode);\n }\n\n let itemId: string;\n let summaryHandle: string = \"\";\n let sharingLink: string | undefined;\n let sharingLinkErrorReason: string | undefined;\n if (createNewSummary === undefined) {\n itemId = await createNewEmptyFluidFile(getStorageToken, newFileInfo, logger, epochTracker);\n } else {\n const content = await createNewFluidFileFromSummary(\n getStorageToken, newFileInfo, logger, createNewSummary, epochTracker);\n itemId = content.itemId;\n summaryHandle = content.id;\n sharingLink = content.sharingLink;\n sharingLinkErrorReason = content.sharingLinkErrorReason;\n }\n\n const odspUrl = createOdspUrl({... newFileInfo, itemId, dataStorePath: \"/\"});\n const resolver = new OdspDriverUrlResolver();\n const odspResolvedUrl = await resolver.resolve({ url: odspUrl });\n fileEntry.docId = odspResolvedUrl.hashedDocumentId;\n fileEntry.resolvedUrl = odspResolvedUrl;\n\n if(sharingLink || sharingLinkErrorReason) {\n odspResolvedUrl.shareLinkInfo = {\n createLink: {\n type: newFileInfo.createLinkType,\n link: sharingLink,\n error: sharingLinkErrorReason,\n },\n };\n }\n\n if (createNewSummary !== undefined && createNewCaching) {\n assert(summaryHandle !== undefined, 0x203 /* \"Summary handle is undefined\" */);\n // converting summary and getting sequence number\n const snapshot: ISnapshotContents = convertCreateNewSummaryTreeToTreeAndBlobs(createNewSummary, summaryHandle);\n // caching the converted summary\n await epochTracker.put(createCacheSnapshotKey(odspResolvedUrl), snapshot);\n }\n return odspResolvedUrl;\n}\n\nexport async function createNewEmptyFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n epochTracker: EpochTracker,\n): Promise<string> {\n const filePath = newFileInfo.filePath ? encodeURIComponent(`/${newFileInfo.filePath}`) : \"\";\n // add .tmp extension to empty file (host is expected to rename)\n const encodedFilename = encodeURIComponent(`${newFileInfo.filename}.tmp`);\n const initialUrl =\n `${getApiRoot(getOrigin(newFileInfo.siteUrl))}/drives/${newFileInfo.driveId}/items/root:/${filePath\n }/${encodedFilename}:/content?@name.conflictBehavior=rename&select=id,name,parentReference`;\n\n return getWithRetryForTokenRefresh(async (options) => {\n const storageToken = await getStorageToken(options, \"CreateNewFile\");\n\n return PerformanceEvent.timedExecAsync(\n logger,\n { eventName: \"createNewEmptyFile\" },\n async (event) => {\n const { url, headers } = getUrlAndHeadersWithAuth(initialUrl, storageToken);\n headers[\"Content-Type\"] = \"application/json\";\n\n const fetchResponse = await runWithRetry(\n async () => epochTracker.fetchAndParseAsJSON<ICreateFileResponse>(\n url,\n {\n body: undefined,\n headers,\n method: \"PUT\",\n },\n \"createFile\",\n ),\n \"createFile\",\n logger,\n );\n\n const content = fetchResponse.content;\n if (!content || !content.id) {\n throwOdspNetworkError(\"couldNotParseItemFromVroomResponse\", fetchIncorrectResponse);\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n ...fetchResponse.commonSpoHeaders,\n });\n return content.id;\n },\n { end: true, cancel: \"error\" });\n });\n}\n\nexport async function createNewFluidFileFromSummary(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n createNewSummary: ISummaryTree,\n epochTracker: EpochTracker,\n): Promise<ICreateFileResponse> {\n const filePath = newFileInfo.filePath ? encodeURIComponent(`/${newFileInfo.filePath}`) : \"\";\n const encodedFilename = encodeURIComponent(newFileInfo.filename);\n const baseUrl =\n `${getApiRoot(getOrigin(newFileInfo.siteUrl))}/drives/${newFileInfo.driveId}/items/root:` +\n `${filePath}/${encodedFilename}`;\n\n const containerSnapshot = convertSummaryIntoContainerSnapshot(createNewSummary);\n const initialUrl = `${baseUrl}:/opStream/snapshots/snapshot${newFileInfo.createLinkType ?\n `?createLinkType=${newFileInfo.createLinkType}` : \"\"}`;\n\n return getWithRetryForTokenRefresh(async (options) => {\n const storageToken = await getStorageToken(options, \"CreateNewFile\");\n\n return PerformanceEvent.timedExecAsync(\n logger,\n { eventName: \"createNewFile\" },\n async (event) => {\n const { url, headers } = getUrlAndHeadersWithAuth(initialUrl, storageToken);\n headers[\"Content-Type\"] = \"application/json\";\n\n const fetchResponse = await runWithRetry(\n async () => epochTracker.fetchAndParseAsJSON<ICreateFileResponse>(\n url,\n {\n body: JSON.stringify(containerSnapshot),\n headers,\n method: \"POST\",\n },\n \"createFile\",\n ),\n \"createFile\",\n logger,\n );\n\n const content = fetchResponse.content;\n if (!content || !content.itemId) {\n throwOdspNetworkError(\"couldNotParseItemFromVroomResponse\", fetchIncorrectResponse);\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n attempts: options.refresh ? 2 : 1,\n ...fetchResponse.commonSpoHeaders,\n });\n return content;\n },\n );\n });\n}\n\nfunction convertSummaryIntoContainerSnapshot(createNewSummary: ISummaryTree) {\n const appSummary = createNewSummary.tree[\".app\"] as ISummaryTree;\n const protocolSummary = createNewSummary.tree[\".protocol\"] as ISummaryTree;\n if (!(appSummary && protocolSummary)) {\n throw new Error(\"App and protocol summary required for create new path!!\");\n }\n const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);\n const attributesSummaryBlob: ISummaryBlob = {\n type: SummaryType.Blob,\n content: JSON.stringify(documentAttributes),\n };\n protocolSummary.tree.attributes = attributesSummaryBlob;\n const convertedCreateNewSummary: ISummaryTree = {\n type: SummaryType.Tree,\n tree: {\n \".protocol\": protocolSummary,\n \".app\": appSummary,\n },\n };\n const snapshotTree = convertSummaryToSnapshotTreeForCreateNew(convertedCreateNewSummary);\n const snapshot: IOdspSummaryPayload = {\n entries: snapshotTree.entries ?? [],\n message: \"app\",\n sequenceNumber: documentAttributes.sequenceNumber,\n type: \"container\",\n };\n return snapshot;\n}\n\n/**\n * Converts a summary tree to ODSP tree\n */\nexport function convertSummaryToSnapshotTreeForCreateNew(summary: ISummaryTree): IOdspSummaryTree {\n const snapshotTree: IOdspSummaryTree = {\n type: \"tree\",\n entries: [],\n };\n\n const keys = Object.keys(summary.tree);\n for (const key of keys) {\n const summaryObject = summary.tree[key];\n\n let value: OdspSummaryTreeValue;\n // Tracks if an entry is unreferenced. Currently, only tree entries can be marked as unreferenced. If the\n // property is not present, the tree entry is considered referenced. If the property is present and is true,\n // the tree entry is considered unreferenced.\n let unreferenced: true | undefined;\n\n switch (summaryObject.type) {\n case SummaryType.Tree: {\n value = convertSummaryToSnapshotTreeForCreateNew(summaryObject);\n unreferenced = summaryObject.unreferenced;\n break;\n }\n case SummaryType.Blob: {\n const content = typeof summaryObject.content === \"string\" ?\n summaryObject.content : Uint8ArrayToString(summaryObject.content, \"base64\");\n const encoding = typeof summaryObject.content === \"string\" ? \"utf-8\" : \"base64\";\n\n value = {\n type: \"blob\",\n content,\n encoding,\n };\n break;\n }\n case SummaryType.Handle: {\n throw new Error(\"No handle should be present for first summary!!\");\n }\n default: {\n throw new Error(`Unknown tree type ${summaryObject.type}`);\n }\n }\n\n const entry: OdspSummaryTreeEntry = {\n path: encodeURIComponent(key),\n type: getGitType(summaryObject),\n value,\n unreferenced,\n };\n snapshotTree.entries?.push(entry);\n }\n\n return snapshotTree;\n}\n"]}
1
+ {"version":3,"file":"createFile.js","sourceRoot":"","sources":["../src/createFile.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, Uint8ArrayToString } from \"@fluidframework/common-utils\";\nimport { getDocAttributesFromProtocolSummary, NonRetryableError } from \"@fluidframework/driver-utils\";\nimport { getGitType } from \"@fluidframework/protocol-base\";\nimport { SummaryType, ISummaryTree, ISummaryBlob } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport {\n IFileEntry,\n InstrumentedStorageTokenFetcher,\n IOdspResolvedUrl,\n OdspErrorType,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { DriverErrorType } from \"@fluidframework/driver-definitions\";\nimport {\n IOdspSummaryTree,\n OdspSummaryTreeValue,\n OdspSummaryTreeEntry,\n ICreateFileResponse,\n IOdspSummaryPayload,\n} from \"./contracts\";\nimport { getUrlAndHeadersWithAuth } from \"./getUrlAndHeadersWithAuth\";\nimport {\n createCacheSnapshotKey,\n getWithRetryForTokenRefresh,\n INewFileInfo,\n getOrigin,\n ISnapshotContents,\n} from \"./odspUtils\";\nimport { createOdspUrl } from \"./createOdspUrl\";\nimport { getApiRoot } from \"./odspUrlHelper\";\nimport { EpochTracker } from \"./epochTracker\";\nimport { OdspDriverUrlResolver } from \"./odspDriverUrlResolver\";\nimport { convertCreateNewSummaryTreeToTreeAndBlobs } from \"./createNewUtils\";\nimport { runWithRetry } from \"./retryUtils\";\n\nconst isInvalidFileName = (fileName: string): boolean => {\n const invalidCharsRegex = /[\"*/:<>?\\\\|]+/g;\n return !!fileName.match(invalidCharsRegex);\n};\n\n/**\n * Creates a new Fluid file.\n * Returns resolved url\n */\nexport async function createNewFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n createNewSummary: ISummaryTree | undefined,\n epochTracker: EpochTracker,\n fileEntry: IFileEntry,\n createNewCaching: boolean,\n): Promise<IOdspResolvedUrl> {\n // Check for valid filename before the request to create file is actually made.\n if (isInvalidFileName(newFileInfo.filename)) {\n throw new NonRetryableError(\n \"createNewInvalidFilename\", \"Invalid filename\", OdspErrorType.invalidFileNameError);\n }\n\n let itemId: string;\n let summaryHandle: string = \"\";\n let sharingLink: string | undefined;\n let sharingLinkErrorReason: string | undefined;\n if (createNewSummary === undefined) {\n itemId = await createNewEmptyFluidFile(getStorageToken, newFileInfo, logger, epochTracker);\n } else {\n const content = await createNewFluidFileFromSummary(\n getStorageToken, newFileInfo, logger, createNewSummary, epochTracker);\n itemId = content.itemId;\n summaryHandle = content.id;\n sharingLink = content.sharingLink;\n sharingLinkErrorReason = content.sharingLinkErrorReason;\n }\n\n const odspUrl = createOdspUrl({... newFileInfo, itemId, dataStorePath: \"/\"});\n const resolver = new OdspDriverUrlResolver();\n const odspResolvedUrl = await resolver.resolve({ url: odspUrl });\n fileEntry.docId = odspResolvedUrl.hashedDocumentId;\n fileEntry.resolvedUrl = odspResolvedUrl;\n\n if(sharingLink || sharingLinkErrorReason) {\n odspResolvedUrl.shareLinkInfo = {\n createLink: {\n type: newFileInfo.createLinkType,\n link: sharingLink,\n error: sharingLinkErrorReason,\n },\n };\n }\n\n if (createNewSummary !== undefined && createNewCaching) {\n assert(summaryHandle !== undefined, 0x203 /* \"Summary handle is undefined\" */);\n // converting summary and getting sequence number\n const snapshot: ISnapshotContents = convertCreateNewSummaryTreeToTreeAndBlobs(createNewSummary, summaryHandle);\n // caching the converted summary\n await epochTracker.put(createCacheSnapshotKey(odspResolvedUrl), snapshot);\n }\n return odspResolvedUrl;\n}\n\nexport async function createNewEmptyFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n epochTracker: EpochTracker,\n): Promise<string> {\n const filePath = newFileInfo.filePath ? encodeURIComponent(`/${newFileInfo.filePath}`) : \"\";\n // add .tmp extension to empty file (host is expected to rename)\n const encodedFilename = encodeURIComponent(`${newFileInfo.filename}.tmp`);\n const initialUrl =\n `${getApiRoot(getOrigin(newFileInfo.siteUrl))}/drives/${newFileInfo.driveId}/items/root:/${filePath\n }/${encodedFilename}:/content?@name.conflictBehavior=rename&select=id,name,parentReference`;\n\n return getWithRetryForTokenRefresh(async (options) => {\n const storageToken = await getStorageToken(options, \"CreateNewFile\");\n\n return PerformanceEvent.timedExecAsync(\n logger,\n { eventName: \"createNewEmptyFile\" },\n async (event) => {\n const { url, headers } = getUrlAndHeadersWithAuth(initialUrl, storageToken);\n headers[\"Content-Type\"] = \"application/json\";\n\n const fetchResponse = await runWithRetry(\n async () => epochTracker.fetchAndParseAsJSON<ICreateFileResponse>(\n url,\n {\n body: undefined,\n headers,\n method: \"PUT\",\n },\n \"createFile\",\n ),\n \"createFile\",\n logger,\n );\n\n const content = fetchResponse.content;\n if (!content || !content.id) {\n throw new NonRetryableError(\n \"createEmptyFileNoItemId\",\n \"ODSP CreateFile call returned no item ID\",\n DriverErrorType.incorrectServerResponse);\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n ...fetchResponse.commonSpoHeaders,\n });\n return content.id;\n },\n { end: true, cancel: \"error\" });\n });\n}\n\nexport async function createNewFluidFileFromSummary(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n createNewSummary: ISummaryTree,\n epochTracker: EpochTracker,\n): Promise<ICreateFileResponse> {\n const filePath = newFileInfo.filePath ? encodeURIComponent(`/${newFileInfo.filePath}`) : \"\";\n const encodedFilename = encodeURIComponent(newFileInfo.filename);\n const baseUrl =\n `${getApiRoot(getOrigin(newFileInfo.siteUrl))}/drives/${newFileInfo.driveId}/items/root:` +\n `${filePath}/${encodedFilename}`;\n\n const containerSnapshot = convertSummaryIntoContainerSnapshot(createNewSummary);\n const initialUrl = `${baseUrl}:/opStream/snapshots/snapshot${newFileInfo.createLinkType ?\n `?createLinkType=${newFileInfo.createLinkType}` : \"\"}`;\n\n return getWithRetryForTokenRefresh(async (options) => {\n const storageToken = await getStorageToken(options, \"CreateNewFile\");\n\n return PerformanceEvent.timedExecAsync(\n logger,\n { eventName: \"createNewFile\" },\n async (event) => {\n const { url, headers } = getUrlAndHeadersWithAuth(initialUrl, storageToken);\n headers[\"Content-Type\"] = \"application/json\";\n\n const fetchResponse = await runWithRetry(\n async () => epochTracker.fetchAndParseAsJSON<ICreateFileResponse>(\n url,\n {\n body: JSON.stringify(containerSnapshot),\n headers,\n method: \"POST\",\n },\n \"createFile\",\n ),\n \"createFile\",\n logger,\n );\n\n const content = fetchResponse.content;\n if (!content || !content.itemId) {\n throw new NonRetryableError(\n \"createFileNoItemId\",\n \"ODSP CreateFile call returned no item ID\",\n DriverErrorType.incorrectServerResponse);\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n attempts: options.refresh ? 2 : 1,\n ...fetchResponse.commonSpoHeaders,\n });\n return content;\n },\n );\n });\n}\n\nfunction convertSummaryIntoContainerSnapshot(createNewSummary: ISummaryTree) {\n const appSummary = createNewSummary.tree[\".app\"] as ISummaryTree;\n const protocolSummary = createNewSummary.tree[\".protocol\"] as ISummaryTree;\n if (!(appSummary && protocolSummary)) {\n throw new Error(\"App and protocol summary required for create new path!!\");\n }\n const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);\n const attributesSummaryBlob: ISummaryBlob = {\n type: SummaryType.Blob,\n content: JSON.stringify(documentAttributes),\n };\n protocolSummary.tree.attributes = attributesSummaryBlob;\n const convertedCreateNewSummary: ISummaryTree = {\n type: SummaryType.Tree,\n tree: {\n \".protocol\": protocolSummary,\n \".app\": appSummary,\n },\n };\n const snapshotTree = convertSummaryToSnapshotTreeForCreateNew(convertedCreateNewSummary);\n const snapshot: IOdspSummaryPayload = {\n entries: snapshotTree.entries ?? [],\n message: \"app\",\n sequenceNumber: documentAttributes.sequenceNumber,\n type: \"container\",\n };\n return snapshot;\n}\n\n/**\n * Converts a summary tree to ODSP tree\n */\nexport function convertSummaryToSnapshotTreeForCreateNew(summary: ISummaryTree): IOdspSummaryTree {\n const snapshotTree: IOdspSummaryTree = {\n type: \"tree\",\n entries: [],\n };\n\n const keys = Object.keys(summary.tree);\n for (const key of keys) {\n const summaryObject = summary.tree[key];\n\n let value: OdspSummaryTreeValue;\n // Tracks if an entry is unreferenced. Currently, only tree entries can be marked as unreferenced. If the\n // property is not present, the tree entry is considered referenced. If the property is present and is true,\n // the tree entry is considered unreferenced.\n let unreferenced: true | undefined;\n\n switch (summaryObject.type) {\n case SummaryType.Tree: {\n value = convertSummaryToSnapshotTreeForCreateNew(summaryObject);\n unreferenced = summaryObject.unreferenced;\n break;\n }\n case SummaryType.Blob: {\n const content = typeof summaryObject.content === \"string\" ?\n summaryObject.content : Uint8ArrayToString(summaryObject.content, \"base64\");\n const encoding = typeof summaryObject.content === \"string\" ? \"utf-8\" : \"base64\";\n\n value = {\n type: \"blob\",\n content,\n encoding,\n };\n break;\n }\n case SummaryType.Handle: {\n throw new Error(\"No handle should be present for first summary!!\");\n }\n default: {\n throw new Error(`Unknown tree type ${summaryObject.type}`);\n }\n }\n\n const entry: OdspSummaryTreeEntry = {\n path: encodeURIComponent(key),\n type: getGitType(summaryObject),\n value,\n unreferenced,\n };\n snapshotTree.entries?.push(entry);\n }\n\n return snapshotTree;\n}\n"]}
@@ -11,6 +11,7 @@ import { IOdspCache, INonPersistentCache, IPersistedFileCache } from "./odspCach
11
11
  export declare type FetchType = "blob" | "createBlob" | "createFile" | "joinSession" | "ops" | "test" | "snapshotTree" | "treesLatest" | "uploadSummary" | "push" | "versions";
12
12
  export declare type FetchTypeInternal = FetchType | "cache";
13
13
  export declare const Odsp409Error = "Odsp409Error";
14
+ export declare const defaultCacheExpiryTimeoutMs: number;
14
15
  /**
15
16
  * This class is a wrapper around fetch calls. It adds epoch to the request made so that the
16
17
  * server can match it with its epoch value in order to match the version.
@@ -52,7 +53,7 @@ export declare class EpochTracker implements IPersistedFileCache {
52
53
  }, fetchType: FetchType, addInBody?: boolean): Promise<IOdspResponse<ArrayBuffer>>;
53
54
  private addEpochInRequest;
54
55
  private addParamInBody;
55
- private formatClientCorelationId;
56
+ private formatClientCorrelationId;
56
57
  protected validateEpochFromResponse(epochFromResponse: string | undefined, fetchType: FetchTypeInternal, fromCache?: boolean): void;
57
58
  private checkForEpochError;
58
59
  private checkForEpochErrorCore;
@@ -1 +1 @@
1
- {"version":3,"file":"epochTracker.d.ts","sourceRoot":"","sources":["../src/epochTracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"epochTracker.d.ts","sourceRoot":"","sources":["../src/epochTracker.ts"],"names":[],"mappings":"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"}
@@ -4,14 +4,14 @@
4
4
  */
5
5
  import { v4 as uuid } from "uuid";
6
6
  import { assert, Deferred } from "@fluidframework/common-utils";
7
- import { fluidEpochMismatchError, throwOdspNetworkError } from "@fluidframework/odsp-doclib-utils";
8
- import { ThrottlingError, RateLimiter } from "@fluidframework/driver-utils";
7
+ import { ThrottlingError, RateLimiter, NonRetryableError } from "@fluidframework/driver-utils";
9
8
  import { snapshotKey, } from "@fluidframework/odsp-driver-definitions";
10
9
  import { DriverErrorType } from "@fluidframework/driver-definitions";
11
10
  import { PerformanceEvent, isFluidError, normalizeError } from "@fluidframework/telemetry-utils";
12
11
  import { fetchAndParseAsJSONHelper, fetchArray } from "./odspUtils";
13
12
  import { persistedCacheValueVersion } from "./contracts";
14
13
  export const Odsp409Error = "Odsp409Error";
14
+ export const defaultCacheExpiryTimeoutMs = 2 * 24 * 60 * 60 * 1000;
15
15
  /**
16
16
  * This class is a wrapper around fetch calls. It adds epoch to the request made so that the
17
17
  * server can match it with its epoch value in order to match the version.
@@ -41,18 +41,39 @@ export class EpochTracker {
41
41
  });
42
42
  }
43
43
  async get(entry) {
44
+ var _a;
44
45
  try {
46
+ // Return undefined so that the ops/snapshots are grabbed from the server instead of the cache
45
47
  const value = await this.cache.get(this.fileEntryFromEntry(entry));
48
+ // Version mismatch between what the runtime expects and what it recieved.
49
+ // The cached value should not be used
46
50
  if (value === undefined || value.version !== persistedCacheValueVersion) {
47
51
  return undefined;
48
52
  }
49
53
  assert(value.fluidEpoch !== undefined, 0x1dc /* "all entries have to have epoch" */);
50
54
  if (this._fluidEpoch === undefined) {
51
55
  this.setEpoch(value.fluidEpoch, true, "cache");
56
+ // Epoch mismatch, the cached value is considerably different from what the current state of
57
+ // the runtime and should not be used
52
58
  }
53
59
  else if (this._fluidEpoch !== value.fluidEpoch) {
54
60
  return undefined;
55
61
  }
62
+ // Expire the cached snapshot if it's older than the defaultCacheExpiryTimeoutMs and immediately
63
+ // expire all old caches that do not have cacheEntryTime
64
+ if (entry.type === snapshotKey) {
65
+ const cacheTime = (_a = value.value) === null || _a === void 0 ? void 0 : _a.cacheEntryTime;
66
+ const currentTime = Date.now();
67
+ if (cacheTime === undefined || currentTime - cacheTime >= defaultCacheExpiryTimeoutMs) {
68
+ this.logger.sendTelemetryEvent({
69
+ eventName: "odspVersionsCacheExpired",
70
+ duration: currentTime - cacheTime,
71
+ maxCacheAgeMs: defaultCacheExpiryTimeoutMs,
72
+ });
73
+ await this.removeEntries();
74
+ return undefined;
75
+ }
76
+ }
56
77
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
57
78
  return value.value;
58
79
  }
@@ -62,7 +83,13 @@ export class EpochTracker {
62
83
  }
63
84
  }
64
85
  async put(entry, value) {
86
+ var _a;
65
87
  assert(this._fluidEpoch !== undefined, 0x1dd /* "no epoch" */);
88
+ // For snapshots, the value should have the cacheEntryTime. This will be used to expire snapshots older
89
+ // than the defaultCacheExpiryTimeoutMs.
90
+ if (entry.type === snapshotKey) {
91
+ value.cacheEntryTime = (_a = value.cacheEntryTime) !== null && _a !== void 0 ? _a : Date.now();
92
+ }
66
93
  const data = {
67
94
  value,
68
95
  version: persistedCacheValueVersion,
@@ -104,14 +131,14 @@ export class EpochTracker {
104
131
  * @param addInBody - Pass True if caller wants to add epoch in post body.
105
132
  */
106
133
  async fetchAndParseAsJSON(url, fetchOptions, fetchType, addInBody = false) {
107
- const clientCorelationId = this.formatClientCorelationId();
134
+ const clientCorrelationId = this.formatClientCorrelationId();
108
135
  // Add epoch in fetch request.
109
- this.addEpochInRequest(fetchOptions, addInBody, clientCorelationId);
136
+ this.addEpochInRequest(fetchOptions, addInBody, clientCorrelationId);
110
137
  let epochFromResponse;
111
138
  return this.rateLimiter.schedule(async () => fetchAndParseAsJSONHelper(url, fetchOptions)).then((response) => {
112
139
  epochFromResponse = response.headers.get("x-fluid-epoch");
113
140
  this.validateEpochFromResponse(epochFromResponse, fetchType);
114
- response.commonSpoHeaders = Object.assign(Object.assign({}, response.commonSpoHeaders), { "X-RequestStats": clientCorelationId });
141
+ response.commonSpoHeaders = Object.assign(Object.assign({}, response.commonSpoHeaders), { "X-RequestStats": clientCorrelationId });
115
142
  return response;
116
143
  }).catch(async (error) => {
117
144
  // Get the server epoch from error in case we don't have it as if undefined we won't be able
@@ -122,7 +149,7 @@ export class EpochTracker {
122
149
  await this.checkForEpochError(error, epochFromResponse, fetchType);
123
150
  throw error;
124
151
  }).catch((error) => {
125
- const fluidError = normalizeError(error, { props: { "X-RequestStats": clientCorelationId } });
152
+ const fluidError = normalizeError(error, { props: { XRequestStatsHeader: clientCorrelationId } });
126
153
  throw fluidError;
127
154
  });
128
155
  }
@@ -134,14 +161,14 @@ export class EpochTracker {
134
161
  * @param addInBody - Pass True if caller wants to add epoch in post body.
135
162
  */
136
163
  async fetchArray(url, fetchOptions, fetchType, addInBody = false) {
137
- const clientCorelationId = this.formatClientCorelationId();
164
+ const clientCorrelationId = this.formatClientCorrelationId();
138
165
  // Add epoch in fetch request.
139
- this.addEpochInRequest(fetchOptions, addInBody, clientCorelationId);
166
+ this.addEpochInRequest(fetchOptions, addInBody, clientCorrelationId);
140
167
  let epochFromResponse;
141
168
  return this.rateLimiter.schedule(async () => fetchArray(url, fetchOptions)).then((response) => {
142
169
  epochFromResponse = response.headers.get("x-fluid-epoch");
143
170
  this.validateEpochFromResponse(epochFromResponse, fetchType);
144
- response.commonSpoHeaders = Object.assign(Object.assign({}, response.commonSpoHeaders), { "X-RequestStats": clientCorelationId });
171
+ response.commonSpoHeaders = Object.assign(Object.assign({}, response.commonSpoHeaders), { "X-RequestStats": clientCorrelationId });
145
172
  return response;
146
173
  }).catch(async (error) => {
147
174
  // Get the server epoch from error in case we don't have it as if undefined we won't be able
@@ -152,14 +179,14 @@ export class EpochTracker {
152
179
  await this.checkForEpochError(error, epochFromResponse, fetchType);
153
180
  throw error;
154
181
  }).catch((error) => {
155
- const fluidError = normalizeError(error, { props: { "X-RequestStats": clientCorelationId } });
182
+ const fluidError = normalizeError(error, { props: { XRequestStatsHeader: clientCorrelationId } });
156
183
  throw fluidError;
157
184
  });
158
185
  }
159
- addEpochInRequest(fetchOptions, addInBody, clientCorelationId) {
186
+ addEpochInRequest(fetchOptions, addInBody, clientCorrelationId) {
160
187
  if (addInBody) {
161
188
  const headers = {};
162
- headers["X-RequestStats"] = clientCorelationId;
189
+ headers["X-RequestStats"] = clientCorrelationId;
163
190
  if (this.fluidEpoch !== undefined) {
164
191
  headers["x-fluid-epoch"] = this.fluidEpoch;
165
192
  }
@@ -171,7 +198,7 @@ export class EpochTracker {
171
198
  assert(fetchOptions.headers !== undefined, 0x282 /* "Headers should be present now" */);
172
199
  fetchOptions.headers[key] = val;
173
200
  };
174
- addHeader("X-RequestStats", clientCorelationId);
201
+ addHeader("X-RequestStats", clientCorrelationId);
175
202
  if (this.fluidEpoch !== undefined) {
176
203
  addHeader("x-fluid-epoch", this.fluidEpoch);
177
204
  }
@@ -194,11 +221,14 @@ export class EpochTracker {
194
221
  });
195
222
  fetchOptions.body = formParams.join("\r\n");
196
223
  }
197
- formatClientCorelationId() {
224
+ formatClientCorrelationId() {
198
225
  return `driverId=${this.driverId}, RequestNumber=${this.networkCallNumber++}`;
199
226
  }
200
227
  validateEpochFromResponse(epochFromResponse, fetchType, fromCache = false) {
201
- this.checkForEpochErrorCore(epochFromResponse);
228
+ const error = this.checkForEpochErrorCore(epochFromResponse);
229
+ if (error !== undefined) {
230
+ throw error;
231
+ }
202
232
  if (epochFromResponse !== undefined) {
203
233
  if (this._fluidEpoch === undefined) {
204
234
  this.setEpoch(epochFromResponse, fromCache, fetchType);
@@ -207,11 +237,8 @@ export class EpochTracker {
207
237
  }
208
238
  async checkForEpochError(error, epochFromResponse, fetchType, fromCache = false) {
209
239
  if (isFluidError(error) && error.errorType === DriverErrorType.fileOverwrittenInStorage) {
210
- try {
211
- // This will only throw if it is an epoch error.
212
- this.checkForEpochErrorCore(epochFromResponse);
213
- }
214
- catch (epochError) {
240
+ const epochError = this.checkForEpochErrorCore(epochFromResponse);
241
+ if (epochError !== undefined) {
215
242
  assert(isFluidError(epochError), 0x21f /* "epochError expected to be thrown by throwOdspNetworkError and of known type" */);
216
243
  epochError.addTelemetryProperties({
217
244
  fromCache,
@@ -234,7 +261,9 @@ export class EpochTracker {
234
261
  // initializes this value. Sometimes response does not contain epoch as it is still in
235
262
  // implementation phase at server side. In that case also, don't compare it with our epoch value.
236
263
  if (this.fluidEpoch && epochFromResponse && (this.fluidEpoch !== epochFromResponse)) {
237
- throwOdspNetworkError("epochMismatch", fluidEpochMismatchError);
264
+ // This is similar in nature to how fluidEpochMismatchError (409) is handled.
265
+ // Difference - client detected mismatch, instead of server detecting it.
266
+ return new NonRetryableError("epochMismatch", "Epoch mismatch", DriverErrorType.fileOverwrittenInStorage);
238
267
  }
239
268
  }
240
269
  fileEntryFromEntry(entry) {