175 lines
26 KiB
Plaintext
175 lines
26 KiB
Plaintext
import { usePostAuthRedirect } from "/_nuxt/lib/auth/composables/postAuthRedirect.ts";
|
|
import { deserializeHashState, serializeHashState } from "/_nuxt/lib/common/composables/url.ts";
|
|
|
|
import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
|
|
import { useSafeLogger } from "/_nuxt/composables/logging.ts";
|
|
export const profileRoute = "/profile";
|
|
export const authBlockedDueToVerificationRoute = "/error-email-verify";
|
|
export const homeRoute = "/";
|
|
export const projectsRoute = "/projects";
|
|
export const loginRoute = "/authn/login";
|
|
export const registerRoute = "/authn/register";
|
|
export const ssoLoginRoute = "/authn/sso";
|
|
export const forgottenPasswordRoute = "/authn/forgotten-password";
|
|
export const verifyEmailRoute = "/verify-email";
|
|
export const verifyEmailCountdownRoute = "/verify-email?source=registration";
|
|
export const serverManagementRoute = "/server-management";
|
|
export const accLoginRoute = "/authn/acc";
|
|
export const accRoute = "/acc";
|
|
export const connectorsRoute = "/connectors";
|
|
export const tutorialsRoute = "/tutorials";
|
|
export const docsPageUrl = "https://docs.speckle.systems/";
|
|
export const forumPageUrl = "https://speckle.community/";
|
|
export const guideBillingUrl = "https://docs.speckle.systems/workspaces/billing";
|
|
export const onboardingRoute = "/onboarding";
|
|
export const viewerDocsRoute = "https://docs.speckle.systems/3d-viewer/interface-nav";
|
|
export const settingsUserRoutes = {
|
|
profile: "/settings/user/profile",
|
|
notifications: "/settings/user/notifications",
|
|
developerSettings: "/settings/user/developer",
|
|
emails: "/settings/user/emails"
|
|
};
|
|
export const settingsServerRoutes = {
|
|
general: "/settings/server/general",
|
|
projects: "/settings/server/projects",
|
|
members: "/settings/server/members",
|
|
regions: "/settings/server/regions"
|
|
};
|
|
export const settingsWorkspaceRoutes = {
|
|
general: {
|
|
name: "settings-workspaces-slug-general",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/general` : "/"
|
|
},
|
|
members: {
|
|
name: "settings-workspaces-slug-members",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/members` : "/"
|
|
},
|
|
membersGuests: {
|
|
name: "settings-workspaces-slug-members-guests",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/members/guests` : "/"
|
|
},
|
|
membersInvites: {
|
|
name: "settings-workspaces-slug-members-invites",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/members/invites` : "/"
|
|
},
|
|
membersRequests: {
|
|
name: "settings-workspaces-slug-members-requests",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/members/requests` : "/"
|
|
},
|
|
projects: {
|
|
name: "settings-workspaces-slug-projects",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/projects` : "/"
|
|
},
|
|
integrations: {
|
|
name: "settings-workspaces-slug-integrations",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/integrations` : "/"
|
|
},
|
|
automation: {
|
|
name: "settings-workspaces-slug-automation",
|
|
route: (slug) => `/settings/workspaces/${slug}/automation`
|
|
},
|
|
security: {
|
|
name: "settings-workspaces-slug-security",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/security` : "/"
|
|
},
|
|
billing: {
|
|
name: "settings-workspaces-slug-billing",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/billing` : "/"
|
|
},
|
|
regions: {
|
|
name: "settings-workspaces-slug-regions",
|
|
route: (slug) => slug ? `/settings/workspaces/${slug}/regions` : "/"
|
|
}
|
|
};
|
|
export const projectRoute = (id, tab) => {
|
|
let res = `/projects/${id}`;
|
|
if (tab && tab !== "models") {
|
|
res += `/${tab}`;
|
|
}
|
|
return res;
|
|
};
|
|
export const projectAutomationRoute = (projectId, automationId) => {
|
|
return `${projectRoute(projectId, "automations")}/${automationId}`;
|
|
};
|
|
export const modelRoute = (projectId, resourceIdString, hashState) => `/projects/${projectId}/models/${resourceIdString}${hashState ? serializeHashState(hashState) || "" : ""}`;
|
|
export const viewerRoute = modelRoute;
|
|
export const modelVersionsRoute = (projectId, modelId) => `/projects/${projectId}/models/${modelId}/versions`;
|
|
export const allProjectModelsRoute = (projectId) => `/projects/${projectId}`;
|
|
export const projectDiscussionsRoute = (projectId) => `/projects/${projectId}`;
|
|
export const projectSettingsRoute = (projectId) => `/projects/${projectId}/settings`;
|
|
export const projectWebhooksRoute = (projectId) => `/projects/${projectId}/settings/webhooks`;
|
|
export const projectTokensRoute = (projectId) => `/projects/${projectId}/settings/tokens`;
|
|
export const projectIntegrationsRoute = (projectId) => `/projects/${projectId}/settings/integrations`;
|
|
export const threadRedirectRoute = (projectId, threadId) => `/projects/${projectId}/threads/${threadId}`;
|
|
export const automateGithubAppAuthorizationRoute = (workspaceSlug) => {
|
|
return `/api/automate/auth/githubapp${workspaceSlug ? `?workspaceSlug=${workspaceSlug}` : ""}`;
|
|
};
|
|
export const publicAutomateFunctionsRoute = "/functions";
|
|
export const automateFunctionRoute = (functionId) => `${publicAutomateFunctionsRoute}/${functionId}`;
|
|
export const workspaceRoute = (slug) => slug ? `/workspaces/${slug}` : "/";
|
|
export const workspaceSsoRoute = (slug) => `/workspaces/${slug}/sso`;
|
|
export const dashboardsRoute = (slug) => `/workspaces/${slug}/dashboards`;
|
|
export const dashboardRoute = (slug, id) => `/workspaces/${slug}/dashboards/${id}`;
|
|
export const workspaceCreateRoute = "/workspaces/actions/create";
|
|
export const workspaceJoinRoute = "/workspaces/actions/join";
|
|
export const workspaceFunctionsRoute = (slug) => `/workspaces/${slug}/functions`;
|
|
export const workspaceIntegrationSettingsRoute = (slug) => `/settings/workspaces/${slug}/integrations`;
|
|
export const presentationRoute = (projectId, presentationId) => `/projects/${projectId}/presentations/${presentationId}`;
|
|
const buildNavigationComposable = (route) => () => {
|
|
const router = useRouter();
|
|
return (params) => {
|
|
const { query } = params || {};
|
|
return router.push({ path: route, query });
|
|
};
|
|
};
|
|
export const useNavigateToHome = buildNavigationComposable(homeRoute);
|
|
export const useNavigateToLogin = buildNavigationComposable(loginRoute);
|
|
export const useNavigateToRegistration = buildNavigationComposable(registerRoute);
|
|
export const useNavigateToForgottenPassword = buildNavigationComposable(forgottenPasswordRoute);
|
|
export const useNavigateToProject = () => {
|
|
const router = useRouter();
|
|
return (params) => {
|
|
const { query, id } = params || {};
|
|
return router.push({ path: projectRoute(id), query });
|
|
};
|
|
};
|
|
export const useRememberRouteAndGoToLogin = () => {
|
|
const goToLogin = useNavigateToLogin();
|
|
const postAuthRedirect = usePostAuthRedirect();
|
|
return async (...params) => {
|
|
postAuthRedirect.setCurrentRoute();
|
|
return goToLogin(...params);
|
|
};
|
|
};
|
|
export const doesRouteFitTarget = (fullPathA, fullPathB) => {
|
|
const fakeOrigin = "https://test.com";
|
|
let urlA;
|
|
let urlB;
|
|
try {
|
|
urlA = new URL(fullPathA, fakeOrigin);
|
|
urlB = new URL(fullPathB, fakeOrigin);
|
|
} catch (e) {
|
|
useSafeLogger().logger().warn("Failed to parse URLs", e);
|
|
return false;
|
|
}
|
|
if (urlA.pathname !== urlB.pathname) {
|
|
return false;
|
|
}
|
|
const queryKeysA = urlA.searchParams.keys();
|
|
for (const key of queryKeysA) {
|
|
if (urlB.searchParams.get(key) !== urlA.searchParams.get(key)) {
|
|
return false;
|
|
}
|
|
}
|
|
const hashA = deserializeHashState(urlA.hash);
|
|
const hashB = deserializeHashState(urlB.hash);
|
|
for (const [key, value] of Object.entries(hashA)) {
|
|
if (hashB[key] !== value) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
export const LearnMoreMoveProjectsUrl = "https://speckle.systems/pricing";
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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QUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksS0FBSyxhQUFhLEtBQUssVUFBVTtBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sYUFBYSxLQUFLLGFBQWEsS0FBSztBQUMxQyxhQUFXLE9BQU8sWUFBWTtBQUM1QixRQUFJLEtBQUssYUFBYSxJQUFJLEdBQUcsTUFBTSxLQUFLLGFBQWEsSUFBSSxHQUFHLEdBQUc7QUFDN0QsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsUUFBTSxRQUFRLHFCQUFxQixLQUFLLElBQUk7QUFDNUMsUUFBTSxRQUFRLHFCQUFxQixLQUFLLElBQUk7QUFDNUMsYUFBVyxDQUFDLEtBQUssS0FBSyxLQUFLLE9BQU8sUUFBUSxLQUFLLEdBQUc7QUFDaEQsUUFBSSxNQUFNLEdBQUcsTUFBTSxPQUFPO0FBQ3hCLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUVPLGFBQU0sMkJBQTJCIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJyb3V0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvY2F0aW9uUXVlcnlSYXcgfSBmcm9tICd2dWUtcm91dGVyJ1xyXG5pbXBvcnQgeyB1c2VQb3N0QXV0aFJlZGlyZWN0IH0gZnJvbSAnfi9saWIvYXV0aC9jb21wb3NhYmxlcy9wb3N0QXV0aFJlZGlyZWN0J1xyXG5pbXBvcnQgeyBkZXNlcmlhbGl6ZUhhc2hTdGF0ZSwgc2VyaWFsaXplSGFzaFN0YXRlIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9jb21wb3NhYmxlcy91cmwnXHJcbmltcG9ydCB0eXBlIHsgVmlld2VySGFzaFN0YXRlS2V5cyB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAvdXJsSGFzaFN0YXRlJ1xyXG5pbXBvcnQgdHlwZSB7IE1heWJlTnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHByb2ZpbGVSb3V0ZSA9ICcvcHJvZmlsZSdcclxuZXhwb3J0IGNvbnN0IGF1dGhCbG9ja2VkRHVlVG9WZXJpZmljYXRpb25Sb3V0ZSA9ICcvZXJyb3ItZW1haWwtdmVyaWZ5J1xyXG5leHBvcnQgY29uc3QgaG9tZVJvdXRlID0gJy8nXHJcbmV4cG9ydCBjb25zdCBwcm9qZWN0c1JvdXRlID0gJy9wcm9qZWN0cydcclxuZXhwb3J0IGNvbnN0IGxvZ2luUm91dGUgPSAnL2F1dGhuL2xvZ2luJ1xyXG5leHBvcnQgY29uc3QgcmVnaXN0ZXJSb3V0ZSA9ICcvYXV0aG4vcmVnaXN0ZXInXHJcbmV4cG9ydCBjb25zdCBzc29Mb2dpblJvdXRlID0gJy9hdXRobi9zc28nXHJcbmV4cG9ydCBjb25zdCBmb3Jnb3R0ZW5QYXNzd29yZFJvdXRlID0gJy9hdXRobi9mb3Jnb3R0ZW4tcGFzc3dvcmQnXHJcbmV4cG9ydCBjb25zdCB2ZXJpZnlFbWFpbFJvdXRlID0gJy92ZXJpZnktZW1haWwnXHJcbmV4cG9ydCBjb25zdCB2ZXJpZnlFbWFpbENvdW50ZG93blJvdXRlID0gJy92ZXJpZnktZW1haWw/c291cmNlPXJlZ2lzdHJhdGlvbidcclxuZXhwb3J0IGNvbnN0IHNlcnZlck1hbmFnZW1lbnRSb3V0ZSA9ICcvc2VydmVyLW1hbmFnZW1lbnQnXHJcbmV4cG9ydCBjb25zdCBhY2NMb2dpblJvdXRlID0gJy9hdXRobi9hY2MnXHJcbmV4cG9ydCBjb25zdCBhY2NSb3V0ZSA9ICcvYWNjJ1xyXG5leHBvcnQgY29uc3QgY29ubmVjdG9yc1JvdXRlID0gJy9jb25uZWN0b3JzJ1xyXG5leHBvcnQgY29uc3QgdHV0b3JpYWxzUm91dGUgPSAnL3R1dG9yaWFscydcclxuZXhwb3J0IGNvbnN0IGRvY3NQYWdlVXJsID0gJ2h0dHBzOi8vZG9jcy5zcGVja2xlLnN5c3RlbXMvJ1xyXG5leHBvcnQgY29uc3QgZm9ydW1QYWdlVXJsID0gJ2h0dHBzOi8vc3BlY2tsZS5jb21tdW5pdHkvJ1xyXG5leHBvcnQgY29uc3QgZ3VpZGVCaWxsaW5nVXJsID0gJ2h0dHBzOi8vZG9jcy5zcGVja2xlLnN5c3RlbXMvd29ya3NwYWNlcy9iaWxsaW5nJ1xyXG5leHBvcnQgY29uc3Qgb25ib2FyZGluZ1JvdXRlID0gJy9vbmJvYXJkaW5nJ1xyXG5leHBvcnQgY29uc3Qgdmlld2VyRG9jc1JvdXRlID0gJ2h0dHBzOi8vZG9jcy5zcGVja2xlLnN5c3RlbXMvM2Qtdmlld2VyL2ludGVyZmFjZS1uYXYnXHJcblxyXG5leHBvcnQgY29uc3Qgc2V0dGluZ3NVc2VyUm91dGVzID0ge1xyXG4gIHByb2ZpbGU6ICcvc2V0dGluZ3MvdXNlci9wcm9maWxlJyxcclxuICBub3RpZmljYXRpb25zOiAnL3NldHRpbmdzL3VzZXIvbm90aWZpY2F0aW9ucycsXHJcbiAgZGV2ZWxvcGVyU2V0dGluZ3M6ICcvc2V0dGluZ3MvdXNlci9kZXZlbG9wZXInLFxyXG4gIGVtYWlsczogJy9zZXR0aW5ncy91c2VyL2VtYWlscydcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzU2VydmVyUm91dGVzID0ge1xyXG4gIGdlbmVyYWw6ICcvc2V0dGluZ3Mvc2VydmVyL2dlbmVyYWwnLFxyXG4gIHByb2plY3RzOiAnL3NldHRpbmdzL3NlcnZlci9wcm9qZWN0cycsXHJcbiAgbWVtYmVyczogJy9zZXR0aW5ncy9zZXJ2ZXIvbWVtYmVycycsXHJcbiAgcmVnaW9uczogJy9zZXR0aW5ncy9zZXJ2ZXIvcmVnaW9ucydcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHNldHRpbmdzV29ya3NwYWNlUm91dGVzID0ge1xyXG4gIGdlbmVyYWw6IHtcclxuICAgIG5hbWU6ICdzZXR0aW5ncy13b3Jrc3BhY2VzLXNsdWctZ2VuZXJhbCcsXHJcbiAgICByb3V0ZTogKHNsdWc6IE1heWJlTnVsbE9yVW5kZWZpbmVkPHN0cmluZz4pID0+XHJcbiAgICAgIHNsdWcgPyBgL3NldHRpbmdzL3dvcmtzcGFjZXMvJHtzbHVnfS9nZW5lcmFsYCA6ICcvJ1xyXG4gIH0sXHJcbiAgbWVtYmVyczoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1tZW1iZXJzJyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L21lbWJlcnNgIDogJy8nXHJcbiAgfSxcclxuICBtZW1iZXJzR3Vlc3RzOiB7XHJcbiAgICBuYW1lOiAnc2V0dGluZ3Mtd29ya3NwYWNlcy1zbHVnLW1lbWJlcnMtZ3Vlc3RzJyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L21lbWJlcnMvZ3Vlc3RzYCA6ICcvJ1xyXG4gIH0sXHJcbiAgbWVtYmVyc0ludml0ZXM6IHtcclxuICAgIG5hbWU6ICdzZXR0aW5ncy13b3Jrc3BhY2VzLXNsdWctbWVtYmVycy1pbnZpdGVzJyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L21lbWJlcnMvaW52aXRlc2AgOiAnLydcclxuICB9LFxyXG4gIG1lbWJlcnNSZXF1ZXN0czoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1tZW1iZXJzLXJlcXVlc3RzJyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L21lbWJlcnMvcmVxdWVzdHNgIDogJy8nXHJcbiAgfSxcclxuICBwcm9qZWN0czoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1wcm9qZWN0cycsXHJcbiAgICByb3V0ZTogKHNsdWc6IE1heWJlTnVsbE9yVW5kZWZpbmVkPHN0cmluZz4pID0+XHJcbiAgICAgIHNsdWcgPyBgL3NldHRpbmdzL3dvcmtzcGFjZXMvJHtzbHVnfS9wcm9qZWN0c2AgOiAnLydcclxuICB9LFxyXG4gIGludGVncmF0aW9uczoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1pbnRlZ3JhdGlvbnMnLFxyXG4gICAgcm91dGU6IChzbHVnOiBNYXliZU51bGxPclVuZGVmaW5lZDxzdHJpbmc+KSA9PlxyXG4gICAgICBzbHVnID8gYC9zZXR0aW5ncy93b3Jrc3BhY2VzLyR7c2x1Z30vaW50ZWdyYXRpb25zYCA6ICcvJ1xyXG4gIH0sXHJcbiAgYXV0b21hdGlvbjoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1hdXRvbWF0aW9uJyxcclxuICAgIHJvdXRlOiAoc2x1Zz86IHN0cmluZykgPT4gYC9zZXR0aW5ncy93b3Jrc3BhY2VzLyR7c2x1Z30vYXV0b21hdGlvbmBcclxuICB9LFxyXG4gIHNlY3VyaXR5OiB7XHJcbiAgICBuYW1lOiAnc2V0dGluZ3Mtd29ya3NwYWNlcy1zbHVnLXNlY3VyaXR5JyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L3NlY3VyaXR5YCA6ICcvJ1xyXG4gIH0sXHJcbiAgYmlsbGluZzoge1xyXG4gICAgbmFtZTogJ3NldHRpbmdzLXdvcmtzcGFjZXMtc2x1Zy1iaWxsaW5nJyxcclxuICAgIHJvdXRlOiAoc2x1ZzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICAgICAgc2x1ZyA/IGAvc2V0dGluZ3Mvd29ya3NwYWNlcy8ke3NsdWd9L2JpbGxpbmdgIDogJy8nXHJcbiAgfSxcclxuICByZWdpb25zOiB7XHJcbiAgICBuYW1lOiAnc2V0dGluZ3Mtd29ya3NwYWNlcy1zbHVnLXJlZ2lvbnMnLFxyXG4gICAgcm91dGU6IChzbHVnOiBNYXliZU51bGxPclVuZGVmaW5lZDxzdHJpbmc+KSA9PlxyXG4gICAgICBzbHVnID8gYC9zZXR0aW5ncy93b3Jrc3BhY2VzLyR7c2x1Z30vcmVnaW9uc2AgOiAnLydcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBwcm9qZWN0Um91dGUgPSAoXHJcbiAgaWQ6IHN0cmluZyxcclxuICB0YWI/OlxyXG4gICAgfCAnbW9kZWxzJ1xyXG4gICAgfCAnZGlzY3Vzc2lvbnMnXHJcbiAgICB8ICdhdXRvbWF0aW9ucydcclxuICAgIHwgJ2NvbGxhYm9yYXRvcnMnXHJcbiAgICB8ICdzZXR0aW5ncydcclxuICAgIHwgJ2FjYydcclxuICAgIHwgJ2Rhc2hib2FyZHMnXHJcbikgPT4ge1xyXG4gIGxldCByZXMgPSBgL3Byb2plY3RzLyR7aWR9YFxyXG4gIGlmICh0YWIgJiYgdGFiICE9PSAnbW9kZWxzJykge1xyXG4gICAgcmVzICs9IGAvJHt0YWJ9YFxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHJlc1xyXG59XHJcbmV4cG9ydCBjb25zdCBwcm9qZWN0QXV0b21hdGlvblJvdXRlID0gKHByb2plY3RJZDogc3RyaW5nLCBhdXRvbWF0aW9uSWQ6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgJHtwcm9qZWN0Um91dGUocHJvamVjdElkLCAnYXV0b21hdGlvbnMnKX0vJHthdXRvbWF0aW9uSWR9YFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgbW9kZWxSb3V0ZSA9IChcclxuICBwcm9qZWN0SWQ6IHN0cmluZyxcclxuICByZXNvdXJjZUlkU3RyaW5nOiBzdHJpbmcsXHJcbiAgaGFzaFN0YXRlPzogUGFydGlhbDxSZWNvcmQ8Vmlld2VySGFzaFN0YXRlS2V5cywgc3RyaW5nPj5cclxuKSA9PlxyXG4gIGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9L21vZGVscy8ke3Jlc291cmNlSWRTdHJpbmd9JHtcclxuICAgIGhhc2hTdGF0ZSA/IHNlcmlhbGl6ZUhhc2hTdGF0ZShoYXNoU3RhdGUpIHx8ICcnIDogJydcclxuICB9YFxyXG5leHBvcnQgY29uc3Qgdmlld2VyUm91dGUgPSBtb2RlbFJvdXRlXHJcblxyXG5leHBvcnQgY29uc3QgbW9kZWxWZXJzaW9uc1JvdXRlID0gKHByb2plY3RJZDogc3RyaW5nLCBtb2RlbElkOiBzdHJpbmcpID0+XHJcbiAgYC9wcm9qZWN0cy8ke3Byb2plY3RJZH0vbW9kZWxzLyR7bW9kZWxJZH0vdmVyc2lvbnNgXHJcblxyXG4vLyBUZW1wIGNoYW5nZSB0byBhbGxQcm9qZWN0TW9kZWxzUm91dGUgdW50aWwgdGFiIHJvdXRpbmcgaXMgaW1wbGVtZW50ZWRcclxuZXhwb3J0IGNvbnN0IGFsbFByb2plY3RNb2RlbHNSb3V0ZSA9IChwcm9qZWN0SWQ6IHN0cmluZykgPT4gYC9wcm9qZWN0cy8ke3Byb2plY3RJZH1gXHJcblxyXG4vLyBUZW1wIGNoYW5nZSB0byBwcm9qZWN0RGlzY3Vzc2lvbnNSb3V0ZSB1bnRpbCB0YWIgcm91dGluZyBpcyBpbXBsZW1lbnRlZFxyXG5leHBvcnQgY29uc3QgcHJvamVjdERpc2N1c3Npb25zUm91dGUgPSAocHJvamVjdElkOiBzdHJpbmcpID0+IGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9YFxyXG5cclxuZXhwb3J0IGNvbnN0IHByb2plY3RTZXR0aW5nc1JvdXRlID0gKHByb2plY3RJZDogc3RyaW5nKSA9PlxyXG4gIGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9L3NldHRpbmdzYFxyXG5cclxuZXhwb3J0IGNvbnN0IHByb2plY3RXZWJob29rc1JvdXRlID0gKHByb2plY3RJZDogc3RyaW5nKSA9PlxyXG4gIGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9L3NldHRpbmdzL3dlYmhvb2tzYFxyXG5cclxuZXhwb3J0IGNvbnN0IHByb2plY3RUb2tlbnNSb3V0ZSA9IChwcm9qZWN0SWQ6IHN0cmluZykgPT5cclxuICBgL3Byb2plY3RzLyR7cHJvamVjdElkfS9zZXR0aW5ncy90b2tlbnNgXHJcblxyXG5leHBvcnQgY29uc3QgcHJvamVjdEludGVncmF0aW9uc1JvdXRlID0gKHByb2plY3RJZDogc3RyaW5nKSA9PlxyXG4gIGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9L3NldHRpbmdzL2ludGVncmF0aW9uc2BcclxuXHJcbmV4cG9ydCBjb25zdCB0aHJlYWRSZWRpcmVjdFJvdXRlID0gKHByb2plY3RJZDogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PlxyXG4gIGAvcHJvamVjdHMvJHtwcm9qZWN0SWR9L3RocmVhZHMvJHt0aHJlYWRJZH1gXHJcblxyXG5leHBvcnQgY29uc3QgYXV0b21hdGVHaXRodWJBcHBBdXRob3JpemF0aW9uUm91dGUgPSAod29ya3NwYWNlU2x1Zz86IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBgL2FwaS9hdXRvbWF0ZS9hdXRoL2dpdGh1YmFwcCR7XHJcbiAgICB3b3Jrc3BhY2VTbHVnID8gYD93b3Jrc3BhY2VTbHVnPSR7d29ya3NwYWNlU2x1Z31gIDogJydcclxuICB9YFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHVibGljQXV0b21hdGVGdW5jdGlvbnNSb3V0ZSA9ICcvZnVuY3Rpb25zJ1xyXG5cclxuZXhwb3J0IGNvbnN0IGF1dG9tYXRlRnVuY3Rpb25Sb3V0ZSA9IChmdW5jdGlvbklkOiBzdHJpbmcpID0+XHJcbiAgYCR7cHVibGljQXV0b21hdGVGdW5jdGlvbnNSb3V0ZX0vJHtmdW5jdGlvbklkfWBcclxuXHJcbmV4cG9ydCBjb25zdCB3b3Jrc3BhY2VSb3V0ZSA9IChzbHVnOiBNYXliZU51bGxPclVuZGVmaW5lZDxzdHJpbmc+KSA9PlxyXG4gIHNsdWcgPyBgL3dvcmtzcGFjZXMvJHtzbHVnfWAgOiAnLydcclxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZVNzb1JvdXRlID0gKHNsdWc6IHN0cmluZykgPT4gYC93b3Jrc3BhY2VzLyR7c2x1Z30vc3NvYFxyXG5cclxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZHNSb3V0ZSA9IChzbHVnPzogTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPikgPT5cclxuICBgL3dvcmtzcGFjZXMvJHtzbHVnfS9kYXNoYm9hcmRzYFxyXG5cclxuZXhwb3J0IGNvbnN0IGRhc2hib2FyZFJvdXRlID0gKHNsdWc/OiBNYXliZU51bGxPclVuZGVmaW5lZDxzdHJpbmc+LCBpZD86IHN0cmluZykgPT5cclxuICBgL3dvcmtzcGFjZXMvJHtzbHVnfS9kYXNoYm9hcmRzLyR7aWR9YFxyXG5cclxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZUNyZWF0ZVJvdXRlID0gJy93b3Jrc3BhY2VzL2FjdGlvbnMvY3JlYXRlJ1xyXG5cclxuZXhwb3J0IGNvbnN0IHdvcmtzcGFjZUpvaW5Sb3V0ZSA9ICcvd29ya3NwYWNlcy9hY3Rpb25zL2pvaW4nXHJcblxyXG5leHBvcnQgY29uc3Qgd29ya3NwYWNlRnVuY3Rpb25zUm91dGUgPSAoc2x1Zz86IHN0cmluZykgPT5cclxuICBgL3dvcmtzcGFjZXMvJHtzbHVnfS9mdW5jdGlvbnNgXHJcblxyXG5leHBvcnQgY29uc3Qgd29ya3NwYWNlSW50ZWdyYXRpb25TZXR0aW5nc1JvdXRlID0gKHNsdWc/OiBzdHJpbmcpID0+XHJcbiAgYC9zZXR0aW5ncy93b3Jrc3BhY2VzLyR7c2x1Z30vaW50ZWdyYXRpb25zYFxyXG5cclxuZXhwb3J0IGNvbnN0IHByZXNlbnRhdGlvblJvdXRlID0gKHByb2plY3RJZD86IHN0cmluZywgcHJlc2VudGF0aW9uSWQ/OiBzdHJpbmcpID0+XHJcbiAgYC9wcm9qZWN0cy8ke3Byb2plY3RJZH0vcHJlc2VudGF0aW9ucy8ke3ByZXNlbnRhdGlvbklkfWBcclxuXHJcbmNvbnN0IGJ1aWxkTmF2aWdhdGlvbkNvbXBvc2FibGUgPSAocm91dGU6IHN0cmluZykgPT4gKCkgPT4ge1xyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXHJcbiAgcmV0dXJuIChwYXJhbXM/OiB7IHF1ZXJ5PzogTG9jYXRpb25RdWVyeVJhdyB9KSA9PiB7XHJcbiAgICBjb25zdCB7IHF1ZXJ5IH0gPSBwYXJhbXMgfHwge31cclxuICAgIHJldHVybiByb3V0ZXIucHVzaCh7IHBhdGg6IHJvdXRlLCBxdWVyeSB9KVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZU5hdmlnYXRlVG9Ib21lID0gYnVpbGROYXZpZ2F0aW9uQ29tcG9zYWJsZShob21lUm91dGUpXHJcbmV4cG9ydCBjb25zdCB1c2VOYXZpZ2F0ZVRvTG9naW4gPSBidWlsZE5hdmlnYXRpb25Db21wb3NhYmxlKGxvZ2luUm91dGUpXHJcbmV4cG9ydCBjb25zdCB1c2VOYXZpZ2F0ZVRvUmVnaXN0cmF0aW9uID0gYnVpbGROYXZpZ2F0aW9uQ29tcG9zYWJsZShyZWdpc3RlclJvdXRlKVxyXG5leHBvcnQgY29uc3QgdXNlTmF2aWdhdGVUb0ZvcmdvdHRlblBhc3N3b3JkID1cclxuICBidWlsZE5hdmlnYXRpb25Db21wb3NhYmxlKGZvcmdvdHRlblBhc3N3b3JkUm91dGUpXHJcblxyXG5leHBvcnQgY29uc3QgdXNlTmF2aWdhdGVUb1Byb2plY3QgPSAoKSA9PiB7XHJcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcclxuICByZXR1cm4gKHBhcmFtczogeyBxdWVyeT86IExvY2F0aW9uUXVlcnlSYXc7IGlkOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgY29uc3QgeyBxdWVyeSwgaWQgfSA9IHBhcmFtcyB8fCB7fVxyXG4gICAgcmV0dXJuIHJvdXRlci5wdXNoKHsgcGF0aDogcHJvamVjdFJvdXRlKGlkKSwgcXVlcnkgfSlcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VSZW1lbWJlclJvdXRlQW5kR29Ub0xvZ2luID0gKCkgPT4ge1xyXG4gIGNvbnN0IGdvVG9Mb2dpbiA9IHVzZU5hdmlnYXRlVG9Mb2dpbigpXHJcbiAgY29uc3QgcG9zdEF1dGhSZWRpcmVjdCA9IHVzZVBvc3RBdXRoUmVkaXJlY3QoKVxyXG5cclxuICByZXR1cm4gYXN5bmMgKC4uLnBhcmFtczogUGFyYW1ldGVyczx0eXBlb2YgZ29Ub0xvZ2luPikgPT4ge1xyXG4gICAgcG9zdEF1dGhSZWRpcmVjdC5zZXRDdXJyZW50Um91dGUoKVxyXG4gICAgcmV0dXJuIGdvVG9Mb2dpbiguLi5wYXJhbXMpXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2hlY2sgdGhhdCBmdWxsUGF0aEEgZml0cyBmdWxsUGF0aEIgKG5vdCBuZWNlc3NhcmlseSB0aGUgaW52ZXJzZSlcclxuICovXHJcbmV4cG9ydCBjb25zdCBkb2VzUm91dGVGaXRUYXJnZXQgPSAoZnVsbFBhdGhBOiBzdHJpbmcsIGZ1bGxQYXRoQjogc3RyaW5nKSA9PiB7XHJcbiAgY29uc3QgZmFrZU9yaWdpbiA9ICdodHRwczovL3Rlc3QuY29tJ1xyXG5cclxuICBsZXQgdXJsQTogVVJMXHJcbiAgbGV0IHVybEI6IFVSTFxyXG5cclxuICB0cnkge1xyXG4gICAgdXJsQSA9IG5ldyBVUkwoZnVsbFBhdGhBLCBmYWtlT3JpZ2luKVxyXG4gICAgdXJsQiA9IG5ldyBVUkwoZnVsbFBhdGhCLCBmYWtlT3JpZ2luKVxyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHVzZVNhZmVMb2dnZXIoKS5sb2dnZXIoKS53YXJuKCdGYWlsZWQgdG8gcGFyc2UgVVJMcycsIGUpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGlmICh1cmxBLnBhdGhuYW1lICE9PSB1cmxCLnBhdGhuYW1lKSB7XHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcblxyXG4gIGNvbnN0IHF1ZXJ5S2V5c0EgPSB1cmxBLnNlYXJjaFBhcmFtcy5rZXlzKClcclxuICBmb3IgKGNvbnN0IGtleSBvZiBxdWVyeUtleXNBKSB7XHJcbiAgICBpZiAodXJsQi5zZWFyY2hQYXJhbXMuZ2V0KGtleSkgIT09IHVybEEuc2VhcmNoUGFyYW1zLmdldChrZXkpKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgaGFzaEEgPSBkZXNlcmlhbGl6ZUhhc2hTdGF0ZSh1cmxBLmhhc2gpXHJcbiAgY29uc3QgaGFzaEIgPSBkZXNlcmlhbGl6ZUhhc2hTdGF0ZSh1cmxCLmhhc2gpXHJcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGFzaEEpKSB7XHJcbiAgICBpZiAoaGFzaEJba2V5XSAhPT0gdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gdHJ1ZVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgTGVhcm5Nb3JlTW92ZVByb2plY3RzVXJsID0gJ2h0dHBzOi8vc3BlY2tsZS5zeXN0ZW1zL3ByaWNpbmcnXHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUudHMifQ== |