@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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ // Export API utilities
|
|
5
|
+
export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage } from './api.js';
|
|
6
|
+
// Export action factory
|
|
7
|
+
export { createAction, createActions, createAllActions } from './actionFactory.js';
|
|
8
|
+
// Export base action factory
|
|
9
|
+
export { createBaseActions } from './baseActionFactory.js';
|
|
10
|
+
// Export validator factory
|
|
11
|
+
export { createValidatorFactory, createValidatorManager } from './validatorFactory.js';
|
|
12
|
+
// Export React hooks
|
|
13
|
+
export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
|
|
14
|
+
export { PermissionGuard, PermissionLevel, usePermissions } from './permissionUtils.js';
|
|
15
|
+
export { useMetropolis } from './useMetropolis.js';
|
|
16
|
+
export { useConversationTyping } from './useConversationTyping.js';
|
|
17
|
+
export { useTranslations } from './useTranslations.js';
|
|
18
|
+
// Export utility functions
|
|
19
|
+
export * from './app.js';
|
|
20
|
+
export * from './dateUtils.js';
|
|
21
|
+
export * from './file.js';
|
|
22
|
+
export * from './i18n.js';
|
|
23
|
+
export * from './location.js';
|
|
24
|
+
export * from './session.js';
|
|
25
|
+
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLy8gRXhwb3J0IEFQSSB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcE11dGF0aW9uLFxuICBhcHBRdWVyeSxcbiAgZ2V0R3JhcGhxbCxcbiAgcHVibGljTXV0YXRpb24sXG4gIHB1YmxpY1F1ZXJ5LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgdXBsb2FkSW1hZ2UsXG4gIHR5cGUgQXBpUmVzdWx0c1R5cGUsXG4gIHR5cGUgUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdHlwZSBTZXNzaW9uVHlwZVxufSBmcm9tICcuL2FwaS5qcyc7XG5cbi8vIEV4cG9ydCBhY3Rpb24gZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25zLFxuICBjcmVhdGVBbGxBY3Rpb25zLFxuICB0eXBlIEFjdGlvbk9wdGlvbnMsXG4gIHR5cGUgQWN0aW9uUmV0dXJuVHlwZSxcbiAgdHlwZSBBY3Rpb25UeXBlLFxuICB0eXBlIEFjdGlvblR5cGVzXG59IGZyb20gJy4vYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8vIEV4cG9ydCBiYXNlIGFjdGlvbiBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVCYXNlQWN0aW9ucyxcbiAgdHlwZSBCYXNlQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcblxuLy8gRXhwb3J0IHZhbGlkYXRvciBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVWYWxpZGF0b3JGYWN0b3J5LFxuICBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyLFxuICB0eXBlIEJhc2VBZGFwdGVyT3B0aW9uc1xufSBmcm9tICcuL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuXG4vLyBFeHBvcnQgUmVhY3QgaG9va3NcbmV4cG9ydCB7TWV0cm9wb2xpc0NvbnRleHQsIE1ldHJvcG9saXNQcm92aWRlcn0gZnJvbSAnLi9NZXRyb3BvbGlzUHJvdmlkZXIuanMnO1xuZXhwb3J0IHtcbiAgUGVybWlzc2lvbkd1YXJkLFxuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIHVzZVBlcm1pc3Npb25zLFxuICB0eXBlIFBlcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbkd1YXJkUHJvcHMsXG4gIHR5cGUgVXNlUGVybWlzc2lvbnNSZXR1cm5cbn0gZnJvbSAnLi9wZXJtaXNzaW9uVXRpbHMuanMnO1xuZXhwb3J0IHt1c2VNZXRyb3BvbGlzfSBmcm9tICcuL3VzZU1ldHJvcG9saXMuanMnO1xuZXhwb3J0IHt1c2VDb252ZXJzYXRpb25UeXBpbmcsIHR5cGUgQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucywgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zfSBmcm9tICcuL3VzZUNvbnZlcnNhdGlvblR5cGluZy5qcyc7XG5leHBvcnQge3VzZVRyYW5zbGF0aW9uc30gZnJvbSAnLi91c2VUcmFuc2xhdGlvbnMuanMnO1xuXG4vLyBFeHBvcnQgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCAqIGZyb20gJy4vYXBwLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZVV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24uanMnO1xuXG4iXSwibmFtZXMiOlsiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImdldEdyYXBocWwiLCJwdWJsaWNNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicmVmcmVzaFNlc3Npb24iLCJ1cGxvYWRJbWFnZSIsImNyZWF0ZUFjdGlvbiIsImNyZWF0ZUFjdGlvbnMiLCJjcmVhdGVBbGxBY3Rpb25zIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJjcmVhdGVWYWxpZGF0b3JGYWN0b3J5IiwiY3JlYXRlVmFsaWRhdG9yTWFuYWdlciIsIk1ldHJvcG9saXNDb250ZXh0IiwiTWV0cm9wb2xpc1Byb3ZpZGVyIiwiUGVybWlzc2lvbkd1YXJkIiwiUGVybWlzc2lvbkxldmVsIiwidXNlUGVybWlzc2lvbnMiLCJ1c2VNZXRyb3BvbGlzIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwidXNlVHJhbnNsYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCx1QkFBdUI7QUFDdkIsU0FDRUEsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsV0FBVyxRQUlOLFdBQVc7QUFFbEIsd0JBQXdCO0FBQ3hCLFNBQ0VDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxnQkFBZ0IsUUFLWCxxQkFBcUI7QUFFNUIsNkJBQTZCO0FBQzdCLFNBQ0VDLGlCQUFpQixRQUVaLHlCQUF5QjtBQUVoQywyQkFBMkI7QUFDM0IsU0FDRUMsc0JBQXNCLEVBQ3RCQyxzQkFBc0IsUUFFakIsd0JBQXdCO0FBRS9CLHFCQUFxQjtBQUNyQixTQUFRQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sMEJBQTBCO0FBQzlFLFNBQ0VDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLFFBSVQsdUJBQXVCO0FBQzlCLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMscUJBQXFCLFFBQTBFLDZCQUE2QjtBQUNwSSxTQUFRQyxlQUFlLFFBQU8sdUJBQXVCO0FBRXJELDJCQUEyQjtBQUMzQixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWUifQ==
|
package/lib/utils/location.d.ts
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
4
|
*/
|
|
5
5
|
import { FluxFramework } from '@nlabs/arkhamjs';
|
|
6
|
-
import { parseLocation } from '../adapters/locationAdapter/locationAdapter';
|
|
7
|
-
import type { LocationType } from '../adapters/locationAdapter/locationAdapter';
|
|
8
|
-
export declare const autoCompleteLocation: (flux: FluxFramework, address: string, latitude?: number
|
|
6
|
+
import { parseLocation } from '../adapters/locationAdapter/locationAdapter.js';
|
|
7
|
+
import type { LocationType } from '../adapters/locationAdapter/locationAdapter.js';
|
|
8
|
+
export declare const autoCompleteLocation: (this: unknown, flux: FluxFramework, address: string, latitude?: number, longitude?: number, locationProps?: string[], CustomClass?: (location: LocationType) => LocationType) => Promise<LocationType[]>;
|
|
9
9
|
export declare const searchLocations: (flux: FluxFramework, address: string, latitude?: number, longitude?: number, locationProps?: string[], CustomClass?: typeof parseLocation) => Promise<LocationType[]>;
|
|
10
|
+
//# sourceMappingURL=location.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/utils/location.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAG/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAKnF,eAAO,MAAM,oBAAoB,2MA4C1B,CAAC;AAER,eAAO,MAAM,eAAe,GAC1B,MAAM,aAAa,EACnB,SAAS,MAAM,EACf,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,gBAAe,MAAM,EAAO,EAC5B,cAAa,OAAO,aAA6B,KAChD,OAAO,CAAC,YAAY,EAAE,CAqCxB,CAAC"}
|
package/lib/utils/location.js
CHANGED
|
@@ -1,2 +1,82 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2012-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { isEmpty } from '@nlabs/utils';
|
|
5
|
+
import pDebounce from 'p-debounce';
|
|
6
|
+
import { parseLocation } from '../adapters/locationAdapter/locationAdapter.js';
|
|
7
|
+
import { appQuery } from '../utils/api.js';
|
|
8
|
+
const DATA_TYPE = 'locations';
|
|
9
|
+
export const autoCompleteLocation = pDebounce(async (flux, address, latitude, longitude, locationProps = [], CustomClass = parseLocation)=>{
|
|
10
|
+
if (isEmpty(address)) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
const queryVariables = {
|
|
15
|
+
address: {
|
|
16
|
+
type: 'String',
|
|
17
|
+
value: address
|
|
18
|
+
},
|
|
19
|
+
latitude: {
|
|
20
|
+
type: 'Float',
|
|
21
|
+
value: latitude
|
|
22
|
+
},
|
|
23
|
+
longitude: {
|
|
24
|
+
type: 'Float',
|
|
25
|
+
value: longitude
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const { autoCompleteLocation = [] } = await appQuery(flux, 'autoCompleteLocation', DATA_TYPE, queryVariables, [
|
|
29
|
+
'address',
|
|
30
|
+
'city',
|
|
31
|
+
'country',
|
|
32
|
+
'latitude',
|
|
33
|
+
'location',
|
|
34
|
+
'longitude',
|
|
35
|
+
'state',
|
|
36
|
+
'street',
|
|
37
|
+
'zip',
|
|
38
|
+
...locationProps
|
|
39
|
+
]);
|
|
40
|
+
return autoCompleteLocation.map((item)=>CustomClass(item));
|
|
41
|
+
} catch (_error) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}, 500);
|
|
45
|
+
export const searchLocations = async (flux, address, latitude, longitude, locationProps = [], CustomClass = parseLocation)=>{
|
|
46
|
+
if (isEmpty(address)) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const queryVariables = {
|
|
51
|
+
address: {
|
|
52
|
+
type: 'String',
|
|
53
|
+
value: address
|
|
54
|
+
},
|
|
55
|
+
latitude: {
|
|
56
|
+
type: 'Float',
|
|
57
|
+
value: latitude
|
|
58
|
+
},
|
|
59
|
+
longitude: {
|
|
60
|
+
type: 'Float',
|
|
61
|
+
value: longitude
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
const { autoCompleteLocation = [] } = await appQuery(flux, 'autoCompleteLocation', DATA_TYPE, queryVariables, [
|
|
65
|
+
'address',
|
|
66
|
+
'city',
|
|
67
|
+
'country',
|
|
68
|
+
'latitude',
|
|
69
|
+
'location',
|
|
70
|
+
'longitude',
|
|
71
|
+
'state',
|
|
72
|
+
'street',
|
|
73
|
+
'zip',
|
|
74
|
+
...locationProps
|
|
75
|
+
]);
|
|
76
|
+
return autoCompleteLocation.map((item)=>CustomClass(item));
|
|
77
|
+
} catch (_error) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvbG9jYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IEZsdXhGcmFtZXdvcmsgfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQgcERlYm91bmNlIGZyb20gJ3AtZGVib3VuY2UnO1xuXG5pbXBvcnQgeyBwYXJzZUxvY2F0aW9uIH0gZnJvbSAnLi4vYWRhcHRlcnMvbG9jYXRpb25BZGFwdGVyL2xvY2F0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgeyBhcHBRdWVyeSB9IGZyb20gJy4uL3V0aWxzL2FwaS5qcyc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYXRpb25UeXBlIH0gZnJvbSAnLi4vYWRhcHRlcnMvbG9jYXRpb25BZGFwdGVyL2xvY2F0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWt0b3JEYkNvbGxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9hcGkuanMnO1xuXG5jb25zdCBEQVRBX1RZUEU6IFJlYWt0b3JEYkNvbGxlY3Rpb24gPSAnbG9jYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IGF1dG9Db21wbGV0ZUxvY2F0aW9uID0gcERlYm91bmNlKGFzeW5jIChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgYWRkcmVzczogc3RyaW5nLFxuICBsYXRpdHVkZT86IG51bWJlcixcbiAgbG9uZ2l0dWRlPzogbnVtYmVyLFxuICBsb2NhdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICBDdXN0b21DbGFzczogdHlwZW9mIHBhcnNlTG9jYXRpb24gPSBwYXJzZUxvY2F0aW9uXG4pOiBQcm9taXNlPExvY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGlmKGlzRW1wdHkoYWRkcmVzcykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IGFkZHJlc3NcbiAgICAgIH0sXG4gICAgICBsYXRpdHVkZToge1xuICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICB2YWx1ZTogbGF0aXR1ZGVcbiAgICAgIH0sXG4gICAgICBsb25naXR1ZGU6IHtcbiAgICAgICAgdHlwZTogJ0Zsb2F0JyxcbiAgICAgICAgdmFsdWU6IGxvbmdpdHVkZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB7YXV0b0NvbXBsZXRlTG9jYXRpb24gPSBbXX0gPSBhd2FpdCBhcHBRdWVyeShmbHV4LCAnYXV0b0NvbXBsZXRlTG9jYXRpb24nLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnY2l0eScsXG4gICAgICAnY291bnRyeScsXG4gICAgICAnbGF0aXR1ZGUnLFxuICAgICAgJ2xvY2F0aW9uJyxcbiAgICAgICdsb25naXR1ZGUnLFxuICAgICAgJ3N0YXRlJyxcbiAgICAgICdzdHJlZXQnLFxuICAgICAgJ3ppcCcsXG4gICAgICAuLi5sb2NhdGlvblByb3BzXG4gICAgXSkgYXMge2F1dG9Db21wbGV0ZUxvY2F0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdfTtcbiAgICByZXR1cm4gYXV0b0NvbXBsZXRlTG9jYXRpb24ubWFwKChpdGVtKSA9PiBDdXN0b21DbGFzcyhpdGVtKSk7XG4gIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59LCA1MDApO1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoTG9jYXRpb25zID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIGxhdGl0dWRlPzogbnVtYmVyLFxuICBsb25naXR1ZGU/OiBudW1iZXIsXG4gIGxvY2F0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gIEN1c3RvbUNsYXNzOiB0eXBlb2YgcGFyc2VMb2NhdGlvbiA9IHBhcnNlTG9jYXRpb25cbik6IFByb21pc2U8TG9jYXRpb25UeXBlW10+ID0+IHtcbiAgaWYoaXNFbXB0eShhZGRyZXNzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBhZGRyZXNzOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICB2YWx1ZTogYWRkcmVzc1xuICAgICAgfSxcbiAgICAgIGxhdGl0dWRlOiB7XG4gICAgICAgIHR5cGU6ICdGbG9hdCcsXG4gICAgICAgIHZhbHVlOiBsYXRpdHVkZVxuICAgICAgfSxcbiAgICAgIGxvbmdpdHVkZToge1xuICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICB2YWx1ZTogbG9uZ2l0dWRlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHthdXRvQ29tcGxldGVMb2NhdGlvbiA9IFtdfSA9IGF3YWl0IGFwcFF1ZXJ5KGZsdXgsICdhdXRvQ29tcGxldGVMb2NhdGlvbicsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9jYXRpb24nLFxuICAgICAgJ2xvbmdpdHVkZScsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3N0cmVldCcsXG4gICAgICAnemlwJyxcbiAgICAgIC4uLmxvY2F0aW9uUHJvcHNcbiAgICBdKSBhcyB7YXV0b0NvbXBsZXRlTG9jYXRpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+W119O1xuICAgIHJldHVybiBhdXRvQ29tcGxldGVMb2NhdGlvbi5tYXAoKGl0ZW0pID0+IEN1c3RvbUNsYXNzKGl0ZW0pKTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiaXNFbXB0eSIsInBEZWJvdW5jZSIsInBhcnNlTG9jYXRpb24iLCJhcHBRdWVyeSIsIkRBVEFfVFlQRSIsImF1dG9Db21wbGV0ZUxvY2F0aW9uIiwiZmx1eCIsImFkZHJlc3MiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImxvY2F0aW9uUHJvcHMiLCJDdXN0b21DbGFzcyIsInF1ZXJ5VmFyaWFibGVzIiwidHlwZSIsInZhbHVlIiwibWFwIiwiaXRlbSIsIl9lcnJvciIsInNlYXJjaExvY2F0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBU0EsT0FBTyxRQUFRLGVBQWU7QUFDdkMsT0FBT0MsZUFBZSxhQUFhO0FBRW5DLFNBQVNDLGFBQWEsUUFBUSxpREFBaUQ7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLGtCQUFrQjtBQUszQyxNQUFNQyxZQUFpQztBQUV2QyxPQUFPLE1BQU1DLHVCQUF1QkosVUFBVSxPQUM1Q0ssTUFDQUMsU0FDQUMsVUFDQUMsV0FDQUMsZ0JBQTBCLEVBQUUsRUFDNUJDLGNBQW9DVCxhQUFhO0lBRWpELElBQUdGLFFBQVFPLFVBQVU7UUFDbkIsT0FBTyxFQUFFO0lBQ1g7SUFFQSxJQUFJO1FBQ0YsTUFBTUssaUJBQWlCO1lBQ3JCTCxTQUFTO2dCQUNQTSxNQUFNO2dCQUNOQyxPQUFPUDtZQUNUO1lBQ0FDLFVBQVU7Z0JBQ1JLLE1BQU07Z0JBQ05DLE9BQU9OO1lBQ1Q7WUFDQUMsV0FBVztnQkFDVEksTUFBTTtnQkFDTkMsT0FBT0w7WUFDVDtRQUNGO1FBRUEsTUFBTSxFQUFDSix1QkFBdUIsRUFBRSxFQUFDLEdBQUcsTUFBTUYsU0FBU0csTUFBTSx3QkFBd0JGLFdBQVdRLGdCQUFnQjtZQUMxRztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7ZUFDR0Y7U0FDSjtRQUNELE9BQU9MLHFCQUFxQlUsR0FBRyxDQUFDLENBQUNDLE9BQVNMLFlBQVlLO0lBQ3hELEVBQUUsT0FBTUMsUUFBUTtRQUNkLE9BQU8sRUFBRTtJQUNYO0FBQ0YsR0FBRyxLQUFLO0FBRVIsT0FBTyxNQUFNQyxrQkFBa0IsT0FDN0JaLE1BQ0FDLFNBQ0FDLFVBQ0FDLFdBQ0FDLGdCQUEwQixFQUFFLEVBQzVCQyxjQUFvQ1QsYUFBYTtJQUVqRCxJQUFHRixRQUFRTyxVQUFVO1FBQ25CLE9BQU8sRUFBRTtJQUNYO0lBRUEsSUFBSTtRQUNGLE1BQU1LLGlCQUFpQjtZQUNyQkwsU0FBUztnQkFDUE0sTUFBTTtnQkFDTkMsT0FBT1A7WUFDVDtZQUNBQyxVQUFVO2dCQUNSSyxNQUFNO2dCQUNOQyxPQUFPTjtZQUNUO1lBQ0FDLFdBQVc7Z0JBQ1RJLE1BQU07Z0JBQ05DLE9BQU9MO1lBQ1Q7UUFDRjtRQUVBLE1BQU0sRUFBQ0osdUJBQXVCLEVBQUUsRUFBQyxHQUFHLE1BQU1GLFNBQVNHLE1BQU0sd0JBQXdCRixXQUFXUSxnQkFBZ0I7WUFDMUc7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO2VBQ0dGO1NBQ0o7UUFDRCxPQUFPTCxxQkFBcUJVLEdBQUcsQ0FBQyxDQUFDQyxPQUFTTCxZQUFZSztJQUN4RCxFQUFFLE9BQU1DLFFBQVE7UUFDZCxPQUFPLEVBQUU7SUFDWDtBQUNGLEVBQUUifQ==
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { PermissionLevel } from '../adapters/permissionAdapter/permissionAdapter.js';
|
|
2
|
+
export interface PermissionGuardProps {
|
|
3
|
+
requiredLevel: PermissionLevel;
|
|
4
|
+
resource?: string;
|
|
5
|
+
fallback?: React.ReactNode;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}
|
|
8
|
+
export interface UsePermissionsReturn {
|
|
9
|
+
userLevel: number;
|
|
10
|
+
hasPermission: (requiredLevel: PermissionLevel) => boolean;
|
|
11
|
+
isGuest: boolean;
|
|
12
|
+
isUser: boolean;
|
|
13
|
+
isModerator: boolean;
|
|
14
|
+
isAdmin: boolean;
|
|
15
|
+
isSuperAdmin: boolean;
|
|
16
|
+
checkResource: (resource: string, requiredLevel: PermissionLevel) => boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare const usePermissions: () => UsePermissionsReturn;
|
|
19
|
+
export declare const PermissionGuard: React.FC<PermissionGuardProps>;
|
|
20
|
+
export { PermissionLevel } from '../adapters/permissionAdapter/permissionAdapter.js';
|
|
21
|
+
export type { Permission } from '../adapters/permissionAdapter/permissionAdapter.js';
|
|
22
|
+
//# sourceMappingURL=permissionUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permissionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/permissionUtils.tsx"],"names":[],"mappings":"AAOA,OAAO,EAOL,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAI5D,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,CAAC,aAAa,EAAE,eAAe,KAAK,OAAO,CAAC;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,KAAK,OAAO,CAAC;CAC9E;AAED,eAAO,MAAM,cAAc,QAAO,oBAyDjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiB1D,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAC,UAAU,EAAC,MAAM,oDAAoD,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
4
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
5
|
+
*/ import { useCallback, useEffect, useState } from 'react';
|
|
6
|
+
import { useFlux } from '@nlabs/arkhamjs-utils-react';
|
|
7
|
+
import { hasPermission as checkPermission, isAdmin as checkIsAdmin, isGuest as checkIsGuest, isModerator as checkIsModerator, isSuperAdmin as checkIsSuperAdmin, isUser as checkIsUser } from '../adapters/permissionAdapter/permissionAdapter.js';
|
|
8
|
+
export const usePermissions = ()=>{
|
|
9
|
+
const flux = useFlux();
|
|
10
|
+
const [userLevel, setUserLevel] = useState(0);
|
|
11
|
+
useEffect(()=>{
|
|
12
|
+
const updateUserLevel = ()=>{
|
|
13
|
+
const session = flux.getState('user.session', {});
|
|
14
|
+
const level = session.userAccess ?? 0;
|
|
15
|
+
setUserLevel(level);
|
|
16
|
+
};
|
|
17
|
+
updateUserLevel();
|
|
18
|
+
const unsubscribe = flux.on('USER_SIGN_IN_SUCCESS', updateUserLevel);
|
|
19
|
+
const unsubscribeUpdate = flux.on('USER_UPDATE_ITEM_SUCCESS', updateUserLevel);
|
|
20
|
+
const unsubscribeSession = flux.on('USER_GET_SESSION_SUCCESS', updateUserLevel);
|
|
21
|
+
const unsubscribeSignOut = flux.on('USER_SIGN_OUT_SUCCESS', ()=>setUserLevel(0));
|
|
22
|
+
return ()=>{
|
|
23
|
+
unsubscribe();
|
|
24
|
+
unsubscribeUpdate();
|
|
25
|
+
unsubscribeSession();
|
|
26
|
+
unsubscribeSignOut();
|
|
27
|
+
};
|
|
28
|
+
}, [
|
|
29
|
+
flux
|
|
30
|
+
]);
|
|
31
|
+
const hasPermissionLevel = useCallback((requiredLevel)=>{
|
|
32
|
+
return checkPermission(userLevel, requiredLevel);
|
|
33
|
+
}, [
|
|
34
|
+
userLevel
|
|
35
|
+
]);
|
|
36
|
+
const checkResourcePermission = useCallback((resource, requiredLevel)=>{
|
|
37
|
+
const permissions = flux.getState(`permission.userPermissions.${flux.getState('user.session.userId')}`, []);
|
|
38
|
+
const resourcePermission = permissions.find((p)=>p.resource === resource);
|
|
39
|
+
if (resourcePermission && resourcePermission.level !== undefined) {
|
|
40
|
+
return resourcePermission.level >= requiredLevel;
|
|
41
|
+
}
|
|
42
|
+
return checkPermission(userLevel, requiredLevel);
|
|
43
|
+
}, [
|
|
44
|
+
flux,
|
|
45
|
+
userLevel
|
|
46
|
+
]);
|
|
47
|
+
return {
|
|
48
|
+
userLevel,
|
|
49
|
+
hasPermission: hasPermissionLevel,
|
|
50
|
+
isGuest: checkIsGuest(userLevel),
|
|
51
|
+
isUser: checkIsUser(userLevel),
|
|
52
|
+
isModerator: checkIsModerator(userLevel),
|
|
53
|
+
isAdmin: checkIsAdmin(userLevel),
|
|
54
|
+
isSuperAdmin: checkIsSuperAdmin(userLevel),
|
|
55
|
+
checkResource: checkResourcePermission
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export const PermissionGuard = ({ requiredLevel, resource, fallback = null, children })=>{
|
|
59
|
+
const { hasPermission, checkResource } = usePermissions();
|
|
60
|
+
const hasAccess = resource ? checkResource(resource, requiredLevel) : hasPermission(requiredLevel);
|
|
61
|
+
if (!hasAccess) {
|
|
62
|
+
return /*#__PURE__*/ _jsx(_Fragment, {
|
|
63
|
+
children: fallback
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
return /*#__PURE__*/ _jsx(_Fragment, {
|
|
67
|
+
children: children
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
export { PermissionLevel } from '../adapters/permissionAdapter/permissionAdapter.js';
|
|
71
|
+
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvcGVybWlzc2lvblV0aWxzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VGbHV4fSBmcm9tICdAbmxhYnMvYXJraGFtanMtdXRpbHMtcmVhY3QnO1xuXG5pbXBvcnQge1xuICBoYXNQZXJtaXNzaW9uIGFzIGNoZWNrUGVybWlzc2lvbixcbiAgaXNBZG1pbiBhcyBjaGVja0lzQWRtaW4sXG4gIGlzR3Vlc3QgYXMgY2hlY2tJc0d1ZXN0LFxuICBpc01vZGVyYXRvciBhcyBjaGVja0lzTW9kZXJhdG9yLFxuICBpc1N1cGVyQWRtaW4gYXMgY2hlY2tJc1N1cGVyQWRtaW4sXG4gIGlzVXNlciBhcyBjaGVja0lzVXNlcixcbiAgUGVybWlzc2lvbkxldmVsXG59IGZyb20gJy4uL2FkYXB0ZXJzL3Blcm1pc3Npb25BZGFwdGVyL3Blcm1pc3Npb25BZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtQZXJtaXNzaW9ufSBmcm9tICcuLi9hZGFwdGVycy9wZXJtaXNzaW9uQWRhcHRlci9wZXJtaXNzaW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7VXNlcn0gZnJvbSAnLi4vYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBlcm1pc3Npb25HdWFyZFByb3BzIHtcbiAgcmVxdWlyZWRMZXZlbDogUGVybWlzc2lvbkxldmVsO1xuICByZXNvdXJjZT86IHN0cmluZztcbiAgZmFsbGJhY2s/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlUGVybWlzc2lvbnNSZXR1cm4ge1xuICB1c2VyTGV2ZWw6IG51bWJlcjtcbiAgaGFzUGVybWlzc2lvbjogKHJlcXVpcmVkTGV2ZWw6IFBlcm1pc3Npb25MZXZlbCkgPT4gYm9vbGVhbjtcbiAgaXNHdWVzdDogYm9vbGVhbjtcbiAgaXNVc2VyOiBib29sZWFuO1xuICBpc01vZGVyYXRvcjogYm9vbGVhbjtcbiAgaXNBZG1pbjogYm9vbGVhbjtcbiAgaXNTdXBlckFkbWluOiBib29sZWFuO1xuICBjaGVja1Jlc291cmNlOiAocmVzb3VyY2U6IHN0cmluZywgcmVxdWlyZWRMZXZlbDogUGVybWlzc2lvbkxldmVsKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3QgdXNlUGVybWlzc2lvbnMgPSAoKTogVXNlUGVybWlzc2lvbnNSZXR1cm4gPT4ge1xuICBjb25zdCBmbHV4ID0gdXNlRmx1eCgpO1xuICBjb25zdCBbdXNlckxldmVsLCBzZXRVc2VyTGV2ZWxdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZVVzZXJMZXZlbCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb246IFBhcnRpYWw8VXNlcj4gPSBmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSk7XG4gICAgICBjb25zdCBsZXZlbCA9IHNlc3Npb24udXNlckFjY2VzcyA/PyAwO1xuICAgICAgc2V0VXNlckxldmVsKGxldmVsKTtcbiAgICB9O1xuXG4gICAgdXBkYXRlVXNlckxldmVsKCk7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9IGZsdXgub24oJ1VTRVJfU0lHTl9JTl9TVUNDRVNTJywgdXBkYXRlVXNlckxldmVsKTtcbiAgICBjb25zdCB1bnN1YnNjcmliZVVwZGF0ZSA9IGZsdXgub24oJ1VTRVJfVVBEQVRFX0lURU1fU1VDQ0VTUycsIHVwZGF0ZVVzZXJMZXZlbCk7XG4gICAgY29uc3QgdW5zdWJzY3JpYmVTZXNzaW9uID0gZmx1eC5vbignVVNFUl9HRVRfU0VTU0lPTl9TVUNDRVNTJywgdXBkYXRlVXNlckxldmVsKTtcbiAgICBjb25zdCB1bnN1YnNjcmliZVNpZ25PdXQgPSBmbHV4Lm9uKCdVU0VSX1NJR05fT1VUX1NVQ0NFU1MnLCAoKSA9PiBzZXRVc2VyTGV2ZWwoMCkpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICB1bnN1YnNjcmliZVVwZGF0ZSgpO1xuICAgICAgdW5zdWJzY3JpYmVTZXNzaW9uKCk7XG4gICAgICB1bnN1YnNjcmliZVNpZ25PdXQoKTtcbiAgICB9O1xuICB9LCBbZmx1eF0pO1xuXG4gIGNvbnN0IGhhc1Blcm1pc3Npb25MZXZlbCA9IHVzZUNhbGxiYWNrKFxuICAgIChyZXF1aXJlZExldmVsOiBQZXJtaXNzaW9uTGV2ZWwpID0+IHtcbiAgICAgIHJldHVybiBjaGVja1Blcm1pc3Npb24odXNlckxldmVsLCByZXF1aXJlZExldmVsKTtcbiAgICB9LFxuICAgIFt1c2VyTGV2ZWxdXG4gICk7XG5cbiAgY29uc3QgY2hlY2tSZXNvdXJjZVBlcm1pc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAocmVzb3VyY2U6IHN0cmluZywgcmVxdWlyZWRMZXZlbDogUGVybWlzc2lvbkxldmVsKTogYm9vbGVhbiA9PiB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uczogUGVybWlzc2lvbltdID0gZmx1eC5nZXRTdGF0ZShgcGVybWlzc2lvbi51c2VyUGVybWlzc2lvbnMuJHtmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24udXNlcklkJyl9YCwgW10pO1xuICAgICAgXG4gICAgICBjb25zdCByZXNvdXJjZVBlcm1pc3Npb24gPSBwZXJtaXNzaW9ucy5maW5kKChwKSA9PiBwLnJlc291cmNlID09PSByZXNvdXJjZSk7XG4gICAgICBpZiAocmVzb3VyY2VQZXJtaXNzaW9uICYmIHJlc291cmNlUGVybWlzc2lvbi5sZXZlbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByZXNvdXJjZVBlcm1pc3Npb24ubGV2ZWwgPj0gcmVxdWlyZWRMZXZlbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNoZWNrUGVybWlzc2lvbih1c2VyTGV2ZWwsIHJlcXVpcmVkTGV2ZWwpO1xuICAgIH0sXG4gICAgW2ZsdXgsIHVzZXJMZXZlbF1cbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVzZXJMZXZlbCxcbiAgICBoYXNQZXJtaXNzaW9uOiBoYXNQZXJtaXNzaW9uTGV2ZWwsXG4gICAgaXNHdWVzdDogY2hlY2tJc0d1ZXN0KHVzZXJMZXZlbCksXG4gICAgaXNVc2VyOiBjaGVja0lzVXNlcih1c2VyTGV2ZWwpLFxuICAgIGlzTW9kZXJhdG9yOiBjaGVja0lzTW9kZXJhdG9yKHVzZXJMZXZlbCksXG4gICAgaXNBZG1pbjogY2hlY2tJc0FkbWluKHVzZXJMZXZlbCksXG4gICAgaXNTdXBlckFkbWluOiBjaGVja0lzU3VwZXJBZG1pbih1c2VyTGV2ZWwpLFxuICAgIGNoZWNrUmVzb3VyY2U6IGNoZWNrUmVzb3VyY2VQZXJtaXNzaW9uXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgUGVybWlzc2lvbkd1YXJkOiBSZWFjdC5GQzxQZXJtaXNzaW9uR3VhcmRQcm9wcz4gPSAoe1xuICByZXF1aXJlZExldmVsLFxuICByZXNvdXJjZSxcbiAgZmFsbGJhY2sgPSBudWxsLFxuICBjaGlsZHJlblxufSkgPT4ge1xuICBjb25zdCB7aGFzUGVybWlzc2lvbiwgY2hlY2tSZXNvdXJjZX0gPSB1c2VQZXJtaXNzaW9ucygpO1xuXG4gIGNvbnN0IGhhc0FjY2VzcyA9IHJlc291cmNlIFxuICAgID8gY2hlY2tSZXNvdXJjZShyZXNvdXJjZSwgcmVxdWlyZWRMZXZlbCkgXG4gICAgOiBoYXNQZXJtaXNzaW9uKHJlcXVpcmVkTGV2ZWwpO1xuXG4gIGlmICghaGFzQWNjZXNzKSB7XG4gICAgcmV0dXJuIDw+e2ZhbGxiYWNrfTwvPjtcbiAgfVxuXG4gIHJldHVybiA8PntjaGlsZHJlbn08Lz47XG59O1xuXG5leHBvcnQge1Blcm1pc3Npb25MZXZlbH0gZnJvbSAnLi4vYWRhcHRlcnMvcGVybWlzc2lvbkFkYXB0ZXIvcGVybWlzc2lvbkFkYXB0ZXIuanMnO1xuZXhwb3J0IHR5cGUge1Blcm1pc3Npb259IGZyb20gJy4uL2FkYXB0ZXJzL3Blcm1pc3Npb25BZGFwdGVyL3Blcm1pc3Npb25BZGFwdGVyLmpzJztcbiJdLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidXNlRmx1eCIsImhhc1Blcm1pc3Npb24iLCJjaGVja1Blcm1pc3Npb24iLCJpc0FkbWluIiwiY2hlY2tJc0FkbWluIiwiaXNHdWVzdCIsImNoZWNrSXNHdWVzdCIsImlzTW9kZXJhdG9yIiwiY2hlY2tJc01vZGVyYXRvciIsImlzU3VwZXJBZG1pbiIsImNoZWNrSXNTdXBlckFkbWluIiwiaXNVc2VyIiwiY2hlY2tJc1VzZXIiLCJ1c2VQZXJtaXNzaW9ucyIsImZsdXgiLCJ1c2VyTGV2ZWwiLCJzZXRVc2VyTGV2ZWwiLCJ1cGRhdGVVc2VyTGV2ZWwiLCJzZXNzaW9uIiwiZ2V0U3RhdGUiLCJsZXZlbCIsInVzZXJBY2Nlc3MiLCJ1bnN1YnNjcmliZSIsIm9uIiwidW5zdWJzY3JpYmVVcGRhdGUiLCJ1bnN1YnNjcmliZVNlc3Npb24iLCJ1bnN1YnNjcmliZVNpZ25PdXQiLCJoYXNQZXJtaXNzaW9uTGV2ZWwiLCJyZXF1aXJlZExldmVsIiwiY2hlY2tSZXNvdXJjZVBlcm1pc3Npb24iLCJyZXNvdXJjZSIsInBlcm1pc3Npb25zIiwicmVzb3VyY2VQZXJtaXNzaW9uIiwiZmluZCIsInAiLCJ1bmRlZmluZWQiLCJjaGVja1Jlc291cmNlIiwiUGVybWlzc2lvbkd1YXJkIiwiZmFsbGJhY2siLCJjaGlsZHJlbiIsImhhc0FjY2VzcyIsIlBlcm1pc3Npb25MZXZlbCJdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Q0FHQyxHQUNELFNBQVFBLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQU8sUUFBUTtBQUN2RCxTQUFRQyxPQUFPLFFBQU8sOEJBQThCO0FBRXBELFNBQ0VDLGlCQUFpQkMsZUFBZSxFQUNoQ0MsV0FBV0MsWUFBWSxFQUN2QkMsV0FBV0MsWUFBWSxFQUN2QkMsZUFBZUMsZ0JBQWdCLEVBQy9CQyxnQkFBZ0JDLGlCQUFpQixFQUNqQ0MsVUFBVUMsV0FBVyxRQUVoQixxREFBcUQ7QUFzQjVELE9BQU8sTUFBTUMsaUJBQWlCO0lBQzVCLE1BQU1DLE9BQU9kO0lBQ2IsTUFBTSxDQUFDZSxXQUFXQyxhQUFhLEdBQUdqQixTQUFpQjtJQUVuREQsVUFBVTtRQUNSLE1BQU1tQixrQkFBa0I7WUFDdEIsTUFBTUMsVUFBeUJKLEtBQUtLLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztZQUM5RCxNQUFNQyxRQUFRRixRQUFRRyxVQUFVLElBQUk7WUFDcENMLGFBQWFJO1FBQ2Y7UUFFQUg7UUFFQSxNQUFNSyxjQUFjUixLQUFLUyxFQUFFLENBQUMsd0JBQXdCTjtRQUNwRCxNQUFNTyxvQkFBb0JWLEtBQUtTLEVBQUUsQ0FBQyw0QkFBNEJOO1FBQzlELE1BQU1RLHFCQUFxQlgsS0FBS1MsRUFBRSxDQUFDLDRCQUE0Qk47UUFDL0QsTUFBTVMscUJBQXFCWixLQUFLUyxFQUFFLENBQUMseUJBQXlCLElBQU1QLGFBQWE7UUFFL0UsT0FBTztZQUNMTTtZQUNBRTtZQUNBQztZQUNBQztRQUNGO0lBQ0YsR0FBRztRQUFDWjtLQUFLO0lBRVQsTUFBTWEscUJBQXFCOUIsWUFDekIsQ0FBQytCO1FBQ0MsT0FBTzFCLGdCQUFnQmEsV0FBV2E7SUFDcEMsR0FDQTtRQUFDYjtLQUFVO0lBR2IsTUFBTWMsMEJBQTBCaEMsWUFDOUIsQ0FBQ2lDLFVBQWtCRjtRQUNqQixNQUFNRyxjQUE0QmpCLEtBQUtLLFFBQVEsQ0FBQyxDQUFDLDJCQUEyQixFQUFFTCxLQUFLSyxRQUFRLENBQUMsd0JBQXdCLEVBQUUsRUFBRTtRQUV4SCxNQUFNYSxxQkFBcUJELFlBQVlFLElBQUksQ0FBQyxDQUFDQyxJQUFNQSxFQUFFSixRQUFRLEtBQUtBO1FBQ2xFLElBQUlFLHNCQUFzQkEsbUJBQW1CWixLQUFLLEtBQUtlLFdBQVc7WUFDaEUsT0FBT0gsbUJBQW1CWixLQUFLLElBQUlRO1FBQ3JDO1FBRUEsT0FBTzFCLGdCQUFnQmEsV0FBV2E7SUFDcEMsR0FDQTtRQUFDZDtRQUFNQztLQUFVO0lBR25CLE9BQU87UUFDTEE7UUFDQWQsZUFBZTBCO1FBQ2Z0QixTQUFTQyxhQUFhUztRQUN0QkosUUFBUUMsWUFBWUc7UUFDcEJSLGFBQWFDLGlCQUFpQk87UUFDOUJaLFNBQVNDLGFBQWFXO1FBQ3RCTixjQUFjQyxrQkFBa0JLO1FBQ2hDcUIsZUFBZVA7SUFDakI7QUFDRixFQUFFO0FBRUYsT0FBTyxNQUFNUSxrQkFBa0QsQ0FBQyxFQUM5RFQsYUFBYSxFQUNiRSxRQUFRLEVBQ1JRLFdBQVcsSUFBSSxFQUNmQyxRQUFRLEVBQ1Q7SUFDQyxNQUFNLEVBQUN0QyxhQUFhLEVBQUVtQyxhQUFhLEVBQUMsR0FBR3ZCO0lBRXZDLE1BQU0yQixZQUFZVixXQUNkTSxjQUFjTixVQUFVRixpQkFDeEIzQixjQUFjMkI7SUFFbEIsSUFBSSxDQUFDWSxXQUFXO1FBQ2QscUJBQU87c0JBQUdGOztJQUNaO0lBRUEscUJBQU87a0JBQUdDOztBQUNaLEVBQUU7QUFFRixTQUFRRSxlQUFlLFFBQU8scURBQXFEIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
export interface ActionRequestOptions {
|
|
3
|
+
readonly cacheTimeout?: number;
|
|
4
|
+
}
|
|
5
|
+
export declare const getCachedRequest: <T>(flux: FluxFramework, scope: string, payload?: Record<string, unknown>, options?: ActionRequestOptions) => T | undefined;
|
|
6
|
+
export declare const setCachedRequest: <T>(flux: FluxFramework, scope: string, payload: Record<string, unknown>, data: T, options?: ActionRequestOptions) => Promise<T>;
|
|
7
|
+
export declare const clearCachedRequest: (flux: FluxFramework, scope: string) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=requestCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requestCache.d.ts","sourceRoot":"","sources":["../../src/utils/requestCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAEnD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;CAChC;AAiCD,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAChC,MAAM,aAAa,EACnB,OAAO,MAAM,EACb,UAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,UAAS,oBAAyB,KACjC,CAAC,GAAG,SAsBN,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,CAAC,EACtC,MAAM,aAAa,EACnB,OAAO,MAAM,EACb,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACrC,MAAM,CAAC,EACP,UAAS,oBAAyB,KACjC,OAAO,CAAC,CAAC,CAeX,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,MAAM,aAAa,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAMzF,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const REQUEST_CACHE_PATH = 'app.requestCache';
|
|
2
|
+
const normalizePayload = (value)=>{
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return value.map(normalizePayload);
|
|
5
|
+
}
|
|
6
|
+
if (value && typeof value === 'object') {
|
|
7
|
+
return Object.keys(value).sort().reduce((result, key)=>{
|
|
8
|
+
result[key] = normalizePayload(value[key]);
|
|
9
|
+
return result;
|
|
10
|
+
}, {});
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
};
|
|
14
|
+
const getPayloadKey = (payload = {})=>JSON.stringify(normalizePayload(payload));
|
|
15
|
+
const getCachePath = (scope)=>`${REQUEST_CACHE_PATH}.${scope}`;
|
|
16
|
+
export const getCachedRequest = (flux, scope, payload = {}, options = {})=>{
|
|
17
|
+
const cacheTimeout = Number(options?.cacheTimeout || 0);
|
|
18
|
+
if (cacheTimeout <= 0) {
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
const entry = flux.getState(getCachePath(scope));
|
|
22
|
+
if (!entry) {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
const payloadKey = getPayloadKey(payload);
|
|
26
|
+
const timeoutMinutes = Number(entry.cacheTimeout || 0);
|
|
27
|
+
const expiresAt = entry.cacheTimestamp + timeoutMinutes * 60 * 1000;
|
|
28
|
+
if (entry.payloadKey !== payloadKey || Date.now() > expiresAt) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
return entry.data;
|
|
32
|
+
};
|
|
33
|
+
export const setCachedRequest = async (flux, scope, payload = {}, data, options = {})=>{
|
|
34
|
+
const cacheTimeout = Number(options?.cacheTimeout || 0);
|
|
35
|
+
if (cacheTimeout <= 0 || typeof flux?.setState !== 'function') {
|
|
36
|
+
return data;
|
|
37
|
+
}
|
|
38
|
+
await flux.setState(getCachePath(scope), {
|
|
39
|
+
cacheTimeout,
|
|
40
|
+
cacheTimestamp: Date.now(),
|
|
41
|
+
data,
|
|
42
|
+
payloadKey: getPayloadKey(payload)
|
|
43
|
+
});
|
|
44
|
+
return data;
|
|
45
|
+
};
|
|
46
|
+
export const clearCachedRequest = async (flux, scope)=>{
|
|
47
|
+
if (typeof flux?.setState !== 'function') {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
await flux.setState(getCachePath(scope), undefined);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvcmVxdWVzdENhY2hlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtGbHV4RnJhbWV3b3JrfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFjdGlvblJlcXVlc3RPcHRpb25zIHtcbiAgcmVhZG9ubHkgY2FjaGVUaW1lb3V0PzogbnVtYmVyO1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdENhY2hlRW50cnk8VCA9IHVua25vd24+IHtcbiAgcmVhZG9ubHkgY2FjaGVUaW1lb3V0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNhY2hlVGltZXN0YW1wOiBudW1iZXI7XG4gIHJlYWRvbmx5IGRhdGE6IFQ7XG4gIHJlYWRvbmx5IHBheWxvYWRLZXk6IHN0cmluZztcbn1cblxuY29uc3QgUkVRVUVTVF9DQUNIRV9QQVRIID0gJ2FwcC5yZXF1ZXN0Q2FjaGUnO1xuXG5jb25zdCBub3JtYWxpemVQYXlsb2FkID0gKHZhbHVlOiB1bmtub3duKTogdW5rbm93biA9PiB7XG4gIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlLm1hcChub3JtYWxpemVQYXlsb2FkKTtcbiAgfVxuXG4gIGlmKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pXG4gICAgICAuc29ydCgpXG4gICAgICAucmVkdWNlKChyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXkpID0+IHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBub3JtYWxpemVQYXlsb2FkKCh2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LCB7fSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG5jb25zdCBnZXRQYXlsb2FkS2V5ID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBzdHJpbmcgPT5cbiAgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplUGF5bG9hZChwYXlsb2FkKSk7XG5cbmNvbnN0IGdldENhY2hlUGF0aCA9IChzY29wZTogc3RyaW5nKTogc3RyaW5nID0+IGAke1JFUVVFU1RfQ0FDSEVfUEFUSH0uJHtzY29wZX1gO1xuXG5leHBvcnQgY29uc3QgZ2V0Q2FjaGVkUmVxdWVzdCA9IDxUPihcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgc2NvcGU6IHN0cmluZyxcbiAgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSxcbiAgb3B0aW9uczogQWN0aW9uUmVxdWVzdE9wdGlvbnMgPSB7fVxuKTogVCB8IHVuZGVmaW5lZCA9PiB7XG4gIGNvbnN0IGNhY2hlVGltZW91dCA9IE51bWJlcihvcHRpb25zPy5jYWNoZVRpbWVvdXQgfHwgMCk7XG5cbiAgaWYoY2FjaGVUaW1lb3V0IDw9IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZW50cnkgPSBmbHV4LmdldFN0YXRlPFJlcXVlc3RDYWNoZUVudHJ5PFQ+IHwgdW5kZWZpbmVkPihnZXRDYWNoZVBhdGgoc2NvcGUpKTtcblxuICBpZighZW50cnkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcGF5bG9hZEtleSA9IGdldFBheWxvYWRLZXkocGF5bG9hZCk7XG4gIGNvbnN0IHRpbWVvdXRNaW51dGVzID0gTnVtYmVyKGVudHJ5LmNhY2hlVGltZW91dCB8fCAwKTtcbiAgY29uc3QgZXhwaXJlc0F0ID0gZW50cnkuY2FjaGVUaW1lc3RhbXAgKyAodGltZW91dE1pbnV0ZXMgKiA2MCAqIDEwMDApO1xuXG4gIGlmKGVudHJ5LnBheWxvYWRLZXkgIT09IHBheWxvYWRLZXkgfHwgRGF0ZS5ub3coKSA+IGV4cGlyZXNBdCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZW50cnkuZGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRDYWNoZWRSZXF1ZXN0ID0gYXN5bmMgPFQ+KFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBzY29wZTogc3RyaW5nLFxuICBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9LFxuICBkYXRhOiBULFxuICBvcHRpb25zOiBBY3Rpb25SZXF1ZXN0T3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgY2FjaGVUaW1lb3V0ID0gTnVtYmVyKG9wdGlvbnM/LmNhY2hlVGltZW91dCB8fCAwKTtcblxuICBpZihjYWNoZVRpbWVvdXQgPD0gMCB8fCB0eXBlb2YgZmx1eD8uc2V0U3RhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIGF3YWl0IGZsdXguc2V0U3RhdGUoZ2V0Q2FjaGVQYXRoKHNjb3BlKSwge1xuICAgIGNhY2hlVGltZW91dCxcbiAgICBjYWNoZVRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICBkYXRhLFxuICAgIHBheWxvYWRLZXk6IGdldFBheWxvYWRLZXkocGF5bG9hZClcbiAgfSBhcyBSZXF1ZXN0Q2FjaGVFbnRyeTxUPik7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJDYWNoZWRSZXF1ZXN0ID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmssIHNjb3BlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYodHlwZW9mIGZsdXg/LnNldFN0YXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgZmx1eC5zZXRTdGF0ZShnZXRDYWNoZVBhdGgoc2NvcGUpLCB1bmRlZmluZWQpO1xufTtcbiJdLCJuYW1lcyI6WyJSRVFVRVNUX0NBQ0hFX1BBVEgiLCJub3JtYWxpemVQYXlsb2FkIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJPYmplY3QiLCJrZXlzIiwic29ydCIsInJlZHVjZSIsInJlc3VsdCIsImtleSIsImdldFBheWxvYWRLZXkiLCJwYXlsb2FkIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldENhY2hlUGF0aCIsInNjb3BlIiwiZ2V0Q2FjaGVkUmVxdWVzdCIsImZsdXgiLCJvcHRpb25zIiwiY2FjaGVUaW1lb3V0IiwiTnVtYmVyIiwidW5kZWZpbmVkIiwiZW50cnkiLCJnZXRTdGF0ZSIsInBheWxvYWRLZXkiLCJ0aW1lb3V0TWludXRlcyIsImV4cGlyZXNBdCIsImNhY2hlVGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImRhdGEiLCJzZXRDYWNoZWRSZXF1ZXN0Iiwic2V0U3RhdGUiLCJjbGVhckNhY2hlZFJlcXVlc3QiXSwibWFwcGluZ3MiOiJBQWFBLE1BQU1BLHFCQUFxQjtBQUUzQixNQUFNQyxtQkFBbUIsQ0FBQ0M7SUFDeEIsSUFBR0MsTUFBTUMsT0FBTyxDQUFDRixRQUFRO1FBQ3ZCLE9BQU9BLE1BQU1HLEdBQUcsQ0FBQ0o7SUFDbkI7SUFFQSxJQUFHQyxTQUFTLE9BQU9BLFVBQVUsVUFBVTtRQUNyQyxPQUFPSSxPQUFPQyxJQUFJLENBQUNMLE9BQ2hCTSxJQUFJLEdBQ0pDLE1BQU0sQ0FBQyxDQUFDQyxRQUFpQ0M7WUFDeENELE1BQU0sQ0FBQ0MsSUFBSSxHQUFHVixpQkFBaUIsQUFBQ0MsS0FBaUMsQ0FBQ1MsSUFBSTtZQUN0RSxPQUFPRDtRQUNULEdBQUcsQ0FBQztJQUNSO0lBRUEsT0FBT1I7QUFDVDtBQUVBLE1BQU1VLGdCQUFnQixDQUFDQyxVQUFtQyxDQUFDLENBQUMsR0FDMURDLEtBQUtDLFNBQVMsQ0FBQ2QsaUJBQWlCWTtBQUVsQyxNQUFNRyxlQUFlLENBQUNDLFFBQTBCLEdBQUdqQixtQkFBbUIsQ0FBQyxFQUFFaUIsT0FBTztBQUVoRixPQUFPLE1BQU1DLG1CQUFtQixDQUM5QkMsTUFDQUYsT0FDQUosVUFBbUMsQ0FBQyxDQUFDLEVBQ3JDTyxVQUFnQyxDQUFDLENBQUM7SUFFbEMsTUFBTUMsZUFBZUMsT0FBT0YsU0FBU0MsZ0JBQWdCO0lBRXJELElBQUdBLGdCQUFnQixHQUFHO1FBQ3BCLE9BQU9FO0lBQ1Q7SUFFQSxNQUFNQyxRQUFRTCxLQUFLTSxRQUFRLENBQW1DVCxhQUFhQztJQUUzRSxJQUFHLENBQUNPLE9BQU87UUFDVCxPQUFPRDtJQUNUO0lBRUEsTUFBTUcsYUFBYWQsY0FBY0M7SUFDakMsTUFBTWMsaUJBQWlCTCxPQUFPRSxNQUFNSCxZQUFZLElBQUk7SUFDcEQsTUFBTU8sWUFBWUosTUFBTUssY0FBYyxHQUFJRixpQkFBaUIsS0FBSztJQUVoRSxJQUFHSCxNQUFNRSxVQUFVLEtBQUtBLGNBQWNJLEtBQUtDLEdBQUcsS0FBS0gsV0FBVztRQUM1RCxPQUFPTDtJQUNUO0lBRUEsT0FBT0MsTUFBTVEsSUFBSTtBQUNuQixFQUFFO0FBRUYsT0FBTyxNQUFNQyxtQkFBbUIsT0FDOUJkLE1BQ0FGLE9BQ0FKLFVBQW1DLENBQUMsQ0FBQyxFQUNyQ21CLE1BQ0FaLFVBQWdDLENBQUMsQ0FBQztJQUVsQyxNQUFNQyxlQUFlQyxPQUFPRixTQUFTQyxnQkFBZ0I7SUFFckQsSUFBR0EsZ0JBQWdCLEtBQUssT0FBT0YsTUFBTWUsYUFBYSxZQUFZO1FBQzVELE9BQU9GO0lBQ1Q7SUFFQSxNQUFNYixLQUFLZSxRQUFRLENBQUNsQixhQUFhQyxRQUFRO1FBQ3ZDSTtRQUNBUSxnQkFBZ0JDLEtBQUtDLEdBQUc7UUFDeEJDO1FBQ0FOLFlBQVlkLGNBQWNDO0lBQzVCO0lBRUEsT0FBT21CO0FBQ1QsRUFBRTtBQUVGLE9BQU8sTUFBTUcscUJBQXFCLE9BQU9oQixNQUFxQkY7SUFDNUQsSUFBRyxPQUFPRSxNQUFNZSxhQUFhLFlBQVk7UUFDdkM7SUFDRjtJQUVBLE1BQU1mLEtBQUtlLFFBQVEsQ0FBQ2xCLGFBQWFDLFFBQVFNO0FBQzNDLEVBQUUifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { FluxFramework } from '@nlabs/arkhamjs';
|
|
2
|
+
import type { SessionType } from './api.js';
|
|
3
|
+
import type { ConfigAppSessionType } from '../config/index.js';
|
|
4
|
+
export declare const parseJwtExpiryMs: (token: string) => number;
|
|
5
|
+
export declare const parseJwtIssuedMs: (token: string) => number;
|
|
6
|
+
export declare const normalizeSession: (session?: Record<string, unknown>) => Record<string, unknown>;
|
|
7
|
+
export declare const isValidSession: (session?: Record<string, unknown>) => boolean;
|
|
8
|
+
export declare const getRefreshWindowMinutes: (sessionLifetimeMinutes: number, sessionConfig?: ConfigAppSessionType) => number;
|
|
9
|
+
export declare const storeSession: (flux: FluxFramework, session?: Record<string, unknown>) => Promise<SessionType>;
|
|
10
|
+
export declare const readStoredSession: (flux: FluxFramework) => Promise<SessionType>;
|
|
11
|
+
export declare const clearPersistedSession: (flux: FluxFramework) => Promise<void>;
|
|
12
|
+
export declare const hydrateSessionFromStorage: (flux: FluxFramework) => Promise<SessionType>;
|
|
13
|
+
export declare const isLoggedIn: (flux: FluxFramework) => boolean;
|
|
14
|
+
//# sourceMappingURL=session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/utils/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,oBAAoB,CAAC;AA4D7D,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MACF,CAAC;AAEhD,eAAO,MAAM,gBAAgB,GAAI,OAAO,MAAM,KAAG,MACF,CAAC;AAEhD,eAAO,MAAM,gBAAgB,GAAI,UAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAiB9F,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,UAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,KAAG,OAatE,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAClC,wBAAwB,MAAM,EAC9B,gBAAe,oBAAyB,KACvC,MASF,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,MAAM,aAAa,EACnB,UAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,KACpC,OAAO,CAAC,WAAW,CAYrB,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAU,MAAM,aAAa,KAAG,OAAO,CAAC,WAAW,CACsB,CAAC;AAExG,eAAO,MAAM,qBAAqB,GAAU,MAAM,aAAa,KAAG,OAAO,CAAC,IAAI,CAE7E,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAU,MAAM,aAAa,KAAG,OAAO,CAAC,WAAW,CAUxF,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,MAAM,aAAa,KAAG,OAIhD,CAAC"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
const MILLIS_THRESHOLD = 1_000_000_000_000;
|
|
2
|
+
const SECONDS_THRESHOLD = 1_000_000_000;
|
|
3
|
+
const decodeJwtPayload = (token)=>{
|
|
4
|
+
try {
|
|
5
|
+
if (!token) {
|
|
6
|
+
return {};
|
|
7
|
+
}
|
|
8
|
+
const tokenParts = token.split('.');
|
|
9
|
+
if (tokenParts.length < 2 || typeof atob !== 'function') {
|
|
10
|
+
return {};
|
|
11
|
+
}
|
|
12
|
+
const payloadBase64 = tokenParts[1]?.replace(/-/g, '+').replace(/_/g, '/');
|
|
13
|
+
const normalized = payloadBase64?.padEnd(Math.ceil(payloadBase64.length / 4) * 4, '=');
|
|
14
|
+
return JSON.parse(atob(normalized || ''));
|
|
15
|
+
} catch (error) {
|
|
16
|
+
return {};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const parseTimestampMs = (value)=>{
|
|
20
|
+
const numericValue = Number(value || 0);
|
|
21
|
+
if (numericValue > MILLIS_THRESHOLD) {
|
|
22
|
+
return numericValue;
|
|
23
|
+
}
|
|
24
|
+
if (numericValue > SECONDS_THRESHOLD) {
|
|
25
|
+
return numericValue * 1000;
|
|
26
|
+
}
|
|
27
|
+
return 0;
|
|
28
|
+
};
|
|
29
|
+
const getSessionToken = (session)=>String(session.token || session.idToken?.jwtToken || session.accessToken?.jwtToken || '');
|
|
30
|
+
const buildTokenValue = (token, currentToken)=>currentToken && typeof currentToken === 'object' ? currentToken : {
|
|
31
|
+
jwtToken: token
|
|
32
|
+
};
|
|
33
|
+
const getNormalizedSessionTimestamps = (session, token)=>{
|
|
34
|
+
const payload = decodeJwtPayload(token);
|
|
35
|
+
const expires = parseTimestampMs(session.expires) || parseTimestampMs(payload.exp);
|
|
36
|
+
const issued = parseTimestampMs(session.issued) || parseTimestampMs(payload.iat);
|
|
37
|
+
return {
|
|
38
|
+
expires,
|
|
39
|
+
issued
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
export const parseJwtExpiryMs = (token)=>parseTimestampMs(decodeJwtPayload(token).exp);
|
|
43
|
+
export const parseJwtIssuedMs = (token)=>parseTimestampMs(decodeJwtPayload(token).iat);
|
|
44
|
+
export const normalizeSession = (session = {})=>{
|
|
45
|
+
const token = getSessionToken(session);
|
|
46
|
+
if (!token) {
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
const { expires, issued } = getNormalizedSessionTimestamps(session, token);
|
|
50
|
+
return {
|
|
51
|
+
...session,
|
|
52
|
+
accessToken: buildTokenValue(token, session.accessToken),
|
|
53
|
+
expires,
|
|
54
|
+
idToken: buildTokenValue(token, session.idToken),
|
|
55
|
+
issued,
|
|
56
|
+
token
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export const isValidSession = (session = {})=>{
|
|
60
|
+
const normalized = normalizeSession(session);
|
|
61
|
+
const token = String(normalized?.token || '');
|
|
62
|
+
if (!token) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
const sessionExpires = Number(normalized?.expires || 0);
|
|
66
|
+
const tokenExpires = parseJwtExpiryMs(token);
|
|
67
|
+
const expiresAt = sessionExpires > 0 ? sessionExpires : tokenExpires;
|
|
68
|
+
return Boolean(expiresAt && Date.now() < expiresAt);
|
|
69
|
+
};
|
|
70
|
+
export const getRefreshWindowMinutes = (sessionLifetimeMinutes, sessionConfig = {})=>{
|
|
71
|
+
const lifetimeMinutes = Math.max(1, Number(sessionLifetimeMinutes || 0));
|
|
72
|
+
const refreshAfterRatio = Number(sessionConfig.refreshAfterRatio || 0);
|
|
73
|
+
if (refreshAfterRatio > 0 && refreshAfterRatio < 1) {
|
|
74
|
+
return Math.max(1, Math.round(lifetimeMinutes * (1 - refreshAfterRatio)));
|
|
75
|
+
}
|
|
76
|
+
return Math.max(1, Number(sessionConfig.minMinutes || 5));
|
|
77
|
+
};
|
|
78
|
+
export const storeSession = (flux, session = {})=>{
|
|
79
|
+
return (async ()=>{
|
|
80
|
+
const normalizedSession = normalizeSession(session);
|
|
81
|
+
if (!Object.keys(normalizedSession).length) {
|
|
82
|
+
await clearPersistedSession(flux);
|
|
83
|
+
return {};
|
|
84
|
+
}
|
|
85
|
+
await Promise.resolve(flux.setState('user.session', normalizedSession));
|
|
86
|
+
return normalizedSession;
|
|
87
|
+
})();
|
|
88
|
+
};
|
|
89
|
+
export const readStoredSession = async (flux)=>normalizeSession(flux.getState('user.session', {}) || {});
|
|
90
|
+
export const clearPersistedSession = async (flux)=>{
|
|
91
|
+
await Promise.resolve(flux.setState('user.session', {}));
|
|
92
|
+
};
|
|
93
|
+
export const hydrateSessionFromStorage = async (flux)=>{
|
|
94
|
+
const currentSession = await readStoredSession(flux);
|
|
95
|
+
if (isValidSession(currentSession)) {
|
|
96
|
+
await storeSession(flux, currentSession);
|
|
97
|
+
return currentSession;
|
|
98
|
+
}
|
|
99
|
+
await clearPersistedSession(flux);
|
|
100
|
+
return {};
|
|
101
|
+
};
|
|
102
|
+
export const isLoggedIn = (flux)=>{
|
|
103
|
+
const currentSession = flux.getState('user.session', {}) || {};
|
|
104
|
+
return isValidSession(currentSession);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvc2Vzc2lvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7Rmx1eEZyYW1ld29ya30gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHtTZXNzaW9uVHlwZX0gZnJvbSAnLi9hcGkuanMnO1xuaW1wb3J0IHR5cGUge0NvbmZpZ0FwcFNlc3Npb25UeXBlfSBmcm9tICcuLi9jb25maWcvaW5kZXguanMnO1xuXG5jb25zdCBNSUxMSVNfVEhSRVNIT0xEID0gMV8wMDBfMDAwXzAwMF8wMDA7XG5jb25zdCBTRUNPTkRTX1RIUkVTSE9MRCA9IDFfMDAwXzAwMF8wMDA7XG5cbmNvbnN0IGRlY29kZUp3dFBheWxvYWQgPSAodG9rZW46IHN0cmluZyk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+IHtcbiAgdHJ5IHtcbiAgICBpZighdG9rZW4pIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlblBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcbiAgICBpZih0b2tlblBhcnRzLmxlbmd0aCA8IDIgfHwgdHlwZW9mIGF0b2IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkQmFzZTY0ID0gdG9rZW5QYXJ0c1sxXT8ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBub3JtYWxpemVkID0gcGF5bG9hZEJhc2U2ND8ucGFkRW5kKE1hdGguY2VpbChwYXlsb2FkQmFzZTY0Lmxlbmd0aCAvIDQpICogNCwgJz0nKTtcblxuICAgIHJldHVybiBKU09OLnBhcnNlKGF0b2Iobm9ybWFsaXplZCB8fCAnJykpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG59O1xuXG5jb25zdCBwYXJzZVRpbWVzdGFtcE1zID0gKHZhbHVlOiB1bmtub3duKTogbnVtYmVyID0+IHtcbiAgY29uc3QgbnVtZXJpY1ZhbHVlID0gTnVtYmVyKHZhbHVlIHx8IDApO1xuXG4gIGlmKG51bWVyaWNWYWx1ZSA+IE1JTExJU19USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gbnVtZXJpY1ZhbHVlO1xuICB9XG5cbiAgaWYobnVtZXJpY1ZhbHVlID4gU0VDT05EU19USFJFU0hPTEQpIHtcbiAgICByZXR1cm4gbnVtZXJpY1ZhbHVlICogMTAwMDtcbiAgfVxuXG4gIHJldHVybiAwO1xufTtcblxuY29uc3QgZ2V0U2Vzc2lvblRva2VuID0gKHNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogc3RyaW5nID0+XG4gIFN0cmluZyhcbiAgICBzZXNzaW9uLnRva2VuXG4gICAgfHwgKHNlc3Npb24uaWRUb2tlbiBhcyB7and0VG9rZW4/OiBzdHJpbmd9IHwgdW5kZWZpbmVkKT8uand0VG9rZW5cbiAgICB8fCAoc2Vzc2lvbi5hY2Nlc3NUb2tlbiBhcyB7and0VG9rZW4/OiBzdHJpbmd9IHwgdW5kZWZpbmVkKT8uand0VG9rZW5cbiAgICB8fCAnJ1xuICApO1xuXG5jb25zdCBidWlsZFRva2VuVmFsdWUgPSAodG9rZW46IHN0cmluZywgY3VycmVudFRva2VuPzogdW5rbm93bikgPT5cbiAgY3VycmVudFRva2VuICYmIHR5cGVvZiBjdXJyZW50VG9rZW4gPT09ICdvYmplY3QnXG4gICAgPyBjdXJyZW50VG9rZW5cbiAgICA6IHtqd3RUb2tlbjogdG9rZW59O1xuXG5jb25zdCBnZXROb3JtYWxpemVkU2Vzc2lvblRpbWVzdGFtcHMgPSAoc2Vzc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIHRva2VuOiBzdHJpbmcpID0+IHtcbiAgY29uc3QgcGF5bG9hZCA9IGRlY29kZUp3dFBheWxvYWQodG9rZW4pO1xuICBjb25zdCBleHBpcmVzID0gcGFyc2VUaW1lc3RhbXBNcyhzZXNzaW9uLmV4cGlyZXMpIHx8IHBhcnNlVGltZXN0YW1wTXMocGF5bG9hZC5leHApO1xuICBjb25zdCBpc3N1ZWQgPSBwYXJzZVRpbWVzdGFtcE1zKHNlc3Npb24uaXNzdWVkKSB8fCBwYXJzZVRpbWVzdGFtcE1zKHBheWxvYWQuaWF0KTtcblxuICByZXR1cm4ge2V4cGlyZXMsIGlzc3VlZH07XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VKd3RFeHBpcnlNcyA9ICh0b2tlbjogc3RyaW5nKTogbnVtYmVyID0+XG4gIHBhcnNlVGltZXN0YW1wTXMoZGVjb2RlSnd0UGF5bG9hZCh0b2tlbikuZXhwKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSnd0SXNzdWVkTXMgPSAodG9rZW46IHN0cmluZyk6IG51bWJlciA9PlxuICBwYXJzZVRpbWVzdGFtcE1zKGRlY29kZUp3dFBheWxvYWQodG9rZW4pLmlhdCk7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVTZXNzaW9uID0gKHNlc3Npb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge30pOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIGNvbnN0IHRva2VuID0gZ2V0U2Vzc2lvblRva2VuKHNlc3Npb24pO1xuXG4gIGlmKCF0b2tlbikge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIGNvbnN0IHtleHBpcmVzLCBpc3N1ZWR9ID0gZ2V0Tm9ybWFsaXplZFNlc3Npb25UaW1lc3RhbXBzKHNlc3Npb24sIHRva2VuKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnNlc3Npb24sXG4gICAgYWNjZXNzVG9rZW46IGJ1aWxkVG9rZW5WYWx1ZSh0b2tlbiwgc2Vzc2lvbi5hY2Nlc3NUb2tlbiksXG4gICAgZXhwaXJlcyxcbiAgICBpZFRva2VuOiBidWlsZFRva2VuVmFsdWUodG9rZW4sIHNlc3Npb24uaWRUb2tlbiksXG4gICAgaXNzdWVkLFxuICAgIHRva2VuXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFNlc3Npb24gPSAoc2Vzc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fSk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplU2Vzc2lvbihzZXNzaW9uKTtcbiAgY29uc3QgdG9rZW4gPSBTdHJpbmcobm9ybWFsaXplZD8udG9rZW4gfHwgJycpO1xuXG4gIGlmKCF0b2tlbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHNlc3Npb25FeHBpcmVzID0gTnVtYmVyKG5vcm1hbGl6ZWQ/LmV4cGlyZXMgfHwgMCk7XG4gIGNvbnN0IHRva2VuRXhwaXJlcyA9IHBhcnNlSnd0RXhwaXJ5TXModG9rZW4pO1xuICBjb25zdCBleHBpcmVzQXQgPSBzZXNzaW9uRXhwaXJlcyA+IDAgPyBzZXNzaW9uRXhwaXJlcyA6IHRva2VuRXhwaXJlcztcblxuICByZXR1cm4gQm9vbGVhbihleHBpcmVzQXQgJiYgRGF0ZS5ub3coKSA8IGV4cGlyZXNBdCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVmcmVzaFdpbmRvd01pbnV0ZXMgPSAoXG4gIHNlc3Npb25MaWZldGltZU1pbnV0ZXM6IG51bWJlcixcbiAgc2Vzc2lvbkNvbmZpZzogQ29uZmlnQXBwU2Vzc2lvblR5cGUgPSB7fVxuKTogbnVtYmVyID0+IHtcbiAgY29uc3QgbGlmZXRpbWVNaW51dGVzID0gTWF0aC5tYXgoMSwgTnVtYmVyKHNlc3Npb25MaWZldGltZU1pbnV0ZXMgfHwgMCkpO1xuICBjb25zdCByZWZyZXNoQWZ0ZXJSYXRpbyA9IE51bWJlcihzZXNzaW9uQ29uZmlnLnJlZnJlc2hBZnRlclJhdGlvIHx8IDApO1xuXG4gIGlmKHJlZnJlc2hBZnRlclJhdGlvID4gMCAmJiByZWZyZXNoQWZ0ZXJSYXRpbyA8IDEpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZChsaWZldGltZU1pbnV0ZXMgKiAoMSAtIHJlZnJlc2hBZnRlclJhdGlvKSkpO1xuICB9XG5cbiAgcmV0dXJuIE1hdGgubWF4KDEsIE51bWJlcihzZXNzaW9uQ29uZmlnLm1pbk1pbnV0ZXMgfHwgNSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHN0b3JlU2Vzc2lvbiA9IChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgc2Vzc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxuKTogUHJvbWlzZTxTZXNzaW9uVHlwZT4gPT4ge1xuICByZXR1cm4gKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkU2Vzc2lvbiA9IG5vcm1hbGl6ZVNlc3Npb24oc2Vzc2lvbikgYXMgU2Vzc2lvblR5cGU7XG5cbiAgICBpZighT2JqZWN0LmtleXMobm9ybWFsaXplZFNlc3Npb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pLmxlbmd0aCkge1xuICAgICAgYXdhaXQgY2xlYXJQZXJzaXN0ZWRTZXNzaW9uKGZsdXgpO1xuICAgICAgcmV0dXJuIHt9IGFzIFNlc3Npb25UeXBlO1xuICAgIH1cblxuICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZShmbHV4LnNldFN0YXRlKCd1c2VyLnNlc3Npb24nLCBub3JtYWxpemVkU2Vzc2lvbikpO1xuICAgIHJldHVybiBub3JtYWxpemVkU2Vzc2lvbjtcbiAgfSkoKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWFkU3RvcmVkU2Vzc2lvbiA9IGFzeW5jIChmbHV4OiBGbHV4RnJhbWV3b3JrKTogUHJvbWlzZTxTZXNzaW9uVHlwZT4gPT5cbiAgbm9ybWFsaXplU2Vzc2lvbigoZmx1eC5nZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pIHx8IHt9KSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgYXMgU2Vzc2lvblR5cGU7XG5cbmV4cG9ydCBjb25zdCBjbGVhclBlcnNpc3RlZFNlc3Npb24gPSBhc3luYyAoZmx1eDogRmx1eEZyYW1ld29yayk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBhd2FpdCBQcm9taXNlLnJlc29sdmUoZmx1eC5zZXRTdGF0ZSgndXNlci5zZXNzaW9uJywge30pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlID0gYXN5bmMgKGZsdXg6IEZsdXhGcmFtZXdvcmspOiBQcm9taXNlPFNlc3Npb25UeXBlPiA9PiB7XG4gIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gYXdhaXQgcmVhZFN0b3JlZFNlc3Npb24oZmx1eCk7XG5cbiAgaWYoaXNWYWxpZFNlc3Npb24oY3VycmVudFNlc3Npb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKSB7XG4gICAgYXdhaXQgc3RvcmVTZXNzaW9uKGZsdXgsIGN1cnJlbnRTZXNzaW9uIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pO1xuICAgIHJldHVybiBjdXJyZW50U2Vzc2lvbjtcbiAgfVxuXG4gIGF3YWl0IGNsZWFyUGVyc2lzdGVkU2Vzc2lvbihmbHV4KTtcbiAgcmV0dXJuIHt9IGFzIFNlc3Npb25UeXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTG9nZ2VkSW4gPSAoZmx1eDogRmx1eEZyYW1ld29yayk6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChmbHV4LmdldFN0YXRlKCd1c2VyLnNlc3Npb24nLCB7fSkgfHwge30pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIHJldHVybiBpc1ZhbGlkU2Vzc2lvbihjdXJyZW50U2Vzc2lvbik7XG59O1xuIl0sIm5hbWVzIjpbIk1JTExJU19USFJFU0hPTEQiLCJTRUNPTkRTX1RIUkVTSE9MRCIsImRlY29kZUp3dFBheWxvYWQiLCJ0b2tlbiIsInRva2VuUGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImF0b2IiLCJwYXlsb2FkQmFzZTY0IiwicmVwbGFjZSIsIm5vcm1hbGl6ZWQiLCJwYWRFbmQiLCJNYXRoIiwiY2VpbCIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwicGFyc2VUaW1lc3RhbXBNcyIsInZhbHVlIiwibnVtZXJpY1ZhbHVlIiwiTnVtYmVyIiwiZ2V0U2Vzc2lvblRva2VuIiwic2Vzc2lvbiIsIlN0cmluZyIsImlkVG9rZW4iLCJqd3RUb2tlbiIsImFjY2Vzc1Rva2VuIiwiYnVpbGRUb2tlblZhbHVlIiwiY3VycmVudFRva2VuIiwiZ2V0Tm9ybWFsaXplZFNlc3Npb25UaW1lc3RhbXBzIiwicGF5bG9hZCIsImV4cGlyZXMiLCJleHAiLCJpc3N1ZWQiLCJpYXQiLCJwYXJzZUp3dEV4cGlyeU1zIiwicGFyc2VKd3RJc3N1ZWRNcyIsIm5vcm1hbGl6ZVNlc3Npb24iLCJpc1ZhbGlkU2Vzc2lvbiIsInNlc3Npb25FeHBpcmVzIiwidG9rZW5FeHBpcmVzIiwiZXhwaXJlc0F0IiwiQm9vbGVhbiIsIkRhdGUiLCJub3ciLCJnZXRSZWZyZXNoV2luZG93TWludXRlcyIsInNlc3Npb25MaWZldGltZU1pbnV0ZXMiLCJzZXNzaW9uQ29uZmlnIiwibGlmZXRpbWVNaW51dGVzIiwibWF4IiwicmVmcmVzaEFmdGVyUmF0aW8iLCJyb3VuZCIsIm1pbk1pbnV0ZXMiLCJzdG9yZVNlc3Npb24iLCJmbHV4Iiwibm9ybWFsaXplZFNlc3Npb24iLCJPYmplY3QiLCJrZXlzIiwiY2xlYXJQZXJzaXN0ZWRTZXNzaW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzZXRTdGF0ZSIsInJlYWRTdG9yZWRTZXNzaW9uIiwiZ2V0U3RhdGUiLCJoeWRyYXRlU2Vzc2lvbkZyb21TdG9yYWdlIiwiY3VycmVudFNlc3Npb24iLCJpc0xvZ2dlZEluIl0sIm1hcHBpbmdzIjoiQUFJQSxNQUFNQSxtQkFBbUI7QUFDekIsTUFBTUMsb0JBQW9CO0FBRTFCLE1BQU1DLG1CQUFtQixDQUFDQztJQUN4QixJQUFJO1FBQ0YsSUFBRyxDQUFDQSxPQUFPO1lBQ1QsT0FBTyxDQUFDO1FBQ1Y7UUFFQSxNQUFNQyxhQUFhRCxNQUFNRSxLQUFLLENBQUM7UUFDL0IsSUFBR0QsV0FBV0UsTUFBTSxHQUFHLEtBQUssT0FBT0MsU0FBUyxZQUFZO1lBQ3RELE9BQU8sQ0FBQztRQUNWO1FBRUEsTUFBTUMsZ0JBQWdCSixVQUFVLENBQUMsRUFBRSxFQUFFSyxRQUFRLE1B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
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
type TypingUser = {
|
|
2
|
+
readonly imageUrl?: string;
|
|
3
|
+
readonly name?: string;
|
|
4
|
+
readonly personaId?: string;
|
|
5
|
+
readonly thumbUrl?: string;
|
|
6
|
+
readonly userId?: string;
|
|
7
|
+
readonly username?: string;
|
|
8
|
+
};
|
|
9
|
+
export type ConversationTypingOptions = {
|
|
10
|
+
readonly name?: string;
|
|
11
|
+
readonly personaId?: string;
|
|
12
|
+
readonly userId?: string;
|
|
13
|
+
readonly username?: string;
|
|
14
|
+
readonly users?: TypingUser[];
|
|
15
|
+
};
|
|
16
|
+
export type UseConversationTypingOptions = {
|
|
17
|
+
readonly debounceMs?: number;
|
|
18
|
+
readonly idleMs?: number;
|
|
19
|
+
};
|
|
20
|
+
export declare const useConversationTyping: ({ debounceMs, idleMs }?: UseConversationTypingOptions) => {
|
|
21
|
+
setConversation: (conversationId: string, options?: ConversationTypingOptions) => void;
|
|
22
|
+
stopTyping: (conversationId?: string, options?: ConversationTypingOptions) => void;
|
|
23
|
+
syncDraft: (conversationId: string, draft: string, options?: ConversationTypingOptions) => void;
|
|
24
|
+
};
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=useConversationTyping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useConversationTyping.d.ts","sourceRoot":"","sources":["../../src/utils/useConversationTyping.ts"],"names":[],"mappings":"AAIA,KAAK,UAAU,GAAG;IAChB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAKF,eAAO,MAAM,qBAAqB,GAAI,yBAGnC,4BAAiC;sCAyEmB,MAAM,YAAW,yBAAyB;oDAiBJ,yBAAyB;gCA3CrE,MAAM,SAAS,MAAM,YAAW,yBAAyB;CA8DzG,CAAC"}
|