@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,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2025-Present, Nitrogen Labs, Inc.
|
|
3
|
+
* Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
|
|
4
|
+
*/ import { z } from 'zod';
|
|
5
|
+
export class TranslationValidationError extends Error {
|
|
6
|
+
field;
|
|
7
|
+
constructor(message, field){
|
|
8
|
+
super(message), this.field = field;
|
|
9
|
+
this.name = 'TranslationValidationError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const translationSchema = z.object({
|
|
13
|
+
key: z.string().min(1, 'Key is required'),
|
|
14
|
+
locale: z.string().min(2, 'Locale is required').max(5, 'Locale must be less than 5 characters'),
|
|
15
|
+
value: z.string().min(1, 'Value is required'),
|
|
16
|
+
namespace: z.string().optional(),
|
|
17
|
+
timestamp: z.number().optional()
|
|
18
|
+
});
|
|
19
|
+
const translationInputSchema = z.object({
|
|
20
|
+
key: z.string().min(1, 'Key is required'),
|
|
21
|
+
locale: z.string().min(2, 'Locale is required').max(5, 'Locale must be less than 5 characters'),
|
|
22
|
+
value: z.string().min(1, 'Value is required'),
|
|
23
|
+
namespace: z.string().optional()
|
|
24
|
+
});
|
|
25
|
+
export const parseTranslation = (translation)=>{
|
|
26
|
+
try {
|
|
27
|
+
const validated = translationSchema.parse(translation);
|
|
28
|
+
return validated;
|
|
29
|
+
} catch (error) {
|
|
30
|
+
if (error instanceof z.ZodError) {
|
|
31
|
+
const field = error.issues[0]?.path.join('.');
|
|
32
|
+
const message = error.issues[0]?.message || 'Validation failed';
|
|
33
|
+
throw new TranslationValidationError(message, field);
|
|
34
|
+
}
|
|
35
|
+
throw error;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
export const parseTranslationInput = (translation)=>{
|
|
39
|
+
try {
|
|
40
|
+
const validated = translationInputSchema.parse(translation);
|
|
41
|
+
return validated;
|
|
42
|
+
} catch (error) {
|
|
43
|
+
if (error instanceof z.ZodError) {
|
|
44
|
+
const field = error.issues[0]?.path.join('.');
|
|
45
|
+
const message = error.issues[0]?.message || 'Validation failed';
|
|
46
|
+
throw new TranslationValidationError(message, field);
|
|
47
|
+
}
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
export const validateTranslationInput = (input)=>{
|
|
52
|
+
return parseTranslationInput(input);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvdHJhbnNsYXRpb25BZGFwdGVyL3RyYW5zbGF0aW9uQWRhcHRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbGF0aW9uVHlwZSB7XG4gIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuICByZWFkb25seSBsb2NhbGU6IHN0cmluZztcbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogc3RyaW5nO1xuICByZWFkb25seSB0aW1lc3RhbXA/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRpb25JbnB1dFR5cGUge1xuICByZWFkb25seSBrZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0aW9uVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdUcmFuc2xhdGlvblZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgdHJhbnNsYXRpb25TY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGtleTogei5zdHJpbmcoKS5taW4oMSwgJ0tleSBpcyByZXF1aXJlZCcpLFxuICBsb2NhbGU6IHouc3RyaW5nKCkubWluKDIsICdMb2NhbGUgaXMgcmVxdWlyZWQnKS5tYXgoNSwgJ0xvY2FsZSBtdXN0IGJlIGxlc3MgdGhhbiA1IGNoYXJhY3RlcnMnKSxcbiAgdmFsdWU6IHouc3RyaW5nKCkubWluKDEsICdWYWx1ZSBpcyByZXF1aXJlZCcpLFxuICBuYW1lc3BhY2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZXN0YW1wOiB6Lm51bWJlcigpLm9wdGlvbmFsKClcbn0pO1xuXG5jb25zdCB0cmFuc2xhdGlvbklucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBrZXk6IHouc3RyaW5nKCkubWluKDEsICdLZXkgaXMgcmVxdWlyZWQnKSxcbiAgbG9jYWxlOiB6LnN0cmluZygpLm1pbigyLCAnTG9jYWxlIGlzIHJlcXVpcmVkJykubWF4KDUsICdMb2NhbGUgbXVzdCBiZSBsZXNzIHRoYW4gNSBjaGFyYWN0ZXJzJyksXG4gIHZhbHVlOiB6LnN0cmluZygpLm1pbigxLCAnVmFsdWUgaXMgcmVxdWlyZWQnKSxcbiAgbmFtZXNwYWNlOiB6LnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VUcmFuc2xhdGlvbiA9ICh0cmFuc2xhdGlvbjogVHJhbnNsYXRpb25UeXBlKTogVHJhbnNsYXRpb25UeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB0cmFuc2xhdGlvblNjaGVtYS5wYXJzZSh0cmFuc2xhdGlvbik7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBUcmFuc2xhdGlvblR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBpZihlcnJvciBpbnN0YW5jZW9mIHouWm9kRXJyb3IpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZXJyb3IuaXNzdWVzWzBdPy5wYXRoLmpvaW4oJy4nKTtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvci5pc3N1ZXNbMF0/Lm1lc3NhZ2UgfHwgJ1ZhbGlkYXRpb24gZmFpbGVkJztcbiAgICAgIHRocm93IG5ldyBUcmFuc2xhdGlvblZhbGlkYXRpb25FcnJvcihtZXNzYWdlLCBmaWVsZCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VUcmFuc2xhdGlvbklucHV0ID0gKHRyYW5zbGF0aW9uOiBUcmFuc2xhdGlvbklucHV0VHlwZSk6IFRyYW5zbGF0aW9uSW5wdXRUeXBlID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSB0cmFuc2xhdGlvbklucHV0U2NoZW1hLnBhcnNlKHRyYW5zbGF0aW9uKTtcbiAgICByZXR1cm4gdmFsaWRhdGVkIGFzIFRyYW5zbGF0aW9uSW5wdXRUeXBlO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGVycm9yLmlzc3Vlc1swXT8ucGF0aC5qb2luKCcuJyk7XG4gICAgICBjb25zdCBtZXNzYWdlID0gZXJyb3IuaXNzdWVzWzBdPy5tZXNzYWdlIHx8ICdWYWxpZGF0aW9uIGZhaWxlZCc7XG4gICAgICB0aHJvdyBuZXcgVHJhbnNsYXRpb25WYWxpZGF0aW9uRXJyb3IobWVzc2FnZSwgZmllbGQpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVHJhbnNsYXRpb25JbnB1dCA9IChpbnB1dDogdW5rbm93bik6IFRyYW5zbGF0aW9uSW5wdXRUeXBlID0+IHtcbiAgcmV0dXJuIHBhcnNlVHJhbnNsYXRpb25JbnB1dChpbnB1dCBhcyBUcmFuc2xhdGlvbklucHV0VHlwZSk7XG59OyJdLCJuYW1lcyI6WyJ6IiwiVHJhbnNsYXRpb25WYWxpZGF0aW9uRXJyb3IiLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWVsZCIsIm5hbWUiLCJ0cmFuc2xhdGlvblNjaGVtYSIsIm9iamVjdCIsImtleSIsInN0cmluZyIsIm1pbiIsImxvY2FsZSIsIm1heCIsInZhbHVlIiwibmFtZXNwYWNlIiwib3B0aW9uYWwiLCJ0aW1lc3RhbXAiLCJudW1iZXIiLCJ0cmFuc2xhdGlvbklucHV0U2NoZW1hIiwicGFyc2VUcmFuc2xhdGlvbiIsInRyYW5zbGF0aW9uIiwidmFsaWRhdGVkIiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiaXNzdWVzIiwicGF0aCIsImpvaW4iLCJwYXJzZVRyYW5zbGF0aW9uSW5wdXQiLCJ2YWxpZGF0ZVRyYW5zbGF0aW9uSW5wdXQiLCJpbnB1dCJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsQ0FBQyxRQUFPLE1BQU07QUFpQnRCLE9BQU8sTUFBTUMsbUNBQW1DQzs7SUFDOUMsWUFBWUMsT0FBZSxFQUFFLEFBQU9DLEtBQWMsQ0FBRTtRQUNsRCxLQUFLLENBQUNELGVBRDRCQyxRQUFBQTtRQUVsQyxJQUFJLENBQUNDLElBQUksR0FBRztJQUNkO0FBQ0Y7QUFFQSxNQUFNQyxvQkFBb0JOLEVBQUVPLE1BQU0sQ0FBQztJQUNqQ0MsS0FBS1IsRUFBRVMsTUFBTSxHQUFHQyxHQUFHLENBQUMsR0FBRztJQUN2QkMsUUFBUVgsRUFBRVMsTUFBTSxHQUFHQyxHQUFHLENBQUMsR0FBRyxzQkFBc0JFLEdBQUcsQ0FBQyxHQUFHO0lBQ3ZEQyxPQUFPYixFQUFFUyxNQUFNLEdBQUdDLEdBQUcsQ0FBQyxHQUFHO0lBQ3pCSSxXQUFXZCxFQUFFUyxNQUFNLEdBQUdNLFFBQVE7SUFDOUJDLFdBQVdoQixFQUFFaUIsTUFBTSxHQUFHRixRQUFRO0FBQ2hDO0FBRUEsTUFBTUcseUJBQXlCbEIsRUFBRU8sTUFBTSxDQUFDO0lBQ3RDQyxLQUFLUixFQUFFUyxNQUFNLEdBQUdDLEdBQUcsQ0FBQyxHQUFHO0lBQ3ZCQyxRQUFRWCxFQUFFUyxNQUFNLEdBQUdDLEdBQUcsQ0FBQyxHQUFHLHNCQUFzQkUsR0FBRyxDQUFDLEdBQUc7SUFDdkRDLE9BQU9iLEVBQUVTLE1BQU0sR0FBR0MsR0FBRyxDQUFDLEdBQUc7SUFDekJJLFdBQVdkLEVBQUVTLE1BQU0sR0FBR00sUUFBUTtBQUNoQztBQUVBLE9BQU8sTUFBTUksbUJBQW1CLENBQUNDO0lBQy9CLElBQUk7UUFDRixNQUFNQyxZQUFZZixrQkFBa0JnQixLQUFLLENBQUNGO1FBQzFDLE9BQU9DO0lBQ1QsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCdkIsRUFBRXdCLFFBQVEsRUFBRTtZQUM5QixNQUFNcEIsUUFBUW1CLE1BQU1FLE1BQU0sQ0FBQyxFQUFFLEVBQUVDLEtBQUtDLEtBQUs7WUFDekMsTUFBTXhCLFVBQVVvQixNQUFNRSxNQUFNLENBQUMsRUFBRSxFQUFFdEIsV0FBVztZQUM1QyxNQUFNLElBQUlGLDJCQUEyQkUsU0FBU0M7UUFDaEQ7UUFDQSxNQUFNbUI7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1LLHdCQUF3QixDQUFDUjtJQUNwQyxJQUFJO1FBQ0YsTUFBTUMsWUFBWUgsdUJBQXVCSSxLQUFLLENBQUNGO1FBQy9DLE9BQU9DO0lBQ1QsRUFBRSxPQUFNRSxPQUFPO1FBQ2IsSUFBR0EsaUJBQWlCdkIsRUFBRXdCLFFBQVEsRUFBRTtZQUM5QixNQUFNcEIsUUFBUW1CLE1BQU1FLE1BQU0sQ0FBQyxFQUFFLEVBQUVDLEtBQUtDLEtBQUs7WUFDekMsTUFBTXhCLFVBQVVvQixNQUFNRSxNQUFNLENBQUMsRUFBRSxFQUFFdEIsV0FBVztZQUM1QyxNQUFNLElBQUlGLDJCQUEyQkUsU0FBU0M7UUFDaEQ7UUFDQSxNQUFNbUI7SUFDUjtBQUNGLEVBQUU7QUFFRixPQUFPLE1BQU1NLDJCQUEyQixDQUFDQztJQUN2QyxPQUFPRixzQkFBc0JFO0FBQy9CLEVBQUUifQ==
|
|
@@ -1,34 +1,46 @@
|
|
|
1
1
|
export interface User {
|
|
2
|
+
[key: string]: any;
|
|
2
3
|
_id?: string;
|
|
3
4
|
_key?: string;
|
|
4
5
|
active?: boolean;
|
|
6
|
+
added?: number;
|
|
5
7
|
bankId?: string;
|
|
6
8
|
city?: string;
|
|
7
9
|
country?: string;
|
|
8
10
|
currency?: string;
|
|
9
11
|
deviceToken?: string;
|
|
10
12
|
dob?: number;
|
|
13
|
+
birthdate?: number;
|
|
11
14
|
email?: string;
|
|
12
|
-
|
|
15
|
+
firstName?: string;
|
|
13
16
|
gender?: string;
|
|
14
17
|
id?: string;
|
|
15
18
|
imageId?: string;
|
|
16
|
-
|
|
19
|
+
lastName?: string;
|
|
17
20
|
lastActive?: number;
|
|
18
21
|
locale?: string;
|
|
19
22
|
mailingList?: boolean;
|
|
23
|
+
modified?: number;
|
|
20
24
|
name?: string;
|
|
21
25
|
password?: string;
|
|
22
26
|
phone?: string;
|
|
27
|
+
planExpires?: number;
|
|
28
|
+
planId?: string;
|
|
29
|
+
planStatus?: string;
|
|
30
|
+
planSubscriptionId?: string;
|
|
23
31
|
salt?: string;
|
|
24
32
|
state?: string;
|
|
25
33
|
street1?: string;
|
|
26
34
|
street2?: string;
|
|
27
35
|
stripeAccountId?: string;
|
|
36
|
+
stripeCardBrand?: string;
|
|
37
|
+
stripeCardId?: string;
|
|
38
|
+
stripeCardLast4?: string;
|
|
28
39
|
stripeCustomerId?: string;
|
|
29
|
-
tags?: any[];
|
|
30
40
|
timezone?: string;
|
|
41
|
+
thumbUrl?: string;
|
|
31
42
|
type?: string;
|
|
43
|
+
updated?: number;
|
|
32
44
|
userAccess?: number;
|
|
33
45
|
userId?: string;
|
|
34
46
|
username?: string;
|
|
@@ -39,11 +51,10 @@ export interface User {
|
|
|
39
51
|
verifiedPhoneExpires?: number;
|
|
40
52
|
verifiedSmsCode?: number;
|
|
41
53
|
zip?: string;
|
|
42
|
-
[key: string]: any;
|
|
43
54
|
}
|
|
44
55
|
export declare class UserValidationError extends Error {
|
|
45
|
-
field?: string
|
|
46
|
-
constructor(message: string, field?: string
|
|
56
|
+
field?: string;
|
|
57
|
+
constructor(message: string, field?: string);
|
|
47
58
|
}
|
|
48
59
|
declare const userCache: Map<string, User>;
|
|
49
60
|
export declare const validateUserInput: (user: unknown) => User;
|
|
@@ -53,3 +64,4 @@ export declare const clearUserCache: () => void;
|
|
|
53
64
|
export declare const getUserCacheSize: () => number;
|
|
54
65
|
export { userCache };
|
|
55
66
|
export declare const parseUserLegacy: (user: User) => User;
|
|
67
|
+
//# sourceMappingURL=userAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"userAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/userAdapter/userAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,302 @@
|
|
|
1
|
-
import{parseArangoId
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2FkYXB0ZXJzL3VzZXJBZGFwdGVyL3VzZXJBZGFwdGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge3BhcnNlQXJhbmdvSWQsIHBhcnNlQ2hhciwgcGFyc2VFbWFpbCwgcGFyc2VJZCwgcGFyc2VOdW0sIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJ9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge3p9IGZyb20gJ3pvZCc7XG5cbmltcG9ydCB7cGFyc2VEb2N1bWVudCwgcmVtb3ZlRW1wdHlLZXlzfSBmcm9tICcuLi9hcmFuZ29BZGFwdGVyL2FyYW5nb0FkYXB0ZXInO1xuaW1wb3J0IHtwYXJzZVJlYWt0b3JEYXRlLCBwYXJzZVJlYWt0b3JJdGVtSWQsIHBhcnNlUmVha3Rvck5hbWUsIHBhcnNlUmVha3RvclR5cGV9IGZyb20gJy4uL3JlYWt0b3JBZGFwdGVyL3JlYWt0b3JBZGFwdGVyJztcbmltcG9ydCB7cGFyc2VUYWd9IGZyb20gJy4uL3RhZ0FkYXB0ZXIvdGFnQWRhcHRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gIF9pZD86IHN0cmluZztcbiAgX2tleT86IHN0cmluZztcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgYmFua0lkPzogc3RyaW5nO1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgZGV2aWNlVG9rZW4/OiBzdHJpbmc7XG4gIGRvYj86IG51bWJlcjtcbiAgZW1haWw/OiBzdHJpbmc7XG4gIGZpcnN0Pzogc3RyaW5nO1xuICBnZW5kZXI/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbWFnZUlkPzogc3RyaW5nO1xuICBsYXN0Pzogc3RyaW5nO1xuICBsYXN0QWN0aXZlPzogbnVtYmVyO1xuICBsb2NhbGU/OiBzdHJpbmc7XG4gIG1haWxpbmdMaXN0PzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgcGFzc3dvcmQ/OiBzdHJpbmc7XG4gIHBob25lPzogc3RyaW5nO1xuICBzYWx0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgc3RyZWV0MT86IHN0cmluZztcbiAgc3RyZWV0Mj86IHN0cmluZztcbiAgc3RyaXBlQWNjb3VudElkPzogc3RyaW5nO1xuICBzdHJpcGVDdXN0b21lcklkPzogc3RyaW5nO1xuICB0YWdzPzogYW55W107XG4gIHRpbWV6b25lPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB1c2VyQWNjZXNzPzogbnVtYmVyO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB2ZXJpZmllZEVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRFbWFpbENvZGU/OiBudW1iZXI7XG4gIHZlcmlmaWVkRW1haWxFeHBpcmVzPzogbnVtYmVyO1xuICB2ZXJpZmllZFBob25lPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRQaG9uZUV4cGlyZXM/OiBudW1iZXI7XG4gIHZlcmlmaWVkU21zQ29kZT86IG51bWJlcjtcbiAgemlwPzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbmV4cG9ydCBjbGFzcyBVc2VyVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlOiBzdHJpbmcsIHB1YmxpYyBmaWVsZD86IHN0cmluZykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9ICdVc2VyVmFsaWRhdGlvbkVycm9yJztcbiAgfVxufVxuXG5jb25zdCBVc2VySW5wdXRTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIF9pZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBfa2V5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGFjdGl2ZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgYmFua0lkOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGNpdHk6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgY291bnRyeTogei5zdHJpbmcoKS5sZW5ndGgoMikub3B0aW9uYWwoKSxcbiAgY3VycmVuY3k6IHouc3RyaW5nKCkubGVuZ3RoKDMpLm9wdGlvbmFsKCksXG4gIGRldmljZVRva2VuOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGRvYjogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBlbWFpbDogei5zdHJpbmcoKS5lbWFpbCgpLm9wdGlvbmFsKCksXG4gIGZpcnN0OiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGdlbmRlcjogei5zdHJpbmcoKS5sZW5ndGgoMSkub3B0aW9uYWwoKSxcbiAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsYXN0OiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGxhc3RBY3RpdmU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgbG9jYWxlOiB6LnN0cmluZygpLm1heCg1KS5vcHRpb25hbCgpLFxuICBtYWlsaW5nTGlzdDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgbmFtZTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBwYXNzd29yZDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBwaG9uZTogei5zdHJpbmcoKS5tYXgoMjApLm9wdGlvbmFsKCksXG4gIHNhbHQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgc3RhdGU6IHouc3RyaW5nKCkubGVuZ3RoKDIpLm9wdGlvbmFsKCksXG4gIHN0cmVldDE6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgc3RyZWV0Mjogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBzdHJpcGVBY2NvdW50SWQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgc3RyaXBlQ3VzdG9tZXJJZDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICB0YWdzOiB6LmFycmF5KHouYW55KCkpLm9wdGlvbmFsKCksXG4gIHRpbWV6b25lOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHR5cGU6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgdXNlckFjY2Vzczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB1c2VySWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlcm5hbWU6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbENvZGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRQaG9uZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRQaG9uZUV4cGlyZXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRTbXNDb2RlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHppcDogei5zdHJpbmcoKS5tYXgoMjApLm9wdGlvbmFsKClcbn0pLnBhc3N0aHJvdWdoKCk7XG5cbmNvbnN0IHZhbGlkYXRlUGhvbmUgPSAocGhvbmU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZighcGhvbmUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGNsZWFuZWQgPSBwaG9uZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICBpZihjbGVhbmVkLmxlbmd0aCA8IDEwIHx8IGNsZWFuZWQubGVuZ3RoID4gMTUpIHtcbiAgICB0aHJvdyBuZXcgVXNlclZhbGlkYXRpb25FcnJvcignSW52YWxpZCBwaG9uZSBudW1iZXIgZm9ybWF0JywgJ3Bob25lJyk7XG4gIH1cbiAgcmV0dXJuIGArJHtjbGVhbmVkfWA7XG59O1xuXG5jb25zdCB2YWxpZGF0ZUNvdW50cnkgPSAoY291bnRyeT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFjb3VudHJ5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB1cHBlciA9IGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgaWYoIS9eW0EtWl17Mn0kLy50ZXN0KHVwcGVyKSkge1xuICAgIHRocm93IG5ldyBVc2VyVmFsaWRhdGlvbkVycm9yKCdDb3VudHJ5IG11c3QgYmUgYSAyLWxldHRlciBJU08gY29kZScsICdjb3VudHJ5Jyk7XG4gIH1cbiAgcmV0dXJuIHVwcGVyO1xufTtcblxuY29uc3QgdmFsaWRhdGVTdGF0ZSA9IChzdGF0ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdXBwZXIgPSBzdGF0ZS50b1VwcGVyQ2FzZSgpO1xuICBpZighL15bQS1aXXsyfSQvLnRlc3QodXBwZXIpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoJ1N0YXRlIG11c3QgYmUgYSAyLWxldHRlciBjb2RlJywgJ3N0YXRlJyk7XG4gIH1cbiAgcmV0dXJuIHVwcGVyO1xufTtcblxuY29uc3QgdmFsaWRhdGVHZW5kZXIgPSAoZ2VuZGVyPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYoIWdlbmRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdXBwZXIgPSBnZW5kZXIudG9VcHBlckNhc2UoKTtcbiAgaWYoIS9eW01GXSQvLnRlc3QodXBwZXIpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoJ0dlbmRlciBtdXN0IGJlIE0gb3IgRicsICdnZW5kZXInKTtcbiAgfVxuICByZXR1cm4gdXBwZXI7XG59O1xuXG5jb25zdCB1c2VyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVXNlcj4oKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVXNlcklucHV0ID0gKHVzZXI6IHVua25vd24pOiBVc2VyID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBVc2VySW5wdXRTY2hlbWEucGFyc2UodXNlcik7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBVc2VyO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoYFVzZXIgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VXNlck91dHB1dCA9ICh1c2VyOiBVc2VyKTogVXNlciA9PiB7XG4gIGNvbnN0IHtwYXNzd29yZCwgc2FsdCwgdmVyaWZpZWRFbWFpbENvZGUsIHZlcmlmaWVkU21zQ29kZSwgLi4uc2FmZVVzZXJ9ID0gdXNlcjtcbiAgcmV0dXJuIHNhZmVVc2VyO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVXNlciA9ICh1c2VyOiBVc2VyKTogVXNlciA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGVyZm9ybVVzZXJUcmFuc2Zvcm1hdGlvbih1c2VyKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBVc2VyVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoYFVzZXIgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Vc2VyVHJhbnNmb3JtYXRpb24gPSAodXNlcjogVXNlcik6IFVzZXIgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgYWN0aXZlLFxuICAgIGJhbmtJZCxcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgY3VycmVuY3ksXG4gICAgZGV2aWNlVG9rZW4sXG4gICAgZG9iLFxuICAgIGVtYWlsLFxuICAgIGZpcnN0LFxuICAgIGdlbmRlcixcbiAgICBpZCxcbiAgICBpbWFnZUlkLFxuICAgIGxhc3QsXG4gICAgbGFzdEFjdGl2ZSxcbiAgICBsb2NhbGUsXG4gICAgbWFpbGluZ0xpc3QsXG4gICAgbmFtZSxcbiAgICBwYXNzd29yZCxcbiAgICBwaG9uZSxcbiAgICBzYWx0LFxuICAgIHN0YXRlLFxuICAgIHN0cmVldDEsXG4gICAgc3RyZWV0MixcbiAgICBzdHJpcGVBY2NvdW50SWQsXG4gICAgc3RyaXBlQ3VzdG9tZXJJZCxcbiAgICB0YWdzLFxuICAgIHRpbWV6b25lLFxuICAgIHR5cGUsXG4gICAgdXNlckFjY2VzcyxcbiAgICB1c2VySWQsXG4gICAgdXNlcm5hbWUsXG4gICAgdmVyaWZpZWRFbWFpbCxcbiAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICB2ZXJpZmllZEVtYWlsRXhwaXJlcyxcbiAgICB2ZXJpZmllZFBob25lLFxuICAgIHZlcmlmaWVkUGhvbmVFeHBpcmVzLFxuICAgIHZlcmlmaWVkU21zQ29kZSxcbiAgICB6aXBcbiAgfSA9IHVzZXI7XG4gIGNvbnN0IHRyYW5zZm9ybWVkID0ge1xuICAgIC4uLnBhcnNlRG9jdW1lbnQodXNlciksXG4gICAgLi4uKChfaWQgfHwgaWQgfHwgX2tleSB8fCB1c2VySWQpICYmIHtpZDogcGFyc2VBcmFuZ29JZChfaWQgfHwgaWQgfHwgYHVzZXJzLyR7X2tleSB8fCB1c2VySWR9YCl9KSxcbiAgICAuLi4oKF9rZXkgfHwgdXNlcklkKSAmJiB7dXNlcklkOiBwYXJzZUlkKF9rZXkgfHwgdXNlcklkIHx8ICcnKX0pLFxuICAgIC4uLihhY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7YWN0aXZlOiAhIWFjdGl2ZX0pLFxuICAgIC4uLihiYW5rSWQgJiYge2JhbmtJZDogcGFyc2VWYXJDaGFyKGJhbmtJZCwgMTYwKX0pLFxuICAgIC4uLihjaXR5ICYmIHtjaXR5OiBwYXJzZVZhckNoYXIoY2l0eSwgMTYwKX0pLFxuICAgIC4uLihjb3VudHJ5ICYmIHtjb3VudHJ5OiB2YWxpZGF0ZUNvdW50cnkoY291bnRyeSl9KSxcbiAgICAuLi4oY3VycmVuY3kgJiYge2N1cnJlbmN5OiBwYXJzZUNoYXIoY3VycmVuY3ksIDMpLnRvVXBwZXJDYXNlKCl9KSxcbiAgICAuLi4oZGV2aWNlVG9rZW4gJiYge2RldmljZVRva2VuOiBwYXJzZVZhckNoYXIoZGV2aWNlVG9rZW4sIDE2MCl9KSxcbiAgICAuLi4oZG9iICE9PSB1bmRlZmluZWQgJiYge2RvYjogcGFyc2VSZWFrdG9yRGF0ZShkb2IpfSksXG4gICAgLi4uKGVtYWlsICYmIHtlbWFpbDogcGFyc2VFbWFpbChlbWFpbCl9KSxcbiAgICAuLi4oZmlyc3QgJiYge2ZpcnN0OiBwYXJzZVZhckNoYXIoZmlyc3QsIDE2MCl9KSxcbiAgICAuLi4oZ2VuZGVyICYmIHtnZW5kZXI6IHZhbGlkYXRlR2VuZGVyKGdlbmRlcil9KSxcbiAgICAuLi4oaW1hZ2VJZCAmJiB7aW1hZ2VJZDogcGFyc2VSZWFrdG9ySXRlbUlkKGltYWdlSWQpfSksXG4gICAgLi4uKGxhc3QgJiYge2xhc3Q6IHBhcnNlVmFyQ2hhcihsYXN0LCAxNjApfSksXG4gICAgLi4uKGxhc3RBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7bGFzdEFjdGl2ZTogcGFyc2VSZWFrdG9yRGF0ZShsYXN0QWN0aXZlKX0pLFxuICAgIC4uLihsb2NhbGUgJiYge2xvY2FsZTogcGFyc2VTdHJpbmcobG9jYWxlLCA1KX0pLFxuICAgIC4uLihtYWlsaW5nTGlzdCAhPT0gdW5kZWZpbmVkICYmIHttYWlsaW5nTGlzdDogISFtYWlsaW5nTGlzdH0pLFxuICAgIC4uLihuYW1lICYmIHtuYW1lOiBwYXJzZVJlYWt0b3JOYW1lKG5hbWUpfSksXG4gICAgLi4uKHBhc3N3b3JkICYmIHtwYXNzd29yZDogcGFyc2VWYXJDaGFyKHBhc3N3b3JkLCAxNjApfSksXG4gICAgLi4uKHBob25lICYmIHtwaG9uZTogdmFsaWRhdGVQaG9uZShwaG9uZSl9KSxcbiAgICAuLi4oc2FsdCAmJiB7c2FsdDogcGFyc2VWYXJDaGFyKHNhbHQsIDE2MCl9KSxcbiAgICAuLi4oc3RhdGUgJiYge3N0YXRlOiB2YWxpZGF0ZVN0YXRlKHN0YXRlKX0pLFxuICAgIC4uLihzdHJlZXQxICYmIHtzdHJlZXQxOiBwYXJzZVZhckNoYXIoc3RyZWV0MSwgMTYwKX0pLFxuICAgIC4uLihzdHJlZXQyICYmIHtzdHJlZXQyOiBwYXJzZVZhckNoYXIoc3RyZWV0MiwgMTYwKX0pLFxuICAgIC4uLihzdHJpcGVBY2NvdW50SWQgJiYge3N0cmlwZUFjY291bnRJZDogcGFyc2VWYXJDaGFyKHN0cmlwZUFjY291bnRJZCwgMTYwKX0pLFxuICAgIC4uLihzdHJpcGVDdXN0b21lcklkICYmIHtzdHJpcGVDdXN0b21lcklkOiBwYXJzZVZhckNoYXIoc3RyaXBlQ3VzdG9tZXJJZCwgMTYwKX0pLFxuICAgIC4uLih0YWdzPy5sZW5ndGggJiYge3RhZ3M6IHRhZ3MuZmlsdGVyKCh0YWcpID0+ICEhdGFnKS5tYXAoKHRhZykgPT4gcGFyc2VUYWcodGFnKSl9KSxcbiAgICAuLi4odGltZXpvbmUgJiYge3RpbWV6b25lOiBwYXJzZVN0cmluZyh0aW1lem9uZSwgMTYwKX0pLFxuICAgIC4uLih0eXBlICYmIHt0eXBlOiBwYXJzZVJlYWt0b3JUeXBlKHR5cGUpfSksXG4gICAgLi4uKHVzZXJBY2Nlc3MgIT09IHVuZGVmaW5lZCAmJiB7dXNlckFjY2VzczogdXNlckFjY2VzcyA/IHBhcnNlTnVtKHVzZXJBY2Nlc3MpIDogMH0pLFxuICAgIC4uLih1c2VybmFtZSAmJiB7dXNlcm5hbWU6IHBhcnNlVmFyQ2hhcih1c2VybmFtZSwgMTYwKX0pLFxuICAgIC4uLih2ZXJpZmllZEVtYWlsICE9PSB1bmRlZmluZWQgJiYge3ZlcmlmaWVkRW1haWw6ICEhdmVyaWZpZWRFbWFpbH0pLFxuICAgIC4uLih2ZXJpZmllZEVtYWlsQ29kZSAhPT0gdW5kZWZpbmVkICYmIHt2ZXJpZmllZEVtYWlsQ29kZTogcGFyc2VOdW0odmVyaWZpZWRFbWFpbENvZGUsIDEwKX0pLFxuICAgIC4uLih2ZXJpZmllZEVtYWlsRXhwaXJlcyAhPT0gdW5kZWZpbmVkICYmIHt2ZXJpZmllZEVtYWlsRXhwaXJlczogcGFyc2VOdW0odmVyaWZpZWRFbWFpbEV4cGlyZXMsIDEwKX0pLFxuICAgIC4uLih2ZXJpZmllZFBob25lICE9PSB1bmRlZmluZWQgJiYge3ZlcmlmaWVkUGhvbmU6ICEhdmVyaWZpZWRQaG9uZX0pLFxuICAgIC4uLih2ZXJpZmllZFBob25lRXhwaXJlcyAhPT0gdW5kZWZpbmVkICYmIHt2ZXJpZmllZFBob25lRXhwaXJlczogcGFyc2VOdW0odmVyaWZpZWRQaG9uZUV4cGlyZXMsIDEwKX0pLFxuICAgIC4uLih2ZXJpZmllZFNtc0NvZGUgIT09IHVuZGVmaW5lZCAmJiB7dmVyaWZpZWRTbXNDb2RlOiBwYXJzZU51bSh2ZXJpZmllZFNtc0NvZGUsIDEwKX0pLFxuICAgIC4uLih6aXAgJiYge3ppcDogcGFyc2VWYXJDaGFyKHppcCwgMjApfSlcbiAgfTtcblxuICBjb25zdCByZXN1bHQgPSByZW1vdmVFbXB0eUtleXModHJhbnNmb3JtZWQpO1xuXG4gIGlmKHVzZXIuX2lkKSB7XG4gICAgcmVzdWx0LmlkID0gdXNlci5faWQ7XG4gICAgcmVzdWx0Ll9pZCA9IHVzZXIuX2lkO1xuICB9IGVsc2UgaWYodXNlci5pZCAmJiAhcmVzdWx0LmlkKSB7XG4gICAgcmVzdWx0LmlkID0gdXNlci5pZDtcbiAgICByZXN1bHQuX2lkID0gdXNlci5pZDtcbiAgfVxuXG4gIGlmKHVzZXIuX2tleSkge1xuICAgIHJlc3VsdC51c2VySWQgPSB1c2VyLl9rZXk7XG4gICAgcmVzdWx0Ll9rZXkgPSB1c2VyLl9rZXk7XG4gIH0gZWxzZSBpZih1c2VyLnVzZXJJZCAmJiAhcmVzdWx0LnVzZXJJZCkge1xuICAgIHJlc3VsdC51c2VySWQgPSB1c2VyLnVzZXJJZDtcbiAgICByZXN1bHQuX2tleSA9IHVzZXIudXNlcklkO1xuICB9XG5cbiAgaWYodXNlci51c2VySWQgJiYgIXJlc3VsdC5fa2V5KSB7XG4gICAgcmVzdWx0Ll9rZXkgPSB1c2VyLnVzZXJJZDtcbiAgfVxuXG4gIGlmKHVzZXIuaWQgJiYgIXJlc3VsdC5faWQpIHtcbiAgICByZXN1bHQuX2lkID0gdXNlci5pZDtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJVc2VyQ2FjaGUgPSAoKTogdm9pZCA9PiB7XG4gIHVzZXJDYWNoZS5jbGVhcigpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJDYWNoZVNpemUgPSAoKTogbnVtYmVyID0+IHVzZXJDYWNoZS5zaXplO1xuXG5leHBvcnQge3VzZXJDYWNoZX07XG5cbmV4cG9ydCBjb25zdCBwYXJzZVVzZXJMZWdhY3kgPSAodXNlcjogVXNlcik6IFVzZXIgPT4gcGFyc2VVc2VyKHVzZXIpOyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLE9BQVEsaUJBQUFBLEVBQWUsYUFBQUMsRUFBVyxjQUFBQyxFQUFZLFdBQUFDLEdBQVMsWUFBQUMsRUFBVSxlQUFBQyxFQUFhLGdCQUFBQyxNQUFtQixlQUNqRyxPQUFRLEtBQUFDLE1BQVEsTUFFaEIsT0FBUSxpQkFBQUMsR0FBZSxtQkFBQUMsT0FBc0IsaUNBQzdDLE9BQVEsb0JBQUFDLEVBQWtCLHNCQUFBQyxHQUFvQixvQkFBQUMsR0FBa0Isb0JBQUFDLE9BQXVC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QyxxQkFBc0JuRSxFQUFTbUUsRUFBc0IsRUFBRSxDQUFDLEVBQ25HLEdBQUlDLElBQWtCLFFBQWEsQ0FBQyxjQUFlLENBQUMsQ0FBQ0EsQ0FBYSxFQUNsRSxHQUFJQyxJQUF5QixRQUFhLENBQUMscUJBQXNCckUsRUFBU3FFLEVBQXNCLEVBQUUsQ0FBQyxFQUNuRyxHQUFJbEMsSUFBb0IsUUFBYSxDQUFDLGdCQUFpQm5DLEVBQVNtQyxFQUFpQixFQUFFLENBQUMsRUFDcEYsR0FBSW1DLEdBQU8sQ0FBQyxJQUFLcEUsRUFBYW9FLEVBQUssRUFBRSxDQUFDLENBQ3hDLEVBRU1HLEVBQVNwRSxHQUFnQmtFLENBQVcsRUFFMUMsT0FBRzVDLEVBQUssS0FDTjhDLEVBQU8sR0FBSzlDLEVBQUssSUFDakI4QyxFQUFPLElBQU05QyxFQUFLLEtBQ1ZBLEVBQUssSUFBTSxDQUFDOEMsRUFBTyxLQUMzQkEsRUFBTyxHQUFLOUMsRUFBSyxHQUNqQjhDLEVBQU8sSUFBTTlDLEVBQUssSUFHakJBLEVBQUssTUFDTjhDLEVBQU8sT0FBUzlDLEVBQUssS0FDckI4QyxFQUFPLEtBQU85QyxFQUFLLE1BQ1hBLEVBQUssUUFBVSxDQUFDOEMsRUFBTyxTQUMvQkEsRUFBTyxPQUFTOUMsRUFBSyxPQUNyQjhDLEVBQU8sS0FBTzlDLEVBQUssUUFHbEJBLEVBQUssUUFBVSxDQUFDOEMsRUFBTyxPQUN4QkEsRUFBTyxLQUFPOUMsRUFBSyxRQUdsQkEsRUFBSyxJQUFNLENBQUM4QyxFQUFPLE1BQ3BCQSxFQUFPLElBQU05QyxFQUFLLElBR2I4QyxDQUNULEVBRWFDLEdBQWlCLElBQVksQ0FDeENqRCxFQUFVLE1BQU0sQ0FDbEIsRUFFYWtELEdBQW1CLElBQWNsRCxFQUFVLEtBSWpELE1BQU1tRCxHQUFtQkMsR0FBcUJDLEdBQVVELENBQUkiLAogICJuYW1lcyI6IFsicGFyc2VBcmFuZ29JZCIsICJwYXJzZUNoYXIiLCAicGFyc2VFbWFpbCIsICJwYXJzZUlkIiwgInBhcnNlTnVtIiwgInBhcnNlU3RyaW5nIiwgInBhcnNlVmFyQ2hhciIsICJ6IiwgInBhcnNlRG9jdW1lbnQiLCAicmVtb3ZlRW1wdHlLZXlzIiwgInBhcnNlUmVha3RvckRhdGUiLCAicGFyc2VSZWFrdG9ySXRlbUlkIiwgInBhcnNlUmVha3Rvck5hbWUiLCAicGFyc2VSZWFrdG9yVHlwZSIsICJwYXJzZVRhZyIsICJVc2VyVmFsaWRhdGlvbkVycm9yIiwgIm1lc3NhZ2UiLCAiZmllbGQiLCAiVXNlcklucHV0U2NoZW1hIiwgInZhbGlkYXRlUGhvbmUiLCAicGhvbmUiLCAiY2xlYW5lZCIsICJ2YWxpZGF0ZUNvdW50cnkiLCAiY291bnRyeSIsICJ1cHBlciIsICJ2YWxpZGF0ZVN0YXRlIiwgInN0YXRlIiwgInZhbGlkYXRlR2VuZGVyIiwgImdlbmRlciIsICJ1c2VyQ2FjaGUiLCAidmFsaWRhdGVVc2VySW5wdXQiLCAidXNlciIsICJlcnJvciIsICJmaWVsZEVycm9ycyIsICJlIiwgImZvcm1hdFVzZXJPdXRwdXQiLCAicGFzc3dvcmQiLCAic2FsdCIsICJ2ZXJpZmllZEVtYWlsQ29kZSIsICJ2ZXJpZmllZFNtc0NvZGUiLCAic2FmZVVzZXIiLCAicGFyc2VVc2VyIiwgInBlcmZvcm1Vc2VyVHJhbnNmb3JtYXRpb24iLCAiX2lkIiwgIl9rZXkiLCAiYWN0aXZlIiwgImJhbmtJZCIsICJjaXR5IiwgImN1cnJlbmN5IiwgImRldmljZVRva2VuIiwgImRvYiIsICJlbWFpbCIsICJmaXJzdCIsICJpZCIsICJpbWFnZUlkIiwgImxhc3QiLCAibGFzdEFjdGl2ZSIsICJsb2NhbGUiLCAibWFpbGluZ0xpc3QiLCAibmFtZSIsICJzdHJlZXQxIiwgInN0cmVldDIiLCAic3RyaXBlQWNjb3VudElkIiwgInN0cmlwZUN1c3RvbWVySWQiLCAidGFncyIsICJ0aW1lem9uZSIsICJ0eXBlIiwgInVzZXJBY2Nlc3MiLCAidXNlcklkIiwgInVzZXJuYW1lIiwgInZlcmlmaWVkRW1haWwiLCAidmVyaWZpZWRFbWFpbEV4cGlyZXMiLCAidmVyaWZpZWRQaG9uZSIsICJ2ZXJpZmllZFBob25lRXhwaXJlcyIsICJ6aXAiLCAidHJhbnNmb3JtZWQiLCAidGFnIiwgInJlc3VsdCIsICJjbGVhclVzZXJDYWNoZSIsICJnZXRVc2VyQ2FjaGVTaXplIiwgInBhcnNlVXNlckxlZ2FjeSIsICJ1c2VyIiwgInBhcnNlVXNlciJdCn0K
|
|
1
|
+
import { parseArangoId, parseChar, parseEmail, parseId, parseNum, parseString, parseVarChar } from '@nlabs/utils';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { parseDocument, removeEmptyKeys } from '../arangoAdapter/arangoAdapter.js';
|
|
4
|
+
import { parseReaktorDate, parseReaktorItemId, parseReaktorName, parseReaktorType } from '../reaktorAdapter/reaktorAdapter.js';
|
|
5
|
+
export class UserValidationError extends Error {
|
|
6
|
+
field;
|
|
7
|
+
constructor(message, field){
|
|
8
|
+
super(message), this.field = field;
|
|
9
|
+
this.name = 'UserValidationError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const UserInputSchema = z.object({
|
|
13
|
+
_id: z.string().optional(),
|
|
14
|
+
_key: z.string().optional(),
|
|
15
|
+
active: z.boolean().optional(),
|
|
16
|
+
added: z.number().optional(),
|
|
17
|
+
bankId: z.string().max(160).optional(),
|
|
18
|
+
city: z.string().max(160).optional(),
|
|
19
|
+
country: z.string().length(2).optional(),
|
|
20
|
+
currency: z.string().length(3).optional(),
|
|
21
|
+
deviceToken: z.string().max(160).optional(),
|
|
22
|
+
dob: z.number().optional(),
|
|
23
|
+
birthdate: z.number().optional(),
|
|
24
|
+
email: z.email().optional(),
|
|
25
|
+
firstName: z.string().max(160).optional(),
|
|
26
|
+
gender: z.string().length(1).optional(),
|
|
27
|
+
id: z.string().optional(),
|
|
28
|
+
imageId: z.string().optional(),
|
|
29
|
+
lastName: z.string().max(160).optional(),
|
|
30
|
+
lastActive: z.number().optional(),
|
|
31
|
+
locale: z.string().max(5).optional(),
|
|
32
|
+
mailingList: z.boolean().optional(),
|
|
33
|
+
name: z.string().max(160).optional(),
|
|
34
|
+
password: z.string().max(160).optional(),
|
|
35
|
+
phone: z.string().max(20).optional(),
|
|
36
|
+
planExpires: z.number().optional(),
|
|
37
|
+
planId: z.string().max(160).optional(),
|
|
38
|
+
planStatus: z.string().max(160).optional(),
|
|
39
|
+
planSubscriptionId: z.string().max(160).optional(),
|
|
40
|
+
salt: z.string().max(160).optional(),
|
|
41
|
+
state: z.string().length(2).optional(),
|
|
42
|
+
street1: z.string().max(160).optional(),
|
|
43
|
+
street2: z.string().max(160).optional(),
|
|
44
|
+
stripeAccountId: z.string().max(160).optional(),
|
|
45
|
+
stripeCardBrand: z.string().max(160).optional(),
|
|
46
|
+
stripeCardId: z.string().max(160).optional(),
|
|
47
|
+
stripeCardLast4: z.string().max(4).optional(),
|
|
48
|
+
stripeCustomerId: z.string().max(160).optional(),
|
|
49
|
+
timezone: z.string().max(160).optional(),
|
|
50
|
+
type: z.string().max(160).optional(),
|
|
51
|
+
updated: z.number().optional(),
|
|
52
|
+
userAccess: z.number().optional(),
|
|
53
|
+
userId: z.string().optional(),
|
|
54
|
+
username: z.string().max(160).optional(),
|
|
55
|
+
verifiedEmail: z.boolean().optional(),
|
|
56
|
+
verifiedEmailCode: z.number().optional(),
|
|
57
|
+
verifiedEmailExpires: z.number().optional(),
|
|
58
|
+
verifiedPhone: z.boolean().optional(),
|
|
59
|
+
verifiedPhoneExpires: z.number().optional(),
|
|
60
|
+
verifiedSmsCode: z.number().optional(),
|
|
61
|
+
zip: z.string().max(20).optional()
|
|
62
|
+
}).loose();
|
|
63
|
+
const validatePhone = (phone)=>{
|
|
64
|
+
if (!phone) {
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
const cleaned = phone.replace(/\D/g, '');
|
|
68
|
+
if (cleaned.length < 10 || cleaned.length > 15) {
|
|
69
|
+
throw new UserValidationError('Invalid phone number format', 'phone');
|
|
70
|
+
}
|
|
71
|
+
return `+${cleaned}`;
|
|
72
|
+
};
|
|
73
|
+
const validateCountry = (country)=>{
|
|
74
|
+
if (!country) {
|
|
75
|
+
return undefined;
|
|
76
|
+
}
|
|
77
|
+
const upper = country.toUpperCase();
|
|
78
|
+
if (!/^[A-Z]{2}$/.test(upper)) {
|
|
79
|
+
throw new UserValidationError('Country must be a 2-letter ISO code', 'country');
|
|
80
|
+
}
|
|
81
|
+
return upper;
|
|
82
|
+
};
|
|
83
|
+
const validateState = (state)=>{
|
|
84
|
+
if (!state) {
|
|
85
|
+
return undefined;
|
|
86
|
+
}
|
|
87
|
+
const upper = state.toUpperCase();
|
|
88
|
+
if (!/^[A-Z]{2}$/.test(upper)) {
|
|
89
|
+
throw new UserValidationError('State must be a 2-letter code', 'state');
|
|
90
|
+
}
|
|
91
|
+
return upper;
|
|
92
|
+
};
|
|
93
|
+
const validateGender = (gender)=>{
|
|
94
|
+
if (!gender) {
|
|
95
|
+
return undefined;
|
|
96
|
+
}
|
|
97
|
+
const upper = gender.toUpperCase();
|
|
98
|
+
if (!/^[MF]$/.test(upper)) {
|
|
99
|
+
throw new UserValidationError('Gender must be M or F', 'gender');
|
|
100
|
+
}
|
|
101
|
+
return upper;
|
|
102
|
+
};
|
|
103
|
+
const userCache = new Map();
|
|
104
|
+
export const validateUserInput = (user)=>{
|
|
105
|
+
try {
|
|
106
|
+
const validated = UserInputSchema.parse(user);
|
|
107
|
+
return validated;
|
|
108
|
+
} catch (error) {
|
|
109
|
+
if (error instanceof z.ZodError) {
|
|
110
|
+
const fieldErrors = error.issues.map((e)=>`${e.path.join('.')}: ${e.message}`).join(', ');
|
|
111
|
+
throw new UserValidationError(`User validation failed: ${fieldErrors}`);
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
export const formatUserOutput = (user)=>{
|
|
117
|
+
const { password, salt, verifiedEmailCode, verifiedSmsCode, ...safeUser } = user;
|
|
118
|
+
return safeUser;
|
|
119
|
+
};
|
|
120
|
+
export const parseUser = (user)=>{
|
|
121
|
+
try {
|
|
122
|
+
const parsed = performUserTransformation(user);
|
|
123
|
+
return parsed;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
if (error instanceof UserValidationError) {
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
throw new UserValidationError(`User parsing failed: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
const performUserTransformation = (user)=>{
|
|
132
|
+
const { _id, _key, active, bankId, city, country, currency, deviceToken, dob, birthdate, email, firstName, gender, id, imageId, lastName, lastActive, locale, mailingList, name, password, phone, planExpires, planId, planStatus, planSubscriptionId, salt, state, street1, street2, stripeAccountId, stripeCardBrand, stripeCardId, stripeCardLast4, stripeCustomerId, timezone, type, userAccess, userId, username, verifiedEmail, verifiedEmailCode, verifiedEmailExpires, verifiedPhone, verifiedPhoneExpires, verifiedSmsCode, zip } = user;
|
|
133
|
+
const normalizedDob = birthdate ?? dob;
|
|
134
|
+
const normalizedFirst = firstName;
|
|
135
|
+
const normalizedLast = lastName;
|
|
136
|
+
const transformed = {
|
|
137
|
+
...parseDocument(user),
|
|
138
|
+
...(_id || id || _key || userId) && {
|
|
139
|
+
id: parseArangoId(_id || id || `users/${_key || userId}`)
|
|
140
|
+
},
|
|
141
|
+
...(_key || userId) && {
|
|
142
|
+
userId: parseId(_key || userId || '')
|
|
143
|
+
},
|
|
144
|
+
...active !== undefined && {
|
|
145
|
+
active: !!active
|
|
146
|
+
},
|
|
147
|
+
...bankId && {
|
|
148
|
+
bankId: parseVarChar(bankId, 160)
|
|
149
|
+
},
|
|
150
|
+
...city && {
|
|
151
|
+
city: parseVarChar(city, 160)
|
|
152
|
+
},
|
|
153
|
+
...country && {
|
|
154
|
+
country: validateCountry(country)
|
|
155
|
+
},
|
|
156
|
+
...currency && {
|
|
157
|
+
currency: parseChar(currency, 3).toUpperCase()
|
|
158
|
+
},
|
|
159
|
+
...deviceToken && {
|
|
160
|
+
deviceToken: parseVarChar(deviceToken, 160)
|
|
161
|
+
},
|
|
162
|
+
...normalizedDob !== undefined && {
|
|
163
|
+
birthdate: parseReaktorDate(normalizedDob),
|
|
164
|
+
dob: parseReaktorDate(normalizedDob)
|
|
165
|
+
},
|
|
166
|
+
...email && {
|
|
167
|
+
email: parseEmail(email)
|
|
168
|
+
},
|
|
169
|
+
...normalizedFirst && {
|
|
170
|
+
firstName: parseVarChar(normalizedFirst, 160)
|
|
171
|
+
},
|
|
172
|
+
...gender && {
|
|
173
|
+
gender: validateGender(gender)
|
|
174
|
+
},
|
|
175
|
+
...imageId && {
|
|
176
|
+
imageId: parseReaktorItemId(imageId)
|
|
177
|
+
},
|
|
178
|
+
...normalizedLast && {
|
|
179
|
+
lastName: parseVarChar(normalizedLast, 160)
|
|
180
|
+
},
|
|
181
|
+
...lastActive !== undefined && {
|
|
182
|
+
lastActive: parseReaktorDate(lastActive)
|
|
183
|
+
},
|
|
184
|
+
...locale && {
|
|
185
|
+
locale: parseString(locale, 5)
|
|
186
|
+
},
|
|
187
|
+
...mailingList !== undefined && {
|
|
188
|
+
mailingList: !!mailingList
|
|
189
|
+
},
|
|
190
|
+
...name && {
|
|
191
|
+
name: parseReaktorName(name)
|
|
192
|
+
},
|
|
193
|
+
...password && {
|
|
194
|
+
password: parseVarChar(password, 160)
|
|
195
|
+
},
|
|
196
|
+
...phone && {
|
|
197
|
+
phone: validatePhone(phone)
|
|
198
|
+
},
|
|
199
|
+
...planExpires !== undefined && {
|
|
200
|
+
planExpires: parseReaktorDate(planExpires)
|
|
201
|
+
},
|
|
202
|
+
...planId && {
|
|
203
|
+
planId: parseVarChar(planId, 160)
|
|
204
|
+
},
|
|
205
|
+
...planStatus && {
|
|
206
|
+
planStatus: parseVarChar(planStatus, 160)
|
|
207
|
+
},
|
|
208
|
+
...planSubscriptionId && {
|
|
209
|
+
planSubscriptionId: parseVarChar(planSubscriptionId, 160)
|
|
210
|
+
},
|
|
211
|
+
...salt && {
|
|
212
|
+
salt: parseVarChar(salt, 160)
|
|
213
|
+
},
|
|
214
|
+
...state && {
|
|
215
|
+
state: validateState(state)
|
|
216
|
+
},
|
|
217
|
+
...street1 && {
|
|
218
|
+
street1: parseVarChar(street1, 160)
|
|
219
|
+
},
|
|
220
|
+
...street2 && {
|
|
221
|
+
street2: parseVarChar(street2, 160)
|
|
222
|
+
},
|
|
223
|
+
...stripeAccountId && {
|
|
224
|
+
stripeAccountId: parseVarChar(stripeAccountId, 160)
|
|
225
|
+
},
|
|
226
|
+
...stripeCardBrand && {
|
|
227
|
+
stripeCardBrand: parseVarChar(stripeCardBrand, 160)
|
|
228
|
+
},
|
|
229
|
+
...stripeCardId && {
|
|
230
|
+
stripeCardId: parseVarChar(stripeCardId, 160)
|
|
231
|
+
},
|
|
232
|
+
...stripeCardLast4 && {
|
|
233
|
+
stripeCardLast4: parseVarChar(stripeCardLast4, 4)
|
|
234
|
+
},
|
|
235
|
+
...stripeCustomerId && {
|
|
236
|
+
stripeCustomerId: parseVarChar(stripeCustomerId, 160)
|
|
237
|
+
},
|
|
238
|
+
...timezone && {
|
|
239
|
+
timezone: parseString(timezone, 160)
|
|
240
|
+
},
|
|
241
|
+
...type && {
|
|
242
|
+
type: parseReaktorType(type)
|
|
243
|
+
},
|
|
244
|
+
...userAccess !== undefined && {
|
|
245
|
+
userAccess: userAccess ? parseNum(userAccess) : 0
|
|
246
|
+
},
|
|
247
|
+
...username && {
|
|
248
|
+
username: parseVarChar(username, 160)
|
|
249
|
+
},
|
|
250
|
+
...verifiedEmail !== undefined && {
|
|
251
|
+
verifiedEmail: !!verifiedEmail
|
|
252
|
+
},
|
|
253
|
+
...verifiedEmailCode !== undefined && {
|
|
254
|
+
verifiedEmailCode: parseNum(verifiedEmailCode, 10)
|
|
255
|
+
},
|
|
256
|
+
...verifiedEmailExpires !== undefined && {
|
|
257
|
+
verifiedEmailExpires: parseNum(verifiedEmailExpires, 10)
|
|
258
|
+
},
|
|
259
|
+
...verifiedPhone !== undefined && {
|
|
260
|
+
verifiedPhone: !!verifiedPhone
|
|
261
|
+
},
|
|
262
|
+
...verifiedPhoneExpires !== undefined && {
|
|
263
|
+
verifiedPhoneExpires: parseNum(verifiedPhoneExpires, 10)
|
|
264
|
+
},
|
|
265
|
+
...verifiedSmsCode !== undefined && {
|
|
266
|
+
verifiedSmsCode: parseNum(verifiedSmsCode, 10)
|
|
267
|
+
},
|
|
268
|
+
...zip && {
|
|
269
|
+
zip: parseVarChar(zip, 20)
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
const result = removeEmptyKeys(transformed);
|
|
273
|
+
if (user._id) {
|
|
274
|
+
result.id = user._id;
|
|
275
|
+
result._id = user._id;
|
|
276
|
+
} else if (user.id && !result.id) {
|
|
277
|
+
result.id = user.id;
|
|
278
|
+
result._id = user.id;
|
|
279
|
+
}
|
|
280
|
+
if (user._key) {
|
|
281
|
+
result.userId = user._key;
|
|
282
|
+
result._key = user._key;
|
|
283
|
+
} else if (user.userId && !result.userId) {
|
|
284
|
+
result.userId = user.userId;
|
|
285
|
+
result._key = user.userId;
|
|
286
|
+
}
|
|
287
|
+
if (user.userId && !result._key) {
|
|
288
|
+
result._key = user.userId;
|
|
289
|
+
}
|
|
290
|
+
if (user.id && !result._id) {
|
|
291
|
+
result._id = user.id;
|
|
292
|
+
}
|
|
293
|
+
return result;
|
|
294
|
+
};
|
|
295
|
+
export const clearUserCache = ()=>{
|
|
296
|
+
userCache.clear();
|
|
297
|
+
};
|
|
298
|
+
export const getUserCacheSize = ()=>userCache.size;
|
|
299
|
+
export { userCache };
|
|
300
|
+
export const parseUserLegacy = (user)=>parseUser(user);
|
|
301
|
+
|
|
302
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvYWRhcHRlcnMvdXNlckFkYXB0ZXIvdXNlckFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlRW1haWwsIHBhcnNlSWQsIHBhcnNlTnVtLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMnO1xuaW1wb3J0IHt6fSBmcm9tICd6b2QnO1xuXG5pbXBvcnQge3BhcnNlRG9jdW1lbnQsIHJlbW92ZUVtcHR5S2V5c30gZnJvbSAnLi4vYXJhbmdvQWRhcHRlci9hcmFuZ29BZGFwdGVyLmpzJztcbmltcG9ydCB7cGFyc2VSZWFrdG9yRGF0ZSwgcGFyc2VSZWFrdG9ySXRlbUlkLCBwYXJzZVJlYWt0b3JOYW1lLCBwYXJzZVJlYWt0b3JUeXBlfSBmcm9tICcuLi9yZWFrdG9yQWRhcHRlci9yZWFrdG9yQWRhcHRlci5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgX2lkPzogc3RyaW5nO1xuICBfa2V5Pzogc3RyaW5nO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBhZGRlZD86IG51bWJlcjtcbiAgYmFua0lkPzogc3RyaW5nO1xuICBjaXR5Pzogc3RyaW5nO1xuICBjb3VudHJ5Pzogc3RyaW5nO1xuICBjdXJyZW5jeT86IHN0cmluZztcbiAgZGV2aWNlVG9rZW4/OiBzdHJpbmc7XG4gIGRvYj86IG51bWJlcjtcbiAgYmlydGhkYXRlPzogbnVtYmVyO1xuICBlbWFpbD86IHN0cmluZztcbiAgZmlyc3ROYW1lPzogc3RyaW5nO1xuICBnZW5kZXI/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBpbWFnZUlkPzogc3RyaW5nO1xuICBsYXN0TmFtZT86IHN0cmluZztcbiAgbGFzdEFjdGl2ZT86IG51bWJlcjtcbiAgbG9jYWxlPzogc3RyaW5nO1xuICBtYWlsaW5nTGlzdD86IGJvb2xlYW47XG4gIG1vZGlmaWVkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXNzd29yZD86IHN0cmluZztcbiAgcGhvbmU/OiBzdHJpbmc7XG4gIHBsYW5FeHBpcmVzPzogbnVtYmVyO1xuICBwbGFuSWQ/OiBzdHJpbmc7XG4gIHBsYW5TdGF0dXM/OiBzdHJpbmc7XG4gIHBsYW5TdWJzY3JpcHRpb25JZD86IHN0cmluZztcbiAgc2FsdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHN0cmVldDE/OiBzdHJpbmc7XG4gIHN0cmVldDI/OiBzdHJpbmc7XG4gIHN0cmlwZUFjY291bnRJZD86IHN0cmluZztcbiAgc3RyaXBlQ2FyZEJyYW5kPzogc3RyaW5nO1xuICBzdHJpcGVDYXJkSWQ/OiBzdHJpbmc7XG4gIHN0cmlwZUNhcmRMYXN0ND86IHN0cmluZztcbiAgc3RyaXBlQ3VzdG9tZXJJZD86IHN0cmluZztcbiAgdGltZXpvbmU/OiBzdHJpbmc7XG4gIHRodW1iVXJsPzogc3RyaW5nO1xuICB0eXBlPzogc3RyaW5nO1xuICB1cGRhdGVkPzogbnVtYmVyO1xuICB1c2VyQWNjZXNzPzogbnVtYmVyO1xuICB1c2VySWQ/OiBzdHJpbmc7XG4gIHVzZXJuYW1lPzogc3RyaW5nO1xuICB2ZXJpZmllZEVtYWlsPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRFbWFpbENvZGU/OiBudW1iZXI7XG4gIHZlcmlmaWVkRW1haWxFeHBpcmVzPzogbnVtYmVyO1xuICB2ZXJpZmllZFBob25lPzogYm9vbGVhbjtcbiAgdmVyaWZpZWRQaG9uZUV4cGlyZXM/OiBudW1iZXI7XG4gIHZlcmlmaWVkU21zQ29kZT86IG51bWJlcjtcbiAgemlwPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgVXNlclZhbGlkYXRpb25FcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IobWVzc2FnZTogc3RyaW5nLCBwdWJsaWMgZmllbGQ/OiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICB0aGlzLm5hbWUgPSAnVXNlclZhbGlkYXRpb25FcnJvcic7XG4gIH1cbn1cblxuY29uc3QgVXNlcklucHV0U2NoZW1hID0gei5vYmplY3Qoe1xuICBfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgX2tleTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBhY3RpdmU6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGFkZGVkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGJhbmtJZDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBjaXR5OiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGNvdW50cnk6IHouc3RyaW5nKCkubGVuZ3RoKDIpLm9wdGlvbmFsKCksXG4gIGN1cnJlbmN5OiB6LnN0cmluZygpLmxlbmd0aCgzKS5vcHRpb25hbCgpLFxuICBkZXZpY2VUb2tlbjogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBkb2I6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgYmlydGhkYXRlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVtYWlsOiB6LmVtYWlsKCkub3B0aW9uYWwoKSxcbiAgZmlyc3ROYW1lOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIGdlbmRlcjogei5zdHJpbmcoKS5sZW5ndGgoMSkub3B0aW9uYWwoKSxcbiAgaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaW1hZ2VJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBsYXN0TmFtZTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBsYXN0QWN0aXZlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGxvY2FsZTogei5zdHJpbmcoKS5tYXgoNSkub3B0aW9uYWwoKSxcbiAgbWFpbGluZ0xpc3Q6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIG5hbWU6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgcGFzc3dvcmQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgcGhvbmU6IHouc3RyaW5nKCkubWF4KDIwKS5vcHRpb25hbCgpLFxuICBwbGFuRXhwaXJlczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBwbGFuSWQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgcGxhblN0YXR1czogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBwbGFuU3Vic2NyaXB0aW9uSWQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgc2FsdDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBzdGF0ZTogei5zdHJpbmcoKS5sZW5ndGgoMikub3B0aW9uYWwoKSxcbiAgc3RyZWV0MTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBzdHJlZXQyOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHN0cmlwZUFjY291bnRJZDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICBzdHJpcGVDYXJkQnJhbmQ6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgc3RyaXBlQ2FyZElkOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHN0cmlwZUNhcmRMYXN0NDogei5zdHJpbmcoKS5tYXgoNCkub3B0aW9uYWwoKSxcbiAgc3RyaXBlQ3VzdG9tZXJJZDogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICB0aW1lem9uZTogei5zdHJpbmcoKS5tYXgoMTYwKS5vcHRpb25hbCgpLFxuICB0eXBlOiB6LnN0cmluZygpLm1heCgxNjApLm9wdGlvbmFsKCksXG4gIHVwZGF0ZWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdXNlckFjY2Vzczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICB1c2VySWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlcm5hbWU6IHouc3RyaW5nKCkubWF4KDE2MCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbDogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbENvZGU6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRQaG9uZTogei5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRQaG9uZUV4cGlyZXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdmVyaWZpZWRTbXNDb2RlOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHppcDogei5zdHJpbmcoKS5tYXgoMjApLm9wdGlvbmFsKClcbn0pLmxvb3NlKCk7XG5cbmNvbnN0IHZhbGlkYXRlUGhvbmUgPSAocGhvbmU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZighcGhvbmUpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IGNsZWFuZWQgPSBwaG9uZS5yZXBsYWNlKC9cXEQvZywgJycpO1xuICBpZihjbGVhbmVkLmxlbmd0aCA8IDEwIHx8IGNsZWFuZWQubGVuZ3RoID4gMTUpIHtcbiAgICB0aHJvdyBuZXcgVXNlclZhbGlkYXRpb25FcnJvcignSW52YWxpZCBwaG9uZSBudW1iZXIgZm9ybWF0JywgJ3Bob25lJyk7XG4gIH1cbiAgcmV0dXJuIGArJHtjbGVhbmVkfWA7XG59O1xuXG5jb25zdCB2YWxpZGF0ZUNvdW50cnkgPSAoY291bnRyeT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFjb3VudHJ5KSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB1cHBlciA9IGNvdW50cnkudG9VcHBlckNhc2UoKTtcbiAgaWYoIS9eW0EtWl17Mn0kLy50ZXN0KHVwcGVyKSkge1xuICAgIHRocm93IG5ldyBVc2VyVmFsaWRhdGlvbkVycm9yKCdDb3VudHJ5IG11c3QgYmUgYSAyLWxldHRlciBJU08gY29kZScsICdjb3VudHJ5Jyk7XG4gIH1cbiAgcmV0dXJuIHVwcGVyO1xufTtcblxuY29uc3QgdmFsaWRhdGVTdGF0ZSA9IChzdGF0ZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmKCFzdGF0ZSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdXBwZXIgPSBzdGF0ZS50b1VwcGVyQ2FzZSgpO1xuICBpZighL15bQS1aXXsyfSQvLnRlc3QodXBwZXIpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoJ1N0YXRlIG11c3QgYmUgYSAyLWxldHRlciBjb2RlJywgJ3N0YXRlJyk7XG4gIH1cbiAgcmV0dXJuIHVwcGVyO1xufTtcblxuY29uc3QgdmFsaWRhdGVHZW5kZXIgPSAoZ2VuZGVyPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYoIWdlbmRlcikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgdXBwZXIgPSBnZW5kZXIudG9VcHBlckNhc2UoKTtcbiAgaWYoIS9eW01GXSQvLnRlc3QodXBwZXIpKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoJ0dlbmRlciBtdXN0IGJlIE0gb3IgRicsICdnZW5kZXInKTtcbiAgfVxuICByZXR1cm4gdXBwZXI7XG59O1xuXG5jb25zdCB1c2VyQ2FjaGUgPSBuZXcgTWFwPHN0cmluZywgVXNlcj4oKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVXNlcklucHV0ID0gKHVzZXI6IHVua25vd24pOiBVc2VyID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB2YWxpZGF0ZWQgPSBVc2VySW5wdXRTY2hlbWEucGFyc2UodXNlcik7XG4gICAgcmV0dXJuIHZhbGlkYXRlZCBhcyBVc2VyO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiB6LlpvZEVycm9yKSB7XG4gICAgICBjb25zdCBmaWVsZEVycm9ycyA9IGVycm9yLmlzc3Vlcy5tYXAoKGUpID0+IGAke2UucGF0aC5qb2luKCcuJyl9OiAke2UubWVzc2FnZX1gKS5qb2luKCcsICcpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoYFVzZXIgdmFsaWRhdGlvbiBmYWlsZWQ6ICR7ZmllbGRFcnJvcnN9YCk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0VXNlck91dHB1dCA9ICh1c2VyOiBVc2VyKTogVXNlciA9PiB7XG4gIGNvbnN0IHtwYXNzd29yZCwgc2FsdCwgdmVyaWZpZWRFbWFpbENvZGUsIHZlcmlmaWVkU21zQ29kZSwgLi4uc2FmZVVzZXJ9ID0gdXNlcjtcbiAgcmV0dXJuIHNhZmVVc2VyO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlVXNlciA9ICh1c2VyOiBVc2VyKTogVXNlciA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGVyZm9ybVVzZXJUcmFuc2Zvcm1hdGlvbih1c2VyKTtcbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBVc2VyVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFVzZXJWYWxpZGF0aW9uRXJyb3IoYFVzZXIgcGFyc2luZyBmYWlsZWQ6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcid9YCk7XG4gIH1cbn07XG5cbmNvbnN0IHBlcmZvcm1Vc2VyVHJhbnNmb3JtYXRpb24gPSAodXNlcjogVXNlcik6IFVzZXIgPT4ge1xuICBjb25zdCB7XG4gICAgX2lkLFxuICAgIF9rZXksXG4gICAgYWN0aXZlLFxuICAgIGJhbmtJZCxcbiAgICBjaXR5LFxuICAgIGNvdW50cnksXG4gICAgY3VycmVuY3ksXG4gICAgZGV2aWNlVG9rZW4sXG4gICAgZG9iLFxuICAgIGJpcnRoZGF0ZSxcbiAgICBlbWFpbCxcbiAgICBmaXJzdE5hbWUsXG4gICAgZ2VuZGVyLFxuICAgIGlkLFxuICAgIGltYWdlSWQsXG4gICAgbGFzdE5hbWUsXG4gICAgbGFzdEFjdGl2ZSxcbiAgICBsb2NhbGUsXG4gICAgbWFpbGluZ0xpc3QsXG4gICAgbmFtZSxcbiAgICBwYXNzd29yZCxcbiAgICBwaG9uZSxcbiAgICBwbGFuRXhwaXJlcyxcbiAgICBwbGFuSWQsXG4gICAgcGxhblN0YXR1cyxcbiAgICBwbGFuU3Vic2NyaXB0aW9uSWQsXG4gICAgc2FsdCxcbiAgICBzdGF0ZSxcbiAgICBzdHJlZXQxLFxuICAgIHN0cmVldDIsXG4gICAgc3RyaXBlQWNjb3VudElkLFxuICAgIHN0cmlwZUNhcmRCcmFuZCxcbiAgICBzdHJpcGVDYXJkSWQsXG4gICAgc3RyaXBlQ2FyZExhc3Q0LFxuICAgIHN0cmlwZUN1c3RvbWVySWQsXG4gICAgdGltZXpvbmUsXG4gICAgdHlwZSxcbiAgICB1c2VyQWNjZXNzLFxuICAgIHVzZXJJZCxcbiAgICB1c2VybmFtZSxcbiAgICB2ZXJpZmllZEVtYWlsLFxuICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgIHZlcmlmaWVkRW1haWxFeHBpcmVzLFxuICAgIHZlcmlmaWVkUGhvbmUsXG4gICAgdmVyaWZpZWRQaG9uZUV4cGlyZXMsXG4gICAgdmVyaWZpZWRTbXNDb2RlLFxuICAgIHppcFxuICB9ID0gdXNlcjtcbiAgY29uc3Qgbm9ybWFsaXplZERvYiA9IGJpcnRoZGF0ZSA/PyBkb2I7XG4gIGNvbnN0IG5vcm1hbGl6ZWRGaXJzdCA9IGZpcnN0TmFtZTtcbiAgY29uc3Qgbm9ybWFsaXplZExhc3QgPSBsYXN0TmFtZTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB7XG4gICAgLi4ucGFyc2VEb2N1bWVudCh1c2VyKSxcbiAgICAuLi4oKF9pZCB8fCBpZCB8fCBfa2V5IHx8IHVzZXJJZCkgJiYge2lkOiBwYXJzZUFyYW5nb0lkKF9pZCB8fCBpZCB8fCBgdXNlcnMvJHtfa2V5IHx8IHVzZXJJZH1gKX0pLFxuICAgIC4uLigoX2tleSB8fCB1c2VySWQpICYmIHt1c2VySWQ6IHBhcnNlSWQoX2tleSB8fCB1c2VySWQgfHwgJycpfSksXG4gICAgLi4uKGFjdGl2ZSAhPT0gdW5kZWZpbmVkICYmIHthY3RpdmU6ICEhYWN0aXZlfSksXG4gICAgLi4uKGJhbmtJZCAmJiB7YmFua0lkOiBwYXJzZVZhckNoYXIoYmFua0lkLCAxNjApfSksXG4gICAgLi4uKGNpdHkgJiYge2NpdHk6IHBhcnNlVmFyQ2hhcihjaXR5LCAxNjApfSksXG4gICAgLi4uKGNvdW50cnkgJiYge2NvdW50cnk6IHZhbGlkYXRlQ291bnRyeShjb3VudHJ5KX0pLFxuICAgIC4uLihjdXJyZW5jeSAmJiB7Y3VycmVuY3k6IHBhcnNlQ2hhcihjdXJyZW5jeSwgMykudG9VcHBlckNhc2UoKX0pLFxuICAgIC4uLihkZXZpY2VUb2tlbiAmJiB7ZGV2aWNlVG9rZW46IHBhcnNlVmFyQ2hhcihkZXZpY2VUb2tlbiwgMTYwKX0pLFxuICAgIC4uLihub3JtYWxpemVkRG9iICE9PSB1bmRlZmluZWQgJiYge2JpcnRoZGF0ZTogcGFyc2VSZWFrdG9yRGF0ZShub3JtYWxpemVkRG9iKSwgZG9iOiBwYXJzZVJlYWt0b3JEYXRlKG5vcm1hbGl6ZWREb2IpfSksXG4gICAgLi4uKGVtYWlsICYmIHtlbWFpbDogcGFyc2VFbWFpbChlbWFpbCl9KSxcbiAgICAuLi4obm9ybWFsaXplZEZpcnN0ICYmIHtmaXJzdE5hbWU6IHBhcnNlVmFyQ2hhcihub3JtYWxpemVkRmlyc3QsIDE2MCl9KSxcbiAgICAuLi4oZ2VuZGVyICYmIHtnZW5kZXI6IHZhbGlkYXRlR2VuZGVyKGdlbmRlcil9KSxcbiAgICAuLi4oaW1hZ2VJZCAmJiB7aW1hZ2VJZDogcGFyc2VSZWFrdG9ySXRlbUlkKGltYWdlSWQpfSksXG4gICAgLi4uKG5vcm1hbGl6ZWRMYXN0ICYmIHtsYXN0TmFtZTogcGFyc2VWYXJDaGFyKG5vcm1hbGl6ZWRMYXN0LCAxNjApfSksXG4gICAgLi4uKGxhc3RBY3RpdmUgIT09IHVuZGVmaW5lZCAmJiB7bGFzdEFjdGl2ZTogcGFyc2VSZWFrdG9yRGF0ZShsYXN0QWN0aXZlKX0pLFxuICAgIC4uLihsb2NhbGUgJiYge2xvY2FsZTogcGFyc2VTdHJpbmcobG9jYWxlLCA1KX0pLFxuICAgIC4uLihtYWlsaW5nTGlzdCAhPT0gdW5kZWZpbmVkICYmIHttYWlsaW5nTGlzdDogISFtYWlsaW5nTGlzdH0pLFxuICAgIC4uLihuYW1lICYmIHtuYW1lOiBwYXJzZVJlYWt0b3JOYW1lKG5hbWUpfSksXG4gICAgLi4uKHBhc3N3b3JkICYmIHtwYXNzd29yZDogcGFyc2VWYXJDaGFyKHBhc3N3b3JkLCAxNjApfSksXG4gICAgLi4uKHBob25lICYmIHtwaG9uZTogdmFsaWRhdGVQaG9uZShwaG9uZSl9KSxcbiAgICAuLi4ocGxhbkV4cGlyZXMgIT09IHVuZGVmaW5lZCAmJiB7cGxhbkV4cGlyZXM6IHBhcnNlUmVha3RvckRhdGUocGxhbkV4cGlyZXMpfSksXG4gICAgLi4uKHBsYW5JZCAmJiB7cGxhbklkOiBwYXJzZVZhckNoYXIocGxhbklkLCAxNjApfSksXG4gICAgLi4uKHBsYW5TdGF0dXMgJiYge3BsYW5TdGF0dXM6IHBhcnNlVmFyQ2hhcihwbGFuU3RhdHVzLCAxNjApfSksXG4gICAgLi4uKHBsYW5TdWJzY3JpcHRpb25JZCAmJiB7cGxhblN1YnNjcmlwdGlvbklkOiBwYXJzZVZhckNoYXIocGxhblN1YnNjcmlwdGlvbklkLCAxNjApfSksXG4gICAgLi4uKHNhbHQgJiYge3NhbHQ6IHBhcnNlVmFyQ2hhcihzYWx0LCAxNjApfSksXG4gICAgLi4uKHN0YXRlICYmIHtzdGF0ZTogdmFsaWRhdGVTdGF0ZShzdGF0ZSl9KSxcbiAgICAuLi4oc3RyZWV0MSAmJiB7c3RyZWV0MTogcGFyc2VWYXJDaGFyKHN0cmVldDEsIDE2MCl9KSxcbiAgICAuLi4oc3RyZWV0MiAmJiB7c3RyZWV0MjogcGFyc2VWYXJDaGFyKHN0cmVldDIsIDE2MCl9KSxcbiAgICAuLi4oc3RyaXBlQWNjb3VudElkICYmIHtzdHJpcGVBY2NvdW50SWQ6IHBhcnNlVmFyQ2hhcihzdHJpcGVBY2NvdW50SWQsIDE2MCl9KSxcbiAgICAuLi4oc3RyaXBlQ2FyZEJyYW5kICYmIHtzdHJpcGVDYXJkQnJhbmQ6IHBhcnNlVmFyQ2hhcihzdHJpcGVDYXJkQnJhbmQsIDE2MCl9KSxcbiAgICAuLi4oc3RyaXBlQ2FyZElkICYmIHtzdHJpcGVDYXJkSWQ6IHBhcnNlVmFyQ2hhcihzdHJpcGVDYXJkSWQsIDE2MCl9KSxcbiAgICAuLi4oc3RyaXBlQ2FyZExhc3Q0ICYmIHtzdHJpcGVDYXJkTGFzdDQ6IHBhcnNlVmFyQ2hhcihzdHJpcGVDYXJkTGFzdDQsIDQpfSksXG4gICAgLi4uKHN0cmlwZUN1c3RvbWVySWQgJiYge3N0cmlwZUN1c3RvbWVySWQ6IHBhcnNlVmFyQ2hhcihzdHJpcGVDdXN0b21lcklkLCAxNjApfSksXG4gICAgLi4uKHRpbWV6b25lICYmIHt0aW1lem9uZTogcGFyc2VTdHJpbmcodGltZXpvbmUsIDE2MCl9KSxcbiAgICAuLi4odHlwZSAmJiB7dHlwZTogcGFyc2VSZWFrdG9yVHlwZSh0eXBlKX0pLFxuICAgIC4uLih1c2VyQWNjZXNzICE9PSB1bmRlZmluZWQgJiYge3VzZXJBY2Nlc3M6IHVzZXJBY2Nlc3MgPyBwYXJzZU51bSh1c2VyQWNjZXNzKSA6IDB9KSxcbiAgICAuLi4odXNlcm5hbWUgJiYge3VzZXJuYW1lOiBwYXJzZVZhckNoYXIodXNlcm5hbWUsIDE2MCl9KSxcbiAgICAuLi4odmVyaWZpZWRFbWFpbCAhPT0gdW5kZWZpbmVkICYmIHt2ZXJpZmllZEVtYWlsOiAhIXZlcmlmaWVkRW1haWx9KSxcbiAgICAuLi4odmVyaWZpZWRFbWFpbENvZGUgIT09IHVuZGVmaW5lZCAmJiB7dmVyaWZpZWRFbWFpbENvZGU6IHBhcnNlTnVtKHZlcmlmaWVkRW1haWxDb2RlLCAxMCl9KSxcbiAgICAuLi4odmVyaWZpZWRFbWFpbEV4cGlyZXMgIT09IHVuZGVmaW5lZCAmJiB7dmVyaWZpZWRFbWFpbEV4cGlyZXM6IHBhcnNlTnVtKHZlcmlmaWVkRW1haWxFeHBpcmVzLCAxMCl9KSxcbiAgICAuLi4odmVyaWZpZWRQaG9uZSAhPT0gdW5kZWZpbmVkICYmIHt2ZXJpZmllZFBob25lOiAhIXZlcmlmaWVkUGhvbmV9KSxcbiAgICAuLi4odmVyaWZpZWRQaG9uZUV4cGlyZXMgIT09IHVuZGVmaW5lZCAmJiB7dmVyaWZpZWRQaG9uZUV4cGlyZXM6IHBhcnNlTnVtKHZlcmlmaWVkUGhvbmVFeHBpcmVzLCAxMCl9KSxcbiAgICAuLi4odmVyaWZpZWRTbXNDb2RlICE9PSB1bmRlZmluZWQgJiYge3ZlcmlmaWVkU21zQ29kZTogcGFyc2VOdW0odmVyaWZpZWRTbXNDb2RlLCAxMCl9KSxcbiAgICAuLi4oemlwICYmIHt6aXA6IHBhcnNlVmFyQ2hhcih6aXAsIDIwKX0pXG4gIH07XG5cbiAgY29uc3QgcmVzdWx0ID0gcmVtb3ZlRW1wdHlLZXlzKHRyYW5zZm9ybWVkKTtcblxuICBpZih1c2VyLl9pZCkge1xuICAgIHJlc3VsdC5pZCA9IHVzZXIuX2lkO1xuICAgIHJlc3VsdC5faWQgPSB1c2VyLl9pZDtcbiAgfSBlbHNlIGlmKHVzZXIuaWQgJiYgIXJlc3VsdC5pZCkge1xuICAgIHJlc3VsdC5pZCA9IHVzZXIuaWQ7XG4gICAgcmVzdWx0Ll9pZCA9IHVzZXIuaWQ7XG4gIH1cblxuICBpZih1c2VyLl9rZXkpIHtcbiAgICByZXN1bHQudXNlcklkID0gdXNlci5fa2V5O1xuICAgIHJlc3VsdC5fa2V5ID0gdXNlci5fa2V5O1xuICB9IGVsc2UgaWYodXNlci51c2VySWQgJiYgIXJlc3VsdC51c2VySWQpIHtcbiAgICByZXN1bHQudXNlcklkID0gdXNlci51c2VySWQ7XG4gICAgcmVzdWx0Ll9rZXkgPSB1c2VyLnVzZXJJZDtcbiAgfVxuXG4gIGlmKHVzZXIudXNlcklkICYmICFyZXN1bHQuX2tleSkge1xuICAgIHJlc3VsdC5fa2V5ID0gdXNlci51c2VySWQ7XG4gIH1cblxuICBpZih1c2VyLmlkICYmICFyZXN1bHQuX2lkKSB7XG4gICAgcmVzdWx0Ll9pZCA9IHVzZXIuaWQ7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyVXNlckNhY2hlID0gKCk6IHZvaWQgPT4ge1xuICB1c2VyQ2FjaGUuY2xlYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQ2FjaGVTaXplID0gKCk6IG51bWJlciA9PiB1c2VyQ2FjaGUuc2l6ZTtcblxuZXhwb3J0IHt1c2VyQ2FjaGV9O1xuXG5leHBvcnQgY29uc3QgcGFyc2VVc2VyTGVnYWN5ID0gKHVzZXI6IFVzZXIpOiBVc2VyID0+IHBhcnNlVXNlcih1c2VyKTtcbiJdLCJuYW1lcyI6WyJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VFbWFpbCIsInBhcnNlSWQiLCJwYXJzZU51bSIsInBhcnNlU3RyaW5nIiwicGFyc2VWYXJDaGFyIiwieiIsInBhcnNlRG9jdW1lbnQiLCJyZW1vdmVFbXB0eUtleXMiLCJwYXJzZVJlYWt0b3JEYXRlIiwicGFyc2VSZWFrdG9ySXRlbUlkIiwicGFyc2VSZWFrdG9yTmFtZSIsInBhcnNlUmVha3RvclR5cGUiLCJVc2VyVmFsaWRhdGlvbkVycm9yIiwiRXJyb3IiLCJtZXNzYWdlIiwiZmllbGQiLCJuYW1lIiwiVXNlcklucHV0U2NoZW1hIiwib2JqZWN0IiwiX2lkIiwic3RyaW5nIiwib3B0aW9uYWwiLCJfa2V5IiwiYWN0aXZlIiwiYm9vbGVhbiIsImFkZGVkIiwibnVtYmVyIiwiYmFua0lkIiwibWF4IiwiY2l0eSIsImNvdW50cnkiLCJsZW5ndGgiLCJjdXJyZW5jeSIsImRldmljZVRva2VuIiwiZG9iIiwiYmlydGhkYXRlIiwiZW1haWwiLCJmaXJzdE5hbWUiLCJnZW5kZXIiLCJpZCIsImltYWdlSWQiLCJsYXN0TmFtZSIsImxhc3RBY3RpdmUiLCJsb2NhbGUiLCJtYWlsaW5nTGlzdCIsInBhc3N3b3JkIiwicGhvbmUiLCJwbGFuRXhwaXJlcyIsInBsYW5JZCIsInBsYW5TdGF0dXMiLCJwbGFuU3Vic2NyaXB0aW9uSWQiLCJzYWx0Iiwic3RhdGUiLCJzdHJlZXQxIiwic3RyZWV0MiIsInN0cmlwZUFjY291bnRJZCIsInN0cmlwZUNhcmRCcmFuZCIsInN0cmlwZUNhcmRJZCIsInN0cmlwZUNhcmRMYXN0NCIsInN0cmlwZUN1c3RvbWVySWQiLCJ0aW1lem9uZSIsInR5cGUiLCJ1cGRhdGVkIiwidXNlckFjY2VzcyIsInVzZXJJZCIsInVzZXJuYW1lIiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkRW1haWxDb2RlIiwidmVyaWZpZWRFbWFpbEV4cGlyZXMiLCJ2ZXJpZmllZFBob25lIiwidmVyaWZpZWRQaG9uZUV4cGlyZXMiLCJ2ZXJpZmllZFNtc0NvZGUiLCJ6aXAiLCJsb29zZSIsInZhbGlkYXRlUGhvbmUiLCJ1bmRlZmluZWQiLCJjbGVhbmVkIiwicmVwbGFjZSIsInZhbGlkYXRlQ291bnRyeSIsInVwcGVyIiwidG9VcHBlckNhc2UiLCJ0ZXN0IiwidmFsaWRhdGVTdGF0ZSIsInZhbGlkYXRlR2VuZGVyIiwidXNlckNhY2hlIiwiTWFwIiwidmFsaWRhdGVVc2VySW5wdXQiLCJ1c2VyIiwidmFsaWRhdGVkIiwicGFyc2UiLCJlcnJvciIsIlpvZEVycm9yIiwiZmllbGRFcnJvcnMiLCJpc3N1ZXMiLCJtYXAiLCJlIiwicGF0aCIsImpvaW4iLCJmb3JtYXRVc2VyT3V0cHV0Iiwic2FmZVVzZXIiLCJwYXJzZVVzZXIiLCJwYXJzZWQiLCJwZXJmb3JtVXNlclRyYW5zZm9ybWF0aW9uIiwibm9ybWFsaXplZERvYiIsIm5vcm1hbGl6ZWRGaXJzdCIsIm5vcm1hbGl6ZWRMYXN0IiwidHJhbnNmb3JtZWQiLCJyZXN1bHQiLCJjbGVhclVzZXJDYWNoZSIsImNsZWFyIiwiZ2V0VXNlckNhY2hlU2l6ZSIsInNpemUiLCJwYXJzZVVzZXJMZWdhY3kiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLGFBQWEs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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { VideoType } from '../../types/videos.types.js';
|
|
2
|
+
export declare class VideoValidationError extends Error {
|
|
3
|
+
field?: string;
|
|
4
|
+
constructor(message: string, field?: string);
|
|
5
|
+
}
|
|
6
|
+
export declare const validateVideoInput: (video: unknown) => VideoType;
|
|
7
|
+
export declare const parseVideo: (video: VideoType) => VideoType;
|
|
8
|
+
//# sourceMappingURL=videoAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoAdapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/videoAdapter/videoAdapter.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,6BAA6B,CAAC;AAE3D,qBAAa,oBAAqB,SAAQ,KAAK;IACT,KAAK,CAAC,EAAE,MAAM;gBAAtC,OAAO,EAAE,MAAM,EAAS,KAAK,CAAC,EAAE,MAAM;CAInD;AA2CD,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,KAAG,SAWnD,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,OAAO,SAAS,KAAG,SAU7C,CAAC"}
|