Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_0000f6
T

155 lines
16 KiB
Plaintext

import { useApolloClient, useMutation, useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import { graphql } from "/_nuxt/lib/common/generated/gql/gql.ts";
import { getFirstErrorMessage } from "/_nuxt/lib/common/helpers/graphql.ts";
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
import { deleteWorkspaceSsoProviderMutation } from "/_nuxt/lib/workspaces/graphql/mutations.ts";
import { workspaceSsoCheckQuery } from "/_nuxt/lib/workspaces/graphql/queries.ts";
import { useApiOrigin } from "/_nuxt/composables/env.ts";
import { useLogger } from "/_nuxt/composables/logging.ts";
import { useFetch } from "/_nuxt/node_modules/nuxt/dist/app/composables/fetch.js?v=e4f18c29";
import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useGlobalToast } from "/_nuxt/composables/globals.ts";
import { convertThrowIntoFetchResult, getCacheId, ToastNotificationType } from "/_nuxt/utils/globals.ts";
export const useWorkspacePublicSsoCheck = (workspaceSlug) => {
const apiOrigin = useApiOrigin();
const logger = useLogger();
const {
data: workspace,
status,
error
} = useFetch(
computed(
() => new URL(`/api/v1/workspaces/${workspaceSlug.value}/sso`, apiOrigin).toString()
),
{
onResponseError: (err) => {
logger.error("Failed to fetch workspace SSO provider:", err);
}
}
, '$8nsQ3ed6r4');
const hasSsoEnabled = computed(() => !!workspace.value?.ssoProviderName);
const loading = computed(() => status.value === "pending");
return {
workspace,
loading,
error,
hasSsoEnabled
};
};
export const useWorkspaceSsoStatus = (params) => {
graphql(`
fragment WorkspaceSsoStatus_Workspace on Workspace {
id
sso {
provider {
id
name
clientId
issuerUrl
}
session {
validUntil
}
}
}
`);
graphql(`
fragment WorkspaceSsoStatus_User on User {
expiredSsoSessions {
id
slug
}
}
`);
const variables = computed(() => ({
slug: params.workspaceSlug.value
}));
const { result, loading, error } = useQuery(
workspaceSsoCheckQuery,
variables,
() => ({ enabled: !!params.workspaceSlug.value })
);
const hasSsoEnabled = computed(() => !!result.value?.workspaceBySlug.sso?.provider);
const provider = computed(() => result.value?.workspaceBySlug.sso?.provider);
const needsSsoLogin = computed(() => {
if (!hasSsoEnabled.value) return false;
if (!result.value?.activeUser) return false;
return result.value.activeUser.expiredSsoSessions.some(
(workspace) => workspace.slug === params.workspaceSlug.value
);
});
const isSsoAuthenticated = computed(() => {
if (!hasSsoEnabled.value) return false;
if (needsSsoLogin.value) return false;
const session = result.value?.workspaceBySlug.sso?.session;
return !!session && new Date(session.validUntil) > /* @__PURE__ */ new Date();
});
return {
hasSsoEnabled,
isSsoAuthenticated,
needsSsoLogin,
provider,
loading,
error
};
};
export function useWorkspaceSsoValidation(workspaceSlug) {
const logger = useLogger();
const { hasSsoEnabled, needsSsoLogin, error } = useWorkspaceSsoStatus({
workspaceSlug
});
const ssoError = computed(() => {
if (error.value) {
logger.error("SSO check failed:", error.value);
return "Failed to check workspace SSO requirements";
}
if (hasSsoEnabled.value && needsSsoLogin.value) {
return "You need to sign in with SSO to access this workspace.";
}
return null;
});
return { ssoError };
}
export function useWorkspaceSsoDelete() {
const { triggerNotification } = useGlobalToast();
const mixpanel = useMixpanel();
const apollo = useApolloClient().client;
const { mutate: deleteSsoProviderMutation, loading } = useMutation(
deleteWorkspaceSsoProviderMutation
);
const deleteSsoProvider = async (workspaceId) => {
const result = await deleteSsoProviderMutation({
workspaceId
}).catch(convertThrowIntoFetchResult);
if (result?.data?.workspaceMutations?.deleteSsoProvider) {
apollo.cache.evict({
id: getCacheId("Workspace", workspaceId)
});
triggerNotification({
type: ToastNotificationType.Success,
title: "SSO provider removed",
description: "SSO provider was successfully removed"
});
mixpanel.track("Workspace SSO Provider Removed", {
// eslint-disable-next-line camelcase
workspace_id: workspaceId
});
return true;
} else {
const errorMessage = getFirstErrorMessage(result?.errors);
triggerNotification({
type: ToastNotificationType.Danger,
title: "Failed to remove SSO provider",
description: errorMessage
});
return false;
}
};
return {
deleteSsoProvider,
loading
};
}
//# sourceMappingURL=data:application/json;base64,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QUFTLGNBQWMsT0FBTztBQUM5QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxFQUNULENBQUM7QUFFRCxTQUFPLEVBQUUsU0FBUztBQUNwQjtBQU1PLGdCQUFTLHdCQUF3QjtBQUN0QyxRQUFNLEVBQUUsb0JBQW9CLElBQUksZUFBZTtBQUMvQyxRQUFNLFdBQVcsWUFBWTtBQUM3QixRQUFNLFNBQVMsZ0JBQWdCLEVBQUU7QUFFakMsUUFBTSxFQUFFLFFBQVEsMkJBQTJCLFFBQVEsSUFBSTtBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLFFBQU0sb0JBQW9CLE9BQU8sZ0JBQXdCO0FBQ3ZELFVBQU0sU0FBUyxNQUFNLDBCQUEwQjtBQUFBLE1BQzdDO0FBQUEsSUFDRixDQUFDLEVBQUUsTUFBTSwyQkFBMkI7QUFFcEMsUUFBSSxRQUFRLE1BQU0sb0JBQW9CLG1CQUFtQjtBQUV2RCxhQUFPLE1BQU0sTUFBTTtBQUFBLFFBQ2pCLElBQUksV0FBVyxhQUFhLFdBQVc7QUFBQSxNQUN6QyxDQUFDO0FBRUQsMEJBQW9CO0FBQUEsUUFDbEIsTUFBTSxzQkFBc0I7QUFBQSxRQUM1QixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsTUFDZixDQUFDO0FBRUQsZUFBUyxNQUFNLGtDQUFrQztBQUFBO0FBQUEsUUFFL0MsY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVCxPQUFPO0FBQ0wsWUFBTSxlQUFlLHFCQUFxQixRQUFRLE1BQU07QUFDeEQsMEJBQW9CO0FBQUEsUUFDbEIsTUFBTSxzQkFBc0I7QUFBQSxRQUM1QixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsTUFDZixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzc28udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQXBvbGxvQ2xpZW50LCB1c2VNdXRhdGlvbiwgdXNlUXVlcnkgfSBmcm9tICdAdnVlL2Fwb2xsby1jb21wb3NhYmxlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNzb0NoZWNrUXVlcnkgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgeyBnZXRGaXJzdEVycm9yTWVzc2FnZSB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgZGVsZXRlV29ya3NwYWNlU3NvUHJvdmlkZXJNdXRhdGlvbiB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9tdXRhdGlvbnMnXHJcbmltcG9ydCB7IHdvcmtzcGFjZVNzb0NoZWNrUXVlcnkgfSBmcm9tICd+L2xpYi93b3Jrc3BhY2VzL2dyYXBocWwvcXVlcmllcydcclxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTc29Qcm92aWRlclB1YmxpYyB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvaGVscGVycy90eXBlcydcclxuXHJcbi8qKlxyXG4gKiBGZXRjaGVzIGFuZCBwcm92aWRlcyBwdWJsaWMgU1NPIHdvcmtzcGFjZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXN0IGFwaS5cclxuICogVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHdvcmtzcGFjZSBoYXMgU1NPIGVuYWJsZWQgYmVmb3JlIGF1dGhlbnRpY2F0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlV29ya3NwYWNlUHVibGljU3NvQ2hlY2sgPSAod29ya3NwYWNlU2x1ZzogUmVmPHN0cmluZz4pID0+IHtcclxuICBjb25zdCBhcGlPcmlnaW4gPSB1c2VBcGlPcmlnaW4oKVxyXG4gIGNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGRhdGE6IHdvcmtzcGFjZSxcclxuICAgIHN0YXR1cyxcclxuICAgIGVycm9yXHJcbiAgfSA9IHVzZUZldGNoPFdvcmtzcGFjZVNzb1Byb3ZpZGVyUHVibGljPihcclxuICAgIGNvbXB1dGVkKCgpID0+XHJcbiAgICAgIG5ldyBVUkwoYC9hcGkvdjEvd29ya3NwYWNlcy8ke3dvcmtzcGFjZVNsdWcudmFsdWV9L3Nzb2AsIGFwaU9yaWdpbikudG9TdHJpbmcoKVxyXG4gICAgKSxcclxuICAgIHtcclxuICAgICAgb25SZXNwb25zZUVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggd29ya3NwYWNlIFNTTyBwcm92aWRlcjonLCBlcnIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICApXHJcblxyXG4gIGNvbnN0IGhhc1Nzb0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhIXdvcmtzcGFjZS52YWx1ZT8uc3NvUHJvdmlkZXJOYW1lKVxyXG4gIGNvbnN0IGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMudmFsdWUgPT09ICdwZW5kaW5nJylcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHdvcmtzcGFjZSxcclxuICAgIGxvYWRpbmcsXHJcbiAgICBlcnJvcixcclxuICAgIGhhc1Nzb0VuYWJsZWRcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSB3b3Jrc3BhY2UgcmVxdWlyZXMgU1NPIGF1dGhlbnRpY2F0aW9uIGFuZCB0aGUgY3VycmVudCB1c2VyJ3MgU1NPIHN0YXR1cy5cclxuICogVXNlZCB0byBlbmZvcmNlIFNTTyBsb2dpbiByZXF1aXJlbWVudHMgZm9yIHdvcmtzcGFjZSBhY2Nlc3MuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlV29ya3NwYWNlU3NvU3RhdHVzID0gKHBhcmFtczogeyB3b3Jrc3BhY2VTbHVnOiBSZWY8c3RyaW5nPiB9KSA9PiB7XHJcbiAgZ3JhcGhxbChgXHJcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHNzbyB7XHJcbiAgICAgICAgcHJvdmlkZXIge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIG5hbWVcclxuICAgICAgICAgIGNsaWVudElkXHJcbiAgICAgICAgICBpc3N1ZXJVcmxcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Vzc2lvbiB7XHJcbiAgICAgICAgICB2YWxpZFVudGlsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgYClcclxuXHJcbiAgZ3JhcGhxbChgXHJcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfVXNlciBvbiBVc2VyIHtcclxuICAgICAgZXhwaXJlZFNzb1Nlc3Npb25zIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIHNsdWdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGApXHJcblxyXG4gIGNvbnN0IHZhcmlhYmxlcyA9IGNvbXB1dGVkKCgpID0+ICh7XHJcbiAgICBzbHVnOiBwYXJhbXMud29ya3NwYWNlU2x1Zy52YWx1ZVxyXG4gIH0pKVxyXG5cclxuICBjb25zdCB7IHJlc3VsdCwgbG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFdvcmtzcGFjZVNzb0NoZWNrUXVlcnk+KFxyXG4gICAgd29ya3NwYWNlU3NvQ2hlY2tRdWVyeSxcclxuICAgIHZhcmlhYmxlcyxcclxuICAgICgpID0+ICh7IGVuYWJsZWQ6ICEhcGFyYW1zLndvcmtzcGFjZVNsdWcudmFsdWUgfSlcclxuICApXHJcblxyXG4gIGNvbnN0IGhhc1Nzb0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhIXJlc3VsdC52YWx1ZT8ud29ya3NwYWNlQnlTbHVnLnNzbz8ucHJvdmlkZXIpXHJcbiAgY29uc3QgcHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LndvcmtzcGFjZUJ5U2x1Zy5zc28/LnByb3ZpZGVyKVxyXG5cclxuICBjb25zdCBuZWVkc1Nzb0xvZ2luID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFoYXNTc29FbmFibGVkLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuICAgIGlmICghcmVzdWx0LnZhbHVlPy5hY3RpdmVVc2VyKSByZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiByZXN1bHQudmFsdWUuYWN0aXZlVXNlci5leHBpcmVkU3NvU2Vzc2lvbnMuc29tZShcclxuICAgICAgKHdvcmtzcGFjZSkgPT4gd29ya3NwYWNlLnNsdWcgPT09IHBhcmFtcy53b3Jrc3BhY2VTbHVnLnZhbHVlXHJcbiAgICApXHJcbiAgfSlcclxuXHJcbiAgY29uc3QgaXNTc29BdXRoZW50aWNhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFoYXNTc29FbmFibGVkLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuICAgIGlmIChuZWVkc1Nzb0xvZ2luLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBjb25zdCBzZXNzaW9uID0gcmVzdWx0LnZhbHVlPy53b3Jrc3BhY2VCeVNsdWcuc3NvPy5zZXNzaW9uXHJcbiAgICByZXR1cm4gISFzZXNzaW9uICYmIG5ldyBEYXRlKHNlc3Npb24udmFsaWRVbnRpbCkgPiBuZXcgRGF0ZSgpXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGhhc1Nzb0VuYWJsZWQsXHJcbiAgICBpc1Nzb0F1dGhlbnRpY2F0ZWQsXHJcbiAgICBuZWVkc1Nzb0xvZ2luLFxyXG4gICAgcHJvdmlkZXIsXHJcbiAgICBsb2FkaW5nLFxyXG4gICAgZXJyb3JcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZXMgU1NPIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVtZW50cyBmb3IgYSB3b3Jrc3BhY2UuXHJcbiAqIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiBTU08gbG9naW4gaXMgcmVxdWlyZWQgYnV0IG5vdCBjb21wbGV0ZWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlV29ya3NwYWNlU3NvVmFsaWRhdGlvbih3b3Jrc3BhY2VTbHVnOiBSZWY8c3RyaW5nPikge1xyXG4gIGNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcbiAgY29uc3QgeyBoYXNTc29FbmFibGVkLCBuZWVkc1Nzb0xvZ2luLCBlcnJvciB9ID0gdXNlV29ya3NwYWNlU3NvU3RhdHVzKHtcclxuICAgIHdvcmtzcGFjZVNsdWdcclxuICB9KVxyXG5cclxuICBjb25zdCBzc29FcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmIChlcnJvci52YWx1ZSkge1xyXG4gICAgICBsb2dnZXIuZXJyb3IoJ1NTTyBjaGVjayBmYWlsZWQ6JywgZXJyb3IudmFsdWUpXHJcbiAgICAgIHJldHVybiAnRmFpbGVkIHRvIGNoZWNrIHdvcmtzcGFjZSBTU08gcmVxdWlyZW1lbnRzJ1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNTc29FbmFibGVkLnZhbHVlICYmIG5lZWRzU3NvTG9naW4udmFsdWUpIHtcclxuICAgICAgcmV0dXJuICdZb3UgbmVlZCB0byBzaWduIGluIHdpdGggU1NPIHRvIGFjY2VzcyB0aGlzIHdvcmtzcGFjZS4nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9KVxyXG5cclxuICByZXR1cm4geyBzc29FcnJvciB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIHJlbW92ZSBTU08gY29uZmlndXJhdGlvbiBmcm9tIGEgd29ya3NwYWNlLlxyXG4gKiBPbmx5IGF2YWlsYWJsZSB0byB3b3Jrc3BhY2UgYWRtaW5pc3RyYXRvcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlV29ya3NwYWNlU3NvRGVsZXRlKCkge1xyXG4gIGNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG4gIGNvbnN0IG1peHBhbmVsID0gdXNlTWl4cGFuZWwoKVxyXG4gIGNvbnN0IGFwb2xsbyA9IHVzZUFwb2xsb0NsaWVudCgpLmNsaWVudFxyXG5cclxuICBjb25zdCB7IG11dGF0ZTogZGVsZXRlU3NvUHJvdmlkZXJNdXRhdGlvbiwgbG9hZGluZyB9ID0gdXNlTXV0YXRpb24oXHJcbiAgICBkZWxldGVXb3Jrc3BhY2VTc29Qcm92aWRlck11dGF0aW9uXHJcbiAgKVxyXG5cclxuICBjb25zdCBkZWxldGVTc29Qcm92aWRlciA9IGFzeW5jICh3b3Jrc3BhY2VJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWxldGVTc29Qcm92aWRlck11dGF0aW9uKHtcclxuICAgICAgd29ya3NwYWNlSWRcclxuICAgIH0pLmNhdGNoKGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdClcclxuXHJcbiAgICBpZiAocmVzdWx0Py5kYXRhPy53b3Jrc3BhY2VNdXRhdGlvbnM/LmRlbGV0ZVNzb1Byb3ZpZGVyKSB7XHJcbiAgICAgIC8vIFRPRE86IEJldHRlciBjYWNoZSB1cGRhdGVzXHJcbiAgICAgIGFwb2xsby5jYWNoZS5ldmljdCh7XHJcbiAgICAgICAgaWQ6IGdldENhY2hlSWQoJ1dvcmtzcGFjZScsIHdvcmtzcGFjZUlkKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3MsXHJcbiAgICAgICAgdGl0bGU6ICdTU08gcHJvdmlkZXIgcmVtb3ZlZCcsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdTU08gcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkJ1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWl4cGFuZWwudHJhY2soJ1dvcmtzcGFjZSBTU08gUHJvdmlkZXIgUmVtb3ZlZCcsIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXHJcbiAgICAgICAgd29ya3NwYWNlX2lkOiB3b3Jrc3BhY2VJZFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEZpcnN0RXJyb3JNZXNzYWdlKHJlc3VsdD8uZXJyb3JzKVxyXG4gICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICAgIHRpdGxlOiAnRmFpbGVkIHRvIHJlbW92ZSBTU08gcHJvdmlkZXInLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvck1lc3NhZ2VcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZGVsZXRlU3NvUHJvdmlkZXIsXHJcbiAgICBsb2FkaW5nXHJcbiAgfVxyXG59XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9saWIvd29ya3NwYWNlcy9jb21wb3NhYmxlcy9zc28udHMifQ==