trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
442 lines • 109 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import { ServiceResponse } from './response';
import { Service } from './service';
export const DefaultPSetServiceUri = 'https://pset-api.connect.trimble.com/v1/';
const PsetServiceUriMap = new Map([
['us-east-1', 'https://pset-api.us-east-1.connect.trimble.com/v1/'],
['ap-southeast-1', 'https://pset-api.ap-southeast-1.connect.trimble.com/v1/'],
['ap-southeast-2', 'https://pset-api.ap-southeast-2.connect.trimble.com/v1/'],
['eu-west-1', 'https://pset-api.eu-west-1.connect.trimble.com/v1/'],
['eu-west-2', 'https://pset-api.eu-west-2.connect.trimble.com/v1/'],
]);
function getDefaultConfiguration() {
return {
region: 'eu-west-1',
serviceUri: DefaultPSetServiceUri,
};
}
export class PSet extends Service {
constructor(config) {
const sanitizedConfig = Object.assign({}, config);
if (sanitizedConfig &&
sanitizedConfig.region &&
sanitizedConfig.serviceUri === undefined) {
if (PsetServiceUriMap.has(sanitizedConfig.region)) {
sanitizedConfig.serviceUri = PsetServiceUriMap.get(sanitizedConfig.region);
}
else {
throw new Error(`Unknown region: ${sanitizedConfig.region}, allowed values ${Array.from(PsetServiceUriMap.keys()).join(', ')}`);
}
}
super(Object.assign(Object.assign({}, getDefaultConfiguration()), sanitizedConfig));
}
getUserInfo(params) {
return __awaiter(this, void 0, void 0, function* () {
let url = 'me';
if (params) {
const query = [];
if (params.wait) {
query.push('wait');
}
if (params.refresh) {
query.push('refresh');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
createLibrary(request) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'libs';
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateLibrary(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteLibrary(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
getLibraryPolicy(libId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url);
});
}
putLibraryPolicy(libId, policy) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/policy`;
return this.makeRequest(url, 'PUT', JSON.stringify(policy));
});
}
listDefinitions(libId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.prefix) {
query.push(`prefix=${encodeURIComponent(params.prefix)}`);
}
if (params.type) {
query.push(`type=${encodeURIComponent(params.type)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listDefinitionVersions(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getDefinitionVersion(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getDefinitionVersionBySchema(libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/schema/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSetDefinitions(libId, ids, params) {
var _a, _b;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const defs = new Set();
ids.items.forEach((def) => {
defs.add({ libId, defId: def.id, v: def.v, schemaV: def.schemaV });
});
requestBatchGet.defs = Array.from(defs);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.defs });
if (responseBatchGet.data.errors.defs) {
const errors = new Set();
(_a = responseBatchGet.data.errors.defs) === null || _a === void 0 ? void 0 : _a.forEach((def) => {
errors.add({
item: {
id: def.item.defId,
v: def.item.v,
schemaV: def.item.schemaV,
},
code: def.code,
message: def.message,
});
});
response.data.errors = Array.from(errors);
}
if (responseBatchGet.data.unprocessed.defs) {
const unprocessed = new Set();
(_b = responseBatchGet.data.unprocessed.defs) === null || _b === void 0 ? void 0 : _b.forEach((def) => {
unprocessed.add({ id: def.defId, v: def.v, schemaV: def.schemaV });
});
response.data.unprocessed = Array.from(unprocessed);
}
return response;
});
}
createDefinition(libId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs`;
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updateDefinition(libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deleteDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({
'If-Match': `W/"${encodeURIComponent(params.v.toString())}"`,
});
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
validate(libId, defId, request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/validate`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
validateNextPage(prev, request) {
return __awaiter(this, void 0, void 0, function* () {
if (prev && prev.next) {
return this.makeRequest(prev.next, 'POST', JSON.stringify(request));
}
else {
throw new Error('There is no next page.');
}
});
}
listPSets(link, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetsByDefinition(libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `libs/${encodeURIComponent(libId)}/defs/${encodeURIComponent(defId)}/psets`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (params.link) {
query.push(`link=${encodeURIComponent(params.link)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
listPSetVersions(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (params.top) {
query.push(`top=${encodeURIComponent(params.top.toString())}`);
}
if (params.skiptoken) {
query.push(`skiptoken=${encodeURIComponent(params.skiptoken)}`);
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url);
});
}
getPSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}${params && params.deleted ? '?deleted' : ''}`;
return this.makeRequest(url);
});
}
getPSetVersion(link, libId, defId, ver) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}/versions/${encodeURIComponent(ver.toString())}`;
return this.makeRequest(url);
});
}
getPSets(keys, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
keys.items.forEach((pset) => {
psets.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add({
libId: pset.libId,
defId: pset.defId,
v: pset.v,
link: pset.link,
});
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
getPSetsByDefinition(libId, defId, links, params) {
var _a;
return __awaiter(this, void 0, void 0, function* () {
const requestBatchGet = {};
const paramsBatchGet = { deleted: params === null || params === void 0 ? void 0 : params.deleted };
const psets = new Set();
links.items.forEach((link) => {
psets.add({ libId, defId, link });
});
requestBatchGet.psets = Array.from(psets);
const responseBatchGet = yield this.batchGet(requestBatchGet, paramsBatchGet);
const response = new ServiceResponse(this, responseBatchGet.response, { items: responseBatchGet.data.responses.psets || [] });
if (responseBatchGet.data.unprocessed.psets) {
const unprocessed = new Set();
(_a = responseBatchGet.data.unprocessed.psets) === null || _a === void 0 ? void 0 : _a.forEach((pset) => {
unprocessed.add(pset.link);
});
response.data.unhandled = Array.from(unprocessed);
}
return response;
});
}
batchGet(request, params) {
return __awaiter(this, void 0, void 0, function* () {
let url = `batch-get`;
if (params) {
const query = [];
if (params.deleted) {
query.push('deleted');
}
if (query.length > 0) {
url += `?${query.join('&')}`;
}
}
return this.makeRequest(url, 'POST', JSON.stringify(request));
});
}
updatePSet(link, libId, defId, request) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
return this.makeRequest(url, 'PATCH', JSON.stringify(request));
});
}
deletePSet(link, libId, defId, params) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/${encodeURIComponent(link)}/${encodeURIComponent(libId)}/${encodeURIComponent(defId)}`;
let headers;
if (params && params.v !== undefined) {
headers = new Headers({ 'If-Match': `W/"${params.v}"` });
}
return this.makeRequest(url, 'DELETE', undefined, headers);
});
}
changeset(changeset) {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset';
return this.makeRequest(url, 'POST', JSON.stringify(changeset));
});
}
changesetAsync() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'psets/changeset-async';
return this.makeRequest(url, 'POST');
});
}
changesetStatus(changesetId) {
return __awaiter(this, void 0, void 0, function* () {
const url = `psets/changeset/${encodeURIComponent(changesetId)}`;
return this.makeRequest(url);
});
}
subscribeWS() {
return __awaiter(this, void 0, void 0, function* () {
const url = 'subscribe';
return this.makeRequest(url, 'GET');
});
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicHNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsMENBQTBDLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDaEQsQ0FBQyxXQUFXLEVBQUUsb0RBQW9ELENBQUM7SUFDbkUsQ0FBQyxnQkFBZ0IsRUFBRSx5REFBeUQsQ0FBQztJQUM3RSxDQUFDLGdCQUFnQixFQUFFLHlEQUF5RCxDQUFDO0lBQzdFLENBQUMsV0FBVyxFQUFFLG9EQUFvRCxDQUFDO0lBQ25FLENBQUMsV0FBVyxFQUFFLG9EQUFvRCxDQUFDO0NBQ3BFLENBQUMsQ0FBQztBQUdILFNBQVMsdUJBQXVCO0lBQzlCLE9BQU87UUFDTCxNQUFNLEVBQUUsV0FBVztRQUNuQixVQUFVLEVBQUUscUJBQXFCO0tBQ2xDLENBQUM7QUFDSixDQUFDO0FBNmpCRCxNQUFNLE9BQU8sSUFBSyxTQUFRLE9BQU87SUFNL0IsWUFBWSxNQUErQjtRQUN6QyxNQUFNLGVBQWUscUJBQWdDLE1BQU0sQ0FBRSxDQUFDO1FBRTlELElBQ0UsZUFBZTtZQUNmLGVBQWUsQ0FBQyxNQUFNO1lBQ3RCLGVBQWUsQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUN4QztZQUNBLElBQUksaUJBQWlCLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDakQsZUFBZSxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQyxHQUFHLENBQ2hELGVBQWUsQ0FBQyxNQUFNLENBQ3ZCLENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLElBQUksS0FBSyxDQUNiLG1CQUNFLGVBQWUsQ0FBQyxNQUNsQixvQkFB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QUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQzFEO1lBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFlLEdBQUcsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLENBQUM7S0FBQTtJQVFZLFNBQVMsQ0FDcEIsU0FBK0I7O1lBSS9CLE1BQU0sR0FBRyxHQUFHLGlCQUFpQixDQUFDO1lBRTlCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FDckIsR0FBRyxFQUNILE1BQU0sRUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUMxQixDQUFDO1FBQ0osQ0FBQztLQUFBO0lBT1ksY0FBYzs7WUFHekIsTUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUM7WUFFcEMsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUE2QixHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUFBO0lBUVksZUFBZSxDQUMxQixXQUFtQjs7WUFFbkIsTUFBTSxHQUFHLEdBQUcsbUJBQW1CLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFFakUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUF3QixHQUFHLENBQUMsQ0FBQztRQUN0RCxDQUFDO0tBQUE7SUFPWSxXQUFXOztZQUN0QixNQUFNLEdBQUcsR0FBRyxXQUFXLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUF5QixHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEZWxldGVPcHRpb25zLFxuICBHZXRPcHRpb25zLFxuICBMaXN0T3B0aW9ucyxcbiAgUGFnZWRJdGVtcyxcbiAgUmVzb3VyY2VJZGVudGl0eVdpdGhFcnJvcixcbiAgVXNlckluZm9HZXRPcHRpb25zLFxuICBVc2VySW5mb1Jlc3BvbnNlLFxuICBXU1N1YnNjcmlwdGlvblJlc3BvbnNlLFxufSBmcm9tICcuL2NvbW1vbic7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgUG9saWN5IH0gZnJvbSAnLi9wb2xpY3knO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5pbXBvcnQgeyBTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlJztcblxuLy8gLS0tLS0tLS0tLS0tLS0tIGNvbmZpZ3VyYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbmV4cG9ydCBjb25zdCBEZWZhdWx0UFNldFNlcnZpY2VVcmkgPSAnaHR0cHM6Ly9wc2V0LWFwaS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyc7XG5cbmNvbnN0IFBzZXRTZXJ2aWNlVXJpTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oW1xuICBbJ3VzLWVhc3QtMScsICdodHRwczovL3BzZXQtYXBpLnVzLWVhc3QtMS5jb25uZWN0LnRyaW1ibGUuY29tL3YxLyddLFxuICBbJ2FwLXNvdXRoZWFzdC0xJywgJ2h0dHBzOi8vcHNldC1hcGkuYXAtc291dGhlYXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydhcC1zb3V0aGVhc3QtMicsICdodHRwczovL3BzZXQtYXBpLmFwLXNvdXRoZWFzdC0yLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnZXUtd2VzdC0xJywgJ2h0dHBzOi8vcHNldC1hcGkuZXUtd2VzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnZXUtd2VzdC0yJywgJ2h0dHBzOi8vcHNldC1hcGkuZXUtd2VzdC0yLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTogQ29uZmlndXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiAnZXUtd2VzdC0xJyxcbiAgICBzZXJ2aWNlVXJpOiBEZWZhdWx0UFNldFNlcnZpY2VVcmksXG4gIH07XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCNjcmVhdGVMaWJyYXJ5IG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVMaWJyYXJ5UmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyBsaWJyYXJ5LCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBhY2Nlc3MgY29udHJvbCBwb2xpY3kgZG9jdW1lbnQgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGxpYnJhcnkuICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBvcHRpb25hbCBsaWJyYXJ5IG5hbWUuICovXG4gIG5hbWU/OiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBAc2VlIFBTZXQjZ2V0TGlicmFyeSBvcGVyYXRpb24uXG4gKi9cbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1lbXB0eS1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgR2V0TGlicmFyeU9wdGlvbnMgZXh0ZW5kcyBHZXRPcHRpb25zIHt9XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgUFNldCNnZXREZWZpbml0aW9uIG9wZXJhdGlvbi5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBHZXREZWZpbml0aW9uT3B0aW9ucyBleHRlbmRzIEdldE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I3VwZGF0ZUxpYnJhcnkgb3BlcmF0aW9uLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBpcyBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZUxpYnJhcnlSZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJyZW5jeSBjb250cm9sIGFuZCB3aWxsIHJlZnVzZSB0byBhcHBseSBjaGFuZ2VzIGlmIGN1cnJlbnQgdmVyc2lvbiBpcyBub3QgZXF1YWwgdG8gdmVyc2lvbiBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdC5cbiAgICovXG4gIHY/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBUaGUgYWNjZXNzIGNvbnRyb2wgcG9saWN5IGRvY3VtZW50IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBsaWJyYXJ5LlxuICAgKiBJZiBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQgY2FsbGVyIG11c3QgaGF2ZSBvcmc6VXBkYXRlTGlicmFyeVBvbGljeSByaWdodCB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uIGluIGFkZGl0aW9uIHRvIG9yZzpVcGRhdGVMaWJyYXJ5LlxuICAgKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG5ldyBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG5ldyBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgUFNldCNjcmVhdGVMaWJyYXJ5ICwgQHNlZSBQU2V0I3VwZGF0ZUxpYnJhcnkgLCBAc2VlIFBTZXQjZGVsZXRlTGlicmFyeSBhbmQgQHNlZSBQU2V0I2dldExpYnJhcnkgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5UmVzcG9uc2Uge1xuICAvKiogVGhlIHVuaXF1ZSBsaWJyYXJ5IGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgdHJlZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lwYWwgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIHRyZWUgZGVzY3JpcHRvci4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnRyb2wgcG9saWN5IGRvY3VtZW50IGF0dGFjaGVkIHRvIHRoZSBsaWJyYXJ5LiBUaGlzIHByb3BlcnR5IGlzIHJldHVybmVkIG9ubHkgaWYgY2FsbGVyIGhhcyBwc2V0OkdldExpYnJhcnlQb2xpY3kgcmlnaHQuICovXG4gIHBvbGljeT86IFBvbGljeTtcbiAgLyoqIFRoZSBkZWxldGlvbiBtYXJrZXIuIElmIG5vdCBwcmVzZW50IG9yIGZhbHNlIHRoZSB0cmVlIGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIHRoZSB0cmVlIGlzIG1hcmtlZCBhcyBkZWxldGVkLiAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBsaWJyYXJ5IG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBhY3Rpb25zIGN1cnJlbnQgdXNlciBoYXMgcmlnaHRzIHRvIHBlcmZvcm0gb24gdGhpcyByZXNvdXJjZSBhdCB0aGUgbW9tZW50IHRoZSByZXNwb25zZSBpcyBnZW5lcmF0ZWQgYnkgc2VydmljZS4gTm90IHJldHVybmVkIHdoZW4gc3BlY2lmaWMgdmVyc2lvbiBpcyByZXF1ZXN0ZWQuICovXG4gIF9hY3Rpb25zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCNjcmVhdGVEZWZpbml0aW9uIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVEZWZpbml0aW9uUmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyBwc2V0IGRlZmluaXRpb24sIGlmIG5vdCBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgZ2VuZXJhdGUgYW4gdW5pcXVlIGlkZW50aWZpZXIuICovXG4gIGlkPzogc3RyaW5nO1xuICAvKiogVGhlIHBzZXQgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBjb2xsZWN0aW9uIG9mIHJlc291cmNlIHR5cGVzIHRoZSBwc2V0IGFwcGxpY2FibGUgdG8uICovXG4gIHR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgcHNldCBzY2hlbWEuICovXG4gIHNjaGVtYTogb2JqZWN0O1xuICAvKiogVGhlIGludGVybmF0aW9uYWxpemF0aW9uIHBhcnQgd2l0aCB0cmFuc2xhdGlvbiB0YWJsZXMuICovXG4gIGkxOG4/OiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCN1cGRhdGVEZWZpbml0aW9uIG9wZXJhdGlvbi5cbiAqIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgaWYgcHJvcGVydHkgbm90IHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IHRoZSBwcm9wZXJ0eSB3aWxsIHJldGFpbiBpdCdzIG9sZCB2YWx1ZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcGRhdGVEZWZpbml0aW9uUmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgbGFzdCBzZWVuIHZlcnNpb24gb2YgdGhlIHRyZWUgZGVzY3JpcHRvci5cbiAgICogSWYgcHJvdmlkZWQgc2VydmljZSB3aWxsIHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvciB0aGUgY29uY3VycmVuY3kgY29udHJvbCBhbmQgd2lsbCByZWZ1c2UgdG8gYXBwbHkgY2hhbmdlcyBpZiBjdXJyZW50IHZlcnNpb24gaXMgbm90IGVxdWFsIHRvIHZlcnNpb24gcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqL1xuICB2PzogbnVtYmVyO1xuICAvKiogVGhlIG5ldyBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG5ldyBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgbmV3IGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgdHlwZXMgdGhlIHBzZXQgYXBwbGljYWJsZSB0by4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBuZXcgcHNldCBzY2hlbWEuICovXG4gIHNjaGVtYT86IG9iamVjdDtcbiAgLyoqIFRoZSBpbnRlcm5hdGlvbmFsaXphdGlvbiBwYXJ0IHdpdGggdHJhbnNsYXRpb24gdGFibGVzLiAqL1xuICBpMThuPzogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSBwc2V0IGRlZmluaXRpb24gZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgUFNldCNjcmVhdGVEZWZpbml0aW9uLCBAc2VlIFBTZXQjdXBkYXRlRGVmaW5pdGlvbiwgQHNlZSBQU2V0I2RlbGV0ZU5vZGUsIEBzZWUgUFNldCNnZXREZWZpbml0aW9uIGFuZCBAc2VlIE9yZ2FuaXplciNnZXREZWZpbml0aW9uVmVyc2lvbiBvcGVyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluaXRpb25SZXNwb25zZSB7XG4gIC8qKiBUaGUgbGlicmFyeSBpZGVudGlmaWVyLiAqL1xuICBsaWJJZDogc3RyaW5nO1xuICAvKiogVGhlIGRlZmluaXRpb24gaWRlbnRpZmllci4gVW5pcXVlIGluc2lkZSB0aGUgbGlicmFyeS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRoZSBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIC8qKiBUaGUgaWRlbnRpZmllciBvZiB0aGUgcHJpbmNpcGFsIHdobyBjcmVhdGVkIHRoZSBub2RlLiAqL1xuICBjcmVhdGVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSBsYXN0IG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAgaW4gSVNPIGZvcm1hdC4gKi9cbiAgbW9kaWZpZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gbGFzdCBtb2RpZmllZCB0aGUgbm9kZS4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIHZlcnNpb24gbnVtYmVyLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgZGVsZXRpb24gbWFya2VyLiBJZiBub3QgcHJlc2VudCBvciBmYWxzZSB0aGUgbm9kZSBpcyBhY3RpdmUsIG90aGVyd2lzZSB0aGUgbm9kZSBpcyBtYXJrZWQgYXMgZGVsZXRlZC4gKi9cbiAgZGVsZXRlZD86IGJvb2xlYW47XG4gIC8qKiBUaGUgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIHJlc291cmNlIHR5cGVzIHRoZSBwc2V0IGFwcGxpY2FibGUgdG8uIElmIG5vdCBwcmVzZW50IHBzZXQgY2FuIGJlIGF0dGFjaGVkIHRvIGFsbCByZXNvdXJjZSB0eXBlcy4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBwc2V0IHNjaGVtYS4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG4gIC8qKiBUaGUgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFydCB3aXRoIHRyYW5zbGF0aW9uIHRhYmxlcy4gKi9cbiAgaTE4bjogb2JqZWN0O1xuICAvKiogVGhlIGNvbGxlY3Rpb24gb2YgYWN0aW9ucyBjdXJyZW50IHVzZXIgaGFzIHJpZ2h0cyB0byBwZXJmb3JtIG9uIHRoaXMgcmVzb3VyY2UgYXQgdGhlIG1vbWVudCB0aGUgcmVzcG9uc2UgaXMgZ2VuZXJhdGVkIGJ5IHNlcnZpY2UuIE5vdCByZXR1cm5lZCB3aGVuIHNwZWNpZmljIHZlcnNpb24gaXMgcmVxdWVzdGVkLiAqL1xuICBfYWN0aW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9wdGlvbnMgdG8gdmFsaWRhdGUgcHNldHMgYWdhaW5zdCBhIG5ldyBzY2hlbWEuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpZiBkZWZpbmVkIGFuZCB0cnVlIGluZm9ybXMgc2VydmVyIHRoYXQgZW50aXRpZXMgbWFya2VkIGFzIGRlbGV0ZWQgc2hvdWxkIGJlIHJldHVybmVkIGFzIHdlbGwuXG4gICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHNraXAvaGlkZSBlbnRpdGllcyBtYXJrZWQgYXMgZGVsZXRlZC5cbiAgICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIHNraXAgdG9rZW4gdXNlZCBhIGFzIGN1cnNvciB0byBpbmRpY2F0ZSB0aGUgcGxhY2Ugd2hlcmUgbmV4dCBwYWdlIG9mIHJlc3VsdHMgc2hvdWxkIGZldGNoZWQgZnJvbS4gKi9cbiAgc2tpcHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdmFsaWRhdGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVxdWVzdCB7XG4gIC8qKiBUaGUgc2NoZW1hIHRvIHZhbGlkYXRlIGV4aXN0aW5nIGRhdGEgYWdhaW5zdC4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG59XG5cbi8qKlxuICogVGhlIHJlc3BvbnNlIGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdmFsaWRhdGUgb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlUmVzcG9uc2Uge1xuICAvKiogVGhlIG51bWJlciBvZiB2YWxpZCBwc2V0cy4gKi9cbiAgdmFsaWRJdGVtc0NvdW50OiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIG5vdCB2YWxpZCBwc2V0cy4gKi9cbiAgaW52YWxpZEl0ZW1zQ291bnQ6IG51bWJlcjtcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGVycm9yIG1lc3NhZ2VzIGZvciBmb3VuZCBpbnZhbGlkIHBzZXRzLiBPbmx5IGZpcnN0IDEwMCB1bmlxdWUgZXJyb3IgbWVzc2FnZXMgYXJlIHJldHVybmVkLiAqL1xuICBlcnJvcnM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBsaW5rIHRvIHRoZSBuZXh0IHBhZ2UuIElmIG5vdCBwcmVzZW