eas-cli
Version:
EAS command line tool
84 lines (83 loc) • 3.25 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeDataScrubber = exports.subscribeTelemetry = void 0;
const apple_utils_1 = require("@expo/apple-utils");
const uuid_1 = require("uuid");
/**
* Subscribe the telemetry to the ongoing metadata requests and responses.
* When providing the app and auth info, we can scrub that data from the telemetry.
* Returns an execution ID to group all events of a single run together, and a unsubscribe function.
*/
function subscribeTelemetry(analytics, event, options) {
const executionId = (0, uuid_1.v4)();
const scrubber = makeDataScrubber(options);
const { interceptors } = (0, apple_utils_1.getRequestClient)();
const responseInterceptorId = interceptors.response.use(response => {
analytics.logEvent(event, {
executionId,
type: 'response',
phase: 'resolved',
method: response.request.method.toUpperCase(),
url: scrubber(response.request.path),
status: String(response.status),
statusText: scrubber(response.statusText),
});
return response;
}, (error) => {
analytics.logEvent(event, {
executionId,
type: 'response',
phase: 'rejected',
method: error.request.method.toUpperCase(),
url: scrubber(error.config?.url),
error: scrubber(error.message),
status: String(error.response?.status),
statusText: scrubber(error.response?.statusText),
input: scrubber(error.config?.data),
output: scrubber(error.response?.data),
});
throw error;
});
function unsubscribeTelemetry() {
interceptors.response.eject(responseInterceptorId);
}
return { unsubscribeTelemetry, executionId };
}
exports.subscribeTelemetry = subscribeTelemetry;
/** Exposed for testing */
function makeDataScrubber({ app, auth }) {
const token = getAuthTokenString(auth);
const patterns = {
APPLE_APP_ID: new RegExp(app.id, 'gi'),
APPLE_USERNAME: auth.username ? new RegExp(auth.username, 'gi') : null,
APPLE_PASSWORD: auth.password ? new RegExp(auth.password, 'gi') : null,
APPLE_TOKEN: token ? new RegExp(token, 'gi') : null,
APPLE_TEAM_ID: auth.context?.teamId ? new RegExp(auth.context.teamId, 'gi') : null,
APPLE_PROVIDER_ID: auth.context?.providerId
? new RegExp(String(auth.context.providerId), 'gi')
: null,
};
const iterator = Object.entries(patterns);
return function scrubber(data) {
if (!data) {
return String(data);
}
let value = typeof data === 'object' ? JSON.stringify(data) : String(data);
for (const [replacement, pattern] of iterator) {
if (pattern) {
value = value.replace(pattern, `{${replacement}}`);
}
}
return value;
};
}
exports.makeDataScrubber = makeDataScrubber;
function getAuthTokenString(auth) {
if (!auth.context?.token) {
return null;
}
if (typeof auth.context.token === 'object') {
return auth.context.token.getToken();
}
return auth.context.token;
}
;