azure-kusto-ingest 7.0.0-alpha.0 → 7.0.0-alpha.2

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 (30) hide show
  1. package/dist-esm/src/abstractKustoClient.js.map +1 -1
  2. package/dist-esm/src/columnMappings.js.map +1 -1
  3. package/dist-esm/src/descriptors.js.map +1 -1
  4. package/dist-esm/src/fileDescriptor.browser.js.map +1 -1
  5. package/dist-esm/src/fileDescriptor.js +1 -2
  6. package/dist-esm/src/fileDescriptor.js.map +1 -1
  7. package/dist-esm/src/ingestClient.js.map +1 -1
  8. package/dist-esm/src/ingestClientBase.js.map +1 -1
  9. package/dist-esm/src/ingestionBlobInfo.js.map +1 -1
  10. package/dist-esm/src/ingestionProperties.js.map +1 -1
  11. package/dist-esm/src/ingestionResult.js.map +1 -1
  12. package/dist-esm/src/managedStreamingIngestClient.js +1 -1
  13. package/dist-esm/src/managedStreamingIngestClient.js.map +1 -1
  14. package/dist-esm/src/rankedStorageAccount.js.map +1 -1
  15. package/dist-esm/src/rankedStorageAccountSet.js.map +1 -1
  16. package/dist-esm/src/resourceManager.js.map +1 -1
  17. package/dist-esm/src/retry.js.map +1 -1
  18. package/dist-esm/src/status.js.map +1 -1
  19. package/dist-esm/src/statusQ.js.map +1 -1
  20. package/dist-esm/src/streamUtils.js.map +1 -1
  21. package/dist-esm/src/streamingIngestClient.browser.js.map +1 -1
  22. package/dist-esm/src/streamingIngestClient.js.map +1 -1
  23. package/dist-esm/src/streamingIngestClientBase.js.map +1 -1
  24. package/package.json +6 -4
  25. package/types/src/descriptors.d.ts +0 -1
  26. package/types/src/ingestClient.d.ts +0 -1
  27. package/types/src/managedStreamingIngestClient.d.ts +0 -1
  28. package/types/src/streamUtils.browser.d.ts +0 -1
  29. package/types/src/streamUtils.d.ts +0 -1
  30. package/types/src/streamingIngestClient.d.ts +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"abstractKustoClient.js","sourceRoot":"","sources":["../../src/abstractKustoClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,mBAAmB,EAA4B,MAAM,0BAA0B,CAAC;AAEzF,OAAO,IAAI,MAAM,OAAO,CAAC;AAEzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,MAAM,OAAgB,mBAAmB;IAKrC,YAAsB,YAAsC;QAFlD,cAAS,GAAY,KAAK,CAAC;QAGjC,IAAI,CAAC,YAAY,EAAE;YACf,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;SACnD;aAAM,IAAI,CAAC,CAAC,YAAY,YAAY,mBAAmB,CAAC,EAAE;YACvD,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;SAC7D;aAAM;YACH,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;SAC7D;IACL,CAAC;IAED,eAAe,CAAC,aAAwC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACrD,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YACjB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;SACzC;QAED,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACjB,CAAC;IAQM,KAAK;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAES,UAAU;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;SACvC;IACL,CAAC;IAED,oBAAoB,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE;YAC1F,OAAO,UAAU,CAAC;SACrB;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CAAC,CAAC;IAChF,CAAC;IAED,gBAAgB,CAAC,UAAmB;QAChC,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;YAClD,OAAO,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;SAChD;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,kBAAkB,CAAC,UAAkB;QACjC,IAAI;YACA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE;gBACZ,OAAO,IAAI,CAAC;aACf;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrD,OAAO,YAAY,IAAI,KAAK,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,8BAA8B,CAAC;SAC9F;QAAC,WAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionProperties, IngestionPropertiesInput } from \"./ingestionProperties.js\";\nimport { StreamDescriptor, FileDescriptorBase, BlobDescriptor } from \"./descriptors.js\";\nimport isIP from \"is-ip\";\n\nconst INGEST_PREFIX = \"ingest-\";\nconst PROTOCOL_SUFFIX = \"://\";\n\nexport abstract class AbstractKustoClient {\n public defaultProps: IngestionProperties;\n public defaultDatabase?: string;\n protected _isClosed: boolean = false;\n\n protected constructor(defaultProps: IngestionPropertiesInput) {\n if (!defaultProps) {\n this.defaultProps = new IngestionProperties({});\n } else if (!(defaultProps instanceof IngestionProperties)) {\n this.defaultProps = new IngestionProperties(defaultProps);\n } else {\n this.defaultProps = new IngestionProperties(defaultProps);\n }\n }\n\n _getMergedProps(newProperties?: IngestionPropertiesInput): IngestionProperties {\n const props = this.defaultProps.merge(newProperties);\n props.setDefaults();\n if (!props.database) {\n props.database = this.defaultDatabase;\n }\n\n props.validate();\n return props;\n }\n\n abstract ingestFromStream(stream: StreamDescriptor, ingestionProperties: IngestionPropertiesInput): Promise<any>;\n\n abstract ingestFromFile(file: FileDescriptorBase | string | Blob, ingestionProperties: IngestionPropertiesInput): Promise<any>;\n\n abstract ingestFromBlob(blob: string | BlobDescriptor, ingestionProperties?: IngestionPropertiesInput): Promise<any>;\n\n public close(): void {\n this._isClosed = true;\n }\n\n protected ensureOpen() {\n if (this._isClosed) {\n throw new Error(\"Client is closed\");\n }\n }\n\n getIngestionEndpoint(clusterUrl?: string): string | undefined {\n if (!clusterUrl || clusterUrl.includes(INGEST_PREFIX) || this.isReservedHostname(clusterUrl)) {\n return clusterUrl;\n }\n return clusterUrl.replace(PROTOCOL_SUFFIX, PROTOCOL_SUFFIX + INGEST_PREFIX);\n }\n\n getQueryEndpoint(clusterUrl?: string): string | undefined {\n if (clusterUrl && clusterUrl.includes(INGEST_PREFIX)) {\n return clusterUrl.replace(INGEST_PREFIX, \"\");\n }\n return clusterUrl;\n }\n\n isReservedHostname(clusterUrl: string): boolean {\n try {\n const parsedUrl = new URL(clusterUrl);\n const authority = parsedUrl.hostname;\n if (!authority) {\n return true;\n }\n const is_ip = isIP(authority);\n const is_localhost = authority.includes(\"localhost\");\n return is_localhost || is_ip || authority.toLowerCase() === \"onebox.dev.kusto.windows.net\";\n } catch {\n return false;\n }\n }\n}\n"]}
1
+ {"version":3,"file":"abstractKustoClient.js","sourceRoot":"","sources":["../../src/abstractKustoClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,mBAAmB,EAA4B,MAAM,0BAA0B,CAAC;AAEzF,OAAO,IAAI,MAAM,OAAO,CAAC;AAEzB,MAAM,aAAa,GAAG,SAAS,CAAC;AAChC,MAAM,eAAe,GAAG,KAAK,CAAC;AAE9B,MAAM,OAAgB,mBAAmB;IAKrC,YAAsB,YAAsC;QAFlD,cAAS,GAAY,KAAK,CAAC;QAGjC,IAAI,CAAC,YAAY,EAAE,CAAC;YAChB,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,CAAC,CAAC,YAAY,YAAY,mBAAmB,CAAC,EAAE,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,eAAe,CAAC,aAAwC;QACpD,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACrD,KAAK,CAAC,WAAW,EAAE,CAAC;QACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAClB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;QAC1C,CAAC;QAED,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,OAAO,KAAK,CAAC;IACjB,CAAC;IAQM,KAAK;QACR,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;IAC1B,CAAC;IAES,UAAU;QAChB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED,oBAAoB,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3F,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,OAAO,UAAU,CAAC,OAAO,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa,CAAC,CAAC;IAChF,CAAC;IAED,gBAAgB,CAAC,UAAmB;QAChC,IAAI,UAAU,IAAI,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACnD,OAAO,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,kBAAkB,CAAC,UAAkB;QACjC,IAAI,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YACtC,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC;YACrC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACb,OAAO,IAAI,CAAC;YAChB,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;YAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;YACrD,OAAO,YAAY,IAAI,KAAK,IAAI,SAAS,CAAC,WAAW,EAAE,KAAK,8BAA8B,CAAC;QAC/F,CAAC;QAAC,WAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionProperties, IngestionPropertiesInput } from \"./ingestionProperties.js\";\nimport { StreamDescriptor, FileDescriptorBase, BlobDescriptor } from \"./descriptors.js\";\nimport isIP from \"is-ip\";\n\nconst INGEST_PREFIX = \"ingest-\";\nconst PROTOCOL_SUFFIX = \"://\";\n\nexport abstract class AbstractKustoClient {\n public defaultProps: IngestionProperties;\n public defaultDatabase?: string;\n protected _isClosed: boolean = false;\n\n protected constructor(defaultProps: IngestionPropertiesInput) {\n if (!defaultProps) {\n this.defaultProps = new IngestionProperties({});\n } else if (!(defaultProps instanceof IngestionProperties)) {\n this.defaultProps = new IngestionProperties(defaultProps);\n } else {\n this.defaultProps = new IngestionProperties(defaultProps);\n }\n }\n\n _getMergedProps(newProperties?: IngestionPropertiesInput): IngestionProperties {\n const props = this.defaultProps.merge(newProperties);\n props.setDefaults();\n if (!props.database) {\n props.database = this.defaultDatabase;\n }\n\n props.validate();\n return props;\n }\n\n abstract ingestFromStream(stream: StreamDescriptor, ingestionProperties: IngestionPropertiesInput): Promise<any>;\n\n abstract ingestFromFile(file: FileDescriptorBase | string | Blob, ingestionProperties: IngestionPropertiesInput): Promise<any>;\n\n abstract ingestFromBlob(blob: string | BlobDescriptor, ingestionProperties?: IngestionPropertiesInput): Promise<any>;\n\n public close(): void {\n this._isClosed = true;\n }\n\n protected ensureOpen() {\n if (this._isClosed) {\n throw new Error(\"Client is closed\");\n }\n }\n\n getIngestionEndpoint(clusterUrl?: string): string | undefined {\n if (!clusterUrl || clusterUrl.includes(INGEST_PREFIX) || this.isReservedHostname(clusterUrl)) {\n return clusterUrl;\n }\n return clusterUrl.replace(PROTOCOL_SUFFIX, PROTOCOL_SUFFIX + INGEST_PREFIX);\n }\n\n getQueryEndpoint(clusterUrl?: string): string | undefined {\n if (clusterUrl && clusterUrl.includes(INGEST_PREFIX)) {\n return clusterUrl.replace(INGEST_PREFIX, \"\");\n }\n return clusterUrl;\n }\n\n isReservedHostname(clusterUrl: string): boolean {\n try {\n const parsedUrl = new URL(clusterUrl);\n const authority = parsedUrl.hostname;\n if (!authority) {\n return true;\n }\n const is_ip = isIP(authority);\n const is_localhost = authority.includes(\"localhost\");\n return is_localhost || is_ip || authority.toLowerCase() === \"onebox.dev.kusto.windows.net\";\n } catch {\n return false;\n }\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"columnMappings.js","sourceRoot":"","sources":["../../src/columnMappings.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* eslint-disable @typescript-eslint/ban-types -- We legitimately want to use {} as a \"any non-nullable type\" */\n\nimport { IngestionMappingKind } from \"./ingestionProperties.js\";\n\nexport enum FieldTransformation {\n PropertyBagArrayToDictionary = \"PropertyBagArrayToDictionary\",\n DateTimeFromUnixSeconds = \"DateTimeFromUnixSeconds\",\n DateTimeFromUnixMilliseconds = \"DateTimeFromUnixMilliseconds\",\n DateTimeFromUnixMicroseconds = \"DateTimeFromUnixMicroseconds\",\n DateTimeFromUnixNanoseconds = \"DateTimeFromUnixNanoseconds\",\n}\n\nexport enum ConstantTransformation {\n SourceLocation = \"SourceLocation\",\n SourceLineNumber = \"SourceLineNumber\",\n}\n\nexport type Transformation = FieldTransformation | ConstantTransformation;\n\ninterface MappingProperties {\n Field?: string;\n Path?: string;\n Ordinal?: number;\n ConstValue?: {};\n Transform?: Transformation;\n}\n\ntype MappingPropertiesStrings = {\n [key in keyof MappingProperties]: string;\n};\n\ninterface ApiColumnMapping {\n Column: string;\n DataType?: string;\n Properties?: MappingPropertiesStrings;\n}\n\nexport abstract class ColumnMapping {\n protected constructor(readonly columnName: string, readonly cslDataType?: string, readonly Properties?: MappingProperties) {}\n\n public abstract mappingKind: IngestionMappingKind;\n\n public toApiMapping(): ApiColumnMapping {\n const result: ApiColumnMapping = {\n Column: this.columnName,\n };\n if (this.cslDataType) {\n result.DataType = this.cslDataType;\n }\n\n if (this.Properties) {\n result.Properties = {};\n for (const key in this.Properties) {\n if (Object.prototype.hasOwnProperty.call(this.Properties, key)) {\n const typedKey = key as keyof MappingProperties;\n const property = this.Properties[typedKey];\n\n // We don't do if (property) because we '0' is a legitimate value\n if (property !== undefined && property !== null) {\n result.Properties[typedKey] = property.toString();\n }\n }\n }\n }\n return result;\n }\n}\n\nexport class CsvColumnMapping extends ColumnMapping {\n /**\n * @deprecated Use the factory methods instead.\n */\n protected constructor(readonly columnName: string, readonly cslDataType?: string, readonly ordinal?: string, constantValue?: {}) {\n super(columnName, cslDataType, {\n Ordinal: ordinal === undefined ? undefined : parseInt(ordinal, 10),\n ConstValue: constantValue,\n });\n }\n\n public static withOrdinal(columnName: string, ordinal: number, cslDataType?: string): CsvColumnMapping {\n return new CsvColumnMapping(columnName, cslDataType, ordinal.toString());\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): CsvColumnMapping {\n return new CsvColumnMapping(columnName, cslDataType, undefined, constantValue);\n }\n\n mappingKind = IngestionMappingKind.CSV;\n}\n\nexport class JsonColumnMapping extends ColumnMapping {\n /**\n * @deprecated Use the factory methods instead.\n */\n constructor(readonly columnName: string, readonly jsonPath?: string, cslDataType: string | null = null, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: jsonPath,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): JsonColumnMapping {\n return new JsonColumnMapping(columnName, path, cslDataType, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): JsonColumnMapping {\n return new JsonColumnMapping(columnName, undefined, cslDataType, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): JsonColumnMapping {\n return new JsonColumnMapping(columnName, undefined, cslDataType, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.JSON;\n}\n\nexport class AvroColumnMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, path?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.AVRO;\n}\n\nexport class ApacheAvroColumnMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, path?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.APACHEAVRO;\n}\n\nexport class SStreamColumnMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, path?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.SSTREAM;\n}\n\nexport class ParquetColumnMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, path?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.PARQUET;\n}\n\nexport class OrcColumnMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, path?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.ORC;\n}\n\nexport class W3CLogFileMapping extends ColumnMapping {\n private constructor(readonly columnName: string, cslDataType?: string, field?: string, constantValue?: {}, transform?: Transformation) {\n super(columnName, cslDataType ?? undefined, { Field: field, ConstValue: constantValue, Transform: transform });\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.W3CLOGFILE;\n}\n"]}
1
+ {"version":3,"file":"columnMappings.js","sourceRoot":"","sources":["../../src/columnMappings.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/* eslint-disable @typescript-eslint/ban-types -- We legitimately want to use {} as a \"any non-nullable type\" */\n\nimport { IngestionMappingKind } from \"./ingestionProperties.js\";\n\nexport enum FieldTransformation {\n PropertyBagArrayToDictionary = \"PropertyBagArrayToDictionary\",\n DateTimeFromUnixSeconds = \"DateTimeFromUnixSeconds\",\n DateTimeFromUnixMilliseconds = \"DateTimeFromUnixMilliseconds\",\n DateTimeFromUnixMicroseconds = \"DateTimeFromUnixMicroseconds\",\n DateTimeFromUnixNanoseconds = \"DateTimeFromUnixNanoseconds\",\n}\n\nexport enum ConstantTransformation {\n SourceLocation = \"SourceLocation\",\n SourceLineNumber = \"SourceLineNumber\",\n}\n\nexport type Transformation = FieldTransformation | ConstantTransformation;\n\ninterface MappingProperties {\n Field?: string;\n Path?: string;\n Ordinal?: number;\n ConstValue?: {};\n Transform?: Transformation;\n}\n\ntype MappingPropertiesStrings = {\n [key in keyof MappingProperties]: string;\n};\n\ninterface ApiColumnMapping {\n Column: string;\n DataType?: string;\n Properties?: MappingPropertiesStrings;\n}\n\nexport abstract class ColumnMapping {\n protected constructor(\n readonly columnName: string,\n readonly cslDataType?: string,\n readonly Properties?: MappingProperties,\n ) {}\n\n public abstract mappingKind: IngestionMappingKind;\n\n public toApiMapping(): ApiColumnMapping {\n const result: ApiColumnMapping = {\n Column: this.columnName,\n };\n if (this.cslDataType) {\n result.DataType = this.cslDataType;\n }\n\n if (this.Properties) {\n result.Properties = {};\n for (const key in this.Properties) {\n if (Object.prototype.hasOwnProperty.call(this.Properties, key)) {\n const typedKey = key as keyof MappingProperties;\n const property = this.Properties[typedKey];\n\n // We don't do if (property) because we '0' is a legitimate value\n if (property !== undefined && property !== null) {\n result.Properties[typedKey] = property.toString();\n }\n }\n }\n }\n return result;\n }\n}\n\nexport class CsvColumnMapping extends ColumnMapping {\n /**\n * @deprecated Use the factory methods instead.\n */\n protected constructor(\n readonly columnName: string,\n readonly cslDataType?: string,\n readonly ordinal?: string,\n constantValue?: {},\n ) {\n super(columnName, cslDataType, {\n Ordinal: ordinal === undefined ? undefined : parseInt(ordinal, 10),\n ConstValue: constantValue,\n });\n }\n\n public static withOrdinal(columnName: string, ordinal: number, cslDataType?: string): CsvColumnMapping {\n return new CsvColumnMapping(columnName, cslDataType, ordinal.toString());\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): CsvColumnMapping {\n return new CsvColumnMapping(columnName, cslDataType, undefined, constantValue);\n }\n\n mappingKind = IngestionMappingKind.CSV;\n}\n\nexport class JsonColumnMapping extends ColumnMapping {\n /**\n * @deprecated Use the factory methods instead.\n */\n constructor(\n readonly columnName: string,\n readonly jsonPath?: string,\n cslDataType: string | null = null,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: jsonPath,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): JsonColumnMapping {\n return new JsonColumnMapping(columnName, path, cslDataType, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): JsonColumnMapping {\n return new JsonColumnMapping(columnName, undefined, cslDataType, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): JsonColumnMapping {\n return new JsonColumnMapping(columnName, undefined, cslDataType, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.JSON;\n}\n\nexport class AvroColumnMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n path?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): AvroColumnMapping {\n return new AvroColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.AVRO;\n}\n\nexport class ApacheAvroColumnMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n path?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): ApacheAvroColumnMapping {\n return new ApacheAvroColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.APACHEAVRO;\n}\n\nexport class SStreamColumnMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n path?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): SStreamColumnMapping {\n return new SStreamColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.SSTREAM;\n}\n\nexport class ParquetColumnMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n path?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): ParquetColumnMapping {\n return new ParquetColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.PARQUET;\n}\n\nexport class OrcColumnMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n path?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, {\n Path: path,\n Field: field,\n ConstValue: constantValue,\n Transform: transform,\n });\n }\n\n public static withPath(columnName: string, path: string, cslDataType?: string, transform?: FieldTransformation): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, path, undefined, undefined, transform);\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): OrcColumnMapping {\n return new OrcColumnMapping(columnName, cslDataType, undefined, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.ORC;\n}\n\nexport class W3CLogFileMapping extends ColumnMapping {\n private constructor(\n readonly columnName: string,\n cslDataType?: string,\n field?: string,\n constantValue?: {},\n transform?: Transformation,\n ) {\n super(columnName, cslDataType ?? undefined, { Field: field, ConstValue: constantValue, Transform: transform });\n }\n\n public static withField(columnName: string, field: string, cslDataType?: string, transform?: FieldTransformation): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, field, undefined, transform);\n }\n\n public static withConstantValue(columnName: string, constantValue: {}, cslDataType?: string): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, undefined, constantValue);\n }\n\n public static withTransform(columnName: string, transform: ConstantTransformation, cslDataType?: string): W3CLogFileMapping {\n return new W3CLogFileMapping(columnName, cslDataType, undefined, undefined, transform);\n }\n\n mappingKind = IngestionMappingKind.W3CLOGFILE;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"descriptors.js","sourceRoot":"","sources":["../../src/descriptors.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport uuidValidate from \"uuid-validate\";\nimport { Readable } from \"stream\";\nimport IngestionProperties from \"./ingestionProperties.js\";\nimport { BlobClient } from \"@azure/storage-blob\";\n\nexport enum CompressionType {\n ZIP = \".zip\",\n GZIP = \".gz\",\n None = \"\",\n}\n\nexport const getSourceId = (sourceId: string | null): string => {\n if (sourceId) {\n if (!uuidValidate(sourceId, 4)) {\n throw Error(\"sourceId is not a valid uuid/v4\");\n }\n return sourceId;\n }\n return uuidv4();\n};\n\nexport function shouldCompressFileByExtension(extension?: string): boolean {\n return !(extension === \".avro\" || extension === \".apacheavro\" || extension === \".parquet\" || extension === \".sstream\" || extension === \".orc\");\n}\n\nexport abstract class AbstractDescriptor {\n constructor(public sourceId: string | null = null, public size: number | null = null) {\n this.sourceId = getSourceId(sourceId);\n }\n}\n\nexport class StreamDescriptor extends AbstractDescriptor {\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n constructor(\n readonly stream: Readable | ArrayBuffer,\n sourceId: string | null = null,\n public compressionType: CompressionType = CompressionType.None,\n size: number | null = null\n ) {\n super(sourceId, size);\n }\n\n merge(other: StreamDescriptor) {\n this.size = other.size;\n this.compressionType = other.compressionType;\n this.sourceId = other.sourceId;\n return this;\n }\n\n // Currently streams are not compressed by us\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \"\";\n }\n}\n\nexport class BlobDescriptor extends AbstractDescriptor {\n constructor(readonly path: string, size: number | null = null, sourceId: string | null = null) {\n super(sourceId, size);\n }\n\n async fillSize(): Promise<void> {\n if (!this.size) {\n const blobClient = new BlobClient(this.path);\n const blobProps = await blobClient.getProperties();\n const length = blobProps.contentLength;\n if (length !== undefined) {\n if (length === 0) {\n throw new Error(\"Empty blob.\");\n }\n this.size = length;\n }\n }\n }\n}\n\nexport interface FileDescriptorBase {\n size: number | null;\n zipped: boolean;\n compressionType: CompressionType;\n cleanupTmp?: () => Promise<void>;\n extension?: string;\n name?: string;\n sourceId: string | null;\n getCompressionSuffix: () => string;\n}\n\nexport const generateBlobName = (desc: StreamDescriptor | FileDescriptorBase, props: IngestionProperties): string => {\n const extension = desc instanceof StreamDescriptor ? null : `${desc.name ? \"__\" + desc.name : `${desc.extension ? \".\" + desc.extension : \"\"}`}`;\n\n const formatSuffix = props.format ? `.${props.format}` : \".csv\";\n const compressionString = desc.getCompressionSuffix();\n return `${props.database}__${props.table}__${desc.sourceId}${extension || formatSuffix}${compressionString}`;\n};\n"]}
1
+ {"version":3,"file":"descriptors.js","sourceRoot":"","sources":["../../src/descriptors.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport uuidValidate from \"uuid-validate\";\nimport { Readable } from \"stream\";\nimport IngestionProperties from \"./ingestionProperties.js\";\nimport { BlobClient } from \"@azure/storage-blob\";\n\nexport enum CompressionType {\n ZIP = \".zip\",\n GZIP = \".gz\",\n None = \"\",\n}\n\nexport const getSourceId = (sourceId: string | null): string => {\n if (sourceId) {\n if (!uuidValidate(sourceId, 4)) {\n throw Error(\"sourceId is not a valid uuid/v4\");\n }\n return sourceId;\n }\n return uuidv4();\n};\n\nexport function shouldCompressFileByExtension(extension?: string): boolean {\n return !(extension === \".avro\" || extension === \".apacheavro\" || extension === \".parquet\" || extension === \".sstream\" || extension === \".orc\");\n}\n\nexport abstract class AbstractDescriptor {\n constructor(\n public sourceId: string | null = null,\n public size: number | null = null,\n ) {\n this.sourceId = getSourceId(sourceId);\n }\n}\n\nexport class StreamDescriptor extends AbstractDescriptor {\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n constructor(\n readonly stream: Readable | ArrayBuffer,\n sourceId: string | null = null,\n public compressionType: CompressionType = CompressionType.None,\n size: number | null = null,\n ) {\n super(sourceId, size);\n }\n\n merge(other: StreamDescriptor) {\n this.size = other.size;\n this.compressionType = other.compressionType;\n this.sourceId = other.sourceId;\n return this;\n }\n\n // Currently streams are not compressed by us\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \"\";\n }\n}\n\nexport class BlobDescriptor extends AbstractDescriptor {\n constructor(\n readonly path: string,\n size: number | null = null,\n sourceId: string | null = null,\n ) {\n super(sourceId, size);\n }\n\n async fillSize(): Promise<void> {\n if (!this.size) {\n const blobClient = new BlobClient(this.path);\n const blobProps = await blobClient.getProperties();\n const length = blobProps.contentLength;\n if (length !== undefined) {\n if (length === 0) {\n throw new Error(\"Empty blob.\");\n }\n this.size = length;\n }\n }\n }\n}\n\nexport interface FileDescriptorBase {\n size: number | null;\n zipped: boolean;\n compressionType: CompressionType;\n cleanupTmp?: () => Promise<void>;\n extension?: string;\n name?: string;\n sourceId: string | null;\n getCompressionSuffix: () => string;\n}\n\nexport const generateBlobName = (desc: StreamDescriptor | FileDescriptorBase, props: IngestionProperties): string => {\n const extension = desc instanceof StreamDescriptor ? null : `${desc.name ? \"__\" + desc.name : `${desc.extension ? \".\" + desc.extension : \"\"}`}`;\n\n const formatSuffix = props.format ? `.${props.format}` : \".csv\";\n const compressionString = desc.getCompressionSuffix();\n return `${props.database}__${props.table}__${desc.sourceId}${extension || formatSuffix}${compressionString}`;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fileDescriptor.browser.js","sourceRoot":"","sources":["../../src/fileDescriptor.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAsB,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC1H,OAAO,EAA4B,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAOlD,YACa,IAAU,EACnB,WAA0B,IAAI,EAC9B,OAAsB,IAAI,EAC1B,kBAAmC,eAAe,CAAC,IAAI,EAC9C,SAAkB,EAClB,IAAa;QAEtB,KAAK,CAAC,QAAQ,CAAC,CAAC;QAPP,SAAI,GAAJ,IAAI,CAAM;QAIV,cAAS,GAAT,SAAS,CAAS;QAClB,SAAI,GAAJ,IAAI,CAAS;QAGtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,eAAe,KAAK,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;QAChH,IAAI,CAAC,iBAAiB,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,mBAA8C;QACxD,MAAM,yBAAyB,GAAG,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,yBAAyB,EAAE;YACvE,IAAI;gBACA,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACzD,OAAO,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;aAC9B;YAAC,OAAO,CAAC,EAAE;gBACR,kCAAkC;aACrC;SACJ;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;SAC3B;IACL,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport pako from \"pako\";\nimport { AbstractDescriptor, CompressionType, FileDescriptorBase, shouldCompressFileByExtension } from \"./descriptors.js\";\nimport { IngestionPropertiesInput, shouldCompressFileByFormat } from \"./ingestionProperties.js\";\n\nexport class FileDescriptor extends AbstractDescriptor implements FileDescriptorBase {\n size: number | null;\n zipped: boolean;\n compressionType: CompressionType;\n shouldNotCompress: boolean;\n cleanupTmp?: () => Promise<void>;\n\n constructor(\n readonly file: Blob,\n sourceId: string | null = null,\n size: number | null = null,\n compressionType: CompressionType = CompressionType.None,\n readonly extension?: string,\n readonly name?: string\n ) {\n super(sourceId);\n this.compressionType = compressionType;\n this.size = size || file.size;\n this.zipped = compressionType !== CompressionType.None || this.extension === \".gz\" || this.extension === \".zip\";\n this.shouldNotCompress = !shouldCompressFileByExtension(this.extension);\n }\n\n async prepare(ingestionProperties?: IngestionPropertiesInput): Promise<Blob> {\n const shouldNotCompressByFormat = !shouldCompressFileByFormat(ingestionProperties);\n if (!this.zipped && !this.shouldNotCompress && !shouldNotCompressByFormat) {\n try {\n const gzipped = pako.gzip(await this.file.arrayBuffer());\n return new Blob([gzipped]);\n } catch (e) {\n // Ignore - return the file itself\n }\n }\n\n return this.file;\n }\n\n async cleanup(): Promise<void> {\n if (this.cleanupTmp) {\n await this.cleanupTmp();\n }\n }\n\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \".gz\";\n }\n}\n"]}
1
+ {"version":3,"file":"fileDescriptor.browser.js","sourceRoot":"","sources":["../../src/fileDescriptor.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAsB,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAC1H,OAAO,EAA4B,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAEhG,MAAM,OAAO,cAAe,SAAQ,kBAAkB;IAOlD,YACa,IAAU,EACnB,WAA0B,IAAI,EAC9B,OAAsB,IAAI,EAC1B,kBAAmC,eAAe,CAAC,IAAI,EAC9C,SAAkB,EAClB,IAAa;QAEtB,KAAK,CAAC,QAAQ,CAAC,CAAC;QAPP,SAAI,GAAJ,IAAI,CAAM;QAIV,cAAS,GAAT,SAAS,CAAS;QAClB,SAAI,GAAJ,IAAI,CAAS;QAGtB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,eAAe,KAAK,eAAe,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,MAAM,CAAC;QAChH,IAAI,CAAC,iBAAiB,GAAG,CAAC,6BAA6B,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,mBAA8C;QACxD,MAAM,yBAAyB,GAAG,CAAC,0BAA0B,CAAC,mBAAmB,CAAC,CAAC;QACnF,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACxE,IAAI,CAAC;gBACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACzD,OAAO,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YAC/B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,kCAAkC;YACtC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,OAAO;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACrE,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport pako from \"pako\";\nimport { AbstractDescriptor, CompressionType, FileDescriptorBase, shouldCompressFileByExtension } from \"./descriptors.js\";\nimport { IngestionPropertiesInput, shouldCompressFileByFormat } from \"./ingestionProperties.js\";\n\nexport class FileDescriptor extends AbstractDescriptor implements FileDescriptorBase {\n size: number | null;\n zipped: boolean;\n compressionType: CompressionType;\n shouldNotCompress: boolean;\n cleanupTmp?: () => Promise<void>;\n\n constructor(\n readonly file: Blob,\n sourceId: string | null = null,\n size: number | null = null,\n compressionType: CompressionType = CompressionType.None,\n readonly extension?: string,\n readonly name?: string,\n ) {\n super(sourceId);\n this.compressionType = compressionType;\n this.size = size || file.size;\n this.zipped = compressionType !== CompressionType.None || this.extension === \".gz\" || this.extension === \".zip\";\n this.shouldNotCompress = !shouldCompressFileByExtension(this.extension);\n }\n\n async prepare(ingestionProperties?: IngestionPropertiesInput): Promise<Blob> {\n const shouldNotCompressByFormat = !shouldCompressFileByFormat(ingestionProperties);\n if (!this.zipped && !this.shouldNotCompress && !shouldNotCompressByFormat) {\n try {\n const gzipped = pako.gzip(await this.file.arrayBuffer());\n return new Blob([gzipped]);\n } catch (e) {\n // Ignore - return the file itself\n }\n }\n\n return this.file;\n }\n\n async cleanup(): Promise<void> {\n if (this.cleanupTmp) {\n await this.cleanupTmp();\n }\n }\n\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \".gz\";\n }\n}\n"]}
@@ -16,8 +16,7 @@ export class FileDescriptor extends AbstractDescriptor {
16
16
  * Use string in Node.JS and Blob in browser
17
17
  */
18
18
  file, sourceId = null, size = null, compressionType = CompressionType.None, extension, // Extracted from file name by default
19
- name // Extracted from file name by default
20
- ) {
19
+ name) {
21
20
  super(sourceId, size);
22
21
  this.file = file;
23
22
  this.extension = extension;
@@ -1 +1 @@
1
- {"version":3,"file":"fileDescriptor.js","sourceRoot":"","sources":["../../src/fileDescriptor.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport zlib from \"zlib\";\nimport pathlib from \"path\";\nimport fs from \"fs\";\nimport { file as tmpFile } from \"tmp-promise\";\nimport { promisify } from \"util\";\nimport { AbstractDescriptor, CompressionType, FileDescriptorBase, shouldCompressFileByExtension } from \"./descriptors.js\";\nimport { IngestionPropertiesInput, shouldCompressFileByFormat } from \"./ingestionProperties.js\";\n\n/**\n * Describes a file to be ingested. Use string to describe a local path in Node.JS and Blob object in browsers\n */\nexport class FileDescriptor extends AbstractDescriptor implements FileDescriptorBase {\n zipped: boolean;\n compressionType: CompressionType;\n shouldNotCompress: boolean;\n cleanupTmp?: () => Promise<void>;\n\n constructor(\n /**\n * Use string in Node.JS and Blob in browser\n */\n readonly file: string | Blob,\n sourceId: string | null = null,\n size: number | null = null,\n compressionType: CompressionType = CompressionType.None,\n readonly extension?: string, // Extracted from file name by default\n readonly name?: string // Extracted from file name by default\n ) {\n super(sourceId, size);\n this.compressionType = compressionType;\n this.name = name ? name : pathlib.basename(this.file as string);\n this.extension = extension ? extension : pathlib.extname(this.file as string).toLowerCase();\n\n this.zipped = compressionType !== CompressionType.None || this.extension === \".gz\" || this.extension === \".zip\";\n this.shouldNotCompress = !shouldCompressFileByExtension(this.extension);\n }\n\n async _gzip(): Promise<string> {\n const { path, cleanup } = await tmpFile({ postfix: \".gz\", keep: false });\n this.cleanupTmp = cleanup;\n\n const zipper = zlib.createGzip();\n const input = fs.createReadStream(this.file as string, { autoClose: true });\n const output = fs.createWriteStream(path);\n\n await new Promise((resolve, reject) => {\n input\n .pipe(zipper)\n .pipe(output)\n .on(\"error\", (err) => {\n reject(err);\n });\n output.once(\"close\", () => {\n resolve(null);\n });\n });\n\n return path;\n }\n\n async prepare(ingestionProperties?: IngestionPropertiesInput): Promise<string> {\n const shouldNotCompressByFormat = !shouldCompressFileByFormat(ingestionProperties);\n if (this.zipped || this.shouldNotCompress || shouldNotCompressByFormat) {\n const estimatedCompressionModifier = 11;\n await this._calculateSize(estimatedCompressionModifier);\n return this.file as string;\n }\n\n const path = await this._gzip();\n await this._calculateSize();\n return path;\n }\n\n private async _calculateSize(modifier: number = 1): Promise<void> {\n if (this.size == null || this.size <= 0) {\n const asyncStat = promisify(fs.stat);\n this.size = (await asyncStat(this.file as string)).size * modifier;\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.cleanupTmp) {\n await this.cleanupTmp();\n }\n }\n\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \".gz\";\n }\n}\n"]}
1
+ {"version":3,"file":"fileDescriptor.js","sourceRoot":"","sources":["../../src/fileDescriptor.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport zlib from \"zlib\";\nimport pathlib from \"path\";\nimport fs from \"fs\";\nimport { file as tmpFile } from \"tmp-promise\";\nimport { promisify } from \"util\";\nimport { AbstractDescriptor, CompressionType, FileDescriptorBase, shouldCompressFileByExtension } from \"./descriptors.js\";\nimport { IngestionPropertiesInput, shouldCompressFileByFormat } from \"./ingestionProperties.js\";\n\n/**\n * Describes a file to be ingested. Use string to describe a local path in Node.JS and Blob object in browsers\n */\nexport class FileDescriptor extends AbstractDescriptor implements FileDescriptorBase {\n zipped: boolean;\n compressionType: CompressionType;\n shouldNotCompress: boolean;\n cleanupTmp?: () => Promise<void>;\n\n constructor(\n /**\n * Use string in Node.JS and Blob in browser\n */\n readonly file: string | Blob,\n sourceId: string | null = null,\n size: number | null = null,\n compressionType: CompressionType = CompressionType.None,\n readonly extension?: string, // Extracted from file name by default\n readonly name?: string, // Extracted from file name by default\n ) {\n super(sourceId, size);\n this.compressionType = compressionType;\n this.name = name ? name : pathlib.basename(this.file as string);\n this.extension = extension ? extension : pathlib.extname(this.file as string).toLowerCase();\n\n this.zipped = compressionType !== CompressionType.None || this.extension === \".gz\" || this.extension === \".zip\";\n this.shouldNotCompress = !shouldCompressFileByExtension(this.extension);\n }\n\n async _gzip(): Promise<string> {\n const { path, cleanup } = await tmpFile({ postfix: \".gz\", keep: false });\n this.cleanupTmp = cleanup;\n\n const zipper = zlib.createGzip();\n const input = fs.createReadStream(this.file as string, { autoClose: true });\n const output = fs.createWriteStream(path);\n\n await new Promise((resolve, reject) => {\n input\n .pipe(zipper)\n .pipe(output)\n .on(\"error\", (err) => {\n reject(err);\n });\n output.once(\"close\", () => {\n resolve(null);\n });\n });\n\n return path;\n }\n\n async prepare(ingestionProperties?: IngestionPropertiesInput): Promise<string> {\n const shouldNotCompressByFormat = !shouldCompressFileByFormat(ingestionProperties);\n if (this.zipped || this.shouldNotCompress || shouldNotCompressByFormat) {\n const estimatedCompressionModifier = 11;\n await this._calculateSize(estimatedCompressionModifier);\n return this.file as string;\n }\n\n const path = await this._gzip();\n await this._calculateSize();\n return path;\n }\n\n private async _calculateSize(modifier: number = 1): Promise<void> {\n if (this.size == null || this.size <= 0) {\n const asyncStat = promisify(fs.stat);\n this.size = (await asyncStat(this.file as string)).size * modifier;\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.cleanupTmp) {\n await this.cleanupTmp();\n }\n }\n\n getCompressionSuffix() {\n return this.compressionType ? `.${this.compressionType}` : \".gz\";\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestClient.js","sourceRoot":"","sources":["../../src/ingestClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IACxD,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAoC,EAAE,mBAA8C;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAEpF,IAAI;YACA,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;SACxG;gBAAS;YACN,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;SAC9B;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAiD,EAAE,mBAA8C;QACpH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChH,oEAAoE;QACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;IACvF,CAAC;CACJ;AAED,eAAe,iBAAiB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nimport { BlobDescriptor, generateBlobName, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\nimport { KustoIngestClientBase } from \"./ingestClientBase.js\";\nimport { Readable } from \"stream\";\nimport { IngestionResult } from \"./ingestionResult.js\";\n\nexport class KustoIngestClient extends KustoIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use string in Node.JS and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | string | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n\n const descriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n\n try {\n const blobName = generateBlobName(descriptor, props);\n const fileToUpload = await descriptor.prepare(ingestionProperties);\n const blobUri = await this.uploadToBlobWithRetry(fileToUpload, blobName);\n return this.ingestFromBlob(new BlobDescriptor(blobUri, descriptor.size, descriptor.sourceId), props);\n } finally {\n await descriptor.cleanup();\n }\n }\n\n /**\n * Use Readable in Node.JS and ArrayBuffer in browser\n */\n async ingestFromStream(stream: StreamDescriptor | Readable | ArrayBuffer, ingestionProperties?: IngestionPropertiesInput): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n // TODO we don't gzip on stream here, just ont streamingIngestClient\n const blobName = generateBlobName(descriptor, props);\n\n const blobUri = await this.uploadToBlobWithRetry(descriptor, blobName);\n\n return this.ingestFromBlob(new BlobDescriptor(blobUri), props); // descriptor.size?\n }\n}\n\nexport default KustoIngestClient;\n"]}
1
+ {"version":3,"file":"ingestClient.js","sourceRoot":"","sources":["../../src/ingestClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAGrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAI9D,MAAM,OAAO,iBAAkB,SAAQ,qBAAqB;IACxD,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAoC,EAAE,mBAA8C;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QAEpF,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACrD,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAC;QACzG,CAAC;gBAAS,CAAC;YACP,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;QAC/B,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAiD,EAAE,mBAA8C;QACpH,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChH,oEAAoE;QACpE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAErD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEvE,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB;IACvF,CAAC;CACJ;AAED,eAAe,iBAAiB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nimport { BlobDescriptor, generateBlobName, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\nimport { KustoIngestClientBase } from \"./ingestClientBase.js\";\nimport { Readable } from \"stream\";\nimport { IngestionResult } from \"./ingestionResult.js\";\n\nexport class KustoIngestClient extends KustoIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use string in Node.JS and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | string | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n\n const descriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n\n try {\n const blobName = generateBlobName(descriptor, props);\n const fileToUpload = await descriptor.prepare(ingestionProperties);\n const blobUri = await this.uploadToBlobWithRetry(fileToUpload, blobName);\n return this.ingestFromBlob(new BlobDescriptor(blobUri, descriptor.size, descriptor.sourceId), props);\n } finally {\n await descriptor.cleanup();\n }\n }\n\n /**\n * Use Readable in Node.JS and ArrayBuffer in browser\n */\n async ingestFromStream(stream: StreamDescriptor | Readable | ArrayBuffer, ingestionProperties?: IngestionPropertiesInput): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n // TODO we don't gzip on stream here, just ont streamingIngestClient\n const blobName = generateBlobName(descriptor, props);\n\n const blobUri = await this.uploadToBlobWithRetry(descriptor, blobName);\n\n return this.ingestFromBlob(new BlobDescriptor(blobUri), props); // descriptor.size?\n }\n}\n\nexport default KustoIngestClient;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestClientBase.js","sourceRoot":"","sources":["../../src/ingestClientBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Client as KustoClient, KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nimport ResourceManager from \"./resourceManager.js\";\n\nimport IngestionBlobInfo from \"./ingestionBlobInfo.js\";\nimport { ContainerClient } from \"@azure/storage-blob\";\n\nimport { QueueClient } from \"@azure/storage-queue\";\n\nimport IngestionProperties, { IngestionPropertiesInput, ReportLevel, ReportMethod } from \"./ingestionProperties.js\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport {\n IngestionStatus,\n TableReportIngestionResult,\n IngestionResult,\n IngestionStatusInTableDescription,\n IngestionStatusResult,\n OperationStatus,\n putRecordInTable,\n} from \"./ingestionResult.js\";\nimport { Readable } from \"stream\";\n\nimport { BlobDescriptor, StreamDescriptor } from \"./descriptors.js\";\n\nexport abstract class KustoIngestClientBase extends AbstractKustoClient {\n resourceManager: ResourceManager;\n applicationForTracing: string | null;\n clientVersionForTracing: string | null;\n static readonly MaxNumberOfRetryAttempts = 3;\n\n constructor(\n kcsb: string | KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n autoCorrectEndpoint: boolean = true,\n isBrowser?: boolean\n ) {\n super(defaultProps);\n if (typeof kcsb === \"string\") {\n kcsb = new KustoConnectionStringBuilder(kcsb);\n }\n if (autoCorrectEndpoint) {\n kcsb.dataSource = this.getIngestionEndpoint(kcsb.dataSource);\n }\n const kustoClient = new KustoClient(kcsb);\n this.resourceManager = new ResourceManager(kustoClient, isBrowser);\n this.defaultDatabase = kustoClient.defaultDatabase;\n const clientDetails = kcsb.clientDetails();\n this.applicationForTracing = clientDetails.applicationNameForTracing;\n this.clientVersionForTracing = clientDetails.versionForTracing;\n }\n\n async ingestFromBlob(\n blob: string | BlobDescriptor,\n ingestionProperties?: IngestionPropertiesInput,\n maxRetries: number = KustoIngestClientBase.MaxNumberOfRetryAttempts\n ): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n\n const authorizationContext = await this.resourceManager.getAuthorizationContext();\n const ingestionBlobInfo = new IngestionBlobInfo(descriptor, props, authorizationContext, this.applicationForTracing, this.clientVersionForTracing);\n\n const reportToTable = props.reportLevel !== ReportLevel.DoNotReport && props.reportMethod !== ReportMethod.Queue;\n\n if (reportToTable) {\n const statusTableClient = await this.resourceManager.createStatusTable();\n const status = this.createStatusObject(props, OperationStatus.Pending, ingestionBlobInfo);\n await putRecordInTable(statusTableClient, { ...status, partitionKey: ingestionBlobInfo.Id, rowKey: ingestionBlobInfo.Id });\n\n const desc = new IngestionStatusInTableDescription(statusTableClient.url, ingestionBlobInfo.Id, ingestionBlobInfo.Id);\n ingestionBlobInfo.IngestionStatusInTable = desc;\n await this.sendQueueMessage(maxRetries, ingestionBlobInfo);\n return new TableReportIngestionResult(desc, statusTableClient);\n }\n\n await this.sendQueueMessage(maxRetries, ingestionBlobInfo);\n return new IngestionStatusResult(this.createStatusObject(props, OperationStatus.Queued, ingestionBlobInfo));\n }\n\n private async sendQueueMessage(maxRetries: number, blobInfo: IngestionBlobInfo) {\n const queues = await this.resourceManager.getIngestionQueues();\n if (queues == null) {\n throw new Error(\"Failed to get queues\");\n }\n const ingestionBlobInfoJson = JSON.stringify(blobInfo);\n const encoded = Buffer.from(ingestionBlobInfoJson).toString(\"base64\");\n const retryCount = Math.min(maxRetries, queues.length);\n\n for (let i = 0; i < retryCount; i++) {\n const queueClient = new QueueClient(queues[i].uri);\n try {\n const queueResponse = await queueClient.sendMessage(encoded);\n this.resourceManager.reportResourceUsageResult(queueClient.accountName, true);\n return queueResponse;\n } catch (_) {\n this.resourceManager.reportResourceUsageResult(queueClient.accountName, false);\n }\n }\n\n throw new Error(\"Failed to send message to queue.\");\n }\n\n private createStatusObject(props: IngestionProperties, status: OperationStatus, ingestionBlobInfo: IngestionBlobInfo): IngestionStatus {\n const time = Date.now().toString();\n return {\n Status: status,\n Timestamp: time,\n IngestionSourceId: ingestionBlobInfo.Id,\n IngestionSourcePath: ingestionBlobInfo.BlobPath.split(/[?;]/)[0],\n Database: props.database,\n Table: props.table,\n UpdatedOn: time,\n Details: \"\",\n } as IngestionStatus;\n }\n\n async uploadToBlobWithRetry(\n descriptor: string | Blob | ArrayBuffer | StreamDescriptor,\n blobName: string,\n maxRetries: number = KustoIngestClientBase.MaxNumberOfRetryAttempts\n ): Promise<string> {\n const containers = await this.resourceManager.getContainers();\n\n if (containers == null || containers.length === 0) {\n throw new Error(\"Failed to get containers\");\n }\n\n const retryCount = Math.min(maxRetries, containers.length);\n\n // Go over all containers and try to upload the file to the first one that succeeds\n for (let i = 0; i < retryCount; i++) {\n const containerClient = new ContainerClient(containers[i].uri);\n const blockBlobClient = containerClient.getBlockBlobClient(blobName);\n try {\n if (typeof descriptor == \"string\") {\n await blockBlobClient.uploadFile(descriptor);\n } else if (descriptor instanceof StreamDescriptor) {\n if (descriptor.stream instanceof Buffer) {\n await blockBlobClient.uploadData(descriptor.stream as Buffer);\n } else {\n await blockBlobClient.uploadStream(descriptor.stream as Readable);\n }\n } else {\n await blockBlobClient.uploadData(descriptor);\n }\n this.resourceManager.reportResourceUsageResult(containerClient.accountName, true);\n return blockBlobClient.url;\n } catch (ex) {\n this.resourceManager.reportResourceUsageResult(containerClient.accountName, false);\n }\n }\n\n throw new Error(\"Failed to upload to blob.\");\n }\n\n close() {\n if (!this._isClosed) {\n this.resourceManager.close();\n }\n super.close();\n }\n}\n\nexport default KustoIngestClientBase;\n"]}
1
+ {"version":3,"file":"ingestClientBase.js","sourceRoot":"","sources":["../../src/ingestClientBase.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Client as KustoClient, KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nimport ResourceManager from \"./resourceManager.js\";\n\nimport IngestionBlobInfo from \"./ingestionBlobInfo.js\";\nimport { ContainerClient } from \"@azure/storage-blob\";\n\nimport { QueueClient } from \"@azure/storage-queue\";\n\nimport IngestionProperties, { IngestionPropertiesInput, ReportLevel, ReportMethod } from \"./ingestionProperties.js\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport {\n IngestionStatus,\n TableReportIngestionResult,\n IngestionResult,\n IngestionStatusInTableDescription,\n IngestionStatusResult,\n OperationStatus,\n putRecordInTable,\n} from \"./ingestionResult.js\";\nimport { Readable } from \"stream\";\n\nimport { BlobDescriptor, StreamDescriptor } from \"./descriptors.js\";\n\nexport abstract class KustoIngestClientBase extends AbstractKustoClient {\n resourceManager: ResourceManager;\n applicationForTracing: string | null;\n clientVersionForTracing: string | null;\n static readonly MaxNumberOfRetryAttempts = 3;\n\n constructor(\n kcsb: string | KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n autoCorrectEndpoint: boolean = true,\n isBrowser?: boolean,\n ) {\n super(defaultProps);\n if (typeof kcsb === \"string\") {\n kcsb = new KustoConnectionStringBuilder(kcsb);\n }\n if (autoCorrectEndpoint) {\n kcsb.dataSource = this.getIngestionEndpoint(kcsb.dataSource);\n }\n const kustoClient = new KustoClient(kcsb);\n this.resourceManager = new ResourceManager(kustoClient, isBrowser);\n this.defaultDatabase = kustoClient.defaultDatabase;\n const clientDetails = kcsb.clientDetails();\n this.applicationForTracing = clientDetails.applicationNameForTracing;\n this.clientVersionForTracing = clientDetails.versionForTracing;\n }\n\n async ingestFromBlob(\n blob: string | BlobDescriptor,\n ingestionProperties?: IngestionPropertiesInput,\n maxRetries: number = KustoIngestClientBase.MaxNumberOfRetryAttempts,\n ): Promise<IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n\n const authorizationContext = await this.resourceManager.getAuthorizationContext();\n const ingestionBlobInfo = new IngestionBlobInfo(descriptor, props, authorizationContext, this.applicationForTracing, this.clientVersionForTracing);\n\n const reportToTable = props.reportLevel !== ReportLevel.DoNotReport && props.reportMethod !== ReportMethod.Queue;\n\n if (reportToTable) {\n const statusTableClient = await this.resourceManager.createStatusTable();\n const status = this.createStatusObject(props, OperationStatus.Pending, ingestionBlobInfo);\n await putRecordInTable(statusTableClient, { ...status, partitionKey: ingestionBlobInfo.Id, rowKey: ingestionBlobInfo.Id });\n\n const desc = new IngestionStatusInTableDescription(statusTableClient.url, ingestionBlobInfo.Id, ingestionBlobInfo.Id);\n ingestionBlobInfo.IngestionStatusInTable = desc;\n await this.sendQueueMessage(maxRetries, ingestionBlobInfo);\n return new TableReportIngestionResult(desc, statusTableClient);\n }\n\n await this.sendQueueMessage(maxRetries, ingestionBlobInfo);\n return new IngestionStatusResult(this.createStatusObject(props, OperationStatus.Queued, ingestionBlobInfo));\n }\n\n private async sendQueueMessage(maxRetries: number, blobInfo: IngestionBlobInfo) {\n const queues = await this.resourceManager.getIngestionQueues();\n if (queues == null) {\n throw new Error(\"Failed to get queues\");\n }\n const ingestionBlobInfoJson = JSON.stringify(blobInfo);\n const encoded = Buffer.from(ingestionBlobInfoJson).toString(\"base64\");\n const retryCount = Math.min(maxRetries, queues.length);\n\n for (let i = 0; i < retryCount; i++) {\n const queueClient = new QueueClient(queues[i].uri);\n try {\n const queueResponse = await queueClient.sendMessage(encoded);\n this.resourceManager.reportResourceUsageResult(queueClient.accountName, true);\n return queueResponse;\n } catch (_) {\n this.resourceManager.reportResourceUsageResult(queueClient.accountName, false);\n }\n }\n\n throw new Error(\"Failed to send message to queue.\");\n }\n\n private createStatusObject(props: IngestionProperties, status: OperationStatus, ingestionBlobInfo: IngestionBlobInfo): IngestionStatus {\n const time = Date.now().toString();\n return {\n Status: status,\n Timestamp: time,\n IngestionSourceId: ingestionBlobInfo.Id,\n IngestionSourcePath: ingestionBlobInfo.BlobPath.split(/[?;]/)[0],\n Database: props.database,\n Table: props.table,\n UpdatedOn: time,\n Details: \"\",\n } as IngestionStatus;\n }\n\n async uploadToBlobWithRetry(\n descriptor: string | Blob | ArrayBuffer | StreamDescriptor,\n blobName: string,\n maxRetries: number = KustoIngestClientBase.MaxNumberOfRetryAttempts,\n ): Promise<string> {\n const containers = await this.resourceManager.getContainers();\n\n if (containers == null || containers.length === 0) {\n throw new Error(\"Failed to get containers\");\n }\n\n const retryCount = Math.min(maxRetries, containers.length);\n\n // Go over all containers and try to upload the file to the first one that succeeds\n for (let i = 0; i < retryCount; i++) {\n const containerClient = new ContainerClient(containers[i].uri);\n const blockBlobClient = containerClient.getBlockBlobClient(blobName);\n try {\n if (typeof descriptor == \"string\") {\n await blockBlobClient.uploadFile(descriptor);\n } else if (descriptor instanceof StreamDescriptor) {\n if (descriptor.stream instanceof Buffer) {\n await blockBlobClient.uploadData(descriptor.stream as Buffer);\n } else {\n await blockBlobClient.uploadStream(descriptor.stream as Readable);\n }\n } else {\n await blockBlobClient.uploadData(descriptor);\n }\n this.resourceManager.reportResourceUsageResult(containerClient.accountName, true);\n return blockBlobClient.url;\n } catch (ex) {\n this.resourceManager.reportResourceUsageResult(containerClient.accountName, false);\n }\n }\n\n throw new Error(\"Failed to upload to blob.\");\n }\n\n close() {\n if (!this._isClosed) {\n this.resourceManager.close();\n }\n super.close();\n }\n}\n\nexport default KustoIngestClientBase;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestionBlobInfo.js","sourceRoot":"","sources":["../../src/ingestionBlobInfo.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { BlobDescriptor } from \"./descriptors.js\";\nimport IngestionProperties, { ReportLevel, ReportMethod } from \"./ingestionProperties.js\";\nimport { IngestionStatusInTableDescription } from \"./ingestionResult.js\";\n\nexport class IngestionBlobInfo {\n BlobPath: string;\n RawDataSize: number | null;\n DatabaseName: string | null;\n TableName: string | null;\n RetainBlobOnSuccess: boolean;\n FlushImmediately: boolean;\n IgnoreSizeLimit: boolean;\n ReportLevel: ReportLevel | null;\n ReportMethod: ReportMethod | null;\n SourceMessageCreationTime: Date;\n Id: string;\n AdditionalProperties: { [additional: string]: any };\n IngestionStatusInTable: IngestionStatusInTableDescription | null = null;\n ApplicationForTracing?: string | null = null;\n ClientVersionForTracing?: string | null = null;\n\n constructor(\n blobDescriptor: BlobDescriptor,\n ingestionProperties: IngestionProperties,\n authContext: string | null = null,\n applicationForTracing: string | null = null,\n clientVersionForTracing: string | null = null\n ) {\n this.BlobPath = blobDescriptor.path;\n this.RawDataSize = blobDescriptor.size;\n this.DatabaseName = ingestionProperties.database ?? null;\n this.TableName = ingestionProperties.table ?? null;\n this.RetainBlobOnSuccess = true;\n this.FlushImmediately = ingestionProperties.flushImmediately ?? false;\n this.IgnoreSizeLimit = false;\n this.ReportLevel = ingestionProperties.reportLevel ?? null;\n this.ReportMethod = ingestionProperties.reportMethod ?? null;\n this.SourceMessageCreationTime = new Date();\n this.Id = blobDescriptor.sourceId || uuidv4();\n this.ApplicationForTracing = applicationForTracing;\n this.ClientVersionForTracing = clientVersionForTracing;\n\n const additionalProperties = ingestionProperties.additionalProperties || {};\n additionalProperties.authorizationContext = authContext;\n\n const tags: string[] = [];\n if (ingestionProperties.additionalTags) {\n tags.concat(ingestionProperties.additionalTags);\n }\n if (ingestionProperties.dropByTags) {\n tags.concat(ingestionProperties.dropByTags.map((t) => \"drop-by:\" + t));\n }\n if (ingestionProperties.ingestByTags) {\n tags.concat(ingestionProperties.ingestByTags.map((t) => \"ingest-by:\" + t));\n }\n\n if (tags && tags.length > 0) {\n additionalProperties.tags = tags;\n }\n\n if (ingestionProperties.ingestIfNotExists) {\n additionalProperties.ingestIfNotExists = ingestionProperties.ingestIfNotExists;\n }\n\n if (ingestionProperties.ingestionMappingColumns && ingestionProperties.ingestionMappingColumns.length > 0) {\n // server expects a string\n additionalProperties.ingestionMapping = JSON.stringify(ingestionProperties.ingestionMappingColumns.map((m) => m.toApiMapping()));\n }\n\n if (ingestionProperties.ingestionMappingReference) {\n additionalProperties.ingestionMappingReference = ingestionProperties.ingestionMappingReference;\n }\n\n if (ingestionProperties.ingestionMappingKind) {\n additionalProperties.ingestionMappingType = ingestionProperties.ingestionMappingKind;\n }\n\n if (ingestionProperties.validationPolicy) {\n additionalProperties.ValidationPolicy = ingestionProperties.validationPolicy;\n }\n\n if (ingestionProperties.format) {\n additionalProperties.format = ingestionProperties.format;\n }\n if (ingestionProperties.ignoreFirstRecord) {\n additionalProperties.ignoreFirstRecord = ingestionProperties.ignoreFirstRecord;\n }\n\n this.AdditionalProperties = additionalProperties;\n }\n}\n\nexport default IngestionBlobInfo;\n"]}
1
+ {"version":3,"file":"ingestionBlobInfo.js","sourceRoot":"","sources":["../../src/ingestionBlobInfo.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { v4 as uuidv4 } from \"uuid\";\nimport { BlobDescriptor } from \"./descriptors.js\";\nimport IngestionProperties, { ReportLevel, ReportMethod } from \"./ingestionProperties.js\";\nimport { IngestionStatusInTableDescription } from \"./ingestionResult.js\";\n\nexport class IngestionBlobInfo {\n BlobPath: string;\n RawDataSize: number | null;\n DatabaseName: string | null;\n TableName: string | null;\n RetainBlobOnSuccess: boolean;\n FlushImmediately: boolean;\n IgnoreSizeLimit: boolean;\n ReportLevel: ReportLevel | null;\n ReportMethod: ReportMethod | null;\n SourceMessageCreationTime: Date;\n Id: string;\n AdditionalProperties: { [additional: string]: any };\n IngestionStatusInTable: IngestionStatusInTableDescription | null = null;\n ApplicationForTracing?: string | null = null;\n ClientVersionForTracing?: string | null = null;\n\n constructor(\n blobDescriptor: BlobDescriptor,\n ingestionProperties: IngestionProperties,\n authContext: string | null = null,\n applicationForTracing: string | null = null,\n clientVersionForTracing: string | null = null,\n ) {\n this.BlobPath = blobDescriptor.path;\n this.RawDataSize = blobDescriptor.size;\n this.DatabaseName = ingestionProperties.database ?? null;\n this.TableName = ingestionProperties.table ?? null;\n this.RetainBlobOnSuccess = true;\n this.FlushImmediately = ingestionProperties.flushImmediately ?? false;\n this.IgnoreSizeLimit = false;\n this.ReportLevel = ingestionProperties.reportLevel ?? null;\n this.ReportMethod = ingestionProperties.reportMethod ?? null;\n this.SourceMessageCreationTime = new Date();\n this.Id = blobDescriptor.sourceId || uuidv4();\n this.ApplicationForTracing = applicationForTracing;\n this.ClientVersionForTracing = clientVersionForTracing;\n\n const additionalProperties = ingestionProperties.additionalProperties || {};\n additionalProperties.authorizationContext = authContext;\n\n const tags: string[] = [];\n if (ingestionProperties.additionalTags) {\n tags.concat(ingestionProperties.additionalTags);\n }\n if (ingestionProperties.dropByTags) {\n tags.concat(ingestionProperties.dropByTags.map((t) => \"drop-by:\" + t));\n }\n if (ingestionProperties.ingestByTags) {\n tags.concat(ingestionProperties.ingestByTags.map((t) => \"ingest-by:\" + t));\n }\n\n if (tags && tags.length > 0) {\n additionalProperties.tags = tags;\n }\n\n if (ingestionProperties.ingestIfNotExists) {\n additionalProperties.ingestIfNotExists = ingestionProperties.ingestIfNotExists;\n }\n\n if (ingestionProperties.ingestionMappingColumns && ingestionProperties.ingestionMappingColumns.length > 0) {\n // server expects a string\n additionalProperties.ingestionMapping = JSON.stringify(ingestionProperties.ingestionMappingColumns.map((m) => m.toApiMapping()));\n }\n\n if (ingestionProperties.ingestionMappingReference) {\n additionalProperties.ingestionMappingReference = ingestionProperties.ingestionMappingReference;\n }\n\n if (ingestionProperties.ingestionMappingKind) {\n additionalProperties.ingestionMappingType = ingestionProperties.ingestionMappingKind;\n }\n\n if (ingestionProperties.validationPolicy) {\n additionalProperties.ValidationPolicy = ingestionProperties.validationPolicy;\n }\n\n if (ingestionProperties.format) {\n additionalProperties.format = ingestionProperties.format;\n }\n if (ingestionProperties.ignoreFirstRecord) {\n additionalProperties.ignoreFirstRecord = ingestionProperties.ignoreFirstRecord;\n }\n\n this.AdditionalProperties = additionalProperties;\n }\n}\n\nexport default IngestionBlobInfo;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestionProperties.js","sourceRoot":"","sources":["../../src/ingestionProperties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesValidationError } from \"./errors.js\";\nimport { ColumnMapping } from \"./columnMappings.js\";\n\n/**\n * Data formats supported for Kusto ingestion.\n */\nexport enum DataFormat {\n /**\n * Comma-separated value.\n */\n CSV = \"csv\",\n /**\n * Tab-separated value.\n */\n TSV = \"tsv\",\n /**\n * Semicolon-separated value (the unique Azure Storage log format).\n */\n SCSV = \"scsv\",\n /**\n * Start-Of-Header (CTRL-A)-separated value.\n */\n SOHSV = \"sohsv\",\n /**\n * Pipeline-separated value (used by Cosmos).\n */\n PSV = \"psv\",\n /**\n * Each record is a line and has just one field.\n */\n TXT = \"txt\",\n /**\n * Whole stream is a single record with a single field.\n */\n RAW = \"raw\",\n /**\n * Tab-separated value with '\\' escaping character.\n */\n TSVE = \"tsve\",\n /**\n * Data is in a JSON format, each line is record with a single JSON value.\n */\n JSON = \"json\",\n /**\n * Data stream holds a single JSON value -- newlines are regular whitespace.\n */\n SINGLEJSON = \"singlejson\",\n /**\n * The data stream is a concatenation of JSON documents (property bags all).\n */\n MULTIJSON = \"multijson\",\n /**\n * Avro format.\n */\n AVRO = \"avro\",\n /**\n * Parquet format.\n */\n PARQUET = \"parquet\",\n /**\n * Microsoft Cosmos structured streams format\n */\n SSTREAM = \"sstream\",\n /**\n * The Optimized Row Columnar (ORC)\n */\n ORC = \"orc\",\n /**\n * Avro format for ingesting through avro2json.\n */\n APACHEAVRO = \"apacheavro\",\n /**\n * W3C Extended Log File format.\n */\n W3CLogFile = \"w3clogfile\",\n}\n\nexport enum IngestionMappingKind {\n CSV = \"Csv\",\n JSON = \"Json\",\n AVRO = \"Avro\",\n PARQUET = \"Parquet\",\n SSTREAM = \"SStream\",\n ORC = \"orc\",\n APACHEAVRO = \"ApacheAvro\",\n W3CLOGFILE = \"W3CLogFile\",\n}\n\nexport const dataFormatMappingKind = (dataFormat: DataFormat): IngestionMappingKind => {\n switch (dataFormat) {\n case DataFormat.CSV:\n return IngestionMappingKind.CSV;\n case DataFormat.TSV:\n return IngestionMappingKind.CSV;\n case DataFormat.SCSV:\n return IngestionMappingKind.CSV;\n case DataFormat.SOHSV:\n return IngestionMappingKind.CSV;\n case DataFormat.PSV:\n return IngestionMappingKind.CSV;\n case DataFormat.TXT:\n return IngestionMappingKind.CSV;\n case DataFormat.RAW:\n return IngestionMappingKind.CSV;\n case DataFormat.TSVE:\n return IngestionMappingKind.CSV;\n case DataFormat.JSON:\n return IngestionMappingKind.JSON;\n case DataFormat.SINGLEJSON:\n return IngestionMappingKind.JSON;\n case DataFormat.MULTIJSON:\n return IngestionMappingKind.JSON;\n case DataFormat.AVRO:\n return IngestionMappingKind.AVRO;\n case DataFormat.PARQUET:\n return IngestionMappingKind.PARQUET;\n case DataFormat.SSTREAM:\n return IngestionMappingKind.SSTREAM;\n case DataFormat.ORC:\n return IngestionMappingKind.ORC;\n case DataFormat.APACHEAVRO:\n return IngestionMappingKind.APACHEAVRO;\n case DataFormat.W3CLogFile:\n return IngestionMappingKind.W3CLOGFILE;\n default:\n throw new IngestionPropertiesValidationError(`Unsupported data format: ${dataFormat}`);\n }\n};\n\nexport enum ValidationOptions {\n DoNotValidate = 0,\n ValidateCsvInputConstantColumns = 1,\n ValidateCsvInputColumnLevelOnly = 2,\n}\n\nexport enum ValidationImplications {\n Fail = 0,\n BestEffort = 1,\n}\n\nexport class ValidationPolicy {\n constructor(\n readonly validationOptions: ValidationOptions = ValidationOptions.DoNotValidate,\n readonly validationImplications: ValidationImplications = ValidationImplications.BestEffort\n ) {}\n\n toJSON(): Record<string, number> {\n return {\n ValidationOptions: this.validationOptions,\n ValidationImplications: this.validationImplications,\n };\n }\n}\n\nexport enum ReportLevel {\n FailuresOnly = 0,\n DoNotReport = 1,\n FailuresAndSuccesses = 2,\n}\n\nexport enum ReportMethod {\n Queue = 0,\n Table,\n QueueAndTable,\n}\n\nexport interface IngestionPropertiesFields {\n database?: string;\n table?: string;\n format?: DataFormat;\n /**\n * @deprecated. Use ingestionMappingColumns instead.\n */\n ingestionMapping?: ColumnMapping[];\n ingestionMappingColumns?: ColumnMapping[];\n ingestionMappingReference?: string;\n /**\n * @deprecated. Use ingestionMappingKind instead.\n */\n ingestionMappingType?: IngestionMappingKind;\n ingestionMappingKind?: IngestionMappingKind;\n additionalTags?: string;\n ingestIfNotExists?: string;\n ingestByTags?: string[];\n dropByTags?: string[];\n flushImmediately?: boolean;\n ignoreFirstRecord?: boolean;\n reportLevel?: ReportLevel;\n reportMethod?: ReportMethod;\n validationPolicy?: ValidationPolicy;\n additionalProperties?: { [additional: string]: any } | null;\n}\n\n// This trick lets us avoid duplicating all the properties from the interface. See https://github.com/microsoft/TypeScript/issues/3407\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IngestionProperties extends IngestionPropertiesFields {}\n\n// eslint-disable-next-line no-redeclare\nexport class IngestionProperties {\n constructor(data: Partial<IngestionPropertiesFields>) {\n Object.assign(this, data);\n }\n\n validate() {\n if (!this.database) throw new IngestionPropertiesValidationError(\"Must define a target database\");\n if (!this.table) throw new IngestionPropertiesValidationError(\"Must define a target table\");\n if (!this.format) throw new IngestionPropertiesValidationError(\"Must define a data format\");\n\n if (this.ingestionMappingType && !this.ingestionMappingKind) {\n this.ingestionMappingKind = this.ingestionMappingType;\n }\n\n if (this.ingestionMapping && !this.ingestionMappingColumns) {\n this.ingestionMappingColumns = this.ingestionMapping;\n }\n\n if (!this.ingestionMappingColumns && !this.ingestionMappingReference) {\n if (this.ingestionMappingKind) {\n throw new IngestionPropertiesValidationError(\n \"Cannot define ingestionMappingKind without either ingestionMappingColumns or\" + \" ingestionMappingReference\"\n );\n }\n } else {\n const mappingKind = dataFormatMappingKind(this.format);\n if (this.ingestionMappingKind && this.ingestionMappingKind !== mappingKind) {\n throw new IngestionPropertiesValidationError(\n `Mapping kind '${this.ingestionMappingKind}' does not match format '${this.format}' (should be '${mappingKind}')`\n );\n }\n if (this.ingestionMappingColumns) {\n if (this.ingestionMappingReference) {\n throw new IngestionPropertiesValidationError(\"Cannot define both ingestionMappingColumns and ingestionMappingReference\");\n }\n\n if (this.ingestionMappingColumns.length === 0) {\n throw new IngestionPropertiesValidationError(\"Must define at least one column mapping\");\n }\n\n const wrongMappings = this.ingestionMappingColumns\n .filter((m) => m.mappingKind !== mappingKind)\n .map(\n (m) => `Mapping kind mismatch for column '${m.columnName}' - expected data format kind - '${mappingKind}', but was '${m.mappingKind}'`\n );\n if (wrongMappings.length > 0) {\n throw new IngestionPropertiesValidationError(`Invalid columns:\\n${wrongMappings.join(\"\\n\")}`);\n }\n }\n }\n\n if (this.reportMethod !== ReportMethod.Queue && this.reportLevel === ReportLevel.FailuresOnly) {\n throw new IngestionPropertiesValidationError(\"ReportLevel.FailuresOnly is not supported with ReportMethod.Table\");\n }\n }\n\n merge(extraProps: IngestionPropertiesInput) {\n const merged = new IngestionProperties(this);\n\n if (!extraProps) {\n return merged;\n }\n\n const assign = <K extends keyof IngestionPropertiesFields, V extends IngestionPropertiesFields[K]>(\n obj: IngestionPropertiesFields,\n prop: K,\n value: V\n ) => {\n obj[prop] = value;\n };\n\n for (const key of Object.keys(extraProps) as (keyof IngestionPropertiesFields)[]) {\n if (extraProps[key]) {\n assign(merged, key, extraProps[key]);\n }\n }\n\n return merged;\n }\n\n setDefaults() {\n if (!this.format) {\n this.format = DataFormat.CSV;\n }\n if (!this.reportLevel) {\n this.reportLevel = ReportLevel.FailuresOnly;\n }\n if (!this.reportMethod) {\n this.reportMethod = ReportMethod.Queue;\n }\n }\n}\n\nexport type IngestionPropertiesInput = IngestionProperties | IngestionPropertiesFields | null | undefined;\n\nexport function shouldCompressFileByFormat(ingestionProperties?: IngestionPropertiesInput): boolean {\n if (!ingestionProperties) {\n ingestionProperties = {};\n }\n return !(\n ingestionProperties.format === \"avro\" ||\n ingestionProperties.format === \"parquet\" ||\n ingestionProperties.format === \"orc\" ||\n ingestionProperties.format === \"apacheavro\" ||\n ingestionProperties.format === \"sstream\"\n );\n}\n\nexport default IngestionProperties;\n"]}
1
+ {"version":3,"file":"ingestionProperties.js","sourceRoot":"","sources":["../../src/ingestionProperties.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesValidationError } from \"./errors.js\";\nimport { ColumnMapping } from \"./columnMappings.js\";\n\n/**\n * Data formats supported for Kusto ingestion.\n */\nexport enum DataFormat {\n /**\n * Comma-separated value.\n */\n CSV = \"csv\",\n /**\n * Tab-separated value.\n */\n TSV = \"tsv\",\n /**\n * Semicolon-separated value (the unique Azure Storage log format).\n */\n SCSV = \"scsv\",\n /**\n * Start-Of-Header (CTRL-A)-separated value.\n */\n SOHSV = \"sohsv\",\n /**\n * Pipeline-separated value (used by Cosmos).\n */\n PSV = \"psv\",\n /**\n * Each record is a line and has just one field.\n */\n TXT = \"txt\",\n /**\n * Whole stream is a single record with a single field.\n */\n RAW = \"raw\",\n /**\n * Tab-separated value with '\\' escaping character.\n */\n TSVE = \"tsve\",\n /**\n * Data is in a JSON format, each line is record with a single JSON value.\n */\n JSON = \"json\",\n /**\n * Data stream holds a single JSON value -- newlines are regular whitespace.\n */\n SINGLEJSON = \"singlejson\",\n /**\n * The data stream is a concatenation of JSON documents (property bags all).\n */\n MULTIJSON = \"multijson\",\n /**\n * Avro format.\n */\n AVRO = \"avro\",\n /**\n * Parquet format.\n */\n PARQUET = \"parquet\",\n /**\n * Microsoft Cosmos structured streams format\n */\n SSTREAM = \"sstream\",\n /**\n * The Optimized Row Columnar (ORC)\n */\n ORC = \"orc\",\n /**\n * Avro format for ingesting through avro2json.\n */\n APACHEAVRO = \"apacheavro\",\n /**\n * W3C Extended Log File format.\n */\n W3CLogFile = \"w3clogfile\",\n}\n\nexport enum IngestionMappingKind {\n CSV = \"Csv\",\n JSON = \"Json\",\n AVRO = \"Avro\",\n PARQUET = \"Parquet\",\n SSTREAM = \"SStream\",\n ORC = \"orc\",\n APACHEAVRO = \"ApacheAvro\",\n W3CLOGFILE = \"W3CLogFile\",\n}\n\nexport const dataFormatMappingKind = (dataFormat: DataFormat): IngestionMappingKind => {\n switch (dataFormat) {\n case DataFormat.CSV:\n return IngestionMappingKind.CSV;\n case DataFormat.TSV:\n return IngestionMappingKind.CSV;\n case DataFormat.SCSV:\n return IngestionMappingKind.CSV;\n case DataFormat.SOHSV:\n return IngestionMappingKind.CSV;\n case DataFormat.PSV:\n return IngestionMappingKind.CSV;\n case DataFormat.TXT:\n return IngestionMappingKind.CSV;\n case DataFormat.RAW:\n return IngestionMappingKind.CSV;\n case DataFormat.TSVE:\n return IngestionMappingKind.CSV;\n case DataFormat.JSON:\n return IngestionMappingKind.JSON;\n case DataFormat.SINGLEJSON:\n return IngestionMappingKind.JSON;\n case DataFormat.MULTIJSON:\n return IngestionMappingKind.JSON;\n case DataFormat.AVRO:\n return IngestionMappingKind.AVRO;\n case DataFormat.PARQUET:\n return IngestionMappingKind.PARQUET;\n case DataFormat.SSTREAM:\n return IngestionMappingKind.SSTREAM;\n case DataFormat.ORC:\n return IngestionMappingKind.ORC;\n case DataFormat.APACHEAVRO:\n return IngestionMappingKind.APACHEAVRO;\n case DataFormat.W3CLogFile:\n return IngestionMappingKind.W3CLOGFILE;\n default:\n throw new IngestionPropertiesValidationError(`Unsupported data format: ${dataFormat}`);\n }\n};\n\nexport enum ValidationOptions {\n DoNotValidate = 0,\n ValidateCsvInputConstantColumns = 1,\n ValidateCsvInputColumnLevelOnly = 2,\n}\n\nexport enum ValidationImplications {\n Fail = 0,\n BestEffort = 1,\n}\n\nexport class ValidationPolicy {\n constructor(\n readonly validationOptions: ValidationOptions = ValidationOptions.DoNotValidate,\n readonly validationImplications: ValidationImplications = ValidationImplications.BestEffort,\n ) {}\n\n toJSON(): Record<string, number> {\n return {\n ValidationOptions: this.validationOptions,\n ValidationImplications: this.validationImplications,\n };\n }\n}\n\nexport enum ReportLevel {\n FailuresOnly = 0,\n DoNotReport = 1,\n FailuresAndSuccesses = 2,\n}\n\nexport enum ReportMethod {\n Queue = 0,\n Table,\n QueueAndTable,\n}\n\nexport interface IngestionPropertiesFields {\n database?: string;\n table?: string;\n format?: DataFormat;\n /**\n * @deprecated. Use ingestionMappingColumns instead.\n */\n ingestionMapping?: ColumnMapping[];\n ingestionMappingColumns?: ColumnMapping[];\n ingestionMappingReference?: string;\n /**\n * @deprecated. Use ingestionMappingKind instead.\n */\n ingestionMappingType?: IngestionMappingKind;\n ingestionMappingKind?: IngestionMappingKind;\n additionalTags?: string;\n ingestIfNotExists?: string;\n ingestByTags?: string[];\n dropByTags?: string[];\n flushImmediately?: boolean;\n ignoreFirstRecord?: boolean;\n reportLevel?: ReportLevel;\n reportMethod?: ReportMethod;\n validationPolicy?: ValidationPolicy;\n additionalProperties?: { [additional: string]: any } | null;\n}\n\n// This trick lets us avoid duplicating all the properties from the interface. See https://github.com/microsoft/TypeScript/issues/3407\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IngestionProperties extends IngestionPropertiesFields {}\n\n// eslint-disable-next-line no-redeclare\nexport class IngestionProperties {\n constructor(data: Partial<IngestionPropertiesFields>) {\n Object.assign(this, data);\n }\n\n validate() {\n if (!this.database) throw new IngestionPropertiesValidationError(\"Must define a target database\");\n if (!this.table) throw new IngestionPropertiesValidationError(\"Must define a target table\");\n if (!this.format) throw new IngestionPropertiesValidationError(\"Must define a data format\");\n\n if (this.ingestionMappingType && !this.ingestionMappingKind) {\n this.ingestionMappingKind = this.ingestionMappingType;\n }\n\n if (this.ingestionMapping && !this.ingestionMappingColumns) {\n this.ingestionMappingColumns = this.ingestionMapping;\n }\n\n if (!this.ingestionMappingColumns && !this.ingestionMappingReference) {\n if (this.ingestionMappingKind) {\n throw new IngestionPropertiesValidationError(\n \"Cannot define ingestionMappingKind without either ingestionMappingColumns or\" + \" ingestionMappingReference\",\n );\n }\n } else {\n const mappingKind = dataFormatMappingKind(this.format);\n if (this.ingestionMappingKind && this.ingestionMappingKind !== mappingKind) {\n throw new IngestionPropertiesValidationError(\n `Mapping kind '${this.ingestionMappingKind}' does not match format '${this.format}' (should be '${mappingKind}')`,\n );\n }\n if (this.ingestionMappingColumns) {\n if (this.ingestionMappingReference) {\n throw new IngestionPropertiesValidationError(\"Cannot define both ingestionMappingColumns and ingestionMappingReference\");\n }\n\n if (this.ingestionMappingColumns.length === 0) {\n throw new IngestionPropertiesValidationError(\"Must define at least one column mapping\");\n }\n\n const wrongMappings = this.ingestionMappingColumns\n .filter((m) => m.mappingKind !== mappingKind)\n .map(\n (m) => `Mapping kind mismatch for column '${m.columnName}' - expected data format kind - '${mappingKind}', but was '${m.mappingKind}'`,\n );\n if (wrongMappings.length > 0) {\n throw new IngestionPropertiesValidationError(`Invalid columns:\\n${wrongMappings.join(\"\\n\")}`);\n }\n }\n }\n\n if (this.reportMethod !== ReportMethod.Queue && this.reportLevel === ReportLevel.FailuresOnly) {\n throw new IngestionPropertiesValidationError(\"ReportLevel.FailuresOnly is not supported with ReportMethod.Table\");\n }\n }\n\n merge(extraProps: IngestionPropertiesInput) {\n const merged = new IngestionProperties(this);\n\n if (!extraProps) {\n return merged;\n }\n\n const assign = <K extends keyof IngestionPropertiesFields, V extends IngestionPropertiesFields[K]>(\n obj: IngestionPropertiesFields,\n prop: K,\n value: V,\n ) => {\n obj[prop] = value;\n };\n\n for (const key of Object.keys(extraProps) as (keyof IngestionPropertiesFields)[]) {\n if (extraProps[key]) {\n assign(merged, key, extraProps[key]);\n }\n }\n\n return merged;\n }\n\n setDefaults() {\n if (!this.format) {\n this.format = DataFormat.CSV;\n }\n if (!this.reportLevel) {\n this.reportLevel = ReportLevel.FailuresOnly;\n }\n if (!this.reportMethod) {\n this.reportMethod = ReportMethod.Queue;\n }\n }\n}\n\nexport type IngestionPropertiesInput = IngestionProperties | IngestionPropertiesFields | null | undefined;\n\nexport function shouldCompressFileByFormat(ingestionProperties?: IngestionPropertiesInput): boolean {\n if (!ingestionProperties) {\n ingestionProperties = {};\n }\n return !(\n ingestionProperties.format === \"avro\" ||\n ingestionProperties.format === \"parquet\" ||\n ingestionProperties.format === \"orc\" ||\n ingestionProperties.format === \"apacheavro\" ||\n ingestionProperties.format === \"sstream\"\n );\n}\n\nexport default IngestionProperties;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ingestionResult.js","sourceRoot":"","sources":["../../src/ingestionResult.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAS/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAwB,EAAE,MAAoC,EAAiB,EAAE;IACpH,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,SAAS,EAAE,EAAE;QACtB,IAAI;YACA,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;SAC1C;QAAC,OAAO,EAAE,EAAE;YACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;SACzB;KACJ;AACL,CAAC,CAAC;AAEF,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACvB,sCAAmB,CAAA;IACnB,yCAAsB,CAAA;IACtB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,4DAAyC,CAAA;AAC7C,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,OAAO,0BAA0B;IACnC,YAA2B,iCAAoE,EAAS,cAAkC,IAAI;QAAnH,sCAAiC,GAAjC,iCAAiC,CAAmC;QAAS,gBAAW,GAAX,WAAW,CAA2B;IAAG,CAAC;IAE3I,KAAK,CAAC,4BAA4B;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACnB,IAAI,CAAC,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAC,iCAAiC,CAAC,qBAAqB,CAAC,CAAC;SAC5G;QAED,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CACnC,IAAI,CAAC,iCAAiC,CAAC,YAAY,EACnD,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAChD,CAAC;IACN,CAAC;CACJ;AAED,MAAM,OAAO,qBAAqB;IAC9B,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAChD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEM,4BAA4B;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC;CACJ;AAED,MAAM,OAAO,iCAAiC;IAC1C,YAAmB,qBAA6B,EAAS,YAAoB,EAAS,MAAc;QAAjF,0BAAqB,GAArB,qBAAqB,CAAQ;QAAS,iBAAY,GAAZ,YAAY,CAAQ;QAAS,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;CAC3G","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { TableClient, TableEntity } from \"@azure/data-tables\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { createStatusTableClient } from \"./resourceManager.js\";\nexport interface IngestionResult {\n /// <summary>\n /// Retrieves the detailed ingestion status of\n /// all data ingestion operations into Kusto associated with this IKustoIngestionResult instance.\n /// </summary>\n getIngestionStatusCollection(): Promise<IngestionStatus>;\n}\n\nexport const putRecordInTable = async (tableClient: TableClient, entity: TableEntity<IngestionStatus>): Promise<void> => {\n const retry = new ExponentialRetry(3, 1, 1);\n while (retry.shouldTry()) {\n try {\n await tableClient.createEntity(entity);\n } catch (ex) {\n await retry.backoff();\n }\n }\n};\n\nexport enum OperationStatus {\n Pending = \"Pending\",\n Succeede = \"Succeeded\",\n Failed = \"Failed\",\n Queued = \"Queued\",\n Skipped = \"Skipped\",\n PartiallySucceeded = \"PartiallySucceeded\",\n}\n\nexport class TableReportIngestionResult implements IngestionResult {\n public constructor(private ingestionStatusInTableDescription: IngestionStatusInTableDescription, public tableClient: TableClient | null = null) {}\n\n public async getIngestionStatusCollection(): Promise<IngestionStatus> {\n if (!this.tableClient) {\n this.tableClient = createStatusTableClient(this.ingestionStatusInTableDescription.tableConnectionString);\n }\n\n return await this.tableClient.getEntity<IngestionStatus>(\n this.ingestionStatusInTableDescription.partitionKey,\n this.ingestionStatusInTableDescription.rowKey\n );\n }\n}\n\nexport class IngestionStatusResult implements IngestionResult {\n constructor(private ingestionStatus: IngestionStatus) {\n this.ingestionStatus = ingestionStatus;\n }\n\n public getIngestionStatusCollection(): Promise<IngestionStatus> {\n return Promise.resolve(this.ingestionStatus);\n }\n}\n\nexport class IngestionStatusInTableDescription {\n constructor(public tableConnectionString: string, public partitionKey: string, public rowKey: string) {}\n}\n\nexport interface IngestionStatus {\n Timestamp: string;\n Status: OperationStatus;\n IngestionSourceId: string;\n IngestionSourcePath: string;\n Database: string;\n Table: string;\n UpdatedOn: string;\n Details: string;\n}\n"]}
1
+ {"version":3,"file":"ingestionResult.js","sourceRoot":"","sources":["../../src/ingestionResult.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAS/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAwB,EAAE,MAAoC,EAAiB,EAAE;IACpH,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACvB,IAAI,CAAC;YACD,MAAM,WAAW,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QAAC,OAAO,EAAE,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IACvB,sCAAmB,CAAA;IACnB,yCAAsB,CAAA;IACtB,oCAAiB,CAAA;IACjB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;IACnB,4DAAyC,CAAA;AAC7C,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,OAAO,0BAA0B;IACnC,YACY,iCAAoE,EACrE,cAAkC,IAAI;QADrC,sCAAiC,GAAjC,iCAAiC,CAAmC;QACrE,gBAAW,GAAX,WAAW,CAA2B;IAC9C,CAAC;IAEG,KAAK,CAAC,4BAA4B;QACrC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,uBAAuB,CAAC,IAAI,CAAC,iCAAiC,CAAC,qBAAqB,CAAC,CAAC;QAC7G,CAAC;QAED,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CACnC,IAAI,CAAC,iCAAiC,CAAC,YAAY,EACnD,IAAI,CAAC,iCAAiC,CAAC,MAAM,CAChD,CAAC;IACN,CAAC;CACJ;AAED,MAAM,OAAO,qBAAqB;IAC9B,YAAoB,eAAgC;QAAhC,oBAAe,GAAf,eAAe,CAAiB;QAChD,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IAC3C,CAAC;IAEM,4BAA4B;QAC/B,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACjD,CAAC;CACJ;AAED,MAAM,OAAO,iCAAiC;IAC1C,YACW,qBAA6B,EAC7B,YAAoB,EACpB,MAAc;QAFd,0BAAqB,GAArB,qBAAqB,CAAQ;QAC7B,iBAAY,GAAZ,YAAY,CAAQ;QACpB,WAAM,GAAN,MAAM,CAAQ;IACtB,CAAC;CACP","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { TableClient, TableEntity } from \"@azure/data-tables\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { createStatusTableClient } from \"./resourceManager.js\";\nexport interface IngestionResult {\n /// <summary>\n /// Retrieves the detailed ingestion status of\n /// all data ingestion operations into Kusto associated with this IKustoIngestionResult instance.\n /// </summary>\n getIngestionStatusCollection(): Promise<IngestionStatus>;\n}\n\nexport const putRecordInTable = async (tableClient: TableClient, entity: TableEntity<IngestionStatus>): Promise<void> => {\n const retry = new ExponentialRetry(3, 1, 1);\n while (retry.shouldTry()) {\n try {\n await tableClient.createEntity(entity);\n } catch (ex) {\n await retry.backoff();\n }\n }\n};\n\nexport enum OperationStatus {\n Pending = \"Pending\",\n Succeede = \"Succeeded\",\n Failed = \"Failed\",\n Queued = \"Queued\",\n Skipped = \"Skipped\",\n PartiallySucceeded = \"PartiallySucceeded\",\n}\n\nexport class TableReportIngestionResult implements IngestionResult {\n public constructor(\n private ingestionStatusInTableDescription: IngestionStatusInTableDescription,\n public tableClient: TableClient | null = null,\n ) {}\n\n public async getIngestionStatusCollection(): Promise<IngestionStatus> {\n if (!this.tableClient) {\n this.tableClient = createStatusTableClient(this.ingestionStatusInTableDescription.tableConnectionString);\n }\n\n return await this.tableClient.getEntity<IngestionStatus>(\n this.ingestionStatusInTableDescription.partitionKey,\n this.ingestionStatusInTableDescription.rowKey,\n );\n }\n}\n\nexport class IngestionStatusResult implements IngestionResult {\n constructor(private ingestionStatus: IngestionStatus) {\n this.ingestionStatus = ingestionStatus;\n }\n\n public getIngestionStatusCollection(): Promise<IngestionStatus> {\n return Promise.resolve(this.ingestionStatus);\n }\n}\n\nexport class IngestionStatusInTableDescription {\n constructor(\n public tableConnectionString: string,\n public partitionKey: string,\n public rowKey: string,\n ) {}\n}\n\nexport interface IngestionStatus {\n Timestamp: string;\n Status: OperationStatus;\n IngestionSourceId: string;\n IngestionSourcePath: string;\n Database: string;\n Table: string;\n UpdatedOn: string;\n Details: string;\n}\n"]}
@@ -71,7 +71,7 @@ class KustoManagedStreamingIngestClient extends AbstractKustoClient {
71
71
  let streamingResult = null;
72
72
  // tryStreamToArray returns a Buffer in NodeJS impl if stream size is small enouph
73
73
  if ((isNode && result instanceof Buffer) || !isNode) {
74
- streamingResult = await this.streamWithRetries(isNode ? (_a = descriptor.size) !== null && _a !== void 0 ? _a : 0 : descriptor.stream.byteLength, descriptor, props, clientRequestId, result);
74
+ streamingResult = await this.streamWithRetries(isNode ? ((_a = descriptor.size) !== null && _a !== void 0 ? _a : 0) : descriptor.stream.byteLength, descriptor, props, clientRequestId, result);
75
75
  result = isNode ? readableToStream(result) : descriptor.stream;
76
76
  }
77
77
  return streamingResult !== null && streamingResult !== void 0 ? streamingResult : this.queuedIngestClient.ingestFromStream(new StreamDescriptor(result).merge(descriptor), props);
@@ -1 +1 @@
1
- {"version":3,"file":"managedStreamingIngestClient.js","sourceRoot":"","sources":["../../src/managedStreamingIngestClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { isNode } from \"@azure/core-util\";\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { Readable } from \"stream\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport { AbstractDescriptor, BlobDescriptor, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\nimport IngestClient from \"./ingestClient.js\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { readableToStream, tryFileToBuffer, tryStreamToArray } from \"./streamUtils.js\";\nimport StreamingIngestClient from \"./streamingIngestClient.js\";\nimport { IngestionResult } from \"./ingestionResult.js\";\n\nconst maxStreamSize = 1024 * 1024 * 4;\nconst attemptCount = 3;\nconst ingestPrefix = \"https://ingest-\";\n\nclass KustoManagedStreamingIngestClient extends AbstractKustoClient {\n private streamingIngestClient: StreamingIngestClient;\n private queuedIngestClient: IngestClient;\n private baseSleepTimeSecs = 1;\n private baseJitterSecs = 1;\n\n /**\n * Creates a KustoManagedStreamingIngestClient from a DM connection string.\n * This method infers the engine connection string.\n * For advanced usage, use the constructor that takes a DM connection string and an engine connection string.\n *\n * @param dmConnectionString The DM connection string.\n * @param defaultProps The default ingestion properties.\n */\n static fromDmConnectionString(\n dmConnectionString: KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput\n ): KustoManagedStreamingIngestClient {\n if (dmConnectionString.dataSource == null || !dmConnectionString.dataSource.startsWith(ingestPrefix)) {\n throw new Error(`DM connection string must include the prefix '${ingestPrefix}'`);\n }\n\n const engineConnectionString = KustoConnectionStringBuilder.fromExisting(dmConnectionString);\n engineConnectionString.dataSource = engineConnectionString.dataSource?.replace(ingestPrefix, \"https://\");\n\n return new KustoManagedStreamingIngestClient(engineConnectionString, dmConnectionString, defaultProps);\n }\n\n /**\n * Creates a KustoManagedStreamingIngestClient from a engine connection string.\n * This method infers the engine connection string.\n * For advanced usage, use the constructor that takes an engine connection string and an engine connection string.\n *\n * @param engineConnectionString The engine connection string.\n * @param defaultProps The default ingestion properties.\n */\n static fromEngineConnectionString(\n engineConnectionString: KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput\n ): KustoManagedStreamingIngestClient {\n if (engineConnectionString.dataSource == null || engineConnectionString.dataSource.startsWith(ingestPrefix)) {\n throw new Error(`Engine connection string must not include the prefix '${ingestPrefix}'`);\n }\n\n const dmConnectionString = KustoConnectionStringBuilder.fromExisting(engineConnectionString);\n dmConnectionString.dataSource = dmConnectionString.dataSource?.replace(\"https://\", ingestPrefix);\n\n return new KustoManagedStreamingIngestClient(engineConnectionString, dmConnectionString, defaultProps);\n }\n\n constructor(\n engineKcsb: string | KustoConnectionStringBuilder,\n dmKcsb: string | KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n autoCorrectEndpoint: boolean = true\n ) {\n super(defaultProps);\n this.streamingIngestClient = new StreamingIngestClient(engineKcsb, defaultProps, autoCorrectEndpoint);\n this.queuedIngestClient = new IngestClient(dmKcsb, defaultProps, autoCorrectEndpoint);\n\n if (this.streamingIngestClient.defaultDatabase && this.streamingIngestClient.defaultDatabase !== this.queuedIngestClient.defaultDatabase) {\n throw new Error(\n `Default database for streaming ingest client (${this.streamingIngestClient.defaultDatabase}) must match default database for queued ingest client (${this.queuedIngestClient.defaultDatabase})`\n );\n }\n\n this.defaultDatabase = this.streamingIngestClient.defaultDatabase;\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(\n stream: StreamDescriptor | Readable | ArrayBuffer,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string\n ): Promise<KustoResponseDataSet | IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n let descriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n let result = isNode ? await tryStreamToArray(descriptor.stream as Readable, maxStreamSize) : descriptor.stream;\n descriptor = new StreamDescriptor(result).merge(descriptor);\n let streamingResult: Promise<any> | null = null;\n // tryStreamToArray returns a Buffer in NodeJS impl if stream size is small enouph\n if ((isNode && result instanceof Buffer) || !isNode) {\n streamingResult = await this.streamWithRetries(\n isNode ? descriptor.size ?? 0 : (descriptor.stream as ArrayBuffer).byteLength,\n descriptor,\n props,\n clientRequestId,\n result\n );\n\n result = isNode ? readableToStream(result) : descriptor.stream;\n }\n\n return streamingResult ?? this.queuedIngestClient.ingestFromStream(new StreamDescriptor(result).merge(descriptor), props);\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(\n file: FileDescriptor | string | Blob,\n ingestionProperties?: IngestionPropertiesInput\n ): Promise<KustoResponseDataSet | IngestionResult> {\n this.ensureOpen();\n\n const stream = file instanceof FileDescriptor ? await tryFileToBuffer(file) : await tryFileToBuffer(new FileDescriptor(file));\n return await this.ingestFromStream(stream, ingestionProperties);\n }\n\n async ingestFromBlob(\n blob: string | BlobDescriptor,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string\n ): Promise<KustoResponseDataSet | IngestionResult> {\n const props = this._getMergedProps(ingestionProperties);\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n // No need to check blob size if it was given to us that it's not empty\n await descriptor.fillSize();\n\n const streamingResult = await this.streamWithRetries(descriptor.size ?? 0, descriptor, props, clientRequestId);\n return streamingResult ?? this.queuedIngestClient.ingestFromBlob(descriptor, props);\n }\n\n async streamWithRetries(\n length: number,\n descriptor: AbstractDescriptor,\n props?: IngestionPropertiesInput,\n clientRequestId?: string,\n stream?: Readable | ArrayBuffer\n ): Promise<any> {\n const isBlob = descriptor instanceof BlobDescriptor;\n if (length <= maxStreamSize) {\n // If we get buffer that means it was less than the max size, so we can do streamingIngestion\n const retry = new ExponentialRetry(attemptCount, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const sourceId =\n clientRequestId ??\n `KNC.executeManagedStreamingIngest${isBlob ? \"FromBlob\" : \"FromStream\"};${descriptor.sourceId};${retry.currentAttempt}`;\n if (isBlob) {\n return await this.streamingIngestClient.ingestFromBlob(descriptor as BlobDescriptor, props, sourceId);\n }\n\n if (isNode) {\n return await this.streamingIngestClient.ingestFromStream(\n new StreamDescriptor(readableToStream(stream!)).merge(descriptor as StreamDescriptor),\n props,\n sourceId\n );\n }\n\n return await this.streamingIngestClient.ingestFromStream(descriptor as StreamDescriptor, props, sourceId);\n } catch (err: unknown) {\n const oneApiError = err as { \"@permanent\"?: boolean };\n if (oneApiError[\"@permanent\"]) {\n throw err;\n }\n await retry.backoff();\n }\n }\n\n stream = isBlob ? undefined : isNode && stream ? readableToStream(stream) : (descriptor as StreamDescriptor).stream;\n }\n\n return null;\n }\n\n close() {\n if (!this._isClosed) {\n this.streamingIngestClient.close();\n this.queuedIngestClient.close();\n }\n super.close();\n }\n}\n\nexport default KustoManagedStreamingIngestClient;\n"]}
1
+ {"version":3,"file":"managedStreamingIngestClient.js","sourceRoot":"","sources":["../../src/managedStreamingIngestClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,4BAA4B,EAAwB,MAAM,kBAAkB,CAAC;AAEtF,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAsB,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,qBAAqB,MAAM,4BAA4B,CAAC;AAG/D,MAAM,aAAa,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC;AACtC,MAAM,YAAY,GAAG,CAAC,CAAC;AACvB,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAEvC,MAAM,iCAAkC,SAAQ,mBAAmB;IAM/D;;;;;;;OAOG;IACH,MAAM,CAAC,sBAAsB,CACzB,kBAAgD,EAChD,YAAuC;;QAEvC,IAAI,kBAAkB,CAAC,UAAU,IAAI,IAAI,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACnG,MAAM,IAAI,KAAK,CAAC,iDAAiD,YAAY,GAAG,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,sBAAsB,GAAG,4BAA4B,CAAC,YAAY,CAAC,kBAAkB,CAAC,CAAC;QAC7F,sBAAsB,CAAC,UAAU,GAAG,MAAA,sBAAsB,CAAC,UAAU,0CAAE,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;QAEzG,OAAO,IAAI,iCAAiC,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC3G,CAAC;IAED;;;;;;;OAOG;IACH,MAAM,CAAC,0BAA0B,CAC7B,sBAAoD,EACpD,YAAuC;;QAEvC,IAAI,sBAAsB,CAAC,UAAU,IAAI,IAAI,IAAI,sBAAsB,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1G,MAAM,IAAI,KAAK,CAAC,yDAAyD,YAAY,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,MAAM,kBAAkB,GAAG,4BAA4B,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAC;QAC7F,kBAAkB,CAAC,UAAU,GAAG,MAAA,kBAAkB,CAAC,UAAU,0CAAE,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAEjG,OAAO,IAAI,iCAAiC,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAC3G,CAAC;IAED,YACI,UAAiD,EACjD,MAA6C,EAC7C,YAAuC,EACvC,sBAA+B,IAAI;QAEnC,KAAK,CAAC,YAAY,CAAC,CAAC;QArDhB,sBAAiB,GAAG,CAAC,CAAC;QACtB,mBAAc,GAAG,CAAC,CAAC;QAqDvB,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,UAAU,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;QACtG,IAAI,CAAC,kBAAkB,GAAG,IAAI,YAAY,CAAC,MAAM,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,qBAAqB,CAAC,eAAe,IAAI,IAAI,CAAC,qBAAqB,CAAC,eAAe,KAAK,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACvI,MAAM,IAAI,KAAK,CACX,iDAAiD,IAAI,CAAC,qBAAqB,CAAC,eAAe,2DAA2D,IAAI,CAAC,kBAAkB,CAAC,eAAe,GAAG,CACnM,CAAC;QACN,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,qBAAqB,CAAC,eAAe,CAAC;IACtE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAClB,MAAiD,EACjD,mBAA8C,EAC9C,eAAwB;;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,IAAI,UAAU,GAAG,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAC5F,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,gBAAgB,CAAC,UAAU,CAAC,MAAkB,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC/G,UAAU,GAAG,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,eAAe,GAAwB,IAAI,CAAC;QAChD,kFAAkF;QAClF,IAAI,CAAC,MAAM,IAAI,MAAM,YAAY,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAClD,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAC1C,MAAM,CAAC,CAAC,CAAC,CAAC,MAAA,UAAU,CAAC,IAAI,mCAAI,CAAC,CAAC,CAAC,CAAC,CAAE,UAAU,CAAC,MAAsB,CAAC,UAAU,EAC/E,UAAU,EACV,KAAK,EACL,eAAe,EACf,MAAM,CACT,CAAC;YAEF,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QACnE,CAAC;QAED,OAAO,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,IAAI,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,CAAC;IAC9H,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAChB,IAAoC,EACpC,mBAA8C;QAE9C,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,MAAM,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,eAAe,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9H,OAAO,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpE,CAAC;IAED,KAAK,CAAC,cAAc,CAChB,IAA6B,EAC7B,mBAA8C,EAC9C,eAAwB;;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpF,uEAAuE;QACvE,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAE5B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAA,UAAU,CAAC,IAAI,mCAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC;QAC/G,OAAO,eAAe,aAAf,eAAe,cAAf,eAAe,GAAI,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACxF,CAAC;IAED,KAAK,CAAC,iBAAiB,CACnB,MAAc,EACd,UAA8B,EAC9B,KAAgC,EAChC,eAAwB,EACxB,MAA+B;QAE/B,MAAM,MAAM,GAAG,UAAU,YAAY,cAAc,CAAC;QACpD,IAAI,MAAM,IAAI,aAAa,EAAE,CAAC;YAC1B,6FAA6F;YAC7F,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC9F,OAAO,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvB,IAAI,CAAC;oBACD,MAAM,QAAQ,GACV,eAAe,aAAf,eAAe,cAAf,eAAe,GACf,oCAAoC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,IAAI,UAAU,CAAC,QAAQ,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;oBAC5H,IAAI,MAAM,EAAE,CAAC;wBACT,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,cAAc,CAAC,UAA4B,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;oBAC1G,CAAC;oBAED,IAAI,MAAM,EAAE,CAAC;wBACT,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CACpD,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,MAAO,CAAC,CAAC,CAAC,KAAK,CAAC,UAA8B,CAAC,EACrF,KAAK,EACL,QAAQ,CACX,CAAC;oBACN,CAAC;oBAED,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,UAA8B,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC9G,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACpB,MAAM,WAAW,GAAG,GAAiC,CAAC;oBACtD,IAAI,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC5B,MAAM,GAAG,CAAC;oBACd,CAAC;oBACD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;gBAC1B,CAAC;YACL,CAAC;YAED,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAE,UAA+B,CAAC,MAAM,CAAC;QACxH,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACJ;AAED,eAAe,iCAAiC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { isNode } from \"@azure/core-util\";\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { Readable } from \"stream\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport { AbstractDescriptor, BlobDescriptor, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\nimport IngestClient from \"./ingestClient.js\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { readableToStream, tryFileToBuffer, tryStreamToArray } from \"./streamUtils.js\";\nimport StreamingIngestClient from \"./streamingIngestClient.js\";\nimport { IngestionResult } from \"./ingestionResult.js\";\n\nconst maxStreamSize = 1024 * 1024 * 4;\nconst attemptCount = 3;\nconst ingestPrefix = \"https://ingest-\";\n\nclass KustoManagedStreamingIngestClient extends AbstractKustoClient {\n private streamingIngestClient: StreamingIngestClient;\n private queuedIngestClient: IngestClient;\n private baseSleepTimeSecs = 1;\n private baseJitterSecs = 1;\n\n /**\n * Creates a KustoManagedStreamingIngestClient from a DM connection string.\n * This method infers the engine connection string.\n * For advanced usage, use the constructor that takes a DM connection string and an engine connection string.\n *\n * @param dmConnectionString The DM connection string.\n * @param defaultProps The default ingestion properties.\n */\n static fromDmConnectionString(\n dmConnectionString: KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n ): KustoManagedStreamingIngestClient {\n if (dmConnectionString.dataSource == null || !dmConnectionString.dataSource.startsWith(ingestPrefix)) {\n throw new Error(`DM connection string must include the prefix '${ingestPrefix}'`);\n }\n\n const engineConnectionString = KustoConnectionStringBuilder.fromExisting(dmConnectionString);\n engineConnectionString.dataSource = engineConnectionString.dataSource?.replace(ingestPrefix, \"https://\");\n\n return new KustoManagedStreamingIngestClient(engineConnectionString, dmConnectionString, defaultProps);\n }\n\n /**\n * Creates a KustoManagedStreamingIngestClient from a engine connection string.\n * This method infers the engine connection string.\n * For advanced usage, use the constructor that takes an engine connection string and an engine connection string.\n *\n * @param engineConnectionString The engine connection string.\n * @param defaultProps The default ingestion properties.\n */\n static fromEngineConnectionString(\n engineConnectionString: KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n ): KustoManagedStreamingIngestClient {\n if (engineConnectionString.dataSource == null || engineConnectionString.dataSource.startsWith(ingestPrefix)) {\n throw new Error(`Engine connection string must not include the prefix '${ingestPrefix}'`);\n }\n\n const dmConnectionString = KustoConnectionStringBuilder.fromExisting(engineConnectionString);\n dmConnectionString.dataSource = dmConnectionString.dataSource?.replace(\"https://\", ingestPrefix);\n\n return new KustoManagedStreamingIngestClient(engineConnectionString, dmConnectionString, defaultProps);\n }\n\n constructor(\n engineKcsb: string | KustoConnectionStringBuilder,\n dmKcsb: string | KustoConnectionStringBuilder,\n defaultProps?: IngestionPropertiesInput,\n autoCorrectEndpoint: boolean = true,\n ) {\n super(defaultProps);\n this.streamingIngestClient = new StreamingIngestClient(engineKcsb, defaultProps, autoCorrectEndpoint);\n this.queuedIngestClient = new IngestClient(dmKcsb, defaultProps, autoCorrectEndpoint);\n\n if (this.streamingIngestClient.defaultDatabase && this.streamingIngestClient.defaultDatabase !== this.queuedIngestClient.defaultDatabase) {\n throw new Error(\n `Default database for streaming ingest client (${this.streamingIngestClient.defaultDatabase}) must match default database for queued ingest client (${this.queuedIngestClient.defaultDatabase})`,\n );\n }\n\n this.defaultDatabase = this.streamingIngestClient.defaultDatabase;\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(\n stream: StreamDescriptor | Readable | ArrayBuffer,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string,\n ): Promise<KustoResponseDataSet | IngestionResult> {\n this.ensureOpen();\n const props = this._getMergedProps(ingestionProperties);\n let descriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n let result = isNode ? await tryStreamToArray(descriptor.stream as Readable, maxStreamSize) : descriptor.stream;\n descriptor = new StreamDescriptor(result).merge(descriptor);\n let streamingResult: Promise<any> | null = null;\n // tryStreamToArray returns a Buffer in NodeJS impl if stream size is small enouph\n if ((isNode && result instanceof Buffer) || !isNode) {\n streamingResult = await this.streamWithRetries(\n isNode ? (descriptor.size ?? 0) : (descriptor.stream as ArrayBuffer).byteLength,\n descriptor,\n props,\n clientRequestId,\n result,\n );\n\n result = isNode ? readableToStream(result) : descriptor.stream;\n }\n\n return streamingResult ?? this.queuedIngestClient.ingestFromStream(new StreamDescriptor(result).merge(descriptor), props);\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(\n file: FileDescriptor | string | Blob,\n ingestionProperties?: IngestionPropertiesInput,\n ): Promise<KustoResponseDataSet | IngestionResult> {\n this.ensureOpen();\n\n const stream = file instanceof FileDescriptor ? await tryFileToBuffer(file) : await tryFileToBuffer(new FileDescriptor(file));\n return await this.ingestFromStream(stream, ingestionProperties);\n }\n\n async ingestFromBlob(\n blob: string | BlobDescriptor,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string,\n ): Promise<KustoResponseDataSet | IngestionResult> {\n const props = this._getMergedProps(ingestionProperties);\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n // No need to check blob size if it was given to us that it's not empty\n await descriptor.fillSize();\n\n const streamingResult = await this.streamWithRetries(descriptor.size ?? 0, descriptor, props, clientRequestId);\n return streamingResult ?? this.queuedIngestClient.ingestFromBlob(descriptor, props);\n }\n\n async streamWithRetries(\n length: number,\n descriptor: AbstractDescriptor,\n props?: IngestionPropertiesInput,\n clientRequestId?: string,\n stream?: Readable | ArrayBuffer,\n ): Promise<any> {\n const isBlob = descriptor instanceof BlobDescriptor;\n if (length <= maxStreamSize) {\n // If we get buffer that means it was less than the max size, so we can do streamingIngestion\n const retry = new ExponentialRetry(attemptCount, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const sourceId =\n clientRequestId ??\n `KNC.executeManagedStreamingIngest${isBlob ? \"FromBlob\" : \"FromStream\"};${descriptor.sourceId};${retry.currentAttempt}`;\n if (isBlob) {\n return await this.streamingIngestClient.ingestFromBlob(descriptor as BlobDescriptor, props, sourceId);\n }\n\n if (isNode) {\n return await this.streamingIngestClient.ingestFromStream(\n new StreamDescriptor(readableToStream(stream!)).merge(descriptor as StreamDescriptor),\n props,\n sourceId,\n );\n }\n\n return await this.streamingIngestClient.ingestFromStream(descriptor as StreamDescriptor, props, sourceId);\n } catch (err: unknown) {\n const oneApiError = err as { \"@permanent\"?: boolean };\n if (oneApiError[\"@permanent\"]) {\n throw err;\n }\n await retry.backoff();\n }\n }\n\n stream = isBlob ? undefined : isNode && stream ? readableToStream(stream) : (descriptor as StreamDescriptor).stream;\n }\n\n return null;\n }\n\n close() {\n if (!this._isClosed) {\n this.streamingIngestClient.close();\n this.queuedIngestClient.close();\n }\n super.close();\n }\n}\n\nexport default KustoManagedStreamingIngestClient;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rankedStorageAccount.js","sourceRoot":"","sources":["../../src/rankedStorageAccount.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nclass StorageAccountStats {\n public successCount: number;\n public totalCount: number;\n\n constructor() {\n this.successCount = 0;\n this.totalCount = 0;\n }\n\n logResult(success: boolean): void {\n this.totalCount += 1;\n if (success) {\n this.successCount += 1;\n }\n }\n\n reset(): void {\n this.successCount = 0;\n this.totalCount = 0;\n }\n}\n\nexport class RankedStorageAccount {\n private buckets: StorageAccountStats[];\n private lastUpdateTime: number;\n private currentBucketIndex: number;\n\n constructor(private accountName: string, private numberOfBuckets: number, private bucketDuration: number, private timeProvider: () => number) {\n this.buckets = new Array<StorageAccountStats>(numberOfBuckets).fill(new StorageAccountStats()).map(() => new StorageAccountStats());\n this.lastUpdateTime = this.timeProvider();\n this.currentBucketIndex = 0;\n }\n\n logResult(success: boolean): void {\n this.currentBucketIndex = this.adjustForTimePassed();\n this.buckets[this.currentBucketIndex].logResult(success);\n }\n\n getAccountName(): string {\n return this.accountName;\n }\n\n adjustForTimePassed(): number {\n const currentTime = this.timeProvider();\n const timeDelta = currentTime - this.lastUpdateTime;\n let window_size = 0;\n\n if (timeDelta >= this.bucketDuration) {\n this.lastUpdateTime = currentTime;\n window_size = Math.min(Math.floor(timeDelta / this.bucketDuration), this.numberOfBuckets);\n for (let i = 1; i < window_size + 1; i++) {\n const indexToReset = (this.currentBucketIndex + i) % this.numberOfBuckets;\n this.buckets[indexToReset].reset();\n }\n }\n\n return (this.currentBucketIndex + window_size) % this.numberOfBuckets;\n }\n\n getRank(): number {\n let rank: number = 0;\n let totalWeight: number = 0;\n\n for (let i = 1; i <= this.numberOfBuckets; i++) {\n const bucketIndex: number = (this.currentBucketIndex + i) % this.numberOfBuckets;\n const bucket: StorageAccountStats = this.buckets[bucketIndex];\n if (bucket.totalCount === 0) {\n continue;\n }\n const successRate: number = bucket.successCount / bucket.totalCount;\n rank += successRate * i;\n totalWeight += i;\n }\n\n if (totalWeight === 0) {\n return 1;\n }\n return rank / totalWeight;\n }\n}\n"]}
1
+ {"version":3,"file":"rankedStorageAccount.js","sourceRoot":"","sources":["../../src/rankedStorageAccount.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\nclass StorageAccountStats {\n public successCount: number;\n public totalCount: number;\n\n constructor() {\n this.successCount = 0;\n this.totalCount = 0;\n }\n\n logResult(success: boolean): void {\n this.totalCount += 1;\n if (success) {\n this.successCount += 1;\n }\n }\n\n reset(): void {\n this.successCount = 0;\n this.totalCount = 0;\n }\n}\n\nexport class RankedStorageAccount {\n private buckets: StorageAccountStats[];\n private lastUpdateTime: number;\n private currentBucketIndex: number;\n\n constructor(\n private accountName: string,\n private numberOfBuckets: number,\n private bucketDuration: number,\n private timeProvider: () => number,\n ) {\n this.buckets = new Array<StorageAccountStats>(numberOfBuckets).fill(new StorageAccountStats()).map(() => new StorageAccountStats());\n this.lastUpdateTime = this.timeProvider();\n this.currentBucketIndex = 0;\n }\n\n logResult(success: boolean): void {\n this.currentBucketIndex = this.adjustForTimePassed();\n this.buckets[this.currentBucketIndex].logResult(success);\n }\n\n getAccountName(): string {\n return this.accountName;\n }\n\n adjustForTimePassed(): number {\n const currentTime = this.timeProvider();\n const timeDelta = currentTime - this.lastUpdateTime;\n let window_size = 0;\n\n if (timeDelta >= this.bucketDuration) {\n this.lastUpdateTime = currentTime;\n window_size = Math.min(Math.floor(timeDelta / this.bucketDuration), this.numberOfBuckets);\n for (let i = 1; i < window_size + 1; i++) {\n const indexToReset = (this.currentBucketIndex + i) % this.numberOfBuckets;\n this.buckets[indexToReset].reset();\n }\n }\n\n return (this.currentBucketIndex + window_size) % this.numberOfBuckets;\n }\n\n getRank(): number {\n let rank: number = 0;\n let totalWeight: number = 0;\n\n for (let i = 1; i <= this.numberOfBuckets; i++) {\n const bucketIndex: number = (this.currentBucketIndex + i) % this.numberOfBuckets;\n const bucket: StorageAccountStats = this.buckets[bucketIndex];\n if (bucket.totalCount === 0) {\n continue;\n }\n const successRate: number = bucket.successCount / bucket.totalCount;\n rank += successRate * i;\n totalWeight += i;\n }\n\n if (totalWeight === 0) {\n return 1;\n }\n return rank / totalWeight;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"rankedStorageAccountSet.js","sourceRoot":"","sources":["../../src/rankedStorageAccountSet.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { RankedStorageAccount } from \"./rankedStorageAccount.js\";\n\nexport class RankedStorageAccountSet {\n public static readonly DefaultNumberOfBuckets: number = 6;\n public static readonly DefaultBucketDurationInSeconds: number = 10;\n public static readonly DefaultTiers: number[] = [90, 70, 30, 0];\n public static readonly DefaultTimeProviderInSeconds: () => number = () => {\n return new Date().getTime() / 1000;\n };\n\n private accounts: Map<string, RankedStorageAccount>;\n\n constructor(\n private numberOfBuckets: number = RankedStorageAccountSet.DefaultNumberOfBuckets,\n private bucketDuration: number = RankedStorageAccountSet.DefaultBucketDurationInSeconds,\n private tiers: number[] = RankedStorageAccountSet.DefaultTiers,\n private timeProvider: () => number = RankedStorageAccountSet.DefaultTimeProviderInSeconds\n ) {\n this.accounts = new Map<string, RankedStorageAccount>();\n }\n\n logResultToAccount(accountName: string, result: boolean) {\n if (!this.accounts.has(accountName)) {\n throw new Error(\"Storage account name is not part of the set.\");\n }\n this.accounts.get(accountName)?.logResult(result);\n }\n\n registerStorageAccount(accountName: string) {\n if (this.accounts.has(accountName)) {\n return;\n }\n this.accounts.set(accountName, new RankedStorageAccount(accountName, this.numberOfBuckets, this.bucketDuration, this.timeProvider));\n }\n\n getStorageAccount(accountName: string): RankedStorageAccount {\n const account = this.accounts.get(accountName);\n if (account) {\n return account;\n }\n throw new Error(\"Storage account name is not part of the set.\");\n }\n\n getRankedShuffledAccounts(): RankedStorageAccount[] {\n const accountsByTier: RankedStorageAccount[][] = new Array<RankedStorageAccount[]>(this.tiers.length);\n\n // Group accounts by tier and rank\n for (const account of this.accounts.values()) {\n const rank = account.getRank() * 100;\n const tierInedx = this.tiers.findIndex((tier) => rank >= tier);\n accountsByTier[tierInedx] = accountsByTier[tierInedx] || [];\n accountsByTier[tierInedx].push(account);\n }\n\n // Shuffle each tier\n for (let i = 0; i < this.tiers.length; i++) {\n if (accountsByTier[i]) {\n accountsByTier[i].sort(() => Math.random() - 0.5);\n }\n }\n\n // Flatten the array\n return accountsByTier.flat();\n }\n}\n"]}
1
+ {"version":3,"file":"rankedStorageAccountSet.js","sourceRoot":"","sources":["../../src/rankedStorageAccountSet.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { RankedStorageAccount } from \"./rankedStorageAccount.js\";\n\nexport class RankedStorageAccountSet {\n public static readonly DefaultNumberOfBuckets: number = 6;\n public static readonly DefaultBucketDurationInSeconds: number = 10;\n public static readonly DefaultTiers: number[] = [90, 70, 30, 0];\n public static readonly DefaultTimeProviderInSeconds: () => number = () => {\n return new Date().getTime() / 1000;\n };\n\n private accounts: Map<string, RankedStorageAccount>;\n\n constructor(\n private numberOfBuckets: number = RankedStorageAccountSet.DefaultNumberOfBuckets,\n private bucketDuration: number = RankedStorageAccountSet.DefaultBucketDurationInSeconds,\n private tiers: number[] = RankedStorageAccountSet.DefaultTiers,\n private timeProvider: () => number = RankedStorageAccountSet.DefaultTimeProviderInSeconds,\n ) {\n this.accounts = new Map<string, RankedStorageAccount>();\n }\n\n logResultToAccount(accountName: string, result: boolean) {\n if (!this.accounts.has(accountName)) {\n throw new Error(\"Storage account name is not part of the set.\");\n }\n this.accounts.get(accountName)?.logResult(result);\n }\n\n registerStorageAccount(accountName: string) {\n if (this.accounts.has(accountName)) {\n return;\n }\n this.accounts.set(accountName, new RankedStorageAccount(accountName, this.numberOfBuckets, this.bucketDuration, this.timeProvider));\n }\n\n getStorageAccount(accountName: string): RankedStorageAccount {\n const account = this.accounts.get(accountName);\n if (account) {\n return account;\n }\n throw new Error(\"Storage account name is not part of the set.\");\n }\n\n getRankedShuffledAccounts(): RankedStorageAccount[] {\n const accountsByTier: RankedStorageAccount[][] = new Array<RankedStorageAccount[]>(this.tiers.length);\n\n // Group accounts by tier and rank\n for (const account of this.accounts.values()) {\n const rank = account.getRank() * 100;\n const tierInedx = this.tiers.findIndex((tier) => rank >= tier);\n accountsByTier[tierInedx] = accountsByTier[tierInedx] || [];\n accountsByTier[tierInedx].push(account);\n }\n\n // Shuffle each tier\n for (let i = 0; i < this.tiers.length; i++) {\n if (accountsByTier[i]) {\n accountsByTier[i].sort(() => Math.random() - 0.5);\n }\n }\n\n // Flatten the array\n return accountsByTier.flat();\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"resourceManager.js","sourceRoot":"","sources":["../../src/resourceManager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Client, KustoDataErrors, TimeUtils } from \"azure-kusto-data\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { ContainerClient } from \"@azure/storage-blob\";\nimport { TableClient } from \"@azure/data-tables\";\nimport { RankedStorageAccountSet } from \"./rankedStorageAccountSet.js\";\nimport { QueueClient } from \"@azure/storage-queue\";\n\nconst ATTEMPT_COUNT = 4;\n\nexport enum ResourceType {\n Queue,\n Container,\n Table,\n}\n\nexport class ResourceURI {\n constructor(readonly uri: string, readonly accountName: string, readonly resourceType: ResourceType) {}\n}\n\nexport class IngestClientResources {\n constructor(\n readonly securedReadyForAggregationQueues: ResourceURI[] | null = null,\n readonly failedIngestionsQueues: ResourceURI[] | null = null,\n readonly successfulIngestionsQueues: ResourceURI[] | null = null,\n readonly containers: ResourceURI[] | null = null,\n readonly statusTables: ResourceURI[] | null = null\n ) {}\n\n valid() {\n const resources = [this.securedReadyForAggregationQueues, this.failedIngestionsQueues, this.failedIngestionsQueues, this.containers, this.statusTables];\n return resources.reduce((prev, current) => !!(prev && current), true);\n }\n}\n\nexport class ResourceManager {\n public readonly refreshPeriod: number;\n public refreshPeriodOnError: number;\n public ingestClientResources: IngestClientResources | null;\n public ingestClientResourcesLastUpdate: number | null;\n public authorizationContext: string | null;\n public authorizationContextLastUpdate: number | null;\n\n private baseSleepTimeSecs = 1;\n private baseJitterSecs = 1;\n private rankedStorageAccountSet: RankedStorageAccountSet;\n\n constructor(readonly kustoClient: Client, readonly isBrowser: boolean = false) {\n this.refreshPeriod = TimeUtils.toMilliseconds(1, 0, 0);\n this.refreshPeriodOnError = TimeUtils.toMilliseconds(0, 10, 0);\n\n this.ingestClientResources = null;\n this.ingestClientResourcesLastUpdate = null;\n\n this.authorizationContext = null;\n this.authorizationContextLastUpdate = null;\n\n this.rankedStorageAccountSet = new RankedStorageAccountSet();\n }\n\n async refreshIngestClientResources(): Promise<IngestClientResources> {\n const error = await this.tryRefresh(false);\n if (!this.ingestClientResources) {\n throw new Error(`Failed to fetch ingestion resources from service. ${error?.message}.\\n ${error?.stack}`);\n }\n\n return this.ingestClientResources;\n }\n\n async getIngestClientResourcesFromService(): Promise<IngestClientResources> {\n const retry = new ExponentialRetry(ATTEMPT_COUNT, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const cmd = `.get ingestion resources ${this.isBrowser ? `with (EnableBlobCors='true', EnableQueueCors='true', EnableTableCors='true')` : \"\"}`;\n const response = await this.kustoClient.execute(\"NetDefaultDB\", cmd);\n const table = response.primaryResults[0];\n const resoures = new IngestClientResources(\n this.getResourceByName(table, \"SecuredReadyForAggregationQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"FailedIngestionsQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"SuccessfulIngestionsQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"TempStorage\", ResourceType.Container),\n this.getResourceByName(table, \"IngestionsStatusTable\", ResourceType.Table)\n );\n\n if (!resoures.valid()) {\n throw new Error(\"Unexpected error occured - fetched data returned missing resource\");\n }\n\n return resoures;\n } catch (error: unknown) {\n if (!(error instanceof KustoDataErrors.ThrottlingError)) {\n throw error;\n }\n await retry.backoff();\n }\n }\n throw new Error(`Failed to get ingestion resources from server - the request was throttled ${ATTEMPT_COUNT} times.`);\n }\n\n getResourceByName(table: { rows: () => any }, resourceName: string, resourceType: ResourceType): ResourceURI[] {\n const result: ResourceURI[] = [];\n for (const row of table.rows()) {\n const typedRow = row as {\n ResourceTypeName: string;\n StorageRoot: string;\n };\n if (typedRow.ResourceTypeName === resourceName) {\n let accountName = \"\";\n if (resourceType === ResourceType.Queue) {\n accountName = new QueueClient(typedRow.StorageRoot).accountName;\n } else if (resourceType === ResourceType.Container) {\n accountName = new ContainerClient(typedRow.StorageRoot).accountName;\n }\n result.push(new ResourceURI(typedRow.StorageRoot, accountName, resourceType));\n }\n }\n return result;\n }\n\n pupulateStorageAccounts(): void {\n if (this.ingestClientResources == null) {\n return;\n }\n\n // containers\n const accounts = new Set<string>();\n if (this.ingestClientResources.containers != null) {\n for (const container of this.ingestClientResources.containers) {\n accounts.add(container.accountName);\n }\n }\n // queues\n if (this.ingestClientResources.securedReadyForAggregationQueues != null) {\n for (const queue of this.ingestClientResources.securedReadyForAggregationQueues) {\n accounts.add(queue.accountName);\n }\n }\n\n for (const account of accounts) {\n this.rankedStorageAccountSet.registerStorageAccount(account);\n }\n }\n\n groupResourcesByStorageAccount(resources: ResourceURI[]): Map<string, ResourceURI[]> {\n const result = new Map<string, ResourceURI[]>();\n for (const resource of resources) {\n if (!result.has(resource.accountName)) {\n result.set(resource.accountName, []);\n }\n result.get(resource.accountName)?.push(resource);\n }\n return result;\n }\n\n getRankedAndShuffledStorageAccounts(resources: ResourceURI[]): ResourceURI[][] {\n const resourcesByAccount = this.groupResourcesByStorageAccount(resources);\n const rankedStorageAccounts = this.rankedStorageAccountSet.getRankedShuffledAccounts();\n const result = new Array<ResourceURI[]>();\n for (const account of rankedStorageAccounts) {\n const accountName = account.getAccountName();\n if (resourcesByAccount.has(accountName)) {\n result.push(resourcesByAccount.get(accountName) as ResourceURI[]);\n }\n }\n return result;\n }\n\n getRoundRobinRankedAndShuffledResources(resources: ResourceURI[]): ResourceURI[] {\n const rankedAccounts = this.getRankedAndShuffledStorageAccounts(resources);\n const result = new Array<ResourceURI>();\n let index = 0;\n while (result.length < resources.length) {\n const account = rankedAccounts[index % rankedAccounts.length];\n if (account.length > 0) {\n result.push(account.shift() as ResourceURI);\n }\n index++;\n }\n return result;\n }\n\n async refreshAuthorizationContext(): Promise<string> {\n const error = await this.tryRefresh(true);\n\n if (this.authorizationContext == null) {\n throw new Error(`Failed to fetch Authorization context from service. ${error?.message}.\\n ${error?.stack}`);\n }\n\n return this.authorizationContext;\n }\n\n async tryRefresh(isAuthContextFetch: boolean): Promise<Error | null> {\n const resource = isAuthContextFetch ? this.authorizationContext?.trim() : this.ingestClientResources;\n const lastRefresh = isAuthContextFetch ? this.authorizationContextLastUpdate : this.ingestClientResourcesLastUpdate;\n const now = Date.now();\n let error: Error | null = null;\n if (!resource || !lastRefresh || lastRefresh + this.refreshPeriod <= now) {\n try {\n if (isAuthContextFetch) {\n this.authorizationContext = await this.getAuthorizationContextFromService();\n this.authorizationContextLastUpdate = now;\n } else {\n this.ingestClientResources = await this.getIngestClientResourcesFromService();\n this.ingestClientResourcesLastUpdate = now;\n this.pupulateStorageAccounts();\n }\n } catch (e) {\n error = e as Error;\n }\n }\n\n return error;\n }\n\n async getAuthorizationContextFromService() {\n const retry = new ExponentialRetry(ATTEMPT_COUNT, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const response = await this.kustoClient.execute(\"NetDefaultDB\", \".get kusto identity token\");\n const next = response.primaryResults[0].rows().next();\n if (next.done) {\n throw new Error(\"Failed to get authorization context - got empty results\");\n }\n return next.value.toJSON<{ AuthorizationContext: string }>().AuthorizationContext;\n } catch (error: unknown) {\n if (!(error instanceof KustoDataErrors.ThrottlingError)) {\n throw error;\n }\n await retry.backoff();\n }\n }\n throw new Error(`Failed to get identity token from server - the request was throttled ${ATTEMPT_COUNT} times.`);\n }\n\n async getIngestionQueues(): Promise<ResourceURI[] | null> {\n const queues = (await this.refreshIngestClientResources()).securedReadyForAggregationQueues;\n return queues ? this.getRoundRobinRankedAndShuffledResources(queues) : null;\n }\n\n async getFailedIngestionsQueues(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).failedIngestionsQueues;\n }\n\n async getSuccessfulIngestionsQueues(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).successfulIngestionsQueues;\n }\n\n async getContainers(): Promise<ResourceURI[] | null> {\n const containers = (await this.refreshIngestClientResources()).containers;\n return containers ? this.getRoundRobinRankedAndShuffledResources(containers) : null;\n }\n\n async getAuthorizationContext(): Promise<string> {\n return this.refreshAuthorizationContext();\n }\n\n async getStatusTables(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).statusTables;\n }\n\n async createStatusTable() {\n const statusTables = await this.getStatusTables();\n if (!statusTables) {\n throw new Error(\"Failed to get status table\");\n }\n\n return createStatusTableClient(statusTables![0].uri);\n }\n\n close(): void {\n this.kustoClient.close();\n }\n\n reportResourceUsageResult(accountName: string, success: boolean): void {\n this.rankedStorageAccountSet.logResultToAccount(accountName, success);\n }\n}\n\nexport const createStatusTableClient = (uri: string): TableClient => {\n const tableUrl = new URL(uri);\n const origin = tableUrl.origin;\n const sasToken = tableUrl.search;\n const tableName = tableUrl.pathname.replace(\"/\", \"\");\n return new TableClient(origin + sasToken, tableName);\n};\n\nexport default ResourceManager;\n"]}
1
+ {"version":3,"file":"resourceManager.js","sourceRoot":"","sources":["../../src/resourceManager.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { Client, KustoDataErrors, TimeUtils } from \"azure-kusto-data\";\nimport { ExponentialRetry } from \"./retry.js\";\nimport { ContainerClient } from \"@azure/storage-blob\";\nimport { TableClient } from \"@azure/data-tables\";\nimport { RankedStorageAccountSet } from \"./rankedStorageAccountSet.js\";\nimport { QueueClient } from \"@azure/storage-queue\";\n\nconst ATTEMPT_COUNT = 4;\n\nexport enum ResourceType {\n Queue,\n Container,\n Table,\n}\n\nexport class ResourceURI {\n constructor(\n readonly uri: string,\n readonly accountName: string,\n readonly resourceType: ResourceType,\n ) {}\n}\n\nexport class IngestClientResources {\n constructor(\n readonly securedReadyForAggregationQueues: ResourceURI[] | null = null,\n readonly failedIngestionsQueues: ResourceURI[] | null = null,\n readonly successfulIngestionsQueues: ResourceURI[] | null = null,\n readonly containers: ResourceURI[] | null = null,\n readonly statusTables: ResourceURI[] | null = null,\n ) {}\n\n valid() {\n const resources = [this.securedReadyForAggregationQueues, this.failedIngestionsQueues, this.failedIngestionsQueues, this.containers, this.statusTables];\n return resources.reduce((prev, current) => !!(prev && current), true);\n }\n}\n\nexport class ResourceManager {\n public readonly refreshPeriod: number;\n public refreshPeriodOnError: number;\n public ingestClientResources: IngestClientResources | null;\n public ingestClientResourcesLastUpdate: number | null;\n public authorizationContext: string | null;\n public authorizationContextLastUpdate: number | null;\n\n private baseSleepTimeSecs = 1;\n private baseJitterSecs = 1;\n private rankedStorageAccountSet: RankedStorageAccountSet;\n\n constructor(\n readonly kustoClient: Client,\n readonly isBrowser: boolean = false,\n ) {\n this.refreshPeriod = TimeUtils.toMilliseconds(1, 0, 0);\n this.refreshPeriodOnError = TimeUtils.toMilliseconds(0, 10, 0);\n\n this.ingestClientResources = null;\n this.ingestClientResourcesLastUpdate = null;\n\n this.authorizationContext = null;\n this.authorizationContextLastUpdate = null;\n\n this.rankedStorageAccountSet = new RankedStorageAccountSet();\n }\n\n async refreshIngestClientResources(): Promise<IngestClientResources> {\n const error = await this.tryRefresh(false);\n if (!this.ingestClientResources) {\n throw new Error(`Failed to fetch ingestion resources from service. ${error?.message}.\\n ${error?.stack}`);\n }\n\n return this.ingestClientResources;\n }\n\n async getIngestClientResourcesFromService(): Promise<IngestClientResources> {\n const retry = new ExponentialRetry(ATTEMPT_COUNT, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const cmd = `.get ingestion resources ${this.isBrowser ? `with (EnableBlobCors='true', EnableQueueCors='true', EnableTableCors='true')` : \"\"}`;\n const response = await this.kustoClient.execute(\"NetDefaultDB\", cmd);\n const table = response.primaryResults[0];\n const resoures = new IngestClientResources(\n this.getResourceByName(table, \"SecuredReadyForAggregationQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"FailedIngestionsQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"SuccessfulIngestionsQueue\", ResourceType.Queue),\n this.getResourceByName(table, \"TempStorage\", ResourceType.Container),\n this.getResourceByName(table, \"IngestionsStatusTable\", ResourceType.Table),\n );\n\n if (!resoures.valid()) {\n throw new Error(\"Unexpected error occured - fetched data returned missing resource\");\n }\n\n return resoures;\n } catch (error: unknown) {\n if (!(error instanceof KustoDataErrors.ThrottlingError)) {\n throw error;\n }\n await retry.backoff();\n }\n }\n throw new Error(`Failed to get ingestion resources from server - the request was throttled ${ATTEMPT_COUNT} times.`);\n }\n\n getResourceByName(table: { rows: () => any }, resourceName: string, resourceType: ResourceType): ResourceURI[] {\n const result: ResourceURI[] = [];\n for (const row of table.rows()) {\n const typedRow = row as {\n ResourceTypeName: string;\n StorageRoot: string;\n };\n if (typedRow.ResourceTypeName === resourceName) {\n let accountName = \"\";\n if (resourceType === ResourceType.Queue) {\n accountName = new QueueClient(typedRow.StorageRoot).accountName;\n } else if (resourceType === ResourceType.Container) {\n accountName = new ContainerClient(typedRow.StorageRoot).accountName;\n }\n result.push(new ResourceURI(typedRow.StorageRoot, accountName, resourceType));\n }\n }\n return result;\n }\n\n pupulateStorageAccounts(): void {\n if (this.ingestClientResources == null) {\n return;\n }\n\n // containers\n const accounts = new Set<string>();\n if (this.ingestClientResources.containers != null) {\n for (const container of this.ingestClientResources.containers) {\n accounts.add(container.accountName);\n }\n }\n // queues\n if (this.ingestClientResources.securedReadyForAggregationQueues != null) {\n for (const queue of this.ingestClientResources.securedReadyForAggregationQueues) {\n accounts.add(queue.accountName);\n }\n }\n\n for (const account of accounts) {\n this.rankedStorageAccountSet.registerStorageAccount(account);\n }\n }\n\n groupResourcesByStorageAccount(resources: ResourceURI[]): Map<string, ResourceURI[]> {\n const result = new Map<string, ResourceURI[]>();\n for (const resource of resources) {\n if (!result.has(resource.accountName)) {\n result.set(resource.accountName, []);\n }\n result.get(resource.accountName)?.push(resource);\n }\n return result;\n }\n\n getRankedAndShuffledStorageAccounts(resources: ResourceURI[]): ResourceURI[][] {\n const resourcesByAccount = this.groupResourcesByStorageAccount(resources);\n const rankedStorageAccounts = this.rankedStorageAccountSet.getRankedShuffledAccounts();\n const result = new Array<ResourceURI[]>();\n for (const account of rankedStorageAccounts) {\n const accountName = account.getAccountName();\n if (resourcesByAccount.has(accountName)) {\n result.push(resourcesByAccount.get(accountName) as ResourceURI[]);\n }\n }\n return result;\n }\n\n getRoundRobinRankedAndShuffledResources(resources: ResourceURI[]): ResourceURI[] {\n const rankedAccounts = this.getRankedAndShuffledStorageAccounts(resources);\n const result = new Array<ResourceURI>();\n let index = 0;\n while (result.length < resources.length) {\n const account = rankedAccounts[index % rankedAccounts.length];\n if (account.length > 0) {\n result.push(account.shift() as ResourceURI);\n }\n index++;\n }\n return result;\n }\n\n async refreshAuthorizationContext(): Promise<string> {\n const error = await this.tryRefresh(true);\n\n if (this.authorizationContext == null) {\n throw new Error(`Failed to fetch Authorization context from service. ${error?.message}.\\n ${error?.stack}`);\n }\n\n return this.authorizationContext;\n }\n\n async tryRefresh(isAuthContextFetch: boolean): Promise<Error | null> {\n const resource = isAuthContextFetch ? this.authorizationContext?.trim() : this.ingestClientResources;\n const lastRefresh = isAuthContextFetch ? this.authorizationContextLastUpdate : this.ingestClientResourcesLastUpdate;\n const now = Date.now();\n let error: Error | null = null;\n if (!resource || !lastRefresh || lastRefresh + this.refreshPeriod <= now) {\n try {\n if (isAuthContextFetch) {\n this.authorizationContext = await this.getAuthorizationContextFromService();\n this.authorizationContextLastUpdate = now;\n } else {\n this.ingestClientResources = await this.getIngestClientResourcesFromService();\n this.ingestClientResourcesLastUpdate = now;\n this.pupulateStorageAccounts();\n }\n } catch (e) {\n error = e as Error;\n }\n }\n\n return error;\n }\n\n async getAuthorizationContextFromService() {\n const retry = new ExponentialRetry(ATTEMPT_COUNT, this.baseSleepTimeSecs, this.baseJitterSecs);\n while (retry.shouldTry()) {\n try {\n const response = await this.kustoClient.execute(\"NetDefaultDB\", \".get kusto identity token\");\n const next = response.primaryResults[0].rows().next();\n if (next.done) {\n throw new Error(\"Failed to get authorization context - got empty results\");\n }\n return next.value.toJSON<{ AuthorizationContext: string }>().AuthorizationContext;\n } catch (error: unknown) {\n if (!(error instanceof KustoDataErrors.ThrottlingError)) {\n throw error;\n }\n await retry.backoff();\n }\n }\n throw new Error(`Failed to get identity token from server - the request was throttled ${ATTEMPT_COUNT} times.`);\n }\n\n async getIngestionQueues(): Promise<ResourceURI[] | null> {\n const queues = (await this.refreshIngestClientResources()).securedReadyForAggregationQueues;\n return queues ? this.getRoundRobinRankedAndShuffledResources(queues) : null;\n }\n\n async getFailedIngestionsQueues(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).failedIngestionsQueues;\n }\n\n async getSuccessfulIngestionsQueues(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).successfulIngestionsQueues;\n }\n\n async getContainers(): Promise<ResourceURI[] | null> {\n const containers = (await this.refreshIngestClientResources()).containers;\n return containers ? this.getRoundRobinRankedAndShuffledResources(containers) : null;\n }\n\n async getAuthorizationContext(): Promise<string> {\n return this.refreshAuthorizationContext();\n }\n\n async getStatusTables(): Promise<ResourceURI[] | null> {\n return (await this.refreshIngestClientResources()).statusTables;\n }\n\n async createStatusTable() {\n const statusTables = await this.getStatusTables();\n if (!statusTables) {\n throw new Error(\"Failed to get status table\");\n }\n\n return createStatusTableClient(statusTables![0].uri);\n }\n\n close(): void {\n this.kustoClient.close();\n }\n\n reportResourceUsageResult(accountName: string, success: boolean): void {\n this.rankedStorageAccountSet.logResultToAccount(accountName, success);\n }\n}\n\nexport const createStatusTableClient = (uri: string): TableClient => {\n const tableUrl = new URL(uri);\n const origin = tableUrl.origin;\n const sasToken = tableUrl.search;\n const tableName = tableUrl.pathname.replace(\"/\", \"\");\n return new TableClient(origin + sasToken, tableName);\n};\n\nexport default ResourceManager;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,OAAO,gBAAgB;IAGzB,YAAmB,YAAoB,EAAS,aAAqB,EAAS,aAAqB;QAAhF,iBAAY,GAAZ,YAAY,CAAQ;QAAS,kBAAa,GAAb,aAAa,CAAQ;QAAS,kBAAa,GAAb,aAAa,CAAQ;QAC/F,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SAC3C;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACnB,6CAA6C;YAC7C,OAAO;SACV;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;IACnD,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const sleep = (ms: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport class ExponentialRetry {\n public currentAttempt: number;\n\n constructor(public attemptCount: number, public sleepBaseSecs: number, public maxJitterSecs: number) {\n this.currentAttempt = 0;\n }\n\n public async backoff(): Promise<void> {\n if (!this.shouldTry()) {\n throw new Error(\"Max retries exceeded\");\n }\n\n this.currentAttempt++;\n\n if (!this.shouldTry()) {\n // This was the last retry - no need to sleep\n return;\n }\n\n const base = this.sleepBaseSecs * Math.pow(2, this.currentAttempt - 1);\n const jitter = Math.floor(this.maxJitterSecs * Math.random());\n await sleep(1000 * (base + jitter));\n }\n\n public shouldTry(): boolean {\n return this.currentAttempt < this.attemptCount;\n }\n}\n"]}
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../src/retry.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,EAAU,EAAiB,EAAE;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC;AAEF,MAAM,OAAO,gBAAgB;IAGzB,YACW,YAAoB,EACpB,aAAqB,EACrB,aAAqB;QAFrB,iBAAY,GAAZ,YAAY,CAAQ;QACpB,kBAAa,GAAb,aAAa,CAAQ;QACrB,kBAAa,GAAb,aAAa,CAAQ;QAE5B,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAC5C,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC;QAEtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACpB,6CAA6C;YAC7C,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;QACvE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC;IACxC,CAAC;IAEM,SAAS;QACZ,OAAO,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC;IACnD,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const sleep = (ms: number): Promise<void> => {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n};\n\nexport class ExponentialRetry {\n public currentAttempt: number;\n\n constructor(\n public attemptCount: number,\n public sleepBaseSecs: number,\n public maxJitterSecs: number,\n ) {\n this.currentAttempt = 0;\n }\n\n public async backoff(): Promise<void> {\n if (!this.shouldTry()) {\n throw new Error(\"Max retries exceeded\");\n }\n\n this.currentAttempt++;\n\n if (!this.shouldTry()) {\n // This was the last retry - no need to sleep\n return;\n }\n\n const base = this.sleepBaseSecs * Math.pow(2, this.currentAttempt - 1);\n const jitter = Math.floor(this.maxJitterSecs * Math.random());\n await sleep(1000 * (base + jitter));\n }\n\n public shouldTry(): boolean {\n return this.currentAttempt < this.attemptCount;\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,OAAO,aAAa;IAStB,YAAY,GAAQ,EAAE,GAAQ,EAAE,UAA2B;QACvD,IAAI,KAAK,GAAa,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;QAEzH,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SACpC;QAED,MAAM,IAAI,GAAwB,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACtB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;SAC3B;IACL,CAAC;CACJ;AAED,MAAM,cAAe,SAAQ,aAAa;IAGtC,YAAY,GAAQ,EAAE,GAAQ;QAC1B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACrC,CAAC;CACJ;AAED,MAAM,cAAe,SAAQ,aAAa;IAOtC,YAAY,GAAQ,EAAE,GAAQ;QAC1B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,4BAA4B,EAAE,aAAa,CAAC,CAAC,CAAC;IACxH,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAGhC,YAAY,iBAAoC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxJ,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAC,EAAE,cAAc,CAAC,CAAC;IACxJ,CAAC;CACJ;AAED,eAAe,uBAAuB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { StatusQueue } from \"./statusQ.js\";\nimport KustoIngestClient from \"./ingestClient.js\";\nimport { ResourceURI } from \"./resourceManager.js\";\n\nexport class StatusMessage {\n OperationId?: string;\n Database?: string;\n Table?: string;\n IngestionSourceId?: string;\n IngestionSourcePath?: string;\n RootActivityId?: string;\n\n [other: string]: any;\n constructor(raw: any, obj: any, extraProps: string[] | null) {\n let props: string[] = [\"OperationId\", \"Database\", \"Table\", \"IngestionSourceId\", \"IngestionSourcePath\", \"RootActivityId\"];\n\n if (extraProps && extraProps.length > 0) {\n props = props.concat(extraProps);\n }\n\n const _obj: Record<string, any> = obj || JSON.parse(raw || JSON.stringify(raw));\n\n for (const prop of props) {\n this[prop] = _obj[prop];\n }\n }\n}\n\nclass SuccessMessage extends StatusMessage {\n SucceededOn?: string;\n\n constructor(raw: any, obj: any) {\n super(raw, obj, [\"SucceededOn\"]);\n }\n}\n\nclass FailureMessage extends StatusMessage {\n FailedOn?: string;\n Details?: string;\n ErrorCode?: string;\n FailureStatus?: string;\n OriginatesFromUpdatePolicy?: string;\n ShouldRetry?: string;\n constructor(raw: any, obj: any) {\n super(raw, obj, [\"FailedOn\", \"Details\", \"ErrorCode\", \"FailureStatus\", \"OriginatesFromUpdatePolicy\", \"ShouldRetry\"]);\n }\n}\n\nexport class KustoIngestStatusQueues {\n success: StatusQueue;\n failure: StatusQueue;\n constructor(kustoIngestClient: KustoIngestClient) {\n this.success = new StatusQueue(() => kustoIngestClient.resourceManager.getSuccessfulIngestionsQueues().then((r) => r as ResourceURI[]), SuccessMessage);\n this.failure = new StatusQueue(() => kustoIngestClient.resourceManager.getFailedIngestionsQueues().then((r) => r as ResourceURI[]), FailureMessage);\n }\n}\n\nexport default KustoIngestStatusQueues;\n"]}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAI3C,MAAM,OAAO,aAAa;IAStB,YAAY,GAAQ,EAAE,GAAQ,EAAE,UAA2B;QACvD,IAAI,KAAK,GAAa,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,gBAAgB,CAAC,CAAC;QAEzH,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,CAAC;QAED,MAAM,IAAI,GAAwB,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;CACJ;AAED,MAAM,cAAe,SAAQ,aAAa;IAGtC,YAAY,GAAQ,EAAE,GAAQ;QAC1B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;IACrC,CAAC;CACJ;AAED,MAAM,cAAe,SAAQ,aAAa;IAOtC,YAAY,GAAQ,EAAE,GAAQ;QAC1B,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,4BAA4B,EAAE,aAAa,CAAC,CAAC,CAAC;IACxH,CAAC;CACJ;AAED,MAAM,OAAO,uBAAuB;IAGhC,YAAY,iBAAoC;QAC5C,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,6BAA6B,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAC,EAAE,cAAc,CAAC,CAAC;QACxJ,IAAI,CAAC,OAAO,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAC,EAAE,cAAc,CAAC,CAAC;IACxJ,CAAC;CACJ;AAED,eAAe,uBAAuB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { StatusQueue } from \"./statusQ.js\";\nimport KustoIngestClient from \"./ingestClient.js\";\nimport { ResourceURI } from \"./resourceManager.js\";\n\nexport class StatusMessage {\n OperationId?: string;\n Database?: string;\n Table?: string;\n IngestionSourceId?: string;\n IngestionSourcePath?: string;\n RootActivityId?: string;\n\n [other: string]: any;\n constructor(raw: any, obj: any, extraProps: string[] | null) {\n let props: string[] = [\"OperationId\", \"Database\", \"Table\", \"IngestionSourceId\", \"IngestionSourcePath\", \"RootActivityId\"];\n\n if (extraProps && extraProps.length > 0) {\n props = props.concat(extraProps);\n }\n\n const _obj: Record<string, any> = obj || JSON.parse(raw || JSON.stringify(raw));\n\n for (const prop of props) {\n this[prop] = _obj[prop];\n }\n }\n}\n\nclass SuccessMessage extends StatusMessage {\n SucceededOn?: string;\n\n constructor(raw: any, obj: any) {\n super(raw, obj, [\"SucceededOn\"]);\n }\n}\n\nclass FailureMessage extends StatusMessage {\n FailedOn?: string;\n Details?: string;\n ErrorCode?: string;\n FailureStatus?: string;\n OriginatesFromUpdatePolicy?: string;\n ShouldRetry?: string;\n constructor(raw: any, obj: any) {\n super(raw, obj, [\"FailedOn\", \"Details\", \"ErrorCode\", \"FailureStatus\", \"OriginatesFromUpdatePolicy\", \"ShouldRetry\"]);\n }\n}\n\nexport class KustoIngestStatusQueues {\n success: StatusQueue;\n failure: StatusQueue;\n constructor(kustoIngestClient: KustoIngestClient) {\n this.success = new StatusQueue(() => kustoIngestClient.resourceManager.getSuccessfulIngestionsQueues().then((r) => r as ResourceURI[]), SuccessMessage);\n this.failure = new StatusQueue(() => kustoIngestClient.resourceManager.getFailedIngestionsQueues().then((r) => r as ResourceURI[]), FailureMessage);\n }\n}\n\nexport default KustoIngestStatusQueues;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"statusQ.js","sourceRoot":"","sources":["../../src/statusQ.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { PeekedMessageItem, QueueClient } from \"@azure/storage-queue\";\nimport { ResourceURI } from \"./resourceManager.js\";\nimport { StatusMessage } from \"./status.js\";\n\nclass QueueDetails {\n constructor(readonly name: string, readonly service: QueueClient) {}\n}\n\nconst shuffle = <T>(a: T[]): T[] => {\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const temp = a[j];\n a[j] = a[i];\n a[i] = temp;\n }\n\n return a;\n};\n\ninterface PeekParams {\n raw: boolean;\n}\n\ninterface PopParams {\n raw: boolean;\n remove: boolean;\n}\n\ntype Message = PeekedMessageItem | StatusMessage;\n\nexport class StatusQueue {\n constructor(readonly getQueuesFunc: () => Promise<ResourceURI[]>, readonly messageCls: typeof StatusMessage) {}\n\n _getQServices(queuesDetails: ResourceURI[]) {\n return queuesDetails.map((q) => {\n const fullUri = q.uri;\n if (!fullUri) {\n throw new Error(\"Empty or null connection string\");\n }\n // chop off sas\n const indexOfSas = q.uri.indexOf(\"?\");\n const name = indexOfSas > 0 ? q.uri.substring(0, indexOfSas) : q.uri;\n return new QueueDetails(name, new QueueClient(fullUri));\n });\n }\n\n async isEmpty() {\n const result = await this.peek(1, { raw: true });\n return !result || result.length === 0;\n }\n\n decodeContent(content: string) {\n return Buffer.from(content, \"base64\").toString(\"ascii\");\n }\n\n deserializeMessage(m: PeekedMessageItem): StatusMessage {\n return new this.messageCls(this.decodeContent(m.messageText), null, null);\n }\n\n async _peek(qs: QueueDetails[], n: number, options: PeekParams | null): Promise<{ result: Message[]; nonEmptyQs: QueueDetails[]; done: boolean }> {\n const result: Message[] = [];\n const nonEmptyQs: QueueDetails[] = [];\n\n for (const q of qs) {\n const response = await q.service.peekMessages();\n const messages = response.peekedMessageItems;\n\n if (messages && messages.length > 0) {\n nonEmptyQs.push(q);\n }\n\n for (const m of messages) {\n if (m && Object.keys(m).length > 0) {\n result.push(options && options.raw ? m : this.deserializeMessage(m));\n\n if (result.length === n) {\n return { done: true, nonEmptyQs, result };\n }\n }\n }\n }\n return { done: nonEmptyQs.length === 0, nonEmptyQs, result };\n }\n\n async peek(n = 1, options: PeekParams | null = null): Promise<Message[]> {\n const queues = await this.getQueuesFunc();\n const qServices: QueueDetails[] = shuffle(this._getQServices(queues));\n const perQ = qServices.length > 1 ? Math.floor(n / qServices.length) : qServices.length;\n\n // First, iterate evenly and randomly on status queues\n const partial = await this._peek(qServices, perQ, options);\n\n if (partial.done) {\n return partial.result;\n }\n const messagesLeftToPeek = n - partial.result.length;\n\n // In case queues are uneven, iterate again. This time, request for all n messages and trim\n return (await this._peek(partial.nonEmptyQs, messagesLeftToPeek, options)).result;\n }\n\n async _pop(\n qs: QueueDetails[],\n n: number,\n options: PopParams | null\n ): Promise<{ result: Message[] & { nonEmptyQs?: QueueDetails[] }; nonEmptyQs: any[]; done: boolean }> {\n const nonEmptyQs: any[] = [];\n const result = [];\n\n for (const q of qs) {\n const response = await q.service.receiveMessages({ numOfMessages: n });\n const messages = response.receivedMessageItems;\n for (const m of messages) {\n if (m && Object.keys(m).length > 0) {\n result.push(options && options.raw ? m : this.deserializeMessage(m));\n\n if (!(options && !options.remove)) {\n await q.service.deleteMessage(m.messageId, m.popReceipt);\n }\n if (result.length === n) {\n return { done: true, nonEmptyQs, result };\n }\n }\n }\n }\n\n return { done: nonEmptyQs.length === 0, nonEmptyQs, result };\n }\n\n async pop(n = 1, options: PopParams | null = null): Promise<Message[]> {\n const queues = await this.getQueuesFunc();\n const qServices = shuffle(this._getQServices(queues));\n const perQ = qServices.length > 1 ? Math.floor(n / qServices.length) : qServices.length;\n\n // First, iterate evenly and randomly on status queues\n const partial = await this._pop(qServices, perQ, options);\n if (partial.done) {\n return partial.result;\n }\n\n const messagesLeftToPop = n - partial.result.length;\n\n // In case queues are uneven, iterate again. This time, request for all n messages and trim\n const final = await this._pop(partial.result.nonEmptyQs ?? [], messagesLeftToPop, options);\n return partial.result.concat(final.result);\n }\n}\n"]}
1
+ {"version":3,"file":"statusQ.js","sourceRoot":"","sources":["../../src/statusQ.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { PeekedMessageItem, QueueClient } from \"@azure/storage-queue\";\nimport { ResourceURI } from \"./resourceManager.js\";\nimport { StatusMessage } from \"./status.js\";\n\nclass QueueDetails {\n constructor(\n readonly name: string,\n readonly service: QueueClient,\n ) {}\n}\n\nconst shuffle = <T>(a: T[]): T[] => {\n for (let i = a.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n const temp = a[j];\n a[j] = a[i];\n a[i] = temp;\n }\n\n return a;\n};\n\ninterface PeekParams {\n raw: boolean;\n}\n\ninterface PopParams {\n raw: boolean;\n remove: boolean;\n}\n\ntype Message = PeekedMessageItem | StatusMessage;\n\nexport class StatusQueue {\n constructor(\n readonly getQueuesFunc: () => Promise<ResourceURI[]>,\n readonly messageCls: typeof StatusMessage,\n ) {}\n\n _getQServices(queuesDetails: ResourceURI[]) {\n return queuesDetails.map((q) => {\n const fullUri = q.uri;\n if (!fullUri) {\n throw new Error(\"Empty or null connection string\");\n }\n // chop off sas\n const indexOfSas = q.uri.indexOf(\"?\");\n const name = indexOfSas > 0 ? q.uri.substring(0, indexOfSas) : q.uri;\n return new QueueDetails(name, new QueueClient(fullUri));\n });\n }\n\n async isEmpty() {\n const result = await this.peek(1, { raw: true });\n return !result || result.length === 0;\n }\n\n decodeContent(content: string) {\n return Buffer.from(content, \"base64\").toString(\"ascii\");\n }\n\n deserializeMessage(m: PeekedMessageItem): StatusMessage {\n return new this.messageCls(this.decodeContent(m.messageText), null, null);\n }\n\n async _peek(qs: QueueDetails[], n: number, options: PeekParams | null): Promise<{ result: Message[]; nonEmptyQs: QueueDetails[]; done: boolean }> {\n const result: Message[] = [];\n const nonEmptyQs: QueueDetails[] = [];\n\n for (const q of qs) {\n const response = await q.service.peekMessages();\n const messages = response.peekedMessageItems;\n\n if (messages && messages.length > 0) {\n nonEmptyQs.push(q);\n }\n\n for (const m of messages) {\n if (m && Object.keys(m).length > 0) {\n result.push(options && options.raw ? m : this.deserializeMessage(m));\n\n if (result.length === n) {\n return { done: true, nonEmptyQs, result };\n }\n }\n }\n }\n return { done: nonEmptyQs.length === 0, nonEmptyQs, result };\n }\n\n async peek(n = 1, options: PeekParams | null = null): Promise<Message[]> {\n const queues = await this.getQueuesFunc();\n const qServices: QueueDetails[] = shuffle(this._getQServices(queues));\n const perQ = qServices.length > 1 ? Math.floor(n / qServices.length) : qServices.length;\n\n // First, iterate evenly and randomly on status queues\n const partial = await this._peek(qServices, perQ, options);\n\n if (partial.done) {\n return partial.result;\n }\n const messagesLeftToPeek = n - partial.result.length;\n\n // In case queues are uneven, iterate again. This time, request for all n messages and trim\n return (await this._peek(partial.nonEmptyQs, messagesLeftToPeek, options)).result;\n }\n\n async _pop(\n qs: QueueDetails[],\n n: number,\n options: PopParams | null,\n ): Promise<{ result: Message[] & { nonEmptyQs?: QueueDetails[] }; nonEmptyQs: any[]; done: boolean }> {\n const nonEmptyQs: any[] = [];\n const result = [];\n\n for (const q of qs) {\n const response = await q.service.receiveMessages({ numOfMessages: n });\n const messages = response.receivedMessageItems;\n for (const m of messages) {\n if (m && Object.keys(m).length > 0) {\n result.push(options && options.raw ? m : this.deserializeMessage(m));\n\n if (!(options && !options.remove)) {\n await q.service.deleteMessage(m.messageId, m.popReceipt);\n }\n if (result.length === n) {\n return { done: true, nonEmptyQs, result };\n }\n }\n }\n }\n\n return { done: nonEmptyQs.length === 0, nonEmptyQs, result };\n }\n\n async pop(n = 1, options: PopParams | null = null): Promise<Message[]> {\n const queues = await this.getQueuesFunc();\n const qServices = shuffle(this._getQServices(queues));\n const perQ = qServices.length > 1 ? Math.floor(n / qServices.length) : qServices.length;\n\n // First, iterate evenly and randomly on status queues\n const partial = await this._pop(qServices, perQ, options);\n if (partial.done) {\n return partial.result;\n }\n\n const messagesLeftToPop = n - partial.result.length;\n\n // In case queues are uneven, iterate again. This time, request for all n messages and trim\n const final = await this._pop(partial.result.nonEmptyQs ?? [], messagesLeftToPop, options);\n return partial.result.concat(final.result);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"streamUtils.js","sourceRoot":"","sources":["../../src/streamUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport fs from \"fs\";\nimport { PassThrough, Readable } from \"stream\";\nimport streamify from \"stream-array\";\nimport { CompressionType, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\n\n// Returns fs.ReadStream for node and NodeJS.ReadableStream in browser\nexport const fileToStream = (fileDescriptor: FileDescriptor): Promise<StreamDescriptor> => {\n const streamFs = fs.createReadStream(fileDescriptor.file as string);\n const compressionType = fileDescriptor.zipped ? CompressionType.GZIP : CompressionType.None;\n return Promise.resolve(new StreamDescriptor(streamFs, fileDescriptor.sourceId, compressionType));\n};\n\n// Used in managed streaming where we buffer the file to memory for retries\nexport const tryFileToBuffer = async (fileDescriptor: FileDescriptor): Promise<StreamDescriptor> => {\n try {\n const buffer = fs.readFileSync(fileDescriptor.file as string);\n const compressionType = fileDescriptor.zipped ? CompressionType.GZIP : CompressionType.None;\n return new StreamDescriptor(buffer, fileDescriptor.sourceId, compressionType);\n } catch (error) {\n return await fileToStream(fileDescriptor);\n }\n};\n\nconst mergeStreams = (...streams: Readable[]): Readable => {\n let pass = new PassThrough();\n let waiting = streams.length;\n for (const stream of streams) {\n pass = stream.pipe(pass, { end: false });\n stream.once(\"end\", () => --waiting === 0 && pass.emit(\"end\"));\n }\n return pass;\n};\n\nexport const tryStreamToArray = async (stream: Readable, maxBufferSize: number): Promise<Buffer | Readable> => {\n if (stream instanceof Buffer) {\n return stream;\n }\n return await new Promise<Buffer | Readable>((resolve, reject) => {\n const result: Buffer[] = [];\n const endListener = () => resolve(Buffer.concat(result));\n const dataHandler = (chunk: Buffer) => {\n try {\n result.push(chunk);\n if (result.reduce((sum, b) => sum + b.length, 0) > maxBufferSize) {\n stream.removeListener(\"data\", dataHandler);\n stream.removeListener(\"end\", endListener);\n resolve(mergeStreams(streamify(result), stream));\n }\n } catch (e) {\n reject(e);\n }\n };\n stream.on(\"data\", dataHandler);\n stream.on(\"end\", endListener);\n });\n};\n\nexport const readableToStream = (stream: Readable | ArrayBuffer): Readable => {\n return streamify([stream]);\n};\n"]}
1
+ {"version":3,"file":"streamUtils.js","sourceRoot":"","sources":["../../src/streamUtils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport fs from \"fs\";\nimport { PassThrough, Readable } from \"stream\";\nimport streamify from \"stream-array\";\nimport { CompressionType, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\n\n// Returns fs.ReadStream for node and NodeJS.ReadableStream in browser\nexport const fileToStream = (fileDescriptor: FileDescriptor): Promise<StreamDescriptor> => {\n const streamFs = fs.createReadStream(fileDescriptor.file as string);\n const compressionType = fileDescriptor.zipped ? CompressionType.GZIP : CompressionType.None;\n return Promise.resolve(new StreamDescriptor(streamFs, fileDescriptor.sourceId, compressionType));\n};\n\n// Used in managed streaming where we buffer the file to memory for retries\nexport const tryFileToBuffer = async (fileDescriptor: FileDescriptor): Promise<StreamDescriptor> => {\n try {\n const buffer = fs.readFileSync(fileDescriptor.file as string);\n const compressionType = fileDescriptor.zipped ? CompressionType.GZIP : CompressionType.None;\n return new StreamDescriptor(buffer, fileDescriptor.sourceId, compressionType);\n } catch (error) {\n return await fileToStream(fileDescriptor);\n }\n};\n\nconst mergeStreams = (...streams: Readable[]): Readable => {\n let pass = new PassThrough();\n let waiting = streams.length;\n for (const stream of streams) {\n pass = stream.pipe(pass, { end: false });\n stream.once(\"end\", () => --waiting === 0 && pass.emit(\"end\"));\n }\n return pass;\n};\n\nexport const tryStreamToArray = async (stream: Readable, maxBufferSize: number): Promise<Buffer | Readable> => {\n if (stream instanceof Buffer) {\n return stream;\n }\n return await new Promise<Buffer | Readable>((resolve, reject) => {\n const result: Buffer[] = [];\n const endListener = () => resolve(Buffer.concat(result));\n const dataHandler = (chunk: Buffer) => {\n try {\n result.push(chunk);\n if (result.reduce((sum, b) => sum + b.length, 0) > maxBufferSize) {\n stream.removeListener(\"data\", dataHandler);\n stream.removeListener(\"end\", endListener);\n resolve(mergeStreams(streamify(result), stream));\n }\n } catch (e) {\n reject(e);\n }\n };\n stream.on(\"data\", dataHandler);\n stream.on(\"end\", endListener);\n });\n};\n\nexport const readableToStream = (stream: Readable | ArrayBuffer): Readable => {\n return streamify([stream]);\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"streamingIngestClient.browser.js","sourceRoot":"","sources":["../../src/streamingIngestClient.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,0BAA2B,SAAQ,8BAA8B;IACnE,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAsC,EAAE,mBAA8C,EAAE,eAAwB;;QACnI,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,UAAU,CAAC,MAAM,EACjB,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,eAAe,CAClB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAA2B,EAAE,mBAA8C;QAC5F,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,UAAU,GAAmB,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACzF,CAAC;CACJ;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.browser.js\";\nimport { tryFileToBuffer } from \"./streamUtils.browser.js\";\nimport { KustoStreamingIngestClientBase } from \"./streamingIngestClientBase.js\";\n\nclass KustoStreamingIngestClient extends KustoStreamingIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(stream: StreamDescriptor | ArrayBuffer, ingestionProperties?: IngestionPropertiesInput, clientRequestId?: string): Promise<any> {\n this.ensureOpen();\n\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n descriptor.stream,\n props.format,\n props.ingestionMappingReference ?? null,\n clientRequestId\n );\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n\n const descriptor: FileDescriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n return this.ingestFromStream(await tryFileToBuffer(descriptor), ingestionProperties);\n }\n}\n\nexport default KustoStreamingIngestClient;\n"]}
1
+ {"version":3,"file":"streamingIngestClient.browser.js","sourceRoot":"","sources":["../../src/streamingIngestClient.browser.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAKlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,0BAA2B,SAAQ,8BAA8B;IACnE,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,MAAsC,EAAE,mBAA8C,EAAE,eAAwB;;QACnI,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAChH,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,UAAU,CAAC,MAAM,EACjB,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,eAAe,CAClB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAA2B,EAAE,mBAA8C;QAC5F,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,UAAU,GAAmB,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,eAAe,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACzF,CAAC;CACJ;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.browser.js\";\nimport { tryFileToBuffer } from \"./streamUtils.browser.js\";\nimport { KustoStreamingIngestClientBase } from \"./streamingIngestClientBase.js\";\n\nclass KustoStreamingIngestClient extends KustoStreamingIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(stream: StreamDescriptor | ArrayBuffer, ingestionProperties?: IngestionPropertiesInput, clientRequestId?: string): Promise<any> {\n this.ensureOpen();\n\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n descriptor.stream,\n props.format,\n props.ingestionMappingReference ?? null,\n clientRequestId,\n );\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n\n const descriptor: FileDescriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n return this.ingestFromStream(await tryFileToBuffer(descriptor), ingestionProperties);\n }\n}\n\nexport default KustoStreamingIngestClient;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"streamingIngestClient.js","sourceRoot":"","sources":["../../src/streamingIngestClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAMlC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,0BAA2B,SAAQ,8BAA8B;IACnE,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAClB,MAAiD,EACjD,mBAA8C,EAC9C,eAAwB;;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEhH,MAAM,gBAAgB,GAClB,UAAU,CAAC,eAAe,KAAK,eAAe,CAAC,IAAI;YAC/C,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,CAAC;gBACzC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,CAAC,CAAC,UAAU,CAAC,MAAM;YACvB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,gBAAgB,EAChB,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,eAAe,CAClB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAoC,EAAE,mBAA8C;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,UAAU,GAAmB,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACtF,CAAC;CACJ;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { Readable } from \"stream\";\nimport zlib from \"zlib\";\nimport { CompressionType, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\nimport { fileToStream } from \"./streamUtils.js\";\nimport { KustoStreamingIngestClientBase } from \"./streamingIngestClientBase.js\";\n\nclass KustoStreamingIngestClient extends KustoStreamingIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(\n stream: StreamDescriptor | Readable | ArrayBuffer,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string\n ): Promise<any> {\n this.ensureOpen();\n\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n\n const compressedStream =\n descriptor.compressionType === CompressionType.None\n ? !(descriptor.stream instanceof ArrayBuffer)\n ? descriptor.stream.pipe(zlib.createGzip())\n : descriptor.stream\n : descriptor.stream;\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n compressedStream,\n props.format,\n props.ingestionMappingReference ?? null,\n clientRequestId\n );\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | string | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n\n const descriptor: FileDescriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n return this.ingestFromStream(await fileToStream(descriptor), ingestionProperties);\n }\n}\n\nexport default KustoStreamingIngestClient;\n"]}
1
+ {"version":3,"file":"streamingIngestClient.js","sourceRoot":"","sources":["../../src/streamingIngestClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAMlC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAEhF,MAAM,0BAA2B,SAAQ,8BAA8B;IACnE,YAAY,IAA2C,EAAE,YAAuC,EAAE,mBAA6B;QAC3H,KAAK,CAAC,IAAI,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAClB,MAAiD,EACjD,mBAA8C,EAC9C,eAAwB;;QAExB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAqB,MAAM,YAAY,gBAAgB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAEhH,MAAM,gBAAgB,GAClB,UAAU,CAAC,eAAe,KAAK,eAAe,CAAC,IAAI;YAC/C,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,YAAY,WAAW,CAAC;gBACzC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;gBAC3C,CAAC,CAAC,UAAU,CAAC,MAAM;YACvB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC;QAC5B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,gBAAgB,EAChB,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,eAAe,CAClB,CAAC;IACN,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,IAAoC,EAAE,mBAA8C;QACrG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,UAAU,GAAmB,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpG,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,YAAY,CAAC,UAAU,CAAC,EAAE,mBAAmB,CAAC,CAAC;IACtF,CAAC;CACJ;AAED,eAAe,0BAA0B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { KustoConnectionStringBuilder, KustoResponseDataSet } from \"azure-kusto-data\";\nimport { Readable } from \"stream\";\nimport zlib from \"zlib\";\nimport { CompressionType, StreamDescriptor } from \"./descriptors.js\";\nimport { FileDescriptor } from \"./fileDescriptor.js\";\nimport { fileToStream } from \"./streamUtils.js\";\nimport { KustoStreamingIngestClientBase } from \"./streamingIngestClientBase.js\";\n\nclass KustoStreamingIngestClient extends KustoStreamingIngestClientBase {\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint?: boolean) {\n super(kcsb, defaultProps, autoCorrectEndpoint);\n }\n\n /**\n * Use Readable for Node.js and ArrayBuffer in browser\n */\n async ingestFromStream(\n stream: StreamDescriptor | Readable | ArrayBuffer,\n ingestionProperties?: IngestionPropertiesInput,\n clientRequestId?: string,\n ): Promise<any> {\n this.ensureOpen();\n\n const props = this._getMergedProps(ingestionProperties);\n const descriptor: StreamDescriptor = stream instanceof StreamDescriptor ? stream : new StreamDescriptor(stream);\n\n const compressedStream =\n descriptor.compressionType === CompressionType.None\n ? !(descriptor.stream instanceof ArrayBuffer)\n ? descriptor.stream.pipe(zlib.createGzip())\n : descriptor.stream\n : descriptor.stream;\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n compressedStream,\n props.format,\n props.ingestionMappingReference ?? null,\n clientRequestId,\n );\n }\n\n /**\n * Use string for Node.js and Blob in browser\n */\n async ingestFromFile(file: FileDescriptor | string | Blob, ingestionProperties?: IngestionPropertiesInput): Promise<KustoResponseDataSet> {\n this.ensureOpen();\n\n const descriptor: FileDescriptor = file instanceof FileDescriptor ? file : new FileDescriptor(file);\n return this.ingestFromStream(await fileToStream(descriptor), ingestionProperties);\n }\n}\n\nexport default KustoStreamingIngestClient;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"streamingIngestClientBase.js","sourceRoot":"","sources":["../../src/streamingIngestClientBase.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEvF,MAAM,OAAgB,8BAA+B,SAAQ,mBAAmB;IAE5E,YAAY,IAA2C,EAAE,YAAuC,EAAE,sBAA+B,IAAI;QACjI,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,IAAI,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;SACjD;QACD,IAAI,mBAAmB,EAAE;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAC5D;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAA6B,EAAE,mBAA8C,EAAE,eAAwB;;QACxH,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpF,uEAAuE;QACvE,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAE5B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,SAAS,EACT,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,UAAU,CAAC,IAAI,EACf,eAAe,CAClB,CAAC;IACN,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;YACjB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;SAC5B;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { BlobDescriptor } from \"./descriptors.js\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport { Client as KustoClient, KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nexport abstract class KustoStreamingIngestClientBase extends AbstractKustoClient {\n protected kustoClient: KustoClient;\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint: boolean = true) {\n super(defaultProps);\n if (typeof kcsb === \"string\") {\n kcsb = new KustoConnectionStringBuilder(kcsb);\n }\n if (autoCorrectEndpoint) {\n kcsb.dataSource = this.getQueryEndpoint(kcsb.dataSource);\n }\n this.kustoClient = new KustoClient(kcsb);\n this.defaultDatabase = this.kustoClient.defaultDatabase;\n }\n\n async ingestFromBlob(blob: string | BlobDescriptor, ingestionProperties?: IngestionPropertiesInput, clientRequestId?: string): Promise<any> {\n const props = this._getMergedProps(ingestionProperties);\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n // No need to check blob size if it was given to us that it's not empty\n await descriptor.fillSize();\n\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n undefined,\n props.format,\n props.ingestionMappingReference ?? null,\n descriptor.path,\n clientRequestId\n );\n }\n\n close() {\n if (!this._isClosed) {\n this.kustoClient.close();\n }\n super.close();\n }\n}\n"]}
1
+ {"version":3,"file":"streamingIngestClientBase.js","sourceRoot":"","sources":["../../src/streamingIngestClientBase.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,4BAA4B,EAAE,MAAM,kBAAkB,CAAC;AAEvF,MAAM,OAAgB,8BAA+B,SAAQ,mBAAmB;IAE5E,YAAY,IAA2C,EAAE,YAAuC,EAAE,sBAA+B,IAAI;QACjI,KAAK,CAAC,YAAY,CAAC,CAAC;QACpB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,IAAI,GAAG,IAAI,4BAA4B,CAAC,IAAI,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,mBAAmB,EAAE,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAA6B,EAAE,mBAA8C,EAAE,eAAwB;;QACxH,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QACxD,MAAM,UAAU,GAAG,IAAI,YAAY,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC;QACpF,uEAAuE;QACvE,MAAM,UAAU,CAAC,QAAQ,EAAE,CAAC;QAE5B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAChD,KAAK,CAAC,QAAkB,EACxB,KAAK,CAAC,KAAe,EACrB,SAAS,EACT,KAAK,CAAC,MAAM,EACZ,MAAA,KAAK,CAAC,yBAAyB,mCAAI,IAAI,EACvC,UAAU,CAAC,IAAI,EACf,eAAe,CAClB,CAAC;IACN,CAAC;IAED,KAAK;QACD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAClB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;CACJ","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { IngestionPropertiesInput } from \"./ingestionProperties.js\";\n\nimport { BlobDescriptor } from \"./descriptors.js\";\nimport { AbstractKustoClient } from \"./abstractKustoClient.js\";\nimport { Client as KustoClient, KustoConnectionStringBuilder } from \"azure-kusto-data\";\n\nexport abstract class KustoStreamingIngestClientBase extends AbstractKustoClient {\n protected kustoClient: KustoClient;\n constructor(kcsb: string | KustoConnectionStringBuilder, defaultProps?: IngestionPropertiesInput, autoCorrectEndpoint: boolean = true) {\n super(defaultProps);\n if (typeof kcsb === \"string\") {\n kcsb = new KustoConnectionStringBuilder(kcsb);\n }\n if (autoCorrectEndpoint) {\n kcsb.dataSource = this.getQueryEndpoint(kcsb.dataSource);\n }\n this.kustoClient = new KustoClient(kcsb);\n this.defaultDatabase = this.kustoClient.defaultDatabase;\n }\n\n async ingestFromBlob(blob: string | BlobDescriptor, ingestionProperties?: IngestionPropertiesInput, clientRequestId?: string): Promise<any> {\n const props = this._getMergedProps(ingestionProperties);\n const descriptor = blob instanceof BlobDescriptor ? blob : new BlobDescriptor(blob);\n // No need to check blob size if it was given to us that it's not empty\n await descriptor.fillSize();\n\n return await this.kustoClient.executeStreamingIngest(\n props.database as string,\n props.table as string,\n undefined,\n props.format,\n props.ingestionMappingReference ?? null,\n descriptor.path,\n clientRequestId,\n );\n }\n\n close() {\n if (!this._isClosed) {\n this.kustoClient.close();\n }\n super.close();\n }\n}\n"]}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "azure-kusto-ingest",
3
- "version": "7.0.0-alpha.0",
3
+ "version": "7.0.0-alpha.2",
4
4
  "description": "Azure Data Explorer Ingestion SDK",
5
5
  "type": "module",
6
+ "main": "dist-esm/src/index.js",
6
7
  "exports": {
7
8
  ".": {
8
9
  "import": "./dist-esm/src/index.js",
9
- "types": "./types/src/index.d.ts"
10
+ "types": "./types/src/index.d.ts",
11
+ "default": "./dist-esm/src/index.js"
10
12
  }
11
13
  },
12
14
  "scripts": {
@@ -68,7 +70,7 @@
68
70
  "@types/tmp": "^0.2.3",
69
71
  "@types/uuid": "^8.3.4",
70
72
  "@types/uuid-validate": "0.0.1",
71
- "azure-kusto-data": "^7.0.0-alpha.0",
73
+ "azure-kusto-data": "^7.0.0-alpha.2",
72
74
  "browserify-zlib": "0.2.0",
73
75
  "buffer": "^6.0.3",
74
76
  "is-ip": "^3.1.0",
@@ -83,5 +85,5 @@
83
85
  "@types/sinon": "^10.0.13",
84
86
  "assert": "^2.0.0"
85
87
  },
86
- "gitHead": "e09b5fe882833ca9890bbd332e80206701c28f85"
88
+ "gitHead": "f43595ebf3fa6f6237c607c1a9df09f17f34f991"
87
89
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Readable } from "stream";
3
2
  import IngestionProperties from "./ingestionProperties.js";
4
3
  export declare enum CompressionType {
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { KustoConnectionStringBuilder } from "azure-kusto-data";
3
2
  import { StreamDescriptor } from "./descriptors.js";
4
3
  import { FileDescriptor } from "./fileDescriptor.js";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { IngestionPropertiesInput } from "./ingestionProperties.js";
3
2
  import { KustoConnectionStringBuilder, KustoResponseDataSet } from "azure-kusto-data";
4
3
  import { Readable } from "stream";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { StreamDescriptor } from "./descriptors.js";
3
2
  import { FileDescriptor } from "./fileDescriptor.browser.js";
4
3
  export declare const fileToStream: (file: FileDescriptor) => Promise<StreamDescriptor>;
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Readable } from "stream";
3
2
  import { StreamDescriptor } from "./descriptors.js";
4
3
  import { FileDescriptor } from "./fileDescriptor.js";
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { IngestionPropertiesInput } from "./ingestionProperties.js";
3
2
  import { KustoConnectionStringBuilder, KustoResponseDataSet } from "azure-kusto-data";
4
3
  import { Readable } from "stream";