@sussudio/platform
Version:
Internal APIs for VS Code's service injection the base services.
41 lines (40 loc) • 1.68 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import * as https from 'https';
import { AbstractOneDataSystemAppender } from '../common/1dsAppender.mjs';
export class OneDataSystemAppender extends AbstractOneDataSystemAppender {
constructor(isInternalTelemetry, eventPrefix, defaultData, iKeyOrClientFactory) {
// Override the way events get sent since node doesn't have XHTMLRequest
const customHttpXHROverride = {
sendPOST: (payload, oncomplete) => {
const options = {
method: 'POST',
headers: {
...payload.headers,
'Content-Type': 'application/json',
'Content-Length': Buffer.byteLength(payload.data),
},
};
try {
const req = https.request(payload.urlString, options, (res) => {
res.on('data', function (responseData) {
oncomplete(res.statusCode ?? 200, res.headers, responseData.toString());
});
// On response with error send status of 0 and a blank response to oncomplete so we can retry events
res.on('error', function (err) {
oncomplete(0, {});
});
});
req.write(payload.data);
req.end();
} catch {
// If it errors out, send status of 0 and a blank response to oncomplete so we can retry events
oncomplete(0, {});
}
},
};
super(isInternalTelemetry, eventPrefix, defaultData, iKeyOrClientFactory, customHttpXHROverride);
}
}