@nlabs/metropolisjs 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/copilot-instructions.md +167 -0
- package/AGENTS.md +13 -0
- package/CHANGELOG.md +112 -0
- package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
- package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
- package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
- package/README.md +1343 -0
- package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
- package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
- package/docs/ACTIONS.md +63 -0
- package/docs/COLLECTIONS.md +1038 -0
- package/docs/CONNECTIONS.md +1367 -0
- package/docs/CRUD_INTEGRATION.md +702 -0
- package/examples/connections-usage.tsx +909 -0
- package/examples/content-actions-usage.ts +144 -0
- package/examples/crud-usage.tsx +847 -0
- package/examples/extensibility-usage.tsx +889 -0
- package/examples/factory-pattern-usage.ts +283 -0
- package/examples/i18n-import-examples.ts +86 -0
- package/examples/i18n-namespace-usage.ts +118 -0
- package/examples/i18next-singleton-demo.ts +187 -0
- package/examples/permission-system-usage.tsx +415 -0
- package/examples/project-details.tsx +397 -0
- package/examples/shared-i18n-usage.tsx +203 -0
- package/examples/signup-error-handling.ts +100 -0
- package/examples/translation-types.ts +86 -0
- package/examples/translation-usage.tsx +336 -0
- package/factoryPatternGuide.md +244 -0
- package/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +26 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
- package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
- package/lib/actions/appActions/appActions.d.ts +29 -0
- package/lib/actions/appActions/appActions.d.ts.map +1 -0
- package/lib/actions/appActions/appActions.js +159 -0
- package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
- package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
- package/lib/actions/connectionActions/connectionActions.js +131 -0
- package/lib/actions/contentActions/contentActions.d.ts +34 -0
- package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
- package/lib/actions/contentActions/contentActions.js +314 -0
- package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
- package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
- package/lib/actions/conversationActions/conversationActions.js +225 -0
- package/lib/actions/eventActions/eventActions.d.ts +65 -0
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -0
- package/lib/actions/groupActions/groupActions.d.ts +30 -0
- package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
- package/lib/actions/groupActions/groupActions.js +229 -0
- package/lib/actions/imageActions/imageActions.d.ts +62 -0
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -0
- package/lib/actions/index.d.ts +21 -0
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -0
- package/lib/actions/locationActions/locationActions.d.ts +60 -0
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -0
- package/lib/actions/messageActions/messageActions.d.ts +38 -0
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -0
- package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
- package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
- package/lib/actions/permissionActions/permissionActions.js +330 -0
- package/lib/actions/personaActions/personaActions.d.ts +65 -0
- package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
- package/lib/actions/personaActions/personaActions.js +572 -0
- package/lib/actions/postActions/postActions.d.ts +36 -0
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -0
- package/lib/actions/reactionActions/reactionActions.d.ts +38 -0
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -0
- package/lib/actions/sseActions/sseActions.d.ts +38 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
- package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
- package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
- package/lib/actions/tagActions/tagActions.d.ts +37 -0
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -0
- package/lib/actions/translationActions/translationActions.d.ts +38 -0
- package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
- package/lib/actions/translationActions/translationActions.js +189 -0
- package/lib/actions/userActions/userActions.d.ts +78 -0
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +844 -0
- package/lib/actions/videoActions/videoActions.d.ts +41 -0
- package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
- package/lib/actions/videoActions/videoActions.js +532 -0
- package/lib/actions/websocketActions/websocketActions.d.ts +30 -0
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
- package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
- package/lib/adapters/appAdapter/appAdapter.js +90 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +21 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -0
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +32 -0
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +24 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -0
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +46 -0
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -0
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +30 -0
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
- package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
- package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts +38 -0
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -0
- package/lib/adapters/index.d.ts +34 -0
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -0
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +28 -0
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -0
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +31 -0
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
- package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts +44 -0
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -0
- package/lib/adapters/postAdapter/postAdapter.d.ts +33 -0
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +23 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +17 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +24 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -0
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +21 -0
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
- package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
- package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts +67 -0
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
- package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
- package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
- package/lib/config/index.d.ts +44 -0
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -0
- package/lib/constants/Collections.d.ts +44 -0
- package/lib/constants/Collections.d.ts.map +1 -0
- package/lib/constants/Collections.js +40 -0
- package/lib/constants/MetropolisConstants.d.ts +15 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -0
- package/lib/graphql/message.d.ts +3 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +20 -0
- package/lib/graphql/notification.d.ts +3 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +20 -0
- package/lib/graphql/session.d.ts +2 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +17 -0
- package/lib/index.d.ts +52 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -0
- package/lib/stores/appStore.d.ts +23 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -0
- package/lib/stores/contentStore.d.ts +36 -0
- package/lib/stores/contentStore.d.ts.map +1 -0
- package/lib/stores/contentStore.js +139 -0
- package/lib/stores/conversationStore.d.ts +38 -0
- package/lib/stores/conversationStore.d.ts.map +1 -0
- package/lib/stores/conversationStore.js +117 -0
- package/lib/stores/eventStore.d.ts +37 -0
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -0
- package/lib/stores/groupStore.d.ts +37 -0
- package/lib/stores/groupStore.d.ts.map +1 -0
- package/lib/stores/groupStore.js +68 -0
- package/lib/stores/imageStore.d.ts +40 -0
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -0
- package/lib/stores/index.d.ts +24 -0
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -0
- package/lib/stores/locationStore.d.ts +34 -0
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -0
- package/lib/stores/messageStore.d.ts +51 -0
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -0
- package/lib/stores/notificationStore.d.ts +33 -0
- package/lib/stores/notificationStore.d.ts.map +1 -0
- package/lib/stores/notificationStore.js +55 -0
- package/lib/stores/permissionStore.d.ts +37 -0
- package/lib/stores/permissionStore.d.ts.map +1 -0
- package/lib/stores/permissionStore.js +117 -0
- package/lib/stores/personaStore.d.ts +26 -0
- package/lib/stores/personaStore.d.ts.map +1 -0
- package/lib/stores/personaStore.js +118 -0
- package/lib/stores/postStore.d.ts +34 -0
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -0
- package/lib/stores/reactionStore.d.ts +25 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -0
- package/lib/stores/subscriptionStore.d.ts +41 -0
- package/lib/stores/subscriptionStore.d.ts.map +1 -0
- package/lib/stores/subscriptionStore.js +85 -0
- package/lib/stores/tagStore.d.ts +34 -0
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -0
- package/lib/stores/translationStore.d.ts +42 -0
- package/lib/stores/translationStore.d.ts.map +1 -0
- package/lib/stores/translationStore.js +122 -0
- package/lib/stores/userStore.d.ts +74 -0
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -0
- package/lib/stores/videoStore.d.ts +39 -0
- package/lib/stores/videoStore.d.ts.map +1 -0
- package/lib/stores/videoStore.js +132 -0
- package/lib/stores/websocketStore.d.ts +24 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -0
- package/lib/types/apps.types.d.ts +17 -0
- package/lib/types/apps.types.d.ts.map +1 -0
- package/lib/types/apps.types.js +6 -0
- package/lib/types/common.types.d.ts +31 -0
- package/lib/types/common.types.d.ts.map +1 -0
- package/lib/types/common.types.js +6 -0
- package/lib/types/conversations.types.d.ts +17 -0
- package/lib/types/conversations.types.d.ts.map +1 -0
- package/lib/types/conversations.types.js +6 -0
- package/lib/types/edges.types.d.ts +38 -0
- package/lib/types/edges.types.d.ts.map +1 -0
- package/lib/types/edges.types.js +6 -0
- package/lib/types/groups.types.d.ts +19 -0
- package/lib/types/groups.types.d.ts.map +1 -0
- package/lib/types/groups.types.js +6 -0
- package/lib/types/index.d.ts +12 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +12 -0
- package/lib/types/subscriptions.types.d.ts +32 -0
- package/lib/types/subscriptions.types.d.ts.map +1 -0
- package/lib/types/subscriptions.types.js +6 -0
- package/lib/types/videos.types.d.ts +61 -0
- package/lib/types/videos.types.d.ts.map +1 -0
- package/lib/types/videos.types.js +6 -0
- package/lib/utils/MetropolisProvider.d.ts +58 -0
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -0
- package/lib/utils/actionFactory.d.ts +24 -0
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -0
- package/lib/utils/api.d.ts +44 -0
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +253 -0
- package/lib/utils/app.d.ts +7 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -0
- package/lib/utils/baseActionFactory.d.ts +16 -0
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -0
- package/lib/utils/configUtils.d.ts +11 -0
- package/lib/utils/configUtils.d.ts.map +1 -0
- package/lib/utils/configUtils.js +20 -0
- package/lib/utils/dateUtils.d.ts +3 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -0
- package/lib/utils/file.d.ts +3 -0
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -0
- package/lib/utils/i18n.d.ts +7 -0
- package/lib/utils/i18n.d.ts.map +1 -0
- package/lib/utils/i18n.js +96 -0
- package/lib/utils/index.d.ts +20 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +26 -0
- package/lib/utils/location.d.ts +10 -0
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -0
- package/lib/utils/permissionUtils.d.ts +22 -0
- package/lib/utils/permissionUtils.d.ts.map +1 -0
- package/lib/utils/permissionUtils.js +72 -0
- package/lib/utils/requestCache.d.ts +8 -0
- package/lib/utils/requestCache.d.ts.map +1 -0
- package/lib/utils/requestCache.js +53 -0
- package/lib/utils/session.d.ts +14 -0
- package/lib/utils/session.d.ts.map +1 -0
- package/lib/utils/session.js +107 -0
- package/lib/utils/useConversationTyping.d.ts +26 -0
- package/lib/utils/useConversationTyping.d.ts.map +1 -0
- package/lib/utils/useConversationTyping.js +117 -0
- package/lib/utils/useMetropolis.d.ts +67 -0
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -0
- package/lib/utils/useTranslations.d.ts +16 -0
- package/lib/utils/useTranslations.d.ts.map +1 -0
- package/lib/utils/useTranslations.js +105 -0
- package/lib/utils/validatorFactory.d.ts +49 -0
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -0
- package/package.json +75 -28
- package/temp_signin.ts +73 -0
- package/tsconfig.lint.json +25 -0
- package/tsconfig.test.json +14 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { Flux } from '@nlabs/arkhamjs';
|
|
5
|
+
import { validateReactionInput } from '../../adapters/reactionAdapter/reactionAdapter.js';
|
|
6
|
+
import { REACTION_CONSTANTS } from '../../stores/reactionStore.js';
|
|
7
|
+
import { appMutation, appQuery } from '../../utils/api.js';
|
|
8
|
+
import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
|
|
9
|
+
const DATA_TYPE = 'reactions';
|
|
10
|
+
const defaultReactionValidator = (input, options)=>validateReactionInput(input);
|
|
11
|
+
const createReactionValidator = (customAdapter, options)=>(input, validatorOptions)=>{
|
|
12
|
+
const mergedOptions = {
|
|
13
|
+
...options,
|
|
14
|
+
...validatorOptions
|
|
15
|
+
};
|
|
16
|
+
let validated = defaultReactionValidator(input, mergedOptions);
|
|
17
|
+
if (customAdapter) {
|
|
18
|
+
validated = customAdapter(validated, mergedOptions);
|
|
19
|
+
}
|
|
20
|
+
if (mergedOptions?.customValidation) {
|
|
21
|
+
validated = mergedOptions.customValidation(validated);
|
|
22
|
+
}
|
|
23
|
+
return validated;
|
|
24
|
+
};
|
|
25
|
+
export const createReactionActions = (flux, options)=>{
|
|
26
|
+
let reactionAdapterOptions = options?.reactionAdapterOptions || {};
|
|
27
|
+
let customReactionAdapter = options?.reactionAdapter;
|
|
28
|
+
let validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
|
|
29
|
+
const updateReactionAdapter = (adapter)=>{
|
|
30
|
+
customReactionAdapter = adapter;
|
|
31
|
+
validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
|
|
32
|
+
};
|
|
33
|
+
const updateReactionAdapterOptions = (options)=>{
|
|
34
|
+
reactionAdapterOptions = {
|
|
35
|
+
...reactionAdapterOptions,
|
|
36
|
+
...options
|
|
37
|
+
};
|
|
38
|
+
validateReaction = createReactionValidator(customReactionAdapter, reactionAdapterOptions);
|
|
39
|
+
};
|
|
40
|
+
const addReaction = async (itemId, itemType, reaction, reactionProps = [], requestOptions = {})=>{
|
|
41
|
+
const validatedReaction = validateReaction(reaction, reactionAdapterOptions);
|
|
42
|
+
const { value } = validatedReaction;
|
|
43
|
+
const formatValue = value !== undefined ? value.toString() : value;
|
|
44
|
+
try {
|
|
45
|
+
const queryVariables = {
|
|
46
|
+
itemId: {
|
|
47
|
+
type: 'ID!',
|
|
48
|
+
value: `${itemType}/${itemId}`
|
|
49
|
+
},
|
|
50
|
+
reaction: {
|
|
51
|
+
type: 'ReactionInput',
|
|
52
|
+
value: {
|
|
53
|
+
...validatedReaction,
|
|
54
|
+
value: formatValue
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
const onSuccess = (data)=>{
|
|
59
|
+
const reaction = data?.reactions?.addReaction || {};
|
|
60
|
+
return Flux.dispatch({
|
|
61
|
+
itemId,
|
|
62
|
+
itemType,
|
|
63
|
+
reaction,
|
|
64
|
+
type: REACTION_CONSTANTS.ADD_ITEM_SUCCESS
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
return await appMutation(flux, 'addReaction', DATA_TYPE, queryVariables, [
|
|
68
|
+
'id',
|
|
69
|
+
'name',
|
|
70
|
+
'value',
|
|
71
|
+
...reactionProps
|
|
72
|
+
], {
|
|
73
|
+
onSuccess
|
|
74
|
+
});
|
|
75
|
+
} catch (error) {
|
|
76
|
+
flux.dispatch({
|
|
77
|
+
error,
|
|
78
|
+
type: REACTION_CONSTANTS.ADD_ITEM_ERROR
|
|
79
|
+
});
|
|
80
|
+
throw error;
|
|
81
|
+
} finally{
|
|
82
|
+
await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reaction.name || ''}`);
|
|
83
|
+
await clearCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reaction.name || ''}`);
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
const addPersonaReaction = async (personaId, itemId, itemType, reaction, reactionProps = [], requestOptions = {})=>{
|
|
87
|
+
const validatedReaction = validateReaction(reaction, reactionAdapterOptions);
|
|
88
|
+
const { value } = validatedReaction;
|
|
89
|
+
const formatValue = value !== undefined ? value.toString() : value;
|
|
90
|
+
try {
|
|
91
|
+
const queryVariables = {
|
|
92
|
+
itemId: {
|
|
93
|
+
type: 'ID!',
|
|
94
|
+
value: `${itemType}/${itemId}`
|
|
95
|
+
},
|
|
96
|
+
personaId: {
|
|
97
|
+
type: 'ID',
|
|
98
|
+
value: personaId
|
|
99
|
+
},
|
|
100
|
+
reaction: {
|
|
101
|
+
type: 'ReactionInput',
|
|
102
|
+
value: {
|
|
103
|
+
...validatedReaction,
|
|
104
|
+
value: formatValue
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
const onSuccess = (data)=>{
|
|
109
|
+
const reaction = data?.reactions?.addPersonaReaction || {};
|
|
110
|
+
return Flux.dispatch({
|
|
111
|
+
itemId,
|
|
112
|
+
itemType,
|
|
113
|
+
reaction,
|
|
114
|
+
type: REACTION_CONSTANTS.ADD_ITEM_SUCCESS
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
return await appMutation(flux, 'addPersonaReaction', DATA_TYPE, queryVariables, [
|
|
118
|
+
'id',
|
|
119
|
+
'name',
|
|
120
|
+
'type',
|
|
121
|
+
'value',
|
|
122
|
+
...reactionProps
|
|
123
|
+
], {
|
|
124
|
+
onSuccess
|
|
125
|
+
});
|
|
126
|
+
} catch (error) {
|
|
127
|
+
flux.dispatch({
|
|
128
|
+
error,
|
|
129
|
+
type: REACTION_CONSTANTS.ADD_ITEM_ERROR
|
|
130
|
+
});
|
|
131
|
+
throw error;
|
|
132
|
+
} finally{
|
|
133
|
+
await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reaction.name || ''}`);
|
|
134
|
+
await clearCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reaction.name || ''}`);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const deleteReaction = async (itemId, itemType, reactionName, reactionProps = [], requestOptions = {})=>{
|
|
138
|
+
try {
|
|
139
|
+
const queryVariables = {
|
|
140
|
+
itemId: {
|
|
141
|
+
type: 'ID!',
|
|
142
|
+
value: `${itemType}/${itemId}`
|
|
143
|
+
},
|
|
144
|
+
reactionName: {
|
|
145
|
+
type: 'String',
|
|
146
|
+
value: reactionName
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
const onSuccess = (data)=>{
|
|
150
|
+
const reaction = data?.reactions?.deleteReaction || {};
|
|
151
|
+
return Flux.dispatch({
|
|
152
|
+
itemId,
|
|
153
|
+
itemType,
|
|
154
|
+
reaction,
|
|
155
|
+
type: REACTION_CONSTANTS.REMOVE_ITEM_SUCCESS
|
|
156
|
+
});
|
|
157
|
+
};
|
|
158
|
+
return await appMutation(flux, 'deleteReaction', DATA_TYPE, queryVariables, [
|
|
159
|
+
'id',
|
|
160
|
+
'name',
|
|
161
|
+
'value',
|
|
162
|
+
...reactionProps
|
|
163
|
+
], {
|
|
164
|
+
onSuccess
|
|
165
|
+
});
|
|
166
|
+
} catch (error) {
|
|
167
|
+
flux.dispatch({
|
|
168
|
+
error,
|
|
169
|
+
type: REACTION_CONSTANTS.REMOVE_ITEM_ERROR
|
|
170
|
+
});
|
|
171
|
+
throw error;
|
|
172
|
+
} finally{
|
|
173
|
+
await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`);
|
|
174
|
+
await clearCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`);
|
|
175
|
+
}
|
|
176
|
+
};
|
|
177
|
+
const deletePersonaReaction = async (personaId, itemId, itemType, reactionName, reactionProps = [], requestOptions = {})=>{
|
|
178
|
+
try {
|
|
179
|
+
const queryVariables = {
|
|
180
|
+
itemId: {
|
|
181
|
+
type: 'ID!',
|
|
182
|
+
value: `${itemType}/${itemId}`
|
|
183
|
+
},
|
|
184
|
+
personaId: {
|
|
185
|
+
type: 'ID',
|
|
186
|
+
value: personaId
|
|
187
|
+
},
|
|
188
|
+
reactionName: {
|
|
189
|
+
type: 'String!',
|
|
190
|
+
value: reactionName
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
const onSuccess = (data)=>{
|
|
194
|
+
const reaction = data?.reactions?.deletePersonaReaction || {};
|
|
195
|
+
return Flux.dispatch({
|
|
196
|
+
itemId,
|
|
197
|
+
itemType,
|
|
198
|
+
reaction,
|
|
199
|
+
type: REACTION_CONSTANTS.REMOVE_ITEM_SUCCESS
|
|
200
|
+
});
|
|
201
|
+
};
|
|
202
|
+
return await appMutation(flux, 'deletePersonaReaction', DATA_TYPE, queryVariables, [
|
|
203
|
+
'id',
|
|
204
|
+
'name',
|
|
205
|
+
'type',
|
|
206
|
+
'value',
|
|
207
|
+
...reactionProps
|
|
208
|
+
], {
|
|
209
|
+
onSuccess
|
|
210
|
+
});
|
|
211
|
+
} catch (error) {
|
|
212
|
+
flux.dispatch({
|
|
213
|
+
error,
|
|
214
|
+
type: REACTION_CONSTANTS.REMOVE_ITEM_ERROR
|
|
215
|
+
});
|
|
216
|
+
throw error;
|
|
217
|
+
} finally{
|
|
218
|
+
await clearCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`);
|
|
219
|
+
await clearCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`);
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
const getReactionCount = async (itemId, itemType, reactionName, requestOptions = {})=>{
|
|
223
|
+
try {
|
|
224
|
+
const cachedResult = getCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`, {
|
|
225
|
+
itemId,
|
|
226
|
+
itemType,
|
|
227
|
+
reactionName
|
|
228
|
+
}, requestOptions);
|
|
229
|
+
if (cachedResult !== undefined) {
|
|
230
|
+
return cachedResult;
|
|
231
|
+
}
|
|
232
|
+
const queryVariables = {
|
|
233
|
+
itemId: {
|
|
234
|
+
type: 'ID!',
|
|
235
|
+
value: `${itemType}/${itemId}`
|
|
236
|
+
},
|
|
237
|
+
reactionName: {
|
|
238
|
+
type: 'String',
|
|
239
|
+
value: reactionName
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
const onSuccess = (data)=>{
|
|
243
|
+
const getReactionCount = data?.reactions?.getReactionCount ?? 0;
|
|
244
|
+
return flux.dispatch({
|
|
245
|
+
count: getReactionCount,
|
|
246
|
+
itemId,
|
|
247
|
+
name: reactionName,
|
|
248
|
+
type: REACTION_CONSTANTS.GET_COUNT_SUCCESS
|
|
249
|
+
});
|
|
250
|
+
};
|
|
251
|
+
const result = await appQuery(flux, 'getReactionCount', DATA_TYPE, queryVariables, [], {
|
|
252
|
+
onSuccess
|
|
253
|
+
});
|
|
254
|
+
return await setCachedRequest(flux, `reaction.getReactionCount:${itemType}:${itemId}:${reactionName}`, {
|
|
255
|
+
itemId,
|
|
256
|
+
itemType,
|
|
257
|
+
reactionName
|
|
258
|
+
}, result, requestOptions);
|
|
259
|
+
} catch (error) {
|
|
260
|
+
flux.dispatch({
|
|
261
|
+
error,
|
|
262
|
+
type: REACTION_CONSTANTS.GET_COUNT_ERROR
|
|
263
|
+
});
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
};
|
|
267
|
+
const hasReaction = async (itemId, itemType, reactionName, direction, requestOptions = {})=>{
|
|
268
|
+
try {
|
|
269
|
+
const cachedResult = getCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`, {
|
|
270
|
+
direction,
|
|
271
|
+
itemId,
|
|
272
|
+
itemType,
|
|
273
|
+
reactionName
|
|
274
|
+
}, requestOptions);
|
|
275
|
+
if (cachedResult !== undefined) {
|
|
276
|
+
return cachedResult;
|
|
277
|
+
}
|
|
278
|
+
const queryVariables = {
|
|
279
|
+
direction: {
|
|
280
|
+
type: 'String',
|
|
281
|
+
value: direction
|
|
282
|
+
},
|
|
283
|
+
itemId: {
|
|
284
|
+
type: 'ID!',
|
|
285
|
+
value: `${itemType}/${itemId}`
|
|
286
|
+
},
|
|
287
|
+
reactionName: {
|
|
288
|
+
type: 'String',
|
|
289
|
+
value: reactionName
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
const onSuccess = (data)=>{
|
|
293
|
+
const hasReaction = data?.reactions?.hasReaction ?? false;
|
|
294
|
+
return Flux.dispatch({
|
|
295
|
+
hasReaction,
|
|
296
|
+
itemId: `${itemType}/${itemId}`,
|
|
297
|
+
name: reactionName,
|
|
298
|
+
type: REACTION_CONSTANTS.HAS_SUCCESS
|
|
299
|
+
});
|
|
300
|
+
};
|
|
301
|
+
const result = await appQuery(flux, 'hasReaction', DATA_TYPE, queryVariables, [], {
|
|
302
|
+
onSuccess
|
|
303
|
+
});
|
|
304
|
+
return await setCachedRequest(flux, `reaction.hasReaction:${itemType}:${itemId}:${reactionName}`, {
|
|
305
|
+
direction,
|
|
306
|
+
itemId,
|
|
307
|
+
itemType,
|
|
308
|
+
reactionName
|
|
309
|
+
}, result, requestOptions);
|
|
310
|
+
} catch (error) {
|
|
311
|
+
flux.dispatch({
|
|
312
|
+
error,
|
|
313
|
+
type: REACTION_CONSTANTS.HAS_ERROR
|
|
314
|
+
});
|
|
315
|
+
throw error;
|
|
316
|
+
}
|
|
317
|
+
};
|
|
318
|
+
const hasPersonaReaction = async (personaId, itemId, itemType, reactionName, requestOptions = {})=>{
|
|
319
|
+
try {
|
|
320
|
+
const cachedResult = getCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`, {
|
|
321
|
+
itemId,
|
|
322
|
+
itemType,
|
|
323
|
+
personaId,
|
|
324
|
+
reactionName
|
|
325
|
+
}, requestOptions);
|
|
326
|
+
if (cachedResult !== undefined) {
|
|
327
|
+
return cachedResult;
|
|
328
|
+
}
|
|
329
|
+
const queryVariables = {
|
|
330
|
+
itemId: {
|
|
331
|
+
type: 'ID!',
|
|
332
|
+
value: `${itemType}/${itemId}`
|
|
333
|
+
},
|
|
334
|
+
personaId: {
|
|
335
|
+
type: 'ID',
|
|
336
|
+
value: personaId
|
|
337
|
+
},
|
|
338
|
+
reactionName: {
|
|
339
|
+
type: 'String!',
|
|
340
|
+
value: reactionName
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
const onSuccess = (data)=>{
|
|
344
|
+
const hasReaction = data?.reactions?.hasPersonaReaction ?? false;
|
|
345
|
+
return Flux.dispatch({
|
|
346
|
+
hasReaction,
|
|
347
|
+
itemId: `${itemType}/${itemId}`,
|
|
348
|
+
name: reactionName,
|
|
349
|
+
type: REACTION_CONSTANTS.HAS_SUCCESS
|
|
350
|
+
});
|
|
351
|
+
};
|
|
352
|
+
const result = await appQuery(flux, 'hasPersonaReaction', DATA_TYPE, queryVariables, [], {
|
|
353
|
+
onSuccess
|
|
354
|
+
});
|
|
355
|
+
return await setCachedRequest(flux, `reaction.hasPersonaReaction:${personaId}:${itemType}:${itemId}:${reactionName}`, {
|
|
356
|
+
itemId,
|
|
357
|
+
itemType,
|
|
358
|
+
personaId,
|
|
359
|
+
reactionName
|
|
360
|
+
}, result, requestOptions);
|
|
361
|
+
} catch (error) {
|
|
362
|
+
flux.dispatch({
|
|
363
|
+
error,
|
|
364
|
+
type: REACTION_CONSTANTS.HAS_ERROR
|
|
365
|
+
});
|
|
366
|
+
throw error;
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
const abbreviateCount = (count)=>{
|
|
370
|
+
const value = count || 0;
|
|
371
|
+
let newValue = value.toString();
|
|
372
|
+
if (value >= 1000) {
|
|
373
|
+
const suffixes = [
|
|
374
|
+
'',
|
|
375
|
+
'k',
|
|
376
|
+
'm',
|
|
377
|
+
'b',
|
|
378
|
+
't'
|
|
379
|
+
];
|
|
380
|
+
const suffixNum = Math.floor(`${value}`.length / 3);
|
|
381
|
+
let shortValue = 0;
|
|
382
|
+
let shortString = '';
|
|
383
|
+
for(let precision = 2; precision >= 1; precision--){
|
|
384
|
+
shortValue = parseFloat((suffixNum !== 0 ? value / Math.pow(1000, suffixNum) : value).toPrecision(precision));
|
|
385
|
+
shortString = shortValue.toString();
|
|
386
|
+
const dotLessShortValue = `${shortValue}`.replace(/[^a-zA-Z 0-9]+/g, '');
|
|
387
|
+
if (dotLessShortValue.length <= 2) {
|
|
388
|
+
break;
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
if (shortValue % 1 !== 0) {
|
|
392
|
+
shortString = shortValue.toFixed(1);
|
|
393
|
+
}
|
|
394
|
+
newValue = shortString + suffixes[suffixNum];
|
|
395
|
+
}
|
|
396
|
+
return newValue;
|
|
397
|
+
};
|
|
398
|
+
// Return the actions object
|
|
399
|
+
return {
|
|
400
|
+
addPersonaReaction,
|
|
401
|
+
addReaction,
|
|
402
|
+
deletePersonaReaction,
|
|
403
|
+
deleteReaction,
|
|
404
|
+
getReactionCount,
|
|
405
|
+
hasPersonaReaction,
|
|
406
|
+
hasReaction,
|
|
407
|
+
abbreviateCount,
|
|
408
|
+
updateReactionAdapter,
|
|
409
|
+
updateReactionAdapterOptions
|
|
410
|
+
};
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9yZWFjdGlvbkFjdGlvbnMvcmVhY3Rpb25BY3Rpb25zLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge0ZsdXh9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5cbmltcG9ydCB7dmFsaWRhdGVSZWFjdGlvbklucHV0fSBmcm9tICcuLi8uLi9hZGFwdGVycy9yZWFjdGlvbkFkYXB0ZXIvcmVhY3Rpb25BZGFwdGVyLmpzJztcbmltcG9ydCB7UkVBQ1RJT05fQ09OU1RBTlRTfSBmcm9tICcuLi8uLi9zdG9yZXMvcmVhY3Rpb25TdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtSZWFjdGlvblR5cGV9IGZyb20gJy4uLy4uL2FkYXB0ZXJzL3JlYWN0aW9uQWRhcHRlci9yZWFjdGlvbkFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FjdGlvblJlcXVlc3RPcHRpb25zfSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5jb25zdCBEQVRBX1RZUEUgPSAncmVhY3Rpb25zJztcblxuZXhwb3J0IGludGVyZmFjZSBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zIHtcbiAgc3RyaWN0PzogYm9vbGVhbjtcbiAgYWxsb3dQYXJ0aWFsPzogYm9vbGVhbjtcbiAgZW52aXJvbm1lbnQ/OiAnZGV2ZWxvcG1lbnQnIHwgJ3Byb2R1Y3Rpb24nIHwgJ3Rlc3QnO1xuICBjdXN0b21WYWxpZGF0aW9uPzogKGlucHV0OiB1bmtub3duKSA9PiB1bmtub3duO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aW9uQWN0aW9uc09wdGlvbnMge1xuICByZWFjdGlvbkFkYXB0ZXI/OiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnk7XG4gIHJlYWN0aW9uQWRhcHRlck9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zO1xufVxuXG5leHBvcnQgdHlwZSBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlID0ge1xuICByZWFjdGlvbnM6IHtcbiAgICBhZGRQZXJzb25hUmVhY3Rpb246IFJlYWN0aW9uVHlwZTtcbiAgICBhZGRSZWFjdGlvbjogUmVhY3Rpb25UeXBlO1xuICAgIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbjogUmVhY3Rpb25UeXBlO1xuICAgIGRlbGV0ZVJlYWN0aW9uOiBSZWFjdGlvblR5cGU7XG4gICAgZ2V0UmVhY3Rpb25Db3VudDogbnVtYmVyO1xuICAgIGhhc1BlcnNvbmFSZWFjdGlvbjogYm9vbGVhbjtcbiAgICBoYXNSZWFjdGlvbjogYm9vbGVhbjtcbiAgfTtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3Rpb25BY3Rpb25zIHtcbiAgYWRkUGVyc29uYVJlYWN0aW9uOiAocGVyc29uYUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbjogUGFydGlhbDxSZWFjdGlvblR5cGU+LCByZWFjdGlvblByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8UmVhY3Rpb25UeXBlPjtcbiAgYWRkUmVhY3Rpb246IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb246IFBhcnRpYWw8UmVhY3Rpb25UeXBlPiwgcmVhY3Rpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFJlYWN0aW9uVHlwZT47XG4gIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbjogKHBlcnNvbmFJZDogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIHJlYWN0aW9uUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxSZWFjdGlvblR5cGU+O1xuICBkZWxldGVSZWFjdGlvbjogKGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZywgcmVhY3Rpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFJlYWN0aW9uVHlwZT47XG4gIGdldFJlYWN0aW9uQ291bnQ6IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8bnVtYmVyPjtcbiAgaGFzUGVyc29uYVJlYWN0aW9uOiAocGVyc29uYUlkOiBzdHJpbmcsIGl0ZW1JZDogc3RyaW5nLCBpdGVtVHlwZTogc3RyaW5nLCByZWFjdGlvbk5hbWU6IHN0cmluZywgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxib29sZWFuPjtcbiAgaGFzUmVhY3Rpb246IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZywgcmVhY3Rpb25OYW1lOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBhYmJyZXZpYXRlQ291bnQ6IChjb3VudDogbnVtYmVyKSA9PiBzdHJpbmc7XG4gIHVwZGF0ZVJlYWN0aW9uQWRhcHRlcjogKGFkYXB0ZXI6IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IGFueSkgPT4gdm9pZDtcbiAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyT3B0aW9uczogKG9wdGlvbnM6IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmNvbnN0IGRlZmF1bHRSZWFjdGlvblZhbGlkYXRvciA9IChpbnB1dDogdW5rbm93biwgb3B0aW9ucz86IFJlYWN0aW9uQWRhcHRlck9wdGlvbnMpID0+IHZhbGlkYXRlUmVhY3Rpb25JbnB1dChpbnB1dCk7XG5cbmNvbnN0IGNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yID0gKFxuICBjdXN0b21BZGFwdGVyPzogKGlucHV0OiB1bmtub3duLCBvcHRpb25zPzogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucykgPT4gYW55LFxuICBvcHRpb25zPzogUmVhY3Rpb25BZGFwdGVyT3B0aW9uc1xuKSA9PiAoaW5wdXQ6IHVua25vd24sIHZhbGlkYXRvck9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiB7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSB7Li4ub3B0aW9ucywgLi4udmFsaWRhdG9yT3B0aW9uc307XG5cbiAgbGV0IHZhbGlkYXRlZCA9IGRlZmF1bHRSZWFjdGlvblZhbGlkYXRvcihpbnB1dCwgbWVyZ2VkT3B0aW9ucyk7XG5cbiAgaWYoY3VzdG9tQWRhcHRlcikge1xuICAgIHZhbGlkYXRlZCA9IGN1c3RvbUFkYXB0ZXIodmFsaWRhdGVkLCBtZXJnZWRPcHRpb25zKTtcbiAgfVxuXG4gIGlmKG1lcmdlZE9wdGlvbnM/LmN1c3RvbVZhbGlkYXRpb24pIHtcbiAgICB2YWxpZGF0ZWQgPSBtZXJnZWRPcHRpb25zLmN1c3RvbVZhbGlkYXRpb24odmFsaWRhdGVkKSBhcyBSZWFjdGlvblR5cGU7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWN0aW9uQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFJlYWN0aW9uQWN0aW9uc09wdGlvbnNcbik6IFJlYWN0aW9uQWN0aW9ucyA9PiB7XG4gIGxldCByZWFjdGlvbkFkYXB0ZXJPcHRpb25zID0gb3B0aW9ucz8ucmVhY3Rpb25BZGFwdGVyT3B0aW9ucyB8fCB7fTtcbiAgbGV0IGN1c3RvbVJlYWN0aW9uQWRhcHRlciA9IG9wdGlvbnM/LnJlYWN0aW9uQWRhcHRlcjtcbiAgbGV0IHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlciA9IChhZGFwdGVyOiAoaW5wdXQ6IHVua25vd24sIG9wdGlvbnM/OiBSZWFjdGlvbkFkYXB0ZXJPcHRpb25zKSA9PiBhbnkpOiB2b2lkID0+IHtcbiAgICBjdXN0b21SZWFjdGlvbkFkYXB0ZXIgPSBhZGFwdGVyO1xuICAgIHZhbGlkYXRlUmVhY3Rpb24gPSBjcmVhdGVSZWFjdGlvblZhbGlkYXRvcihjdXN0b21SZWFjdGlvbkFkYXB0ZXIsIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuICB9O1xuXG4gIGNvbnN0IHVwZGF0ZVJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSAob3B0aW9uczogUmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMgPSB7Li4ucmVhY3Rpb25BZGFwdGVyT3B0aW9ucywgLi4ub3B0aW9uc307XG4gICAgdmFsaWRhdGVSZWFjdGlvbiA9IGNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yKGN1c3RvbVJlYWN0aW9uQWRhcHRlciwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gIH07XG5cbiAgY29uc3QgYWRkUmVhY3Rpb24gPSBhc3luYyAoXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgaXRlbVR5cGU6IHN0cmluZyxcbiAgICByZWFjdGlvbjogUGFydGlhbDxSZWFjdGlvblR5cGU+LFxuICAgIHJlYWN0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxSZWFjdGlvblR5cGU+ID0+IHtcbiAgICBjb25zdCB2YWxpZGF0ZWRSZWFjdGlvbiA9IHZhbGlkYXRlUmVhY3Rpb24ocmVhY3Rpb24sIHJlYWN0aW9uQWRhcHRlck9wdGlvbnMpO1xuICAgIGNvbnN0IHt2YWx1ZX0gPSB2YWxpZGF0ZWRSZWFjdGlvbjtcbiAgICBjb25zdCBmb3JtYXRWYWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS50b1N0cmluZygpIDogdmFsdWU7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdSZWFjdGlvbklucHV0JyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgLi4udmFsaWRhdGVkUmVhY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5hZGRSZWFjdGlvbiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe2l0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuQUREX0lURU1fU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFJlYWN0aW9uVHlwZT4oZmx1eCwgJ2FkZFJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3ZhbHVlJywgLi4ucmVhY3Rpb25Qcm9wc10sIHtcbiAgICAgICAgb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkFERF9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5nZXRSZWFjdGlvbkNvdW50OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHJlYWN0aW9uLmhhc1JlYWN0aW9uOiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFBlcnNvbmFSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBwZXJzb25hSWQ6IHN0cmluZyxcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uOiBQYXJ0aWFsPFJlYWN0aW9uVHlwZT4sXG4gICAgcmVhY3Rpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFJlYWN0aW9uVHlwZT4gPT4ge1xuICAgIGNvbnN0IHZhbGlkYXRlZFJlYWN0aW9uID0gdmFsaWRhdGVSZWFjdGlvbihyZWFjdGlvbiwgcmVhY3Rpb25BZGFwdGVyT3B0aW9ucyk7XG4gICAgY29uc3Qge3ZhbHVlfSA9IHZhbGlkYXRlZFJlYWN0aW9uO1xuICAgIGNvbnN0IGZvcm1hdFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHBlcnNvbmFJZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCcsXG4gICAgICAgICAgdmFsdWU6IHBlcnNvbmFJZFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdSZWFjdGlvbklucHV0JyxcbiAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgLi4udmFsaWRhdGVkUmVhY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZTogZm9ybWF0VmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5hZGRQZXJzb25hUmVhY3Rpb24gfHwge307XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbiwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkFERF9JVEVNX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxSZWFjdGlvblR5cGU+KGZsdXgsICdhZGRQZXJzb25hUmVhY3Rpb24nLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbJ2lkJywgJ25hbWUnLCAndHlwZScsICd2YWx1ZScsIC4uLnJlYWN0aW9uUHJvcHNdLCB7XG4gICAgICAgIG9uU3VjY2Vzc1xuICAgICAgfSk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5BRERfSVRFTV9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgcmVhY3Rpb24uZ2V0UmVhY3Rpb25Db3VudDoke2l0ZW1UeXBlfToke2l0ZW1JZH06JHtyZWFjdGlvbi5uYW1lIHx8ICcnfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uLm5hbWUgfHwgJyd9YCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVJlYWN0aW9uID0gYXN5bmMgKFxuICAgIGl0ZW1JZDogc3RyaW5nLFxuICAgIGl0ZW1UeXBlOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFJlYWN0aW9uVHlwZT4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEIScsXG4gICAgICAgICAgdmFsdWU6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uTmFtZToge1xuICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgIHZhbHVlOiByZWFjdGlvbk5hbWVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3QgcmVhY3Rpb24gPSBkYXRhPy5yZWFjdGlvbnM/LmRlbGV0ZVJlYWN0aW9uIHx8IHt9O1xuICAgICAgICByZXR1cm4gRmx1eC5kaXNwYXRjaCh7XG4gICAgICAgICAgaXRlbUlkLFxuICAgICAgICAgIGl0ZW1UeXBlLFxuICAgICAgICAgIHJlYWN0aW9uLFxuICAgICAgICAgIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5SRU1PVkVfSVRFTV9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGF3YWl0IGFwcE11dGF0aW9uPFJlYWN0aW9uVHlwZT4oZmx1eCwgJ2RlbGV0ZVJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3ZhbHVlJywgLi4ucmVhY3Rpb25Qcm9wc10sIHtcbiAgICAgICAgb25TdWNjZXNzXG4gICAgICB9KTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLlJFTU9WRV9JVEVNX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5nZXRSZWFjdGlvbkNvdW50OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gKTtcbiAgICAgIGF3YWl0IGNsZWFyQ2FjaGVkUmVxdWVzdChmbHV4LCBgcmVhY3Rpb24uaGFzUmVhY3Rpb246JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkZWxldGVQZXJzb25hUmVhY3Rpb24gPSBhc3luYyAoXG4gICAgcGVyc29uYUlkOiBzdHJpbmcsXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgaXRlbVR5cGU6IHN0cmluZyxcbiAgICByZWFjdGlvbk5hbWU6IHN0cmluZyxcbiAgICByZWFjdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UmVhY3Rpb25UeXBlPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBpdGVtSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcGVyc29uYUlkOiB7XG4gICAgICAgICAgdHlwZTogJ0lEJyxcbiAgICAgICAgICB2YWx1ZTogcGVyc29uYUlkXG4gICAgICAgIH0sXG4gICAgICAgIHJlYWN0aW9uTmFtZToge1xuICAgICAgICAgIHR5cGU6ICdTdHJpbmchJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWN0aW9uID0gZGF0YT8ucmVhY3Rpb25zPy5kZWxldGVQZXJzb25hUmVhY3Rpb24gfHwge307XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBpdGVtSWQsXG4gICAgICAgICAgaXRlbVR5cGUsXG4gICAgICAgICAgcmVhY3Rpb24sXG4gICAgICAgICAgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLlJFTU9WRV9JVEVNX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb248UmVhY3Rpb25UeXBlPihmbHV4LCAnZGVsZXRlUGVyc29uYVJlYWN0aW9uJywgREFUQV9UWVBFLCBxdWVyeVZhcmlhYmxlcywgWydpZCcsICduYW1lJywgJ3R5cGUnLCAndmFsdWUnLCAuLi5yZWFjdGlvblByb3BzXSwge1xuICAgICAgICBvblN1Y2Nlc3NcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuUkVNT1ZFX0lURU1fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHJlYWN0aW9uLmdldFJlYWN0aW9uQ291bnQ6JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWApO1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0UmVhY3Rpb25Db3VudCA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8bnVtYmVyPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmdldFJlYWN0aW9uQ291bnQ6JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICAgKTtcblxuICAgICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICByZWFjdGlvbk5hbWU6IHtcbiAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICB2YWx1ZTogcmVhY3Rpb25OYW1lXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBSZWFjdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGdldFJlYWN0aW9uQ291bnQgPSBkYXRhPy5yZWFjdGlvbnM/LmdldFJlYWN0aW9uQ291bnQgPz8gMDtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGNvdW50OiBnZXRSZWFjdGlvbkNvdW50LFxuICAgICAgICAgIGl0ZW1JZCxcbiAgICAgICAgICBuYW1lOiByZWFjdGlvbk5hbWUsXG4gICAgICAgICAgdHlwZTogUkVBQ1RJT05fQ09OU1RBTlRTLkdFVF9DT1VOVF9TVUNDRVNTXG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwUXVlcnk8bnVtYmVyPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2dldFJlYWN0aW9uQ291bnQnLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBhd2FpdCBzZXRDYWNoZWRSZXF1ZXN0KFxuICAgICAgICBmbHV4LFxuICAgICAgICBgcmVhY3Rpb24uZ2V0UmVhY3Rpb25Db3VudDoke2l0ZW1UeXBlfToke2l0ZW1JZH06JHtyZWFjdGlvbk5hbWV9YCxcbiAgICAgICAge2l0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5HRVRfQ09VTlRfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBoYXNSZWFjdGlvbiA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nLFxuICAgIHJlYWN0aW9uTmFtZTogc3RyaW5nLFxuICAgIGRpcmVjdGlvbjogc3RyaW5nLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PGJvb2xlYW4+KFxuICAgICAgICBmbHV4LFxuICAgICAgICBgcmVhY3Rpb24uaGFzUmVhY3Rpb246JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtkaXJlY3Rpb24sIGl0ZW1JZCwgaXRlbVR5cGUsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuXG4gICAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgZGlyZWN0aW9uOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IGRpcmVjdGlvblxuICAgICAgICB9LFxuICAgICAgICBpdGVtSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQhJyxcbiAgICAgICAgICB2YWx1ZTogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWBcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25OYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgdmFsdWU6IHJlYWN0aW9uTmFtZVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogUmVhY3Rpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBoYXNSZWFjdGlvbiA9IGRhdGE/LnJlYWN0aW9ucz8uaGFzUmVhY3Rpb24gPz8gZmFsc2U7XG4gICAgICAgIHJldHVybiBGbHV4LmRpc3BhdGNoKHtcbiAgICAgICAgICBoYXNSZWFjdGlvbixcbiAgICAgICAgICBpdGVtSWQ6IGAke2l0ZW1UeXBlfS8ke2l0ZW1JZH1gLFxuICAgICAgICAgIG5hbWU6IHJlYWN0aW9uTmFtZSxcbiAgICAgICAgICB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuSEFTX1NVQ0NFU1NcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBRdWVyeTxib29sZWFuPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2hhc1JlYWN0aW9uJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmhhc1JlYWN0aW9uOiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gLFxuICAgICAgICB7ZGlyZWN0aW9uLCBpdGVtSWQsIGl0ZW1UeXBlLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXN1bHQsXG4gICAgICAgIHJlcXVlc3RPcHRpb25zXG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBSRUFDVElPTl9DT05TVEFOVFMuSEFTX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFzUGVyc29uYVJlYWN0aW9uID0gYXN5bmMgKFxuICAgIHBlcnNvbmFJZDogc3RyaW5nLFxuICAgIGl0ZW1JZDogc3RyaW5nLFxuICAgIGl0ZW1UeXBlOiBzdHJpbmcsXG4gICAgcmVhY3Rpb25OYW1lOiBzdHJpbmcsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8Ym9vbGVhbj4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgIGByZWFjdGlvbi5oYXNQZXJzb25hUmVhY3Rpb246JHtwZXJzb25hSWR9OiR7aXRlbVR5cGV9OiR7aXRlbUlkfToke3JlYWN0aW9uTmFtZX1gLFxuICAgICAgICB7aXRlbUlkLCBpdGVtVHlwZSwgcGVyc29uYUlkLCByZWFjdGlvbk5hbWV9LFxuICAgICAgICByZXF1ZXN0T3B0aW9uc1xuICAgICAgKTtcblxuICAgICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge1xuICAgICAgICAgIHR5cGU6ICdJRCEnLFxuICAgICAgICAgIHZhbHVlOiBgJHtpdGVtVHlwZX0vJHtpdGVtSWR9YFxuICAgICAgICB9LFxuICAgICAgICBwZXJzb25hSWQ6IHtcbiAgICAgICAgICB0eXBlOiAnSUQnLFxuICAgICAgICAgIHZhbHVlOiBwZXJzb25hSWRcbiAgICAgICAgfSxcbiAgICAgICAgcmVhY3Rpb25OYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ1N0cmluZyEnLFxuICAgICAgICAgIHZhbHVlOiByZWFjdGlvbk5hbWVcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFJlYWN0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3QgaGFzUmVhY3Rpb24gPSBkYXRhPy5yZWFjdGlvbnM/Lmhhc1BlcnNvbmFSZWFjdGlvbiA/PyBmYWxzZTtcbiAgICAgICAgcmV0dXJuIEZsdXguZGlzcGF0Y2goe1xuICAgICAgICAgIGhhc1JlYWN0aW9uLFxuICAgICAgICAgIGl0ZW1JZDogYCR7aXRlbVR5cGV9LyR7aXRlbUlkfWAsXG4gICAgICAgICAgbmFtZTogcmVhY3Rpb25OYW1lLFxuICAgICAgICAgIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5IQVNfU1VDQ0VTU1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PGJvb2xlYW4+KFxuICAgICAgICBmbHV4LFxuICAgICAgICAnaGFzUGVyc29uYVJlYWN0aW9uJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgW10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChcbiAgICAgICAgZmx1eCxcbiAgICAgICAgYHJlYWN0aW9uLmhhc1BlcnNvbmFSZWFjdGlvbjoke3BlcnNvbmFJZH06JHtpdGVtVHlwZX06JHtpdGVtSWR9OiR7cmVhY3Rpb25OYW1lfWAsXG4gICAgICAgIHtpdGVtSWQsIGl0ZW1UeXBlLCBwZXJzb25hSWQsIHJlYWN0aW9uTmFtZX0sXG4gICAgICAgIHJlc3VsdCxcbiAgICAgICAgcmVxdWVzdE9wdGlvbnNcbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFJFQUNUSU9OX0NPTlNUQU5UUy5IQVNfRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhYmJyZXZpYXRlQ291bnQgPSAoY291bnQ6IG51bWJlcik6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb3VudCB8fCAwO1xuICAgIGxldCBuZXdWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG5cbiAgICBpZih2YWx1ZSA+PSAxMDAwKSB7XG4gICAgICBjb25zdCBzdWZmaXhlcyA9IFsnJywgJ2snLCAnbScsICdiJywgJ3QnXTtcbiAgICAgIGNvbnN0IHN1ZmZpeE51bSA9IE1hdGguZmxvb3IoYCR7dmFsdWV9YC5sZW5ndGggLyAzKTtcbiAgICAgIGxldCBzaG9ydFZhbHVlID0gMDtcbiAgICAgIGxldCBzaG9ydFN0cmluZyA9ICcnO1xuXG4gICAgICBmb3IobGV0IHByZWNpc2lvbiA9IDI7IHByZWNpc2lvbiA+PSAxOyBwcmVjaXNpb24tLSkge1xuICAgICAgICBzaG9ydFZhbHVlID0gcGFyc2VGbG9hdCgoc3VmZml4TnVtICE9PSAwID8gdmFsdWUgLyBNYXRoLnBvdygxMDAwLCBzdWZmaXhOdW0pIDogdmFsdWUpLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpO1xuICAgICAgICBzaG9ydFN0cmluZyA9IHNob3J0VmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgZG90TGVzc1Nob3J0VmFsdWUgPSBgJHtzaG9ydFZhbHVlfWAucmVwbGFjZSgvW15hLXpBLVogMC05XSsvZywgJycpO1xuXG4gICAgICAgIGlmKGRvdExlc3NTaG9ydFZhbHVlLmxlbmd0aCA8PSAyKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYoc2hvcnRWYWx1ZSAlIDEgIT09IDApIHtcbiAgICAgICAgc2hvcnRTdHJpbmcgPSBzaG9ydFZhbHVlLnRvRml4ZWQoMSk7XG4gICAgICB9XG5cbiAgICAgIG5ld1ZhbHVlID0gc2hvcnRTdHJpbmcgKyBzdWZmaXhlc1tzdWZmaXhOdW1dO1xuICAgIH1cblxuICAgIHJldHVybiBuZXdWYWx1ZTtcbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGFjdGlvbnMgb2JqZWN0XG4gIHJldHVybiB7XG4gICAgYWRkUGVyc29uYVJlYWN0aW9uLFxuICAgIGFkZFJlYWN0aW9uLFxuICAgIGRlbGV0ZVBlcnNvbmFSZWFjdGlvbixcbiAgICBkZWxldGVSZWFjdGlvbixcbiAgICBnZXRSZWFjdGlvbkNvdW50LFxuICAgIGhhc1BlcnNvbmFSZWFjdGlvbixcbiAgICBoYXNSZWFjdGlvbixcbiAgICBhYmJyZXZpYXRlQ291bnQsXG4gICAgdXBkYXRlUmVhY3Rpb25BZGFwdGVyLFxuICAgIHVwZGF0ZVJlYWN0aW9uQWRhcHRlck9wdGlvbnNcbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiRmx1eCIsInZhbGlkYXRlUmVhY3Rpb25JbnB1dCIsIlJFQUNUSU9OX0NPTlNUQU5UUyIsImFwcE11dGF0aW9uIiwiYXBwUXVlcnkiLCJjbGVhckNhY2hlZFJlcXVlc3QiLCJnZXRDYWNoZWRSZXF1ZXN0Iiwic2V0Q2FjaGVkUmVxdWVzdCIsIkRBVEFfVFlQRSIsImRlZmF1bHRSZWFjdGlvblZhbGlkYXRvciIsImlucHV0Iiwib3B0aW9ucyIsImNyZWF0ZVJlYWN0aW9uVmFsaWRhdG9yIiwiY3VzdG9tQWRhcHRlciIsInZhbGlkYXRvck9wdGlvbnMiLCJtZXJnZWRPcHRpb25zIiwidmFsaWRhdGVkIiwiY3VzdG9tVmFsaWRhdGlvbiIsImNyZWF0ZVJlYWN0aW9uQWN0aW9ucyIsImZsdXgiLCJyZWFjdGlvbkFkYXB0ZXJPcHRpb25zIiwiY3VzdG9tUmVhY3Rpb25BZGFwdGVyIiwicmVhY3Rpb25BZGFwdGVyIiwidmFsaWRhdGVSZWFjdGlvbiIsInVwZGF0ZVJlYWN0aW9uQWRhcHRlciIsImFkYXB0ZXIiLCJ1cGRhdGVSZWFjdGlvbkFkYXB0ZXJPcHRpb25zIiwiYWRkUmVhY3Rpb24iLCJpdGVtSWQiLCJpdGVtVHlwZSIsInJlYWN0aW9uIiwicmVhY3Rpb25Qcm9wcyIsInJlcXVlc3RPcHRpb25zIiwidmFsaWRhdGVkUmVhY3Rpb24iLCJ2YWx1ZSIsImZvcm1hdFZhbHVlIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJxdWVyeVZhcmlhYmxlcyIsInR5cGUiLCJvblN1Y2Nlc3MiLCJkYXRhIiwicmVhY3Rpb25zIiwiZGlzcGF0Y2giLCJBRERfSVRFTV9TVUNDRVNTIiwiZXJyb3IiLCJBRERfSVRFTV9FUlJPUiIsIm5hbWUiLCJhZGRQZXJzb25hUmVhY3Rpb24iLCJwZXJzb25hSWQiLCJkZWxldGVSZWFjdGlvbiIsInJlYWN0aW9uTmFtZSIsIlJFTU9WRV9JVEVNX1NVQ0NFU1MiLCJSRU1PVkVfSVRFTV9FUlJPUiIsImRlbGV0ZVBlcnNvbmFSZWFjdGlvbiIsImdldFJlYWN0aW9uQ291bnQiLCJjYWNoZWRSZXN1bHQiLCJjb3VudCIsIkdFVF9DT1VOVF9TVUNDRVNTIiwicmVzdWx0IiwiR0VUX0NPVU5UX0VSUk9SIiwiaGFzUmVhY3Rpb24iLCJkaXJlY3Rpb24iLCJIQVNfU1VDQ0VTUyIsIkhBU19FUlJPUiIsImhhc1BlcnNvbmFSZWFjdGlvbiIsImFiYnJldmlhdGVDb3VudCIsIm5ld1ZhbHVlIiwic3VmZml4ZXMiLCJzdWZmaXhOdW0iLCJNYXRoIiwiZmxvb3IiLCJsZW5ndGgiLCJzaG9ydFZhbHVlIiwic2hvcnRTdHJpbmciLCJwcmVjaXNpb24iLCJwYXJzZUZsb2F0IiwicG93IiwidG9QcmVjaXNpb24iLCJkb3RMZXNzU2hvcnRWYWx1ZSIsInJlcGxhY2UiLCJ0b0ZpeGVkIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxJQUFJLFFBQU8sa0JBQWtCO0FBRXJDLFNBQVFDLHFCQUFxQixRQUFPLG9EQUFvRDtBQUN4RixTQUFRQyxrQkFBa0IsUUFBTyxnQ0FBZ0M7QUFDakUsU0FBUUMsV0FBVyxFQUFFQyxRQUFRLFFBQU8scUJBQXFCO0FBQ3pELFNBQVFDLGtCQUFrQixFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCLFFBQU8sOEJBQThCO0FBTW5HLE1BQU1DLFlBQVk7QUF1Q2xCLE1BQU1DLDJCQUEyQixDQUFDQyxPQUFnQkMsVUFBcUNWLHNCQUFzQlM7QUFFN0csTUFBTUUsMEJBQTBCLENBQzlCQyxlQUNBRixVQUNHLENBQUNELE9BQWdCSTtRQUNwQixNQUFNQyxnQkFBZ0I7WUFBQyxHQUFHSixPQUFPO1lBQUUsR0FBR0csZ0JBQWdCO1FBQUE7UUFFdEQsSUFBSUUsWUFBWVAseUJBQXlCQyxPQUFPSztRQUVoRCxJQUFHRixlQUFlO1lBQ2hCRyxZQUFZSCxjQUFjRyxXQUFXRDtRQUN2QztRQUVBLElBQUdBLGVBQWVFLGtCQUFrQjtZQUNsQ0QsWUFBWUQsY0FBY0UsZ0JBQWdCLENBQUNEO1FBQzdDO1FBRUEsT0FBT0E7SUFDVDtBQUVBLE9BQU8sTUFBTUUsd0JBQXdCLENBQ25DQyxNQUNBUjtJQUVBLElBQUlTLHlCQUF5QlQsU0FBU1MsMEJBQTBCLENBQUM7SUFDakUsSUFBSUMsd0JBQXdCVixTQUFTVztJQUNyQyxJQUFJQyxtQkFBbUJYLHdCQUF3QlMsdUJBQXVCRDtJQUV0RSxNQUFNSSx3QkFBd0IsQ0FBQ0M7UUFDN0JKLHdCQUF3Qkk7UUFDeEJGLG1CQUFtQlgsd0JBQXdCUyx1QkFBdUJEO0lBQ3BFO0lBRUEsTUFBTU0sK0JBQStCLENBQUNmO1FBQ3BDUyx5QkFBeUI7WUFBQyxHQUFHQSxzQkFBc0I7WUFBRSxHQUFHVCxPQUFPO1FBQUE7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
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/
|
|
5
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
6
|
+
export interface SSEEvent {
|
|
7
|
+
readonly data: string;
|
|
8
|
+
readonly event?: string;
|
|
9
|
+
readonly id?: string;
|
|
10
|
+
readonly retry?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface SSEConnectionOptions {
|
|
13
|
+
readonly headers?: Record<string, string>;
|
|
14
|
+
readonly maxRetries?: number;
|
|
15
|
+
readonly retryInterval?: number;
|
|
16
|
+
readonly timeout?: number;
|
|
17
|
+
readonly url: string;
|
|
18
|
+
readonly withCredentials?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface SSEActionsOptions {
|
|
21
|
+
readonly onClose?: (event: CloseEvent) => void;
|
|
22
|
+
readonly onError?: (error: Event) => void;
|
|
23
|
+
readonly onMessage?: (event: SSEEvent) => void;
|
|
24
|
+
readonly onOpen?: (event: Event) => void;
|
|
25
|
+
readonly sseOptions?: SSEConnectionOptions;
|
|
26
|
+
}
|
|
27
|
+
export interface SSEActions {
|
|
28
|
+
readonly connect: (options?: SSEConnectionOptions) => Promise<void>;
|
|
29
|
+
readonly disconnect: () => void;
|
|
30
|
+
readonly reconnect: () => Promise<void>;
|
|
31
|
+
readonly isConnected: () => boolean;
|
|
32
|
+
readonly sendMessage: (data: string, eventType?: string) => void;
|
|
33
|
+
readonly addEventListener: (eventType: string, handler: (event: SSEEvent) => void) => void;
|
|
34
|
+
readonly removeEventListener: (eventType: string, handler: (event: SSEEvent) => void) => void;
|
|
35
|
+
readonly updateSSEOptions: (options: SSEActionsOptions) => void;
|
|
36
|
+
}
|
|
37
|
+
export declare const createSSEActions: (flux: FluxFramework, options?: SSEActionsOptions) => SSEActions;
|
|
38
|
+
//# sourceMappingURL=sseActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sseActions.d.ts","sourceRoot":"","sources":["../../../src/actions/sseActions/sseActions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;CAC5C;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,OAAO,CAAC;IACpC,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjE,QAAQ,CAAC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAC;IAC3F,QAAQ,CAAC,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,KAAK,IAAI,CAAC;IAC9F,QAAQ,CAAC,gBAAgB,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;CACjE;AAED,eAAO,MAAM,gBAAgB,GAC3B,MAAM,aAAa,EACnB,UAAU,iBAAiB,KAC1B,UAwKF,CAAC"}
|