in packages/embed/src/index.js [42:100]
export function findService(servicingPlan, bot, requestedVersion = 'default') {
const traversedVersions = [];
const logs = [];
let publicOnly = true;
const { versions } = servicingPlan;
if (!versions['default']) {
throw new Error(`There is no default version specified in the servicing plan.`);
}
for (let hop = MAX_VERSION_REDIRECTIONS; hop >= 0; hop--) {
let service = versions[requestedVersion];
traversedVersions.push(requestedVersion);
if (!service || (publicOnly && service.private)) {
warn(`There is no version "${requestedVersion}" or it is marked as private; falling back to "default".`);
requestedVersion = 'default';
publicOnly = true;
continue;
}
const { redirects } = service || {};
if (redirects) {
logs.push(`Executing redirection rules of version "${requestedVersion}".`);
const actualVersion = execRedirectRules(bot, redirects, requestedVersion) || {};
if (actualVersion) {
requestedVersion = actualVersion;
publicOnly = false;
} else {
warn(`Version "${requestedVersion}" did not have a fallback plan; falling back to default version.`);
requestedVersion = 'default';
publicOnly = true;
}
continue;
}
log(
[
'Selecting version ',
traversedVersions
.map(version => (typeof version === 'undefined' ? '<undefined>' : `"${version}"`))
.join(' -> '),
'.'
].join('')
);
return service;
}
throw new Error(`Maximum version redirections exceeded. This is probably problem with our servicing plan.`);
}