@nlabs/reaktor 0.10.1 → 0.10.2
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/coverage/actions/index.html +21 -36
- package/coverage/actions/notifications.ts.html +223 -0
- package/coverage/actions/posts.ts.html +2356 -0
- package/coverage/adapters/arangoAdapter.ts.html +170 -20
- package/coverage/adapters/fileAdapter.ts.html +445 -0
- package/coverage/adapters/index.html +72 -42
- package/coverage/adapters/postAdapter.ts.html +436 -0
- package/coverage/adapters/reaktorAdapter.ts.html +201 -18
- package/coverage/adapters/tagAdapter.ts.html +274 -25
- package/coverage/adapters/userAdapter.ts.html +829 -0
- package/coverage/analyticsUtils.ts.html +286 -0
- package/coverage/config.ts.html +766 -0
- package/coverage/index.html +81 -51
- package/coverage/mocks/group.ts.html +5 -5
- package/coverage/mocks/image.ts.html +18 -12
- package/coverage/mocks/index.html +37 -7
- package/coverage/mocks/post.ts.html +8 -8
- package/coverage/mocks/tag.ts.html +2 -2
- package/coverage/mocks/user.ts.html +18 -15
- package/coverage/testUtils.ts.html +1309 -0
- package/coverage/translationQueue.ts.html +592 -0
- package/coverage/types/error.types.ts.html +148 -0
- package/coverage/types/index.html +2 -2
- package/coverage/utils/adapterUtils.ts.html +39 -27
- package/coverage/utils/analyticsUtils.ts.html +35 -41
- package/coverage/utils/authUtils.ts.html +328 -0
- package/coverage/utils/dbI18n.ts.html +280 -0
- package/coverage/utils/googleTranslate.ts.html +385 -0
- package/coverage/utils/index.html +29 -44
- package/coverage/utils/localeUtils.ts.html +193 -0
- package/coverage/utils/sessionUtils.ts.html +211 -0
- package/coverage/utils/testUtils.ts.html +1309 -0
- package/lex.config.mjs +34 -0
- package/lib/actions/apps.d.ts +25 -0
- package/lib/actions/apps.js +11 -11
- package/lib/actions/connections.d.ts +5 -0
- package/lib/actions/connections.js +6 -6
- package/lib/actions/content.d.ts +13 -0
- package/lib/actions/content.js +9 -9
- package/lib/actions/conversations.d.ts +16 -0
- package/lib/actions/conversations.js +17 -17
- package/lib/actions/dynamodb.d.ts +12 -0
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +8 -0
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.d.ts +19 -0
- package/lib/actions/files.js +3 -3
- package/lib/actions/groups.d.ts +13 -0
- package/lib/actions/groups.js +15 -15
- package/lib/actions/images.d.ts +33 -0
- package/lib/actions/images.js +22 -22
- package/lib/actions/index.d.ts +27 -0
- package/lib/actions/index.js +2 -2
- package/lib/actions/ios.d.ts +7 -0
- package/lib/actions/ios.js +4 -4
- package/lib/actions/locations.d.ts +6 -0
- package/lib/actions/locations.js +3 -3
- package/lib/actions/messages.d.ts +13 -0
- package/lib/actions/messages.js +3 -3
- package/lib/actions/notifications.d.ts +9 -0
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +12 -0
- package/lib/actions/payments.js +6 -6
- package/lib/actions/posts.d.ts +25 -0
- package/lib/actions/posts.js +30 -30
- package/lib/actions/profiles.d.ts +4 -0
- package/lib/actions/profiles.js +4 -4
- package/lib/actions/reactions.d.ts +32 -0
- package/lib/actions/reactions.js +16 -16
- package/lib/actions/s3.d.ts +11 -0
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.d.ts +3 -0
- package/lib/actions/search.js +3 -3
- package/lib/actions/sms.d.ts +2 -0
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.d.ts +4 -0
- package/lib/actions/statistics.js +4 -4
- package/lib/actions/subscriptions.d.ts +7 -0
- package/lib/actions/subscriptions.js +6 -6
- package/lib/actions/tags.d.ts +34 -0
- package/lib/actions/tags.js +6 -6
- package/lib/actions/users.d.ts +73 -0
- package/lib/actions/users.js +45 -42
- package/lib/actions/websockets.d.ts +20 -0
- package/lib/actions/websockets.js +8 -8
- package/lib/adapters/arangoAdapter.d.ts +8 -0
- package/lib/adapters/arangoAdapter.js +2 -2
- package/lib/adapters/contentAdapter.d.ts +8 -0
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.d.ts +9 -0
- package/lib/adapters/fileAdapter.js +2 -2
- package/lib/adapters/imageAdapter.d.ts +8 -0
- package/lib/adapters/imageAdapter.js +2 -2
- package/lib/adapters/index.d.ts +9 -0
- package/lib/adapters/index.js +2 -0
- package/lib/adapters/messageAdapter.d.ts +8 -0
- package/lib/adapters/messageAdapter.js +2 -2
- package/lib/adapters/postAdapter.d.ts +8 -0
- package/lib/adapters/postAdapter.js +2 -2
- package/lib/adapters/reaktorAdapter.d.ts +16 -0
- package/lib/adapters/reaktorAdapter.js +2 -2
- package/lib/adapters/tagAdapter.d.ts +9 -0
- package/lib/adapters/tagAdapter.js +2 -2
- package/lib/adapters/userAdapter.d.ts +13 -0
- package/lib/adapters/userAdapter.js +2 -2
- package/lib/config.d.ts +57 -0
- package/lib/config.js +2 -2
- package/lib/handlers/graphqlHandler.d.ts +4 -0
- package/lib/handlers/graphqlHandler.js +2 -2
- package/lib/index.d.ts +19 -0
- package/lib/index.js +2 -2
- package/lib/lambdas/actions/websockets.d.ts +7 -0
- package/lib/lambdas/actions/websockets.js +6 -6
- package/lib/lambdas/authorizer.d.ts +20 -0
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.d.ts +12 -0
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.d.ts +1 -0
- package/lib/lambdas/utils/websocket.d.ts +7 -0
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.d.ts +8 -0
- package/lib/mocks/file.d.ts +11 -0
- package/lib/mocks/group.d.ts +17 -0
- package/lib/mocks/group.js +2 -2
- package/lib/mocks/image.d.ts +3 -0
- package/lib/mocks/image.js +2 -2
- package/lib/mocks/post.d.ts +38 -0
- package/lib/mocks/post.js +2 -2
- package/lib/mocks/tag.d.ts +2 -0
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.d.ts +4 -0
- package/lib/mocks/user.js +2 -2
- package/lib/mutations/content.d.ts +2 -0
- package/lib/mutations/content.js +2 -0
- package/lib/mutations/index.d.ts +11 -0
- package/lib/mutations/index.js +2 -2
- package/lib/mutations/locations.d.ts +2 -0
- package/lib/mutations/locations.js +2 -2
- package/lib/mutations/messages.d.ts +2 -0
- package/lib/mutations/messages.js +2 -2
- package/lib/mutations/posts.d.ts +2 -0
- package/lib/mutations/posts.js +2 -2
- package/lib/mutations/profiles.d.ts +2 -0
- package/lib/mutations/profiles.js +2 -2
- package/lib/mutations/reactions.d.ts +2 -0
- package/lib/mutations/reactions.js +2 -2
- package/lib/mutations/statistics.d.ts +2 -0
- package/lib/mutations/statistics.js +2 -2
- package/lib/mutations/subscriptions.d.ts +2 -0
- package/lib/mutations/subscriptions.js +2 -2
- package/lib/mutations/tags.d.ts +2 -0
- package/lib/mutations/tags.js +2 -2
- package/lib/mutations/users.d.ts +1 -0
- package/lib/mutations/users.js +2 -2
- package/lib/objectTypes/app.d.ts +3 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.d.ts +1 -0
- package/lib/objectTypes/connection.d.ts +1 -0
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.d.ts +2 -0
- package/lib/objectTypes/content.js +2 -0
- package/lib/objectTypes/conversation.d.ts +2 -0
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.d.ts +1 -0
- package/lib/objectTypes/document.d.ts +1 -0
- package/lib/objectTypes/error.d.ts +1 -0
- package/lib/objectTypes/external.d.ts +1 -0
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.d.ts +2 -0
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.d.ts +1 -0
- package/lib/objectTypes/group.d.ts +3 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.d.ts +1 -0
- package/lib/objectTypes/image.d.ts +6 -0
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +26 -0
- package/lib/objectTypes/index.js +2 -2
- package/lib/objectTypes/location.d.ts +2 -0
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.d.ts +2 -0
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.d.ts +1 -0
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/plan.d.ts +2 -0
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.d.ts +2 -0
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/profile.d.ts +3 -0
- package/lib/objectTypes/profile.js +2 -2
- package/lib/objectTypes/reaction.d.ts +2 -0
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.d.ts +1 -0
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/search.d.ts +1 -0
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.d.ts +1 -0
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.d.ts +2 -0
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.d.ts +2 -0
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.d.ts +4 -0
- package/lib/objectTypes/user.js +2 -2
- package/lib/queries/content.d.ts +2 -0
- package/lib/queries/content.js +2 -0
- package/lib/queries/index.d.ts +10 -0
- package/lib/queries/index.js +2 -2
- package/lib/queries/locations.d.ts +2 -0
- package/lib/queries/locations.js +2 -2
- package/lib/queries/messages.d.ts +2 -0
- package/lib/queries/messages.js +2 -2
- package/lib/queries/posts.d.ts +2 -0
- package/lib/queries/posts.js +2 -2
- package/lib/queries/reactions.d.ts +2 -0
- package/lib/queries/reactions.js +2 -2
- package/lib/queries/statistics.d.ts +2 -0
- package/lib/queries/statistics.js +2 -2
- package/lib/queries/subscriptions.d.ts +2 -0
- package/lib/queries/subscriptions.js +2 -2
- package/lib/queries/tags.d.ts +2 -0
- package/lib/queries/tags.js +2 -2
- package/lib/queries/users.d.ts +1 -0
- package/lib/queries/users.js +2 -2
- package/lib/templates/email/layout.d.ts +2 -0
- package/lib/templates/email/passwordForgot.d.ts +2 -0
- package/lib/templates/email/passwordRecovery.d.ts +2 -0
- package/lib/templates/email/verifyEmail.d.ts +2 -0
- package/lib/templates/email/welcome.d.ts +2 -0
- package/lib/templates/sms/passwordForgot.d.ts +2 -0
- package/lib/templates/sms/passwordRecovery.d.ts +2 -0
- package/lib/templates/sms/verifyEmail.d.ts +2 -0
- package/lib/templates/sms/verifyPhone.d.ts +2 -0
- package/lib/templates/sms/welcome.d.ts +2 -0
- package/lib/types/apps.types.d.ts +50 -0
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +38 -0
- package/lib/types/auth.types.d.ts +15 -0
- package/lib/types/connections.types.d.ts +9 -0
- package/lib/types/content.types.d.ts +31 -0
- package/lib/types/conversations.types.d.ts +31 -0
- package/lib/types/email.types.d.ts +17 -0
- package/lib/types/error.types.d.ts +21 -0
- package/lib/types/files.types.d.ts +27 -0
- package/lib/types/google.types.d.ts +33 -0
- package/lib/types/groups.types.d.ts +22 -0
- package/lib/types/images.types.d.ts +56 -0
- package/lib/types/index.d.ts +26 -0
- package/lib/types/index.js +2 -2
- package/lib/types/locations.types.d.ts +22 -0
- package/lib/types/messages.types.d.ts +20 -0
- package/lib/types/notifications.types.d.ts +23 -0
- package/lib/types/payments.types.d.ts +113 -0
- package/lib/types/posts.types.d.ts +32 -0
- package/lib/types/profiles.types.d.ts +20 -0
- package/lib/types/statistics.types.d.ts +3 -0
- package/lib/types/tags.types.d.ts +19 -0
- package/lib/types/users.types.d.ts +110 -0
- package/lib/types/websockets.types.d.ts +22 -0
- package/lib/utils/adapterUtils.d.ts +5 -0
- package/lib/utils/analyticsUtils.d.ts +25 -0
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +70 -0
- package/lib/utils/arangodbUtils.js +3 -3
- package/lib/utils/authUtils.d.ts +23 -0
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/contextUtils.d.ts +3 -0
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.d.ts +10 -0
- package/lib/utils/dbI18n.example.d.ts +20 -0
- package/lib/utils/dbI18n.example.js +3 -3
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +6 -0
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +10 -0
- package/lib/utils/graphqlUtils.js +2 -2
- package/lib/utils/index.d.ts +18 -0
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.d.ts +8 -0
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +11 -0
- package/lib/utils/localeUtils.example.d.ts +5 -0
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/middlewareUtils.d.ts +2 -0
- package/lib/utils/middlewareUtils.js +2 -2
- package/lib/utils/sessionUtils.d.ts +18 -0
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +7 -0
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.d.ts +3 -0
- package/lib/utils/testUtils.d.ts +95 -0
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +29 -0
- package/lib/utils/translationQueue.example.d.ts +33 -0
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/package.json +22 -21
- package/tsconfig.build.json +21 -0
- package/tsconfig.lint.json +33 -0
- package/tsconfig.test.json +31 -0
- package/dist/actions/apps.js +0 -242
- package/dist/actions/connections.js +0 -90
- package/dist/actions/conversations.js +0 -350
- package/dist/actions/dynamodb.js +0 -150
- package/dist/actions/email.js +0 -152
- package/dist/actions/files.js +0 -283
- package/dist/actions/groups.js +0 -292
- package/dist/actions/images.js +0 -735
- package/dist/actions/index.js +0 -66
- package/dist/actions/ios.js +0 -164
- package/dist/actions/locations.js +0 -122
- package/dist/actions/messages.js +0 -208
- package/dist/actions/notifications.js +0 -59
- package/dist/actions/payments.js +0 -497
- package/dist/actions/personas.js +0 -110
- package/dist/actions/posts.js +0 -595
- package/dist/actions/reactions.js +0 -322
- package/dist/actions/s3.js +0 -133
- package/dist/actions/search.js +0 -90
- package/dist/actions/sms.js +0 -108
- package/dist/actions/statistics.js +0 -62
- package/dist/actions/subscription.js +0 -220
- package/dist/actions/tags.js +0 -292
- package/dist/actions/users.js +0 -784
- package/dist/actions/websockets.js +0 -174
- package/dist/adapters/arangoAdapter.js +0 -46
- package/dist/adapters/fileAdapter.js +0 -76
- package/dist/adapters/imageAdapter.js +0 -40
- package/dist/adapters/messageAdapter.js +0 -49
- package/dist/adapters/postAdapter.js +0 -70
- package/dist/adapters/reaktorAdapter.js +0 -44
- package/dist/adapters/tagAdapter.js +0 -50
- package/dist/adapters/userAdapter.js +0 -115
- package/dist/config.js +0 -125
- package/dist/index.js +0 -66
- package/dist/lambdas/actions/websockets.js +0 -132
- package/dist/lambdas/authorizer.js +0 -67
- package/dist/lambdas/connection.js +0 -91
- package/dist/lambdas/utils/message.js +0 -42
- package/dist/lambdas/utils/websocket.js +0 -105
- package/dist/mocks/conversation.js +0 -35
- package/dist/mocks/file.js +0 -38
- package/dist/mocks/group.js +0 -47
- package/dist/mocks/image.js +0 -44
- package/dist/mocks/nlabs.png +0 -0
- package/dist/mocks/post.js +0 -55
- package/dist/mocks/tag.js +0 -37
- package/dist/mocks/user.js +0 -88
- package/dist/mutations/index.js +0 -26
- package/dist/mutations/locations.js +0 -44
- package/dist/mutations/messages.js +0 -86
- package/dist/mutations/personas.js +0 -100
- package/dist/mutations/posts.js +0 -53
- package/dist/mutations/reactions.js +0 -51
- package/dist/mutations/statistics.js +0 -39
- package/dist/mutations/subscriptions.js +0 -56
- package/dist/mutations/tags.js +0 -120
- package/dist/mutations/users.js +0 -116
- package/dist/objectTypes/app.js +0 -173
- package/dist/objectTypes/bankAccount.js +0 -76
- package/dist/objectTypes/connection.js +0 -48
- package/dist/objectTypes/conversation.js +0 -77
- package/dist/objectTypes/creditCard.js +0 -86
- package/dist/objectTypes/document.js +0 -46
- package/dist/objectTypes/error.js +0 -46
- package/dist/objectTypes/external.js +0 -74
- package/dist/objectTypes/file.js +0 -100
- package/dist/objectTypes/filter.js +0 -43
- package/dist/objectTypes/group.js +0 -123
- package/dist/objectTypes/iapSubscription.js +0 -40
- package/dist/objectTypes/image.js +0 -129
- package/dist/objectTypes/index.js +0 -68
- package/dist/objectTypes/location.js +0 -109
- package/dist/objectTypes/message.js +0 -96
- package/dist/objectTypes/passcode.js +0 -42
- package/dist/objectTypes/persona.js +0 -87
- package/dist/objectTypes/plan.js +0 -95
- package/dist/objectTypes/post.js +0 -125
- package/dist/objectTypes/reaction.js +0 -61
- package/dist/objectTypes/relation.js +0 -49
- package/dist/objectTypes/search.js +0 -72
- package/dist/objectTypes/statistics.js +0 -39
- package/dist/objectTypes/subscription.js +0 -117
- package/dist/objectTypes/tag.js +0 -65
- package/dist/objectTypes/user.js +0 -144
- package/dist/queries/index.js +0 -33
- package/dist/queries/locations.js +0 -45
- package/dist/queries/messages.js +0 -52
- package/dist/queries/posts.js +0 -154
- package/dist/queries/reactions.js +0 -56
- package/dist/queries/statistics.js +0 -39
- package/dist/queries/subscriptions.js +0 -44
- package/dist/queries/tags.js +0 -75
- package/dist/queries/users.js +0 -64
- package/dist/templates/email/layout.js +0 -302
- package/dist/templates/email/passwordForgot.js +0 -38
- package/dist/templates/email/passwordRecovery.js +0 -35
- package/dist/templates/email/verifyEmail.js +0 -38
- package/dist/templates/email/welcome.js +0 -38
- package/dist/templates/sms/passwordForgot.js +0 -24
- package/dist/templates/sms/passwordRecovery.js +0 -24
- package/dist/templates/sms/verifyEmail.js +0 -24
- package/dist/templates/sms/verifyPhone.js +0 -24
- package/dist/templates/sms/welcome.js +0 -24
- package/dist/types/apps.js +0 -32
- package/dist/types/arangodb.js +0 -16
- package/dist/types/auth.js +0 -16
- package/dist/types/connections.js +0 -16
- package/dist/types/conversations.js +0 -16
- package/dist/types/email.js +0 -16
- package/dist/types/error.js +0 -44
- package/dist/types/files.js +0 -16
- package/dist/types/google.js +0 -16
- package/dist/types/groups.js +0 -16
- package/dist/types/images.js +0 -16
- package/dist/types/index.js +0 -60
- package/dist/types/locations.js +0 -16
- package/dist/types/messages.js +0 -16
- package/dist/types/notifications.js +0 -16
- package/dist/types/payments.js +0 -16
- package/dist/types/personas.js +0 -16
- package/dist/types/posts.js +0 -16
- package/dist/types/statistics.js +0 -16
- package/dist/types/tags.js +0 -16
- package/dist/types/users.js +0 -16
- package/dist/types/websockets.js +0 -16
- package/dist/utils/adapterUtils.js +0 -45
- package/dist/utils/analyticsUtils.js +0 -72
- package/dist/utils/arangodbUtils.js +0 -165
- package/dist/utils/auth.js +0 -57
- package/dist/utils/index.js +0 -30
- package/dist/utils/session.js +0 -60
- package/jest.config.js +0 -17
- package/jest.setup.js +0 -36
- package/lex.config.cjs +0 -13
- package/lib/mutations/locations.integration.js +0 -2
- package/lib/mutations/messages.integration.js +0 -2
- package/lib/mutations/posts.integration.js +0 -2
- package/lib/mutations/profiles.integration.js +0 -2
- package/lib/mutations/reactions.integration.js +0 -2
- package/lib/mutations/statistics.integration.js +0 -2
- package/lib/mutations/subscriptions.integration.js +0 -2
- package/lib/mutations/tags.integration.js +0 -2
- package/lib/mutations/users.integration.js +0 -2
- package/lib/queries/locations.integration.js +0 -2
- package/lib/queries/messages.integration.js +0 -2
- package/lib/queries/posts.integration.js +0 -2
- package/lib/queries/reactions.integration.js +0 -2
- package/lib/queries/tags.integration.js +0 -2
- package/lib/queries/users.integration.js +0 -2
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var connections_exports = {};
|
|
19
|
-
__export(connections_exports, {
|
|
20
|
-
addConnection: () => addConnection,
|
|
21
|
-
deleteConnection: () => deleteConnection,
|
|
22
|
-
getConnection: () => getConnection
|
|
23
|
-
});
|
|
24
|
-
module.exports = __toCommonJS(connections_exports);
|
|
25
|
-
var import_utils = require("@nlabs/utils");
|
|
26
|
-
var import_aql = require("arangojs/aql");
|
|
27
|
-
var import_error = require("../types/error");
|
|
28
|
-
var import_utils2 = require("../utils");
|
|
29
|
-
const eventCategory = "connections";
|
|
30
|
-
const addConnection = (context, fromType, fromId, toType, toId, value) => {
|
|
31
|
-
const action = "addConnection";
|
|
32
|
-
const { database } = context;
|
|
33
|
-
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
34
|
-
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
35
|
-
const insert = {
|
|
36
|
-
_from: formatFromDocId,
|
|
37
|
-
_to: formatToDocId,
|
|
38
|
-
isDirect: true,
|
|
39
|
-
type: toType,
|
|
40
|
-
value: !!value ? (0, import_utils.parseString)(value, 32) : void 0
|
|
41
|
-
};
|
|
42
|
-
const aqlQry = import_aql.aql`INSERT ${insert} IN hasConnection`;
|
|
43
|
-
return database.query(aqlQry).then(() => true).catch((error) => {
|
|
44
|
-
(0, import_utils2.logError)({
|
|
45
|
-
action,
|
|
46
|
-
category: eventCategory,
|
|
47
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
48
|
-
}, error, context);
|
|
49
|
-
return false;
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
const getConnection = (context, fromType, fromId, toType, toId) => {
|
|
53
|
-
const action = "getConnection";
|
|
54
|
-
const { database } = context;
|
|
55
|
-
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
56
|
-
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
57
|
-
const aqlQry = import_aql.aql`FOR hc in hasConnection
|
|
58
|
-
FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
|
|
59
|
-
LIMIT 1`;
|
|
60
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_utils2.logError)({
|
|
61
|
-
action,
|
|
62
|
-
category: eventCategory,
|
|
63
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
64
|
-
}, error, context));
|
|
65
|
-
};
|
|
66
|
-
const deleteConnection = (context, fromType, fromId, toType, toId) => {
|
|
67
|
-
const action = "deleteReactionByItem";
|
|
68
|
-
const { database } = context;
|
|
69
|
-
const formatFromDocId = (0, import_utils.parseArangoId)(`${fromType}/${fromId}`);
|
|
70
|
-
const formatToDocId = (0, import_utils.parseArangoId)(`${toType}/${toId}`);
|
|
71
|
-
const aqlQry = import_aql.aql`FOR hc in hasConnection
|
|
72
|
-
FILTER hc._from == ${formatFromDocId} && hc._to == ${formatToDocId}
|
|
73
|
-
LIMIT 1
|
|
74
|
-
REMOVE hc IN hasConnection`;
|
|
75
|
-
return database.query(aqlQry).then(() => true).catch((error) => {
|
|
76
|
-
(0, import_utils2.logError)({
|
|
77
|
-
action,
|
|
78
|
-
category: eventCategory,
|
|
79
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
80
|
-
}, error, context);
|
|
81
|
-
return false;
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
85
|
-
0 && (module.exports = {
|
|
86
|
-
addConnection,
|
|
87
|
-
deleteConnection,
|
|
88
|
-
getConnection
|
|
89
|
-
});
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29ubmVjdGlvbnMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7cGFyc2VBcmFuZ29JZCwgcGFyc2VTdHJpbmd9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQge2FxbCwgdHlwZSBBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvcic7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0LCBDb25uZWN0aW9uVHlwZX0gZnJvbSAnLi4vdHlwZXMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29ubmVjdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgYWRkQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmcsXG4gIHZhbHVlPzogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkQ29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICBfZnJvbTogZm9ybWF0RnJvbURvY0lkLFxuICAgIF90bzogZm9ybWF0VG9Eb2NJZCxcbiAgICBpc0RpcmVjdDogdHJ1ZSxcbiAgICB0eXBlOiB0b1R5cGUsXG4gICAgdmFsdWU6ICEhdmFsdWUgPyBwYXJzZVN0cmluZyh2YWx1ZSwgMzIpIDogdW5kZWZpbmVkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBoYXNDb25uZWN0aW9uYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBmcm9tVHlwZTogc3RyaW5nLFxuICBmcm9tSWQ6IHN0cmluZyxcbiAgdG9UeXBlOiBzdHJpbmcsXG4gIHRvSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb25uZWN0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG5cbiAgY29uc3QgZm9ybWF0RnJvbURvY0lkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKGAke2Zyb21UeXBlfS8ke2Zyb21JZH1gKTtcbiAgY29uc3QgZm9ybWF0VG9Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHt0b1R5cGV9LyR7dG9JZH1gKTtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBpbiBoYXNDb25uZWN0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7Zm9ybWF0RnJvbURvY0lkfSAmJiBoYy5fdG8gPT0gJHtmb3JtYXRUb0RvY0lkfVxuICAgIExJTUlUIDFgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlQ29ubmVjdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgZnJvbVR5cGU6IHN0cmluZyxcbiAgZnJvbUlkOiBzdHJpbmcsXG4gIHRvVHlwZTogc3RyaW5nLFxuICB0b0lkOiBzdHJpbmdcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdkZWxldGVSZWFjdGlvbkJ5SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIGNvbnN0IGZvcm1hdEZyb21Eb2NJZDogc3RyaW5nID0gcGFyc2VBcmFuZ29JZChgJHtmcm9tVHlwZX0vJHtmcm9tSWR9YCk7XG4gIGNvbnN0IGZvcm1hdFRvRG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoYCR7dG9UeXBlfS8ke3RvSWR9YCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgaW4gaGFzQ29ubmVjdGlvblxuICAgIEZJTFRFUiBoYy5fZnJvbSA9PSAke2Zvcm1hdEZyb21Eb2NJZH0gJiYgaGMuX3RvID09ICR7Zm9ybWF0VG9Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVNT1ZFIGhjIElOIGhhc0Nvbm5lY3Rpb25gO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBeUM7QUFDekMsaUJBQWlDO0FBRWpDLG1CQUF5QjtBQUN6QixJQUFBQSxnQkFBdUI7QUFJdkIsTUFBTSxnQkFBd0I7QUFFdkIsTUFBTSxnQkFBZ0IsQ0FDM0IsU0FDQSxVQUNBLFFBQ0EsUUFDQSxNQUNBLFVBQ3FCO0FBQ3JCLFFBQU0sU0FBaUI7QUFDdkIsUUFBTSxFQUFDLFNBQVEsSUFBSTtBQUVuQixRQUFNLHNCQUEwQiw0QkFBYyxHQUFHLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFDckUsUUFBTSxvQkFBd0IsNEJBQWMsR0FBRyxNQUFNLElBQUksSUFBSSxFQUFFO0FBQy9ELFFBQU0sU0FBUztBQUFBLElBQ2IsT0FBTztBQUFBLElBQ1AsS0FBSztBQUFBLElBQ0wsVUFBVTtBQUFBLElBQ1YsTUFBTTtBQUFBLElBQ04sT0FBTyxDQUFDLENBQUMsWUFBUSwwQkFBWSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQzVDO0FBQ0EsUUFBTSxTQUFtQix3QkFBYSxNQUFNO0FBRTVDLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxNQUFNLElBQUksRUFDZixNQUFNLENBQUMsVUFBaUI7QUFDdkIsZ0NBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQSxVQUFVO0FBQUEsTUFDVixPQUFPLHdCQUFXO0FBQUEsSUFDcEIsR0FBRyxPQUFPLE9BQU87QUFDakIsV0FBTztBQUFBLEVBQ1QsQ0FBQztBQUNMO0FBRU8sTUFBTSxnQkFBZ0IsQ0FDM0IsU0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUM0QjtBQUM1QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFFbkIsUUFBTSxzQkFBMEIsNEJBQWMsR0FBRyxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JFLFFBQU0sb0JBQXdCLDRCQUFjLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRTtBQUUvRCxRQUFNLFNBQW1CO0FBQUEseUJBQ0YsZUFBZSxpQkFBaUIsYUFBYTtBQUFBO0FBR3BFLFNBQU8sU0FBUyxNQUFNLE1BQU0sRUFDekIsS0FBSyxDQUFDLFdBQVcsT0FBTyxLQUFLLENBQUMsRUFDOUIsTUFBTSxDQUFDLGNBQWlCLHdCQUFTO0FBQUEsSUFDaEM7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWLE9BQU8sd0JBQVc7QUFBQSxFQUNwQixHQUFHLE9BQU8sT0FBTyxDQUFDO0FBQ3RCO0FBRU8sTUFBTSxtQkFBbUIsQ0FDOUIsU0FDQSxVQUNBLFFBQ0EsUUFDQSxTQUNxQjtBQUNyQixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFFbkIsUUFBTSxzQkFBMEIsNEJBQWMsR0FBRyxRQUFRLElBQUksTUFBTSxFQUFFO0FBQ3JFLFFBQU0sb0JBQXdCLDRCQUFjLEdBQUcsTUFBTSxJQUFJLElBQUksRUFBRTtBQUUvRCxRQUFNLFNBQW1CO0FBQUEseUJBQ0YsZUFBZSxpQkFBaUIsYUFBYTtBQUFBO0FBQUE7QUFJcEUsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLE1BQU0sSUFBSSxFQUNmLE1BQU0sQ0FBQyxVQUFpQjtBQUN2QixnQ0FBUztBQUFBLE1BQ1A7QUFBQSxNQUNBLFVBQVU7QUFBQSxNQUNWLE9BQU8sd0JBQVc7QUFBQSxJQUNwQixHQUFHLE9BQU8sT0FBTztBQUNqQixXQUFPO0FBQUEsRUFDVCxDQUFDO0FBQ0w7IiwKICAibmFtZXMiOiBbImltcG9ydF91dGlscyJdCn0K
|
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
var __create = Object.create;
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
-
var __export = (target, all) => {
|
|
8
|
-
for (var name in all)
|
|
9
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
-
};
|
|
11
|
-
var __copyProps = (to, from, except, desc) => {
|
|
12
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
-
for (let key of __getOwnPropNames(from))
|
|
14
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
-
}
|
|
17
|
-
return to;
|
|
18
|
-
};
|
|
19
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
-
mod
|
|
26
|
-
));
|
|
27
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
-
var conversations_exports = {};
|
|
29
|
-
__export(conversations_exports, {
|
|
30
|
-
addDirectConversation: () => addDirectConversation,
|
|
31
|
-
addUserToConversation: () => addUserToConversation,
|
|
32
|
-
deleteUserFromConversation: () => deleteUserFromConversation,
|
|
33
|
-
getConnectionUsers: () => getConnectionUsers,
|
|
34
|
-
getConversation: () => getConversation,
|
|
35
|
-
getConversationUsers: () => getConversationUsers,
|
|
36
|
-
getConversations: () => getConversations,
|
|
37
|
-
getDirectConversation: () => getDirectConversation,
|
|
38
|
-
parseConversationOptions: () => parseConversationOptions,
|
|
39
|
-
updateConversation: () => updateConversation
|
|
40
|
-
});
|
|
41
|
-
module.exports = __toCommonJS(conversations_exports);
|
|
42
|
-
var import_utils = require("@nlabs/utils");
|
|
43
|
-
var import_arangojs = require("arangojs");
|
|
44
|
-
var import_cloneDeep = __toESM(require("lodash/cloneDeep"), 1);
|
|
45
|
-
var import_images = require("./images");
|
|
46
|
-
var import_users = require("./users");
|
|
47
|
-
var import_config = require("../config");
|
|
48
|
-
var import_error = require("../types/error");
|
|
49
|
-
var import_analyticsUtils = require("../utils/analyticsUtils");
|
|
50
|
-
var import_arangodbUtils = require("../utils/arangodbUtils");
|
|
51
|
-
const eventCategory = "conversations";
|
|
52
|
-
const parseConversationOptions = (options = {}) => {
|
|
53
|
-
const {
|
|
54
|
-
from = 0,
|
|
55
|
-
to = 30
|
|
56
|
-
} = options;
|
|
57
|
-
return {
|
|
58
|
-
limit: (0, import_arangodbUtils.getLimit)(from, to)
|
|
59
|
-
};
|
|
60
|
-
};
|
|
61
|
-
const getConversations = (context, userId, options) => {
|
|
62
|
-
const action = "getConversations";
|
|
63
|
-
const { database } = context;
|
|
64
|
-
const { limit } = parseConversationOptions(options);
|
|
65
|
-
const userDocId = `users/${userId}`;
|
|
66
|
-
const aqlQry = `FOR c, e IN 1..1 OUTBOUND "${userDocId}" hasConversation
|
|
67
|
-
${limit.aql}
|
|
68
|
-
LET users = (
|
|
69
|
-
FOR u, uc IN 1..1 INBOUND c._id hasConversation
|
|
70
|
-
FILTER u._id != "${userDocId}"
|
|
71
|
-
RETURN u
|
|
72
|
-
)
|
|
73
|
-
RETURN MERGE(c, {users: users})`;
|
|
74
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
|
|
75
|
-
(0, import_analyticsUtils.logError)({
|
|
76
|
-
action,
|
|
77
|
-
category: eventCategory,
|
|
78
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
79
|
-
}, error, context);
|
|
80
|
-
return [];
|
|
81
|
-
});
|
|
82
|
-
};
|
|
83
|
-
const getDirectConversation = async (context, {
|
|
84
|
-
fromId,
|
|
85
|
-
toId,
|
|
86
|
-
toUser
|
|
87
|
-
}) => {
|
|
88
|
-
const action = "getDirectConversation";
|
|
89
|
-
const { database } = context;
|
|
90
|
-
try {
|
|
91
|
-
const formatFromId = (0, import_utils.parseId)(fromId);
|
|
92
|
-
const formatToId = (0, import_utils.parseId)(toId);
|
|
93
|
-
const userIds = [formatFromId, formatToId];
|
|
94
|
-
const sortedUserIds = (0, import_arangodbUtils.sortIds)(userIds);
|
|
95
|
-
const conversationId = (0, import_utils.createHash)(`conversations-${sortedUserIds.join("-")}`, null);
|
|
96
|
-
const user = toUser || await (0, import_users.getUser)(context, { userId: formatToId });
|
|
97
|
-
const aqlQry = import_arangojs.aql`LET c = DOCUMENT(${`conversations/${conversationId}`}) RETURN c`;
|
|
98
|
-
const conversation = await database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
99
|
-
action,
|
|
100
|
-
category: eventCategory,
|
|
101
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
102
|
-
}, error, context));
|
|
103
|
-
if (conversation) {
|
|
104
|
-
return { ...conversation, users: [user] };
|
|
105
|
-
}
|
|
106
|
-
return addDirectConversation(context, { fromId, toId, toUser: user });
|
|
107
|
-
} catch (databaseError) {
|
|
108
|
-
return (0, import_analyticsUtils.logError)({
|
|
109
|
-
action,
|
|
110
|
-
category: eventCategory,
|
|
111
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
112
|
-
}, databaseError, context);
|
|
113
|
-
}
|
|
114
|
-
};
|
|
115
|
-
const addDirectConversation = async (context, {
|
|
116
|
-
fromId,
|
|
117
|
-
toId,
|
|
118
|
-
toUser
|
|
119
|
-
}) => {
|
|
120
|
-
const action = "getDirectConversation";
|
|
121
|
-
const { database } = context;
|
|
122
|
-
try {
|
|
123
|
-
const formatFromId = (0, import_utils.parseId)(fromId);
|
|
124
|
-
const formatToId = (0, import_utils.parseId)(toId);
|
|
125
|
-
const userIds = [formatFromId, formatToId];
|
|
126
|
-
const sortedUserIds = (0, import_arangodbUtils.sortIds)([formatFromId, formatToId]);
|
|
127
|
-
const user = toUser || await (0, import_users.getUser)(context, { userId: formatToId });
|
|
128
|
-
const conversationId = (0, import_utils.createHash)(`conversations-${sortedUserIds.join("-")}`, null);
|
|
129
|
-
const now = Date.now();
|
|
130
|
-
const insert = {
|
|
131
|
-
_key: conversationId,
|
|
132
|
-
added: now,
|
|
133
|
-
isDirect: true,
|
|
134
|
-
modified: now
|
|
135
|
-
};
|
|
136
|
-
const insertQuery = import_arangojs.aql`INSERT ${insert} IN conversations RETURN NEW`;
|
|
137
|
-
const updatedConversation = await database.query(insertQuery).then((cursor) => cursor.next());
|
|
138
|
-
await Promise.all(userIds.map((userId) => {
|
|
139
|
-
const edgeId = (0, import_utils.createHash)(`hasConversation-${userId}-${conversationId}`);
|
|
140
|
-
const edge = {
|
|
141
|
-
_from: `users/${userId}`,
|
|
142
|
-
_key: edgeId,
|
|
143
|
-
_to: `conversations/${conversationId}`,
|
|
144
|
-
added: Date.now()
|
|
145
|
-
};
|
|
146
|
-
const insertEdgeQuery = import_arangojs.aql`INSERT ${edge} IN hasConversation RETURN NEW`;
|
|
147
|
-
return database.query(insertEdgeQuery);
|
|
148
|
-
}));
|
|
149
|
-
return { ...updatedConversation, users: [user] };
|
|
150
|
-
} catch (databaseError) {
|
|
151
|
-
(0, import_analyticsUtils.logError)({
|
|
152
|
-
action,
|
|
153
|
-
category: eventCategory,
|
|
154
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
155
|
-
}, databaseError, context);
|
|
156
|
-
return {};
|
|
157
|
-
}
|
|
158
|
-
};
|
|
159
|
-
const getConnectionUsers = (context, {
|
|
160
|
-
conversationId,
|
|
161
|
-
includeAll = false,
|
|
162
|
-
isDirect
|
|
163
|
-
}) => {
|
|
164
|
-
const action = "getConnectionUsers";
|
|
165
|
-
const { database, session: { userId: sessionUserId } } = context;
|
|
166
|
-
const filters = ["c.userId == u._key"];
|
|
167
|
-
if (!includeAll) {
|
|
168
|
-
filters.push(`u._key != ${sessionUserId}`);
|
|
169
|
-
}
|
|
170
|
-
if (isDirect) {
|
|
171
|
-
filters.push(`p.vertices[0].isDirect == ${isDirect}`);
|
|
172
|
-
}
|
|
173
|
-
const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversation
|
|
174
|
-
OPTIONS {vertexCollections: "users"}
|
|
175
|
-
FOR c IN connections
|
|
176
|
-
FILTER ${filters.join(" && ")}
|
|
177
|
-
RETURN c`;
|
|
178
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
|
|
179
|
-
(0, import_analyticsUtils.logError)({
|
|
180
|
-
action,
|
|
181
|
-
category: eventCategory,
|
|
182
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
183
|
-
}, error, context);
|
|
184
|
-
return [];
|
|
185
|
-
});
|
|
186
|
-
};
|
|
187
|
-
const getConversationUsers = (context, {
|
|
188
|
-
conversationId,
|
|
189
|
-
includeAll = false,
|
|
190
|
-
isDirect
|
|
191
|
-
}) => {
|
|
192
|
-
const action = "getConversationUsers";
|
|
193
|
-
const { database, session: { userId: sessionUserId } } = context;
|
|
194
|
-
const filters = ["c.userId == u._key"];
|
|
195
|
-
if (!includeAll) {
|
|
196
|
-
filters.push(`u._key != ${sessionUserId}`);
|
|
197
|
-
}
|
|
198
|
-
if (isDirect) {
|
|
199
|
-
filters.push(`p.vertices[0].isDirect == ${isDirect}`);
|
|
200
|
-
}
|
|
201
|
-
const aqlQry = import_arangojs.aql`FOR u, e,p IN 1..1 INBOUND ${`conversations/${conversationId}`} hasConversation
|
|
202
|
-
OPTIONS {vertexCollections: "users"}
|
|
203
|
-
FILTER ${filters.join(" && ")}
|
|
204
|
-
RETURN u`;
|
|
205
|
-
return database.query(aqlQry).then((cursor) => cursor.all()).catch((error) => {
|
|
206
|
-
(0, import_analyticsUtils.logError)({
|
|
207
|
-
action,
|
|
208
|
-
category: eventCategory,
|
|
209
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
210
|
-
}, error, context);
|
|
211
|
-
return [];
|
|
212
|
-
});
|
|
213
|
-
};
|
|
214
|
-
const getConversation = (context, conversationId) => {
|
|
215
|
-
const action = "getItem";
|
|
216
|
-
const { database, session: { userId: sessionId } } = context;
|
|
217
|
-
const sessionDocId = `users/${sessionId}`;
|
|
218
|
-
const conversationDocId = `conversations/${(0, import_utils.parseId)(conversationId)}`;
|
|
219
|
-
const aqlQry = import_arangojs.aql`FOR c, e IN 1..1 OUTBOUND ${sessionDocId} hasConversation
|
|
220
|
-
FILTER c._id == ${conversationDocId}
|
|
221
|
-
LET u = (
|
|
222
|
-
FOR inUser, inEdge IN 1..1 INBOUND ${conversationDocId} hasConversation
|
|
223
|
-
RETURN inUser
|
|
224
|
-
)
|
|
225
|
-
LIMIT 1
|
|
226
|
-
RETURN MERGE(c, {users: u})`;
|
|
227
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation) => {
|
|
228
|
-
if (!conversation) {
|
|
229
|
-
return {};
|
|
230
|
-
}
|
|
231
|
-
conversation.users = conversation.users.map((user) => {
|
|
232
|
-
const { imageId, userId } = user;
|
|
233
|
-
const thumbUrlData = {
|
|
234
|
-
bucket: import_config.Config.get("aws.s3.Bucket"),
|
|
235
|
-
imageDir: "thumbs",
|
|
236
|
-
imageId,
|
|
237
|
-
type: "users",
|
|
238
|
-
typeId: userId
|
|
239
|
-
};
|
|
240
|
-
return {
|
|
241
|
-
...user,
|
|
242
|
-
name: (0, import_users.getDisplayName)(user),
|
|
243
|
-
thumb: (0, import_images.getImageUrl)(thumbUrlData)
|
|
244
|
-
};
|
|
245
|
-
});
|
|
246
|
-
return conversation;
|
|
247
|
-
}).catch((error) => (0, import_analyticsUtils.logError)({
|
|
248
|
-
action,
|
|
249
|
-
category: eventCategory,
|
|
250
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
251
|
-
}, error, context));
|
|
252
|
-
};
|
|
253
|
-
const updateConversation = (context, conversation) => {
|
|
254
|
-
const action = "updateConversation";
|
|
255
|
-
const { database, session: { userId: sessionId } } = context;
|
|
256
|
-
const {
|
|
257
|
-
conversationId = (0, import_utils.createHash)(`conversation-${sessionId} `),
|
|
258
|
-
isDirect = false,
|
|
259
|
-
name
|
|
260
|
-
} = conversation;
|
|
261
|
-
const formatConversationId = (0, import_utils.parseId)(conversationId);
|
|
262
|
-
const now = Date.now();
|
|
263
|
-
const update = {
|
|
264
|
-
isDirect,
|
|
265
|
-
modified: now,
|
|
266
|
-
name
|
|
267
|
-
};
|
|
268
|
-
const insert = {
|
|
269
|
-
...(0, import_cloneDeep.default)(update),
|
|
270
|
-
_key: formatConversationId,
|
|
271
|
-
added: now
|
|
272
|
-
};
|
|
273
|
-
const aqlQry = import_arangojs.aql`UPSERT {_key: ${formatConversationId} }
|
|
274
|
-
INSERT ${insert}
|
|
275
|
-
UPDATE ${update}
|
|
276
|
-
IN conversations RETURN NEW`;
|
|
277
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((conversation2) => conversation2).catch((error) => (0, import_analyticsUtils.logError)({
|
|
278
|
-
action,
|
|
279
|
-
category: eventCategory,
|
|
280
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
281
|
-
}, error, context));
|
|
282
|
-
};
|
|
283
|
-
const addUserToConversation = (context, {
|
|
284
|
-
conversationId,
|
|
285
|
-
userId
|
|
286
|
-
}) => {
|
|
287
|
-
const action = "addUserToConversation";
|
|
288
|
-
const { database } = context;
|
|
289
|
-
const formatConversationId = (0, import_utils.parseId)(conversationId);
|
|
290
|
-
const formatUserId = (0, import_utils.parseId)(userId);
|
|
291
|
-
const conversationDocId = `conversations/${formatConversationId}`;
|
|
292
|
-
const userDocId = `users/${formatUserId}`;
|
|
293
|
-
const aqlQry = import_arangojs.aql`FOR hc IN hasConversation
|
|
294
|
-
FILTER hc._from == ${userDocId} && hc._to == ${conversationDocId}
|
|
295
|
-
LIMIT 1
|
|
296
|
-
RETURN hc`;
|
|
297
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).then((hasConversationEdge) => {
|
|
298
|
-
if (!!hasConversationEdge) {
|
|
299
|
-
return hasConversationEdge;
|
|
300
|
-
}
|
|
301
|
-
const edgeCollection = database.collection("hasConversation");
|
|
302
|
-
const edgeId = (0, import_utils.createHash)(`convo - ${formatConversationId} -${formatUserId} `);
|
|
303
|
-
const edge = {
|
|
304
|
-
_from: userDocId,
|
|
305
|
-
_key: edgeId,
|
|
306
|
-
_to: conversationDocId,
|
|
307
|
-
added: Date.now()
|
|
308
|
-
};
|
|
309
|
-
return edgeCollection.save(edge, { returnNew: true }).then(() => edge);
|
|
310
|
-
}).catch((error) => (0, import_analyticsUtils.logError)({
|
|
311
|
-
action,
|
|
312
|
-
category: eventCategory,
|
|
313
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
314
|
-
}, error, context));
|
|
315
|
-
};
|
|
316
|
-
const deleteUserFromConversation = (context, {
|
|
317
|
-
conversationId,
|
|
318
|
-
userId
|
|
319
|
-
}) => {
|
|
320
|
-
const action = "deleteUserFromConversation";
|
|
321
|
-
const { database } = context;
|
|
322
|
-
const formatConversationId = (0, import_utils.parseId)(conversationId);
|
|
323
|
-
const formatUserId = (0, import_utils.parseId)(userId);
|
|
324
|
-
const conversationDocId = `conversations/${formatConversationId}`;
|
|
325
|
-
const userDocId = `users/${formatUserId}`;
|
|
326
|
-
const aqlQry = import_arangojs.aql`FOR hc IN hasConversation
|
|
327
|
-
FILTER hc._from == ${userDocId} && hc._to == ${conversationDocId}
|
|
328
|
-
LIMIT 1
|
|
329
|
-
REMOVE hc IN hasConversation
|
|
330
|
-
RETURN OLD`;
|
|
331
|
-
return database.query(aqlQry).then((cursor) => cursor.next()).catch((error) => (0, import_analyticsUtils.logError)({
|
|
332
|
-
action,
|
|
333
|
-
category: eventCategory,
|
|
334
|
-
label: import_error.ErrorTypes.DATABASE_ERROR
|
|
335
|
-
}, error, context));
|
|
336
|
-
};
|
|
337
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
338
|
-
0 && (module.exports = {
|
|
339
|
-
addDirectConversation,
|
|
340
|
-
addUserToConversation,
|
|
341
|
-
deleteUserFromConversation,
|
|
342
|
-
getConnectionUsers,
|
|
343
|
-
getConversation,
|
|
344
|
-
getConversationUsers,
|
|
345
|
-
getConversations,
|
|
346
|
-
getDirectConversation,
|
|
347
|
-
parseConversationOptions,
|
|
348
|
-
updateConversation
|
|
349
|
-
});
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvY29udmVyc2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VJZH0gZnJvbSAnQG5sYWJzL3V0aWxzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuaW1wb3J0IHtnZXRJbWFnZVVybH0gZnJvbSAnLi9pbWFnZXMnO1xuaW1wb3J0IHtnZXREaXNwbGF5TmFtZSwgZ2V0VXNlcn0gZnJvbSAnLi91c2Vycyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3InO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMnO1xuaW1wb3J0IHtnZXRMaW1pdCwgc29ydElkc30gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscyc7XG5cbmltcG9ydCB0eXBlIHtcbiAgQXJhbmdvRGJMaW1pdCxcbiAgQ29ubmVjdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvbk9wdGlvbnMsXG4gIENvbnZlcnNhdGlvblR5cGUsXG4gIENvbnZlcnNhdGlvblVzZXJzUGFyYW1zLFxuICBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXMsXG4gIEVkZ2VUeXBlLFxuICBJbWFnZVVybERhdGEsXG4gIFVwZGF0ZUNvbnZlcnNhdGlvblVzZXJQYXJhbXMsXG4gIFVzZXJUeXBlXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoJztcbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5OiBzdHJpbmcgPSAnY29udmVyc2F0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMgPSAob3B0aW9uczogQ29udmVyc2F0aW9uT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuXG4gIHJldHVybiB7XG4gICAgbGltaXQ6IGdldExpbWl0KGZyb20sIHRvKSBhcyBBcmFuZ29EYkxpbWl0XG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9ucyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZywgb3B0aW9ucz8pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZUNvbnZlcnNhdGlvbk9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7dXNlcklkfWA7XG4gIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgXCIke3VzZXJEb2NJZH1cIiBoYXNDb252ZXJzYXRpb25cbiAgICAke2xpbWl0LmFxbH1cbiAgICBMRVQgdXNlcnMgPSAoXG4gICAgICBGT1IgdSwgdWMgSU4gMS4uMSBJTkJPVU5EIGMuX2lkIGhhc0NvbnZlcnNhdGlvblxuICAgICAgRklMVEVSIHUuX2lkICE9IFwiJHt1c2VyRG9jSWR9XCJcbiAgICAgIFJFVFVSTiB1XG4gICAgKVxuICAgIFJFVFVSTiBNRVJHRShjLCB7dXNlcnM6IHVzZXJzfSlgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29udmVyc2F0aW9uVHlwZVtdKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgICByZXR1cm4gW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGlyZWN0Q29udmVyc2F0aW9uID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgZnJvbUlkLFxuICAgIHRvSWQsXG4gICAgdG9Vc2VyXG4gIH06IERpcmVjdENvbnZlcnNhdGlvblBhcmFtc1xuKTogUHJvbWlzZTxDb252ZXJzYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldERpcmVjdENvbnZlcnNhdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZX0gPSBjb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZm9ybWF0RnJvbUlkID0gcGFyc2VJZChmcm9tSWQpO1xuICAgIGNvbnN0IGZvcm1hdFRvSWQgPSBwYXJzZUlkKHRvSWQpO1xuICAgIGNvbnN0IHVzZXJJZHMgPSBbZm9ybWF0RnJvbUlkLCBmb3JtYXRUb0lkXTtcbiAgICBjb25zdCBzb3J0ZWRVc2VySWRzID0gc29ydElkcyh1c2VySWRzKTtcbiAgICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGNyZWF0ZUhhc2goYGNvbnZlcnNhdGlvbnMtJHtzb3J0ZWRVc2VySWRzLmpvaW4oJy0nKX1gLCBudWxsKTtcbiAgICBjb25zdCB1c2VyOiBVc2VyVHlwZSA9IHRvVXNlciB8fCBhd2FpdCBnZXRVc2VyKGNvbnRleHQsIHt1c2VySWQ6IGZvcm1hdFRvSWR9KTtcbiAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYExFVCBjID0gRE9DVU1FTlQoJHtgY29udmVyc2F0aW9ucy8ke2NvbnZlcnNhdGlvbklkfWB9KSBSRVRVUk4gY2A7XG4gICAgY29uc3QgY29udmVyc2F0aW9uID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCkpO1xuXG4gICAgaWYoY29udmVyc2F0aW9uKSB7XG4gICAgICByZXR1cm4gey4uLmNvbnZlcnNhdGlvbiwgdXNlcnM6IFt1c2VyXX07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZERpcmVjdENvbnZlcnNhdGlvbihjb250ZXh0LCB7ZnJvbUlkLCB0b0lkLCB0b1VzZXI6IHVzZXJ9KTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgcmV0dXJuIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBkYXRhYmFzZUVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFkZERpcmVjdENvbnZlcnNhdGlvbiA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGZyb21JZCxcbiAgICB0b0lkLFxuICAgIHRvVXNlclxuICB9OiBEaXJlY3RDb252ZXJzYXRpb25QYXJhbXNcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGZvcm1hdEZyb21JZCA9IHBhcnNlSWQoZnJvbUlkKTtcbiAgICBjb25zdCBmb3JtYXRUb0lkID0gcGFyc2VJZCh0b0lkKTtcbiAgICBjb25zdCB1c2VySWRzID0gW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF07XG4gICAgY29uc3Qgc29ydGVkVXNlcklkcyA9IHNvcnRJZHMoW2Zvcm1hdEZyb21JZCwgZm9ybWF0VG9JZF0pO1xuICAgIGNvbnN0IHVzZXI6IFVzZXJUeXBlID0gdG9Vc2VyIHx8IGF3YWl0IGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogZm9ybWF0VG9JZH0pO1xuICAgIGNvbnN0IGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9ucy0ke3NvcnRlZFVzZXJJZHMuam9pbignLScpfWAsIG51bGwpO1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3QgaW5zZXJ0ID0ge1xuICAgICAgX2tleTogY29udmVyc2F0aW9uSWQsXG4gICAgICBhZGRlZDogbm93LFxuICAgICAgaXNEaXJlY3Q6IHRydWUsXG4gICAgICBtb2RpZmllZDogbm93XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnRRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuICAgIGNvbnN0IHVwZGF0ZWRDb252ZXJzYXRpb24gPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShpbnNlcnRRdWVyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwodXNlcklkcy5tYXAoKHVzZXJJZCkgPT4ge1xuICAgICAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBoYXNDb252ZXJzYXRpb24tJHt1c2VySWR9LSR7Y29udmVyc2F0aW9uSWR9YCk7XG4gICAgICBjb25zdCBlZGdlOiBFZGdlVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IGB1c2Vycy8ke3VzZXJJZH1gLFxuICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgIF90bzogYGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcbiAgICAgIGNvbnN0IGluc2VydEVkZ2VRdWVyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7ZWRnZX0gSU4gaGFzQ29udmVyc2F0aW9uIFJFVFVSTiBORVdgO1xuICAgICAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGluc2VydEVkZ2VRdWVyeSk7XG4gICAgfSkpO1xuXG4gICAgcmV0dXJuIHsuLi51cGRhdGVkQ29udmVyc2F0aW9uLCB1c2VyczogW3VzZXJdfTtcbiAgfSBjYXRjaChkYXRhYmFzZUVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGRhdGFiYXNlRXJyb3IsIGNvbnRleHQpO1xuICAgIHJldHVybiB7fTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbm5lY3Rpb25Vc2VycyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGluY2x1ZGVBbGwgPSBmYWxzZSxcbiAgICBpc0RpcmVjdFxuICB9OiBDb252ZXJzYXRpb25Vc2Vyc1BhcmFtc1xuKTogUHJvbWlzZTxDb25uZWN0aW9uVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldENvbm5lY3Rpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZPUiBjIElOIGNvbm5lY3Rpb25zXG4gICAgRklMVEVSICR7ZmlsdGVycy5qb2luKCcgJiYgJyl9XG4gICAgUkVUVVJOIGNgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgQ29ubmVjdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENvbnZlcnNhdGlvblVzZXJzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7XG4gICAgY29udmVyc2F0aW9uSWQsXG4gICAgaW5jbHVkZUFsbCA9IGZhbHNlLFxuICAgIGlzRGlyZWN0XG4gIH06IENvbnZlcnNhdGlvblVzZXJzUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRDb252ZXJzYXRpb25Vc2Vycyc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvblVzZXJJZH19ID0gY29udGV4dDtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbJ2MudXNlcklkID09IHUuX2tleSddO1xuXG4gIGlmKCFpbmNsdWRlQWxsKSB7XG4gICAgZmlsdGVycy5wdXNoKGB1Ll9rZXkgIT0gJHtzZXNzaW9uVXNlcklkfWApO1xuICB9XG4gIGlmKGlzRGlyZWN0KSB7XG4gICAgZmlsdGVycy5wdXNoKGBwLnZlcnRpY2VzWzBdLmlzRGlyZWN0ID09ICR7aXNEaXJlY3R9YCk7XG4gIH1cblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB1LCBlLHAgSU4gMS4uMSBJTkJPVU5EICR7YGNvbnZlcnNhdGlvbnMvJHtjb252ZXJzYXRpb25JZH1gfSBoYXNDb252ZXJzYXRpb25cbiAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogXCJ1c2Vyc1wifVxuICAgIEZJTFRFUiAke2ZpbHRlcnMuam9pbignICYmICcpfVxuICAgIFJFVFVSTiB1YDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIENvbnZlcnNhdGlvblR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0pO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGdldERpcmVjdENvbnZlcnNhdGlvbk9sZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuLy8gICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXREaXJlY3RDb252ZXJzYXRpb24nO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbi8vICAgY29uc3Qgc2Vzc2lvbkRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbi8vICAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHVzZXJJZCk7XG5cbi8vICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgZnJvbSA9IChcbi8vICAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtzZXNzaW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuLy8gICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbi8vICAgICAgIFJFVFVSTiBjXG4vLyAgICAgKVxuLy8gICAgIExFVCB0byA9IChcbi8vICAgICAgIEZPUiBjLCBlIElOIDEuLjEgT1VUQk9VTkQgJHtmb3JtYXRVc2VySWR9IGhhc0NvbnZlcnNhdGlvblxuLy8gICAgICAgRklMVEVSIGMuZGlyZWN0ID09IHRydWVcbi8vICAgICAgIFJFVFVSTiBjXG4vLyAgICAgKVxuLy8gICAgIExFVCBjb252ZXJzYXRpb24gPSBGSVJTVChJTlRFUlNFQ1RJT04oZnJvbSwgdG8pKVxuLy8gICAgIExFVCB1c2VycyA9ICFJU19OVUxMKGNvbnZlcnNhdGlvbikgJiYgKFxuLy8gICAgICAgRk9SIGcgSU5bJHtzZXNzaW9uRG9jSWR9LCAke2Zvcm1hdFVzZXJJZH1dXG4vLyAgICAgICBGT1IgdSBJTiB1c2Vyc1xuLy8gICAgICAgRklMVEVSIGcgPT0gdS5faWRcbi8vICAgICAgIFJFVFVSTiB1XG4vLyAgICAgKVxuLy8gICAgIFJFVFVSTiBJU19OVUxMKGNvbnZlcnNhdGlvbikgPyBudWxsIDogTUVSR0UoY29udmVyc2F0aW9uLCB7dXNlcnM6IHVzZXJzfSlgO1xuXG4vLyAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4vLyAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbi8vICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuLy8gICAgICAgYWN0aW9uLFxuLy8gICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4vLyAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuLy8gICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udmVyc2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcpOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0SXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtwYXJzZUlkKGNvbnZlcnNhdGlvbklkKX1gO1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGMsIGUgSU4gMS4uMSBPVVRCT1VORCAke3Nlc3Npb25Eb2NJZH0gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGMuX2lkID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTEVUIHUgPSAoXG4gICAgICBGT1IgaW5Vc2VyLCBpbkVkZ2UgSU4gMS4uMSBJTkJPVU5EICR7Y29udmVyc2F0aW9uRG9jSWR9IGhhc0NvbnZlcnNhdGlvblxuICAgICAgUkVUVVJOIGluVXNlclxuICAgIClcbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIE1FUkdFKGMsIHt1c2VyczogdX0pYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgaWYoIWNvbnZlcnNhdGlvbikge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG5cbiAgICAgIGNvbnZlcnNhdGlvbi51c2VycyA9IGNvbnZlcnNhdGlvbi51c2Vycy5tYXAoKHVzZXI6IFVzZXJUeXBlKSA9PiB7XG4gICAgICAgIGNvbnN0IHtpbWFnZUlkLCB1c2VySWR9ID0gdXNlcjtcbiAgICAgICAgY29uc3QgdGh1bWJVcmxEYXRhOiBJbWFnZVVybERhdGEgPSB7XG4gICAgICAgICAgYnVja2V0OiBDb25maWcuZ2V0KCdhd3MuczMuQnVja2V0JyksXG4gICAgICAgICAgaW1hZ2VEaXI6ICd0aHVtYnMnLFxuICAgICAgICAgIGltYWdlSWQsXG4gICAgICAgICAgdHlwZTogJ3VzZXJzJyxcbiAgICAgICAgICB0eXBlSWQ6IHVzZXJJZFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udXNlcixcbiAgICAgICAgICBuYW1lOiBnZXREaXNwbGF5TmFtZSh1c2VyKSxcbiAgICAgICAgICB0aHVtYjogZ2V0SW1hZ2VVcmwodGh1bWJVcmxEYXRhKVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBjb252ZXJzYXRpb247XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ29udmVyc2F0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb252ZXJzYXRpb246IENvbnZlcnNhdGlvblR5cGVcbik6IFByb21pc2U8Q29udmVyc2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICd1cGRhdGVDb252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2UsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkID0gY3JlYXRlSGFzaChgY29udmVyc2F0aW9uLSR7c2Vzc2lvbklkfSBgKSxcbiAgICBpc0RpcmVjdCA9IGZhbHNlLFxuICAgIG5hbWVcbiAgfSA9IGNvbnZlcnNhdGlvbjtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHVwZGF0ZSA9IHtcbiAgICBpc0RpcmVjdCxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIG5hbWVcbiAgfTtcblxuICBjb25zdCBpbnNlcnQgPSB7XG4gICAgLi4uY2xvbmVEZWVwKHVwZGF0ZSksXG4gICAgX2tleTogZm9ybWF0Q29udmVyc2F0aW9uSWQsXG4gICAgYWRkZWQ6IG5vd1xuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdENvbnZlcnNhdGlvbklkfSB9XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiBjb252ZXJzYXRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFVzZXJUb0NvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnYWRkVXNlclRvQ29udmVyc2F0aW9uJztcbiAgY29uc3Qge2RhdGFiYXNlfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdENvbnZlcnNhdGlvbklkOiBzdHJpbmcgPSBwYXJzZUlkKGNvbnZlcnNhdGlvbklkKTtcbiAgY29uc3QgZm9ybWF0VXNlcklkOiBzdHJpbmcgPSBwYXJzZUlkKHVzZXJJZCk7XG4gIGNvbnN0IGNvbnZlcnNhdGlvbkRvY0lkOiBzdHJpbmcgPSBgY29udmVyc2F0aW9ucy8ke2Zvcm1hdENvbnZlcnNhdGlvbklkfWA7XG4gIGNvbnN0IHVzZXJEb2NJZDogc3RyaW5nID0gYHVzZXJzLyR7Zm9ybWF0VXNlcklkfWA7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGhjLl9mcm9tID09ICR7dXNlckRvY0lkfSAmJiBoYy5fdG8gPT0gJHtjb252ZXJzYXRpb25Eb2NJZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIGhjYDtcblxuICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKGhhc0NvbnZlcnNhdGlvbkVkZ2UpID0+IHtcbiAgICAgIGlmKCEhaGFzQ29udmVyc2F0aW9uRWRnZSkge1xuICAgICAgICByZXR1cm4gaGFzQ29udmVyc2F0aW9uRWRnZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb246IEVkZ2VDb2xsZWN0aW9uID0gZGF0YWJhc2UuY29sbGVjdGlvbignaGFzQ29udmVyc2F0aW9uJyk7XG4gICAgICBjb25zdCBlZGdlSWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYGNvbnZvIC0gJHtmb3JtYXRDb252ZXJzYXRpb25JZH0gLSR7Zm9ybWF0VXNlcklkfSBgKTtcblxuICAgICAgY29uc3QgZWRnZTogQ29udmVyc2F0aW9uVHlwZSA9IHtcbiAgICAgICAgX2Zyb206IHVzZXJEb2NJZCxcbiAgICAgICAgX2tleTogZWRnZUlkLFxuICAgICAgICBfdG86IGNvbnZlcnNhdGlvbkRvY0lkLFxuICAgICAgICBhZGRlZDogRGF0ZS5ub3coKVxuICAgICAgfTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uXG4gICAgICAgIC5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KVxuICAgICAgICAudGhlbigoKSA9PiBlZGdlKTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWxldGVVc2VyRnJvbUNvbnZlcnNhdGlvbiA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZFxuICB9OiBVcGRhdGVDb252ZXJzYXRpb25Vc2VyUGFyYW1zXG4pOiBQcm9taXNlPENvbnZlcnNhdGlvblR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZGVsZXRlVXNlckZyb21Db252ZXJzYXRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2V9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3QgY29udmVyc2F0aW9uRG9jSWQ6IHN0cmluZyA9IGBjb252ZXJzYXRpb25zLyR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9YDtcbiAgY29uc3QgdXNlckRvY0lkOiBzdHJpbmcgPSBgdXNlcnMvJHtmb3JtYXRVc2VySWR9YDtcblxuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBoYyBJTiBoYXNDb252ZXJzYXRpb25cbiAgICBGSUxURVIgaGMuX2Zyb20gPT0gJHt1c2VyRG9jSWR9ICYmIGhjLl90byA9PSAke2NvbnZlcnNhdGlvbkRvY0lkfVxuICAgIExJTUlUIDFcbiAgICBSRU1PVkUgaGMgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgcmV0dXJuIGRhdGFiYXNlLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJv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LEVBQ3BCLEdBQUcsT0FBTyxPQUFPLENBQUM7QUFDdEI7QUFFTyxNQUFNLHdCQUF3QixDQUNuQyxTQUNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFDRixNQUM4QjtBQUM5QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFDbkIsUUFBTSwyQkFBK0Isc0JBQVEsY0FBYztBQUMzRCxRQUFNLG1CQUF1QixzQkFBUSxNQUFNO0FBQzNDLFFBQU0sb0JBQTRCLGlCQUFpQixvQkFBb0I7QUFDdkUsUUFBTSxZQUFvQixTQUFTLFlBQVk7QUFFL0MsUUFBTSxTQUFtQjtBQUFBLHlCQUNGLFNBQVMsaUJBQWlCLGlCQUFpQjtBQUFBO0FBQUE7QUFJbEUsU0FBTyxTQUFTLE1BQU0sTUFBTSxFQUN6QixLQUFLLENBQUMsV0FBVyxPQUFPLEtBQUssQ0FBQyxFQUM5QixLQUFLLENBQUMsd0JBQXdCO0FBQzdCLFFBQUcsQ0FBQyxDQUFDLHFCQUFxQjtBQUN4QixhQUFPO0FBQUEsSUFDVDtBQUVBLFVBQU0saUJBQWlDLFNBQVMsV0FBVyxpQkFBaUI7QUFDNUUsVUFBTSxhQUFpQix5QkFBVyxXQUFXLG9CQUFvQixLQUFLLFlBQVksR0FBRztBQUVyRixVQUFNLE9BQXlCO0FBQUEsTUFDN0IsT0FBTztBQUFBLE1BQ1AsTUFBTTtBQUFBLE1BQ04sS0FBSztBQUFBLE1BQ0wsT0FBTyxLQUFLLElBQUk7QUFBQSxJQUNsQjtBQUVBLFdBQU8sZUFDSixLQUFLLE1BQU0sRUFBQyxXQUFXLEtBQUksQ0FBQyxFQUM1QixLQUFLLE1BQU0sSUFBSTtBQUFBLEVBQ3BCLENBQUMsRUFDQSxNQUFNLENBQUMsY0FBaUIsZ0NBQVM7QUFBQSxJQUNoQztBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1YsT0FBTyx3QkFBVztBQUFBLEVBQ3BCLEdBQUcsT0FBTyxPQUFPLENBQUM7QUFDdEI7QUFFTyxNQUFNLDZCQUE2QixDQUN4QyxTQUNBO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFDRixNQUM4QjtBQUM5QixRQUFNLFNBQWlCO0FBQ3ZCLFFBQU0sRUFBQyxTQUFRLElBQUk7QUFDbkIsUUFBTSwyQkFBK0Isc0JBQVEsY0FBYztBQUMzRCxRQUFNLG1CQUF1QixzQkFBUSxNQUFNO0FBQzNDLFFBQU0sb0JBQTRCLGlCQUFpQixvQkFBb0I7QUFDdkUsUUFBTSxZQUFvQixTQUFTLFlBQVk7QUFFL0MsUUFBTSxTQUFtQjtBQUFBLHlCQUNGLFNBQVMsaUJBQWlCLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUtsRSxTQUFPLFNBQVMsTUFBTSxNQUFNLEVBQ3pCLEtBQUssQ0FBQyxXQUFXLE9BQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU0sQ0FBQyxjQUFpQixnQ0FBUztBQUFBLElBQ2hDO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVixPQUFPLHdCQUFXO0FBQUEsRUFDcEIsR0FBRyxPQUFPLE9BQU8sQ0FBQztBQUN0QjsiLAogICJuYW1lcyI6IFsiY2xvbmVEZWVwIiwgImNvbnZlcnNhdGlvbiJdCn0K
|
package/dist/actions/dynamodb.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
-
var __export = (target, all) => {
|
|
6
|
-
for (var name in all)
|
|
7
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
-
};
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var dynamodb_exports = {};
|
|
19
|
-
__export(dynamodb_exports, {
|
|
20
|
-
dynamoDel: () => dynamoDel,
|
|
21
|
-
dynamoGet: () => dynamoGet,
|
|
22
|
-
dynamoGetList: () => dynamoGetList,
|
|
23
|
-
dynamoPut: () => dynamoPut,
|
|
24
|
-
dynamoPutList: () => dynamoPutList,
|
|
25
|
-
dynamoUpdate: () => dynamoUpdate,
|
|
26
|
-
parseDynamoList: () => parseDynamoList
|
|
27
|
-
});
|
|
28
|
-
module.exports = __toCommonJS(dynamodb_exports);
|
|
29
|
-
var import_client_dynamodb = require("@aws-sdk/client-dynamodb");
|
|
30
|
-
var import_config = require("../config");
|
|
31
|
-
const dynamoGet = (params) => new Promise((resolve, reject) => {
|
|
32
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
33
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
34
|
-
region: import_config.Config.get("aws.region")
|
|
35
|
-
});
|
|
36
|
-
params.ConsistentRead = false;
|
|
37
|
-
dynamodb.getItem(params, (error, results) => {
|
|
38
|
-
if (error) {
|
|
39
|
-
return reject(error);
|
|
40
|
-
}
|
|
41
|
-
return resolve(results);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
const parseDynamoList = (results) => {
|
|
45
|
-
const { Items: items = [] } = results;
|
|
46
|
-
const data = [];
|
|
47
|
-
for (let idx = 0, len = items.length; idx < len; idx++) {
|
|
48
|
-
const tmp = items[idx];
|
|
49
|
-
const obj = {};
|
|
50
|
-
let key;
|
|
51
|
-
for (key in tmp) {
|
|
52
|
-
if (tmp.hasOwnProperty(key)) {
|
|
53
|
-
if (tmp[key].S) {
|
|
54
|
-
obj[key] = tmp[key].S.toString();
|
|
55
|
-
} else if (tmp[key].N) {
|
|
56
|
-
obj[key] = parseFloat(tmp[key].N);
|
|
57
|
-
} else {
|
|
58
|
-
obj[key] = tmp[key].B;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
data.push(obj);
|
|
63
|
-
}
|
|
64
|
-
return data;
|
|
65
|
-
};
|
|
66
|
-
const dynamoGetList = (params, startItem) => new Promise((resolve, reject) => {
|
|
67
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
68
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
69
|
-
region: import_config.Config.get("aws.region")
|
|
70
|
-
});
|
|
71
|
-
const { ConsistentRead: consistentRead } = params;
|
|
72
|
-
const updatedParams = { ...params };
|
|
73
|
-
if (startItem) {
|
|
74
|
-
updatedParams.ExclusiveStartKey = startItem;
|
|
75
|
-
}
|
|
76
|
-
if (!consistentRead) {
|
|
77
|
-
updatedParams.ConsistentRead = false;
|
|
78
|
-
}
|
|
79
|
-
const list = [];
|
|
80
|
-
dynamodb.query(updatedParams, (error, output) => {
|
|
81
|
-
if (error) {
|
|
82
|
-
return reject(error);
|
|
83
|
-
}
|
|
84
|
-
list.push(...parseDynamoList(output) || []);
|
|
85
|
-
const { LastEvaluatedKey: lastKey } = output;
|
|
86
|
-
if (lastKey !== void 0) {
|
|
87
|
-
return dynamoGetList(params, lastKey);
|
|
88
|
-
}
|
|
89
|
-
return resolve(list);
|
|
90
|
-
});
|
|
91
|
-
});
|
|
92
|
-
const dynamoPut = (params) => new Promise((resolve, reject) => {
|
|
93
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
94
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
95
|
-
region: import_config.Config.get("aws.region")
|
|
96
|
-
});
|
|
97
|
-
dynamodb.putItem(params, (error, output) => {
|
|
98
|
-
if (error) {
|
|
99
|
-
return reject(error);
|
|
100
|
-
}
|
|
101
|
-
return resolve(output);
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
const dynamoUpdate = (params) => new Promise((resolve, reject) => {
|
|
105
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
106
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
107
|
-
region: import_config.Config.get("aws.region")
|
|
108
|
-
});
|
|
109
|
-
dynamodb.updateItem(params, (error, output) => {
|
|
110
|
-
if (error) {
|
|
111
|
-
return reject(error);
|
|
112
|
-
}
|
|
113
|
-
return resolve(output);
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
const dynamoPutList = (params) => new Promise((resolve, reject) => {
|
|
117
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
118
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
119
|
-
region: import_config.Config.get("aws.region")
|
|
120
|
-
});
|
|
121
|
-
dynamodb.batchWriteItem(params, (error, output) => {
|
|
122
|
-
if (error) {
|
|
123
|
-
return reject(error);
|
|
124
|
-
}
|
|
125
|
-
return resolve(output);
|
|
126
|
-
});
|
|
127
|
-
});
|
|
128
|
-
const dynamoDel = (params) => new Promise((resolve, reject) => {
|
|
129
|
-
const dynamodb = new import_client_dynamodb.DynamoDB({
|
|
130
|
-
credentials: import_config.Config.get("aws.credentials"),
|
|
131
|
-
region: import_config.Config.get("aws.region")
|
|
132
|
-
});
|
|
133
|
-
dynamodb.deleteItem(params, (error, output) => {
|
|
134
|
-
if (error) {
|
|
135
|
-
return reject(error);
|
|
136
|
-
}
|
|
137
|
-
return resolve(output);
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
141
|
-
0 && (module.exports = {
|
|
142
|
-
dynamoDel,
|
|
143
|
-
dynamoGet,
|
|
144
|
-
dynamoGetList,
|
|
145
|
-
dynamoPut,
|
|
146
|
-
dynamoPutList,
|
|
147
|
-
dynamoUpdate,
|
|
148
|
-
parseDynamoList
|
|
149
|
-
});
|
|
150
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge1xuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgQmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZElucHV0LFxuICBEZWxldGVJdGVtQ29tbWFuZE91dHB1dCxcbiAgRHluYW1vREIsXG4gIEdldEl0ZW1Db21tYW5kSW5wdXQsXG4gIEdldEl0ZW1Db21tYW5kT3V0cHV0LFxuICBQdXRJdGVtQ29tbWFuZElucHV0LFxuICBQdXRJdGVtQ29tbWFuZE91dHB1dCxcbiAgUXVlcnlDb21tYW5kSW5wdXQsXG4gIFF1ZXJ5Q29tbWFuZE91dHB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRJbnB1dCxcbiAgVXBkYXRlSXRlbUNvbW1hbmRPdXRwdXRcbn0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZyc7XG5cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdkeW5hbW9kYic7XG5leHBvcnQgY29uc3QgZHluYW1vR2V0ID0gKHBhcmFtczogR2V0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIHBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuXG4gICAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEeW5hbW9MaXN0ID0gKHJlc3VsdHM6IFF1ZXJ5Q29tbWFuZE91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtcyA9IFtdfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIGZvcihsZXQgaWR4OiBudW1iZXIgPSAwLCBsZW4gPSBpdGVtcy5sZW5ndGg7IGlkeCA8IGxlbjsgaWR4KyspIHtcbiAgICBjb25zdCB0bXAgPSBpdGVtc1tpZHhdO1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3Ioa2V5IGluIHRtcCkge1xuICAgICAgaWYodG1wLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgaWYodG1wW2tleV0uUykge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uUy50b1N0cmluZygpO1xuICAgICAgICB9IGVsc2UgaWYodG1wW2tleV0uTikge1xuICAgICAgICAgIG9ialtrZXldID0gcGFyc2VGbG9hdCh0bXBba2V5XS5OKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHRtcFtrZXldLkI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBkYXRhLnB1c2gob2JqKTtcbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb0dldExpc3QgPSAocGFyYW1zOiBRdWVyeUNvbW1hbmRJbnB1dCwgc3RhcnRJdGVtPyk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXRbXT4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG4gICAgY29uc3Qge0NvbnNpc3RlbnRSZWFkOiBjb25zaXN0ZW50UmVhZH0gPSBwYXJhbXM7XG4gICAgY29uc3QgdXBkYXRlZFBhcmFtcyA9IHsuLi5wYXJhbXN9O1xuXG4gICAgaWYoc3RhcnRJdGVtKSB7XG4gICAgICB1cGRhdGVkUGFyYW1zLkV4Y2x1c2l2ZVN0YXJ0S2V5ID0gc3RhcnRJdGVtO1xuICAgIH1cblxuICAgIGlmKCFjb25zaXN0ZW50UmVhZCkge1xuICAgICAgdXBkYXRlZFBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGxpc3QgPSBbXTtcblxuICAgIGR5bmFtb2RiLnF1ZXJ5KHVwZGF0ZWRQYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dDogUXVlcnlDb21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKC4uLihwYXJzZUR5bmFtb0xpc3Qob3V0cHV0KSB8fCBbXSkpO1xuXG4gICAgICBjb25zdCB7TGFzdEV2YWx1YXRlZEtleTogbGFzdEtleX0gPSBvdXRwdXQ7XG5cbiAgICAgIGlmKGxhc3RLZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZHluYW1vR2V0TGlzdChwYXJhbXMsIGxhc3RLZXkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzb2x2ZShsaXN0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXQgPSAocGFyYW1zOiBQdXRJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxQdXRJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi5wdXRJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IFB1dEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vVXBkYXRlID0gKHBhcmFtczogVXBkYXRlSXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8VXBkYXRlSXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIudXBkYXRlSXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dDogVXBkYXRlSXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9QdXRMaXN0ID0gKHBhcmFtczogQmF0Y2hXcml0ZUl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPEJhdGNoV3JpdGVJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi5iYXRjaFdyaXRlSXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIG91dHB1dDogQmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgZHluYW1vRGVsID0gKHBhcmFtczogRGVsZXRlSXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8RGVsZXRlSXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgZHluYW1vZGIuZGVsZXRlSXRlbShwYXJhbXMsIChlcnJvciwgb3V0cHV0OiBEZWxldGVJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUlBLDZCQWNPO0FBRVAsb0JBQXFCO0FBR2QsTUFBTSxZQUFZLENBQUMsV0FDeEIsSUFBSSxRQUFRLENBQUMsU0FBUyxXQUFXO0FBQy9CLFFBQU0sV0FBVyxJQUFJLGdDQUFTO0FBQUEsSUFDNUIsYUFBYSxxQkFBTyxJQUFJLGlCQUFpQjtBQUFBLElBQ3pDLFFBQVEscUJBQU8sSUFBSSxZQUFZO0FBQUEsRUFDakMsQ0FBQztBQUNELFNBQU8saUJBQWlCO0FBRXhCLFdBQVMsUUFBUSxRQUFRLENBQUMsT0FBYyxZQUFrQztBQUN4RSxRQUFHLE9BQU87QUFDUixhQUFPLE9BQU8sS0FBSztBQUFBLElBQ3JCO0FBRUEsV0FBTyxRQUFRLE9BQU87QUFBQSxFQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUVJLE1BQU0sa0JBQWtCLENBQUMsWUFBdUM7QUFDckUsUUFBTSxFQUFDLE9BQU8sUUFBUSxDQUFDLEVBQUMsSUFBSTtBQUM1QixRQUFNLE9BQWMsQ0FBQztBQUdyQixXQUFRLE1BQWMsR0FBRyxNQUFNLE1BQU0sUUFBUSxNQUFNLEtBQUssT0FBTztBQUM3RCxVQUFNLE1BQU0sTUFBTSxHQUFHO0FBQ3JCLFVBQU0sTUFBTSxDQUFDO0FBQ2IsUUFBSTtBQUVKLFNBQUksT0FBTyxLQUFLO0FBQ2QsVUFBRyxJQUFJLGVBQWUsR0FBRyxHQUFHO0FBQzFCLFlBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRztBQUNiLGNBQUksR0FBRyxJQUFJLElBQUksR0FBRyxFQUFF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
|