trimble-connect-sdk
Version:
Trimble Connect SDK for JavaScript
440 lines • 108 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/'],
['eu-west-1', 'https://pset-api.eu-west-1.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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHNldC5qcyIsInNvdXJjZVJvb3QiOiIuLyIsInNvdXJjZXMiOlsicHNldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFZQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFJcEMsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsMENBQTBDLENBQUM7QUFFaEYsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsQ0FBaUI7SUFDaEQsQ0FBQyxXQUFXLEVBQUUsb0RBQW9ELENBQUM7SUFDbkUsQ0FBQyxnQkFBZ0IsRUFBRSx5REFBeUQsQ0FBQztJQUM3RSxDQUFDLFdBQVcsRUFBRSxvREFBb0QsQ0FBQztDQUNwRSxDQUFDLENBQUM7QUFHSCxTQUFTLHVCQUF1QjtJQUM5QixPQUFPO1FBQ0wsTUFBTSxFQUFFLFdBQVc7UUFDbkIsVUFBVSxFQUFFLHFCQUFxQjtLQUNsQyxDQUFDO0FBQ0osQ0FBQztBQTZqQkQsTUFBTSxPQUFPLElBQUssU0FBUSxPQUFPO0lBTS9CLFlBQVksTUFBK0I7UUFDekMsTUFBTSxlQUFlLHFCQUFnQyxNQUFNLENBQUUsQ0FBQztRQUU5RCxJQUNFLGVBQWU7WUFDZixlQUFlLENBQUMsTUFBTTtZQUN0QixlQUFlLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFDeEM7WUFDQSxJQUFJLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ2pELGVBQWUsQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUMsR0FBRyxDQUNoRCxlQUFlLENBQUMsTUFBTSxDQUN2QixDQUFDO2FBQ0g7aUJBQU07Z0JBQ0wsTUFBTSxJQUFJLEtBQUssQ0FDYixtQkFDRSxlQUFlLENBQUMsTUFDbEIsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFB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ZSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMzRSxDQUFDO0tBQUE7SUFRWSxTQUFTLENBQ3BCLFNBQStCOztZQUkvQixNQUFNLEdBQUcsR0FBRyxpQkFBaUIsQ0FBQztZQUU5QixPQUFPLElBQUksQ0FBQyxXQUFXLENBQ3JCLEdBQUcsRUFDSCxNQUFNLEVBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FDMUIsQ0FBQztRQUNKLENBQUM7S0FBQTtJQU9ZLGNBQWM7O1lBR3pCLE1BQU0sR0FBRyxHQUFHLHVCQUF1QixDQUFDO1lBRXBDLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBNkIsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLENBQUM7S0FBQTtJQVFZLGVBQWUsQ0FDMUIsV0FBbUI7O1lBRW5CLE1BQU0sR0FBRyxHQUFHLG1CQUFtQixrQkFBa0IsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDO1lBRWpFLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBd0IsR0FBRyxDQUFDLENBQUM7UUFDdEQsQ0FBQztLQUFBO0lBT1ksV0FBVzs7WUFDdEIsTUFBTSxHQUFHLEdBQUcsV0FBVyxDQUFDO1lBQ3hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBeUIsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzlELENBQUM7S0FBQTtDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGVsZXRlT3B0aW9ucyxcbiAgR2V0T3B0aW9ucyxcbiAgTGlzdE9wdGlvbnMsXG4gIFBhZ2VkSXRlbXMsXG4gIFJlc291cmNlSWRlbnRpdHlXaXRoRXJyb3IsXG4gIFVzZXJJbmZvR2V0T3B0aW9ucyxcbiAgVXNlckluZm9SZXNwb25zZSxcbiAgV1NTdWJzY3JpcHRpb25SZXNwb25zZSxcbn0gZnJvbSAnLi9jb21tb24nO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IFBvbGljeSB9IGZyb20gJy4vcG9saWN5JztcbmltcG9ydCB7IFNlcnZpY2VSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgU2VydmljZSB9IGZyb20gJy4vc2VydmljZSc7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLSBjb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdFBTZXRTZXJ2aWNlVXJpID0gJ2h0dHBzOi8vcHNldC1hcGkuY29ubmVjdC50cmltYmxlLmNvbS92MS8nO1xuXG5jb25zdCBQc2V0U2VydmljZVVyaU1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KFtcbiAgWyd1cy1lYXN0LTEnLCAnaHR0cHM6Ly9wc2V0LWFwaS51cy1lYXN0LTEuY29ubmVjdC50cmltYmxlLmNvbS92MS8nXSxcbiAgWydhcC1zb3V0aGVhc3QtMScsICdodHRwczovL3BzZXQtYXBpLmFwLXNvdXRoZWFzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG4gIFsnZXUtd2VzdC0xJywgJ2h0dHBzOi8vcHNldC1hcGkuZXUtd2VzdC0xLmNvbm5lY3QudHJpbWJsZS5jb20vdjEvJ10sXG5dKTtcblxuLyoqIEBpbnRlcm5hbCAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb24oKTogQ29uZmlndXJhdGlvbiB7XG4gIHJldHVybiB7XG4gICAgcmVnaW9uOiAnZXUtd2VzdC0xJyxcbiAgICBzZXJ2aWNlVXJpOiBEZWZhdWx0UFNldFNlcnZpY2VVcmksXG4gIH07XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgYm9keSBmb3IgdGhlIEBzZWUgUFNldCNjcmVhdGVMaWJyYXJ5IG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVMaWJyYXJ5UmVxdWVzdCB7XG4gIC8qKiBUaGUgb3B0aW9uYWwgaWRlbnRpZmllciBmb3IgdGhlIG5ldyBsaWJyYXJ5LCBpZiBub3QgcHJvdmlkZWQgc2VydmljZSB3aWxsIGdlbmVyYXRlIGFuIHVuaXF1ZSBpZGVudGlmaWVyLiAqL1xuICBpZD86IHN0cmluZztcbiAgLyoqIFRoZSBhY2Nlc3MgY29ucm9sIHBvbGljeSBkb2N1bWVudCB0byBiZSBhdHRhY2hlZCB0byB0aGUgbGlicmFyeS4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG9wdGlvbmFsIGxpYnJhcnkgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgdGhlIEBzZWUgUFNldCNnZXRMaWJyYXJ5IG9wZXJhdGlvbi5cbiAqL1xuLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5LWludGVyZmFjZVxuZXhwb3J0IGludGVyZmFjZSBHZXRMaWJyYXJ5T3B0aW9ucyBleHRlbmRzIEdldE9wdGlvbnMge31cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgQHNlZSBQU2V0I2dldERlZmluaXRpb24gb3BlcmF0aW9uLlxuICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHktaW50ZXJmYWNlXG5leHBvcnQgaW50ZXJmYWNlIEdldERlZmluaXRpb25PcHRpb25zIGV4dGVuZHMgR2V0T3B0aW9ucyB7fVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IGJvZHkgZm9yIHRoZSBAc2VlIFBTZXQjdXBkYXRlTGlicmFyeSBvcGVyYXRpb24uXG4gKiBBbGwgcHJvcGVydGllcyBhcmUgb3B0aW9uYWwsIGlmIHByb3BlcnR5IGlzIG5vdCBwcm92aWRlZCBpbiB0aGUgcmVxdWVzdCB0aGUgcHJvcGVydHkgd2lsbCByZXRhaW4gaXQncyBvbGQgdmFsdWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTGlicmFyeVJlcXVlc3Qge1xuICAvKipcbiAgICogVGhlIGxhc3Qgc2VlbiB2ZXJzaW9uIG9mIHRoZSB0cmVlIGRlc2NyaXB0b3IuXG4gICAqIElmIHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCB1c2UgdGhpcyBpbmZvcm1hdGlvbiBmb3IgdGhlIGNvbmN1cmVuY3kgY29udHJvbCBhbmQgd2lsbCByZWZ1c2UgdG8gYXBwbHkgY2hhbmdlcyBpZiBjdXJyZW50IHZlcnNpb24gaXMgbm90IGVxdWFsIHRvIHZlcnNpb24gcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QuXG4gICAqL1xuICB2PzogbnVtYmVyO1xuICAvKipcbiAgICogVGhlIGFjY2VzcyBjb25yb2wgcG9saWN5IGRvY3VtZW50IHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBsaWJyYXJ5LlxuICAgKiBJZiBwcm9wZXJ0eSBpcyBzcGVjaWZpZWQgY2FsbGVyIG11c3QgaGF2ZSBvcmc6VXBkYXRlTGlicmFyeVBvbGljeSByaWdodCB0byBleGVjdXRlIHRoaXMgb3BlcmF0aW9uIGluIGFkZGl0aW9uIHRvIG9yZzpVcGRhdGVMaWJyYXJ5LlxuICAgKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIG5ldyBuYW1lLiAqL1xuICBuYW1lPzogc3RyaW5nO1xuICAvKiogVGhlIG5ldyBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHRyZWUgZGVzY3JpcHRvciByZXR1cm5lZCBmcm9tIEBzZWUgUFNldCNjcmVhdGVMaWJyYXJ5ICwgQHNlZSBQU2V0I3VwZGF0ZUxpYnJhcnkgLCBAc2VlIFBTZXQjZGVsZXRlTGlicmFyeSBhbmQgQHNlZSBQU2V0I2dldExpYnJhcnkgb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWJyYXJ5UmVzcG9uc2Uge1xuICAvKiogVGhlIHVuaXF1ZSBsaWJyYXJ5IGlkZW50aWZpZXIuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgdHJlZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lsYXQgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIHRyZWUgZGVzY3JpcHRvci4gKi9cbiAgbW9kaWZpZWRCeTogc3RyaW5nO1xuICAvKiogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLiAqL1xuICB2OiBudW1iZXI7XG4gIC8qKiBUaGUgYWNjZXNzIGNvbnJvbCBwb2xpY3kgZG9jdW1lbnQgYXR0YWNoZWQgdG8gdGhlIGxpYnJhcnkuIFRoaXMgcHJvcGVydHkgaXMgcmV0dXJuZWQgb25seSBpZiBjYWxsZXIgaGFzIHBzZXQ6R2V0TGlicmFyeVBvbGljeSByaWdodC4gKi9cbiAgcG9saWN5PzogUG9saWN5O1xuICAvKiogVGhlIGRlbGV0aW9uIG1hcmtlci4gSWYgbm90IHByZXNlbnQgb3IgZmFsc2UgdGhlIHRyZWUgaXMgYWN0aXZlLCBvdGhlcndpc2UgdGhlIHRyZWUgaXMgbWFya2VkIGFzIGRlbGV0ZWQuICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIGxpYnJhcnkgbmFtZS4gKi9cbiAgbmFtZTogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGRlc2NyaXB0aW9uLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I2NyZWF0ZURlZmluaXRpb24gb3BlcmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZURlZmluaXRpb25SZXF1ZXN0IHtcbiAgLyoqIFRoZSBvcHRpb25hbCBpZGVudGlmaWVyIGZvciB0aGUgbmV3IHBzZXQgZGVmaW5pdGlvbiwgaWYgbm90IHByb3ZpZGVkIHNlcnZpY2Ugd2lsbCBnZW5lcmF0ZSBhbiB1bmlxdWUgaWRlbnRpZmllci4gKi9cbiAgaWQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgcHNldCBuYW1lLiAqL1xuICBuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgb3B0aW9uYWwgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIG9wdGlvbmFsIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2UgdHlwZXMgdGhlIHBzZXQgYXBwbGljYWJsZSB0by4gKi9cbiAgdHlwZXM/OiBzdHJpbmdbXTtcbiAgLyoqIFRoZSBwc2V0IHNjaGVtYS4gKi9cbiAgc2NoZW1hOiBvYmplY3Q7XG4gIC8qKiBUaGUgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFydCB3aXRoIHRyYW5zbGF0aW9uIHRhYmxlcy4gKi9cbiAgaTE4bj86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I3VwZGF0ZURlZmluaXRpb24gb3BlcmF0aW9uLlxuICogQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBpZiBwcm9wZXJ0eSBub3QgcHJvdmlkZWQgaW4gdGhlIHJlcXVlc3QgdGhlIHByb3BlcnR5IHdpbGwgcmV0YWluIGl0J3Mgb2xkIHZhbHVlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZURlZmluaXRpb25SZXF1ZXN0IHtcbiAgLyoqXG4gICAqIFRoZSBsYXN0IHNlZW4gdmVyc2lvbiBvZiB0aGUgdHJlZSBkZXNjcmlwdG9yLlxuICAgKiBJZiBwcm92aWRlZCBzZXJ2aWNlIHdpbGwgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yIHRoZSBjb25jdXJlbmN5IGNvbnRyb2wgYW5kIHdpbGwgcmVmdXNlIHRvIGFwcGx5IGNoYW5nZXMgaWYgY3VycmVudCB2ZXJzaW9uIGlzIG5vdCBlcXVhbCB0byB2ZXJzaW9uIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0LlxuICAgKi9cbiAgdj86IG51bWJlcjtcbiAgLyoqIFRoZSBuZXcgbmFtZS4gKi9cbiAgbmFtZT86IHN0cmluZztcbiAgLyoqIFRoZSBuZXcgZGVzY3JpcHRpb24uICovXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAvKiogVGhlIG5ldyBjb2xsZWN0aW9uIG9mIHJlc291cmNlIHR5cGVzIHRoZSBwc2V0IGFwcGxpY2FibGUgdG8uICovXG4gIHR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbmV3IHBzZXQgc2NoZW1hLiAqL1xuICBzY2hlbWE/OiBvYmplY3Q7XG4gIC8qKiBUaGUgaW50ZXJuYXRpb25hbGl6YXRpb24gcGFydCB3aXRoIHRyYW5zbGF0aW9uIHRhYmxlcy4gKi9cbiAgaTE4bj86IG9iamVjdDtcbn1cblxuLyoqXG4gKiBUaGUgcHNldCBkZWZpbml0aW9uIGRlc2NyaXB0b3IgcmV0dXJuZWQgZnJvbSBAc2VlIFBTZXQjY3JlYXRlRGVmaW5pdGlvbiwgQHNlZSBQU2V0I3VwZGF0ZURlZmluaXRpb24sIEBzZWUgUFNldCNkZWxldGVOb2RlLCBAc2VlIFBTZXQjZ2V0RGVmaW5pdGlvbiBhbmQgQHNlZSBPcmdhbmlzZXIjZ2V0RGVmaW5pdGlvblZlcnNpb24gb3BlcmF0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZWZpbml0aW9uUmVzcG9uc2Uge1xuICAvKiogVGhlIGxpYnJhcnkgaWRlbnRpZmllci4gKi9cbiAgbGliSWQ6IHN0cmluZztcbiAgLyoqIFRoZSBkZWZpbml0aW9uIGlkZW50aWZpZXIuIFVuaXF1ZSBpbnNpZGUgdGhlIGxpYnJhcnkuICovXG4gIGlkOiBzdHJpbmc7XG4gIC8qKiBUaGUgY3JlYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICAvKiogVGhlIGlkZW50aWZpZXIgb2YgdGhlIHByaW5jaXBhbCB3aG8gY3JlYXRlZCB0aGUgbm9kZS4gKi9cbiAgY3JlYXRlZEJ5OiBzdHJpbmc7XG4gIC8qKiBUaGUgbGFzdCBtb2RpZmljYXRpb24gdGltZXN0YW1wIGluIElTTyBmb3JtYXQuICovXG4gIG1vZGlmaWVkQXQ6IHN0cmluZztcbiAgLyoqIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcmluY2lsYXQgd2hvIGxhc3QgbW9kaWZpZWQgdGhlIG5vZGUuICovXG4gIG1vZGlmaWVkQnk6IHN0cmluZztcbiAgLyoqIFRoZSB2ZXJzaW9uIG51bWJlci4gKi9cbiAgdjogbnVtYmVyO1xuICAvKiogVGhlIGRlbGV0aW9uIG1hcmtlci4gSWYgbm90IHByZXNlbnQgb3IgZmFsc2UgdGhlIG5vZGUgaXMgYWN0aXZlLCBvdGhlcndpc2UgdGhlIG5vZGUgaXMgbWFya2VkIGFzIGRlbGV0ZWQuICovXG4gIGRlbGV0ZWQ/OiBib29sZWFuO1xuICAvKiogVGhlIG5hbWUuICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqIFRoZSBvcHRpb25hbCBkZXNjcmlwdGlvbi4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiByZXNvdXJjZSB0eXBlcyB0aGUgcHNldCBhcHBsaWNhYmxlIHRvLiBJZiBub3QgcHJlc2VudCBwc2V0IGNhbiBiZSBhdHRhY2hlZCB0byBhbGwgcmVzb3VyY2UgdHlwZXMuICovXG4gIHR5cGVzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgcHNldCBzY2hlbWEuICovXG4gIHNjaGVtYTogb2JqZWN0O1xuICAvKiogVGhlIGludGVybmF0aW9uYWxpemF0aW9uIHBhcnQgd2l0aCB0cmFuc2xhdGlvbiB0YWJsZXMuICovXG4gIGkxOG46IG9iamVjdDtcbiAgLyoqIFRoZSBjb2xsZWN0aW9uIG9mIGFjdGlvbnMgY3VycmVudCB1c2VyIGhhcyByaWdodHMgdG8gcGVyZm9ybSBvbiB0aGlzIHJlc291cmNlIGF0IHRoZSBtb21lbnQgdGhlIHJlc3BvbnNlIGlzIGdlbmVyYXRlZCBieSBzZXJ2aWNlLiBOb3QgcmV0dXJuZWQgd2hlbiBzcGVjaWZpYyB2ZXJzaW9uIGlzIHJlcXVlc3RlZC4gKi9cbiAgX2FjdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBvcHRpb25zIHRvIHZhbGlkYXRlIHBzZXRzIGFnYWluc3QgYSBuZXcgc2NoZW1hLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgaWYgZGVmaW5lZCBhbmQgdHJ1ZSBpbmZvcm1zIHNlcnZlciB0aGF0IGVudGl0aWVzIG1hcmtlZCBhcyBkZWxldGVkIHNob3VsZCBiZSByZXR1cm5lZCBhcyB3ZWxsLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyB0byBza2lwL2hpZGUgZW50aXRpZWQgbWFya2VkIGFzIGRlbGV0ZWQuXG4gICAqL1xuICBkZWxldGVkPzogYm9vbGVhbjtcbiAgLyoqIFRoZSBza2lwIHRva2VuIHVzZWQgYSBhcyBjdXJzb3IgdG8gaW5kaWNhdGUgdGhlIHBsYWNlIHdoZXJlIG5leHQgcGFnZSBvZiByZXN1bHRzIHNob3VsZCBmZXRjaGVkIGZyb20uICovXG4gIHNraXB0b2tlbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcmVxdWVzdCBib2R5IGZvciB0aGUgQHNlZSBQU2V0I3ZhbGlkYXRlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVJlcXVlc3Qge1xuICAvKiogVGhlIHNjaGVtYSB0byB2YWxpZGF0ZSBleGlzdGluZyBkYXRhIGFnYWluc3QuICovXG4gIHNjaGVtYTogb2JqZWN0O1xufVxuXG4vKipcbiAqIFRoZSByZXNwb25zZSBib2R5IGZvciB0aGUgQHNlZSBQU2V0I3ZhbGlkYXRlIG9wZXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0ZVJlc3BvbnNlIHtcbiAgLyoqIFRoZSBudW1iZXIgb2YgdmFsaWQgcHNldHMuICovXG4gIHZhbGlkSXRlbXNDb3VudDogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBub3QgdmFsaWQgcHNldHMuICovXG4gIGludmFsaWRJdGVtc0NvdW50OiBudW1iZXI7XG4gIC8qKiBUaGUgY29sbGVjdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBmb3IgZm91bmQgaW52YWxpZCBwc2V0cy4gT25seSBmaXJzdCAxMDAgdW5pcXVlIGVycm9yIG1lc3NhZ2VzIGFyZSByZXR1cm5lZC4gKi9cbiAgZXJyb3JzPzogc3RyaW5nW107XG4gIC8qKiBUaGUgbGluayB0byB0aGUgbmV4dCBwYWdlLiBJZiBub3QgcHJlc2VudCwgdGhpcyBpcyB0aGUgbGFzdCBwYWdlLiAqL1xuICBuZXh0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBkZS1zZXJpYWxpemVkIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgcmVxdWVzdCB3aXRoIGxpc3Qgb2YgcHNldCBkZWZpbml0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaXN0RGVmaW5pdGlvbnNSZXNwb25zZVxuICBleHRlbmRzIFBhZ2VkSXRlbXM8RGVmaW5pdGlvblJlc3BvbnNlPiB7fVxuXG4vKipcbiAqIFRoZSBkZS1zZXJpYWxpemVkIGRhdGEgcmV0dXJuZWQgZnJvbSB0aGUgcmVxdWVzdCB3aXRoIGxpc3Qgb2YgZGVmaW5pdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTG