240 lines
23 KiB
Plaintext
240 lines
23 KiB
Plaintext
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 |