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,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IkFBQUEsU0FBUyxpQkFBaUIsYUFBYSxnQkFBZ0I7QUFDdkQsU0FBUyxlQUFlO0FBRXhCLFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsbUJBQW1CO0FBQzVCLFNBQVMsMENBQTBDO0FBQ25ELFNBQVMsOEJBQThCOzs7Ozs7OztBQU9oQyxhQUFNLDZCQUE2QixDQUFDLGtCQUErQjtBQUN4RSxRQUFNLFlBQVksYUFBYTtBQUMvQixRQUFNLFNBQVMsVUFBVTtBQUV6QixRQUFNO0FBQUEsSUFDSixNQUFNO0FBQUEsSUFDTjtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFBQSxJQUNGO0FBQUEsTUFBUyxNQUNQLElBQUksSUFBSSxzQkFBc0IsY0FBYyxLQUFLLFFBQVEsU0FBUyxFQUFFLFNBQVM7QUFBQSxJQUMvRTtBQUFBLElBQ0E7QUFBQSxNQUNFLGlCQUFpQixDQUFDLFFBQVE7QUFDeEIsZUFBTyxNQUFNLDJDQUEyQyxHQUFHO0FBQUEsTUFDN0Q7QUFBQSxJQUNGO0FBQUEsaUJBQ0Y7QUFFQSxRQUFNLGdCQUFnQixTQUFTLE1BQU0sQ0FBQyxDQUFDLFVBQVUsT0FBTyxlQUFlO0FBQ3ZFLFFBQU0sVUFBVSxTQUFTLE1BQU0sT0FBTyxVQUFVLFNBQVM7QUFFekQsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFNTyxhQUFNLHdCQUF3QixDQUFDLFdBQTJDO0FBQy9FLFVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FlUDtBQUVELFVBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQU9QO0FBRUQsUUFBTSxZQUFZLFNBQVMsT0FBTztBQUFBLElBQ2hDLE1BQU0sT0FBTyxjQUFjO0FBQUEsRUFDN0IsRUFBRTtBQUVGLFFBQU0sRUFBRSxRQUFRLFNBQVMsTUFBTSxJQUFJO0FBQUEsSUFDakM7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsT0FBTyxjQUFjLE1BQU07QUFBQSxFQUNqRDtBQUVBLFFBQU0sZ0JBQWdCLFNBQVMsTUFBTSxDQUFDLENBQUMsT0FBTyxPQUFPLGdCQUFnQixLQUFLLFFBQVE7QUFDbEYsUUFBTSxXQUFXLFNBQVMsTUFBTSxPQUFPLE9BQU8sZ0JBQWdCLEtBQUssUUFBUTtBQUUzRSxRQUFNLGdCQUFnQixTQUFTLE1BQU07QUFDbkMsUUFBSSxDQUFDLGNBQWMsTUFBTyxRQUFPO0FBQ2pDLFFBQUksQ0FBQyxPQUFPLE9BQU8sV0FBWSxRQUFPO0FBQ3RDLFdBQU8sT0FBTyxNQUFNLFdBQVcsbUJBQW1CO0FBQUEsTUFDaEQsQ0FBQyxjQUFjLFVBQVUsU0FBUyxPQUFPLGNBQWM7QUFBQSxJQUN6RDtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0scUJBQXFCLFNBQVMsTUFBTTtBQUN4QyxRQUFJLENBQUMsY0FBYyxNQUFPLFFBQU87QUFDakMsUUFBSSxjQUFjLE1BQU8sUUFBTztBQUVoQyxVQUFNLFVBQVUsT0FBTyxPQUFPLGdCQUFnQixLQUFLO0FBQ25ELFdBQU8sQ0FBQyxDQUFDLFdBQVcsSUFBSSxLQUFLLFFBQVEsVUFBVSxJQUFJLG9CQUFJLEtBQUs7QUFBQSxFQUM5RCxDQUFDO0FBRUQsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQU1PLGdCQUFTLDBCQUEwQixlQUE0QjtBQUNwRSxRQUFNLFNBQVMsVUFBVTtBQUN6QixRQUFNLEVBQUUsZUFBZSxlQUFlLE1BQU0sSUFBSSxzQkFBc0I7QUFBQSxJQUNwRTtBQUFBLEVBQ0YsQ0FBQztBQUVELFFBQU0sV0FBVyxTQUFTLE1BQU07QUFDOUIsUUFBSSxNQUFNLE9BQU87QUFDZixhQUFPLE1BQU0scUJBQXFCLE1BQU0sS0FBSztBQUM3QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFFBQUksY0FBYyxTQUFTLGNBQWMsT0FBTztBQUM5QyxhQUFPO0FBQUEsSUFDVDtBQUVBLFdBQU87QUFBQSxFQUNULENBQUM7QUFFRCxTQUFPLEVBQUUsU0FBUztBQUNwQjtBQU1PLGdCQUFTLHdCQUF3QjtBQUN0QyxRQUFNLEVBQUUsb0JBQW9CLElBQUksZUFBZTtBQUMvQyxRQUFNLFdBQVcsWUFBWTtBQUM3QixRQUFNLFNBQVMsZ0JBQWdCLEVBQUU7QUFFakMsUUFBTSxFQUFFLFFBQVEsMkJBQTJCLFFBQVEsSUFBSTtBQUFBLElBQ3JEO0FBQUEsRUFDRjtBQUVBLFFBQU0sb0JBQW9CLE9BQU8sZ0JBQXdCO0FBQ3ZELFVBQU0sU0FBUyxNQUFNLDBCQUEwQjtBQUFBLE1BQzdDO0FBQUEsSUFDRixDQUFDLEVBQUUsTUFBTSwyQkFBMkI7QUFFcEMsUUFBSSxRQUFRLE1BQU0sb0JBQW9CLG1CQUFtQjtBQUV2RCxhQUFPLE1BQU0sTUFBTTtBQUFBLFFBQ2pCLElBQUksV0FBVyxhQUFhLFdBQVc7QUFBQSxNQUN6QyxDQUFDO0FBRUQsMEJBQW9CO0FBQUEsUUFDbEIsTUFBTSxzQkFBc0I7QUFBQSxRQUM1QixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsTUFDZixDQUFDO0FBRUQsZUFBUyxNQUFNLGtDQUFrQztBQUFBO0FBQUEsUUFFL0MsY0FBYztBQUFBLE1BQ2hCLENBQUM7QUFFRCxhQUFPO0FBQUEsSUFDVCxPQUFPO0FBQ0wsWUFBTSxlQUFlLHFCQUFxQixRQUFRLE1BQU07QUFDeEQsMEJBQW9CO0FBQUEsUUFDbEIsTUFBTSxzQkFBc0I7QUFBQSxRQUM1QixPQUFPO0FBQUEsUUFDUCxhQUFhO0FBQUEsTUFDZixDQUFDO0FBQ0QsYUFBTztBQUFBLElBQ1Q7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBO0FBQUEsRUFDRjtBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJzc28udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQXBvbGxvQ2xpZW50LCB1c2VNdXRhdGlvbiwgdXNlUXVlcnkgfSBmcm9tICdAdnVlL2Fwb2xsby1jb21wb3NhYmxlJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7IFdvcmtzcGFjZVNzb0NoZWNrUXVlcnkgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgeyBnZXRGaXJzdEVycm9yTWVzc2FnZSB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgZGVsZXRlV29ya3NwYWNlU3NvUHJvdmlkZXJNdXRhdGlvbiB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9tdXRhdGlvbnMnXHJcbmltcG9ydCB7IHdvcmtzcGFjZVNzb0NoZWNrUXVlcnkgfSBmcm9tICd+L2xpYi93b3Jrc3BhY2VzL2dyYXBocWwvcXVlcmllcydcclxuaW1wb3J0IHR5cGUgeyBXb3Jrc3BhY2VTc29Qcm92aWRlclB1YmxpYyB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvaGVscGVycy90eXBlcydcclxuXHJcbi8qKlxyXG4gKiBGZXRjaGVzIGFuZCBwcm92aWRlcyBwdWJsaWMgU1NPIHdvcmtzcGFjZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSByZXN0IGFwaS5cclxuICogVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSBpZiBhIHdvcmtzcGFjZSBoYXMgU1NPIGVuYWJsZWQgYmVmb3JlIGF1dGhlbnRpY2F0aW9uXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlV29ya3NwYWNlUHVibGljU3NvQ2hlY2sgPSAod29ya3NwYWNlU2x1ZzogUmVmPHN0cmluZz4pID0+IHtcclxuICBjb25zdCBhcGlPcmlnaW4gPSB1c2VBcGlPcmlnaW4oKVxyXG4gIGNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcblxyXG4gIGNvbnN0IHtcclxuICAgIGRhdGE6IHdvcmtzcGFjZSxcclxuICAgIHN0YXR1cyxcclxuICAgIGVycm9yXHJcbiAgfSA9IHVzZUZldGNoPFdvcmtzcGFjZVNzb1Byb3ZpZGVyUHVibGljPihcclxuICAgIGNvbXB1dGVkKCgpID0+XHJcbiAgICAgIG5ldyBVUkwoYC9hcGkvdjEvd29ya3NwYWNlcy8ke3dvcmtzcGFjZVNsdWcudmFsdWV9L3Nzb2AsIGFwaU9yaWdpbikudG9TdHJpbmcoKVxyXG4gICAgKSxcclxuICAgIHtcclxuICAgICAgb25SZXNwb25zZUVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggd29ya3NwYWNlIFNTTyBwcm92aWRlcjonLCBlcnIpXHJcbiAgICAgIH1cclxuICAgIH1cclxuICApXHJcblxyXG4gIGNvbnN0IGhhc1Nzb0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhIXdvcmtzcGFjZS52YWx1ZT8uc3NvUHJvdmlkZXJOYW1lKVxyXG4gIGNvbnN0IGxvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMudmFsdWUgPT09ICdwZW5kaW5nJylcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHdvcmtzcGFjZSxcclxuICAgIGxvYWRpbmcsXHJcbiAgICBlcnJvcixcclxuICAgIGhhc1Nzb0VuYWJsZWRcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSB3b3Jrc3BhY2UgcmVxdWlyZXMgU1NPIGF1dGhlbnRpY2F0aW9uIGFuZCB0aGUgY3VycmVudCB1c2VyJ3MgU1NPIHN0YXR1cy5cclxuICogVXNlZCB0byBlbmZvcmNlIFNTTyBsb2dpbiByZXF1aXJlbWVudHMgZm9yIHdvcmtzcGFjZSBhY2Nlc3MuXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlV29ya3NwYWNlU3NvU3RhdHVzID0gKHBhcmFtczogeyB3b3Jrc3BhY2VTbHVnOiBSZWY8c3RyaW5nPiB9KSA9PiB7XHJcbiAgZ3JhcGhxbChgXHJcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfV29ya3NwYWNlIG9uIFdvcmtzcGFjZSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIHNzbyB7XHJcbiAgICAgICAgcHJvdmlkZXIge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIG5hbWVcclxuICAgICAgICAgIGNsaWVudElkXHJcbiAgICAgICAgICBpc3N1ZXJVcmxcclxuICAgICAgICB9XHJcbiAgICAgICAgc2Vzc2lvbiB7XHJcbiAgICAgICAgICB2YWxpZFVudGlsXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgYClcclxuXHJcbiAgZ3JhcGhxbChgXHJcbiAgICBmcmFnbWVudCBXb3Jrc3BhY2VTc29TdGF0dXNfVXNlciBvbiBVc2VyIHtcclxuICAgICAgZXhwaXJlZFNzb1Nlc3Npb25zIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIHNsdWdcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIGApXHJcblxyXG4gIGNvbnN0IHZhcmlhYmxlcyA9IGNvbXB1dGVkKCgpID0+ICh7XHJcbiAgICBzbHVnOiBwYXJhbXMud29ya3NwYWNlU2x1Zy52YWx1ZVxyXG4gIH0pKVxyXG5cclxuICBjb25zdCB7IHJlc3VsdCwgbG9hZGluZywgZXJyb3IgfSA9IHVzZVF1ZXJ5PFdvcmtzcGFjZVNzb0NoZWNrUXVlcnk+KFxyXG4gICAgd29ya3NwYWNlU3NvQ2hlY2tRdWVyeSxcclxuICAgIHZhcmlhYmxlcyxcclxuICAgICgpID0+ICh7IGVuYWJsZWQ6ICEhcGFyYW1zLndvcmtzcGFjZVNsdWcudmFsdWUgfSlcclxuICApXHJcblxyXG4gIGNvbnN0IGhhc1Nzb0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAhIXJlc3VsdC52YWx1ZT8ud29ya3NwYWNlQnlTbHVnLnNzbz8ucHJvdmlkZXIpXHJcbiAgY29uc3QgcHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LndvcmtzcGFjZUJ5U2x1Zy5zc28/LnByb3ZpZGVyKVxyXG5cclxuICBjb25zdCBuZWVkc1Nzb0xvZ2luID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFoYXNTc29FbmFibGVkLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuICAgIGlmICghcmVzdWx0LnZhbHVlPy5hY3RpdmVVc2VyKSByZXR1cm4gZmFsc2VcclxuICAgIHJldHVybiByZXN1bHQudmFsdWUuYWN0aXZlVXNlci5leHBpcmVkU3NvU2Vzc2lvbnMuc29tZShcclxuICAgICAgKHdvcmtzcGFjZSkgPT4gd29ya3NwYWNlLnNsdWcgPT09IHBhcmFtcy53b3Jrc3BhY2VTbHVnLnZhbHVlXHJcbiAgICApXHJcbiAgfSlcclxuXHJcbiAgY29uc3QgaXNTc29BdXRoZW50aWNhdGVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgaWYgKCFoYXNTc29FbmFibGVkLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuICAgIGlmIChuZWVkc1Nzb0xvZ2luLnZhbHVlKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICBjb25zdCBzZXNzaW9uID0gcmVzdWx0LnZhbHVlPy53b3Jrc3BhY2VCeVNsdWcuc3NvPy5zZXNzaW9uXHJcbiAgICByZXR1cm4gISFzZXNzaW9uICYmIG5ldyBEYXRlKHNlc3Npb24udmFsaWRVbnRpbCkgPiBuZXcgRGF0ZSgpXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIGhhc1Nzb0VuYWJsZWQsXHJcbiAgICBpc1Nzb0F1dGhlbnRpY2F0ZWQsXHJcbiAgICBuZWVkc1Nzb0xvZ2luLFxyXG4gICAgcHJvdmlkZXIsXHJcbiAgICBsb2FkaW5nLFxyXG4gICAgZXJyb3JcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBWYWxpZGF0ZXMgU1NPIGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVtZW50cyBmb3IgYSB3b3Jrc3BhY2UuXHJcbiAqIFJldHVybnMgYW4gZXJyb3IgbWVzc2FnZSBpZiBTU08gbG9naW4gaXMgcmVxdWlyZWQgYnV0IG5vdCBjb21wbGV0ZWQuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlV29ya3NwYWNlU3NvVmFsaWRhdGlvbih3b3Jrc3BhY2VTbHVnOiBSZWY8c3RyaW5nPikge1xyXG4gIGNvbnN0IGxvZ2dlciA9IHVzZUxvZ2dlcigpXHJcbiAgY29uc3QgeyBoYXNTc29FbmFibGVkLCBuZWVkc1Nzb0xvZ2luLCBlcnJvciB9ID0gdXNlV29ya3NwYWNlU3NvU3RhdHVzKHtcclxuICAgIHdvcmtzcGFjZVNsdWdcclxuICB9KVxyXG5cclxuICBjb25zdCBzc29FcnJvciA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIGlmIChlcnJvci52YWx1ZSkge1xyXG4gICAgICBsb2dnZXIuZXJyb3IoJ1NTTyBjaGVjayBmYWlsZWQ6JywgZXJyb3IudmFsdWUpXHJcbiAgICAgIHJldHVybiAnRmFpbGVkIHRvIGNoZWNrIHdvcmtzcGFjZSBTU08gcmVxdWlyZW1lbnRzJ1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNTc29FbmFibGVkLnZhbHVlICYmIG5lZWRzU3NvTG9naW4udmFsdWUpIHtcclxuICAgICAgcmV0dXJuICdZb3UgbmVlZCB0byBzaWduIGluIHdpdGggU1NPIHRvIGFjY2VzcyB0aGlzIHdvcmtzcGFjZS4nXHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9KVxyXG5cclxuICByZXR1cm4geyBzc29FcnJvciB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBQcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIHJlbW92ZSBTU08gY29uZmlndXJhdGlvbiBmcm9tIGEgd29ya3NwYWNlLlxyXG4gKiBPbmx5IGF2YWlsYWJsZSB0byB3b3Jrc3BhY2UgYWRtaW5pc3RyYXRvcnMuXHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gdXNlV29ya3NwYWNlU3NvRGVsZXRlKCkge1xyXG4gIGNvbnN0IHsgdHJpZ2dlck5vdGlmaWNhdGlvbiB9ID0gdXNlR2xvYmFsVG9hc3QoKVxyXG4gIGNvbnN0IG1peHBhbmVsID0gdXNlTWl4cGFuZWwoKVxyXG4gIGNvbnN0IGFwb2xsbyA9IHVzZUFwb2xsb0NsaWVudCgpLmNsaWVudFxyXG5cclxuICBjb25zdCB7IG11dGF0ZTogZGVsZXRlU3NvUHJvdmlkZXJNdXRhdGlvbiwgbG9hZGluZyB9ID0gdXNlTXV0YXRpb24oXHJcbiAgICBkZWxldGVXb3Jrc3BhY2VTc29Qcm92aWRlck11dGF0aW9uXHJcbiAgKVxyXG5cclxuICBjb25zdCBkZWxldGVTc29Qcm92aWRlciA9IGFzeW5jICh3b3Jrc3BhY2VJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkZWxldGVTc29Qcm92aWRlck11dGF0aW9uKHtcclxuICAgICAgd29ya3NwYWNlSWRcclxuICAgIH0pLmNhdGNoKGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdClcclxuXHJcbiAgICBpZiAocmVzdWx0Py5kYXRhPy53b3Jrc3BhY2VNdXRhdGlvbnM/LmRlbGV0ZVNzb1Byb3ZpZGVyKSB7XHJcbiAgICAgIC8vIFRPRE86IEJldHRlciBjYWNoZSB1cGRhdGVzXHJcbiAgICAgIGFwb2xsby5jYWNoZS5ldmljdCh7XHJcbiAgICAgICAgaWQ6IGdldENhY2hlSWQoJ1dvcmtzcGFjZScsIHdvcmtzcGFjZUlkKVxyXG4gICAgICB9KVxyXG5cclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLlN1Y2Nlc3MsXHJcbiAgICAgICAgdGl0bGU6ICdTU08gcHJvdmlkZXIgcmVtb3ZlZCcsXHJcbiAgICAgICAgZGVzY3JpcHRpb246ICdTU08gcHJvdmlkZXIgd2FzIHN1Y2Nlc3NmdWxseSByZW1vdmVkJ1xyXG4gICAgICB9KVxyXG5cclxuICAgICAgbWl4cGFuZWwudHJhY2soJ1dvcmtzcGFjZSBTU08gUHJvdmlkZXIgUmVtb3ZlZCcsIHtcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXHJcbiAgICAgICAgd29ya3NwYWNlX2lkOiB3b3Jrc3BhY2VJZFxyXG4gICAgICB9KVxyXG5cclxuICAgICAgcmV0dXJuIHRydWVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEZpcnN0RXJyb3JNZXNzYWdlKHJlc3VsdD8uZXJyb3JzKVxyXG4gICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuRGFuZ2VyLFxyXG4gICAgICAgIHRpdGxlOiAnRmFpbGVkIHRvIHJlbW92ZSBTU08gcHJvdmlkZXInLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvck1lc3NhZ2VcclxuICAgICAgfSlcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgZGVsZXRlU3NvUHJvdmlkZXIsXHJcbiAgICBsb2FkaW5nXHJcbiAgfVxyXG59XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9saWIvd29ya3NwYWNlcy9jb21wb3NhYmxlcy9zc28udHMifQ==