@nlabs/metropolisjs 0.1.2 → 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 +1123 -112
- 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/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/index.js +1 -0
- package/jest.config.mjs +28 -0
- package/lex.config.mjs +11 -2
- 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 +27 -7
- package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
- package/lib/actions/eventActions/eventActions.js +436 -2
- 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 +16 -10
- package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
- package/lib/actions/imageActions/imageActions.js +593 -2
- package/lib/actions/index.d.ts +21 -9
- package/lib/actions/index.d.ts.map +1 -0
- package/lib/actions/index.js +22 -2
- package/lib/actions/locationActions/locationActions.d.ts +11 -9
- package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
- package/lib/actions/locationActions/locationActions.js +388 -2
- package/lib/actions/messageActions/messageActions.d.ts +16 -32
- package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
- package/lib/actions/messageActions/messageActions.js +235 -2
- 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 +12 -32
- package/lib/actions/postActions/postActions.d.ts.map +1 -0
- package/lib/actions/postActions/postActions.js +447 -2
- package/lib/actions/reactionActions/reactionActions.d.ts +13 -27
- package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
- package/lib/actions/reactionActions/reactionActions.js +413 -2
- package/lib/actions/sseActions/sseActions.d.ts +1 -0
- package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
- package/lib/actions/sseActions/sseActions.js +148 -2
- 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 +13 -31
- package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
- package/lib/actions/tagActions/tagActions.js +347 -2
- 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 +42 -95
- package/lib/actions/userActions/userActions.d.ts.map +1 -0
- package/lib/actions/userActions/userActions.js +844 -2
- 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 +20 -21
- package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
- package/lib/actions/websocketActions/websocketActions.js +377 -2
- 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 +3 -2
- package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
- package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts +3 -2
- package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
- package/lib/adapters/contentAdapter/contentAdapter.js +107 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +3 -2
- package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
- package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts +5 -2
- package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
- package/lib/adapters/eventAdapter/eventAdapter.js +162 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts +3 -2
- package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
- package/lib/adapters/fileAdapter/fileAdapter.js +118 -2
- 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 +9 -2
- package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
- package/lib/adapters/imageAdapter/imageAdapter.js +134 -2
- package/lib/adapters/index.d.ts +34 -16
- package/lib/adapters/index.d.ts.map +1 -0
- package/lib/adapters/index.js +19 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts +3 -2
- package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
- package/lib/adapters/locationAdapter/locationAdapter.js +95 -2
- package/lib/adapters/messageAdapter/messageAdapter.d.ts +23 -19
- package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
- package/lib/adapters/messageAdapter/messageAdapter.js +82 -2
- 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 +28 -2
- package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
- package/lib/adapters/personaAdapter/personaAdapter.js +161 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts +3 -2
- package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
- package/lib/adapters/postAdapter/postAdapter.js +115 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +5 -2
- package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
- package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +3 -2
- package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
- package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +3 -2
- package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
- package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts +3 -2
- package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
- package/lib/adapters/tagAdapter/tagAdapter.js +98 -2
- 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 +18 -6
- package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
- package/lib/adapters/userAdapter/userAdapter.js +302 -2
- 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 +19 -6
- package/lib/config/index.d.ts.map +1 -0
- package/lib/config/index.js +97 -2
- 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 +1 -0
- package/lib/constants/MetropolisConstants.d.ts.map +1 -0
- package/lib/constants/MetropolisConstants.js +15 -2
- package/lib/graphql/message.d.ts +1 -0
- package/lib/graphql/message.d.ts.map +1 -0
- package/lib/graphql/message.js +6 -4
- package/lib/graphql/notification.d.ts +1 -0
- package/lib/graphql/notification.d.ts.map +1 -0
- package/lib/graphql/notification.js +6 -4
- package/lib/graphql/session.d.ts +1 -0
- package/lib/graphql/session.d.ts.map +1 -0
- package/lib/graphql/session.js +4 -3
- package/lib/index.d.ts +45 -22
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +248 -2
- package/lib/stores/appStore.d.ts +1 -0
- package/lib/stores/appStore.d.ts.map +1 -0
- package/lib/stores/appStore.js +23 -2
- 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 +4 -1
- package/lib/stores/eventStore.d.ts.map +1 -0
- package/lib/stores/eventStore.js +47 -2
- 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 +6 -1
- package/lib/stores/imageStore.d.ts.map +1 -0
- package/lib/stores/imageStore.js +53 -2
- package/lib/stores/index.d.ts +20 -11
- package/lib/stores/index.d.ts.map +1 -0
- package/lib/stores/index.js +24 -2
- package/lib/stores/locationStore.d.ts +2 -1
- package/lib/stores/locationStore.d.ts.map +1 -0
- package/lib/stores/locationStore.js +42 -2
- package/lib/stores/messageStore.d.ts +19 -4
- package/lib/stores/messageStore.d.ts.map +1 -0
- package/lib/stores/messageStore.js +137 -2
- 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 +2 -1
- package/lib/stores/postStore.d.ts.map +1 -0
- package/lib/stores/postStore.js +53 -2
- package/lib/stores/reactionStore.d.ts +1 -0
- package/lib/stores/reactionStore.d.ts.map +1 -0
- package/lib/stores/reactionStore.js +28 -2
- 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 +8 -5
- package/lib/stores/tagStore.d.ts.map +1 -0
- package/lib/stores/tagStore.js +87 -2
- 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 +5 -4
- package/lib/stores/userStore.d.ts.map +1 -0
- package/lib/stores/userStore.js +319 -2
- 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 +1 -0
- package/lib/stores/websocketStore.d.ts.map +1 -0
- package/lib/stores/websocketStore.js +51 -2
- 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 +39 -15
- package/lib/utils/MetropolisProvider.d.ts.map +1 -0
- package/lib/utils/MetropolisProvider.js +31 -2
- package/lib/utils/actionFactory.d.ts +21 -19
- package/lib/utils/actionFactory.d.ts.map +1 -0
- package/lib/utils/actionFactory.js +95 -2
- package/lib/utils/api.d.ts +5 -4
- package/lib/utils/api.d.ts.map +1 -0
- package/lib/utils/api.js +252 -6
- package/lib/utils/app.d.ts +1 -0
- package/lib/utils/app.d.ts.map +1 -0
- package/lib/utils/app.js +15 -2
- package/lib/utils/baseActionFactory.d.ts +5 -23
- package/lib/utils/baseActionFactory.d.ts.map +1 -0
- package/lib/utils/baseActionFactory.js +72 -2
- 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 +1 -0
- package/lib/utils/dateUtils.d.ts.map +1 -0
- package/lib/utils/dateUtils.js +11 -2
- package/lib/utils/file.d.ts +3 -1
- package/lib/utils/file.d.ts.map +1 -0
- package/lib/utils/file.js +156 -2
- 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 +4 -3
- package/lib/utils/location.d.ts.map +1 -0
- package/lib/utils/location.js +82 -2
- 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 -12
- package/lib/utils/useMetropolis.d.ts.map +1 -0
- package/lib/utils/useMetropolis.js +311 -2
- 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 +3 -2
- package/lib/utils/validatorFactory.d.ts.map +1 -0
- package/lib/utils/validatorFactory.js +95 -2
- package/package.json +58 -17
- package/temp_signin.ts +73 -0
- package/lib/actions/profileActions/profileActions.d.ts +0 -50
- package/lib/actions/profileActions/profileActions.js +0 -2
- package/lib/adapters/profileAdapter/profileAdapter.d.ts +0 -32
- package/lib/adapters/profileAdapter/profileAdapter.js +0 -2
- package/lib/stores/profileStore.d.ts +0 -24
- package/lib/stores/profileStore.js +0 -2
- /package/{FACTORY_PATTERN_GUIDE.md → factoryPatternGuide.md} +0 -0
|
@@ -1,2 +1,148 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FjdGlvbnMvc3NlQWN0aW9ucy9zc2VBY3Rpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTU0VFdmVudCB7XG4gIHJlYWRvbmx5IGRhdGE6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnQ/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkPzogc3RyaW5nO1xuICByZWFkb25seSByZXRyeT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTU0VDb25uZWN0aW9uT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZWFkb25seSBtYXhSZXRyaWVzPzogbnVtYmVyO1xuICByZWFkb25seSByZXRyeUludGVydmFsPzogbnVtYmVyO1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgcmVhZG9ubHkgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTU0VBY3Rpb25zT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG9uQ2xvc2U/OiAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IG9uRXJyb3I/OiAoZXJyb3I6IEV2ZW50KSA9PiB2b2lkO1xuICByZWFkb25seSBvbk1lc3NhZ2U/OiAoZXZlbnQ6IFNTRUV2ZW50KSA9PiB2b2lkO1xuICByZWFkb25seSBvbk9wZW4/OiAoZXZlbnQ6IEV2ZW50KSA9PiB2b2lkO1xuICByZWFkb25seSBzc2VPcHRpb25zPzogU1NFQ29ubmVjdGlvbk9wdGlvbnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1NFQWN0aW9ucyB7XG4gIHJlYWRvbmx5IGNvbm5lY3Q6IChvcHRpb25zPzogU1NFQ29ubmVjdGlvbk9wdGlvbnMpID0+IFByb21pc2U8dm9pZD47XG4gIHJlYWRvbmx5IGRpc2Nvbm5lY3Q6ICgpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJlY29ubmVjdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgaXNDb25uZWN0ZWQ6ICgpID0+IGJvb2xlYW47XG4gIHJlYWRvbmx5IHNlbmRNZXNzYWdlOiAoZGF0YTogc3RyaW5nLCBldmVudFR5cGU/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IGFkZEV2ZW50TGlzdGVuZXI6IChldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBTU0VFdmVudCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgcmVtb3ZlRXZlbnRMaXN0ZW5lcjogKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IFNTRUV2ZW50KSA9PiB2b2lkKSA9PiB2b2lkO1xuICByZWFkb25seSB1cGRhdGVTU0VPcHRpb25zOiAob3B0aW9uczogU1NFQWN0aW9uc09wdGlvbnMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTU0VBY3Rpb25zID0gKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBvcHRpb25zPzogU1NFQWN0aW9uc09wdGlvbnNcbik6IFNTRUFjdGlvbnMgPT4ge1xuICBsZXQgZXZlbnRTb3VyY2U6IEV2ZW50U291cmNlIHwgbnVsbCA9IG51bGw7XG4gIGxldCByZXRyeUNvdW50ID0gMDtcbiAgbGV0IHJldHJ5VGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgbGV0IGV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwPHN0cmluZywgU2V0PChldmVudDogU1NFRXZlbnQpID0+IHZvaWQ+PigpO1xuXG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBTU0VDb25uZWN0aW9uT3B0aW9ucyA9IHtcbiAgICB1cmw6ICcnLFxuICAgIHdpdGhDcmVkZW50aWFsczogZmFsc2UsXG4gICAgcmV0cnlJbnRlcnZhbDogNTAwMCxcbiAgICBtYXhSZXRyaWVzOiA1LFxuICAgIHRpbWVvdXQ6IDMwMDAwLFxuICAgIC4uLm9wdGlvbnM/LnNzZU9wdGlvbnNcbiAgfTtcblxuICBjb25zdCBoYW5kbGVNZXNzYWdlID0gKGV2ZW50OiBNZXNzYWdlRXZlbnQpID0+IHtcbiAgICBjb25zdCBzc2VFdmVudDogU1NFRXZlbnQgPSB7XG4gICAgICBpZDogZXZlbnQubGFzdEV2ZW50SWQsXG4gICAgICBldmVudDogZXZlbnQudHlwZSxcbiAgICAgIGRhdGE6IGV2ZW50LmRhdGFcbiAgICB9O1xuXG4gICAgLy8gQ2FsbCBnbG9iYWwgbWVzc2FnZSBoYW5kbGVyXG4gICAgb3B0aW9ucz8ub25NZXNzYWdlPy4oc3NlRXZlbnQpO1xuXG4gICAgLy8gQ2FsbCBzcGVjaWZpYyBldmVudCBoYW5kbGVyc1xuICAgIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5nZXQoZXZlbnQudHlwZSk7XG4gICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4gaGFuZGxlcihzc2VFdmVudCkpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRvIGZsdXggc3RvcmVcbiAgICBmbHV4LmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdTU0VfTUVTU0FHRV9SRUNFSVZFRCcsXG4gICAgICBldmVudDogc3NlRXZlbnRcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVFcnJvciA9IChlcnJvcjogRXZlbnQpID0+IHtcbiAgICBvcHRpb25zPy5vbkVycm9yPy4oZXJyb3IpO1xuXG4gICAgZmx1eC5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnU1NFX0NPTk5FQ1RJT05fRVJST1InLFxuICAgICAgZXJyb3JcbiAgICB9KTtcblxuICAgIC8vIEF1dG8tcmVjb25uZWN0IGlmIG5vdCBtYW51YWxseSBkaXNjb25uZWN0ZWRcbiAgICBpZiAoZXZlbnRTb3VyY2UgJiYgcmV0cnlDb3VudCA8IChkZWZhdWx0T3B0aW9ucy5tYXhSZXRyaWVzIHx8IDUpKSB7XG4gICAgICByZXRyeUNvdW50Kys7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHJlY29ubmVjdCgpLCBkZWZhdWx0T3B0aW9ucy5yZXRyeUludGVydmFsKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlT3BlbiA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICByZXRyeUNvdW50ID0gMDtcbiAgICBvcHRpb25zPy5vbk9wZW4/LihldmVudCk7XG5cbiAgICBmbHV4LmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdTU0VfQ09OTkVDVElPTl9PUEVOJyxcbiAgICAgIGV2ZW50XG4gICAgfSk7XG4gIH07XG5cbiAgLy8gY29uc3QgaGFuZGxlQ2xvc2UgPSAoZXZlbnQ6IENsb3NlRXZlbnQpID0+IHtcbiAgLy8gICBvcHRpb25zPy5vbkNsb3NlPy4oZXZlbnQpO1xuXG4gIC8vICAgZmx1eC5kaXNwYXRjaCh7XG4gIC8vICAgICB0eXBlOiAnU1NFX0NPTk5FQ1RJT05fQ0xPU0VEJyxcbiAgLy8gICAgIGV2ZW50XG4gIC8vICAgfSk7XG4gIC8vIH07XG5cbiAgY29uc3QgY29ubmVjdCA9IGFzeW5jIChjb25uZWN0aW9uT3B0aW9ucz86IFNTRUNvbm5lY3Rpb25PcHRpb25zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLmNvbm5lY3Rpb25PcHRpb25zIH07XG5cbiAgICBpZiAoIW9wdHMudXJsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NTRSBVUkwgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICBkaXNjb25uZWN0KCk7XG5cbiAgICB0cnkge1xuICAgICAgZXZlbnRTb3VyY2UgPSBuZXcgRXZlbnRTb3VyY2Uob3B0cy51cmwsIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzOiBvcHRzLndpdGhDcmVkZW50aWFsc1xuICAgICAgfSk7XG5cbiAgICAgIGV2ZW50U291cmNlLm9ubWVzc2FnZSA9IGhhbmRsZU1lc3NhZ2U7XG4gICAgICBldmVudFNvdXJjZS5vbmVycm9yID0gaGFuZGxlRXJyb3I7XG4gICAgICBldmVudFNvdXJjZS5vbm9wZW4gPSBoYW5kbGVPcGVuO1xuXG4gICAgICAvLyBTZXQgdGltZW91dFxuICAgICAgaWYgKG9wdHMudGltZW91dCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnRTb3VyY2UgJiYgZXZlbnRTb3VyY2UucmVhZHlTdGF0ZSA9PT0gRXZlbnRTb3VyY2UuQ09OTkVDVElORykge1xuICAgICAgICAgICAgZXZlbnRTb3VyY2UuY2xvc2UoKTtcbiAgICAgICAgICAgIGhhbmRsZUVycm9yKG5ldyBFdmVudCgndGltZW91dCcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIG9wdHMudGltZW91dCk7XG4gICAgICB9XG5cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlRXJyb3IoZXJyb3IgYXMgRXZlbnQpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRpc2Nvbm5lY3QgPSAoKTogdm9pZCA9PiB7XG4gICAgaWYgKGV2ZW50U291cmNlKSB7XG4gICAgICBldmVudFNvdXJjZS5jbG9zZSgpO1xuICAgICAgZXZlbnRTb3VyY2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChyZXRyeVRpbWVvdXQpIHtcbiAgICAgIGNsZWFyVGltZW91dChyZXRyeVRpbWVvdXQpO1xuICAgICAgcmV0cnlUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVjb25uZWN0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGRpc2Nvbm5lY3QoKTtcbiAgICBhd2FpdCBjb25uZWN0KCk7XG4gIH07XG5cbiAgY29uc3QgaXNDb25uZWN0ZWQgPSAoKTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIGV2ZW50U291cmNlPy5yZWFkeVN0YXRlID09PSBFdmVudFNvdXJjZS5PUEVOO1xuICB9O1xuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gKGRhdGE6IHN0cmluZywgZXZlbnRUeXBlPzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgaWYgKCFpc0Nvbm5lY3RlZCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NTRSBjb25uZWN0aW9uIG5vdCBlc3RhYmxpc2hlZCcpO1xuICAgIH1cblxuICAgIC8vIE5vdGU6IFNTRSBpcyBvbmUtd2F5LCBidXQgd2UgY2FuIGRpc3BhdGNoIHRvIGZsdXggZm9yIGxvZ2dpbmdcbiAgICBmbHV4LmRpc3BhdGNoKHtcbiAgICAgIHR5cGU6ICdTU0VfTUVTU0FHRV9TRU5UJyxcbiAgICAgIGRhdGEsXG4gICAgICBldmVudFR5cGVcbiAgICB9KTtcbiAgfTtcblxuICBjb25zdCBhZGRFdmVudExpc3RlbmVyID0gKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IFNTRUV2ZW50KSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gICAgaWYgKCFldmVudEhhbmRsZXJzLmhhcyhldmVudFR5cGUpKSB7XG4gICAgICBldmVudEhhbmRsZXJzLnNldChldmVudFR5cGUsIG5ldyBTZXQoKSk7XG4gICAgfVxuICAgIGV2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50VHlwZSkhLmFkZChoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCByZW1vdmVFdmVudExpc3RlbmVyID0gKGV2ZW50VHlwZTogc3RyaW5nLCBoYW5kbGVyOiAoZXZlbnQ6IFNTRUV2ZW50KSA9PiB2b2lkKTogdm9pZCA9PiB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudEhhbmRsZXJzLmdldChldmVudFR5cGUpO1xuICAgIGlmIChoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCB1cGRhdGVTU0VPcHRpb25zID0gKG5ld09wdGlvbnM6IFNTRUFjdGlvbnNPcHRpb25zKTogdm9pZCA9PiB7XG4gICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0T3B0aW9ucywgbmV3T3B0aW9ucy5zc2VPcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNvbm5lY3QsXG4gICAgZGlzY29ubmVjdCxcbiAgICByZWNvbm5lY3QsXG4gICAgaXNDb25uZWN0ZWQsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgYWRkRXZlbnRMaXN0ZW5lcixcbiAgICByZW1vdmVFdmVudExpc3RlbmVyLFxuICAgIHVwZGF0ZVNTRU9wdGlvbnNcbiAgfTtcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBMENPLE1BQU1BLEVBQW1CLENBQzlCQyxFQUNBQyxJQUNlLENBQ2YsSUFBSUMsRUFBa0MsS0FDbENDLEVBQWEsRUFDYkMsRUFBc0MsS0FDdENDLEVBQWdCLElBQUksSUFFeEIsTUFBTUMsRUFBdUMsQ0FDM0MsSUFBSyxHQUNMLGdCQUFpQixHQUNqQixjQUFlLElBQ2YsV0FBWSxFQUNaLFFBQVMsSUFDVCxHQUFHTCxHQUFTLFVBQ2QsRUFFTU0sRUFBaUJDLEdBQXdCLENBQzdDLE1BQU1DLEVBQXFCLENBQ3pCLEdBQUlELEVBQU0sWUFDVixNQUFPQSxFQUFNLEtBQ2IsS0FBTUEsRUFBTSxJQUNkLEVBR0FQLEdBQVMsWUFBWVEsQ0FBUSxFQUc3QixNQUFNQyxFQUFXTCxFQUFjLElBQUlHLEVBQU0sSUFBSSxFQUN6Q0UsR0FDRkEsRUFBUyxRQUFRQyxHQUFXQSxFQUFRRixDQUFRLENBQUMsRUFJL0NULEVBQUssU0FBUyxDQUNaLEtBQU0sdUJBQ04sTUFBT1MsQ0FDVCxDQUFDLENBQ0gsRUFFTUcsRUFBZUMsR0FBaUIsQ0FDcENaLEdBQVMsVUFBVVksQ0FBSyxFQUV4QmIsRUFBSyxTQUFTLENBQ1osS0FBTSx1QkFDTixNQUFBYSxDQUNGLENBQUMsRUFHR1gsR0FBZUMsR0FBY0csRUFBZSxZQUFjLEtBQzVESCxJQUNBLFdBQVcsSUFBTVcsRUFBVSxFQUFHUixFQUFlLGFBQWEsRUFFOUQsRUFFTVMsRUFBY1AsR0FBaUIsQ0FDbkNMLEVBQWEsRUFDYkYsR0FBUyxTQUFTTyxDQUFLLEVBRXZCUixFQUFLLFNBQVMsQ0FDWixLQUFNLHNCQUNOLE1BQUFRLENBQ0YsQ0FBQyxDQUNILEVBV01RLEVBQVUsTUFBT0MsR0FBNEQsQ0FDakYsTUFBTUMsRUFBTyxDQUFFLEdBQUdaLEVBQWdCLEdBQUdXLENBQWtCLEVBRXZELEdBQUksQ0FBQ0MsRUFBSyxJQUNSLE1BQU0sSUFBSSxNQUFNLHFCQUFxQixFQUd2Q0MsRUFBVyxFQUVYLEdBQUksQ0FDRmpCLEVBQWMsSUFBSSxZQUFZZ0IsRUFBSyxJQUFLLENBQ3RDLGdCQUFpQkEsRUFBSyxlQUN4QixDQUFDLEVBRURoQixFQUFZLFVBQVlLLEVBQ3hCTCxFQUFZLFFBQVVVLEVBQ3RCVixFQUFZLE9BQVNhLEVBR2pCRyxFQUFLLFNBQ1AsV0FBVyxJQUFNLENBQ1hoQixHQUFlQSxFQUFZLGFBQWUsWUFBWSxhQUN4REEsRUFBWSxNQUFNLEVBQ2xCVSxFQUFZLElBQUksTUFBTSxTQUFTLENBQUMsRUFFcEMsRUFBR00sRUFBSyxPQUFPLENBR25CLE9BQVNMLEVBQU8sQ0FDZCxNQUFBRCxFQUFZQyxDQUFjLEVBQ3BCQSxDQUNSLENBQ0YsRUFFTU0sRUFBYSxJQUFZLENBQ3pCakIsSUFDRkEsRUFBWSxNQUFNLEVBQ2xCQSxFQUFjLE1BR1pFLElBQ0YsYUFBYUEsQ0FBWSxFQUN6QkEsRUFBZSxLQUVuQixFQUVNVSxFQUFZLFNBQTJCLENBQzNDSyxFQUFXLEVBQ1gsTUFBTUgsRUFBUSxDQUNoQixFQUVNSSxFQUFjLElBQ1hsQixHQUFhLGFBQWUsWUFBWSxLQWtDakQsTUFBTyxDQUNMLFFBQUFjLEVBQ0EsV0FBQUcsRUFDQSxVQUFBTCxFQUNBLFlBQUFNLEVBQ0EsWUFwQ2tCLENBQUNDLEVBQWNDLElBQTZCLENBQzlELEdBQUksQ0FBQ0YsRUFBWSxFQUNmLE1BQU0sSUFBSSxNQUFNLGdDQUFnQyxFQUlsRHBCLEVBQUssU0FBUyxDQUNaLEtBQU0sbUJBQ04sS0FBQXFCLEVBQ0EsVUFBQUMsQ0FDRixDQUFDLENBQ0gsRUEwQkUsaUJBeEJ1QixDQUFDQSxFQUFtQlgsSUFBNkMsQ0FDbkZOLEVBQWMsSUFBSWlCLENBQVMsR0FDOUJqQixFQUFjLElBQUlpQixFQUFXLElBQUksR0FBSyxFQUV4Q2pCLEVBQWMsSUFBSWlCLENBQVMsRUFBRyxJQUFJWCxDQUFPLENBQzNDLEVBb0JFLG9CQWxCMEIsQ0FBQ1csRUFBbUJYLElBQTZDLENBQzNGLE1BQU1ELEVBQVdMLEVBQWMsSUFBSWlCLENBQVMsRUFDeENaLEdBQ0ZBLEVBQVMsT0FBT0MsQ0FBTyxDQUUzQixFQWNFLGlCQVp3QlksR0FBd0MsQ0FDaEUsT0FBTyxPQUFPakIsRUFBZ0JpQixFQUFXLFVBQVUsQ0FDckQsQ0FXQSxDQUNGIiwKICAibmFtZXMiOiBbImNyZWF0ZVNTRUFjdGlvbnMiLCAiZmx1eCIsICJvcHRpb25zIiwgImV2ZW50U291cmNlIiwgInJldHJ5Q291bnQiLCAicmV0cnlUaW1lb3V0IiwgImV2ZW50SGFuZGxlcnMiLCAiZGVmYXVsdE9wdGlvbnMiLCAiaGFuZGxlTWVzc2FnZSIsICJldmVudCIsICJzc2VFdmVudCIsICJoYW5kbGVycyIsICJoYW5kbGVyIiwgImhhbmRsZUVycm9yIiwgImVycm9yIiwgInJlY29ubmVjdCIsICJoYW5kbGVPcGVuIiwgImNvbm5lY3QiLCAiY29ubmVjdGlvbk9wdGlvbnMiLCAib3B0cyIsICJkaXNjb25uZWN0IiwgImlzQ29ubmVjdGVkIiwgImRhdGEiLCAiZXZlbnRUeXBlIiwgIm5ld09wdGlvbnMiXQp9Cg==
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ export const createSSEActions = (flux, options)=>{
|
|
5
|
+
let eventSource = null;
|
|
6
|
+
let retryCount = 0;
|
|
7
|
+
let retryTimeout = null;
|
|
8
|
+
let eventHandlers = new Map();
|
|
9
|
+
const defaultOptions = {
|
|
10
|
+
url: '',
|
|
11
|
+
withCredentials: false,
|
|
12
|
+
retryInterval: 5000,
|
|
13
|
+
maxRetries: 5,
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
...options?.sseOptions
|
|
16
|
+
};
|
|
17
|
+
const handleMessage = (event)=>{
|
|
18
|
+
const sseEvent = {
|
|
19
|
+
id: event.lastEventId,
|
|
20
|
+
event: event.type,
|
|
21
|
+
data: event.data
|
|
22
|
+
};
|
|
23
|
+
// Call global message handler
|
|
24
|
+
options?.onMessage?.(sseEvent);
|
|
25
|
+
// Call specific event handlers
|
|
26
|
+
const handlers = eventHandlers.get(event.type);
|
|
27
|
+
if (handlers) {
|
|
28
|
+
handlers.forEach((handler)=>handler(sseEvent));
|
|
29
|
+
}
|
|
30
|
+
// Dispatch to flux store
|
|
31
|
+
flux.dispatch({
|
|
32
|
+
type: 'SSE_MESSAGE_RECEIVED',
|
|
33
|
+
event: sseEvent
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
const handleError = (error)=>{
|
|
37
|
+
options?.onError?.(error);
|
|
38
|
+
flux.dispatch({
|
|
39
|
+
type: 'SSE_CONNECTION_ERROR',
|
|
40
|
+
error
|
|
41
|
+
});
|
|
42
|
+
// Auto-reconnect if not manually disconnected
|
|
43
|
+
if (eventSource && retryCount < (defaultOptions.maxRetries || 5)) {
|
|
44
|
+
retryCount++;
|
|
45
|
+
setTimeout(()=>reconnect(), defaultOptions.retryInterval);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const handleOpen = (event)=>{
|
|
49
|
+
retryCount = 0;
|
|
50
|
+
options?.onOpen?.(event);
|
|
51
|
+
flux.dispatch({
|
|
52
|
+
type: 'SSE_CONNECTION_OPEN',
|
|
53
|
+
event
|
|
54
|
+
});
|
|
55
|
+
};
|
|
56
|
+
// const handleClose = (event: CloseEvent) => {
|
|
57
|
+
// options?.onClose?.(event);
|
|
58
|
+
// flux.dispatch({
|
|
59
|
+
// type: 'SSE_CONNECTION_CLOSED',
|
|
60
|
+
// event
|
|
61
|
+
// });
|
|
62
|
+
// };
|
|
63
|
+
const connect = async (connectionOptions)=>{
|
|
64
|
+
const opts = {
|
|
65
|
+
...defaultOptions,
|
|
66
|
+
...connectionOptions
|
|
67
|
+
};
|
|
68
|
+
if (!opts.url) {
|
|
69
|
+
throw new Error('SSE URL is required');
|
|
70
|
+
}
|
|
71
|
+
disconnect();
|
|
72
|
+
try {
|
|
73
|
+
eventSource = new EventSource(opts.url, {
|
|
74
|
+
withCredentials: opts.withCredentials
|
|
75
|
+
});
|
|
76
|
+
eventSource.onmessage = handleMessage;
|
|
77
|
+
eventSource.onerror = handleError;
|
|
78
|
+
eventSource.onopen = handleOpen;
|
|
79
|
+
// Set timeout
|
|
80
|
+
if (opts.timeout) {
|
|
81
|
+
setTimeout(()=>{
|
|
82
|
+
if (eventSource && eventSource.readyState === EventSource.CONNECTING) {
|
|
83
|
+
eventSource.close();
|
|
84
|
+
handleError(new Event('timeout'));
|
|
85
|
+
}
|
|
86
|
+
}, opts.timeout);
|
|
87
|
+
}
|
|
88
|
+
} catch (error) {
|
|
89
|
+
handleError(error);
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const disconnect = ()=>{
|
|
94
|
+
if (eventSource) {
|
|
95
|
+
eventSource.close();
|
|
96
|
+
eventSource = null;
|
|
97
|
+
}
|
|
98
|
+
if (retryTimeout) {
|
|
99
|
+
clearTimeout(retryTimeout);
|
|
100
|
+
retryTimeout = null;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
const reconnect = async ()=>{
|
|
104
|
+
disconnect();
|
|
105
|
+
await connect();
|
|
106
|
+
};
|
|
107
|
+
const isConnected = ()=>{
|
|
108
|
+
return eventSource?.readyState === EventSource.OPEN;
|
|
109
|
+
};
|
|
110
|
+
const sendMessage = (data, eventType)=>{
|
|
111
|
+
if (!isConnected()) {
|
|
112
|
+
throw new Error('SSE connection not established');
|
|
113
|
+
}
|
|
114
|
+
// Note: SSE is one-way, but we can dispatch to flux for logging
|
|
115
|
+
flux.dispatch({
|
|
116
|
+
type: 'SSE_MESSAGE_SENT',
|
|
117
|
+
data,
|
|
118
|
+
eventType
|
|
119
|
+
});
|
|
120
|
+
};
|
|
121
|
+
const addEventListener = (eventType, handler)=>{
|
|
122
|
+
if (!eventHandlers.has(eventType)) {
|
|
123
|
+
eventHandlers.set(eventType, new Set());
|
|
124
|
+
}
|
|
125
|
+
eventHandlers.get(eventType).add(handler);
|
|
126
|
+
};
|
|
127
|
+
const removeEventListener = (eventType, handler)=>{
|
|
128
|
+
const handlers = eventHandlers.get(eventType);
|
|
129
|
+
if (handlers) {
|
|
130
|
+
handlers.delete(handler);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
const updateSSEOptions = (newOptions)=>{
|
|
134
|
+
Object.assign(defaultOptions, newOptions.sseOptions);
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
connect,
|
|
138
|
+
disconnect,
|
|
139
|
+
reconnect,
|
|
140
|
+
isConnected,
|
|
141
|
+
sendMessage,
|
|
142
|
+
addEventListener,
|
|
143
|
+
removeEventListener,
|
|
144
|
+
updateSSEOptions
|
|
145
|
+
};
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9zc2VBY3Rpb25zL3NzZUFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuaW1wb3J0IHR5cGUge0ZsdXhGcmFtZXdvcmt9IGZyb20gJ0BubGFicy9hcmtoYW1qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1NFRXZlbnQge1xuICByZWFkb25seSBkYXRhOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50Pzogc3RyaW5nO1xuICByZWFkb25seSBpZD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmV0cnk/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1NFQ29ubmVjdGlvbk9wdGlvbnMge1xuICByZWFkb25seSBoZWFkZXJzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgcmVhZG9ubHkgcmV0cnlJbnRlcnZhbD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGltZW91dD86IG51bWJlcjtcbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU1NFQWN0aW9uc09wdGlvbnMge1xuICByZWFkb25seSBvbkNsb3NlPzogKGV2ZW50OiBDbG9zZUV2ZW50KSA9PiB2b2lkO1xuICByZWFkb25seSBvbkVycm9yPzogKGVycm9yOiBFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25NZXNzYWdlPzogKGV2ZW50OiBTU0VFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgb25PcGVuPzogKGV2ZW50OiBFdmVudCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgc3NlT3B0aW9ucz86IFNTRUNvbm5lY3Rpb25PcHRpb25zO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNTRUFjdGlvbnMge1xuICByZWFkb25seSBjb25uZWN0OiAob3B0aW9ucz86IFNTRUNvbm5lY3Rpb25PcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBkaXNjb25uZWN0OiAoKSA9PiB2b2lkO1xuICByZWFkb25seSByZWNvbm5lY3Q6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHJlYWRvbmx5IGlzQ29ubmVjdGVkOiAoKSA9PiBib29sZWFuO1xuICByZWFkb25seSBzZW5kTWVzc2FnZTogKGRhdGE6IHN0cmluZywgZXZlbnRUeXBlPzogc3RyaW5nKSA9PiB2b2lkO1xuICByZWFkb25seSBhZGRFdmVudExpc3RlbmVyOiAoZXZlbnRUeXBlOiBzdHJpbmcsIGhhbmRsZXI6IChldmVudDogU1NFRXZlbnQpID0+IHZvaWQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IHJlbW92ZUV2ZW50TGlzdGVuZXI6IChldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBTU0VFdmVudCkgPT4gdm9pZCkgPT4gdm9pZDtcbiAgcmVhZG9ubHkgdXBkYXRlU1NFT3B0aW9uczogKG9wdGlvbnM6IFNTRUFjdGlvbnNPcHRpb25zKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU1NFQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgb3B0aW9ucz86IFNTRUFjdGlvbnNPcHRpb25zXG4pOiBTU0VBY3Rpb25zID0+IHtcbiAgbGV0IGV2ZW50U291cmNlOiBFdmVudFNvdXJjZSB8IG51bGwgPSBudWxsO1xuICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gIGxldCByZXRyeVRpbWVvdXQ6IE5vZGVKUy5UaW1lb3V0IHwgbnVsbCA9IG51bGw7XG4gIGxldCBldmVudEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNldDwoZXZlbnQ6IFNTRUV2ZW50KSA9PiB2b2lkPj4oKTtcblxuICBjb25zdCBkZWZhdWx0T3B0aW9uczogU1NFQ29ubmVjdGlvbk9wdGlvbnMgPSB7XG4gICAgdXJsOiAnJyxcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHJldHJ5SW50ZXJ2YWw6IDUwMDAsXG4gICAgbWF4UmV0cmllczogNSxcbiAgICB0aW1lb3V0OiAzMDAwMCxcbiAgICAuLi5vcHRpb25zPy5zc2VPcHRpb25zXG4gIH07XG5cbiAgY29uc3QgaGFuZGxlTWVzc2FnZSA9IChldmVudDogTWVzc2FnZUV2ZW50KSA9PiB7XG4gICAgY29uc3Qgc3NlRXZlbnQ6IFNTRUV2ZW50ID0ge1xuICAgICAgaWQ6IGV2ZW50Lmxhc3RFdmVudElkLFxuICAgICAgZXZlbnQ6IGV2ZW50LnR5cGUsXG4gICAgICBkYXRhOiBldmVudC5kYXRhXG4gICAgfTtcblxuICAgIC8vIENhbGwgZ2xvYmFsIG1lc3NhZ2UgaGFuZGxlclxuICAgIG9wdGlvbnM/Lm9uTWVzc2FnZT8uKHNzZUV2ZW50KTtcblxuICAgIC8vIENhbGwgc3BlY2lmaWMgZXZlbnQgaGFuZGxlcnNcbiAgICBjb25zdCBoYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMuZ2V0KGV2ZW50LnR5cGUpO1xuICAgIGlmIChoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMuZm9yRWFjaChoYW5kbGVyID0+IGhhbmRsZXIoc3NlRXZlbnQpKTtcbiAgICB9XG5cbiAgICAvLyBEaXNwYXRjaCB0byBmbHV4IHN0b3JlXG4gICAgZmx1eC5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnU1NFX01FU1NBR0VfUkVDRUlWRUQnLFxuICAgICAgZXZlbnQ6IHNzZUV2ZW50XG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlRXJyb3IgPSAoZXJyb3I6IEV2ZW50KSA9PiB7XG4gICAgb3B0aW9ucz8ub25FcnJvcj8uKGVycm9yKTtcblxuICAgIGZsdXguZGlzcGF0Y2goe1xuICAgICAgdHlwZTogJ1NTRV9DT05ORUNUSU9OX0VSUk9SJyxcbiAgICAgIGVycm9yXG4gICAgfSk7XG5cbiAgICAvLyBBdXRvLXJlY29ubmVjdCBpZiBub3QgbWFudWFsbHkgZGlzY29ubmVjdGVkXG4gICAgaWYgKGV2ZW50U291cmNlICYmIHJldHJ5Q291bnQgPCAoZGVmYXVsdE9wdGlvbnMubWF4UmV0cmllcyB8fCA1KSkge1xuICAgICAgcmV0cnlDb3VudCsrO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiByZWNvbm5lY3QoKSwgZGVmYXVsdE9wdGlvbnMucmV0cnlJbnRlcnZhbCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGhhbmRsZU9wZW4gPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgcmV0cnlDb3VudCA9IDA7XG4gICAgb3B0aW9ucz8ub25PcGVuPy4oZXZlbnQpO1xuXG4gICAgZmx1eC5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnU1NFX0NPTk5FQ1RJT05fT1BFTicsXG4gICAgICBldmVudFxuICAgIH0pO1xuICB9O1xuXG4gIC8vIGNvbnN0IGhhbmRsZUNsb3NlID0gKGV2ZW50OiBDbG9zZUV2ZW50KSA9PiB7XG4gIC8vICAgb3B0aW9ucz8ub25DbG9zZT8uKGV2ZW50KTtcblxuICAvLyAgIGZsdXguZGlzcGF0Y2goe1xuICAvLyAgICAgdHlwZTogJ1NTRV9DT05ORUNUSU9OX0NMT1NFRCcsXG4gIC8vICAgICBldmVudFxuICAvLyAgIH0pO1xuICAvLyB9O1xuXG4gIGNvbnN0IGNvbm5lY3QgPSBhc3luYyAoY29ubmVjdGlvbk9wdGlvbnM/OiBTU0VDb25uZWN0aW9uT3B0aW9ucyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB7IC4uLmRlZmF1bHRPcHRpb25zLCAuLi5jb25uZWN0aW9uT3B0aW9ucyB9O1xuXG4gICAgaWYgKCFvcHRzLnVybCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0UgVVJMIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgZGlzY29ubmVjdCgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGV2ZW50U291cmNlID0gbmV3IEV2ZW50U291cmNlKG9wdHMudXJsLCB7XG4gICAgICAgIHdpdGhDcmVkZW50aWFsczogb3B0cy53aXRoQ3JlZGVudGlhbHNcbiAgICAgIH0pO1xuXG4gICAgICBldmVudFNvdXJjZS5vbm1lc3NhZ2UgPSBoYW5kbGVNZXNzYWdlO1xuICAgICAgZXZlbnRTb3VyY2Uub25lcnJvciA9IGhhbmRsZUVycm9yO1xuICAgICAgZXZlbnRTb3VyY2Uub25vcGVuID0gaGFuZGxlT3BlbjtcblxuICAgICAgLy8gU2V0IHRpbWVvdXRcbiAgICAgIGlmIChvcHRzLnRpbWVvdXQpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKGV2ZW50U291cmNlICYmIGV2ZW50U291cmNlLnJlYWR5U3RhdGUgPT09IEV2ZW50U291cmNlLkNPTk5FQ1RJTkcpIHtcbiAgICAgICAgICAgIGV2ZW50U291cmNlLmNsb3NlKCk7XG4gICAgICAgICAgICBoYW5kbGVFcnJvcihuZXcgRXZlbnQoJ3RpbWVvdXQnKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LCBvcHRzLnRpbWVvdXQpO1xuICAgICAgfVxuXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZUVycm9yKGVycm9yIGFzIEV2ZW50KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBkaXNjb25uZWN0ID0gKCk6IHZvaWQgPT4ge1xuICAgIGlmIChldmVudFNvdXJjZSkge1xuICAgICAgZXZlbnRTb3VyY2UuY2xvc2UoKTtcbiAgICAgIGV2ZW50U291cmNlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocmV0cnlUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQocmV0cnlUaW1lb3V0KTtcbiAgICAgIHJldHJ5VGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlY29ubmVjdCA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICBkaXNjb25uZWN0KCk7XG4gICAgYXdhaXQgY29ubmVjdCgpO1xuICB9O1xuXG4gIGNvbnN0IGlzQ29ubmVjdGVkID0gKCk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiBldmVudFNvdXJjZT8ucmVhZHlTdGF0ZSA9PT0gRXZlbnRTb3VyY2UuT1BFTjtcbiAgfTtcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IChkYXRhOiBzdHJpbmcsIGV2ZW50VHlwZT86IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgIGlmICghaXNDb25uZWN0ZWQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTU0UgY29ubmVjdGlvbiBub3QgZXN0YWJsaXNoZWQnKTtcbiAgICB9XG5cbiAgICAvLyBOb3RlOiBTU0UgaXMgb25lLXdheSwgYnV0IHdlIGNhbiBkaXNwYXRjaCB0byBmbHV4IGZvciBsb2dnaW5nXG4gICAgZmx1eC5kaXNwYXRjaCh7XG4gICAgICB0eXBlOiAnU1NFX01FU1NBR0VfU0VOVCcsXG4gICAgICBkYXRhLFxuICAgICAgZXZlbnRUeXBlXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgYWRkRXZlbnRMaXN0ZW5lciA9IChldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBTU0VFdmVudCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgIGlmICghZXZlbnRIYW5kbGVycy5oYXMoZXZlbnRUeXBlKSkge1xuICAgICAgZXZlbnRIYW5kbGVycy5zZXQoZXZlbnRUeXBlLCBuZXcgU2V0KCkpO1xuICAgIH1cbiAgICBldmVudEhhbmRsZXJzLmdldChldmVudFR5cGUpIS5hZGQoaGFuZGxlcik7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9IChldmVudFR5cGU6IHN0cmluZywgaGFuZGxlcjogKGV2ZW50OiBTU0VFdmVudCkgPT4gdm9pZCk6IHZvaWQgPT4ge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5nZXQoZXZlbnRUeXBlKTtcbiAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgIGhhbmRsZXJzLmRlbGV0ZShoYW5kbGVyKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgdXBkYXRlU1NFT3B0aW9ucyA9IChuZXdPcHRpb25zOiBTU0VBY3Rpb25zT3B0aW9ucyk6IHZvaWQgPT4ge1xuICAgIE9iamVjdC5hc3NpZ24oZGVmYXVsdE9wdGlvbnMsIG5ld09wdGlvbnMuc3NlT3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBjb25uZWN0LFxuICAgIGRpc2Nvbm5lY3QsXG4gICAgcmVjb25uZWN0LFxuICAgIGlzQ29ubmVjdGVkLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGFkZEV2ZW50TGlzdGVuZXIsXG4gICAgcmVtb3ZlRXZlbnRMaXN0ZW5lcixcbiAgICB1cGRhdGVTU0VPcHRpb25zXG4gIH07XG59OyJdLCJuYW1lcyI6WyJjcmVhdGVTU0VBY3Rpb25zIiwiZmx1eCIsIm9wdGlvbnMiLCJldmVudFNvdXJjZSIsInJldHJ5Q291bnQiLCJyZXRyeVRpbWVvdXQiLCJldmVudEhhbmRsZXJzIiwiTWFwIiwiZGVmYXVsdE9wdGlvbnMiLCJ1cmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJyZXRyeUludGVydmFsIiwibWF4UmV0cmllcyIsInRpbWVvdXQiLCJzc2VPcHRpb25zIiwiaGFuZGxlTWVzc2FnZSIsImV2ZW50Iiwic3NlRXZlbnQiLCJpZCIsImxhc3RFdmVudElkIiwidHlwZSIsImRhdGEiLCJvbk1lc3NhZ2UiLCJoYW5kbGVycyIsImdldCIsImZvckVhY2giLCJoYW5kbGVyIiwiZGlzcGF0Y2giLCJoYW5kbGVFcnJvciIsImVycm9yIiwib25FcnJvciIsInNldFRpbWVvdXQiLCJyZWNvbm5lY3QiLCJoYW5kbGVPcGVuIiwib25PcGVuIiwiY29ubmVjdCIsImNvbm5lY3Rpb25PcHRpb25zIiwib3B0cyIsIkVycm9yIiwiZGlzY29ubmVjdCIsIkV2ZW50U291cmNlIiwib25tZXNzYWdlIiwib25lcnJvciIsIm9ub3BlbiIsInJlYWR5U3RhdGUiLCJDT05ORUNUSU5HIiwiY2xvc2UiLCJFdmVudCIsImNsZWFyVGltZW91dCIsImlzQ29ubmVjdGVkIiwiT1BFTiIsInNlbmRNZXNzYWdlIiwiZXZlbnRUeXBlIiwiYWRkRXZlbnRMaXN0ZW5lciIsImhhcyIsInNldCIsIlNldCIsImFkZCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJkZWxldGUiLCJ1cGRhdGVTU0VPcHRpb25zIiwibmV3T3B0aW9ucyIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBdUNELE9BQU8sTUFBTUEsbUJBQW1CLENBQzlCQyxNQUNBQztJQUVBLElBQUlDLGNBQWtDO0lBQ3RDLElBQUlDLGFBQWE7SUFDakIsSUFBSUMsZUFBc0M7SUFDMUMsSUFBSUMsZ0JBQWdCLElBQUlDO0lBRXhCLE1BQU1DLGlCQUF1QztRQUMzQ0MsS0FBSztRQUNMQyxpQkFBaUI7UUFDakJDLGVBQWU7UUFDZkMsWUFBWTtRQUNaQyxTQUFTO1FBQ1QsR0FBR1gsU0FBU1ksVUFBVTtJQUN4QjtJQUVBLE1BQU1DLGdCQUFnQixDQUFDQztRQUNyQixNQUFNQyxXQUFxQjtZQUN6QkMsSUFBSUYsTUFBTUcsV0FBVztZQUNyQkgsT0FBT0EsTUFBTUksSUFBSTtZQUNqQkMsTUFBTUwsTUFBTUssSUFBSTtRQUNsQjtRQUVBLDhCQUE4QjtRQUM5Qm5CLFNBQVNvQixZQUFZTDtRQUVyQiwrQkFBK0I7UUFDL0IsTUFBTU0sV0FBV2pCLGNBQWNrQixHQUFHLENBQUNSLE1BQU1JLElBQUk7UUFDN0MsSUFBSUcsVUFBVTtZQUNaQSxTQUFTRSxPQUFPLENBQUNDLENBQUFBLFVBQVdBLFFBQVFUO1FBQ3RDO1FBRUEseUJBQXlCO1FBQ3pCaEIsS0FBSzBCLFFBQVEsQ0FBQztZQUNaUCxNQUFNO1lBQ05KLE9BQU9DO1FBQ1Q7SUFDRjtJQUVBLE1BQU1XLGNBQWMsQ0FBQ0M7UUFDbkIzQixTQUFTNEIs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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { PaymentPlanType, PaymentSubscriptionType } from '../../types/subscriptions.types.js';
|
|
3
|
+
import type { ActionRequestOptions } from '../../utils/requestCache.js';
|
|
4
|
+
export type SubscriptionApiResultsType = {
|
|
5
|
+
subscriptions: {
|
|
6
|
+
addPlan?: PaymentPlanType;
|
|
7
|
+
addSubscription?: PaymentSubscriptionType;
|
|
8
|
+
deleteSubscription?: boolean;
|
|
9
|
+
getPlanByItem?: PaymentPlanType;
|
|
10
|
+
getSubscription?: PaymentSubscriptionType;
|
|
11
|
+
getSubscriptionListByUser?: PaymentSubscriptionType[];
|
|
12
|
+
getSubscriptionByItem?: PaymentSubscriptionType;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export interface SubscriptionActions {
|
|
16
|
+
addPlan: (plan: Partial<PaymentPlanType>, planProps?: string[], requestOptions?: ActionRequestOptions) => Promise<PaymentPlanType>;
|
|
17
|
+
addSubscription: (subscription: Partial<PaymentSubscriptionType>, subscriptionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<PaymentSubscriptionType>;
|
|
18
|
+
deleteSubscription: (itemId: string, itemType?: string, requestOptions?: ActionRequestOptions) => Promise<boolean>;
|
|
19
|
+
getPlanByItem: (itemId: string, itemType?: string, planProps?: string[], requestOptions?: ActionRequestOptions) => Promise<PaymentPlanType>;
|
|
20
|
+
getSubscriptionListByUser: (userId: string, from?: number, to?: number, subscriptionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<PaymentSubscriptionType[]>;
|
|
21
|
+
getSubscriptionByItem: (itemId: string, itemType?: string, subscriptionProps?: string[], requestOptions?: ActionRequestOptions) => Promise<PaymentSubscriptionType>;
|
|
22
|
+
}
|
|
23
|
+
export declare const createSubscriptionActions: (flux: FluxFramework) => SubscriptionActions;
|
|
24
|
+
//# sourceMappingURL=subscriptionActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptionActions.d.ts","sourceRoot":"","sources":["../../../src/actions/subscriptionActions/subscriptionActions.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,eAAe,EAAE,uBAAuB,EAAC,MAAM,oCAAoC,CAAC;AACjG,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AA2BtE,MAAM,MAAM,0BAA0B,GAAG;IACvC,aAAa,EAAE;QACb,OAAO,CAAC,EAAE,eAAe,CAAC;QAC1B,eAAe,CAAC,EAAE,uBAAuB,CAAC;QAC1C,kBAAkB,CAAC,EAAE,OAAO,CAAC;QAC7B,aAAa,CAAC,EAAE,eAAe,CAAC;QAChC,eAAe,CAAC,EAAE,uBAAuB,CAAC;QAC1C,yBAAyB,CAAC,EAAE,uBAAuB,EAAE,CAAC;QACtD,qBAAqB,CAAC,EAAE,uBAAuB,CAAC;KACjD,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IACnI,eAAe,EAAE,CAAC,YAAY,EAAE,OAAO,CAAC,uBAAuB,CAAC,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC3K,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnH,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC5I,yBAAyB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACnL,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,cAAc,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACrK;AAED,eAAO,MAAM,yBAAyB,GACpC,MAAM,aAAa,KAClB,mBA+PF,CAAC"}
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { parseId, parseNum, parseString } from '@nlabs/utils';
|
|
5
|
+
import { SUBSCRIPTION_CONSTANTS } from '../../stores/subscriptionStore.js';
|
|
6
|
+
import { appMutation, appQuery } from '../../utils/api.js';
|
|
7
|
+
import { clearCachedRequest, getCachedRequest, setCachedRequest } from '../../utils/requestCache.js';
|
|
8
|
+
const DATA_TYPE = 'subscriptions';
|
|
9
|
+
const DEFAULT_ITEM_TYPE = 'personas';
|
|
10
|
+
const DEFAULT_PLAN_FIELDS = [
|
|
11
|
+
'amount',
|
|
12
|
+
'currency',
|
|
13
|
+
'description',
|
|
14
|
+
'id',
|
|
15
|
+
'interval',
|
|
16
|
+
'intervalCount',
|
|
17
|
+
'isActive',
|
|
18
|
+
'itemId',
|
|
19
|
+
'itemType',
|
|
20
|
+
'name',
|
|
21
|
+
'userId'
|
|
22
|
+
];
|
|
23
|
+
const DEFAULT_SUBSCRIPTION_FIELDS = [
|
|
24
|
+
'cancelDate',
|
|
25
|
+
'expires',
|
|
26
|
+
'id',
|
|
27
|
+
'itemId',
|
|
28
|
+
'itemType',
|
|
29
|
+
'planId',
|
|
30
|
+
'status',
|
|
31
|
+
'transactionId',
|
|
32
|
+
'trialEnd',
|
|
33
|
+
'userId',
|
|
34
|
+
`plan {${DEFAULT_PLAN_FIELDS.join(', ')}}`
|
|
35
|
+
];
|
|
36
|
+
const buildItemKey = (itemId, itemType = DEFAULT_ITEM_TYPE)=>`${parseString(itemType || DEFAULT_ITEM_TYPE, 32).toLowerCase()}:${parseId(itemId)}`;
|
|
37
|
+
const normalizePlan = (plan = {})=>({
|
|
38
|
+
...plan,
|
|
39
|
+
...plan.amount !== undefined ? {
|
|
40
|
+
amount: parseNum(plan.amount)
|
|
41
|
+
} : {},
|
|
42
|
+
...plan.interval ? {
|
|
43
|
+
interval: parseString(plan.interval, 16).toLowerCase()
|
|
44
|
+
} : {},
|
|
45
|
+
...plan.intervalCount !== undefined ? {
|
|
46
|
+
intervalCount: parseNum(plan.intervalCount)
|
|
47
|
+
} : {},
|
|
48
|
+
...plan.itemId ? {
|
|
49
|
+
itemId: parseId(plan.itemId)
|
|
50
|
+
} : {},
|
|
51
|
+
...plan.itemType ? {
|
|
52
|
+
itemType: parseString(plan.itemType, 32).toLowerCase()
|
|
53
|
+
} : {}
|
|
54
|
+
});
|
|
55
|
+
const normalizeSubscription = (subscription = {})=>({
|
|
56
|
+
...subscription,
|
|
57
|
+
...subscription.itemId ? {
|
|
58
|
+
itemId: parseId(subscription.itemId)
|
|
59
|
+
} : {},
|
|
60
|
+
...subscription.itemType ? {
|
|
61
|
+
itemType: parseString(subscription.itemType, 32).toLowerCase()
|
|
62
|
+
} : {},
|
|
63
|
+
...subscription.planId ? {
|
|
64
|
+
planId: parseId(subscription.planId)
|
|
65
|
+
} : {}
|
|
66
|
+
});
|
|
67
|
+
export const createSubscriptionActions = (flux)=>{
|
|
68
|
+
const addPlan = async (plan, planProps = [], requestOptions = {})=>{
|
|
69
|
+
const normalizedPlan = normalizePlan(plan);
|
|
70
|
+
const itemKey = buildItemKey(String(normalizedPlan.itemId || ''), String(normalizedPlan.itemType || DEFAULT_ITEM_TYPE));
|
|
71
|
+
try {
|
|
72
|
+
const queryVariables = {
|
|
73
|
+
item: {
|
|
74
|
+
type: 'PlanInput!',
|
|
75
|
+
value: normalizedPlan
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const onSuccess = (data)=>{
|
|
79
|
+
const plan = data?.subscriptions?.addPlan || {};
|
|
80
|
+
return flux.dispatch({
|
|
81
|
+
itemKey,
|
|
82
|
+
plan,
|
|
83
|
+
type: SUBSCRIPTION_CONSTANTS.ADD_PLAN_SUCCESS
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
return await appMutation(flux, 'addPlan', DATA_TYPE, queryVariables, [
|
|
87
|
+
...DEFAULT_PLAN_FIELDS,
|
|
88
|
+
...planProps
|
|
89
|
+
], {
|
|
90
|
+
onSuccess
|
|
91
|
+
});
|
|
92
|
+
} catch (error) {
|
|
93
|
+
flux.dispatch({
|
|
94
|
+
error,
|
|
95
|
+
type: SUBSCRIPTION_CONSTANTS.ADD_PLAN_ERROR
|
|
96
|
+
});
|
|
97
|
+
throw error;
|
|
98
|
+
} finally{
|
|
99
|
+
await clearCachedRequest(flux, `subscription.getPlanByItem:${itemKey}`);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
const getPlanByItem = async (itemId, itemType = DEFAULT_ITEM_TYPE, planProps = [], requestOptions = {})=>{
|
|
103
|
+
const itemKey = buildItemKey(itemId, itemType);
|
|
104
|
+
const cachedResult = getCachedRequest(flux, `subscription.getPlanByItem:${itemKey}`, {
|
|
105
|
+
itemId,
|
|
106
|
+
itemType,
|
|
107
|
+
planProps
|
|
108
|
+
}, requestOptions);
|
|
109
|
+
if (cachedResult !== undefined) {
|
|
110
|
+
return cachedResult;
|
|
111
|
+
}
|
|
112
|
+
try {
|
|
113
|
+
const queryVariables = {
|
|
114
|
+
itemId: {
|
|
115
|
+
type: 'ID!',
|
|
116
|
+
value: parseId(itemId)
|
|
117
|
+
},
|
|
118
|
+
itemType: {
|
|
119
|
+
type: 'String',
|
|
120
|
+
value: parseString(itemType || DEFAULT_ITEM_TYPE, 32).toLowerCase()
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
const onSuccess = (data)=>{
|
|
124
|
+
const plan = data?.subscriptions?.getPlanByItem || {};
|
|
125
|
+
return flux.dispatch({
|
|
126
|
+
itemKey,
|
|
127
|
+
plan,
|
|
128
|
+
type: SUBSCRIPTION_CONSTANTS.GET_PLAN_SUCCESS
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
const result = await appQuery(flux, 'getPlanByItem', DATA_TYPE, queryVariables, [
|
|
132
|
+
...DEFAULT_PLAN_FIELDS,
|
|
133
|
+
...planProps
|
|
134
|
+
], {
|
|
135
|
+
onSuccess
|
|
136
|
+
});
|
|
137
|
+
return await setCachedRequest(flux, `subscription.getPlanByItem:${itemKey}`, {
|
|
138
|
+
itemId,
|
|
139
|
+
itemType,
|
|
140
|
+
planProps
|
|
141
|
+
}, result, requestOptions);
|
|
142
|
+
} catch (error) {
|
|
143
|
+
flux.dispatch({
|
|
144
|
+
error,
|
|
145
|
+
type: SUBSCRIPTION_CONSTANTS.GET_PLAN_ERROR
|
|
146
|
+
});
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
const addSubscription = async (subscription, subscriptionProps = [], requestOptions = {})=>{
|
|
151
|
+
const normalizedSubscription = normalizeSubscription(subscription);
|
|
152
|
+
const itemKey = buildItemKey(String(normalizedSubscription.itemId || ''), String(normalizedSubscription.itemType || DEFAULT_ITEM_TYPE));
|
|
153
|
+
try {
|
|
154
|
+
const queryVariables = {
|
|
155
|
+
item: {
|
|
156
|
+
type: 'SubscriptionInput!',
|
|
157
|
+
value: normalizedSubscription
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
const onSuccess = (data)=>{
|
|
161
|
+
const subscription = data?.subscriptions?.addSubscription || {};
|
|
162
|
+
return flux.dispatch({
|
|
163
|
+
itemKey,
|
|
164
|
+
subscription,
|
|
165
|
+
type: SUBSCRIPTION_CONSTANTS.ADD_SUBSCRIPTION_SUCCESS
|
|
166
|
+
});
|
|
167
|
+
};
|
|
168
|
+
return await appMutation(flux, 'addSubscription', DATA_TYPE, queryVariables, [
|
|
169
|
+
...DEFAULT_SUBSCRIPTION_FIELDS,
|
|
170
|
+
...subscriptionProps
|
|
171
|
+
], {
|
|
172
|
+
onSuccess
|
|
173
|
+
});
|
|
174
|
+
} catch (error) {
|
|
175
|
+
flux.dispatch({
|
|
176
|
+
error,
|
|
177
|
+
type: SUBSCRIPTION_CONSTANTS.ADD_SUBSCRIPTION_ERROR
|
|
178
|
+
});
|
|
179
|
+
throw error;
|
|
180
|
+
} finally{
|
|
181
|
+
await clearCachedRequest(flux, `subscription.getSubscriptionByItem:${itemKey}`);
|
|
182
|
+
}
|
|
183
|
+
};
|
|
184
|
+
const getSubscriptionByItem = async (itemId, itemType = DEFAULT_ITEM_TYPE, subscriptionProps = [], requestOptions = {})=>{
|
|
185
|
+
const itemKey = buildItemKey(itemId, itemType);
|
|
186
|
+
const cachedResult = getCachedRequest(flux, `subscription.getSubscriptionByItem:${itemKey}`, {
|
|
187
|
+
itemId,
|
|
188
|
+
itemType,
|
|
189
|
+
subscriptionProps
|
|
190
|
+
}, requestOptions);
|
|
191
|
+
if (cachedResult !== undefined) {
|
|
192
|
+
return cachedResult;
|
|
193
|
+
}
|
|
194
|
+
try {
|
|
195
|
+
const queryVariables = {
|
|
196
|
+
itemId: {
|
|
197
|
+
type: 'ID!',
|
|
198
|
+
value: parseId(itemId)
|
|
199
|
+
},
|
|
200
|
+
itemType: {
|
|
201
|
+
type: 'String',
|
|
202
|
+
value: parseString(itemType || DEFAULT_ITEM_TYPE, 32).toLowerCase()
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const onSuccess = (data)=>{
|
|
206
|
+
const subscription = data?.subscriptions?.getSubscriptionByItem || {};
|
|
207
|
+
return flux.dispatch({
|
|
208
|
+
itemKey,
|
|
209
|
+
subscription,
|
|
210
|
+
type: SUBSCRIPTION_CONSTANTS.GET_SUBSCRIPTION_SUCCESS
|
|
211
|
+
});
|
|
212
|
+
};
|
|
213
|
+
const result = await appQuery(flux, 'getSubscriptionByItem', DATA_TYPE, queryVariables, [
|
|
214
|
+
...DEFAULT_SUBSCRIPTION_FIELDS,
|
|
215
|
+
...subscriptionProps
|
|
216
|
+
], {
|
|
217
|
+
onSuccess
|
|
218
|
+
});
|
|
219
|
+
return await setCachedRequest(flux, `subscription.getSubscriptionByItem:${itemKey}`, {
|
|
220
|
+
itemId,
|
|
221
|
+
itemType,
|
|
222
|
+
subscriptionProps
|
|
223
|
+
}, result, requestOptions);
|
|
224
|
+
} catch (error) {
|
|
225
|
+
flux.dispatch({
|
|
226
|
+
error,
|
|
227
|
+
type: SUBSCRIPTION_CONSTANTS.GET_SUBSCRIPTION_ERROR
|
|
228
|
+
});
|
|
229
|
+
throw error;
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
const getSubscriptionListByUser = async (userId, from = 0, to = 30, subscriptionProps = [], requestOptions = {})=>{
|
|
233
|
+
const normalizedUserId = parseId(userId);
|
|
234
|
+
const cacheKey = `subscription.getSubscriptionListByUser:${normalizedUserId}:${from}:${to}`;
|
|
235
|
+
const cachedResult = getCachedRequest(flux, cacheKey, {
|
|
236
|
+
from,
|
|
237
|
+
subscriptionProps,
|
|
238
|
+
to,
|
|
239
|
+
userId: normalizedUserId
|
|
240
|
+
}, requestOptions);
|
|
241
|
+
if (cachedResult !== undefined) {
|
|
242
|
+
return cachedResult;
|
|
243
|
+
}
|
|
244
|
+
try {
|
|
245
|
+
const queryVariables = {
|
|
246
|
+
userId: {
|
|
247
|
+
type: 'ID!',
|
|
248
|
+
value: normalizedUserId
|
|
249
|
+
},
|
|
250
|
+
from: {
|
|
251
|
+
type: 'Int',
|
|
252
|
+
value: from
|
|
253
|
+
},
|
|
254
|
+
to: {
|
|
255
|
+
type: 'Int',
|
|
256
|
+
value: to
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
const onSuccess = (data)=>{
|
|
260
|
+
const list = data?.subscriptions?.getSubscriptionListByUser || [];
|
|
261
|
+
return flux.dispatch({
|
|
262
|
+
list,
|
|
263
|
+
type: SUBSCRIPTION_CONSTANTS.GET_SUBSCRIPTION_LIST_SUCCESS
|
|
264
|
+
});
|
|
265
|
+
};
|
|
266
|
+
const result = await appQuery(flux, 'getSubscriptionListByUser', DATA_TYPE, queryVariables, [
|
|
267
|
+
...DEFAULT_SUBSCRIPTION_FIELDS,
|
|
268
|
+
...subscriptionProps
|
|
269
|
+
], {
|
|
270
|
+
onSuccess
|
|
271
|
+
});
|
|
272
|
+
return await setCachedRequest(flux, cacheKey, {
|
|
273
|
+
from,
|
|
274
|
+
subscriptionProps,
|
|
275
|
+
to,
|
|
276
|
+
userId: normalizedUserId
|
|
277
|
+
}, result, requestOptions);
|
|
278
|
+
} catch (error) {
|
|
279
|
+
flux.dispatch({
|
|
280
|
+
error,
|
|
281
|
+
type: SUBSCRIPTION_CONSTANTS.GET_SUBSCRIPTION_LIST_ERROR
|
|
282
|
+
});
|
|
283
|
+
throw error;
|
|
284
|
+
}
|
|
285
|
+
};
|
|
286
|
+
const deleteSubscription = async (itemId, itemType = DEFAULT_ITEM_TYPE, requestOptions = {})=>{
|
|
287
|
+
const itemKey = buildItemKey(itemId, itemType);
|
|
288
|
+
try {
|
|
289
|
+
const queryVariables = {
|
|
290
|
+
item: {
|
|
291
|
+
type: 'SubscriptionInput!',
|
|
292
|
+
value: {
|
|
293
|
+
itemId: parseId(itemId),
|
|
294
|
+
itemType: parseString(itemType || DEFAULT_ITEM_TYPE, 32).toLowerCase()
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
};
|
|
298
|
+
const onSuccess = (data)=>{
|
|
299
|
+
const success = Boolean(data?.subscriptions?.deleteSubscription);
|
|
300
|
+
return flux.dispatch({
|
|
301
|
+
itemKey,
|
|
302
|
+
success,
|
|
303
|
+
type: SUBSCRIPTION_CONSTANTS.DELETE_SUBSCRIPTION_SUCCESS
|
|
304
|
+
});
|
|
305
|
+
};
|
|
306
|
+
return await appMutation(flux, 'deleteSubscription', DATA_TYPE, queryVariables, [], {
|
|
307
|
+
onSuccess
|
|
308
|
+
});
|
|
309
|
+
} catch (error) {
|
|
310
|
+
flux.dispatch({
|
|
311
|
+
error,
|
|
312
|
+
type: SUBSCRIPTION_CONSTANTS.DELETE_SUBSCRIPTION_ERROR
|
|
313
|
+
});
|
|
314
|
+
throw error;
|
|
315
|
+
} finally{
|
|
316
|
+
await clearCachedRequest(flux, `subscription.getSubscriptionByItem:${itemKey}`);
|
|
317
|
+
}
|
|
318
|
+
};
|
|
319
|
+
return {
|
|
320
|
+
addPlan,
|
|
321
|
+
addSubscription,
|
|
322
|
+
deleteSubscription,
|
|
323
|
+
getPlanByItem,
|
|
324
|
+
getSubscriptionListByUser,
|
|
325
|
+
getSubscriptionByItem
|
|
326
|
+
};
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWN0aW9ucy9zdWJzY3JpcHRpb25BY3Rpb25zL3N1YnNjcmlwdGlvbkFjdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjYtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7cGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuXG5pbXBvcnQge1NVQlNDUklQVElPTl9DT05TVEFOVFN9IGZyb20gJy4uLy4uL3N0b3Jlcy9zdWJzY3JpcHRpb25TdG9yZS5qcyc7XG5pbXBvcnQge2FwcE11dGF0aW9uLCBhcHBRdWVyeX0gZnJvbSAnLi4vLi4vdXRpbHMvYXBpLmpzJztcbmltcG9ydCB7Y2xlYXJDYWNoZWRSZXF1ZXN0LCBnZXRDYWNoZWRSZXF1ZXN0LCBzZXRDYWNoZWRSZXF1ZXN0fSBmcm9tICcuLi8uLi91dGlscy9yZXF1ZXN0Q2FjaGUuanMnO1xuXG5pbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtQYXltZW50UGxhblR5cGUsIFBheW1lbnRTdWJzY3JpcHRpb25UeXBlfSBmcm9tICcuLi8uLi90eXBlcy9zdWJzY3JpcHRpb25zLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBY3Rpb25SZXF1ZXN0T3B0aW9uc30gZnJvbSAnLi4vLi4vdXRpbHMvcmVxdWVzdENhY2hlLmpzJztcblxuY29uc3QgREFUQV9UWVBFID0gJ3N1YnNjcmlwdGlvbnMnO1xuY29uc3QgREVGQVVMVF9JVEVNX1RZUEUgPSAncGVyc29uYXMnO1xuY29uc3QgREVGQVVMVF9QTEFOX0ZJRUxEUyA9IFsnYW1vdW50JywgJ2N1cnJlbmN5JywgJ2Rlc2NyaXB0aW9uJywgJ2lkJywgJ2ludGVydmFsJywgJ2ludGVydmFsQ291bnQnLCAnaXNBY3RpdmUnLCAnaXRlbUlkJywgJ2l0ZW1UeXBlJywgJ25hbWUnLCAndXNlcklkJ107XG5jb25zdCBERUZBVUxUX1NVQlNDUklQVElPTl9GSUVMRFMgPSBbJ2NhbmNlbERhdGUnLCAnZXhwaXJlcycsICdpZCcsICdpdGVtSWQnLCAnaXRlbVR5cGUnLCAncGxhbklkJywgJ3N0YXR1cycsICd0cmFuc2FjdGlvbklkJywgJ3RyaWFsRW5kJywgJ3VzZXJJZCcsIGBwbGFuIHske0RFRkFVTFRfUExBTl9GSUVMRFMuam9pbignLCAnKX19YF07XG5cbmNvbnN0IGJ1aWxkSXRlbUtleSA9IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU6IHN0cmluZyA9IERFRkFVTFRfSVRFTV9UWVBFKSA9PiAoXG4gIGAke3BhcnNlU3RyaW5nKGl0ZW1UeXBlIHx8IERFRkFVTFRfSVRFTV9UWVBFLCAzMikudG9Mb3dlckNhc2UoKX06JHtwYXJzZUlkKGl0ZW1JZCl9YFxuKTtcblxuY29uc3Qgbm9ybWFsaXplUGxhbiA9IChwbGFuOiBQYXJ0aWFsPFBheW1lbnRQbGFuVHlwZT4gPSB7fSk6IFBhcnRpYWw8UGF5bWVudFBsYW5UeXBlPiA9PiAoe1xuICAuLi5wbGFuLFxuICAuLi4ocGxhbi5hbW91bnQgIT09IHVuZGVmaW5lZCA/IHthbW91bnQ6IHBhcnNlTnVtKHBsYW4uYW1vdW50KX0gOiB7fSksXG4gIC4uLihwbGFuLmludGVydmFsID8ge2ludGVydmFsOiBwYXJzZVN0cmluZyhwbGFuLmludGVydmFsLCAxNikudG9Mb3dlckNhc2UoKX0gOiB7fSksXG4gIC4uLihwbGFuLmludGVydmFsQ291bnQgIT09IHVuZGVmaW5lZCA/IHtpbnRlcnZhbENvdW50OiBwYXJzZU51bShwbGFuLmludGVydmFsQ291bnQpfSA6IHt9KSxcbiAgLi4uKHBsYW4uaXRlbUlkID8ge2l0ZW1JZDogcGFyc2VJZChwbGFuLml0ZW1JZCl9IDoge30pLFxuICAuLi4ocGxhbi5pdGVtVHlwZSA/IHtpdGVtVHlwZTogcGFyc2VTdHJpbmcocGxhbi5pdGVtVHlwZSwgMzIpLnRvTG93ZXJDYXNlKCl9IDoge30pXG59KTtcblxuY29uc3Qgbm9ybWFsaXplU3Vic2NyaXB0aW9uID0gKHN1YnNjcmlwdGlvbjogUGFydGlhbDxQYXltZW50U3Vic2NyaXB0aW9uVHlwZT4gPSB7fSkgPT4gKHtcbiAgLi4uc3Vic2NyaXB0aW9uLFxuICAuLi4oc3Vic2NyaXB0aW9uLml0ZW1JZCA/IHtpdGVtSWQ6IHBhcnNlSWQoc3Vic2NyaXB0aW9uLml0ZW1JZCl9IDoge30pLFxuICAuLi4oc3Vic2NyaXB0aW9uLml0ZW1UeXBlID8ge2l0ZW1UeXBlOiBwYXJzZVN0cmluZyhzdWJzY3JpcHRpb24uaXRlbVR5cGUsIDMyKS50b0xvd2VyQ2FzZSgpfSA6IHt9KSxcbiAgLi4uKHN1YnNjcmlwdGlvbi5wbGFuSWQgPyB7cGxhbklkOiBwYXJzZUlkKHN1YnNjcmlwdGlvbi5wbGFuSWQpfSA6IHt9KVxufSk7XG5cbmV4cG9ydCB0eXBlIFN1YnNjcmlwdGlvbkFwaVJlc3VsdHNUeXBlID0ge1xuICBzdWJzY3JpcHRpb25zOiB7XG4gICAgYWRkUGxhbj86IFBheW1lbnRQbGFuVHlwZTtcbiAgICBhZGRTdWJzY3JpcHRpb24/OiBQYXltZW50U3Vic2NyaXB0aW9uVHlwZTtcbiAgICBkZWxldGVTdWJzY3JpcHRpb24/OiBib29sZWFuO1xuICAgIGdldFBsYW5CeUl0ZW0/OiBQYXltZW50UGxhblR5cGU7XG4gICAgZ2V0U3Vic2NyaXB0aW9uPzogUGF5bWVudFN1YnNjcmlwdGlvblR5cGU7XG4gICAgZ2V0U3Vic2NyaXB0aW9uTGlzdEJ5VXNlcj86IFBheW1lbnRTdWJzY3JpcHRpb25UeXBlW107XG4gICAgZ2V0U3Vic2NyaXB0aW9uQnlJdGVtPzogUGF5bWVudFN1YnNjcmlwdGlvblR5cGU7XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbkFjdGlvbnMge1xuICBhZGRQbGFuOiAocGxhbjogUGFydGlhbDxQYXltZW50UGxhblR5cGU+LCBwbGFuUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxQYXltZW50UGxhblR5cGU+O1xuICBhZGRTdWJzY3JpcHRpb246IChzdWJzY3JpcHRpb246IFBhcnRpYWw8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+LCBzdWJzY3JpcHRpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb25UeXBlPjtcbiAgZGVsZXRlU3Vic2NyaXB0aW9uOiAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogc3RyaW5nLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPGJvb2xlYW4+O1xuICBnZXRQbGFuQnlJdGVtOiAoaXRlbUlkOiBzdHJpbmcsIGl0ZW1UeXBlPzogc3RyaW5nLCBwbGFuUHJvcHM/OiBzdHJpbmdbXSwgcmVxdWVzdE9wdGlvbnM/OiBBY3Rpb25SZXF1ZXN0T3B0aW9ucykgPT4gUHJvbWlzZTxQYXltZW50UGxhblR5cGU+O1xuICBnZXRTdWJzY3JpcHRpb25MaXN0QnlVc2VyOiAodXNlcklkOiBzdHJpbmcsIGZyb20/OiBudW1iZXIsIHRvPzogbnVtYmVyLCBzdWJzY3JpcHRpb25Qcm9wcz86IHN0cmluZ1tdLCByZXF1ZXN0T3B0aW9ucz86IEFjdGlvblJlcXVlc3RPcHRpb25zKSA9PiBQcm9taXNlPFBheW1lbnRTdWJzY3JpcHRpb25UeXBlW10+O1xuICBnZXRTdWJzY3JpcHRpb25CeUl0ZW06IChpdGVtSWQ6IHN0cmluZywgaXRlbVR5cGU/OiBzdHJpbmcsIHN1YnNjcmlwdGlvblByb3BzPzogc3RyaW5nW10sIHJlcXVlc3RPcHRpb25zPzogQWN0aW9uUmVxdWVzdE9wdGlvbnMpID0+IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+O1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlU3Vic2NyaXB0aW9uQWN0aW9ucyA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29ya1xuKTogU3Vic2NyaXB0aW9uQWN0aW9ucyA9PiB7XG4gIGNvbnN0IGFkZFBsYW4gPSBhc3luYyAoXG4gICAgcGxhbjogUGFydGlhbDxQYXltZW50UGxhblR5cGU+LFxuICAgIHBsYW5Qcm9wczogc3RyaW5nW10gPSBbXSxcbiAgICByZXF1ZXN0T3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuICApOiBQcm9taXNlPFBheW1lbnRQbGFuVHlwZT4gPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRQbGFuID0gbm9ybWFsaXplUGxhbihwbGFuKTtcbiAgICBjb25zdCBpdGVtS2V5ID0gYnVpbGRJdGVtS2V5KFN0cmluZyhub3JtYWxpemVkUGxhbi5pdGVtSWQgfHwgJycpLCBTdHJpbmcobm9ybWFsaXplZFBsYW4uaXRlbVR5cGUgfHwgREVGQVVMVF9JVEVNX1RZUEUpKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbToge1xuICAgICAgICAgIHR5cGU6ICdQbGFuSW5wdXQhJyxcbiAgICAgICAgICB2YWx1ZTogbm9ybWFsaXplZFBsYW5cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFN1YnNjcmlwdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHBsYW4gPSBkYXRhPy5zdWJzY3JpcHRpb25zPy5hZGRQbGFuIHx8IHt9O1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7aXRlbUtleSwgcGxhbiwgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5BRERfUExBTl9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gYXdhaXQgYXBwTXV0YXRpb248UGF5bWVudFBsYW5UeXBlPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2FkZFBsYW4nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbLi4uREVGQVVMVF9QTEFOX0ZJRUxEUywgLi4ucGxhblByb3BzXSxcbiAgICAgICAge29uU3VjY2Vzc31cbiAgICAgICk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFNVQlNDUklQVElPTl9DT05TVEFOVFMuQUREX1BMQU5fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHN1YnNjcmlwdGlvbi5nZXRQbGFuQnlJdGVtOiR7aXRlbUtleX1gKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZ2V0UGxhbkJ5SXRlbSA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nID0gREVGQVVMVF9JVEVNX1RZUEUsXG4gICAgcGxhblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UGF5bWVudFBsYW5UeXBlPiA9PiB7XG4gICAgY29uc3QgaXRlbUtleSA9IGJ1aWxkSXRlbUtleShpdGVtSWQsIGl0ZW1UeXBlKTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBnZXRDYWNoZWRSZXF1ZXN0PFBheW1lbnRQbGFuVHlwZT4oZmx1eCwgYHN1YnNjcmlwdGlvbi5nZXRQbGFuQnlJdGVtOiR7aXRlbUtleX1gLCB7aXRlbUlkLCBpdGVtVHlwZSwgcGxhblByb3BzfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBpdGVtSWQ6IHt0eXBlOiAnSUQhJywgdmFsdWU6IHBhcnNlSWQoaXRlbUlkKX0sXG4gICAgICAgIGl0ZW1UeXBlOiB7dHlwZTogJ1N0cmluZycsIHZhbHVlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCBERUZBVUxUX0lURU1fVFlQRSwgMzIpLnRvTG93ZXJDYXNlKCl9XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBvblN1Y2Nlc3MgPSAoZGF0YTogU3Vic2NyaXB0aW9uQXBpUmVzdWx0c1R5cGUpID0+IHtcbiAgICAgICAgY29uc3QgcGxhbiA9IGRhdGE/LnN1YnNjcmlwdGlvbnM/LmdldFBsYW5CeUl0ZW0gfHwge307XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtpdGVtS2V5LCBwbGFuLCB0eXBlOiBTVUJTQ1JJUFRJT05fQ09OU1RBTlRTLkdFVF9QTEFOX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwcFF1ZXJ5PFBheW1lbnRQbGFuVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdnZXRQbGFuQnlJdGVtJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWy4uLkRFRkFVTFRfUExBTl9GSUVMRFMsIC4uLnBsYW5Qcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChmbHV4LCBgc3Vic2NyaXB0aW9uLmdldFBsYW5CeUl0ZW06JHtpdGVtS2V5fWAsIHtpdGVtSWQsIGl0ZW1UeXBlLCBwbGFuUHJvcHN9LCByZXN1bHQsIHJlcXVlc3RPcHRpb25zKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5HRVRfUExBTl9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGFkZFN1YnNjcmlwdGlvbiA9IGFzeW5jIChcbiAgICBzdWJzY3JpcHRpb246IFBhcnRpYWw8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+LFxuICAgIHN1YnNjcmlwdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+ID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkU3Vic2NyaXB0aW9uID0gbm9ybWFsaXplU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgY29uc3QgaXRlbUtleSA9IGJ1aWxkSXRlbUtleShTdHJpbmcobm9ybWFsaXplZFN1YnNjcmlwdGlvbi5pdGVtSWQgfHwgJycpLCBTdHJpbmcobm9ybWFsaXplZFN1YnNjcmlwdGlvbi5pdGVtVHlwZSB8fCBERUZBVUxUX0lURU1fVFlQRSkpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgdHlwZTogJ1N1YnNjcmlwdGlvbklucHV0IScsXG4gICAgICAgICAgdmFsdWU6IG5vcm1hbGl6ZWRTdWJzY3JpcHRpb25cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFN1YnNjcmlwdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IGRhdGE/LnN1YnNjcmlwdGlvbnM/LmFkZFN1YnNjcmlwdGlvbiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIGZsdXguZGlzcGF0Y2goe2l0ZW1LZXksIHN1YnNjcmlwdGlvbiwgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5BRERfU1VCU0NSSVBUSU9OX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxQYXltZW50U3Vic2NyaXB0aW9uVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdhZGRTdWJzY3JpcHRpb24nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbLi4uREVGQVVMVF9TVUJTQ1JJUFRJT05fRklFTERTLCAuLi5zdWJzY3JpcHRpb25Qcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBTVUJTQ1JJUFRJT05fQ09OU1RBTlRTLkFERF9TVUJTQ1JJUFRJT05fRVJST1J9KTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBjbGVhckNhY2hlZFJlcXVlc3QoZmx1eCwgYHN1YnNjcmlwdGlvbi5nZXRTdWJzY3JpcHRpb25CeUl0ZW06JHtpdGVtS2V5fWApO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBnZXRTdWJzY3JpcHRpb25CeUl0ZW0gPSBhc3luYyAoXG4gICAgaXRlbUlkOiBzdHJpbmcsXG4gICAgaXRlbVR5cGU6IHN0cmluZyA9IERFRkFVTFRfSVRFTV9UWVBFLFxuICAgIHN1YnNjcmlwdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHJlcXVlc3RPcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4gICk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+ID0+IHtcbiAgICBjb25zdCBpdGVtS2V5ID0gYnVpbGRJdGVtS2V5KGl0ZW1JZCwgaXRlbVR5cGUpO1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8UGF5bWVudFN1YnNjcmlwdGlvblR5cGU+KGZsdXgsIGBzdWJzY3JpcHRpb24uZ2V0U3Vic2NyaXB0aW9uQnlJdGVtOiR7aXRlbUtleX1gLCB7aXRlbUlkLCBpdGVtVHlwZSwgc3Vic2NyaXB0aW9uUHJvcHN9LCByZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICBpZihjYWNoZWRSZXN1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICAgIGl0ZW1JZDoge3R5cGU6ICdJRCEnLCB2YWx1ZTogcGFyc2VJZChpdGVtSWQpfSxcbiAgICAgICAgaXRlbVR5cGU6IHt0eXBlOiAnU3RyaW5nJywgdmFsdWU6IHBhcnNlU3RyaW5nKGl0ZW1UeXBlIHx8IERFRkFVTFRfSVRFTV9UWVBFLCAzMikudG9Mb3dlckNhc2UoKX1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBTdWJzY3JpcHRpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBkYXRhPy5zdWJzY3JpcHRpb25zPy5nZXRTdWJzY3JpcHRpb25CeUl0ZW0gfHwge307XG4gICAgICAgIHJldHVybiBmbHV4LmRpc3BhdGNoKHtpdGVtS2V5LCBzdWJzY3JpcHRpb24sIHR5cGU6IFNVQlNDUklQVElPTl9DT05TVEFOVFMuR0VUX1NVQlNDUklQVElPTl9TVUNDRVNTfSk7XG4gICAgICB9O1xuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcHBRdWVyeTxQYXltZW50U3Vic2NyaXB0aW9uVHlwZT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdnZXRTdWJzY3JpcHRpb25CeUl0ZW0nLFxuICAgICAgICBEQVRBX1RZUEUsXG4gICAgICAgIHF1ZXJ5VmFyaWFibGVzLFxuICAgICAgICBbLi4uREVGQVVMVF9TVUJTQ1JJUFRJT05fRklFTERTLCAuLi5zdWJzY3JpcHRpb25Qcm9wc10sXG4gICAgICAgIHtvblN1Y2Nlc3N9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4gYXdhaXQgc2V0Q2FjaGVkUmVxdWVzdChmbHV4LCBgc3Vic2NyaXB0aW9uLmdldFN1YnNjcmlwdGlvbkJ5SXRlbToke2l0ZW1LZXl9YCwge2l0ZW1JZCwgaXRlbVR5cGUsIHN1YnNjcmlwdGlvblByb3BzfSwgcmVzdWx0LCByZXF1ZXN0T3B0aW9ucyk7XG4gICAgfSBjYXRjaChlcnJvcikge1xuICAgICAgZmx1eC5kaXNwYXRjaCh7ZXJyb3IsIHR5cGU6IFNVQlNDUklQVElPTl9DT05TVEFOVFMuR0VUX1NVQlNDUklQVElPTl9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGdldFN1YnNjcmlwdGlvbkxpc3RCeVVzZXIgPSBhc3luYyAoXG4gICAgdXNlcklkOiBzdHJpbmcsXG4gICAgZnJvbTogbnVtYmVyID0gMCxcbiAgICB0bzogbnVtYmVyID0gMzAsXG4gICAgc3Vic2NyaXB0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uVHlwZVtdPiA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFVzZXJJZCA9IHBhcnNlSWQodXNlcklkKTtcbiAgICBjb25zdCBjYWNoZUtleSA9IGBzdWJzY3JpcHRpb24uZ2V0U3Vic2NyaXB0aW9uTGlzdEJ5VXNlcjoke25vcm1hbGl6ZWRVc2VySWR9OiR7ZnJvbX06JHt0b31gO1xuICAgIGNvbnN0IGNhY2hlZFJlc3VsdCA9IGdldENhY2hlZFJlcXVlc3Q8UGF5bWVudFN1YnNjcmlwdGlvblR5cGVbXT4oZmx1eCwgY2FjaGVLZXksIHtcbiAgICAgIGZyb20sXG4gICAgICBzdWJzY3JpcHRpb25Qcm9wcyxcbiAgICAgIHRvLFxuICAgICAgdXNlcklkOiBub3JtYWxpemVkVXNlcklkXG4gICAgfSwgcmVxdWVzdE9wdGlvbnMpO1xuXG4gICAgaWYoY2FjaGVkUmVzdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgICB1c2VySWQ6IHt0eXBlOiAnSUQhJywgdmFsdWU6IG5vcm1hbGl6ZWRVc2VySWR9LFxuICAgICAgICBmcm9tOiB7dHlwZTogJ0ludCcsIHZhbHVlOiBmcm9tfSxcbiAgICAgICAgdG86IHt0eXBlOiAnSW50JywgdmFsdWU6IHRvfVxuICAgICAgfTtcblxuICAgICAgY29uc3Qgb25TdWNjZXNzID0gKGRhdGE6IFN1YnNjcmlwdGlvbkFwaVJlc3VsdHNUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IGxpc3QgPSBkYXRhPy5zdWJzY3JpcHRpb25zPy5nZXRTdWJzY3JpcHRpb25MaXN0QnlVc2VyIHx8IFtdO1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7bGlzdCwgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5HRVRfU1VCU0NSSVBUSU9OX0xJU1RfU1VDQ0VTU30pO1xuICAgICAgfTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBwUXVlcnk8UGF5bWVudFN1YnNjcmlwdGlvblR5cGVbXT4oXG4gICAgICAgIGZsdXgsXG4gICAgICAgICdnZXRTdWJzY3JpcHRpb25MaXN0QnlVc2VyJyxcbiAgICAgICAgREFUQV9UWVBFLFxuICAgICAgICBxdWVyeVZhcmlhYmxlcyxcbiAgICAgICAgWy4uLkRFRkFVTFRfU1VCU0NSSVBUSU9OX0ZJRUxEUywgLi4uc3Vic2NyaXB0aW9uUHJvcHNdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IHNldENhY2hlZFJlcXVlc3QoZmx1eCwgY2FjaGVLZXksIHtcbiAgICAgICAgZnJvbSxcbiAgICAgICAgc3Vic2NyaXB0aW9uUHJvcHMsXG4gICAgICAgIHRvLFxuICAgICAgICB1c2VySWQ6IG5vcm1hbGl6ZWRVc2VySWRcbiAgICAgIH0sIHJlc3VsdCwgcmVxdWVzdE9wdGlvbnMpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGZsdXguZGlzcGF0Y2goe2Vycm9yLCB0eXBlOiBTVUJTQ1JJUFRJT05fQ09OU1RBTlRTLkdFVF9TVUJTQ1JJUFRJT05fTElTVF9FUlJPUn0pO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGRlbGV0ZVN1YnNjcmlwdGlvbiA9IGFzeW5jIChcbiAgICBpdGVtSWQ6IHN0cmluZyxcbiAgICBpdGVtVHlwZTogc3RyaW5nID0gREVGQVVMVF9JVEVNX1RZUEUsXG4gICAgcmVxdWVzdE9wdGlvbnM6IEFjdGlvblJlcXVlc3RPcHRpb25zID0ge31cbiAgKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gICAgY29uc3QgaXRlbUtleSA9IGJ1aWxkSXRlbUtleShpdGVtSWQsIGl0ZW1UeXBlKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBxdWVyeVZhcmlhYmxlcyA9IHtcbiAgICAgICAgaXRlbToge1xuICAgICAgICAgIHR5cGU6ICdTdWJzY3JpcHRpb25JbnB1dCEnLFxuICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICBpdGVtSWQ6IHBhcnNlSWQoaXRlbUlkKSxcbiAgICAgICAgICAgIGl0ZW1UeXBlOiBwYXJzZVN0cmluZyhpdGVtVHlwZSB8fCBERUZBVUxUX0lURU1fVFlQRSwgMzIpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9uU3VjY2VzcyA9IChkYXRhOiBTdWJzY3JpcHRpb25BcGlSZXN1bHRzVHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWNjZXNzID0gQm9vbGVhbihkYXRhPy5zdWJzY3JpcHRpb25zPy5kZWxldGVTdWJzY3JpcHRpb24pO1xuICAgICAgICByZXR1cm4gZmx1eC5kaXNwYXRjaCh7aXRlbUtleSwgc3VjY2VzcywgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5ERUxFVEVfU1VCU0NSSVBUSU9OX1NVQ0NFU1N9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBhd2FpdCBhcHBNdXRhdGlvbjxib29sZWFuPihcbiAgICAgICAgZmx1eCxcbiAgICAgICAgJ2RlbGV0ZVN1YnNjcmlwdGlvbicsXG4gICAgICAgIERBVEFfVFlQRSxcbiAgICAgICAgcXVlcnlWYXJpYWJsZXMsXG4gICAgICAgIFtdLFxuICAgICAgICB7b25TdWNjZXNzfVxuICAgICAgKTtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICBmbHV4LmRpc3BhdGNoKHtlcnJvciwgdHlwZTogU1VCU0NSSVBUSU9OX0NPTlNUQU5UUy5ERUxFVEVfU1VCU0NSSVBUSU9OX0VSUk9SfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgY2xlYXJDYWNoZWRSZXF1ZXN0KGZsdXgsIGBzdWJzY3JpcHRpb24uZ2V0U3Vic2NyaXB0aW9uQnlJdGVtOiR7aXRlbUtleX1gKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhZGRQbGFuLFxuICAgIGFkZFN1YnNjcmlwdGlvbixcbiAgICBkZWxldGVTdWJzY3JpcHRpb24sXG4gICAgZ2V0UGxhbkJ5SXRlbSxcbiAgICBnZXRTdWJzY3JpcHRpb25MaXN0QnlVc2VyLFxuICAgIGdldFN1YnNjcmlwdGlvbkJ5SXRlbVxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJwYXJzZUlkIiwicGFyc2VOdW0iLCJwYXJzZVN0cmluZyIsIlNVQlNDUklQVElPTl9DT05TVEFOVFMiLCJhcHBNdXRhdGlvbiIsImFwcFF1ZXJ5IiwiY2xlYXJDYWNoZWRSZXF1ZXN0IiwiZ2V0Q2FjaGVkUmVxdWVzdCIsInNldENhY2hlZFJlcXVlc3QiLCJEQVRBX1RZUEUiLCJERUZBVUxUX0lURU1fVFlQRSIsIkRFRkFVTFRfUExBTl9GSUVMRFMiLCJERUZBVUxUX1NVQlNDUklQVElPTl9GSUVMRFMiLCJqb2luIiwiYnVpbGRJdGVtS2V5IiwiaXRlbUlkIiwiaXRlbVR5cGUiLCJ0b0xvd2VyQ2FzZSIsIm5vcm1hbGl6ZVBsYW4iLCJwbGFuIiwiYW1vdW50IiwidW5kZWZpbmVkIiwiaW50ZXJ2YWwiLCJpbnRlcnZhbENvdW50Iiwibm9ybWFsaXplU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uIiwicGxhbklkIiwiY3JlYXRlU3Vic2NyaXB0aW9uQWN0aW9ucyIsImZsdXgiLCJhZGRQbGFuIiwicGxhblByb3BzIiwicmVxdWVzdE9wdGlvbnMiLCJub3JtYWxpemVkUGxhbiIsIml0ZW1LZXkiLCJTdHJpbmciLCJxdWVyeVZhcmlhYmxlcyIsIml0ZW0iLCJ0eXBlIiwidmFsdWUiLCJvblN1Y2Nlc3MiLCJkYXRhIiwic3Vic2NyaXB0aW9ucyIsImRpc3BhdGNoIiwiQUREX1BMQU5fU1VDQ0VTUyIsImVycm9yIiwiQUREX1BMQU5fRVJST1IiLCJnZXRQbGFuQnlJdGVtIiwiY2FjaGVkUmVzdWx0IiwiR0VUX1BMQU5fU1VDQ0VTUyIsInJlc3VsdCIsIkdFVF9QTEFOX0VSUk9SIiwiYWRkU3Vic2NyaXB0aW9uIiwic3Vic2NyaXB0aW9uUHJvcHMiLCJub3JtYWxpemVkU3Vic2NyaXB0aW9uIiwiQUREX1NVQlNDUklQVElPTl9TVUNDRVNTIiwiQUREX1NVQlNDUklQVElPTl9FUlJPUiIsImdldFN1YnNjcmlwdGlvbkJ5SXRlbSIsIkdFVF9TVUJTQ1JJUFRJT05fU1VDQ0VTUyIsIkdFVF9TVUJTQ1JJUFRJT05fRVJST1IiLCJnZXRTdWJzY3JpcHRpb25MaXN0QnlVc2VyIiwidXNlcklkIiwiZnJvbSIsInRvIiwibm9ybWFsaXplZFVzZXJJZCIsImNhY2hlS2V5IiwibGlzdCIsIkdFVF9TVUJTQ1JJUFRJT05fTElTVF9TVUNDRVNTIiwiR0VUX1NVQlNDUklQVElPTl9MSVNUX0VSUk9SIiwiZGVsZXRlU3Vic2NyaXB0aW9uIiwic3VjY2VzcyIsIkJvb2xlYW4iLCJERUxFVEVfU1VCU0NSSVBUSU9OX1NVQ0NFU1MiLCJE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
|