import { useQuery, useMutation, useApolloClient } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { discoverableWorkspacesQuery } from "/_nuxt/lib/workspaces/graphql/queries.ts"; import { dismissDiscoverableWorkspaceMutation, requestToJoinWorkspaceMutation } from "/_nuxt/lib/workspaces/graphql/mutations.ts"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { convertThrowIntoFetchResult, getFirstErrorMessage, getCacheId } from "/_nuxt/lib/common/helpers/graphql.ts"; import { activeUserWorkspaceExistenceCheckQuery } from "/_nuxt/lib/auth/graphql/queries.ts"; import { useIsWorkspacesEnabled, useActiveUser, useGlobalToast } from "/_nuxt/composables/globals.ts"; import { computed, ref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { modifyObjectField, ToastNotificationType } from "/_nuxt/utils/globals.ts"; graphql(` fragment DiscoverableWorkspace_LimitedWorkspace on LimitedWorkspace { id name logo description slug discoverabilityAutoJoinEnabled team { totalCount items { user { id name avatar } } } adminTeam { user { id name avatar } } } `); graphql(` fragment WorkspaceJoinRequests_LimitedWorkspaceJoinRequest on LimitedWorkspaceJoinRequest { id status workspace { id name logo slug discoverabilityAutoJoinEnabled adminTeam { user { id name avatar } } team { totalCount items { user { id name avatar } } } } } `); export const useDiscoverableWorkspaces = () => { const isWorkspacesEnabled = useIsWorkspacesEnabled(); const { result, loading, refetch } = useQuery( discoverableWorkspacesQuery, void 0, { enabled: isWorkspacesEnabled } ); const { mutate: requestToJoin } = useMutation(requestToJoinWorkspaceMutation); const { mutate: dismissWorkspace } = useMutation(dismissDiscoverableWorkspaceMutation); const { activeUser } = useActiveUser(); const mixpanel = useMixpanel(); const { triggerNotification } = useGlobalToast(); const apollo = useApolloClient().client; const discoverableWorkspaces = computed( () => result.value?.activeUser?.discoverableWorkspaces ); const workspaceJoinRequests = computed( () => result.value?.activeUser?.workspaceJoinRequests ); const discoverableWorkspacesAndJoinRequests = computed(() => { const joinRequests = workspaceJoinRequests.value?.items?.filter((r) => r.status !== "approved")?.map((request) => ({ ...request.workspace, requestStatus: request.status })) || []; const discoverable = discoverableWorkspaces.value?.map((workspace) => ({ ...workspace, requestStatus: null })) || []; return [...joinRequests, ...discoverable]; }); const hasDiscoverableWorkspaces = computed( () => discoverableWorkspaces.value && discoverableWorkspaces.value?.length > 0 ); const hasDiscoverableJoinRequests = computed( () => workspaceJoinRequests.value && workspaceJoinRequests.value?.items.length > 0 ); const hasDiscoverableWorkspacesOrJoinRequests = computed(() => { const requests = discoverableWorkspacesAndJoinRequests.value; return requests && requests.length > 0; }); const discoverableWorkspacesCount = computed( () => discoverableWorkspaces.value?.length || 0 ); const discoverableJoinRequestsCount = computed( () => workspaceJoinRequests.value?.items.length || 0 ); const discoverableWorkspacesAndJoinRequestsCount = computed( () => discoverableWorkspacesAndJoinRequests.value?.length || 0 ); const requestToJoinWorkspace = async (workspace, location) => { const activeUserId = activeUser.value?.id; if (!activeUserId) return; const result2 = await requestToJoin({ input: { workspaceId: workspace.id } }).catch(convertThrowIntoFetchResult); if (result2?.data) { await refetch(); modifyObjectField( apollo.cache, getCacheId("User", activeUserId), "workspaces", ({ helpers: { createUpdatedValue, ref } }) => { return createUpdatedValue(({ update }) => { update("totalCount", (totalCount) => totalCount + 1); update("items", (items) => [...items, ref("Workspace", workspace.id)]); }); }, { autoEvictFiltered: true } ); apollo.query({ query: activeUserWorkspaceExistenceCheckQuery, variables: { filter: { personalOnly: true } }, fetchPolicy: "network-only" }); if (workspace.discoverabilityAutoJoinEnabled) { mixpanel.track("Workspace Auto Joined", { workspaceId: workspace.id, location, // eslint-disable-next-line camelcase workspace_id: workspace.id }); triggerNotification({ title: "Workspace joined", description: `You have joined ${workspace.name}.`, type: ToastNotificationType.Success }); } else { mixpanel.track("Workspace Join Request Sent", { workspaceId: workspace.id, location, // eslint-disable-next-line camelcase workspace_id: workspace.id }); triggerNotification({ title: "Request sent", description: "Your request to join the workspace has been sent.", type: ToastNotificationType.Success }); } } else { const errorMessage = getFirstErrorMessage(result2?.errors); triggerNotification({ title: "Failed to send request", description: errorMessage, type: ToastNotificationType.Danger }); } }; const dismissDiscoverableWorkspace = async (workspaceId) => { const result2 = await dismissWorkspace({ input: { workspaceId } }).catch(convertThrowIntoFetchResult); const cache = apollo.cache; const activeUserId = activeUser.value?.id; if (!activeUserId) return; if (result2?.data) { triggerNotification({ title: "Discoverable workspace dismissed", type: ToastNotificationType.Info }); cache.modify({ id: getCacheId("User", activeUserId), fields: { discoverableWorkspaces(existingRefs = [], { readField }) { return existingRefs.filter( (ref) => { const id = readField("id", ref); return id !== workspaceId; } ); } } }); } else { const errorMessage = getFirstErrorMessage(result2?.errors); triggerNotification({ title: "Failed to dismiss workspace", description: errorMessage, type: ToastNotificationType.Danger }); } }; return { hasDiscoverableWorkspaces, hasDiscoverableJoinRequests, hasDiscoverableWorkspacesOrJoinRequests, discoverableJoinRequestsCount, discoverableWorkspacesCount, discoverableWorkspacesAndJoinRequestsCount, discoverableWorkspaces, dismissDiscoverableWorkspace, workspaceJoinRequests, discoverableWorkspacesAndJoinRequests, requestToJoinWorkspace, loading }; }; //# sourceMappingURL=data:application/json;base64,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QUFNLHNCQUFzQjtBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUNIO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0YiLCJuYW1lcyI6WyJyZXN1bHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZGlzY292ZXJhYmxlV29ya3NwYWNlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VRdWVyeSwgdXNlTXV0YXRpb24sIHVzZUFwb2xsb0NsaWVudCB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGRpc2NvdmVyYWJsZVdvcmtzcGFjZXNRdWVyeSB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQge1xyXG4gIGRpc21pc3NEaXNjb3ZlcmFibGVXb3Jrc3BhY2VNdXRhdGlvbixcclxuICByZXF1ZXN0VG9Kb2luV29ya3NwYWNlTXV0YXRpb25cclxufSBmcm9tICd+L2xpYi93b3Jrc3BhY2VzL2dyYXBocWwvbXV0YXRpb25zJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHR5cGUgeyBDYWNoZU9iamVjdFJlZmVyZW5jZSB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy9ncmFwaHFsJ1xyXG5pbXBvcnQge1xyXG4gIGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdCxcclxuICBnZXRGaXJzdEVycm9yTWVzc2FnZSxcclxuICBnZXRDYWNoZUlkXHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9oZWxwZXJzL2dyYXBocWwnXHJcbmltcG9ydCB0eXBlIHsgRGlzY292ZXJhYmxlV29ya3NwYWNlX0xpbWl0ZWRXb3Jrc3BhY2VGcmFnbWVudCB9IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IGFjdGl2ZVVzZXJXb3Jrc3BhY2VFeGlzdGVuY2VDaGVja1F1ZXJ5IH0gZnJvbSAnfi9saWIvYXV0aC9ncmFwaHFsL3F1ZXJpZXMnXHJcblxyXG5ncmFwaHFsKGBcclxuICBmcmFnbWVudCBEaXNjb3ZlcmFibGVXb3Jrc3BhY2VfTGltaXRlZFdvcmtzcGFjZSBvbiBMaW1pdGVkV29ya3NwYWNlIHtcclxuICAgIGlkXHJcbiAgICBuYW1lXHJcbiAgICBsb2dvXHJcbiAgICBkZXNjcmlwdGlvblxyXG4gICAgc2x1Z1xyXG4gICAgZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkXHJcbiAgICB0ZWFtIHtcclxuICAgICAgdG90YWxDb3VudFxyXG4gICAgICBpdGVtcyB7XHJcbiAgICAgICAgdXNlciB7XHJcbiAgICAgICAgICBpZFxyXG4gICAgICAgICAgbmFtZVxyXG4gICAgICAgICAgYXZhdGFyXHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhZG1pblRlYW0ge1xyXG4gICAgICB1c2VyIHtcclxuICAgICAgICBpZFxyXG4gICAgICAgIG5hbWVcclxuICAgICAgICBhdmF0YXJcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuYClcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IFdvcmtzcGFjZUpvaW5SZXF1ZXN0c19MaW1pdGVkV29ya3NwYWNlSm9pblJlcXVlc3Qgb24gTGltaXRlZFdvcmtzcGFjZUpvaW5SZXF1ZXN0IHtcclxuICAgIGlkXHJcbiAgICBzdGF0dXNcclxuICAgIHdvcmtzcGFjZSB7XHJcbiAgICAgIGlkXHJcbiAgICAgIG5hbWVcclxuICAgICAgbG9nb1xyXG4gICAgICBzbHVnXHJcbiAgICAgIGRpc2NvdmVyYWJpbGl0eUF1dG9Kb2luRW5hYmxlZFxyXG4gICAgICBhZG1pblRlYW0ge1xyXG4gICAgICAgIHVzZXIge1xyXG4gICAgICAgICAgaWRcclxuICAgICAgICAgIG5hbWVcclxuICAgICAgICAgIGF2YXRhclxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0ZWFtIHtcclxuICAgICAgICB0b3RhbENvdW50XHJcbiAgICAgICAgaXRlbXMge1xyXG4gICAgICAgICAgdXNlciB7XHJcbiAgICAgICAgICAgIGlkXHJcbiAgICAgICAgICAgIG5hbWVcclxuICAgICAgICAgICAgYXZhdGFyXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5gKVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZURpc2NvdmVyYWJsZVdvcmtzcGFjZXMgPSAoKSA9PiB7XHJcbiAgY29uc3QgaXNXb3Jrc3BhY2VzRW5hYmxlZCA9IHVzZUlzV29ya3NwYWNlc0VuYWJsZWQoKVxyXG5cclxuICBjb25zdCB7IHJlc3VsdCwgbG9hZGluZywgcmVmZXRjaCB9ID0gdXNlUXVlcnkoXHJcbiAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzUXVlcnksXHJcbiAgICB1bmRlZmluZWQsXHJcbiAgICB7XHJcbiAgICAgIGVuYWJsZWQ6IGlzV29ya3NwYWNlc0VuYWJsZWRcclxuICAgIH1cclxuICApXHJcblxyXG4gIGNvbnN0IHsgbXV0YXRlOiByZXF1ZXN0VG9Kb2luIH0gPSB1c2VNdXRhdGlvbihyZXF1ZXN0VG9Kb2luV29ya3NwYWNlTXV0YXRpb24pXHJcbiAgY29uc3QgeyBtdXRhdGU6IGRpc21pc3NXb3Jrc3BhY2UgfSA9IHVzZU11dGF0aW9uKGRpc21pc3NEaXNjb3ZlcmFibGVXb3Jrc3BhY2VNdXRhdGlvbilcclxuXHJcbiAgY29uc3QgeyBhY3RpdmVVc2VyIH0gPSB1c2VBY3RpdmVVc2VyKClcclxuICBjb25zdCBtaXhwYW5lbCA9IHVzZU1peHBhbmVsKClcclxuICBjb25zdCB7IHRyaWdnZXJOb3RpZmljYXRpb24gfSA9IHVzZUdsb2JhbFRvYXN0KClcclxuICBjb25zdCBhcG9sbG8gPSB1c2VBcG9sbG9DbGllbnQoKS5jbGllbnRcclxuXHJcbiAgY29uc3QgZGlzY292ZXJhYmxlV29ya3NwYWNlcyA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gcmVzdWx0LnZhbHVlPy5hY3RpdmVVc2VyPy5kaXNjb3ZlcmFibGVXb3Jrc3BhY2VzXHJcbiAgKVxyXG5cclxuICBjb25zdCB3b3Jrc3BhY2VKb2luUmVxdWVzdHMgPSBjb21wdXRlZChcclxuICAgICgpID0+IHJlc3VsdC52YWx1ZT8uYWN0aXZlVXNlcj8ud29ya3NwYWNlSm9pblJlcXVlc3RzXHJcbiAgKVxyXG5cclxuICBjb25zdCBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzQW5kSm9pblJlcXVlc3RzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gICAgY29uc3Qgam9pblJlcXVlc3RzID1cclxuICAgICAgd29ya3NwYWNlSm9pblJlcXVlc3RzLnZhbHVlPy5pdGVtc1xyXG4gICAgICAgID8uZmlsdGVyKChyKSA9PiByLnN0YXR1cyAhPT0gJ2FwcHJvdmVkJylcclxuICAgICAgICA/Lm1hcCgocmVxdWVzdCkgPT4gKHtcclxuICAgICAgICAgIC4uLnJlcXVlc3Qud29ya3NwYWNlLFxyXG4gICAgICAgICAgcmVxdWVzdFN0YXR1czogcmVxdWVzdC5zdGF0dXNcclxuICAgICAgICB9KSkgfHwgW11cclxuXHJcbiAgICBjb25zdCBkaXNjb3ZlcmFibGUgPVxyXG4gICAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzLnZhbHVlPy5tYXAoKHdvcmtzcGFjZSkgPT4gKHtcclxuICAgICAgICAuLi53b3Jrc3BhY2UsXHJcbiAgICAgICAgcmVxdWVzdFN0YXR1czogbnVsbFxyXG4gICAgICB9KSkgfHwgW11cclxuXHJcbiAgICByZXR1cm4gWy4uLmpvaW5SZXF1ZXN0cywgLi4uZGlzY292ZXJhYmxlXVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IGhhc0Rpc2NvdmVyYWJsZVdvcmtzcGFjZXMgPSBjb21wdXRlZChcclxuICAgICgpID0+IGRpc2NvdmVyYWJsZVdvcmtzcGFjZXMudmFsdWUgJiYgZGlzY292ZXJhYmxlV29ya3NwYWNlcy52YWx1ZT8ubGVuZ3RoID4gMFxyXG4gIClcclxuXHJcbiAgY29uc3QgaGFzRGlzY292ZXJhYmxlSm9pblJlcXVlc3RzID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB3b3Jrc3BhY2VKb2luUmVxdWVzdHMudmFsdWUgJiYgd29ya3NwYWNlSm9pblJlcXVlc3RzLnZhbHVlPy5pdGVtcy5sZW5ndGggPiAwXHJcbiAgKVxyXG5cclxuICBjb25zdCBoYXNEaXNjb3ZlcmFibGVXb3Jrc3BhY2VzT3JKb2luUmVxdWVzdHMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgICBjb25zdCByZXF1ZXN0cyA9IGRpc2NvdmVyYWJsZVdvcmtzcGFjZXNBbmRKb2luUmVxdWVzdHMudmFsdWVcclxuICAgIHJldHVybiByZXF1ZXN0cyAmJiByZXF1ZXN0cy5sZW5ndGggPiAwXHJcbiAgfSlcclxuXHJcbiAgY29uc3QgZGlzY292ZXJhYmxlV29ya3NwYWNlc0NvdW50ID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzLnZhbHVlPy5sZW5ndGggfHwgMFxyXG4gIClcclxuXHJcbiAgY29uc3QgZGlzY292ZXJhYmxlSm9pblJlcXVlc3RzQ291bnQgPSBjb21wdXRlZChcclxuICAgICgpID0+IHdvcmtzcGFjZUpvaW5SZXF1ZXN0cy52YWx1ZT8uaXRlbXMubGVuZ3RoIHx8IDBcclxuICApXHJcblxyXG4gIGNvbnN0IGRpc2NvdmVyYWJsZVdvcmtzcGFjZXNBbmRKb2luUmVxdWVzdHNDb3VudCA9IGNvbXB1dGVkKFxyXG4gICAgKCkgPT4gZGlzY292ZXJhYmxlV29ya3NwYWNlc0FuZEpvaW5SZXF1ZXN0cy52YWx1ZT8ubGVuZ3RoIHx8IDBcclxuICApXHJcblxyXG4gIGNvbnN0IHJlcXVlc3RUb0pvaW5Xb3Jrc3BhY2UgPSBhc3luYyAoXHJcbiAgICB3b3Jrc3BhY2U6IERpc2NvdmVyYWJsZVdvcmtzcGFjZV9MaW1pdGVkV29ya3NwYWNlRnJhZ21lbnQsXHJcbiAgICBsb2NhdGlvbjogc3RyaW5nXHJcbiAgKSA9PiB7XHJcbiAgICBjb25zdCBhY3RpdmVVc2VySWQgPSBhY3RpdmVVc2VyLnZhbHVlPy5pZFxyXG5cclxuICAgIGlmICghYWN0aXZlVXNlcklkKSByZXR1cm5cclxuXHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0VG9Kb2luKHtcclxuICAgICAgaW5wdXQ6IHsgd29ya3NwYWNlSWQ6IHdvcmtzcGFjZS5pZCB9XHJcbiAgICB9KS5jYXRjaChjb252ZXJ0VGhyb3dJbnRvRmV0Y2hSZXN1bHQpXHJcblxyXG4gICAgaWYgKHJlc3VsdD8uZGF0YSkge1xyXG4gICAgICBhd2FpdCByZWZldGNoKClcclxuXHJcbiAgICAgIG1vZGlmeU9iamVjdEZpZWxkKFxyXG4gICAgICAgIGFwb2xsby5jYWNoZSxcclxuICAgICAgICBnZXRDYWNoZUlkKCdVc2VyJywgYWN0aXZlVXNlcklkKSxcclxuICAgICAgICAnd29ya3NwYWNlcycsXHJcbiAgICAgICAgKHsgaGVscGVyczogeyBjcmVhdGVVcGRhdGVkVmFsdWUsIHJlZiB9IH0pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjcmVhdGVVcGRhdGVkVmFsdWUoKHsgdXBkYXRlIH0pID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlKCd0b3RhbENvdW50JywgKHRvdGFsQ291bnQpID0+IHRvdGFsQ291bnQgKyAxKVxyXG4gICAgICAgICAgICB1cGRhdGUoJ2l0ZW1zJywgKGl0ZW1zKSA9PiBbLi4uaXRlbXMsIHJlZignV29ya3NwYWNlJywgd29ya3NwYWNlLmlkKV0pXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgYXV0b0V2aWN0RmlsdGVyZWQ6IHRydWVcclxuICAgICAgICB9XHJcbiAgICAgIClcclxuXHJcbiAgICAgIGFwb2xsby5xdWVyeSh7XHJcbiAgICAgICAgcXVlcnk6IGFjdGl2ZVVzZXJXb3Jrc3BhY2VFeGlzdGVuY2VDaGVja1F1ZXJ5LFxyXG4gICAgICAgIHZhcmlhYmxlczoge1xyXG4gICAgICAgICAgZmlsdGVyOiB7IHBlcnNvbmFsT25seTogdHJ1ZSB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBmZXRjaFBvbGljeTogJ25ldHdvcmstb25seSdcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmICh3b3Jrc3BhY2UuZGlzY292ZXJhYmlsaXR5QXV0b0pvaW5FbmFibGVkKSB7XHJcbiAgICAgICAgbWl4cGFuZWwudHJhY2soJ1dvcmtzcGFjZSBBdXRvIEpvaW5lZCcsIHtcclxuICAgICAgICAgIHdvcmtzcGFjZUlkOiB3b3Jrc3BhY2UuaWQsXHJcbiAgICAgICAgICBsb2NhdGlvbixcclxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcclxuICAgICAgICAgIHdvcmtzcGFjZV9pZDogd29ya3NwYWNlLmlkXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgICB0aXRsZTogJ1dvcmtzcGFjZSBqb2luZWQnLFxyXG4gICAgICAgICAgZGVzY3JpcHRpb246IGBZb3UgaGF2ZSBqb2luZWQgJHt3b3Jrc3BhY2UubmFtZX0uYCxcclxuICAgICAgICAgIHR5cGU6IFRvYXN0Tm90aWZpY2F0aW9uVHlwZS5TdWNjZXNzXHJcbiAgICAgICAgfSlcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtaXhwYW5lbC50cmFjaygnV29ya3NwYWNlIEpvaW4gUmVxdWVzdCBTZW50Jywge1xyXG4gICAgICAgICAgd29ya3NwYWNlSWQ6IHdvcmtzcGFjZS5pZCxcclxuICAgICAgICAgIGxvY2F0aW9uLFxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgICAgd29ya3NwYWNlX2lkOiB3b3Jrc3BhY2UuaWRcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBzZW50JyxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiAnWW91ciByZXF1ZXN0IHRvIGpvaW4gdGhlIHdvcmtzcGFjZSBoYXMgYmVlbiBzZW50LicsXHJcbiAgICAgICAgICB0eXBlOiBUb2FzdE5vdGlmaWNhdGlvblR5cGUuU3VjY2Vzc1xyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdldEZpcnN0RXJyb3JNZXNzYWdlKHJlc3VsdD8uZXJyb3JzKVxyXG4gICAgICB0cmlnZ2VyTm90aWZpY2F0aW9uKHtcclxuICAgICAgICB0aXRsZTogJ0ZhaWxlZCB0byBzZW5kIHJlcXVlc3QnLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBlcnJvck1lc3NhZ2UsXHJcbiAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLkRhbmdlclxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3QgZGlzbWlzc0Rpc2NvdmVyYWJsZVdvcmtzcGFjZSA9IGFzeW5jICh3b3Jrc3BhY2VJZDogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXNtaXNzV29ya3NwYWNlKHtcclxuICAgICAgaW5wdXQ6IHsgd29ya3NwYWNlSWQgfVxyXG4gICAgfSkuY2F0Y2goY29udmVydFRocm93SW50b0ZldGNoUmVzdWx0KVxyXG4gICAgY29uc3QgY2FjaGUgPSBhcG9sbG8uY2FjaGVcclxuICAgIGNvbnN0IGFjdGl2ZVVzZXJJZCA9IGFjdGl2ZVVzZXIudmFsdWU/LmlkXHJcblxyXG4gICAgaWYgKCFhY3RpdmVVc2VySWQpIHJldHVyblxyXG5cclxuICAgIGlmIChyZXN1bHQ/LmRhdGEpIHtcclxuICAgICAgdHJpZ2dlck5vdGlmaWNhdGlvbih7XHJcbiAgICAgICAgdGl0bGU6ICdEaXNjb3ZlcmFibGUgd29ya3NwYWNlIGRpc21pc3NlZCcsXHJcbiAgICAgICAgdHlwZTogVG9hc3ROb3RpZmljYXRpb25UeXBlLkluZm9cclxuICAgICAgfSlcclxuXHJcbiAgICAgIGNhY2hlLm1vZGlmeSh7XHJcbiAgICAgICAgaWQ6IGdldENhY2hlSWQoJ1VzZXInLCBhY3RpdmVVc2VySWQpLFxyXG4gICAgICAgIGZpZWxkczoge1xyXG4gICAgICAgICAgZGlzY292ZXJhYmxlV29ya3NwYWNlcyhleGlzdGluZ1JlZnMgPSBbXSwgeyByZWFkRmllbGQgfSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZXhpc3RpbmdSZWZzLmZpbHRlcihcclxuICAgICAgICAgICAgICAocmVmOiBDYWNoZU9iamVjdFJlZmVyZW5jZTwnTGltaXRlZFdvcmtzcGFjZSc+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpZCA9IHJlYWRGaWVsZCgnaWQnLCByZWYpXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaWQgIT09IHdvcmtzcGFjZUlkXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ2V0Rmlyc3RFcnJvck1lc3NhZ2UocmVzdWx0Py5lcnJvcnMpXHJcbiAgICAgIHRyaWdnZXJOb3RpZmljYXRpb24oe1xyXG4gICAgICAgIHRpdGxlOiAnRmFpbGVkIHRvIGRpc21pc3Mgd29ya3NwYWNlJyxcclxuICAgICAgICBkZXNjcmlwdGlvbjogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgIHR5cGU6IFRvYXN0Tm90aWZpY2F0aW9uVHlwZS5EYW5nZXJcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiB7XHJcbiAgICBoYXNEaXNjb3ZlcmFibGVXb3Jrc3BhY2VzLFxyXG4gICAgaGFzRGlzY292ZXJhYmxlSm9pblJlcXVlc3RzLFxyXG4gICAgaGFzRGlzY292ZXJhYmxlV29ya3NwYWNlc09ySm9pblJlcXVlc3RzLFxyXG4gICAgZGlzY292ZXJhYmxlSm9pblJlcXVlc3RzQ291bnQsXHJcbiAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzQ291bnQsXHJcbiAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzQW5kSm9pblJlcXVlc3RzQ291bnQsXHJcbiAgICBkaXNjb3ZlcmFibGVXb3Jrc3BhY2VzLFxyXG4gICAgZGlzbWlzc0Rpc2NvdmVyYWJsZVdvcmtzcGFjZSxcclxuICAgIHdvcmtzcGFjZUpvaW5SZXF1ZXN0cyxcclxuICAgIGRpc2NvdmVyYWJsZVdvcmtzcGFjZXNBbmRKb2luUmVxdWVzdHMsXHJcbiAgICByZXF1ZXN0VG9Kb2luV29ya3NwYWNlLFxyXG4gICAgbG9hZGluZ1xyXG4gIH1cclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL3dvcmtzcGFjZXMvY29tcG9zYWJsZXMvZGlzY292ZXJhYmxlV29ya3NwYWNlcy50cyJ9