@fluidframework/odsp-driver 2.0.0-internal.2.2.0 → 2.0.0-internal.2.3.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 (149) hide show
  1. package/.eslintrc.js +1 -1
  2. package/dist/WriteBufferUtils.d.ts.map +1 -1
  3. package/dist/WriteBufferUtils.js +0 -1
  4. package/dist/WriteBufferUtils.js.map +1 -1
  5. package/dist/contractsPublic.d.ts.map +1 -1
  6. package/dist/contractsPublic.js.map +1 -1
  7. package/dist/createFile.d.ts +2 -6
  8. package/dist/createFile.d.ts.map +1 -1
  9. package/dist/createFile.js +13 -125
  10. package/dist/createFile.js.map +1 -1
  11. package/dist/createNewUtils.d.ts +16 -0
  12. package/dist/createNewUtils.d.ts.map +1 -1
  13. package/dist/createNewUtils.js +131 -1
  14. package/dist/createNewUtils.js.map +1 -1
  15. package/dist/fetchSnapshot.js +1 -1
  16. package/dist/fetchSnapshot.js.map +1 -1
  17. package/dist/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  18. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js +1 -1
  19. package/dist/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  20. package/dist/odspDelayLoadedDeltaStream.d.ts +75 -0
  21. package/dist/odspDelayLoadedDeltaStream.d.ts.map +1 -0
  22. package/dist/odspDelayLoadedDeltaStream.js +259 -0
  23. package/dist/odspDelayLoadedDeltaStream.js.map +1 -0
  24. package/dist/odspDocumentDeltaConnection.d.ts +1 -3
  25. package/dist/odspDocumentDeltaConnection.d.ts.map +1 -1
  26. package/dist/odspDocumentDeltaConnection.js +8 -7
  27. package/dist/odspDocumentDeltaConnection.js.map +1 -1
  28. package/dist/odspDocumentService.d.ts +10 -25
  29. package/dist/odspDocumentService.d.ts.map +1 -1
  30. package/dist/odspDocumentService.js +71 -204
  31. package/dist/odspDocumentService.js.map +1 -1
  32. package/dist/odspDocumentServiceFactory.d.ts.map +1 -1
  33. package/dist/odspDocumentServiceFactory.js +1 -2
  34. package/dist/odspDocumentServiceFactory.js.map +1 -1
  35. package/dist/odspDocumentServiceFactoryCore.d.ts +1 -3
  36. package/dist/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  37. package/dist/odspDocumentServiceFactoryCore.js +3 -3
  38. package/dist/odspDocumentServiceFactoryCore.js.map +1 -1
  39. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts +4 -0
  40. package/dist/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  41. package/dist/odspDocumentServiceFactoryWithCodeSplit.js +5 -20
  42. package/dist/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  43. package/dist/odspDocumentStorageManager.d.ts.map +1 -1
  44. package/dist/odspDocumentStorageManager.js +0 -2
  45. package/dist/odspDocumentStorageManager.js.map +1 -1
  46. package/dist/odspDocumentStorageServiceBase.d.ts.map +1 -1
  47. package/dist/odspDocumentStorageServiceBase.js +0 -2
  48. package/dist/odspDocumentStorageServiceBase.js.map +1 -1
  49. package/dist/odspSummaryUploadManager.d.ts.map +1 -1
  50. package/dist/odspSummaryUploadManager.js +0 -2
  51. package/dist/odspSummaryUploadManager.js.map +1 -1
  52. package/dist/odspUtils.d.ts +10 -1
  53. package/dist/odspUtils.d.ts.map +1 -1
  54. package/dist/odspUtils.js +5 -1
  55. package/dist/odspUtils.js.map +1 -1
  56. package/dist/packageVersion.d.ts +1 -1
  57. package/dist/packageVersion.js +1 -1
  58. package/dist/packageVersion.js.map +1 -1
  59. package/dist/zipItDataRepresentationUtils.d.ts.map +1 -1
  60. package/dist/zipItDataRepresentationUtils.js +0 -1
  61. package/dist/zipItDataRepresentationUtils.js.map +1 -1
  62. package/lib/WriteBufferUtils.d.ts.map +1 -1
  63. package/lib/WriteBufferUtils.js +0 -1
  64. package/lib/WriteBufferUtils.js.map +1 -1
  65. package/lib/contractsPublic.d.ts.map +1 -1
  66. package/lib/contractsPublic.js.map +1 -1
  67. package/lib/createFile.d.ts +2 -6
  68. package/lib/createFile.d.ts.map +1 -1
  69. package/lib/createFile.js +15 -126
  70. package/lib/createFile.js.map +1 -1
  71. package/lib/createNewUtils.d.ts +16 -0
  72. package/lib/createNewUtils.d.ts.map +1 -1
  73. package/lib/createNewUtils.js +129 -1
  74. package/lib/createNewUtils.js.map +1 -1
  75. package/lib/fetchSnapshot.js +1 -1
  76. package/lib/fetchSnapshot.js.map +1 -1
  77. package/lib/localOdspDriver/localOdspDocumentServiceFactory.d.ts.map +1 -1
  78. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js +1 -1
  79. package/lib/localOdspDriver/localOdspDocumentServiceFactory.js.map +1 -1
  80. package/lib/odspDelayLoadedDeltaStream.d.ts +75 -0
  81. package/lib/odspDelayLoadedDeltaStream.d.ts.map +1 -0
  82. package/lib/odspDelayLoadedDeltaStream.js +255 -0
  83. package/lib/odspDelayLoadedDeltaStream.js.map +1 -0
  84. package/lib/odspDocumentDeltaConnection.d.ts +1 -3
  85. package/lib/odspDocumentDeltaConnection.d.ts.map +1 -1
  86. package/lib/odspDocumentDeltaConnection.js +8 -7
  87. package/lib/odspDocumentDeltaConnection.js.map +1 -1
  88. package/lib/odspDocumentService.d.ts +10 -25
  89. package/lib/odspDocumentService.d.ts.map +1 -1
  90. package/lib/odspDocumentService.js +56 -207
  91. package/lib/odspDocumentService.js.map +1 -1
  92. package/lib/odspDocumentServiceFactory.d.ts.map +1 -1
  93. package/lib/odspDocumentServiceFactory.js +1 -2
  94. package/lib/odspDocumentServiceFactory.js.map +1 -1
  95. package/lib/odspDocumentServiceFactoryCore.d.ts +1 -3
  96. package/lib/odspDocumentServiceFactoryCore.d.ts.map +1 -1
  97. package/lib/odspDocumentServiceFactoryCore.js +3 -3
  98. package/lib/odspDocumentServiceFactoryCore.js.map +1 -1
  99. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts +4 -0
  100. package/lib/odspDocumentServiceFactoryWithCodeSplit.d.ts.map +1 -1
  101. package/lib/odspDocumentServiceFactoryWithCodeSplit.js +5 -1
  102. package/lib/odspDocumentServiceFactoryWithCodeSplit.js.map +1 -1
  103. package/lib/odspDocumentStorageManager.d.ts.map +1 -1
  104. package/lib/odspDocumentStorageManager.js +0 -2
  105. package/lib/odspDocumentStorageManager.js.map +1 -1
  106. package/lib/odspDocumentStorageServiceBase.d.ts.map +1 -1
  107. package/lib/odspDocumentStorageServiceBase.js +0 -2
  108. package/lib/odspDocumentStorageServiceBase.js.map +1 -1
  109. package/lib/odspSummaryUploadManager.d.ts.map +1 -1
  110. package/lib/odspSummaryUploadManager.js +0 -2
  111. package/lib/odspSummaryUploadManager.js.map +1 -1
  112. package/lib/odspUtils.d.ts +10 -1
  113. package/lib/odspUtils.d.ts.map +1 -1
  114. package/lib/odspUtils.js +3 -0
  115. package/lib/odspUtils.js.map +1 -1
  116. package/lib/packageVersion.d.ts +1 -1
  117. package/lib/packageVersion.js +1 -1
  118. package/lib/packageVersion.js.map +1 -1
  119. package/lib/zipItDataRepresentationUtils.d.ts.map +1 -1
  120. package/lib/zipItDataRepresentationUtils.js +0 -1
  121. package/lib/zipItDataRepresentationUtils.js.map +1 -1
  122. package/package.json +14 -14
  123. package/src/WriteBufferUtils.ts +0 -1
  124. package/src/contractsPublic.ts +0 -1
  125. package/src/createFile.ts +23 -168
  126. package/src/createNewUtils.ts +188 -2
  127. package/src/fetchSnapshot.ts +1 -1
  128. package/src/localOdspDriver/localOdspDocumentServiceFactory.ts +0 -1
  129. package/src/odspDelayLoadedDeltaStream.ts +359 -0
  130. package/src/odspDocumentDeltaConnection.ts +11 -8
  131. package/src/odspDocumentService.ts +63 -283
  132. package/src/odspDocumentServiceFactory.ts +0 -2
  133. package/src/odspDocumentServiceFactoryCore.ts +1 -3
  134. package/src/odspDocumentServiceFactoryWithCodeSplit.ts +4 -1
  135. package/src/odspDocumentStorageManager.ts +0 -4
  136. package/src/odspDocumentStorageServiceBase.ts +0 -3
  137. package/src/odspSummaryUploadManager.ts +0 -4
  138. package/src/odspUtils.ts +16 -1
  139. package/src/packageVersion.ts +1 -1
  140. package/src/zipItDataRepresentationUtils.ts +0 -1
  141. package/dist/getSocketIo.d.ts +0 -11
  142. package/dist/getSocketIo.d.ts.map +0 -1
  143. package/dist/getSocketIo.js +0 -20
  144. package/dist/getSocketIo.js.map +0 -1
  145. package/lib/getSocketIo.d.ts +0 -11
  146. package/lib/getSocketIo.d.ts.map +0 -1
  147. package/lib/getSocketIo.js +0 -13
  148. package/lib/getSocketIo.js.map +0 -1
  149. package/src/getSocketIo.ts +0 -14
@@ -1 +1 @@
1
- {"version":3,"file":"WriteBufferUtils.js","sourceRoot":"","sources":["../src/WriteBufferUtils.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, IsoBuffer } from \"@fluidframework/common-utils\";\nimport {\n BlobCore,\n codeToBytesMap,\n getValueSafely,\n MarkerCodes,\n MarkerCodesEnd,\n MarkerCodesStart,\n NodeCore,\n} from \"./zipItDataRepresentationUtils\";\n\n/**\n * Buffer class, used to sequentially writ data.\n * Used by tree code to serialize tree into binary representation.\n */\nexport class WriteBuffer {\n protected data?: Uint8Array = new Uint8Array(4096);\n protected index = 0;\n\n protected push(code: number) {\n assert(this.data !== undefined, 0x225 /* \"Data should be there\" */);\n const length = this.data.length;\n if (this.index === length) {\n const newData = new Uint8Array(length * 1.2 + 4096);\n let index = 0;\n const oldData = this.data;\n while (index < length) {\n newData[index] = oldData[index];\n index++;\n }\n this.data = newData;\n }\n this.data[this.index] = code % 256;\n this.index++;\n }\n\n public write(codeArg: number, lengthArg = 1) {\n let code = codeArg;\n let length = lengthArg;\n while (length > 0) {\n this.push(code % 256);\n code = Math.floor(code / 256);\n length--;\n }\n assert(code === 0, 0x226 /* Should write complete data */);\n }\n\n public done(): Uint8Array {\n assert(this.data !== undefined, 0x227 /* \"Data should be there\" */);\n // We can slice it to have smaller memory representation.\n // But it will be way more expensive in terms of CPU cycles!\n const buffer = this.data.subarray(0, this.index);\n this.data = undefined;\n return buffer;\n }\n}\n\n// This list of maps below is reverse mapping of Marker Codes specified in zipItDataRepresentationUtils.ts file.\n// We can also found them on server filestore code.\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/**\n * This contains mapping of number of bytes representing the corresponding string length to Marker Codes.\n*/\nconst utf8StringBytesToCodeMap = {\n 0: 13,\n 1: 14,\n 2: 15,\n 4: 16,\n};\n\n/**\n * This contains mapping of number of bytes representing the corresponding length in which actual data(base64 string)\n * will be stored to Marker Codes.\n*/\nconst binaryBytesToCodeMap = {\n 0: 32,\n 1: 33,\n 2: 34,\n 4: 35,\n 8: 16,\n};\n\n/**\n * This contains mapping of number of bytes representing the corresponding const string id to Marker Codes.\n*/\nconst constStringBytesToCodeMap = {\n 1: 17,\n 2: 18,\n 4: 19,\n};\n\n/**\n * This contains mapping of number of bytes to Marker Codes representing the corresponding Integer.\n*/\nconst integerBytesToCodeMap = {\n 0: 1,\n 1: 3,\n 2: 5,\n 4: 7,\n 8: 9,\n};\n\n/**\n * This contains mapping of boolean to Marker Codes representing the corresponding bool value.\n*/\nconst boolToCodeMap = [\n 12, // false\n 11, // true\n];\n\n/**\n * Calculate how many bytes are required to encode an integer. This is always power of 2.\n * So if 6 bytes are required to store an integer than it will return 8. 0 is a special case for which we\n * return 0 as it is usually just represented by marker code and we don't store the actual data.\n * @param num - number to encode.\n */\n export function calcLength(numArg: number) {\n if (numArg === 0) {\n return 0;\n }\n let num = numArg;\n let lengthLen = 0;\n while (num > 0) {\n num = Math.floor(num / 256);\n lengthLen++;\n }\n let res = 1;\n while (res < lengthLen) {\n res *= 2;\n }\n return res;\n}\n\n/**\n * Implementation of serialization of blobs in buffer with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param content - string to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\n function serializeDictionaryString(buffer: WriteBuffer, content: string, dictionary: Map<string, number>) {\n let id = dictionary.get(content);\n let idLength: number;\n if (id === undefined) {\n const data = IsoBuffer.from(content, \"utf8\");\n const lengthOfDataLen = calcLength(data.length);\n\n id = dictionary.size + 1;\n idLength = calcLength(id);\n dictionary.set(content, id);\n const code = lengthOfDataLen > 1 || idLength > 1\n ? MarkerCodes.ConstStringDeclareBig\n : MarkerCodes.ConstStringDeclare;\n // Write marker code for const string.\n buffer.write(code);\n const bytes = getValueSafely(codeToBytesMap, code);\n assert(bytes >= lengthOfDataLen, 0x283 /* \"Length of data len should fit in the bytes from the map\" */);\n assert(bytes >= idLength, 0x284 /* \"Length of id should fit in the bytes from the map\" */);\n // Assign and write id for const string.\n buffer.write(id, bytes);\n // Write length of const string.\n buffer.write(data.length, bytes);\n // Write const string data.\n for (const element of data) {\n buffer.write(element);\n }\n } else {\n idLength = calcLength(id);\n }\n // Write Marker Code\n buffer.write(getValueSafely(constStringBytesToCodeMap, idLength));\n // Write id of const string\n buffer.write(id, idLength);\n}\n\nfunction serializeString(buffer: WriteBuffer, content: string, codeMap = binaryBytesToCodeMap) {\n serializeBlob(\n buffer,\n IsoBuffer.from(content, \"utf8\"),\n utf8StringBytesToCodeMap);\n}\n\n/**\n * Implementation of serialization of blobs in buffer with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param blob - blob to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\nfunction serializeBlob(buffer: WriteBuffer, data: Uint8Array, codeMap: Record<number, number> = binaryBytesToCodeMap) {\n const lengthOfDataLen = calcLength(data.length);\n // Write Marker code.\n buffer.write(getValueSafely(codeMap, lengthOfDataLen));\n // Write actual data if length greater than 0, otherwise Marker Code is enough.\n if (lengthOfDataLen > 0) {\n buffer.write(data.length, lengthOfDataLen);\n for (const element of data) {\n buffer.write(element);\n }\n }\n}\n\n/**\n * Implementation of serialization of nodes with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param nodeCore - Node to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\nfunction serializeNodeCore(buffer: WriteBuffer, nodeCore: NodeCore, dictionary: Map<string, number>) {\n for (const child of nodeCore.nodes) {\n if (child instanceof NodeCore) {\n // For a tree node start and end with set/list start and end marker codes.\n const startCode = MarkerCodesStart[child.type];\n const endCode = MarkerCodesEnd[child.type];\n assert(startCode !== undefined, 0x285 /* \"Start code should not undefined\" */);\n assert(endCode !== undefined, 0x286 /* \"End code should not undefined\" */);\n buffer.write(startCode);\n serializeNodeCore(buffer, child, dictionary);\n buffer.write(endCode);\n } else if (child instanceof BlobCore) {\n serializeBlob(buffer, child.buffer);\n } else if (typeof child === \"number\") {\n // Calculate length in which integer will be stored\n const len = calcLength(child);\n // Write corresponding Marker code for length of integer.\n buffer.write(getValueSafely(integerBytesToCodeMap, len));\n // Write actual number if greater than 0, otherwise Marker Code is enough.\n if (len > 0) {\n buffer.write(child, len);\n }\n } else if (typeof child === \"boolean\") {\n buffer.write(boolToCodeMap[child ? 1 : 0]);\n } else {\n assert(child._stringElement, 0x3dd /* Unsupported node type */);\n if (child.dictionary) {\n serializeDictionaryString(buffer, child.content, dictionary);\n } else {\n serializeString(buffer, child.content);\n }\n }\n }\n}\n\nclass NodeCoreSerializer extends NodeCore {\n constructor() {\n super();\n }\n\n public serialize(buffer: WriteBuffer) {\n serializeNodeCore(buffer, this, new Map<string, number>());\n }\n}\n\nexport class TreeBuilderSerializer extends NodeCoreSerializer {\n constructor() {\n super();\n }\n\n public serialize(): Uint8Array {\n const buffer = new WriteBuffer();\n super.serialize(buffer);\n return buffer.done();\n }\n}\n"]}
1
+ {"version":3,"file":"WriteBufferUtils.js","sourceRoot":"","sources":["../src/WriteBufferUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACH,QAAQ,EACR,cAAc,EACd,cAAc,EACd,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,QAAQ,GACX,MAAM,gCAAgC,CAAC;AAExC;;;GAGG;AACH,MAAM,OAAO,WAAW;IAAxB;QACc,SAAI,GAAgB,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACzC,UAAK,GAAG,CAAC,CAAC;IAsCxB,CAAC;IApCa,IAAI,CAAC,IAAY;QACvB,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;YACvB,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;YACpD,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;YAC1B,OAAO,KAAK,GAAG,MAAM,EAAE;gBACnB,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;gBAChC,KAAK,EAAE,CAAC;aACX;YACD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;SACvB;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;QACnC,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,OAAe,EAAE,SAAS,GAAG,CAAC;QACvC,IAAI,IAAI,GAAG,OAAO,CAAC;QACnB,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,OAAO,MAAM,GAAG,CAAC,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YACtB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;YAC9B,MAAM,EAAE,CAAC;SACZ;QACD,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC/D,CAAC;IAEM,IAAI;QACP,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACpE,yDAAyD;QACzD,4DAA4D;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,OAAO,MAAM,CAAC;IAClB,CAAC;CACJ;AAED,gHAAgH;AAChH,mDAAmD;AACnD,wJAAwJ;AAExJ;;EAEE;AACF,MAAM,wBAAwB,GAAG;IAC7B,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;CACR,CAAC;AAEF;;;EAGE;AACF,MAAM,oBAAoB,GAAG;IACzB,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;CACR,CAAC;AAEF;;EAEE;AACF,MAAM,yBAAyB,GAAG;IAC9B,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;IACL,CAAC,EAAE,EAAE;CACR,CAAC;AAEF;;EAEE;AACF,MAAM,qBAAqB,GAAG;IAC1B,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;IACJ,CAAC,EAAE,CAAC;CACP,CAAC;AAEF;;EAEE;AACF,MAAM,aAAa,GAAG;IAClB,EAAE;IACF,EAAE,EAAE,OAAO;CACd,CAAC;AAEF;;;;;GAKG;AACF,MAAM,UAAU,UAAU,CAAC,MAAc;IACtC,IAAI,MAAM,KAAK,CAAC,EAAE;QACd,OAAO,CAAC,CAAC;KACZ;IACD,IAAI,GAAG,GAAG,MAAM,CAAC;IACjB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,OAAO,GAAG,GAAG,CAAC,EAAE;QACZ,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;QAC5B,SAAS,EAAE,CAAC;KACf;IACD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,GAAG,SAAS,EAAE;QACpB,GAAG,IAAI,CAAC,CAAC;KACZ;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACF,SAAS,yBAAyB,CAAC,MAAmB,EAAE,OAAe,EAAE,UAA+B;IACrG,IAAI,EAAE,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjC,IAAI,QAAgB,CAAC;IACrB,IAAI,EAAE,KAAK,SAAS,EAAE;QAClB,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEhD,EAAE,GAAG,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QACzB,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;QAC1B,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,eAAe,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;YAC5C,CAAC,CAAC,WAAW,CAAC,qBAAqB;YACnC,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;QACrC,sCAAsC;QACtC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,KAAK,GAAG,cAAc,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,IAAI,eAAe,EAAE,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACxG,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE,KAAK,CAAC,yDAAyD,CAAC,CAAC;QAC3F,wCAAwC;QACxC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACxB,gCAAgC;QAChC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACjC,2BAA2B;QAC3B,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACzB;KACJ;SAAM;QACH,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;KAC7B;IACD,oBAAoB;IACpB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,yBAAyB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClE,2BAA2B;IAC3B,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,eAAe,CAAC,MAAmB,EAAE,OAAe,EAAE,OAAO,GAAG,oBAAoB;IACzF,aAAa,CACT,MAAM,EACN,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,EAC/B,wBAAwB,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,MAAmB,EAAE,IAAgB,EAAE,UAAkC,oBAAoB;IAChH,MAAM,eAAe,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChD,qBAAqB;IACrB,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;IACvD,+EAA+E;IAC/E,IAAI,eAAe,GAAG,CAAC,EAAE;QACrB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QAC3C,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE;YACxB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACzB;KACJ;AACL,CAAC;AAED;;;;;GAKG;AACH,SAAS,iBAAiB,CAAC,MAAmB,EAAE,QAAkB,EAAE,UAA+B;IAC/F,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,KAAK,EAAE;QAChC,IAAI,KAAK,YAAY,QAAQ,EAAE;YAC3B,0EAA0E;YAC1E,MAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC/E,MAAM,CAAC,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,qCAAqC,CAAC,CAAC;YAC3E,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACxB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;YAC7C,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SACzB;aAAM,IAAI,KAAK,YAAY,QAAQ,EAAE;YAClC,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;SACvC;aAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAClC,mDAAmD;YACnD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YAC9B,yDAAyD;YACzD,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC,CAAC;YACzD,0EAA0E;YAC1E,IAAI,GAAG,GAAG,CAAC,EAAE;gBACT,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;aAC5B;SACJ;aAAM,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE;YACnC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAC9C;aAAM;YACH,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAChE,IAAI,KAAK,CAAC,UAAU,EAAE;gBAClB,yBAAyB,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;aAChE;iBAAM;gBACH,eAAe,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAC1C;SACJ;KACJ;AACL,CAAC;AAED,MAAM,kBAAmB,SAAQ,QAAQ;IACrC;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAEM,SAAS,CAAC,MAAmB;QAChC,iBAAiB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,EAAkB,CAAC,CAAC;IAC/D,CAAC;CACJ;AAED,MAAM,OAAO,qBAAsB,SAAQ,kBAAkB;IACzD;QACI,KAAK,EAAE,CAAC;IACZ,CAAC;IAEM,SAAS;QACZ,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACzB,CAAC;CACJ","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { assert, IsoBuffer } from \"@fluidframework/common-utils\";\nimport {\n BlobCore,\n codeToBytesMap,\n getValueSafely,\n MarkerCodes,\n MarkerCodesEnd,\n MarkerCodesStart,\n NodeCore,\n} from \"./zipItDataRepresentationUtils\";\n\n/**\n * Buffer class, used to sequentially writ data.\n * Used by tree code to serialize tree into binary representation.\n */\nexport class WriteBuffer {\n protected data?: Uint8Array = new Uint8Array(4096);\n protected index = 0;\n\n protected push(code: number) {\n assert(this.data !== undefined, 0x225 /* \"Data should be there\" */);\n const length = this.data.length;\n if (this.index === length) {\n const newData = new Uint8Array(length * 1.2 + 4096);\n let index = 0;\n const oldData = this.data;\n while (index < length) {\n newData[index] = oldData[index];\n index++;\n }\n this.data = newData;\n }\n this.data[this.index] = code % 256;\n this.index++;\n }\n\n public write(codeArg: number, lengthArg = 1) {\n let code = codeArg;\n let length = lengthArg;\n while (length > 0) {\n this.push(code % 256);\n code = Math.floor(code / 256);\n length--;\n }\n assert(code === 0, 0x226 /* Should write complete data */);\n }\n\n public done(): Uint8Array {\n assert(this.data !== undefined, 0x227 /* \"Data should be there\" */);\n // We can slice it to have smaller memory representation.\n // But it will be way more expensive in terms of CPU cycles!\n const buffer = this.data.subarray(0, this.index);\n this.data = undefined;\n return buffer;\n }\n}\n\n// This list of maps below is reverse mapping of Marker Codes specified in zipItDataRepresentationUtils.ts file.\n// We can also found them on server filestore code.\n// https://onedrive.visualstudio.com/SharePoint%20Online/_git/SPO?path=/cobalt/Base/Property/BinaryEncodedPropertyReader.cs&version=GBmaster&_a=contents\n\n/**\n * This contains mapping of number of bytes representing the corresponding string length to Marker Codes.\n*/\nconst utf8StringBytesToCodeMap = {\n 0: 13,\n 1: 14,\n 2: 15,\n 4: 16,\n};\n\n/**\n * This contains mapping of number of bytes representing the corresponding length in which actual data(base64 string)\n * will be stored to Marker Codes.\n*/\nconst binaryBytesToCodeMap = {\n 0: 32,\n 1: 33,\n 2: 34,\n 4: 35,\n 8: 16,\n};\n\n/**\n * This contains mapping of number of bytes representing the corresponding const string id to Marker Codes.\n*/\nconst constStringBytesToCodeMap = {\n 1: 17,\n 2: 18,\n 4: 19,\n};\n\n/**\n * This contains mapping of number of bytes to Marker Codes representing the corresponding Integer.\n*/\nconst integerBytesToCodeMap = {\n 0: 1,\n 1: 3,\n 2: 5,\n 4: 7,\n 8: 9,\n};\n\n/**\n * This contains mapping of boolean to Marker Codes representing the corresponding bool value.\n*/\nconst boolToCodeMap = [\n 12, // false\n 11, // true\n];\n\n/**\n * Calculate how many bytes are required to encode an integer. This is always power of 2.\n * So if 6 bytes are required to store an integer than it will return 8. 0 is a special case for which we\n * return 0 as it is usually just represented by marker code and we don't store the actual data.\n * @param num - number to encode.\n */\n export function calcLength(numArg: number) {\n if (numArg === 0) {\n return 0;\n }\n let num = numArg;\n let lengthLen = 0;\n while (num > 0) {\n num = Math.floor(num / 256);\n lengthLen++;\n }\n let res = 1;\n while (res < lengthLen) {\n res *= 2;\n }\n return res;\n}\n\n/**\n * Implementation of serialization of blobs in buffer with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param content - string to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\n function serializeDictionaryString(buffer: WriteBuffer, content: string, dictionary: Map<string, number>) {\n let id = dictionary.get(content);\n let idLength: number;\n if (id === undefined) {\n const data = IsoBuffer.from(content, \"utf8\");\n const lengthOfDataLen = calcLength(data.length);\n\n id = dictionary.size + 1;\n idLength = calcLength(id);\n dictionary.set(content, id);\n const code = lengthOfDataLen > 1 || idLength > 1\n ? MarkerCodes.ConstStringDeclareBig\n : MarkerCodes.ConstStringDeclare;\n // Write marker code for const string.\n buffer.write(code);\n const bytes = getValueSafely(codeToBytesMap, code);\n assert(bytes >= lengthOfDataLen, 0x283 /* \"Length of data len should fit in the bytes from the map\" */);\n assert(bytes >= idLength, 0x284 /* \"Length of id should fit in the bytes from the map\" */);\n // Assign and write id for const string.\n buffer.write(id, bytes);\n // Write length of const string.\n buffer.write(data.length, bytes);\n // Write const string data.\n for (const element of data) {\n buffer.write(element);\n }\n } else {\n idLength = calcLength(id);\n }\n // Write Marker Code\n buffer.write(getValueSafely(constStringBytesToCodeMap, idLength));\n // Write id of const string\n buffer.write(id, idLength);\n}\n\nfunction serializeString(buffer: WriteBuffer, content: string, codeMap = binaryBytesToCodeMap) {\n serializeBlob(\n buffer,\n IsoBuffer.from(content, \"utf8\"),\n utf8StringBytesToCodeMap);\n}\n\n/**\n * Implementation of serialization of blobs in buffer with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param blob - blob to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\nfunction serializeBlob(buffer: WriteBuffer, data: Uint8Array, codeMap: Record<number, number> = binaryBytesToCodeMap) {\n const lengthOfDataLen = calcLength(data.length);\n // Write Marker code.\n buffer.write(getValueSafely(codeMap, lengthOfDataLen));\n // Write actual data if length greater than 0, otherwise Marker Code is enough.\n if (lengthOfDataLen > 0) {\n buffer.write(data.length, lengthOfDataLen);\n for (const element of data) {\n buffer.write(element);\n }\n }\n}\n\n/**\n * Implementation of serialization of nodes with Marker Codes etc.\n * @param buffer - Buffer to serialize to.\n * @param nodeCore - Node to be serialized.\n * @param dictionary - Const strings dictionary to be used while serializing.\n */\nfunction serializeNodeCore(buffer: WriteBuffer, nodeCore: NodeCore, dictionary: Map<string, number>) {\n for (const child of nodeCore.nodes) {\n if (child instanceof NodeCore) {\n // For a tree node start and end with set/list start and end marker codes.\n const startCode = MarkerCodesStart[child.type];\n const endCode = MarkerCodesEnd[child.type];\n assert(startCode !== undefined, 0x285 /* \"Start code should not undefined\" */);\n assert(endCode !== undefined, 0x286 /* \"End code should not undefined\" */);\n buffer.write(startCode);\n serializeNodeCore(buffer, child, dictionary);\n buffer.write(endCode);\n } else if (child instanceof BlobCore) {\n serializeBlob(buffer, child.buffer);\n } else if (typeof child === \"number\") {\n // Calculate length in which integer will be stored\n const len = calcLength(child);\n // Write corresponding Marker code for length of integer.\n buffer.write(getValueSafely(integerBytesToCodeMap, len));\n // Write actual number if greater than 0, otherwise Marker Code is enough.\n if (len > 0) {\n buffer.write(child, len);\n }\n } else if (typeof child === \"boolean\") {\n buffer.write(boolToCodeMap[child ? 1 : 0]);\n } else {\n assert(child._stringElement, 0x3dd /* Unsupported node type */);\n if (child.dictionary) {\n serializeDictionaryString(buffer, child.content, dictionary);\n } else {\n serializeString(buffer, child.content);\n }\n }\n }\n}\n\nclass NodeCoreSerializer extends NodeCore {\n constructor() {\n super();\n }\n\n public serialize(buffer: WriteBuffer) {\n serializeNodeCore(buffer, this, new Map<string, number>());\n }\n}\n\nexport class TreeBuilderSerializer extends NodeCoreSerializer {\n constructor() {\n super();\n }\n\n public serialize(): Uint8Array {\n const buffer = new WriteBuffer();\n super.serialize(buffer);\n return buffer.done();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"contractsPublic.d.ts","sourceRoot":"","sources":["../src/contractsPublic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,iBAAiB;IAGzB,qBAAqB,0BAA0B;CAClD;AAED,MAAM,WAAW,kBAAkB;IAC/B,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACtD;AAED,oBAAY,qBAAqB;IAG7B,iBAAiB,wBAAwB;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACnC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtD;AAED,OAAO,QAAQ,iCAAiC,CAAC;IAE7C,UAAiB,cAAe,SAAQ,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;KAAI;CAC3G"}
1
+ {"version":3,"file":"contractsPublic.d.ts","sourceRoot":"","sources":["../src/contractsPublic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,yCAAyC,CAAC;AAExE,MAAM,WAAW,yBAA0B,SAAQ,aAAa;IAC5D,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,oBAAY,iBAAiB;IAGzB,qBAAqB,0BAA0B;CAClD;AAED,MAAM,WAAW,kBAAkB;IAC/B,CAAC,iBAAiB,CAAC,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACtD;AAED,oBAAY,qBAAqB;IAG7B,iBAAiB,wBAAwB;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACnC,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAC;CACtD;AAED,OAAO,QAAQ,iCAAiC,CAAC;IAC7C,UAAiB,cAAe,SAAQ,OAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC;KAAI;CAC3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"contractsPublic.js","sourceRoot":"","sources":["../src/contractsPublic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,yGAAyG;IACzG,sDAAsD;IACtD,oEAA+C,CAAA;AACnD,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAMD,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC7B,oGAAoG;IACpG,wGAAwG;IACxG,kEAAyC,CAAA;AAC7C,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions\";\n\nexport interface OdspFluidDataStoreLocator extends IOdspUrlParts {\n dataStorePath: string;\n appName?: string;\n containerPackageName?: string;\n fileVersion?: string;\n context?: string;\n}\n\nexport enum SharingLinkHeader {\n // Can be used in request made to resolver, to tell the resolver that the passed in URL is a sharing link\n // which can be redeemed at server to get permissions.\n isSharingLinkToRedeem = \"isSharingLinkToRedeem\",\n}\n\nexport interface ISharingLinkHeader {\n [SharingLinkHeader.isSharingLinkToRedeem]: boolean;\n}\n\nexport enum ClpCompliantAppHeader {\n // Can be used in request made to resolver, to tell the resolver that the host app is CLP compliant.\n // Odsp will not return Classified, labeled, or protected documents if the host app cannot support them.\n isClpCompliantApp = \"X-CLP-Compliant-App\",\n}\n\nexport interface IClpCompliantAppHeader {\n [ClpCompliantAppHeader.isClpCompliantApp]: boolean;\n}\n\ndeclare module \"@fluidframework/core-interfaces\" {\n // eslint-disable-next-line @typescript-eslint/no-empty-interface\n export interface IRequestHeader extends Partial<ISharingLinkHeader>, Partial<IClpCompliantAppHeader> { }\n}\n"]}
1
+ {"version":3,"file":"contractsPublic.js","sourceRoot":"","sources":["../src/contractsPublic.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAYH,MAAM,CAAN,IAAY,iBAIX;AAJD,WAAY,iBAAiB;IACzB,yGAAyG;IACzG,sDAAsD;IACtD,oEAA+C,CAAA;AACnD,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,QAI5B;AAMD,MAAM,CAAN,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC7B,oGAAoG;IACpG,wGAAwG;IACxG,kEAAyC,CAAA;AAC7C,CAAC,EAJW,qBAAqB,KAArB,qBAAqB,QAIhC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IOdspUrlParts } from \"@fluidframework/odsp-driver-definitions\";\n\nexport interface OdspFluidDataStoreLocator extends IOdspUrlParts {\n dataStorePath: string;\n appName?: string;\n containerPackageName?: string;\n fileVersion?: string;\n context?: string;\n}\n\nexport enum SharingLinkHeader {\n // Can be used in request made to resolver, to tell the resolver that the passed in URL is a sharing link\n // which can be redeemed at server to get permissions.\n isSharingLinkToRedeem = \"isSharingLinkToRedeem\",\n}\n\nexport interface ISharingLinkHeader {\n [SharingLinkHeader.isSharingLinkToRedeem]: boolean;\n}\n\nexport enum ClpCompliantAppHeader {\n // Can be used in request made to resolver, to tell the resolver that the host app is CLP compliant.\n // Odsp will not return Classified, labeled, or protected documents if the host app cannot support them.\n isClpCompliantApp = \"X-CLP-Compliant-App\",\n}\n\nexport interface IClpCompliantAppHeader {\n [ClpCompliantAppHeader.isClpCompliantApp]: boolean;\n}\n\ndeclare module \"@fluidframework/core-interfaces\" {\n export interface IRequestHeader extends Partial<ISharingLinkHeader>, Partial<IClpCompliantAppHeader> { }\n}\n"]}
@@ -4,8 +4,8 @@
4
4
  */
5
5
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
6
6
  import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
- import { IFileEntry, InstrumentedStorageTokenFetcher, IOdspResolvedUrl } from "@fluidframework/odsp-driver-definitions";
8
- import { IOdspSummaryTree, ICreateFileResponse } from "./contracts";
7
+ import { InstrumentedStorageTokenFetcher, IOdspResolvedUrl, IFileEntry } from "@fluidframework/odsp-driver-definitions";
8
+ import { ICreateFileResponse } from "./contracts";
9
9
  import { INewFileInfo } from "./odspUtils";
10
10
  import { EpochTracker } from "./epochTracker";
11
11
  /**
@@ -15,8 +15,4 @@ import { EpochTracker } from "./epochTracker";
15
15
  export declare function createNewFluidFile(getStorageToken: InstrumentedStorageTokenFetcher, newFileInfo: INewFileInfo, logger: ITelemetryLogger, createNewSummary: ISummaryTree | undefined, epochTracker: EpochTracker, fileEntry: IFileEntry, createNewCaching: boolean, forceAccessTokenViaAuthorizationHeader: boolean, isClpCompliantApp?: boolean, enableSingleRequestForShareLinkWithCreate?: boolean, enableShareLinkWithCreate?: boolean): Promise<IOdspResolvedUrl>;
16
16
  export declare function createNewEmptyFluidFile(getStorageToken: InstrumentedStorageTokenFetcher, newFileInfo: INewFileInfo, logger: ITelemetryLogger, epochTracker: EpochTracker, forceAccessTokenViaAuthorizationHeader: boolean): Promise<string>;
17
17
  export declare function createNewFluidFileFromSummary(getStorageToken: InstrumentedStorageTokenFetcher, newFileInfo: INewFileInfo, logger: ITelemetryLogger, createNewSummary: ISummaryTree, epochTracker: EpochTracker, forceAccessTokenViaAuthorizationHeader: boolean): Promise<ICreateFileResponse>;
18
- /**
19
- * Converts a summary tree to ODSP tree
20
- */
21
- export declare function convertSummaryToSnapshotTreeForCreateNew(summary: ISummaryTree): IOdspSummaryTree;
22
18
  //# sourceMappingURL=createFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createFile.d.ts","sourceRoot":"","sources":["../src/createFile.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,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,EAKnB,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACH,gBAAgB,EAGhB,mBAAmB,EAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAIH,YAAY,EAGf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C;;;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,EACzB,sCAAsC,EAAE,OAAO,EAC/C,iBAAiB,CAAC,EAAE,OAAO,EAC3B,yCAAyC,CAAC,EAAE,OAAO,EACnD,yBAAyB,CAAC,EAAE,OAAO,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAoD3B;AAyDD,wBAAsB,uBAAuB,CACzC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,YAAY,EAC1B,sCAAsC,EAAE,OAAO,GAChD,OAAO,CAAC,MAAM,CAAC,CAiDjB;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,EAC1B,sCAAsC,EAAE,OAAO,GAChD,OAAO,CAAC,mBAAmB,CAAC,CAqF9B;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;AAIH,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAEtE,OAAO,EACH,+BAA+B,EAC/B,gBAAgB,EAKhB,UAAU,EACb,MAAM,yCAAyC,CAAC;AAEjD,OAAO,EACH,mBAAmB,EACtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAIH,YAAY,EAEf,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAY9C;;;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,EACzB,sCAAsC,EAAE,OAAO,EAC/C,iBAAiB,CAAC,EAAE,OAAO,EAC3B,yCAAyC,CAAC,EAAE,OAAO,EACnD,yBAAyB,CAAC,EAAE,OAAO,GACpC,OAAO,CAAC,gBAAgB,CAAC,CAoD3B;AAyDD,wBAAsB,uBAAuB,CACzC,eAAe,EAAE,+BAA+B,EAChD,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,gBAAgB,EACxB,YAAY,EAAE,YAAY,EAC1B,sCAAsC,EAAE,OAAO,GAChD,OAAO,CAAC,MAAM,CAAC,CAiDjB;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,EAC1B,sCAAsC,EAAE,OAAO,GAChD,OAAO,CAAC,mBAAmB,CAAC,CAiC9B"}
package/lib/createFile.js CHANGED
@@ -2,20 +2,17 @@
2
2
  * Copyright (c) Microsoft Corporation and contributors. All rights reserved.
3
3
  * Licensed under the MIT License.
4
4
  */
5
- import { v4 as uuid } from "uuid";
6
- import { assert, Uint8ArrayToString } from "@fluidframework/common-utils";
7
- import { getDocAttributesFromProtocolSummary, NonRetryableError } from "@fluidframework/driver-utils";
8
- import { getGitType } from "@fluidframework/protocol-base";
9
- import { SummaryType } from "@fluidframework/protocol-definitions";
5
+ import { assert } from "@fluidframework/common-utils";
6
+ import { NonRetryableError } from "@fluidframework/driver-utils";
10
7
  import { PerformanceEvent } from "@fluidframework/telemetry-utils";
11
8
  import { OdspErrorType, } from "@fluidframework/odsp-driver-definitions";
12
9
  import { DriverErrorType } from "@fluidframework/driver-definitions";
13
10
  import { getUrlAndHeadersWithAuth } from "./getUrlAndHeadersWithAuth";
14
- import { buildOdspShareLinkReqParams, createCacheSnapshotKey, getWithRetryForTokenRefresh, getOrigin, maxUmpPostBodySize, } from "./odspUtils";
11
+ import { buildOdspShareLinkReqParams, createCacheSnapshotKey, getWithRetryForTokenRefresh, getOrigin } from "./odspUtils";
15
12
  import { createOdspUrl } from "./createOdspUrl";
16
13
  import { getApiRoot } from "./odspUrlHelper";
17
14
  import { OdspDriverUrlResolver } from "./odspDriverUrlResolver";
18
- import { convertCreateNewSummaryTreeToTreeAndBlobs } from "./createNewUtils";
15
+ import { convertCreateNewSummaryTreeToTreeAndBlobs, convertSummaryIntoContainerSnapshot, createNewFluidContainerCore } from "./createNewUtils";
19
16
  import { runWithRetry } from "./retryUtils";
20
17
  import { pkgVersion as driverVersion } from "./packageVersion";
21
18
  import { ClpCompliantAppHeader } from "./contractsPublic";
@@ -145,128 +142,20 @@ export async function createNewFluidFileFromSummary(getStorageToken, newFileInfo
145
142
  // snapshot api can create and return the share link along with creation of file in the response.
146
143
  const createShareLinkParam = buildOdspShareLinkReqParams(newFileInfo.createLinkType);
147
144
  const initialUrl = `${baseUrl}:/opStream/snapshots/snapshot${createShareLinkParam ? `?${createShareLinkParam}` : ""}`;
148
- return getWithRetryForTokenRefresh(async (options) => {
149
- const storageToken = await getStorageToken(options, "CreateNewFile");
150
- return PerformanceEvent.timedExecAsync(logger, { eventName: "createNewFile" }, async (event) => {
151
- const snapshotBody = JSON.stringify(containerSnapshot);
152
- let url;
153
- let headers;
154
- let addInBody = false;
155
- const formBoundary = uuid();
156
- let postBody = `--${formBoundary}\r\n`;
157
- postBody += `Authorization: Bearer ${storageToken}\r\n`;
158
- postBody += `X-HTTP-Method-Override: POST\r\n`;
159
- postBody += `Content-Type: application/json\r\n`;
160
- postBody += `_post: 1\r\n`;
161
- postBody += `\r\n${snapshotBody}\r\n`;
162
- postBody += `\r\n--${formBoundary}--`;
163
- if (postBody.length <= maxUmpPostBodySize) {
164
- const urlObj = new URL(initialUrl);
165
- urlObj.searchParams.set("ump", "1");
166
- url = urlObj.href;
167
- headers = {
168
- "Content-Type": `multipart/form-data;boundary=${formBoundary}`,
169
- };
170
- addInBody = true;
171
- }
172
- else {
173
- const parts = getUrlAndHeadersWithAuth(initialUrl, storageToken, forceAccessTokenViaAuthorizationHeader);
174
- url = parts.url;
175
- headers = Object.assign(Object.assign({}, parts.headers), { "Content-Type": "application/json" });
176
- postBody = snapshotBody;
177
- }
178
- const fetchResponse = await runWithRetry(async () => epochTracker.fetchAndParseAsJSON(url, {
179
- body: postBody,
180
- headers,
181
- method: "POST",
182
- }, "createFile", addInBody), "createFile", logger);
183
- const content = fetchResponse.content;
145
+ return createNewFluidContainerCore({
146
+ containerSnapshot,
147
+ getStorageToken,
148
+ logger,
149
+ initialUrl,
150
+ forceAccessTokenViaAuthorizationHeader,
151
+ epochTracker,
152
+ telemetryName: "CreateNewFile",
153
+ fetchType: "createFile",
154
+ validateResponseCallback: content => {
184
155
  if (!content || !content.itemId) {
185
156
  throw new NonRetryableError("ODSP CreateFile call returned no item ID", DriverErrorType.incorrectServerResponse, { driverVersion });
186
157
  }
187
- event.end(Object.assign({ headers: Object.keys(headers).length !== 0 ? true : undefined, attempts: options.refresh ? 2 : 1 }, fetchResponse.propsToLog));
188
- return content;
189
- });
190
- });
191
- }
192
- function convertSummaryIntoContainerSnapshot(createNewSummary) {
193
- var _a;
194
- const appSummary = createNewSummary.tree[".app"];
195
- const protocolSummary = createNewSummary.tree[".protocol"];
196
- if (!(appSummary && protocolSummary)) {
197
- throw new Error("App and protocol summary required for create new path!!");
198
- }
199
- const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);
200
- const attributesSummaryBlob = {
201
- type: SummaryType.Blob,
202
- content: JSON.stringify(documentAttributes),
203
- };
204
- protocolSummary.tree.attributes = attributesSummaryBlob;
205
- const convertedCreateNewSummary = {
206
- type: SummaryType.Tree,
207
- tree: {
208
- ".protocol": protocolSummary,
209
- ".app": appSummary,
210
- },
211
- };
212
- const snapshotTree = convertSummaryToSnapshotTreeForCreateNew(convertedCreateNewSummary);
213
- const snapshot = {
214
- entries: (_a = snapshotTree.entries) !== null && _a !== void 0 ? _a : [],
215
- message: "app",
216
- sequenceNumber: documentAttributes.sequenceNumber,
217
- type: "container",
218
- };
219
- return snapshot;
220
- }
221
- /**
222
- * Converts a summary tree to ODSP tree
223
- */
224
- export function convertSummaryToSnapshotTreeForCreateNew(summary) {
225
- var _a;
226
- const snapshotTree = {
227
- type: "tree",
228
- entries: [],
229
- };
230
- const keys = Object.keys(summary.tree);
231
- for (const key of keys) {
232
- const summaryObject = summary.tree[key];
233
- let value;
234
- // Tracks if an entry is unreferenced. Currently, only tree entries can be marked as unreferenced. If the
235
- // property is not present, the tree entry is considered referenced. If the property is present and is true,
236
- // the tree entry is considered unreferenced.
237
- let unreferenced;
238
- switch (summaryObject.type) {
239
- case SummaryType.Tree: {
240
- value = convertSummaryToSnapshotTreeForCreateNew(summaryObject);
241
- unreferenced = summaryObject.unreferenced;
242
- break;
243
- }
244
- case SummaryType.Blob: {
245
- const content = typeof summaryObject.content === "string" ?
246
- summaryObject.content : Uint8ArrayToString(summaryObject.content, "base64");
247
- const encoding = typeof summaryObject.content === "string" ? "utf-8" : "base64";
248
- value = {
249
- type: "blob",
250
- content,
251
- encoding,
252
- };
253
- break;
254
- }
255
- case SummaryType.Handle: {
256
- throw new Error("No handle should be present for first summary!!");
257
- }
258
- default: {
259
- throw new Error(`Unknown tree type ${summaryObject.type}`);
260
- }
261
158
  }
262
- const entry = {
263
- path: encodeURIComponent(key),
264
- type: getGitType(summaryObject),
265
- value,
266
- unreferenced,
267
- };
268
- (_a = snapshotTree.entries) === null || _a === void 0 ? void 0 : _a.push(entry);
269
- }
270
- return snapshotTree;
159
+ });
271
160
  }
272
161
  //# sourceMappingURL=createFile.js.map
@@ -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 { v4 as uuid } from \"uuid\";\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 ShareLinkInfoType,\n ISharingLinkKind,\n ShareLinkTypes,\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 buildOdspShareLinkReqParams,\n createCacheSnapshotKey,\n getWithRetryForTokenRefresh,\n INewFileInfo,\n getOrigin,\n maxUmpPostBodySize,\n} from \"./odspUtils\";\nimport { ISnapshotContents } from \"./odspPublicUtils\";\nimport { createOdspUrl } from \"./createOdspUrl\";\nimport { getApiRoot } from \"./odspUrlHelper\";\nimport { EpochTracker } from \"./epochTracker\";\nimport { OdspDriverUrlResolver } from \"./odspDriverUrlResolver\";\nimport { convertCreateNewSummaryTreeToTreeAndBlobs } from \"./createNewUtils\";\nimport { runWithRetry } from \"./retryUtils\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { ClpCompliantAppHeader } from \"./contractsPublic\";\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 forceAccessTokenViaAuthorizationHeader: boolean,\n isClpCompliantApp?: boolean,\n enableSingleRequestForShareLinkWithCreate?: boolean,\n enableShareLinkWithCreate?: 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 // pre-0.58 error message: Invalid filename\n \"Invalid filename for createNew\", OdspErrorType.invalidFileNameError, { driverVersion });\n }\n\n let itemId: string;\n let summaryHandle: string = \"\";\n let shareLinkInfo: ShareLinkInfoType | undefined;\n if (createNewSummary === undefined) {\n itemId = await createNewEmptyFluidFile(\n getStorageToken, newFileInfo, logger, epochTracker, forceAccessTokenViaAuthorizationHeader);\n } else {\n const content = await createNewFluidFileFromSummary(\n getStorageToken,\n newFileInfo,\n logger,\n createNewSummary,\n epochTracker,\n forceAccessTokenViaAuthorizationHeader,\n );\n itemId = content.itemId;\n summaryHandle = content.id;\n\n shareLinkInfo = extractShareLinkData(\n newFileInfo.createLinkType,\n content,\n enableSingleRequestForShareLinkWithCreate,\n enableShareLinkWithCreate);\n }\n\n const odspUrl = createOdspUrl({ ...newFileInfo, itemId, dataStorePath: \"/\" });\n const resolver = new OdspDriverUrlResolver();\n const odspResolvedUrl = await resolver.resolve({\n url: odspUrl,\n headers: { [ClpCompliantAppHeader.isClpCompliantApp]: isClpCompliantApp },\n });\n fileEntry.docId = odspResolvedUrl.hashedDocumentId;\n fileEntry.resolvedUrl = odspResolvedUrl;\n\n odspResolvedUrl.shareLinkInfo = shareLinkInfo;\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\n/**\n * If user requested creation of a sharing link along with the creation of the file by providing either\n * createLinkType (now deprecated) or createLinkScope in the request parameters, extract and save\n * sharing link information from the response if it is available.\n * In case there was an error in creation of the sharing link, error is provided back in the response,\n * and does not impact the creation of file in ODSP.\n * @param requestedSharingLinkKind - Kind of sharing link requested to be created along with the creation of file.\n * @param response - Response object received from the /snapshot api call\n * @returns Sharing link information received in the response from a successful creation of a file.\n */\nfunction extractShareLinkData(\n requestedSharingLinkKind: ShareLinkTypes | ISharingLinkKind | undefined,\n response: ICreateFileResponse,\n enableSingleRequestForShareLinkWithCreate?: boolean,\n enableShareLinkWithCreate?: boolean,\n): ShareLinkInfoType | undefined {\n if (!requestedSharingLinkKind) {\n return;\n }\n let shareLinkInfo: ShareLinkInfoType | undefined;\n if (enableSingleRequestForShareLinkWithCreate) {\n const { sharing } = response;\n if (!sharing) {\n return;\n }\n shareLinkInfo = {\n createLink: {\n type: requestedSharingLinkKind,\n link: sharing.sharingLink ? {\n scope: sharing.sharingLink.scope,\n role: sharing.sharingLink.type,\n webUrl: sharing.sharingLink.webUrl,\n ...sharing.sharingLink,\n } : undefined,\n error: sharing.error,\n shareId: sharing.shareId,\n },\n };\n } else if (enableShareLinkWithCreate) {\n const { sharing, sharingLink, sharingLinkErrorReason } = response;\n if (!sharingLink && !sharingLinkErrorReason) {\n return;\n }\n shareLinkInfo = {\n createLink: {\n type: requestedSharingLinkKind,\n link: sharingLink,\n error: sharingLinkErrorReason,\n shareId: sharing?.shareId,\n },\n };\n }\n return shareLinkInfo;\n}\n\nexport async function createNewEmptyFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n epochTracker: EpochTracker,\n forceAccessTokenViaAuthorizationHeader: boolean,\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(\n initialUrl, storageToken, forceAccessTokenViaAuthorizationHeader);\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 // pre-0.58 error message: ODSP CreateFile call returned no item ID\n \"ODSP CreateFile call returned no item ID (for empty file)\",\n DriverErrorType.incorrectServerResponse,\n { driverVersion });\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n ...fetchResponse.propsToLog,\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 forceAccessTokenViaAuthorizationHeader: boolean,\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\n // Build share link parameter based on the createLinkType provided so that the\n // snapshot api can create and return the share link along with creation of file in the response.\n const createShareLinkParam = buildOdspShareLinkReqParams(newFileInfo.createLinkType);\n const initialUrl =\n `${baseUrl}:/opStream/snapshots/snapshot${createShareLinkParam ? `?${createShareLinkParam}` : \"\"}`;\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 snapshotBody = JSON.stringify(containerSnapshot);\n let url: string;\n let headers: { [index: string]: string; };\n let addInBody = false;\n const formBoundary = uuid();\n let postBody = `--${formBoundary}\\r\\n`;\n postBody += `Authorization: Bearer ${storageToken}\\r\\n`;\n postBody += `X-HTTP-Method-Override: POST\\r\\n`;\n postBody += `Content-Type: application/json\\r\\n`;\n postBody += `_post: 1\\r\\n`;\n postBody += `\\r\\n${snapshotBody}\\r\\n`;\n postBody += `\\r\\n--${formBoundary}--`;\n\n if (postBody.length <= maxUmpPostBodySize) {\n const urlObj = new URL(initialUrl);\n urlObj.searchParams.set(\"ump\", \"1\");\n url = urlObj.href;\n headers = {\n \"Content-Type\": `multipart/form-data;boundary=${formBoundary}`,\n };\n addInBody = true;\n } else {\n const parts = getUrlAndHeadersWithAuth(\n initialUrl, storageToken, forceAccessTokenViaAuthorizationHeader);\n url = parts.url;\n headers = {\n ...parts.headers,\n \"Content-Type\": \"application/json\",\n };\n postBody = snapshotBody;\n }\n\n const fetchResponse = await runWithRetry(\n async () => epochTracker.fetchAndParseAsJSON<ICreateFileResponse>(\n url,\n {\n body: postBody,\n headers,\n method: \"POST\",\n },\n \"createFile\",\n addInBody,\n ),\n \"createFile\",\n logger,\n );\n\n const content = fetchResponse.content;\n if (!content || !content.itemId) {\n throw new NonRetryableError(\n \"ODSP CreateFile call returned no item ID\",\n DriverErrorType.incorrectServerResponse,\n { driverVersion });\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n attempts: options.refresh ? 2 : 1,\n ...fetchResponse.propsToLog,\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 } from \"@fluidframework/common-utils\";\nimport { NonRetryableError } from \"@fluidframework/driver-utils\";\nimport { ISummaryTree } from \"@fluidframework/protocol-definitions\";\nimport { ITelemetryLogger } from \"@fluidframework/common-definitions\";\nimport { PerformanceEvent } from \"@fluidframework/telemetry-utils\";\nimport {\n InstrumentedStorageTokenFetcher,\n IOdspResolvedUrl,\n OdspErrorType,\n ShareLinkInfoType,\n ISharingLinkKind,\n ShareLinkTypes,\n IFileEntry,\n} from \"@fluidframework/odsp-driver-definitions\";\nimport { DriverErrorType } from \"@fluidframework/driver-definitions\";\nimport {\n ICreateFileResponse,\n} from \"./contracts\";\nimport { getUrlAndHeadersWithAuth } from \"./getUrlAndHeadersWithAuth\";\nimport {\n buildOdspShareLinkReqParams,\n createCacheSnapshotKey,\n getWithRetryForTokenRefresh,\n INewFileInfo,\n getOrigin\n} from \"./odspUtils\";\nimport { ISnapshotContents } from \"./odspPublicUtils\";\nimport { createOdspUrl } from \"./createOdspUrl\";\nimport { getApiRoot } from \"./odspUrlHelper\";\nimport { EpochTracker } from \"./epochTracker\";\nimport { OdspDriverUrlResolver } from \"./odspDriverUrlResolver\";\nimport { convertCreateNewSummaryTreeToTreeAndBlobs, convertSummaryIntoContainerSnapshot, createNewFluidContainerCore } from \"./createNewUtils\";\nimport { runWithRetry } from \"./retryUtils\";\nimport { pkgVersion as driverVersion } from \"./packageVersion\";\nimport { ClpCompliantAppHeader } from \"./contractsPublic\";\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 forceAccessTokenViaAuthorizationHeader: boolean,\n isClpCompliantApp?: boolean,\n enableSingleRequestForShareLinkWithCreate?: boolean,\n enableShareLinkWithCreate?: 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 // pre-0.58 error message: Invalid filename\n \"Invalid filename for createNew\", OdspErrorType.invalidFileNameError, { driverVersion });\n }\n\n let itemId: string;\n let summaryHandle: string = \"\";\n let shareLinkInfo: ShareLinkInfoType | undefined;\n if (createNewSummary === undefined) {\n itemId = await createNewEmptyFluidFile(\n getStorageToken, newFileInfo, logger, epochTracker, forceAccessTokenViaAuthorizationHeader);\n } else {\n const content = await createNewFluidFileFromSummary(\n getStorageToken,\n newFileInfo,\n logger,\n createNewSummary,\n epochTracker,\n forceAccessTokenViaAuthorizationHeader,\n );\n itemId = content.itemId;\n summaryHandle = content.id;\n\n shareLinkInfo = extractShareLinkData(\n newFileInfo.createLinkType,\n content,\n enableSingleRequestForShareLinkWithCreate,\n enableShareLinkWithCreate);\n }\n\n const odspUrl = createOdspUrl({ ...newFileInfo, itemId, dataStorePath: \"/\" });\n const resolver = new OdspDriverUrlResolver();\n const odspResolvedUrl = await resolver.resolve({\n url: odspUrl,\n headers: { [ClpCompliantAppHeader.isClpCompliantApp]: isClpCompliantApp },\n });\n fileEntry.docId = odspResolvedUrl.hashedDocumentId;\n fileEntry.resolvedUrl = odspResolvedUrl;\n\n odspResolvedUrl.shareLinkInfo = shareLinkInfo;\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\n/**\n * If user requested creation of a sharing link along with the creation of the file by providing either\n * createLinkType (now deprecated) or createLinkScope in the request parameters, extract and save\n * sharing link information from the response if it is available.\n * In case there was an error in creation of the sharing link, error is provided back in the response,\n * and does not impact the creation of file in ODSP.\n * @param requestedSharingLinkKind - Kind of sharing link requested to be created along with the creation of file.\n * @param response - Response object received from the /snapshot api call\n * @returns Sharing link information received in the response from a successful creation of a file.\n */\nfunction extractShareLinkData(\n requestedSharingLinkKind: ShareLinkTypes | ISharingLinkKind | undefined,\n response: ICreateFileResponse,\n enableSingleRequestForShareLinkWithCreate?: boolean,\n enableShareLinkWithCreate?: boolean,\n): ShareLinkInfoType | undefined {\n if (!requestedSharingLinkKind) {\n return;\n }\n let shareLinkInfo: ShareLinkInfoType | undefined;\n if (enableSingleRequestForShareLinkWithCreate) {\n const { sharing } = response;\n if (!sharing) {\n return;\n }\n shareLinkInfo = {\n createLink: {\n type: requestedSharingLinkKind,\n link: sharing.sharingLink ? {\n scope: sharing.sharingLink.scope,\n role: sharing.sharingLink.type,\n webUrl: sharing.sharingLink.webUrl,\n ...sharing.sharingLink,\n } : undefined,\n error: sharing.error,\n shareId: sharing.shareId,\n },\n };\n } else if (enableShareLinkWithCreate) {\n const { sharing, sharingLink, sharingLinkErrorReason } = response;\n if (!sharingLink && !sharingLinkErrorReason) {\n return;\n }\n shareLinkInfo = {\n createLink: {\n type: requestedSharingLinkKind,\n link: sharingLink,\n error: sharingLinkErrorReason,\n shareId: sharing?.shareId,\n },\n };\n }\n return shareLinkInfo;\n}\n\nexport async function createNewEmptyFluidFile(\n getStorageToken: InstrumentedStorageTokenFetcher,\n newFileInfo: INewFileInfo,\n logger: ITelemetryLogger,\n epochTracker: EpochTracker,\n forceAccessTokenViaAuthorizationHeader: boolean,\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(\n initialUrl, storageToken, forceAccessTokenViaAuthorizationHeader);\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 // pre-0.58 error message: ODSP CreateFile call returned no item ID\n \"ODSP CreateFile call returned no item ID (for empty file)\",\n DriverErrorType.incorrectServerResponse,\n { driverVersion });\n }\n event.end({\n headers: Object.keys(headers).length !== 0 ? true : undefined,\n ...fetchResponse.propsToLog,\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 forceAccessTokenViaAuthorizationHeader: boolean,\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\n // Build share link parameter based on the createLinkType provided so that the\n // snapshot api can create and return the share link along with creation of file in the response.\n const createShareLinkParam = buildOdspShareLinkReqParams(newFileInfo.createLinkType);\n const initialUrl =\n `${baseUrl}:/opStream/snapshots/snapshot${createShareLinkParam ? `?${createShareLinkParam}` : \"\"}`;\n\n return createNewFluidContainerCore<ICreateFileResponse>({\n containerSnapshot,\n getStorageToken,\n logger,\n initialUrl,\n forceAccessTokenViaAuthorizationHeader,\n epochTracker,\n telemetryName: \"CreateNewFile\",\n fetchType: \"createFile\",\n validateResponseCallback: content => {\n if (!content || !content.itemId) {\n throw new NonRetryableError(\n \"ODSP CreateFile call returned no item ID\",\n DriverErrorType.incorrectServerResponse,\n { driverVersion });\n }\n }\n});\n}\n"]}
@@ -3,9 +3,25 @@
3
3
  * Licensed under the MIT License.
4
4
  */
5
5
  import { ISummaryTree } from "@fluidframework/protocol-definitions";
6
+ import { ITelemetryLogger } from "@fluidframework/common-definitions";
7
+ import { InstrumentedStorageTokenFetcher } from "@fluidframework/odsp-driver-definitions";
8
+ import { IOdspSummaryPayload } from "./contracts";
6
9
  import { ISnapshotContents } from "./odspPublicUtils";
10
+ import { EpochTracker, FetchType } from "./epochTracker";
7
11
  /**
8
12
  * Converts a summary(ISummaryTree) taken in detached container to snapshot tree and blobs
9
13
  */
10
14
  export declare function convertCreateNewSummaryTreeToTreeAndBlobs(summary: ISummaryTree, treeId: string): ISnapshotContents;
15
+ export declare function convertSummaryIntoContainerSnapshot(createNewSummary: ISummaryTree): IOdspSummaryPayload;
16
+ export declare function createNewFluidContainerCore<T>(args: {
17
+ containerSnapshot: IOdspSummaryPayload;
18
+ getStorageToken: InstrumentedStorageTokenFetcher;
19
+ logger: ITelemetryLogger;
20
+ initialUrl: string;
21
+ forceAccessTokenViaAuthorizationHeader: boolean;
22
+ epochTracker: EpochTracker;
23
+ telemetryName: string;
24
+ fetchType: FetchType;
25
+ validateResponseCallback?: (content: T) => void;
26
+ }): Promise<T>;
11
27
  //# sourceMappingURL=createNewUtils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createNewUtils.d.ts","sourceRoot":"","sources":["../src/createNewUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAA8B,MAAM,sCAAsC,CAAC;AAGhG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD;;GAEG;AACH,wBAAgB,yCAAyC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgBlH"}
1
+ {"version":3,"file":"createNewUtils.d.ts","sourceRoot":"","sources":["../src/createNewUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAgB,YAAY,EAA8B,MAAM,sCAAsC,CAAC;AAI9G,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,+BAA+B,EAAE,MAAM,yCAAyC,CAAC;AAE1F,OAAO,EAAE,mBAAmB,EAAgE,MAAM,aAAa,CAAC;AAEhH,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIzD;;GAEG;AACH,wBAAgB,yCAAyC,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAgBlH;AAyCD,wBAAgB,mCAAmC,CAAC,gBAAgB,EAAE,YAAY,uBA2BjF;AA2DD,wBAAsB,2BAA2B,CAAC,CAAC,EAAE,IAAI,EAAE;IACvD,iBAAiB,EAAE,mBAAmB,CAAC;IACvC,eAAe,EAAE,+BAA+B,CAAC;IACjD,MAAM,EAAE,gBAAgB,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC,EAAE,OAAO,CAAC;IAChD,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,wBAAwB,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;CACnD,GAAG,OAAO,CAAC,CAAC,CAAC,CA+Eb"}
@@ -5,7 +5,12 @@
5
5
  import { v4 as uuid } from "uuid";
6
6
  import { SummaryType } from "@fluidframework/protocol-definitions";
7
7
  import { getDocAttributesFromProtocolSummary } from "@fluidframework/driver-utils";
8
- import { stringToBuffer, unreachableCase } from "@fluidframework/common-utils";
8
+ import { stringToBuffer, Uint8ArrayToString, unreachableCase } from "@fluidframework/common-utils";
9
+ import { getGitType } from "@fluidframework/protocol-base";
10
+ import { PerformanceEvent } from "@fluidframework/telemetry-utils";
11
+ import { getWithRetryForTokenRefresh, maxUmpPostBodySize } from "./odspUtils";
12
+ import { getUrlAndHeadersWithAuth } from "./getUrlAndHeadersWithAuth";
13
+ import { runWithRetry } from "./retryUtils";
9
14
  /**
10
15
  * Converts a summary(ISummaryTree) taken in detached container to snapshot tree and blobs
11
16
  */
@@ -59,4 +64,127 @@ function convertCreateNewSummaryTreeToTreeAndBlobsCore(summary, blobs) {
59
64
  }
60
65
  return treeNode;
61
66
  }
67
+ export function convertSummaryIntoContainerSnapshot(createNewSummary) {
68
+ var _a;
69
+ const appSummary = createNewSummary.tree[".app"];
70
+ const protocolSummary = createNewSummary.tree[".protocol"];
71
+ if (!(appSummary && protocolSummary)) {
72
+ throw new Error("App and protocol summary required for create new path!!");
73
+ }
74
+ const documentAttributes = getDocAttributesFromProtocolSummary(protocolSummary);
75
+ const attributesSummaryBlob = {
76
+ type: SummaryType.Blob,
77
+ content: JSON.stringify(documentAttributes),
78
+ };
79
+ protocolSummary.tree.attributes = attributesSummaryBlob;
80
+ const convertedCreateNewSummary = {
81
+ type: SummaryType.Tree,
82
+ tree: {
83
+ ".protocol": protocolSummary,
84
+ ".app": appSummary,
85
+ },
86
+ };
87
+ const snapshotTree = convertSummaryToSnapshotTreeForCreateNew(convertedCreateNewSummary);
88
+ const snapshot = {
89
+ entries: (_a = snapshotTree.entries) !== null && _a !== void 0 ? _a : [],
90
+ message: "app",
91
+ sequenceNumber: documentAttributes.sequenceNumber,
92
+ type: "container",
93
+ };
94
+ return snapshot;
95
+ }
96
+ /**
97
+ * Converts a summary tree to ODSP tree
98
+ */
99
+ function convertSummaryToSnapshotTreeForCreateNew(summary) {
100
+ var _a;
101
+ const snapshotTree = {
102
+ type: "tree",
103
+ entries: [],
104
+ };
105
+ const keys = Object.keys(summary.tree);
106
+ for (const key of keys) {
107
+ const summaryObject = summary.tree[key];
108
+ let value;
109
+ // Tracks if an entry is unreferenced. Currently, only tree entries can be marked as unreferenced. If the
110
+ // property is not present, the tree entry is considered referenced. If the property is present and is true,
111
+ // the tree entry is considered unreferenced.
112
+ let unreferenced;
113
+ switch (summaryObject.type) {
114
+ case SummaryType.Tree: {
115
+ value = convertSummaryToSnapshotTreeForCreateNew(summaryObject);
116
+ unreferenced = summaryObject.unreferenced;
117
+ break;
118
+ }
119
+ case SummaryType.Blob: {
120
+ const content = typeof summaryObject.content === "string" ?
121
+ summaryObject.content : Uint8ArrayToString(summaryObject.content, "base64");
122
+ const encoding = typeof summaryObject.content === "string" ? "utf-8" : "base64";
123
+ value = {
124
+ type: "blob",
125
+ content,
126
+ encoding,
127
+ };
128
+ break;
129
+ }
130
+ case SummaryType.Handle: {
131
+ throw new Error("No handle should be present for first summary!!");
132
+ }
133
+ default: {
134
+ throw new Error(`Unknown tree type ${summaryObject.type}`);
135
+ }
136
+ }
137
+ const entry = {
138
+ path: encodeURIComponent(key),
139
+ type: getGitType(summaryObject),
140
+ value,
141
+ unreferenced,
142
+ };
143
+ (_a = snapshotTree.entries) === null || _a === void 0 ? void 0 : _a.push(entry);
144
+ }
145
+ return snapshotTree;
146
+ }
147
+ export async function createNewFluidContainerCore(args) {
148
+ const { containerSnapshot, getStorageToken, logger, initialUrl, forceAccessTokenViaAuthorizationHeader, epochTracker, telemetryName, fetchType, validateResponseCallback } = args;
149
+ return getWithRetryForTokenRefresh(async (options) => {
150
+ const storageToken = await getStorageToken(options, telemetryName);
151
+ return PerformanceEvent.timedExecAsync(logger, { eventName: telemetryName }, async (event) => {
152
+ const snapshotBody = JSON.stringify(containerSnapshot);
153
+ let url;
154
+ let headers;
155
+ let addInBody = false;
156
+ const formBoundary = uuid();
157
+ let postBody = `--${formBoundary}\r\n`;
158
+ postBody += `Authorization: Bearer ${storageToken}\r\n`;
159
+ postBody += `X-HTTP-Method-Override: POST\r\n`;
160
+ postBody += `Content-Type: application/json\r\n`;
161
+ postBody += `_post: 1\r\n`;
162
+ postBody += `\r\n${snapshotBody}\r\n`;
163
+ postBody += `\r\n--${formBoundary}--`;
164
+ if (postBody.length <= maxUmpPostBodySize) {
165
+ const urlObj = new URL(initialUrl);
166
+ urlObj.searchParams.set("ump", "1");
167
+ url = urlObj.href;
168
+ headers = {
169
+ "Content-Type": `multipart/form-data;boundary=${formBoundary}`,
170
+ };
171
+ addInBody = true;
172
+ }
173
+ else {
174
+ const parts = getUrlAndHeadersWithAuth(initialUrl, storageToken, forceAccessTokenViaAuthorizationHeader);
175
+ url = parts.url;
176
+ headers = Object.assign(Object.assign({}, parts.headers), { "Content-Type": "application/json" });
177
+ postBody = snapshotBody;
178
+ }
179
+ const fetchResponse = await runWithRetry(async () => epochTracker.fetchAndParseAsJSON(url, {
180
+ body: postBody,
181
+ headers,
182
+ method: "POST",
183
+ }, fetchType, addInBody), telemetryName, logger);
184
+ validateResponseCallback === null || validateResponseCallback === void 0 ? void 0 : validateResponseCallback(fetchResponse.content);
185
+ event.end(Object.assign({ headers: Object.keys(headers).length !== 0 ? true : undefined, attempts: options.refresh ? 2 : 1 }, fetchResponse.propsToLog));
186
+ return fetchResponse.content;
187
+ });
188
+ });
189
+ }
62
190
  //# sourceMappingURL=createNewUtils.js.map