@nlabs/reaktor 1.6.3 → 1.7.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/LICENSE +74 -201
- package/README.md +48 -16
- package/lib/actions/analytics.d.ts +10 -0
- package/lib/actions/analytics.js +539 -0
- package/lib/actions/apps.js +2 -2
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +2 -2
- package/lib/actions/conversations.js +2 -2
- package/lib/actions/crm.d.ts +5 -1
- package/lib/actions/crm.js +226 -3
- package/lib/actions/crud.js +2 -2
- package/lib/actions/dynamodb.d.ts +1 -1
- package/lib/actions/dynamodb.js +2 -2
- package/lib/actions/email.d.ts +1 -1
- package/lib/actions/email.js +2 -2
- package/lib/actions/files.js +2 -2
- package/lib/actions/flags.d.ts +6 -0
- package/lib/actions/flags.js +147 -0
- package/lib/actions/groups.js +2 -2
- package/lib/actions/images.d.ts +1 -1
- package/lib/actions/images.js +2 -2
- package/lib/actions/index.d.ts +3 -2
- package/lib/actions/index.js +4 -3
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +2 -2
- package/lib/actions/messages.js +2 -2
- package/lib/actions/notifications.d.ts +1 -1
- package/lib/actions/notifications.js +2 -2
- package/lib/actions/payments.d.ts +3 -3
- package/lib/actions/payments.js +144 -189
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.d.ts +0 -4
- package/lib/actions/posts.js +2 -4
- package/lib/actions/query.js +2 -2
- package/lib/actions/reactions.js +2 -2
- package/lib/actions/rum.js +143 -45
- package/lib/actions/s3.d.ts +1 -1
- package/lib/actions/s3.js +2 -2
- package/lib/actions/search.js +2 -2
- package/lib/actions/sms.js +2 -2
- package/lib/actions/statistics.js +2 -2
- package/lib/actions/subscriptions.js +2 -2
- package/lib/actions/tags.js +2 -2
- package/lib/actions/users.js +59 -6
- package/lib/actions/videos.js +2 -2
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +2 -2
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.d.ts +0 -1
- package/lib/adapters/tagAdapter.js +1 -2
- package/lib/adapters/userAdapter.d.ts +0 -1
- package/lib/adapters/userAdapter.js +1 -2
- package/lib/config.js +8 -2
- package/lib/constants/collections.d.ts +5 -1
- package/lib/constants/collections.js +6 -2
- package/lib/handlers/graphqlHandler.d.ts +2 -2
- package/lib/handlers/graphqlHandler.js +2 -19
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/lambdas/actions/websockets.js +2 -2
- package/lib/lambdas/authorizer.js +2 -2
- package/lib/lambdas/connection.js +2 -2
- package/lib/lambdas/utils/message.js +2 -2
- package/lib/lambdas/utils/websocket.d.ts +1 -1
- package/lib/lambdas/utils/websocket.js +2 -2
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.d.ts +1 -0
- package/lib/mutations/analytics/analytics.js +35 -0
- package/lib/mutations/content/content.js +2 -2
- package/lib/mutations/crm/crm.js +18 -4
- package/lib/mutations/events/events.js +2 -2
- package/lib/mutations/flags/flags.d.ts +1 -0
- package/lib/mutations/flags/flags.js +33 -0
- package/lib/mutations/groups/groups.js +2 -2
- package/lib/mutations/images/images.js +2 -2
- package/lib/mutations/index.d.ts +3 -1
- package/lib/mutations/index.js +13 -3
- package/lib/mutations/locations/locations.js +2 -2
- package/lib/mutations/messages/messages.js +2 -2
- package/lib/mutations/personas/personas.js +2 -2
- package/lib/mutations/posts/posts.js +2 -2
- package/lib/mutations/reactions/reactions.js +2 -2
- package/lib/mutations/rum/rum.js +2 -2
- package/lib/mutations/statistics/statistics.js +2 -2
- package/lib/mutations/subscriptions/subscriptions.js +2 -2
- package/lib/mutations/tags/tags.js +2 -2
- package/lib/mutations/users/users.js +30 -17
- package/lib/mutations/videos/videos.js +2 -2
- package/lib/objectTypes/analytics.d.ts +8 -0
- package/lib/objectTypes/analytics.js +147 -0
- package/lib/objectTypes/app.js +2 -2
- package/lib/objectTypes/bankAccount.js +2 -2
- package/lib/objectTypes/connection.js +2 -2
- package/lib/objectTypes/content.js +2 -2
- package/lib/objectTypes/conversation.js +2 -2
- package/lib/objectTypes/creditCard.js +2 -2
- package/lib/objectTypes/crm.d.ts +5 -0
- package/lib/objectTypes/crm.js +64 -2
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +2 -2
- package/lib/objectTypes/event.js +2 -2
- package/lib/objectTypes/external.js +2 -2
- package/lib/objectTypes/file.js +2 -2
- package/lib/objectTypes/filter.js +2 -2
- package/lib/objectTypes/flag.d.ts +1 -0
- package/lib/objectTypes/flag.js +32 -0
- package/lib/objectTypes/group.js +2 -2
- package/lib/objectTypes/iapSubscription.js +2 -2
- package/lib/objectTypes/image.d.ts +1 -1
- package/lib/objectTypes/image.js +2 -2
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +2 -2
- package/lib/objectTypes/message.js +2 -2
- package/lib/objectTypes/passcode.js +2 -2
- package/lib/objectTypes/persona.js +2 -2
- package/lib/objectTypes/plan.js +2 -2
- package/lib/objectTypes/post.js +2 -2
- package/lib/objectTypes/query.js +2 -2
- package/lib/objectTypes/reaction.js +2 -2
- package/lib/objectTypes/relation.js +2 -2
- package/lib/objectTypes/rum.js +4 -4
- package/lib/objectTypes/search.js +2 -2
- package/lib/objectTypes/statistics.js +2 -2
- package/lib/objectTypes/subscription.js +2 -2
- package/lib/objectTypes/tag.js +2 -2
- package/lib/objectTypes/user.js +2 -2
- package/lib/objectTypes/video.d.ts +1 -1
- package/lib/objectTypes/video.js +2 -2
- package/lib/queries/analytics/analytics.d.ts +1 -0
- package/lib/queries/analytics/analytics.js +41 -0
- package/lib/queries/content/content.js +2 -2
- package/lib/queries/crm/crm.js +15 -4
- package/lib/queries/events/events.js +2 -2
- package/lib/queries/flags/flags.d.ts +1 -0
- package/lib/queries/flags/flags.js +16 -0
- package/lib/queries/groups/groups.js +2 -2
- package/lib/queries/images/images.js +2 -2
- package/lib/queries/index.d.ts +3 -1
- package/lib/queries/index.js +13 -3
- package/lib/queries/locations/locations.js +2 -2
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +2 -2
- package/lib/queries/posts/posts.js +2 -2
- package/lib/queries/query/query.js +2 -2
- package/lib/queries/reactions/reactions.js +2 -2
- package/lib/queries/statistics/statistics.js +2 -2
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +2 -2
- package/lib/queries/users/users.js +2 -2
- package/lib/queries/videos/videos.js +2 -2
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +92 -0
- package/lib/types/analytics.types.js +6 -0
- package/lib/types/apps.types.d.ts +1 -1
- package/lib/types/apps.types.js +2 -2
- package/lib/types/arangodb.types.d.ts +2 -2
- package/lib/types/arangodb.types.js +2 -2
- package/lib/types/auth.types.d.ts +3 -1
- package/lib/types/auth.types.js +2 -2
- package/lib/types/connections.types.d.ts +1 -1
- package/lib/types/connections.types.js +2 -2
- package/lib/types/content.types.d.ts +1 -1
- package/lib/types/content.types.js +2 -2
- package/lib/types/conversations.types.d.ts +1 -1
- package/lib/types/conversations.types.js +2 -2
- package/lib/types/crm.types.d.ts +38 -1
- package/lib/types/crm.types.js +2 -2
- package/lib/types/email.types.d.ts +1 -1
- package/lib/types/email.types.js +2 -2
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.d.ts +1 -1
- package/lib/types/files.types.js +2 -2
- package/lib/types/flags.types.d.ts +28 -0
- package/lib/types/flags.types.js +3 -0
- package/lib/types/google.types.d.ts +1 -1
- package/lib/types/google.types.js +2 -2
- package/lib/types/groups.types.d.ts +1 -1
- package/lib/types/groups.types.js +2 -2
- package/lib/types/images.types.d.ts +1 -1
- package/lib/types/images.types.js +2 -2
- package/lib/types/index.d.ts +3 -1
- package/lib/types/index.js +4 -2
- package/lib/types/locations.types.d.ts +1 -1
- package/lib/types/locations.types.js +2 -2
- package/lib/types/messages.types.d.ts +1 -1
- package/lib/types/messages.types.js +2 -2
- package/lib/types/notifications.types.d.ts +1 -1
- package/lib/types/notifications.types.js +2 -2
- package/lib/types/payments.types.d.ts +4 -1
- package/lib/types/payments.types.js +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +1 -1
- package/lib/types/posts.types.js +2 -2
- package/lib/types/rum.types.d.ts +3 -3
- package/lib/types/rum.types.js +2 -2
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +1 -1
- package/lib/types/tags.types.js +2 -2
- package/lib/types/users.types.d.ts +1 -1
- package/lib/types/users.types.js +2 -2
- package/lib/types/videos.types.d.ts +1 -1
- package/lib/types/videos.types.js +2 -2
- package/lib/types/websockets.types.d.ts +1 -1
- package/lib/types/websockets.types.js +2 -2
- package/lib/upload.js +4 -9
- package/lib/utils/adapterUtils.d.ts +1 -1
- package/lib/utils/adapterUtils.js +2 -2
- package/lib/utils/analyticsUtils.d.ts +1 -1
- package/lib/utils/analyticsUtils.js +2 -2
- package/lib/utils/aqlHelpers.d.ts +1 -1
- package/lib/utils/aqlHelpers.js +2 -2
- package/lib/utils/arangodbUtils.d.ts +9 -1
- package/lib/utils/arangodbUtils.js +10 -2
- package/lib/utils/authUtils.js +2 -2
- package/lib/utils/awsUtils.js +2 -2
- package/lib/utils/collectionRegistry.d.ts +1 -1
- package/lib/utils/collectionRegistry.js +17 -2
- package/lib/utils/contextUtils.d.ts +2 -2
- package/lib/utils/contextUtils.js +2 -2
- package/lib/utils/dbI18n.example.d.ts +1 -1
- package/lib/utils/dbI18n.example.js +2 -2
- package/lib/utils/dbI18n.js +2 -2
- package/lib/utils/googleTranslate.d.ts +1 -1
- package/lib/utils/googleTranslate.js +2 -2
- package/lib/utils/graphqlUtils.d.ts +1 -0
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +1 -1
- package/lib/utils/index.js +2 -2
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.d.ts +1 -1
- package/lib/utils/localeUtils.example.d.ts +1 -1
- package/lib/utils/localeUtils.example.js +2 -2
- package/lib/utils/localeUtils.js +2 -2
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/queryBuilder.d.ts +1 -1
- package/lib/utils/queryBuilder.js +2 -2
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +2 -2
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +2 -2
- package/lib/utils/translationQueue.d.ts +1 -1
- package/lib/utils/translationQueue.example.d.ts +1 -1
- package/lib/utils/translationQueue.example.js +2 -2
- package/lib/utils/translationQueue.js +2 -2
- package/lib/videoProcessing.js +1 -1
- package/package.json +43 -80
- package/lib/actions/websockets.d.ts +0 -20
- package/lib/actions/websockets.js +0 -164
- package/lib/mocks/nlabs.png +0 -0
package/lib/actions/crud.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { aql } from 'arangojs';
|
|
5
5
|
import { literal } from 'arangojs/aql';
|
|
6
6
|
import { ErrorTypes } from '../types/error.types.js';
|
|
@@ -410,4 +410,4 @@ const eventCategory = 'crud';
|
|
|
410
410
|
return count > 0;
|
|
411
411
|
};
|
|
412
412
|
|
|
413
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvY3J1ZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7cmVnaXN0cnl9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb25SZWdpc3RyeS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NydWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIENSVUQgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENydWRPcHRpb25zIHtcbiAgcmVhZG9ubHkgc29ydD86IFJlYWRvbmx5QXJyYXk8e3JlYWRvbmx5IGZpZWxkOiBzdHJpbmc7IHJlYWRvbmx5IGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQyd9PjtcbiAgcmVhZG9ubHkgbGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfTtcbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBTZWxlY3Qgc3BlY2lmaWMgZmllbGRzXG4gIHJlYWRvbmx5IGluY2x1ZGVFZGdlcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gSW5jbHVkZSByZWxhdGVkIGRvY3VtZW50cyB2aWEgZWRnZXNcbiAgcmVhZG9ubHkgcHJpdmFjeT86IGJvb2xlYW47IC8vIEFwcGx5IHByaXZhY3kgY2hlY2tzIChkZWZhdWx0OiB0cnVlKVxuICByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFuOyAvLyBBcHBseSBvd25lcnNoaXAgY2hlY2tzIChkZWZhdWx0OiBmYWxzZSlcbiAgcmVhZG9ubHkgY3VzdG9tUXVlcmllcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gQWRkaXRpb25hbCBjdXN0b20gcXVlcnkgc3RyaW5nc1xuICByZWFkb25seSBjdXN0b21PYmplY3RzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBBZGRpdGlvbmFsIGN1c3RvbSBvYmplY3Qgc2VsZWN0aW9uc1xufVxuXG4vKipcbiAqIEJ1aWxkIGZpbHRlciBjbGF1c2UgZnJvbSBmaWx0ZXJzIG9iamVjdCBvciBGaWx0ZXJHcm91cFxuICovXG5jb25zdCBidWlsZEZpbHRlcnMgPSAoXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgdmFyTmFtZTogc3RyaW5nID0gJ2RvYydcbik6IHN0cmluZyA9PiB7XG4gIC8vIElmIGl0J3MgYSBGaWx0ZXJHcm91cCB3aXRoIGxvZ2ljIGFuZCBjb25kaXRpb25zXG4gIGlmICgnbG9naWMnIGluIGZpbHRlcnMgJiYgJ2NvbmRpdGlvbnMnIGluIGZpbHRlcnMpIHtcbiAgICByZXR1cm4gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycyBhcyBGaWx0ZXJHcm91cCwgdmFyTmFtZSk7XG4gIH1cblxuICAvLyBTaW1wbGUgb2JqZWN0IGZpbHRlcnNcbiAgY29uc3Qgc2ltcGxlRmlsdGVycyA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaW1wbGVGaWx0ZXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGAke3Zhck5hbWV9LiR7a2V5fSA9PSBudWxsYCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09IFwiJHt2YWx1ZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25kaXRpb25zLmpvaW4oJyAmJiAnKTtcbn07XG5cbi8qKlxuICogQnVpbGQgc29ydCBjbGF1c2VcbiAqL1xuY29uc3QgYnVpbGRTb3J0ID0gKFxuICBzb3J0OiBSZWFkb25seUFycmF5PHtyZWFkb25seSBmaWVsZDogc3RyaW5nOyByZWFkb25seSBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnfT4sXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNvcnQgfHwgc29ydC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBzb3J0UGFydHMgPSBzb3J0Lm1hcCgoe2ZpZWxkLCBkaXJlY3Rpb259KSA9PiBgJHt2YXJOYW1lfS4ke2ZpZWxkfSAke2RpcmVjdGlvbn1gKTtcbiAgcmV0dXJuIGBTT1JUICR7c29ydFBhcnRzLmpvaW4oJywgJyl9YDtcbn07XG5cbi8qKlxuICogQnVpbGQgbGltaXQgY2xhdXNlXG4gKi9cbmNvbnN0IGJ1aWxkTGltaXQgPSAobGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfSk6IHN0cmluZyA9PiB7XG4gIGlmICghbGltaXQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCB7ZnJvbSwgdG99ID0gbGltaXQ7XG4gIGNvbnN0IGNvdW50ID0gdG8gLSBmcm9tO1xuICByZXR1cm4gYExJTUlUICR7ZnJvbX0sICR7Y291bnR9YDtcbn07XG5cbi8qKlxuICogQXBwbHkgcHJpdmFjeSBmaWx0ZXIgaWYgY29sbGVjdGlvbiBoYXMgcHJpdmFjeVxuICovXG5jb25zdCBhcHBseVByaXZhY3lGaWx0ZXIgPSAoXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG5cbiAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5oYXNQcml2YWN5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gSWYgbm8gc2Vzc2lvbiwgb25seSByZXR1cm4gcHVibGljIGl0ZW1zXG4gIGlmICghc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGAke3Zhck5hbWV9LnByaXZhY3kgPT0gXCJwdWJsaWNcImA7XG4gIH1cblxuICAvLyBSZXR1cm4gaXRlbXMgdGhhdCBhcmUgcHVibGljIE9SIG93bmVkIGJ5IHRoZSB1c2VyXG4gIHJldHVybiBgKCR7dmFyTmFtZX0ucHJpdmFjeSA9PSBcInB1YmxpY1wiIHx8ICR7dmFyTmFtZX0udXNlcklkID09IFwiJHtzZXNzaW9uSWR9XCIpYDtcbn07XG5cbi8qKlxuICogQXBwbHkgb3duZXJzaGlwIGZpbHRlclxuICovXG5jb25zdCBhcHBseU93bmVyc2hpcEZpbHRlciA9IChcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBgJHt2YXJOYW1lfS51c2VySWQgPT0gXCIke3Nlc3Npb25JZH1cImA7XG59O1xuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb24gYnkgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgZ2V0SXRlbUJ5ID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbUJ5JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtwcml2YWN5ID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlLCBjdXN0b21RdWVyaWVzID0gW10sIGN1c3RvbU9iamVjdHMgPSBbXX0gPSBvcHRpb25zO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVycyhmaWx0ZXJzLCAnZG9jJyk7XG4gICAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChmaWx0ZXJDbGF1c2UpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChmaWx0ZXJDbGF1c2UpO1xuICAgIH1cblxuICAgIGlmIChwcml2YWN5KSB7XG4gICAgICBjb25zdCBwcml2YWN5RmlsdGVyID0gYXBwbHlQcml2YWN5RmlsdGVyKGNvbGxlY3Rpb24sIHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKHByaXZhY3lGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKHByaXZhY3lGaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvd25lcnNoaXApIHtcbiAgICAgIGNvbnN0IG93bmVyc2hpcEZpbHRlciA9IGFwcGx5T3duZXJzaGlwRmlsdGVyKHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKG93bmVyc2hpcEZpbHRlcikge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gob3duZXJzaGlwRmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uTGl0ZXJhbCA9IGxpdGVyYWwoY29sbGVjdGlvbik7XG4gICAgY29uc3Qgd2hlcmVDbGF1c2UgPSBjb25kaXRpb25zLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBGSUxURVIgJHtjb25kaXRpb25zLmpvaW4oJyAmJiAnKX1gKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IGN1c3RvbVF1ZXJpZXNMaXRlcmFsID0gY3VzdG9tUXVlcmllcy5sZW5ndGggPiAwID8gbGl0ZXJhbChjdXN0b21RdWVyaWVzLmpvaW4oJ1xcbicpKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0gY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwXG4gICAgICA/IGxpdGVyYWwoYE1FUkdFKGRvYywgeyR7Y3VzdG9tT2JqZWN0cy5qb2luKCcsICcpfX0pYClcbiAgICAgIDogbGl0ZXJhbCgnZG9jJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICR7Y3VzdG9tUXVlcmllc0xpdGVyYWx9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOICR7cmV0dXJuVmFsdWV9XG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICBjb25zdCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIHJldHVybiBpdGVtIHx8IG51bGw7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBtdWx0aXBsZSBpdGVtcyBmcm9tIGFueSBjb2xsZWN0aW9uIGJ5IGZpbHRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExpc3RCeSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAgPSB7fSxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgcHJpdmFjeSA9IGZhbHNlLFxuICAgIG93bmVyc2hpcCA9IGZhbHNlLFxuICAgIHNvcnQsXG4gICAgbGltaXQsXG4gICAgY3VzdG9tUXVlcmllcyA9IFtdLFxuICAgIGN1c3RvbU9iamVjdHMgPSBbXVxuICB9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoZmlsdGVyQ2xhdXNlKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goZmlsdGVyQ2xhdXNlKTtcbiAgICB9XG5cbiAgICBpZiAocHJpdmFjeSkge1xuICAgICAgY29uc3QgcHJpdmFjeUZpbHRlciA9IGFwcGx5UHJpdmFjeUZpbHRlcihjb2xsZWN0aW9uLCBzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChwcml2YWN5RmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChwcml2YWN5RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3duZXJzaGlwKSB7XG4gICAgICBjb25zdCBvd25lcnNoaXBGaWx0ZXIgPSBhcHBseU93bmVyc2hpcEZpbHRlcihzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChvd25lcnNoaXBGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG93bmVyc2hpcEZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbkxpdGVyYWwgPSBsaXRlcmFsKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gY29uZGl0aW9ucy5sZW5ndGggPiAwID8gbGl0ZXJhbChgRklMVEVSICR7Y29uZGl0aW9ucy5qb2luKCcgJiYgJyl9YCkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBzb3J0Q2xhdXNlID0gc29ydCA/IGxpdGVyYWwoYnVpbGRTb3J0KHNvcnQsICdkb2MnKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBsaW1pdENsYXVzZSA9IGxpbWl0ID8gbGl0ZXJhbChidWlsZExpbWl0KGxpbWl0KSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBjdXN0b21RdWVyaWVzTGl0ZXJhbCA9IGN1c3RvbVF1ZXJpZXMubGVuZ3RoID4gMCA/IGxpdGVyYWwoY3VzdG9tUXVlcmllcy5qb2luKCdcXG4nKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGN1c3RvbU9iamVjdHMubGVuZ3RoID4gMFxuICAgICAgPyBsaXRlcmFsKGBNRVJHRShkb2MsIHske2N1c3RvbU9iamVjdHMuam9pbignLCAnKX19KWApXG4gICAgICA6IGxpdGVyYWwoJ2RvYycpO1xuXG4gICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICAke3doZXJlQ2xhdXNlfVxuICAgICAgICAke2N1c3RvbVF1ZXJpZXNMaXRlcmFsfVxuICAgICAgICAke3NvcnRDbGF1c2V9XG4gICAgICAgICR7bGltaXRDbGF1c2V9XG4gICAgICAgIFJFVFVSTiAke3JldHVyblZhbHVlfVxuICAgIGA7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3VsdC5hbGwoKSBhcyBUW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBpdGVtIHRvIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRJdGVtID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGRhdGE6IFBhcnRpYWw8VD4sXG4gIG9wdGlvbnM6IHtyZWFkb25seSBob29rcz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBsZXQgaW5zZXJ0RGF0YTogYW55ID0gey4uLmRhdGF9O1xuXG4gICAgLy8gQXBwbHkgcGFyc2UgYWRhcHRlciBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29uZmlnPy5hZGFwdGVycz8ucGFyc2UpIHtcbiAgICAgIGluc2VydERhdGEgPSBjb25maWcuYWRhcHRlcnMucGFyc2UoaW5zZXJ0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBiZWZvcmVJbnNlcnQgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5iZWZvcmVJbnNlcnQpIHtcbiAgICAgIGluc2VydERhdGEgPSBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlSW5zZXJ0KGNvbnRleHQsIGluc2VydERhdGEpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aW1lc3RhbXBzICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy5jcmVhdGVkKSB7XG4gICAgICBpbnNlcnREYXRhID0gey4uLmluc2VydERhdGEsIFtjb25maWcudGltZXN0YW1wcy5jcmVhdGVkXTogbm93fTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZz8udGltZXN0YW1wcz8udXBkYXRlZCkge1xuICAgICAgaW5zZXJ0RGF0YSA9IHsuLi5pbnNlcnREYXRhLCBbY29uZmlnLnRpbWVzdGFtcHMudXBkYXRlZF06IG5vd307XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbGxlY3Rpb25SZWYuc2F2ZShpbnNlcnREYXRhIGFzIGFueSwge3JldHVybk5ldzogdHJ1ZX0pO1xuICAgIGxldCBpdGVtID0gcmVzdWx0Lm5ldyBhcyBUO1xuXG4gICAgLy8gQ2FsbCBhZnRlckluc2VydCBob29rXG4gICAgaWYgKGhvb2tzICYmIGNvbmZpZz8uaG9va3M/LmFmdGVySW5zZXJ0KSB7XG4gICAgICBpdGVtID0gYXdhaXQgY29uZmlnLmhvb2tzLmFmdGVySW5zZXJ0KGNvbnRleHQsIGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9ufVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gaXRlbSBpbiBhbnkgY29sbGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlSXRlbSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICB1cGRhdGVzOiBQYXJ0aWFsPFQ+LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaG9va3M/OiBib29sZWFuOyByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFufSA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG4gICAgbGV0IHVwZGF0ZURhdGE6IGFueSA9IHsuLi51cGRhdGVzfTtcblxuICAgIC8vIEFwcGx5IHBhcnNlIGFkYXB0ZXIgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvbmZpZz8uYWRhcHRlcnM/LnBhcnNlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gY29uZmlnLmFkYXB0ZXJzLnBhcnNlKHVwZGF0ZURhdGEpO1xuICAgIH1cblxuICAgIC8vIENhbGwgYmVmb3JlVXBkYXRlIGhvb2tcbiAgICBpZiAoaG9va3MgJiYgY29uZmlnPy5ob29rcz8uYmVmb3JlVXBkYXRlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gYXdhaXQgY29uZmlnLmhvb2tzLmJlZm9yZVVwZGF0ZShjb250ZXh0LCBpZCwgdXBkYXRlRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHVwZGF0ZWQgdGltZXN0YW1wICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy51cGRhdGVkKSB7XG4gICAgICB1cGRhdGVEYXRhID0gey4uLnVwZGF0ZURhdGEsIFtjb25maWcudGltZXN0YW1wcy51cGRhdGVkXTogbm93fTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG5cbiAgICAvLyBCdWlsZCBxdWVyeSB3aXRoIG93bmVyc2hpcCBjaGVjayBpZiBuZWVkZWRcbiAgICBsZXQgYXFsUXVlcnk6IEFxbFF1ZXJ5O1xuICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgYXFsUXVlcnkgPSBhcWxgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFVQREFURSBkb2MgV0lUSCAke3VwZGF0ZURhdGF9IElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIFJFVFVSTiBORVdgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlRGF0YX0gSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgUkVUVVJOIE5FV2A7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIGxldCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIC8vIENhbGwgYWZ0ZXJVcGRhdGUgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5hZnRlclVwZGF0ZSkge1xuICAgICAgaXRlbSA9IGF3YWl0IGNvbmZpZy5ob29rcy5hZnRlclVwZGF0ZShjb250ZXh0LCBpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIERlbGV0ZSBhbiBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZUl0ZW0gPSBhc3luYyA8VCA9IGFueT4oXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIHJlYWRvbmx5IHNvZnQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhc2NhZGU/OiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gICAgcmVhZG9ubHkgb3duZXJzaGlwPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtzb2Z0ID0gZmFsc2UsIGNhc2NhZGUgPSBbXSwgb3duZXJzaGlwID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG4gICAgY29uc3QgZG9jS2V5ID0gaWQuaW5jbHVkZXMoJy8nKSA/IGlkLnNwbGl0KCcvJykucG9wKCkgfHwgJycgOiBpZDtcbiAgICBsZXQgZGVsZXRlZEl0ZW06IFQgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENhbGwgYmVmb3JlRGVsZXRlIGhvb2tcbiAgICBpZiAoY29uZmlnPy5ob29rcz8uYmVmb3JlRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlRGVsZXRlKGNvbnRleHQsIGRvY0lkKTtcbiAgICB9XG5cbiAgICAvLyBTb2Z0IGRlbGV0ZVxuICAgIGlmIChzb2Z0KSB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7ZGVsZXRlZDogdHJ1ZSwgZGVsZXRlZEF0OiBEYXRlLm5vdygpfTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBSRVRVUk4gTkVXYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgIGRlbGV0ZWRJdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKSBhcyBUIHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFyZCBkZWxldGUgd2l0aCBjYXNjYWRlXG4gICAgICBjb25zdCBlZGdlc1RvQ2FzY2FkZSA9IGNhc2NhZGUubGVuZ3RoID4gMCA/IGNhc2NhZGUgOiAoY29uZmlnPy5jYXNjYWRlRWRnZXMgfHwgW10pO1xuXG4gICAgICAvLyBEZWxldGUgdGhlIGRvY3VtZW50XG4gICAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICAgICAgUkVNT1ZFIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBSRVRVUk4gT0xEXG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgICAgZGVsZXRlZEl0ZW0gPSBhd2FpdCByZXN1bHQubmV4dCgpIGFzIFQgfCBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSAke2RvY0tleX0gSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfSBSRVRVUk4gT0xEYDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgICAgICBkZWxldGVkSXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCkgYXMgVCB8IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSByZWxhdGVkIGVkZ2VzIG9ubHkgYWZ0ZXIgdGhlIGRvY3VtZW50IGRlbGV0ZSBzdWNjZWVkcywgc28gb3duZXJzaGlwIGNoZWNrcyBwcm90ZWN0IGNhc2NhZGVzIHRvby5cbiAgICAgIGlmIChkZWxldGVkSXRlbSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2VUeXBlIG9mIGVkZ2VzVG9DYXNjYWRlKSB7XG4gICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZWRnZSBjb2xsZWN0aW9uIG5hbWUgKHNhZmUpXG4gICAgICAgICAgY29uc3QgZWRnZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgIEZPUiBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgICAgIEZJTFRFUiBlLl90byA9PSAke2RvY0lkfSB8fCBlLl9mcm9tID09ICR7ZG9jSWR9XG4gICAgICAgICAgICAgIFJFTU9WRSBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICBhd2FpdCBkYXRhYmFzZS5xdWVyeShlZGdlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBhZnRlckRlbGV0ZSBob29rXG4gICAgaWYgKGNvbmZpZz8uaG9va3M/LmFmdGVyRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYWZ0ZXJEZWxldGUoY29udGV4dCwgZG9jSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkSXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvdW50IGl0ZW1zIGluIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBjb3VudEl0ZW1zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCA9IHt9XG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY291bnRJdGVtcyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gZmlsdGVyQ2xhdXNlID8gbGl0ZXJhbChgRklMVEVSICR7ZmlsdGVyQ2xhdXNlfWApIDogbGl0ZXJhbCgnJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgaXRlbXMgPSAoXG4gICAgICAgIEZPUiBkb2MgSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfVxuICAgICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICAgUkVUVVJOIGRvY1xuICAgICAgKVxuICAgICAgUkVUVVJOIExFTkdUSChpdGVtcylcbiAgICBgO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIHJldHVybiBhd2FpdCByZXN1bHQubmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9uLCBmaWx0ZXJzfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpdGVtIGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgaXRlbUV4aXN0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXBcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBjb3VudCA9IGF3YWl0IGNvdW50SXRlbXMoY29udGV4dCwgY29sbGVjdGlvbiwgZmlsdGVycyk7XG4gIHJldHVybiBjb3VudCA+IDA7XG59O1xuIl0sIm5hbWVzIjpbImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZEZpbHRlckNsYXVzZSIsInVzZURiIiwicmVnaXN0cnkiLCJldmVudENhdGVnb3J5IiwiYnVpbGRGaWx0ZXJzIiwiZmlsdGVycyIsInZhck5hbWUiLCJzaW1wbGVGaWx0ZXJzIiwiY29uZGl0aW9ucyIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInB1c2giLCJKU09OIiwic3RyaW5naWZ5Iiwiam9pbiIsImJ1aWxkU29ydCIsInNvcnQiLCJsZW5ndGgiLCJzb3J0UGFydHMiLCJtYXAiLCJmaWVsZCIsImRpcmVjdGlvbiIsImJ1aWxkTGltaXQiLCJsaW1pdCIsImZyb20iLCJ0byIsImNvdW50IiwiYXBwbHlQcml2YWN5RmlsdGVyIiwiY29sbGVjdGlvbiIsInNlc3Npb25JZCIsImNvbmZpZyIsImdldCIsImhhc1ByaXZhY3kiLCJhcHBseU93bmVyc2hpcEZpbHRlciIsImdldEl0ZW1CeSIsImNvbnRleHQiLCJvcHRpb25zIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwic2Vzc2lvbiIsInVzZXJJZCIsInByaXZhY3kiLCJvd25lcnNoaXAiLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImRhdGFiYXNlIiwiZmlsdGVyQ2xhdXNlIiwicHJpdmFjeUZpbHRlciIsIm93bmVyc2hpcEZpbHRlciIsImNvbGxlY3Rpb25MaXRlcmFsIiwid2hlcmVDbGF1c2UiLCJjdXN0b21RdWVyaWVzTGl0ZXJhbCIsInJldHVyblZhbHVlIiwiYXFsUXVlcnkiLCJyZXN1bHQiLCJxdWVyeSIsIml0ZW0iLCJuZXh0IiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJwYXJhbXMiLCJnZXRMaXN0QnkiLCJzb3J0Q2xhdXNlIiwibGltaXRDbGF1c2UiLCJhbGwiLCJhZGRJdGVtIiwiZGF0YSIsImhvb2tzIiwiaW5zZXJ0RGF0YSIsImFkYXB0ZXJzIiwicGFyc2UiLCJiZWZvcmVJbnNlcnQiLCJub3ciLCJEYXRlIiwidGltZXN0YW1wcyIsImNyZWF0ZWQiLCJ1cGRhdGVkIiwiY29sbGVjdGlvblJlZiIsInNhdmUiLCJyZXR1cm5OZXciLCJuZXciLCJhZnRlckluc2VydCIsInVwZGF0ZUl0ZW0iLCJpZCIsInVwZGF0ZXMiLCJ1cGRhdGVEYXRhIiwiYmVmb3JlVXBkYXRlIiwiZG9jSWQiLCJpbmNsdWRlcyIsImFmdGVyVXBkYXRlIiwiZGVsZXRlSXRlbSIsInNvZnQiLCJjYXNjYWRlIiwiZG9jS2V5Iiwic3BsaXQiLCJwb3AiLCJkZWxldGVkSXRlbSIsImJlZm9yZURlbGV0ZSIsInVwZGF0ZSIsImRlbGV0ZWQiLCJkZWxldGVkQXQiLCJlZGdlc1RvQ2FzY2FkZSIsImNhc2NhZGVFZGdlcyIsImVkZ2VUeXBlIiwiZWRnZVF1ZXJ5IiwiYWZ0ZXJEZWxldGUiLCJjb3VudEl0ZW1zIiwiaXRlbUV4aXN0cyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFDckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLGlCQUFpQixRQUFPLHlCQUF5QjtBQUN6RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLFFBQVEsUUFBTyxpQ0FBaUM7QUFNeEQsTUFBTUMsZ0JBQWdCO0FBZ0J0Qjs7Q0FFQyxHQUNELE1BQU1DLGVBQWUsQ0FDbkJDLFNBQ0FDLFVBQWtCLEtBQUs7SUFFdkIsa0RBQWtEO0lBQ2xELElBQUksV0FBV0QsV0FBVyxnQkFBZ0JBLFNBQVM7UUFDakQsT0FBT0wsa0JBQWtCSyxTQUF3QkM7SUFDbkQ7SUFFQSx3QkFBd0I7SUFDeEIsTUFBTUMsZ0JBQWdCRjtJQUN0QixNQUFNRyxhQUF1QixFQUFFO0lBRS9CLEtBQUssTUFBTSxDQUFDQyxLQUFLQyxNQUFNLElBQUlDLE9BQU9DLE9BQU8sQ0FBQ0wsZUFBZ0I7UUFDeEQsSUFBSUcsVUFBVSxNQUFN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
|
|
413
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvY3J1ZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZX0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7cmVnaXN0cnl9IGZyb20gJy4uL3V0aWxzL2NvbGxlY3Rpb25SZWdpc3RyeS5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ2NydWQnO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIENSVUQgb3BlcmF0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENydWRPcHRpb25zIHtcbiAgcmVhZG9ubHkgc29ydD86IFJlYWRvbmx5QXJyYXk8e3JlYWRvbmx5IGZpZWxkOiBzdHJpbmc7IHJlYWRvbmx5IGRpcmVjdGlvbjogJ0FTQycgfCAnREVTQyd9PjtcbiAgcmVhZG9ubHkgbGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfTtcbiAgcmVhZG9ubHkgZmllbGRzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBTZWxlY3Qgc3BlY2lmaWMgZmllbGRzXG4gIHJlYWRvbmx5IGluY2x1ZGVFZGdlcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gSW5jbHVkZSByZWxhdGVkIGRvY3VtZW50cyB2aWEgZWRnZXNcbiAgcmVhZG9ubHkgcHJpdmFjeT86IGJvb2xlYW47IC8vIEFwcGx5IHByaXZhY3kgY2hlY2tzIChkZWZhdWx0OiB0cnVlKVxuICByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFuOyAvLyBBcHBseSBvd25lcnNoaXAgY2hlY2tzIChkZWZhdWx0OiBmYWxzZSlcbiAgcmVhZG9ubHkgY3VzdG9tUXVlcmllcz86IFJlYWRvbmx5QXJyYXk8c3RyaW5nPjsgLy8gQWRkaXRpb25hbCBjdXN0b20gcXVlcnkgc3RyaW5nc1xuICByZWFkb25seSBjdXN0b21PYmplY3RzPzogUmVhZG9ubHlBcnJheTxzdHJpbmc+OyAvLyBBZGRpdGlvbmFsIGN1c3RvbSBvYmplY3Qgc2VsZWN0aW9uc1xufVxuXG4vKipcbiAqIEJ1aWxkIGZpbHRlciBjbGF1c2UgZnJvbSBmaWx0ZXJzIG9iamVjdCBvciBGaWx0ZXJHcm91cFxuICovXG5jb25zdCBidWlsZEZpbHRlcnMgPSAoXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgdmFyTmFtZTogc3RyaW5nID0gJ2RvYydcbik6IHN0cmluZyA9PiB7XG4gIC8vIElmIGl0J3MgYSBGaWx0ZXJHcm91cCB3aXRoIGxvZ2ljIGFuZCBjb25kaXRpb25zXG4gIGlmICgnbG9naWMnIGluIGZpbHRlcnMgJiYgJ2NvbmRpdGlvbnMnIGluIGZpbHRlcnMpIHtcbiAgICByZXR1cm4gYnVpbGRGaWx0ZXJDbGF1c2UoZmlsdGVycyBhcyBGaWx0ZXJHcm91cCwgdmFyTmFtZSk7XG4gIH1cblxuICAvLyBTaW1wbGUgb2JqZWN0IGZpbHRlcnNcbiAgY29uc3Qgc2ltcGxlRmlsdGVycyA9IGZpbHRlcnMgYXMgUmVjb3JkPHN0cmluZywgYW55PjtcbiAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhzaW1wbGVGaWx0ZXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgY29uZGl0aW9ucy5wdXNoKGAke3Zhck5hbWV9LiR7a2V5fSA9PSBudWxsYCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09IFwiJHt2YWx1ZX1cImApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goYCR7dmFyTmFtZX0uJHtrZXl9ID09ICR7SlNPTi5zdHJpbmdpZnkodmFsdWUpfWApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25kaXRpb25zLmpvaW4oJyAmJiAnKTtcbn07XG5cbi8qKlxuICogQnVpbGQgc29ydCBjbGF1c2VcbiAqL1xuY29uc3QgYnVpbGRTb3J0ID0gKFxuICBzb3J0OiBSZWFkb25seUFycmF5PHtyZWFkb25seSBmaWVsZDogc3RyaW5nOyByZWFkb25seSBkaXJlY3Rpb246ICdBU0MnIHwgJ0RFU0MnfT4sXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNvcnQgfHwgc29ydC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBzb3J0UGFydHMgPSBzb3J0Lm1hcCgoe2ZpZWxkLCBkaXJlY3Rpb259KSA9PiBgJHt2YXJOYW1lfS4ke2ZpZWxkfSAke2RpcmVjdGlvbn1gKTtcbiAgcmV0dXJuIGBTT1JUICR7c29ydFBhcnRzLmpvaW4oJywgJyl9YDtcbn07XG5cbi8qKlxuICogQnVpbGQgbGltaXQgY2xhdXNlXG4gKi9cbmNvbnN0IGJ1aWxkTGltaXQgPSAobGltaXQ/OiB7cmVhZG9ubHkgZnJvbTogbnVtYmVyOyByZWFkb25seSB0bzogbnVtYmVyfSk6IHN0cmluZyA9PiB7XG4gIGlmICghbGltaXQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCB7ZnJvbSwgdG99ID0gbGltaXQ7XG4gIGNvbnN0IGNvdW50ID0gdG8gLSBmcm9tO1xuICByZXR1cm4gYExJTUlUICR7ZnJvbX0sICR7Y291bnR9YDtcbn07XG5cbi8qKlxuICogQXBwbHkgcHJpdmFjeSBmaWx0ZXIgaWYgY29sbGVjdGlvbiBoYXMgcHJpdmFjeVxuICovXG5jb25zdCBhcHBseVByaXZhY3lGaWx0ZXIgPSAoXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG5cbiAgaWYgKCFjb25maWcgfHwgIWNvbmZpZy5oYXNQcml2YWN5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgLy8gSWYgbm8gc2Vzc2lvbiwgb25seSByZXR1cm4gcHVibGljIGl0ZW1zXG4gIGlmICghc2Vzc2lvbklkKSB7XG4gICAgcmV0dXJuIGAke3Zhck5hbWV9LnByaXZhY3kgPT0gXCJwdWJsaWNcImA7XG4gIH1cblxuICAvLyBSZXR1cm4gaXRlbXMgdGhhdCBhcmUgcHVibGljIE9SIG93bmVkIGJ5IHRoZSB1c2VyXG4gIHJldHVybiBgKCR7dmFyTmFtZX0ucHJpdmFjeSA9PSBcInB1YmxpY1wiIHx8ICR7dmFyTmFtZX0udXNlcklkID09IFwiJHtzZXNzaW9uSWR9XCIpYDtcbn07XG5cbi8qKlxuICogQXBwbHkgb3duZXJzaGlwIGZpbHRlclxuICovXG5jb25zdCBhcHBseU93bmVyc2hpcEZpbHRlciA9IChcbiAgc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHZhck5hbWU6IHN0cmluZyA9ICdkb2MnXG4pOiBzdHJpbmcgPT4ge1xuICBpZiAoIXNlc3Npb25JZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIHJldHVybiBgJHt2YXJOYW1lfS51c2VySWQgPT0gXCIke3Nlc3Npb25JZH1cImA7XG59O1xuXG4vKipcbiAqIEdldCBhIHNpbmdsZSBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb24gYnkgZmlsdGVyc1xuICovXG5leHBvcnQgY29uc3QgZ2V0SXRlbUJ5ID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUIHwgbnVsbD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0SXRlbUJ5JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtwcml2YWN5ID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlLCBjdXN0b21RdWVyaWVzID0gW10sIGN1c3RvbU9iamVjdHMgPSBbXX0gPSBvcHRpb25zO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVycyhmaWx0ZXJzLCAnZG9jJyk7XG4gICAgY29uc3QgY29uZGl0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChmaWx0ZXJDbGF1c2UpIHtcbiAgICAgIGNvbmRpdGlvbnMucHVzaChmaWx0ZXJDbGF1c2UpO1xuICAgIH1cblxuICAgIGlmIChwcml2YWN5KSB7XG4gICAgICBjb25zdCBwcml2YWN5RmlsdGVyID0gYXBwbHlQcml2YWN5RmlsdGVyKGNvbGxlY3Rpb24sIHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKHByaXZhY3lGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKHByaXZhY3lGaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvd25lcnNoaXApIHtcbiAgICAgIGNvbnN0IG93bmVyc2hpcEZpbHRlciA9IGFwcGx5T3duZXJzaGlwRmlsdGVyKHNlc3Npb25JZCwgJ2RvYycpO1xuICAgICAgaWYgKG93bmVyc2hpcEZpbHRlcikge1xuICAgICAgICBjb25kaXRpb25zLnB1c2gob3duZXJzaGlwRmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb2xsZWN0aW9uTGl0ZXJhbCA9IGxpdGVyYWwoY29sbGVjdGlvbik7XG4gICAgY29uc3Qgd2hlcmVDbGF1c2UgPSBjb25kaXRpb25zLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBGSUxURVIgJHtjb25kaXRpb25zLmpvaW4oJyAmJiAnKX1gKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IGN1c3RvbVF1ZXJpZXNMaXRlcmFsID0gY3VzdG9tUXVlcmllcy5sZW5ndGggPiAwID8gbGl0ZXJhbChjdXN0b21RdWVyaWVzLmpvaW4oJ1xcbicpKSA6IGxpdGVyYWwoJycpO1xuICAgIGNvbnN0IHJldHVyblZhbHVlID0gY3VzdG9tT2JqZWN0cy5sZW5ndGggPiAwXG4gICAgICA/IGxpdGVyYWwoYE1FUkdFKGRvYywgeyR7Y3VzdG9tT2JqZWN0cy5qb2luKCcsICcpfX0pYClcbiAgICAgIDogbGl0ZXJhbCgnZG9jJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICR7Y3VzdG9tUXVlcmllc0xpdGVyYWx9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOICR7cmV0dXJuVmFsdWV9XG4gICAgYDtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICBjb25zdCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIHJldHVybiBpdGVtIHx8IG51bGw7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEdldCBtdWx0aXBsZSBpdGVtcyBmcm9tIGFueSBjb2xsZWN0aW9uIGJ5IGZpbHRlcnNcbiAqL1xuZXhwb3J0IGNvbnN0IGdldExpc3RCeSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXAgPSB7fSxcbiAgb3B0aW9uczogQ3J1ZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxUW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldExpc3RCeSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7XG4gICAgcHJpdmFjeSA9IGZhbHNlLFxuICAgIG93bmVyc2hpcCA9IGZhbHNlLFxuICAgIHNvcnQsXG4gICAgbGltaXQsXG4gICAgY3VzdG9tUXVlcmllcyA9IFtdLFxuICAgIGN1c3RvbU9iamVjdHMgPSBbXVxuICB9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IGNvbmRpdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAoZmlsdGVyQ2xhdXNlKSB7XG4gICAgICBjb25kaXRpb25zLnB1c2goZmlsdGVyQ2xhdXNlKTtcbiAgICB9XG5cbiAgICBpZiAocHJpdmFjeSkge1xuICAgICAgY29uc3QgcHJpdmFjeUZpbHRlciA9IGFwcGx5UHJpdmFjeUZpbHRlcihjb2xsZWN0aW9uLCBzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChwcml2YWN5RmlsdGVyKSB7XG4gICAgICAgIGNvbmRpdGlvbnMucHVzaChwcml2YWN5RmlsdGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob3duZXJzaGlwKSB7XG4gICAgICBjb25zdCBvd25lcnNoaXBGaWx0ZXIgPSBhcHBseU93bmVyc2hpcEZpbHRlcihzZXNzaW9uSWQsICdkb2MnKTtcbiAgICAgIGlmIChvd25lcnNoaXBGaWx0ZXIpIHtcbiAgICAgICAgY29uZGl0aW9ucy5wdXNoKG93bmVyc2hpcEZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29sbGVjdGlvbkxpdGVyYWwgPSBsaXRlcmFsKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gY29uZGl0aW9ucy5sZW5ndGggPiAwID8gbGl0ZXJhbChgRklMVEVSICR7Y29uZGl0aW9ucy5qb2luKCcgJiYgJyl9YCkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBzb3J0Q2xhdXNlID0gc29ydCA/IGxpdGVyYWwoYnVpbGRTb3J0KHNvcnQsICdkb2MnKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBsaW1pdENsYXVzZSA9IGxpbWl0ID8gbGl0ZXJhbChidWlsZExpbWl0KGxpbWl0KSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCBjdXN0b21RdWVyaWVzTGl0ZXJhbCA9IGN1c3RvbVF1ZXJpZXMubGVuZ3RoID4gMCA/IGxpdGVyYWwoY3VzdG9tUXVlcmllcy5qb2luKCdcXG4nKSkgOiBsaXRlcmFsKCcnKTtcbiAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGN1c3RvbU9iamVjdHMubGVuZ3RoID4gMFxuICAgICAgPyBsaXRlcmFsKGBNRVJHRShkb2MsIHske2N1c3RvbU9iamVjdHMuam9pbignLCAnKX19KWApXG4gICAgICA6IGxpdGVyYWwoJ2RvYycpO1xuXG4gICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgICAgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICAke3doZXJlQ2xhdXNlfVxuICAgICAgICAke2N1c3RvbVF1ZXJpZXNMaXRlcmFsfVxuICAgICAgICAke3NvcnRDbGF1c2V9XG4gICAgICAgICR7bGltaXRDbGF1c2V9XG4gICAgICAgIFJFVFVSTiAke3JldHVyblZhbHVlfVxuICAgIGA7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeShhcWxRdWVyeSk7XG4gICAgcmV0dXJuIGF3YWl0IHJlc3VsdC5hbGwoKSBhcyBUW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUixcbiAgICAgIHBhcmFtczoge2NvbGxlY3Rpb24sIGZpbHRlcnN9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIEFkZCBhIG5ldyBpdGVtIHRvIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRJdGVtID0gYXN5bmMgPFQgPSBhbnk+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGRhdGE6IFBhcnRpYWw8VD4sXG4gIG9wdGlvbnM6IHtyZWFkb25seSBob29rcz86IGJvb2xlYW59ID0ge31cbik6IFByb21pc2U8VD4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkSXRlbSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBsZXQgaW5zZXJ0RGF0YTogYW55ID0gey4uLmRhdGF9O1xuXG4gICAgLy8gQXBwbHkgcGFyc2UgYWRhcHRlciBpZiBhdmFpbGFibGVcbiAgICBpZiAoY29uZmlnPy5hZGFwdGVycz8ucGFyc2UpIHtcbiAgICAgIGluc2VydERhdGEgPSBjb25maWcuYWRhcHRlcnMucGFyc2UoaW5zZXJ0RGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBiZWZvcmVJbnNlcnQgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5iZWZvcmVJbnNlcnQpIHtcbiAgICAgIGluc2VydERhdGEgPSBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlSW5zZXJ0KGNvbnRleHQsIGluc2VydERhdGEpO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aW1lc3RhbXBzICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy5jcmVhdGVkKSB7XG4gICAgICBpbnNlcnREYXRhID0gey4uLmluc2VydERhdGEsIFtjb25maWcudGltZXN0YW1wcy5jcmVhdGVkXTogbm93fTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZz8udGltZXN0YW1wcz8udXBkYXRlZCkge1xuICAgICAgaW5zZXJ0RGF0YSA9IHsuLi5pbnNlcnREYXRhLCBbY29uZmlnLnRpbWVzdGFtcHMudXBkYXRlZF06IG5vd307XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25SZWYgPSBkYXRhYmFzZS5jb2xsZWN0aW9uKGNvbGxlY3Rpb24pO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNvbGxlY3Rpb25SZWYuc2F2ZShpbnNlcnREYXRhIGFzIGFueSwge3JldHVybk5ldzogdHJ1ZX0pO1xuICAgIGxldCBpdGVtID0gcmVzdWx0Lm5ldyBhcyBUO1xuXG4gICAgLy8gQ2FsbCBhZnRlckluc2VydCBob29rXG4gICAgaWYgKGhvb2tzICYmIGNvbmZpZz8uaG9va3M/LmFmdGVySW5zZXJ0KSB7XG4gICAgICBpdGVtID0gYXdhaXQgY29uZmlnLmhvb2tzLmFmdGVySW5zZXJ0KGNvbnRleHQsIGl0ZW0pO1xuICAgIH1cblxuICAgIHJldHVybiBpdGVtO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9ufVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBVcGRhdGUgYW4gaXRlbSBpbiBhbnkgY29sbGVjdGlvblxuICovXG5leHBvcnQgY29uc3QgdXBkYXRlSXRlbSA9IGFzeW5jIDxUID0gYW55PihcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBpZDogc3RyaW5nLFxuICB1cGRhdGVzOiBQYXJ0aWFsPFQ+LFxuICBvcHRpb25zOiB7cmVhZG9ubHkgaG9va3M/OiBib29sZWFuOyByZWFkb25seSBvd25lcnNoaXA/OiBib29sZWFufSA9IHt9XG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3VwZGF0ZUl0ZW0nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2hvb2tzID0gZmFsc2UsIG93bmVyc2hpcCA9IGZhbHNlfSA9IG9wdGlvbnM7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBjb25maWcgPSByZWdpc3RyeS5nZXQoY29sbGVjdGlvbik7XG4gICAgbGV0IHVwZGF0ZURhdGE6IGFueSA9IHsuLi51cGRhdGVzfTtcblxuICAgIC8vIEFwcGx5IHBhcnNlIGFkYXB0ZXIgaWYgYXZhaWxhYmxlXG4gICAgaWYgKGNvbmZpZz8uYWRhcHRlcnM/LnBhcnNlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gY29uZmlnLmFkYXB0ZXJzLnBhcnNlKHVwZGF0ZURhdGEpO1xuICAgIH1cblxuICAgIC8vIENhbGwgYmVmb3JlVXBkYXRlIGhvb2tcbiAgICBpZiAoaG9va3MgJiYgY29uZmlnPy5ob29rcz8uYmVmb3JlVXBkYXRlKSB7XG4gICAgICB1cGRhdGVEYXRhID0gYXdhaXQgY29uZmlnLmhvb2tzLmJlZm9yZVVwZGF0ZShjb250ZXh0LCBpZCwgdXBkYXRlRGF0YSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHVwZGF0ZWQgdGltZXN0YW1wICh0eXBlLXNhZmUgYXBwcm9hY2gpXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBpZiAoY29uZmlnPy50aW1lc3RhbXBzPy51cGRhdGVkKSB7XG4gICAgICB1cGRhdGVEYXRhID0gey4uLnVwZGF0ZURhdGEsIFtjb25maWcudGltZXN0YW1wcy51cGRhdGVkXTogbm93fTtcbiAgICB9XG5cbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG5cbiAgICAvLyBCdWlsZCBxdWVyeSB3aXRoIG93bmVyc2hpcCBjaGVjayBpZiBuZWVkZWRcbiAgICBsZXQgYXFsUXVlcnk6IEFxbFF1ZXJ5O1xuICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgYXFsUXVlcnkgPSBhcWxgRk9SIGRvYyBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFVQREFURSBkb2MgV0lUSCAke3VwZGF0ZURhdGF9IElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIFJFVFVSTiBORVdgO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlRGF0YX0gSU4gJHtjb2xsZWN0aW9uTGl0ZXJhbH1cbiAgICAgICAgUkVUVVJOIE5FV2A7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIGxldCBpdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKTtcblxuICAgIC8vIENhbGwgYWZ0ZXJVcGRhdGUgaG9va1xuICAgIGlmIChob29rcyAmJiBjb25maWc/Lmhvb2tzPy5hZnRlclVwZGF0ZSkge1xuICAgICAgaXRlbSA9IGF3YWl0IGNvbmZpZy5ob29rcy5hZnRlclVwZGF0ZShjb250ZXh0LCBpdGVtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIERlbGV0ZSBhbiBpdGVtIGZyb20gYW55IGNvbGxlY3Rpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGRlbGV0ZUl0ZW0gPSBhc3luYyA8VCA9IGFueT4oXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGNvbGxlY3Rpb246IHN0cmluZyxcbiAgaWQ6IHN0cmluZyxcbiAgb3B0aW9uczoge1xuICAgIHJlYWRvbmx5IHNvZnQ/OiBib29sZWFuO1xuICAgIHJlYWRvbmx5IGNhc2NhZGU/OiBSZWFkb25seUFycmF5PHN0cmluZz47XG4gICAgcmVhZG9ubHkgb3duZXJzaGlwPzogYm9vbGVhbjtcbiAgfSA9IHt9XG4pOiBQcm9taXNlPFQgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVJdGVtJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtzb2Z0ID0gZmFsc2UsIGNhc2NhZGUgPSBbXSwgb3duZXJzaGlwID0gZmFsc2V9ID0gb3B0aW9ucztcblxuICB0cnkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHJlZ2lzdHJ5LmdldChjb2xsZWN0aW9uKTtcbiAgICBjb25zdCBkYXRhYmFzZSA9IHVzZURiKGRhdGFiYXNlTmFtZSk7XG4gICAgY29uc3QgZG9jSWQgPSBpZC5pbmNsdWRlcygnLycpID8gaWQgOiBgJHtjb2xsZWN0aW9ufS8ke2lkfWA7XG4gICAgY29uc3QgZG9jS2V5ID0gaWQuaW5jbHVkZXMoJy8nKSA/IGlkLnNwbGl0KCcvJykucG9wKCkgfHwgJycgOiBpZDtcbiAgICBsZXQgZGVsZXRlZEl0ZW06IFQgfCBudWxsID0gbnVsbDtcblxuICAgIC8vIENhbGwgYmVmb3JlRGVsZXRlIGhvb2tcbiAgICBpZiAoY29uZmlnPy5ob29rcz8uYmVmb3JlRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYmVmb3JlRGVsZXRlKGNvbnRleHQsIGRvY0lkKTtcbiAgICB9XG5cbiAgICAvLyBTb2Z0IGRlbGV0ZVxuICAgIGlmIChzb2Z0KSB7XG4gICAgICBjb25zdCB1cGRhdGUgPSB7ZGVsZXRlZDogdHJ1ZSwgZGVsZXRlZEF0OiBEYXRlLm5vdygpfTtcbiAgICAgIGNvbnN0IGNvbGxlY3Rpb25MaXRlcmFsID0gbGl0ZXJhbChjb2xsZWN0aW9uKTtcbiAgICAgIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgZG9jIElOICR7Y29sbGVjdGlvbkxpdGVyYWx9XG4gICAgICAgIEZJTFRFUiBkb2MuX2lkID09ICR7ZG9jSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgVVBEQVRFIGRvYyBXSVRIICR7dXBkYXRlfSBJTiAke2NvbGxlY3Rpb25MaXRlcmFsfVxuICAgICAgICBSRVRVUk4gTkVXYDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgIGRlbGV0ZWRJdGVtID0gYXdhaXQgcmVzdWx0Lm5leHQoKSBhcyBUIHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSGFyZCBkZWxldGUgd2l0aCBjYXNjYWRlXG4gICAgICBjb25zdCBlZGdlc1RvQ2FzY2FkZSA9IGNhc2NhZGUubGVuZ3RoID4gMCA/IGNhc2NhZGUgOiAoY29uZmlnPy5jYXNjYWRlRWRnZXMgfHwgW10pO1xuXG4gICAgICAvLyBEZWxldGUgdGhlIGRvY3VtZW50XG4gICAgICBpZiAob3duZXJzaGlwICYmIHNlc3Npb25JZCkge1xuICAgICAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICAgICAgRk9SIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBGSUxURVIgZG9jLl9pZCA9PSAke2RvY0lkfSAmJiBkb2MudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICAgICAgUkVNT1ZFIGRvYyBJTiAke2xpdGVyYWwoY29sbGVjdGlvbil9XG4gICAgICAgICAgICBSRVRVUk4gT0xEXG4gICAgICAgIGA7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRhdGFiYXNlLnF1ZXJ5KGFxbFF1ZXJ5KTtcbiAgICAgICAgZGVsZXRlZEl0ZW0gPSBhd2FpdCByZXN1bHQubmV4dCgpIGFzIFQgfCBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFJFTU9WRSAke2RvY0tleX0gSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfSBSRVRVUk4gT0xEYDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgICAgICBkZWxldGVkSXRlbSA9IGF3YWl0IHJlc3VsdC5uZXh0KCkgYXMgVCB8IG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIERlbGV0ZSByZWxhdGVkIGVkZ2VzIG9ubHkgYWZ0ZXIgdGhlIGRvY3VtZW50IGRlbGV0ZSBzdWNjZWVkcywgc28gb3duZXJzaGlwIGNoZWNrcyBwcm90ZWN0IGNhc2NhZGVzIHRvby5cbiAgICAgIGlmIChkZWxldGVkSXRlbSkge1xuICAgICAgICBmb3IgKGNvbnN0IGVkZ2VUeXBlIG9mIGVkZ2VzVG9DYXNjYWRlKSB7XG4gICAgICAgICAgLy8gVXNlIHN0cmluZyBmb3IgZWRnZSBjb2xsZWN0aW9uIG5hbWUgKHNhZmUpXG4gICAgICAgICAgY29uc3QgZWRnZVF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgICAgICAgIEZPUiBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgICAgIEZJTFRFUiBlLl90byA9PSAke2RvY0lkfSB8fCBlLl9mcm9tID09ICR7ZG9jSWR9XG4gICAgICAgICAgICAgIFJFTU9WRSBlIElOICR7bGl0ZXJhbChlZGdlVHlwZSl9XG4gICAgICAgICAgYDtcbiAgICAgICAgICBhd2FpdCBkYXRhYmFzZS5xdWVyeShlZGdlUXVlcnkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2FsbCBhZnRlckRlbGV0ZSBob29rXG4gICAgaWYgKGNvbmZpZz8uaG9va3M/LmFmdGVyRGVsZXRlKSB7XG4gICAgICBhd2FpdCBjb25maWcuaG9va3MuYWZ0ZXJEZWxldGUoY29udGV4dCwgZG9jSWQpO1xuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkSXRlbTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SLFxuICAgICAgcGFyYW1zOiB7Y29sbGVjdGlvbiwgaWR9XG4gICAgfSwgZXJyb3IgYXMgRXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG4vKipcbiAqIENvdW50IGl0ZW1zIGluIGFueSBjb2xsZWN0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBjb3VudEl0ZW1zID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBjb2xsZWN0aW9uOiBzdHJpbmcsXG4gIGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBGaWx0ZXJHcm91cCA9IHt9XG4pOiBQcm9taXNlPG51bWJlcj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnY291bnRJdGVtcyc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGFiYXNlID0gdXNlRGIoZGF0YWJhc2VOYW1lKTtcbiAgICBjb25zdCBmaWx0ZXJDbGF1c2UgPSBidWlsZEZpbHRlcnMoZmlsdGVycywgJ2RvYycpO1xuICAgIGNvbnN0IHdoZXJlQ2xhdXNlID0gZmlsdGVyQ2xhdXNlID8gbGl0ZXJhbChgRklMVEVSICR7ZmlsdGVyQ2xhdXNlfWApIDogbGl0ZXJhbCgnJyk7XG5cbiAgICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBMRVQgaXRlbXMgPSAoXG4gICAgICAgIEZPUiBkb2MgSU4gJHtsaXRlcmFsKGNvbGxlY3Rpb24pfVxuICAgICAgICAgICR7d2hlcmVDbGF1c2V9XG4gICAgICAgICAgUkVUVVJOIGRvY1xuICAgICAgKVxuICAgICAgUkVUVVJOIExFTkdUSChpdGVtcylcbiAgICBgO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZGF0YWJhc2UucXVlcnkoYXFsUXVlcnkpO1xuICAgIHJldHVybiBhd2FpdCByZXN1bHQubmV4dCgpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1IsXG4gICAgICBwYXJhbXM6IHtjb2xsZWN0aW9uLCBmaWx0ZXJzfVxuICAgIH0sIGVycm9yIGFzIEVycm9yLCBjb250ZXh0KTtcbiAgfVxufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpdGVtIGV4aXN0c1xuICovXG5leHBvcnQgY29uc3QgaXRlbUV4aXN0cyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgY29sbGVjdGlvbjogc3RyaW5nLFxuICBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgRmlsdGVyR3JvdXBcbik6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBjb3VudCA9IGF3YWl0IGNvdW50SXRlbXMoY29udGV4dCwgY29sbGVjdGlvbiwgZmlsdGVycyk7XG4gIHJldHVybiBjb3VudCA+IDA7XG59O1xuIl0sIm5hbWVzIjpbImFxbCIsImxpdGVyYWwiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJidWlsZEZpbHRlckNsYXVzZSIsInVzZURiIiwicmVnaXN0cnkiLCJldmVudENhdGVnb3J5IiwiYnVpbGRGaWx0ZXJzIiwiZmlsdGVycyIsInZhck5hbWUiLCJzaW1wbGVGaWx0ZXJzIiwiY29uZGl0aW9ucyIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsInB1c2giLCJKU09OIiwic3RyaW5naWZ5Iiwiam9pbiIsImJ1aWxkU29ydCIsInNvcnQiLCJsZW5ndGgiLCJzb3J0UGFydHMiLCJtYXAiLCJmaWVsZCIsImRpcmVjdGlvbiIsImJ1aWxkTGltaXQiLCJsaW1pdCIsImZyb20iLCJ0byIsImNvdW50IiwiYXBwbHlQcml2YWN5RmlsdGVyIiwiY29sbGVjdGlvbiIsInNlc3Npb25JZCIsImNvbmZpZyIsImdldCIsImhhc1ByaXZhY3kiLCJhcHBseU93bmVyc2hpcEZpbHRlciIsImdldEl0ZW1CeSIsImNvbnRleHQiLCJvcHRpb25zIiwiYWN0aW9uIiwiZGF0YWJhc2VOYW1lIiwic2Vzc2lvbiIsInVzZXJJZCIsInByaXZhY3kiLCJvd25lcnNoaXAiLCJjdXN0b21RdWVyaWVzIiwiY3VzdG9tT2JqZWN0cyIsImRhdGFiYXNlIiwiZmlsdGVyQ2xhdXNlIiwicHJpdmFjeUZpbHRlciIsIm93bmVyc2hpcEZpbHRlciIsImNvbGxlY3Rpb25MaXRlcmFsIiwid2hlcmVDbGF1c2UiLCJjdXN0b21RdWVyaWVzTGl0ZXJhbCIsInJldHVyblZhbHVlIiwiYXFsUXVlcnkiLCJyZXN1bHQiLCJxdWVyeSIsIml0ZW0iLCJuZXh0IiwiZXJyb3IiLCJjYXRlZ29yeSIsImxhYmVsIiwiREFUQUJBU0VfRVJST1IiLCJwYXJhbXMiLCJnZXRMaXN0QnkiLCJzb3J0Q2xhdXNlIiwibGltaXRDbGF1c2UiLCJhbGwiLCJhZGRJdGVtIiwiZGF0YSIsImhvb2tzIiwiaW5zZXJ0RGF0YSIsImFkYXB0ZXJzIiwicGFyc2UiLCJiZWZvcmVJbnNlcnQiLCJub3ciLCJEYXRlIiwidGltZXN0YW1wcyIsImNyZWF0ZWQiLCJ1cGRhdGVkIiwiY29sbGVjdGlvblJlZiIsInNhdmUiLCJyZXR1cm5OZXciLCJuZXciLCJhZnRlckluc2VydCIsInVwZGF0ZUl0ZW0iLCJpZCIsInVwZGF0ZXMiLCJ1cGRhdGVEYXRhIiwiYmVmb3JlVXBkYXRlIiwiZG9jSWQiLCJpbmNsdWRlcyIsImFmdGVyVXBkYXRlIiwiZGVsZXRlSXRlbSIsInNvZnQiLCJjYXNjYWRlIiwiZG9jS2V5Iiwic3BsaXQiLCJwb3AiLCJkZWxldGVkSXRlbSIsImJlZm9yZURlbGV0ZSIsInVwZGF0ZSIsImRlbGV0ZWQiLCJkZWxldGVkQXQiLCJlZGdlc1RvQ2FzY2FkZSIsImNhc2NhZGVFZGdlcyIsImVkZ2VUeXBlIiwiZWRnZVF1ZXJ5IiwiYWZ0ZXJEZWxldGUiLCJjb3VudEl0ZW1zIiwiaXRlbUV4aXN0cyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FBUUEsR0FBRyxRQUFPLFdBQVc7QUFDN0IsU0FBUUMsT0FBTyxRQUFPLGVBQWU7QUFDckMsU0FBUUMsVUFBVSxRQUFPLDBCQUEwQjtBQUNuRCxTQUFRQyxRQUFRLFFBQU8sNkJBQTZCO0FBQ3BELFNBQVFDLGlCQUFpQixRQUFPLHlCQUF5QjtBQUN6RCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBQ2hELFNBQVFDLFFBQVEsUUFBTyxpQ0FBaUM7QUFNeEQsTUFBTUMsZ0JBQWdCO0FBZ0J0Qjs7Q0FFQyxHQUNELE1BQU1DLGVBQWUsQ0FDbkJDLFNBQ0FDLFVBQWtCLEtBQUs7SUFFdkIsa0RBQWtEO0lBQ2xELElBQUksV0FBV0QsV0FBVyxnQkFBZ0JBLFNBQVM7UUFDakQsT0FBT0wsa0JBQWtCSyxTQUF3QkM7SUFDbkQ7SUFFQSx3QkFBd0I7SUFDeEIsTUFBTUMsZ0JBQWdCRjtJQUN0QixNQUFNRyxhQUF1QixFQUFFO0lBRS9CLEtBQUssTUFBTSxDQUFDQyxLQUFLQyxNQUFNLElBQUlDLE9BQU9DLE9BQU8sQ0FBQ0wsZUFBZ0I7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
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/
|
|
5
5
|
import { BatchWriteItemCommandInput, BatchWriteItemCommandOutput, DeleteItemCommandInput, DeleteItemCommandOutput, GetItemCommandInput, GetItemCommandOutput, PutItemCommandInput, PutItemCommandOutput, QueryCommandInput, QueryCommandOutput, UpdateItemCommandInput, UpdateItemCommandOutput } from '@aws-sdk/client-dynamodb';
|
|
6
6
|
export declare const dynamoGet: (params: GetItemCommandInput) => Promise<GetItemCommandOutput>;
|
package/lib/actions/dynamodb.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { DynamoDB } from '@aws-sdk/client-dynamodb';
|
|
5
5
|
import { Config } from '../config.js';
|
|
6
6
|
// const eventCategory = 'dynamodb';
|
|
@@ -116,4 +116,4 @@ export const dynamoDel = (params)=>new Promise((resolve, reject)=>{
|
|
|
116
116
|
});
|
|
117
117
|
});
|
|
118
118
|
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7XG4gIEJhdGNoV3JpdGVJdGVtQ29tbWFuZElucHV0LFxuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kSW5wdXQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0LFxuICBEeW5hbW9EQixcbiAgR2V0SXRlbUNvbW1hbmRJbnB1dCxcbiAgR2V0SXRlbUNvbW1hbmRPdXRwdXQsXG4gIFB1dEl0ZW1Db21tYW5kSW5wdXQsXG4gIFB1dEl0ZW1Db21tYW5kT3V0cHV0LFxuICBRdWVyeUNvbW1hbmRJbnB1dCxcbiAgUXVlcnlDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVJdGVtQ29tbWFuZElucHV0LFxuICBVcGRhdGVJdGVtQ29tbWFuZE91dHB1dFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdkeW5hbW9kYic7XG5leHBvcnQgY29uc3QgZHluYW1vR2V0ID0gKHBhcmFtczogR2V0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIHBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuXG4gICAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEeW5hbW9MaXN0ID0gKHJlc3VsdHM6IFF1ZXJ5Q29tbWFuZE91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtcyA9IFtdfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cblxuICBmb3IobGV0IGlkeCA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgIGNvbnN0IHRtcCA9IGl0ZW1zW2lkeF07XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgbGV0IGtleTtcblxuICAgIGZvcihrZXkgaW4gdG1wKSB7XG4gICAgICBpZih0bXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZih0bXBba2V5XS5TKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB0bXBba2V5XS5TLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZih0bXBba2V5XS5OKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBwYXJzZUZsb2F0KHRtcFtrZXldLk4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uQjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEucHVzaChvYmopO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZHluYW1vR2V0TGlzdCA9IChwYXJhbXM6IFF1ZXJ5Q29tbWFuZElucHV0LCBzdGFydEl0ZW0/KTogUHJvbWlzZTxHZXRJdGVtQ29tbWFuZE91dHB1dFtdPiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcbiAgICBjb25zdCB7Q29uc2lzdGVudFJlYWQ6IGNvbnNpc3RlbnRSZWFkfSA9IHBhcmFtcztcbiAgICBjb25zdCB1cGRhdGVkUGFyYW1zID0gey4uLnBhcmFtc307XG5cbiAgICBpZihzdGFydEl0ZW0pIHtcbiAgICAgIHVwZGF0ZWRQYXJhbXMuRXhjbHVzaXZlU3RhcnRLZXkgPSBzdGFydEl0ZW07XG4gICAgfVxuXG4gICAgaWYoIWNvbnNpc3RlbnRSZWFkKSB7XG4gICAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9IFtdO1xuXG4gICAgZHluYW1vZGIucXVlcnkodXBkYXRlZFBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBRdWVyeUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goLi4uKHBhcnNlRHluYW1vTGlzdChvdXRwdXQpIHx8IFtdKSk7XG5cbiAgICAgIGNvbnN0IHtMYXN0RXZhbHVhdGVkS2V5OiBsYXN0S2V5fSA9IG91dHB1dDtcblxuICAgICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkeW5hbW9HZXRMaXN0KHBhcmFtcywgbGFzdEtleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGxpc3QpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1B1dCA9IChwYXJhbXM6IFB1dEl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLnB1dEl0ZW0ocGFyYW1zLCAoZXJyb3IsIG91dHB1dDogUHV0SXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9VcGRhdGUgPSAocGFyYW1zOiBVcGRhdGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1B1dExpc3QgPSAocGFyYW1zOiBCYXRjaFdyaXRlSXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLmJhdGNoV3JpdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9EZWwgPSAocGFyYW1zOiBEZWxldGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi5kZWxldGVJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbIkR5bmFtb0RCIiwiQ29uZmlnIiwiZHluYW1vR2V0IiwicGFyYW1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkeW5hbW9kYiIsImNyZWRlbnRpYWxzIiwiZ2V0IiwicmVnaW9uIiwiQ29uc2lzdGVudFJlYWQiLCJnZXRJdGVtIiwiZXJyb3IiLCJyZXN1bHRzIiwicGFyc2VEeW5hbW9MaXN0IiwiSXRlbXMiLCJpdGVtcyIsImRhdGEiLCJpZHgiLCJsZW4iLCJsZW5ndGgiLCJ0bXAiLCJvYmoiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIlMiLCJ0b1N0cmluZyIsIk4iLCJwYXJzZUZsb2F0IiwiQiIsInB1c2giLCJkeW5hbW9HZXRMaXN0Iiwic3RhcnRJdGVtIiwiY29uc2lzdGVudFJlYWQiLCJ1cGRhdGVkUGFyYW1zIiwiRXhjbHVzaXZlU3RhcnRLZXkiLCJsaXN0IiwicXVlcnkiLCJvdXRwdXQiLCJMYXN0RXZhbHVhdGVkS2V5IiwibGFzdEtleSIsInVuZGVmaW5lZCIsImR5bmFtb1B1dCIsInB1dEl0ZW0iLCJkeW5hbW9VcGRhdGUiLCJ1cGRhdGVJdGVtIiwiZHluYW1vUHV0TGlzdCIsImJhdGNoV3JpdGVJdGVtIiwiZHluYW1vRGVsIiwiZGVsZXRlSXRlbSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FLRUEsUUFBUSxRQVNILDJCQUEyQjtBQUVsQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUVwQyxvQ0FBb0M7QUFDcEMsT0FBTyxNQUFNQyxZQUFZLENBQUNDLFNBQ3hCLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7UUFDcEIsTUFBTUMsV0FBVyxJQUFJUCxTQUFTO1lBQzVCUSxhQUFhUCxPQUFPUSxH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
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvZHluYW1vZGIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7XG4gIEJhdGNoV3JpdGVJdGVtQ29tbWFuZElucHV0LFxuICBCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kSW5wdXQsXG4gIERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0LFxuICBEeW5hbW9EQixcbiAgR2V0SXRlbUNvbW1hbmRJbnB1dCxcbiAgR2V0SXRlbUNvbW1hbmRPdXRwdXQsXG4gIFB1dEl0ZW1Db21tYW5kSW5wdXQsXG4gIFB1dEl0ZW1Db21tYW5kT3V0cHV0LFxuICBRdWVyeUNvbW1hbmRJbnB1dCxcbiAgUXVlcnlDb21tYW5kT3V0cHV0LFxuICBVcGRhdGVJdGVtQ29tbWFuZElucHV0LFxuICBVcGRhdGVJdGVtQ29tbWFuZE91dHB1dFxufSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuLy8gY29uc3QgZXZlbnRDYXRlZ29yeSA9ICdkeW5hbW9kYic7XG5leHBvcnQgY29uc3QgZHluYW1vR2V0ID0gKHBhcmFtczogR2V0SXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8R2V0SXRlbUNvbW1hbmRPdXRwdXQ+ID0+XG4gIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBkeW5hbW9kYiA9IG5ldyBEeW5hbW9EQih7XG4gICAgICBjcmVkZW50aWFsczogQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzJyksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuICAgIHBhcmFtcy5Db25zaXN0ZW50UmVhZCA9IGZhbHNlO1xuXG4gICAgZHluYW1vZGIuZ2V0SXRlbShwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3VsdHM6IEdldEl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0cyk7XG4gICAgfSk7XG4gIH0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VEeW5hbW9MaXN0ID0gKHJlc3VsdHM6IFF1ZXJ5Q29tbWFuZE91dHB1dCk6IGFueVtdID0+IHtcbiAgY29uc3Qge0l0ZW1zOiBpdGVtcyA9IFtdfSA9IHJlc3VsdHM7XG4gIGNvbnN0IGRhdGE6IGFueVtdID0gW107XG5cblxuICBmb3IobGV0IGlkeCA9IDAsIGxlbiA9IGl0ZW1zLmxlbmd0aDsgaWR4IDwgbGVuOyBpZHgrKykge1xuICAgIGNvbnN0IHRtcCA9IGl0ZW1zW2lkeF07XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgbGV0IGtleTtcblxuICAgIGZvcihrZXkgaW4gdG1wKSB7XG4gICAgICBpZih0bXAuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICBpZih0bXBba2V5XS5TKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSB0bXBba2V5XS5TLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSBpZih0bXBba2V5XS5OKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSBwYXJzZUZsb2F0KHRtcFtrZXldLk4pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG9ialtrZXldID0gdG1wW2tleV0uQjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGRhdGEucHVzaChvYmopO1xuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgY29uc3QgZHluYW1vR2V0TGlzdCA9IChwYXJhbXM6IFF1ZXJ5Q29tbWFuZElucHV0LCBzdGFydEl0ZW0/KTogUHJvbWlzZTxHZXRJdGVtQ29tbWFuZE91dHB1dFtdPiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcbiAgICBjb25zdCB7Q29uc2lzdGVudFJlYWQ6IGNvbnNpc3RlbnRSZWFkfSA9IHBhcmFtcztcbiAgICBjb25zdCB1cGRhdGVkUGFyYW1zID0gey4uLnBhcmFtc307XG5cbiAgICBpZihzdGFydEl0ZW0pIHtcbiAgICAgIHVwZGF0ZWRQYXJhbXMuRXhjbHVzaXZlU3RhcnRLZXkgPSBzdGFydEl0ZW07XG4gICAgfVxuXG4gICAgaWYoIWNvbnNpc3RlbnRSZWFkKSB7XG4gICAgICB1cGRhdGVkUGFyYW1zLkNvbnNpc3RlbnRSZWFkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgbGlzdCA9IFtdO1xuXG4gICAgZHluYW1vZGIucXVlcnkodXBkYXRlZFBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBRdWVyeUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goLi4uKHBhcnNlRHluYW1vTGlzdChvdXRwdXQpIHx8IFtdKSk7XG5cbiAgICAgIGNvbnN0IHtMYXN0RXZhbHVhdGVkS2V5OiBsYXN0S2V5fSA9IG91dHB1dDtcblxuICAgICAgaWYobGFzdEtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBkeW5hbW9HZXRMaXN0KHBhcmFtcywgbGFzdEtleSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXNvbHZlKGxpc3QpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1B1dCA9IChwYXJhbXM6IFB1dEl0ZW1Db21tYW5kSW5wdXQpOiBQcm9taXNlPFB1dEl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLnB1dEl0ZW0ocGFyYW1zLCAoZXJyb3IsIG91dHB1dDogUHV0SXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9VcGRhdGUgPSAocGFyYW1zOiBVcGRhdGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxVcGRhdGVJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi51cGRhdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBVcGRhdGVJdGVtQ29tbWFuZE91dHB1dCkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZShvdXRwdXQpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IGR5bmFtb1B1dExpc3QgPSAocGFyYW1zOiBCYXRjaFdyaXRlSXRlbUNvbW1hbmRJbnB1dCk6IFByb21pc2U8QmF0Y2hXcml0ZUl0ZW1Db21tYW5kT3V0cHV0PiA9PlxuICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgZHluYW1vZGIgPSBuZXcgRHluYW1vREIoe1xuICAgICAgY3JlZGVudGlhbHM6IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscycpLFxuICAgICAgcmVnaW9uOiBDb25maWcuZ2V0KCdhd3MucmVnaW9uJylcbiAgICB9KTtcblxuICAgIGR5bmFtb2RiLmJhdGNoV3JpdGVJdGVtKHBhcmFtcywgKGVycm9yOiBFcnJvciwgb3V0cHV0OiBCYXRjaFdyaXRlSXRlbUNvbW1hbmRPdXRwdXQpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIHJldHVybiByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc29sdmUob3V0cHV0KTtcbiAgICB9KTtcbiAgfSk7XG5cbmV4cG9ydCBjb25zdCBkeW5hbW9EZWwgPSAocGFyYW1zOiBEZWxldGVJdGVtQ29tbWFuZElucHV0KTogUHJvbWlzZTxEZWxldGVJdGVtQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGR5bmFtb2RiID0gbmV3IER5bmFtb0RCKHtcbiAgICAgIGNyZWRlbnRpYWxzOiBDb25maWcuZ2V0KCdhd3MuY3JlZGVudGlhbHMnKSxcbiAgICAgIHJlZ2lvbjogQ29uZmlnLmdldCgnYXdzLnJlZ2lvbicpXG4gICAgfSk7XG5cbiAgICBkeW5hbW9kYi5kZWxldGVJdGVtKHBhcmFtcywgKGVycm9yLCBvdXRwdXQ6IERlbGV0ZUl0ZW1Db21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xuIl0sIm5hbWVzIjpbIkR5bmFtb0RCIiwiQ29uZmlnIiwiZHluYW1vR2V0IiwicGFyYW1zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJkeW5hbW9kYiIsImNyZWRlbnRpYWxzIiwiZ2V0IiwicmVnaW9uIiwiQ29uc2lzdGVudFJlYWQiLCJnZXRJdGVtIiwiZXJyb3IiLCJyZXN1bHRzIiwicGFyc2VEeW5hbW9MaXN0IiwiSXRlbXMiLCJpdGVtcyIsImRhdGEiLCJpZHgiLCJsZW4iLCJsZW5ndGgiLCJ0bXAiLCJvYmoiLCJrZXkiLCJoYXNPd25Qcm9wZXJ0eSIsIlMiLCJ0b1N0cmluZyIsIk4iLCJwYXJzZUZsb2F0IiwiQiIsInB1c2giLCJkeW5hbW9HZXRMaXN0Iiwic3RhcnRJdGVtIiwiY29uc2lzdGVudFJlYWQiLCJ1cGRhdGVkUGFyYW1zIiwiRXhjbHVzaXZlU3RhcnRLZXkiLCJsaXN0IiwicXVlcnkiLCJvdXRwdXQiLCJMYXN0RXZhbHVhdGVkS2V5IiwibGFzdEtleSIsInVuZGVmaW5lZCIsImR5bmFtb1B1dCIsInB1dEl0ZW0iLCJkeW5hbW9VcGRhdGUiLCJ1cGRhdGVJdGVtIiwiZHluYW1vUHV0TGlzdCIsImJhdGNoV3JpdGVJdGVtIiwiZHluYW1vRGVsIiwiZGVsZXRlSXRlbSJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FLRUEsUUFBUSxRQVNILDJCQUEyQjtBQUVsQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUVwQyxvQ0FBb0M7QUFDcEMsT0FBTyxNQUFNQyxZQUFZLENBQUNDLFNBQ3hCLElBQUlDLFFBQVEsQ0FBQ0MsU0FBU0M7UUFDcEIsTUFBTUMsV0FBVyxJQUFJUCxTQUFT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
|
package/lib/actions/email.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/
|
|
5
5
|
import { SendEmailCommandInput, SendEmailCommandOutput } from '@aws-sdk/client-ses';
|
|
6
6
|
import { EmailType } from '../types/email.types.js';
|
package/lib/actions/email.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { SES } from '@aws-sdk/client-ses';
|
|
5
5
|
import { Config } from '../config.js';
|
|
6
6
|
import { logError } from '../utils/analyticsUtils.js';
|
|
@@ -66,4 +66,4 @@ export const sendEmail = (params)=>{
|
|
|
66
66
|
});
|
|
67
67
|
};
|
|
68
68
|
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
69
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvZW1haWwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7U2VuZEVtYWlsQ29tbWFuZElucHV0LCBTZW5kRW1haWxDb21tYW5kT3V0cHV0LCBTRVN9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1zZXMnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7RW1haWxUeXBlfSBmcm9tICcuLi90eXBlcy9lbWFpbC50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnZW1haWwnO1xuXG5leHBvcnQgY29uc3Qgc2VzU2VuZCA9IChwYXJhbXM6IFNlbmRFbWFpbENvbW1hbmRJbnB1dCk6IFByb21pc2U8U2VuZEVtYWlsQ29tbWFuZE91dHB1dD4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGFjY2Vzc0tleUlkID0gQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkJyk7XG4gICAgY29uc3Qgc2VjcmV0QWNjZXNzS2V5ID0gQ29uZmlnLmdldCgnYXdzLmNyZWRlbnRpYWxzLnNlY3JldEFjY2Vzc0tleScpO1xuICAgIGNvbnN0IHNlc3Npb25Ub2tlbiA9IENvbmZpZy5nZXQoJ2F3cy5jcmVkZW50aWFscy5zZXNzaW9uVG9rZW4nKTtcbiAgICBjb25zdCBjcmVkZW50aWFscyA9IGFjY2Vzc0tleUlkICYmIHNlY3JldEFjY2Vzc0tleSA/IHtcbiAgICAgIGFjY2Vzc0tleUlkLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5LFxuICAgICAgLi4uKHNlc3Npb25Ub2tlbiA/IHtzZXNzaW9uVG9rZW59IDoge30pXG4gICAgfSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBzZXMgPSBuZXcgU0VTKHtcbiAgICAgIC4uLihjcmVkZW50aWFscyA/IHtjcmVkZW50aWFsc30gOiB7fSksXG4gICAgICByZWdpb246IENvbmZpZy5nZXQoJ2F3cy5yZWdpb24nKVxuICAgIH0pO1xuXG4gICAgc2VzLnNlbmRFbWFpbChwYXJhbXMsIChlcnJvcjogRXJyb3IsIHJlc3BvbnNlOiBTZW5kRW1haWxDb21tYW5kT3V0cHV0KSA9PiB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc29sdmUocmVzcG9uc2UpO1xuICAgIH0pO1xuICB9KTtcblxuZXhwb3J0IGNvbnN0IHNlbmRFbWFpbCA9IChwYXJhbXM6IEVtYWlsVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCB7XG4gICAgY29udGV4dCxcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgdGV4dCxcbiAgICB1c2VyXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgdG8gPSBbdXNlci5lbWFpbF07XG4gIGNvbnN0IGVtYWlsUGFyYW1zOiBTZW5kRW1haWxDb21tYW5kSW5wdXQgPSB7XG4gICAgRGVzdGluYXRpb246IHtUb0FkZHJlc3NlczogdG99LFxuICAgIE1lc3NhZ2U6IHtcbiAgICAgIEJvZHk6IHtcbiAgICAgICAgSHRtbDoge0RhdGE6IGh0bWx9LFxuICAgICAgICBUZXh0OiB7RGF0YTogdGV4dH1cbiAgICAgIH0sXG4gICAgICBTdWJqZWN0OiB7RGF0YTogc3ViamVjdH1cbiAgICB9LFxuICAgIFNvdXJjZTogYFwiJHtjb250ZXh0LmNvbmZpZy5kZXRhaWxzLnN1cHBvcnROYW1lfVwiIDwke2NvbnRleHQuY29uZmlnLmRldGFpbHMuc3VwcG9ydEVtYWlsfT5gXG4gIH07XG5cbiAgcmV0dXJuIHNlc1NlbmQoZW1haWxQYXJhbXMpXG4gICAgLnRoZW4oKCkgPT4gdHJ1ZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbG9nRXJyb3IoXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWN0aW9uOiAnc2VuZEVtYWlsJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5XG4gICAgICAgICAgfSxcbiAgICAgICAgICBlcnJvcixcbiAgICAgICAgICBjb250ZXh0XG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoKF9sb2dFcnJvcikge1xuICAgICAgICAvLyBsb2dFcnJvciByZXBvcnRzIHRoZSBTRVMgZmFpbHVyZSwgdGhlbiB0aHJvd3MgYnkgZGVzaWduLlxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG59O1xuIl0sIm5hbWVzIjpbIlNFUyIsIkNvbmZpZyIsImxvZ0Vycm9yIiwiZXZlbnRDYXRlZ29yeSIsInNlc1NlbmQiLCJwYXJhbXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImFjY2Vzc0tleUlkIiwiZ2V0Iiwic2VjcmV0QWNjZXNzS2V5Iiwic2Vzc2lvblRva2VuIiwiY3JlZGVudGlhbHMiLCJ1bmRlZmluZWQiLCJzZXMiLCJyZWdpb24iLCJzZW5kRW1haWwiLCJlcnJvciIsInJlc3BvbnNlIiwiY29udGV4dCIsImh0bWwiLCJzdWJqZWN0IiwidGV4dCIsInVzZXIiLCJ0byIsImVtYWlsIiwiZW1haWxQYXJhbXMiLCJEZXN0aW5hdGlvbiIsIlRvQWRkcmVzc2VzIiwiTWVzc2FnZSIsIkJvZHkiLCJIdG1sIiwiRGF0YSIsIlRleHQiLCJTdWJqZWN0IiwiU291cmNlIiwiY29uZmlnIiwiZGV0YWlscyIsInN1cHBvcnROYW1lIiwic3VwcG9ydEVtYWlsIiwidGhlbiIsImNhdGNoIiwiYWN0aW9uIiwiY2F0ZWdvcnkiLCJfbG9nRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQXVEQSxHQUFHLFFBQU8sc0JBQXNCO0FBRXZGLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBRXBDLFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7QUFFcEQsTUFBTUMsZ0JBQWdCO0FBRXRCLE9BQU8sTUFBTUMsVUFBVSxDQUFDQyxTQUN0QixJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQ3BCLE1BQU1DLGNBQWNSLE9BQU9TLEdBQUcsQ0FBQztRQUMvQixNQUFNQyxrQkFBa0JWLE9BQU9TLEdBQUcsQ0FBQztRQUNuQyxNQUFNRSxlQUFlWCxPQUFPUyxHQUFHLENBQUM7UUFDaEMsTUFBTUcsY0FBY0osZUFBZUUsa0JBQWtCO1lBQ25ERjtZQUNBRTtZQUNBLEdBQUlDLGVBQWU7Z0JBQUNBO1lBQVksSUFBSSxDQUFDLENBQUM7UUFDeEMsSUFBSUU7UUFDSixNQUFNQyxNQUFNLElBQUlmLElBQUk7WUFDbEIsR0FBSWEsY0FBYztnQkFBQ0E7WUFBVyxJQUFJLENBQUMsQ0FBQztZQUNwQ0csUUFBUWYsT0FBT1MsR0FBRyxDQUFDO1FBQ3JCO1FBRUFLLElBQUlFLFNBQVMsQ0FBQ1osUUFBUSxDQUFDYSxPQUFjQztZQUNuQyxJQUFHRCxPQUFPO2dCQUNSLE9BQU9WLE9BQU9VO1lBQ2hCO1lBRUEsT0FBT1gsUUFBUVk7UUFDakI7SUFDRixHQUFHO0FBRUwsT0FBTyxNQUFNRixZQUFZLENBQUNaO0lBQ3hCLE1BQU0sRUFDSmUsT0FBTyxFQUNQQyxJQUFJLEVBQ0pDLE9BQU8sRUFDUEMsSUFBSSxFQUNKQyxJQUFJLEVBQ0wsR0FBR25CO0lBRUosTUFBTW9CLEtBQUs7UUFBQ0QsS0FBS0UsS0FBSztLQUFDO0lBQ3ZCLE1BQU1DLGNBQXFDO1FBQ3pDQyxhQUFhO1lBQUNDLGFBQWFKO1FBQUU7UUFDN0JLLFNBQVM7WUFDUEMsTUFBTTtnQkFDSkMsTUFBTTtvQkFBQ0MsTUFBTVo7Z0JBQUk7Z0JBQ2pCYSxNQUFNO29CQUFDRCxNQUFNVjtnQkFBSTtZQUNuQjtZQUNBWSxTQUFTO2dCQUFDRixNQUFNWDtZQUFPO1FBQ3pCO1FBQ0FjLFFBQVEsQ0FBQyxDQUFDLEVBQUVoQixRQUFRaUIsTUFBTSxDQUFDQyxPQUFPLENBQUNDLFdBQVcsQ0FBQyxHQUFHLEVBQUVuQixRQUFRaUIsTUFBTSxDQUFDQyxPQUFPLENBQUNFLFlBQVksQ0FBQyxDQUFDLENBQUM7SUFDNUY7SUFFQSxPQUFPcEMsUUFBUXVCLGFBQ1pjLElBQUksQ0FBQyxJQUFNLE1BQ1hDLEtBQUssQ0FBQyxDQUFDeEI7UUFDTixJQUFJO1lBQ0ZoQixTQUNFO2dCQUNFeUMsUUFBUTtnQkFDUkMsVUFBVXpDO1lBQ1osR0FDQWUsT0FDQUU7UUFFSixFQUFFLE9BQU15QixXQUFXO1FBQ2pCLDJEQUEyRDtRQUM3RDtRQUVBLE9BQU87SUFDVDtBQUNKLEVBQUUifQ==
|
package/lib/actions/files.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
*
|
|
3
|
+
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
4
|
*/ import { get as httpGet } from '@nlabs/rip-hunter';
|
|
5
5
|
import { createHash } from '@nlabs/utils/parsers/strings';
|
|
6
6
|
import { aql } from 'arangojs';
|
|
@@ -228,4 +228,4 @@ export const decodeBase64 = (dataString)=>{
|
|
|
228
228
|
};
|
|
229
229
|
};
|
|
230
230
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3Ivc3JjL2FjdGlvbnMvZmlsZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtwYXJzZUZpbGV9IGZyb20gJy4uL2FkYXB0ZXJzL2ZpbGVBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHtJbWFnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ltYWdlcy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7cmVzaXplQW5kU2F2ZUltYWdlfSBmcm9tICcuL2ltYWdlcy5qcyc7XG5pbXBvcnQge2NyZWF0ZVBvc3RFZGdlfSBmcm9tICcuL3Bvc3RzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnZmlsZXMnO1xuXG5leHBvcnQgY29uc3QgR0lQSFlfVVJMID0gJ2h0dHA6Ly9hcGkuZ2lwaHkuY29tL3YxL2dpZnMnO1xuZXhwb3J0IGNvbnN0IFlPVVRVQkVfVVJMID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMnO1xuXG5pbnRlcmZhY2UgWW91VHViZUxpc3RSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGl0ZW1zPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwge3JlYWRvbmx5IHZpZGVvSWQ/OiBzdHJpbmd9O1xuICAgIHJlYWRvbmx5IHNuaXBwZXQ/OiB7cmVhZG9ubHkgdGh1bWJuYWlscz86IHtyZWFkb25seSBoaWdoPzoge3JlYWRvbmx5IHVybD86IHN0cmluZ319fTtcbiAgfT47XG59XG5cbnR5cGUgWW91VHViZUxpc3RDYWxsYmFjayA9IChlcnJvcj86IEVycm9yLCBkYXRhPzogWW91VHViZUxpc3RSZXNwb25zZSkgPT4gdm9pZDtcblxuY29uc3QgY3JlYXRlWW91VHViZUxpc3QgPSAocmVzb3VyY2U6ICdzZWFyY2gnIHwgJ3ZpZGVvcycpID0+IChcbiAgb3B0aW9uczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgcmVhZG9ubHkgc3RyaW5nW10+PixcbiAgY2FsbGJhY2s6IFlvdVR1YmVMaXN0Q2FsbGJhY2tcbik6IHZvaWQgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1lPVVRVQkVfVVJMfS8ke3Jlc291cmNlfWApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldCgna2V5JywgQ29uZmlnLmdldCgnZ29vZ2xlLmtleScpKTtcblxuICBmb3IoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IFN0cmluZyh2YWx1ZSkpO1xuICB9XG5cbiAgdm9pZCBodHRwR2V0KHVybC50b1N0cmluZygpKVxuICAgIC50aGVuKChyZXNwb25zZTogUmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAudGhlbigoZGF0YTogWW91VHViZUxpc3RSZXNwb25zZSkgPT4gY2FsbGJhY2sodW5kZWZpbmVkLCBkYXRhKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gY2FsbGJhY2soZXJyb3IpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlID0gKCkgPT4gKHtcbiAgc2VhcmNoOiB7bGlzdDogY3JlYXRlWW91VHViZUxpc3QoJ3NlYXJjaCcpfSxcbiAgdmlkZW9zOiB7bGlzdDogY3JlYXRlWW91VHViZUxpc3QoJ3ZpZGVvcycpfVxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRGaWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZpbGU6IEZpbGVUeXBlKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZEZpbGUgPSBwYXJzZUZpbGUoZmlsZSk7XG4gIHJldHVybiBhZGRJdGVtPEZpbGVUeXBlPihjb250ZXh0LCAnZmlsZXMnLCBmb3JtYXR0ZWRGaWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cHNlcnRGaWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZpbGU6IEZpbGVUeXBlKTogUHJvbWlzZTxGaWxlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBzZXJ0RmlsZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0dGVkRmlsZSA9IHBhcnNlRmlsZShmaWxlKTtcbiAgY29uc3Qge2ZpbGVJZH0gPSBmb3JtYXR0ZWRGaWxlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5mb3JtYXR0ZWRGaWxlLFxuICAgIF9rZXk6IGZpbGVJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIG1vZGlmaWVkOiBub3dcbiAgfTtcbiAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgLi4uZm9ybWF0dGVkRmlsZSxcbiAgICBfa2V5OiBmaWxlSWQsXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2ZpbGVJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBmaWxlcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZEZpbGU6IEZpbGVUeXBlKSA9PiB1cGRhdGVkRmlsZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkRmlsZSA9IChjb250ZXh0LCBmaWxlOiBGaWxlVHlwZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0dGVkRmlsZSA9IHBhcnNlRmlsZShmaWxlKTtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGZpbGVJZCxcbiAgICBmaWxlVHlwZSxcbiAgICBuYW1lLFxuICAgIHVybFxuICB9ID0gZm9ybWF0dGVkRmlsZTtcbiAgY29uc3QgZm9ybWF0RmlsZUlkID0gZmlsZUlkIHx8IGNyZWF0ZUhhc2goYGZpbGUtJHtzZXNzaW9uSWR9YCk7XG4gIGxldCB1cGRhdGVkTmFtZSA9IG5hbWU7XG5cbiAgaWYoIXVwZGF0ZWROYW1lICYmICEhdXJsKSB7XG4gICAgdXBkYXRlZE5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cblxuICBpZihmaWxlVHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGVUeXBlID09PSAnaW1hZ2UvcG5nJykge1xuICAgIHJldHVybiByZXNpemVBbmRTYXZlSW1hZ2UoY29udGV4dCwgZm9ybWF0RmlsZUlkLCBidWZmZXIsIGZpbGVUeXBlKVxuICAgICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogRmlsZVR5cGUpID0+IGluc2VydEZpbGUoY29udGV4dCwge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGZvcm1hdEZpbGVJZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG5hbWU6IHVwZGF0ZWROYW1lLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIGluc2VydEZpbGUoY29udGV4dCwge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRmlsZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWxlOiBGaWxlVHlwZSk6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEZpbGUnO1xuICBjb25zdCB7YmFzZTY0LCB1cmx9ID0gZmlsZTtcblxuICBpZighIXVybCkge1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChib2R5KSA9PiB1cGxvYWRGaWxlKGNvbnRleHQsIGZpbGUsIEJ1ZmZlci5mcm9tKGJvZHksICdiaW5hcnknKSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5GSUxFX1JFUVVFU1RcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZighIWJhc2U2NCkge1xuICAgIGNvbnN0IGJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0KTtcbiAgICByZXR1cm4gdXBsb2FkRmlsZShjb250ZXh0LCBmaWxlLCBidWZmZXIpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihFcnJvclR5cGVzLkZJTEVfUkVRVUlSRUQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdpcGh5SXRlbSA9IChnaWZJbWFnZTogYW55KTogSW1hZ2VUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGltYWdlczoge1xuICAgICAgb3JpZ2luYWw6IHt1cmwgPSAnJ30gPSB7fSxcbiAgICAgIGZpeGVkX2hlaWdodF9zbWFsbDoge3VybDogdGh1bWIgPSAnJ30gPSB7fVxuICAgIH0gPSB7fVxuICB9ID0gZ2lmSW1hZ2U7XG5cbiAgaWYoIWlkIHx8ICF1cmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGh1bWIsXG4gICAgdHlwZTogJ2dpcGh5JyxcbiAgICB1cmxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHaXBoeVRyZW5kcyA9IChsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGdpZlVybCA9IGAke0dJUEhZX1VSTH0vdHJlbmRpbmc/YXBpX2tleT0ke0NvbmZpZy5nZXQoJ2dpcGh5LmtleScpfSZsaW1pdD0ke2xpbWl0fWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQoZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uOiBhbnkpID0+IGpzb24/LmRhdGE/Lm1hcChwYXJzZUdpcGh5SXRlbSkuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHaXBoeVNlYXJjaCA9IChxdWVyeTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFF1ZXJ5ID0gZW5jb2RlVVJJKHF1ZXJ5KTtcbiAgY29uc3QgZ2lmVXJsID0gYCR7R0lQSFlfVVJMfS9zZWFyY2g/cT0ke2Zvcm1hdFF1ZXJ5fSZhcGlfa2V5PSR7Q29uZmlnLmdldCgnZ2lwaHkua2V5Jyl9JmxpbWl0PSR7bGltaXR9YDtcblxuICByZXR1cm4gaHR0cEdldChnaWZVcmwpXG4gICAgLnRoZW4oKHJlczogUmVzcG9uc2UpID0+IHJlcy5qc29uKCkpXG4gICAgLnRoZW4oKGpzb246IGFueSkgPT4ganNvbj8uZGF0YT8ubWFwKHBhcnNlR2lwaHlJdGVtKS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFlvdVR1YmVUcmVuZHMgPSAobGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb24gPSAnZ2V0WW91VHViZVRyZW5kcyc7XG4gIGNvbnN0IHlvdXR1YmUgPSBnZXRZb3VUdWJlKCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnZpZGVvcy5saXN0KHtcbiAgICAgIGNoYXJ0OiAnbW9zdFBvcHVsYXInLFxuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiBbJ3NuaXBwZXQnXSxcbiAgICAgIHJlZ2lvbkNvZGU6ICdVUydcbiAgICB9LCAoZXJyb3I6IEVycm9yLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKEVycm9yVHlwZXMuWU9VVFVCRV9FUlJPUikpO1xuICAgICAgfSBlbHNlIGlmKGRhdGEpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIHRodW1iOiBpdGVtLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybCxcbiAgICAgICAgICB0eXBlOiAneW91dHViZScsXG4gICAgICAgICAgdXJsOiBgaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke2l0ZW0uaWR9YFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmVzb2x2ZShsaXN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0WW91VHViZVNlYXJjaCA9IChxdWVyeTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPGFueVtdPiA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbiA9ICdnZXRZb3VUdWJlU2VhcmNoJztcbiAgY29uc3QgeW91dHViZSA9IGdldFlvdVR1YmUoKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHlvdXR1YmUuc2VhcmNoLmxpc3Qoe1xuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiBbJ3NuaXBwZXQnXSxcbiAgICAgIHE6IHF1ZXJ5LFxuICAgICAgcmVnaW9uQ29kZTogJ1VTJ1xuICAgIH0sIChlcnJvcjogRXJyb3IsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoRXJyb3JUeXBlcy5ZT1VUVUJFX0VSUk9SKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCB7aXRlbXN9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gdHlwZW9mIGl0ZW0uaWQgPT09ICdzdHJpbmcnID8gaXRlbS5pZCA6IGl0ZW0uaWQ/LnZpZGVvSWQ7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgICAgdXJsOiBgaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke2lkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckZpbGVzID0gKHVzZXJJZDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGB1c2Vycy8ke3VzZXJJZH0vZmlsZXMvJHtmaWxlbmFtZX1gO1xuXG5leHBvcnQgY29uc3QgbGlua0ZpbGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nLCBmaWxlczogRmlsZVR5cGVbXSk6IFByb21pc2U8YW55PiA9PlxuICBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGVUeXBlKSA9PiB1cHNlcnRGaWxlKGNvbnRleHQsIGZpbGUpXG4gICAgICAudGhlbigoZmlsZTogRmlsZVR5cGUpID0+IGNyZWF0ZVBvc3RFZGdlKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZS5pZCwgJ2lzUG9zdGVkJywge3R5cGU6IGZpbGUuZmlsZVR5cGV9KSkpXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlcyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlRmlsZXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNQb3N0ZWQnKTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhwb3N0RG9jSWQsIHt9KVxuICAgIC50aGVuKChlZGdlczogYW55KSA9PiB7XG4gICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzUG9zdGVkYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmtGaWxlcyhjb250ZXh0LCBwb3N0RG9jSWQsIGZpbGVzKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZXMpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZmlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlQmFzZTY0ID0gKGJ1ZmZlcjogQnVmZmVyKTogc3RyaW5nID0+IEJ1ZmZlci5mcm9tKGJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG5leHBvcnQgY29uc3QgZGVjb2RlQmFzZTY0ID0gKGRhdGFTdHJpbmc6IHN0cmluZyk6IGFueSA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbiA9ICdkZWNvZGVCYXNlNjQnO1xuICBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LSsvXSspO2Jhc2U2NCwoLispJC8pIHx8IFtdO1xuICBsZXQgbWF0Y2hlcyA9IGdldERhdGEoZGF0YVN0cmluZyk7XG5cbiAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICBtYXRjaGVzID0gZ2V0RGF0YShkZWNvZGVVUklDb21wb25lbnQoZGF0YVN0cmluZykpO1xuXG4gICAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtYXRjaGVzWzJdLCAnYmFzZTY0JyksXG4gICAgdHlwZTogbWF0Y2hlc1sxXVxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsImFxbCIsInBhcnNlRmlsZSIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsInJlc2l6ZUFuZFNhdmVJbWFnZSIsImNyZWF0ZVBvc3RFZGdlIiwiZXZlbnRDYXRlZ29yeSIsIkdJUEhZX1VSTCIsIllPVVRVQkVfVVJMIiwiY3JlYXRlWW91VHViZUxpc3QiLCJyZXNvdXJjZSIsIm9wdGlvbnMiLCJjYWxsYmFjayIsInVybCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJTdHJpbmciLCJ0b1N0cmluZyIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwidW5kZWZpbmVkIiwiY2F0Y2giLCJlcnJvciIsImdldFlvdVR1YmUiLCJzZWFyY2giLCJsaXN0IiwidmlkZW9zIiwiaW5zZXJ0RmlsZSIsImNvbnRleHQiLCJmaWxlIiwiZm9ybWF0dGVkRmlsZSIsInVwc2VydEZpbGUiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJmaWxlSWQiLCJub3ciLCJEYXRlIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwibW9kaWZpZWQiLCJ1cGRhdGUiLCJhcWxRcnkiLCJxdWVyeSIsImN1cnNvciIsIm5leHQiLCJ1cGRhdGVkRmlsZSIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsInVwbG9hZEZpbGUiLCJidWZmZXIiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiZGVzY3JpcHRpb24iLCJmaWxlVHlwZSIsIm5hbWUiLCJmb3JtYXRGaWxlSWQiLCJ1cGRhdGVkTmFtZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicmVzaXplZEltYWdlIiwiYWRkRmlsZSIsImJhc2U2NCIsImJvZHkiLCJCdWZmZXIiLCJmcm9tIiwiRklMRV9SRVFVRVNUIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiRklMRV9SRVFVSVJFRCIsInBhcnNlR2lwaHlJdGVtIiwiZ2lmSW1hZ2UiLCJpZCIsImltYWdlcyIsIm9yaWdpbmFsIiwiZml4ZWRfaGVpZ2h0X3NtYWxsIiwidGh1bWIiLCJ0eXBlIiwiZ2V0R2lwaHlUcmVuZHMiLCJsaW1pdCIsImdpZlVybCIsInJlcyIsIm1hcCIsImZpbHRlciIsIml0ZW0iLCJnZXRHaXBoeVNlYXJjaCIsImZvcm1hdFF1ZXJ5IiwiZW5jb2RlVVJJIiwiZ2V0WW91VHViZVRyZW5kcyIsInlvdXR1YmUiLCJyZXNvbHZlIiwiY2hhcnQiLCJtYXhSZXN1bHRzIiwicGFydCIsInJlZ2lvbkNvZGUiLCJjb25zb2xlIiwiWU9VVFVCRV9FUlJPUiIsIml0ZW1zIiwic25pcHBldCIsInRodW1ibmFpbHMiLCJoaWdoIiwiZ2V0WW91VHViZVNlYXJjaCIsInEiLCJ2aWRlb0lkIiwiZ2V0UGF0aFVzZXJGaWxlcyIsImZpbGVuYW1lIiwibGlua0ZpbGVzIiwicG9zdERvY0lkIiwiZmlsZXMiLCJhbGwiLCJ1cGRhdGVGaWxlcyIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImluRWRnZXMiLCJlZGdlcyIsImxlbmd0aCIsImVkZ2UiLCJlZGdlS2V5IiwiZW5jb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0IiwiZGF0YVN0cmluZyIsImdldERhdGEiLCJzdHIiLCJtYXRjaCIsIm1hdGNoZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJJTlZBTElEX0lOUFVUIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsUUFBTywrQkFBK0I7QUFDeEQsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFHN0IsU0FBUUMsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUVwQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBR25ELFNBQVFDLFFBQVEsUUFBTyw2QkFBNkI7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
|
|
231
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvZmlsZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7Z2V0IGFzIGh0dHBHZXR9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaH0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtwYXJzZUZpbGV9IGZyb20gJy4uL2FkYXB0ZXJzL2ZpbGVBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlc30gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtGaWxlVHlwZX0gZnJvbSAnLi4vdHlwZXMvZmlsZXMudHlwZXMuanMnO1xuaW1wb3J0IHtJbWFnZVR5cGV9IGZyb20gJy4uL3R5cGVzL2ltYWdlcy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbX0gZnJvbSAnLi9jcnVkLmpzJztcbmltcG9ydCB7cmVzaXplQW5kU2F2ZUltYWdlfSBmcm9tICcuL2ltYWdlcy5qcyc7XG5pbXBvcnQge2NyZWF0ZVBvc3RFZGdlfSBmcm9tICcuL3Bvc3RzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAnZmlsZXMnO1xuXG5leHBvcnQgY29uc3QgR0lQSFlfVVJMID0gJ2h0dHA6Ly9hcGkuZ2lwaHkuY29tL3YxL2dpZnMnO1xuZXhwb3J0IGNvbnN0IFlPVVRVQkVfVVJMID0gJ2h0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL3lvdXR1YmUvdjMnO1xuXG5pbnRlcmZhY2UgWW91VHViZUxpc3RSZXNwb25zZSB7XG4gIHJlYWRvbmx5IGl0ZW1zPzogQXJyYXk8e1xuICAgIHJlYWRvbmx5IGlkPzogc3RyaW5nIHwge3JlYWRvbmx5IHZpZGVvSWQ/OiBzdHJpbmd9O1xuICAgIHJlYWRvbmx5IHNuaXBwZXQ/OiB7cmVhZG9ubHkgdGh1bWJuYWlscz86IHtyZWFkb25seSBoaWdoPzoge3JlYWRvbmx5IHVybD86IHN0cmluZ319fTtcbiAgfT47XG59XG5cbnR5cGUgWW91VHViZUxpc3RDYWxsYmFjayA9IChlcnJvcj86IEVycm9yLCBkYXRhPzogWW91VHViZUxpc3RSZXNwb25zZSkgPT4gdm9pZDtcblxuY29uc3QgY3JlYXRlWW91VHViZUxpc3QgPSAocmVzb3VyY2U6ICdzZWFyY2gnIHwgJ3ZpZGVvcycpID0+IChcbiAgb3B0aW9uczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgcmVhZG9ubHkgc3RyaW5nW10+PixcbiAgY2FsbGJhY2s6IFlvdVR1YmVMaXN0Q2FsbGJhY2tcbik6IHZvaWQgPT4ge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke1lPVVRVQkVfVVJMfS8ke3Jlc291cmNlfWApO1xuICB1cmwuc2VhcmNoUGFyYW1zLnNldCgna2V5JywgQ29uZmlnLmdldCgnZ29vZ2xlLmtleScpKTtcblxuICBmb3IoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9wdGlvbnMpKSB7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLmpvaW4oJywnKSA6IFN0cmluZyh2YWx1ZSkpO1xuICB9XG5cbiAgdm9pZCBodHRwR2V0KHVybC50b1N0cmluZygpKVxuICAgIC50aGVuKChyZXNwb25zZTogUmVzcG9uc2UpID0+IHJlc3BvbnNlLmpzb24oKSlcbiAgICAudGhlbigoZGF0YTogWW91VHViZUxpc3RSZXNwb25zZSkgPT4gY2FsbGJhY2sodW5kZWZpbmVkLCBkYXRhKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gY2FsbGJhY2soZXJyb3IpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRZb3VUdWJlID0gKCkgPT4gKHtcbiAgc2VhcmNoOiB7bGlzdDogY3JlYXRlWW91VHViZUxpc3QoJ3NlYXJjaCcpfSxcbiAgdmlkZW9zOiB7bGlzdDogY3JlYXRlWW91VHViZUxpc3QoJ3ZpZGVvcycpfVxufSk7XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRGaWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZpbGU6IEZpbGVUeXBlKSA9PiB7XG4gIGNvbnN0IGZvcm1hdHRlZEZpbGUgPSBwYXJzZUZpbGUoZmlsZSk7XG4gIHJldHVybiBhZGRJdGVtPEZpbGVUeXBlPihjb250ZXh0LCAnZmlsZXMnLCBmb3JtYXR0ZWRGaWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cHNlcnRGaWxlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGZpbGU6IEZpbGVUeXBlKTogUHJvbWlzZTxGaWxlVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBzZXJ0RmlsZSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0dGVkRmlsZSA9IHBhcnNlRmlsZShmaWxlKTtcbiAgY29uc3Qge2ZpbGVJZH0gPSBmb3JtYXR0ZWRGaWxlO1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBjb25zdCBpbnNlcnQ6IGFueSA9IHtcbiAgICAuLi5mb3JtYXR0ZWRGaWxlLFxuICAgIF9rZXk6IGZpbGVJZCxcbiAgICBhZGRlZDogbm93LFxuICAgIG1vZGlmaWVkOiBub3dcbiAgfTtcbiAgY29uc3QgdXBkYXRlOiBhbnkgPSB7XG4gICAgLi4uZm9ybWF0dGVkRmlsZSxcbiAgICBfa2V5OiBmaWxlSWQsXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuXG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2ZpbGVJZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBmaWxlcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXBkYXRlZEZpbGU6IEZpbGVUeXBlKSA9PiB1cGRhdGVkRmlsZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBsb2FkRmlsZSA9IChjb250ZXh0LCBmaWxlOiBGaWxlVHlwZSwgYnVmZmVyOiBCdWZmZXIpID0+IHtcbiAgY29uc3Qge3Nlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0dGVkRmlsZSA9IHBhcnNlRmlsZShmaWxlKTtcbiAgY29uc3Qge1xuICAgIGRlc2NyaXB0aW9uLFxuICAgIGZpbGVJZCxcbiAgICBmaWxlVHlwZSxcbiAgICBuYW1lLFxuICAgIHVybFxuICB9ID0gZm9ybWF0dGVkRmlsZTtcbiAgY29uc3QgZm9ybWF0RmlsZUlkID0gZmlsZUlkIHx8IGNyZWF0ZUhhc2goYGZpbGUtJHtzZXNzaW9uSWR9YCk7XG4gIGxldCB1cGRhdGVkTmFtZSA9IG5hbWU7XG5cbiAgaWYoIXVwZGF0ZWROYW1lICYmICEhdXJsKSB7XG4gICAgdXBkYXRlZE5hbWUgPSB1cmwuc3Vic3RyaW5nKHVybC5sYXN0SW5kZXhPZignLycpICsgMSk7XG4gIH1cblxuICBpZihmaWxlVHlwZSA9PT0gJ2ltYWdlL2pwZWcnIHx8IGZpbGVUeXBlID09PSAnaW1hZ2UvcG5nJykge1xuICAgIHJldHVybiByZXNpemVBbmRTYXZlSW1hZ2UoY29udGV4dCwgZm9ybWF0RmlsZUlkLCBidWZmZXIsIGZpbGVUeXBlKVxuICAgICAgLnRoZW4oKHJlc2l6ZWRJbWFnZTogRmlsZVR5cGUpID0+IGluc2VydEZpbGUoY29udGV4dCwge1xuICAgICAgICAuLi5yZXNpemVkSW1hZ2UsXG4gICAgICAgIF9rZXk6IGZvcm1hdEZpbGVJZCxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG5hbWU6IHVwZGF0ZWROYW1lLFxuICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgfSkpO1xuICB9XG5cbiAgcmV0dXJuIGluc2VydEZpbGUoY29udGV4dCwge1xuICAgIC4uLmZvcm1hdHRlZEZpbGUsXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRmlsZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBmaWxlOiBGaWxlVHlwZSk6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEZpbGUnO1xuICBjb25zdCB7YmFzZTY0LCB1cmx9ID0gZmlsZTtcblxuICBpZighIXVybCkge1xuICAgIHJldHVybiBodHRwR2V0KHVybClcbiAgICAgIC50aGVuKChib2R5KSA9PiB1cGxvYWRGaWxlKGNvbnRleHQsIGZpbGUsIEJ1ZmZlci5mcm9tKGJvZHksICdiaW5hcnknKSkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5GSUxFX1JFUVVFU1RcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH0gZWxzZSBpZighIWJhc2U2NCkge1xuICAgIGNvbnN0IGJ1ZmZlcjogQnVmZmVyID0gQnVmZmVyLmZyb20oYmFzZTY0KTtcbiAgICByZXR1cm4gdXBsb2FkRmlsZShjb250ZXh0LCBmaWxlLCBidWZmZXIpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihFcnJvclR5cGVzLkZJTEVfUkVRVUlSRUQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUdpcGh5SXRlbSA9IChnaWZJbWFnZTogYW55KTogSW1hZ2VUeXBlID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIGltYWdlczoge1xuICAgICAgb3JpZ2luYWw6IHt1cmwgPSAnJ30gPSB7fSxcbiAgICAgIGZpeGVkX2hlaWdodF9zbWFsbDoge3VybDogdGh1bWIgPSAnJ30gPSB7fVxuICAgIH0gPSB7fVxuICB9ID0gZ2lmSW1hZ2U7XG5cbiAgaWYoIWlkIHx8ICF1cmwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaWQsXG4gICAgdGh1bWIsXG4gICAgdHlwZTogJ2dpcGh5JyxcbiAgICB1cmxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHaXBoeVRyZW5kcyA9IChsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGdpZlVybCA9IGAke0dJUEhZX1VSTH0vdHJlbmRpbmc/YXBpX2tleT0ke0NvbmZpZy5nZXQoJ2dpcGh5LmtleScpfSZsaW1pdD0ke2xpbWl0fWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQoZ2lmVXJsKVxuICAgIC50aGVuKChyZXM6IFJlc3BvbnNlKSA9PiByZXMuanNvbigpKVxuICAgIC50aGVuKChqc29uOiBhbnkpID0+IGpzb24/LmRhdGE/Lm1hcChwYXJzZUdpcGh5SXRlbSkuZmlsdGVyKChpdGVtKSA9PiAhIWl0ZW0pKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHaXBoeVNlYXJjaCA9IChxdWVyeTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPEltYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGZvcm1hdFF1ZXJ5ID0gZW5jb2RlVVJJKHF1ZXJ5KTtcbiAgY29uc3QgZ2lmVXJsID0gYCR7R0lQSFlfVVJMfS9zZWFyY2g/cT0ke2Zvcm1hdFF1ZXJ5fSZhcGlfa2V5PSR7Q29uZmlnLmdldCgnZ2lwaHkua2V5Jyl9JmxpbWl0PSR7bGltaXR9YDtcblxuICByZXR1cm4gaHR0cEdldChnaWZVcmwpXG4gICAgLnRoZW4oKHJlczogUmVzcG9uc2UpID0+IHJlcy5qc29uKCkpXG4gICAgLnRoZW4oKGpzb246IGFueSkgPT4ganNvbj8uZGF0YT8ubWFwKHBhcnNlR2lwaHlJdGVtKS5maWx0ZXIoKGl0ZW0pID0+ICEhaXRlbSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFlvdVR1YmVUcmVuZHMgPSAobGltaXQ6IG51bWJlciA9IDMwKTogUHJvbWlzZTxhbnlbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb24gPSAnZ2V0WW91VHViZVRyZW5kcyc7XG4gIGNvbnN0IHlvdXR1YmUgPSBnZXRZb3VUdWJlKCk7XG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICB5b3V0dWJlLnZpZGVvcy5saXN0KHtcbiAgICAgIGNoYXJ0OiAnbW9zdFBvcHVsYXInLFxuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiBbJ3NuaXBwZXQnXSxcbiAgICAgIHJlZ2lvbkNvZGU6ICdVUydcbiAgICB9LCAoZXJyb3I6IEVycm9yLCBkYXRhOiBhbnkpID0+IHtcbiAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKEVycm9yVHlwZXMuWU9VVFVCRV9FUlJPUikpO1xuICAgICAgfSBlbHNlIGlmKGRhdGEpIHtcbiAgICAgICAgY29uc3QgbGlzdCA9IGRhdGEuaXRlbXMubWFwKChpdGVtKSA9PiAoe1xuICAgICAgICAgIGlkOiBpdGVtLmlkLFxuICAgICAgICAgIHRodW1iOiBpdGVtLnNuaXBwZXQudGh1bWJuYWlscy5oaWdoLnVybCxcbiAgICAgICAgICB0eXBlOiAneW91dHViZScsXG4gICAgICAgICAgdXJsOiBgaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke2l0ZW0uaWR9YFxuICAgICAgICB9KSk7XG5cbiAgICAgICAgcmVzb2x2ZShsaXN0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0WW91VHViZVNlYXJjaCA9IChxdWVyeTogc3RyaW5nLCBsaW1pdDogbnVtYmVyID0gMzApOiBQcm9taXNlPGFueVtdPiA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbiA9ICdnZXRZb3VUdWJlU2VhcmNoJztcbiAgY29uc3QgeW91dHViZSA9IGdldFlvdVR1YmUoKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHlvdXR1YmUuc2VhcmNoLmxpc3Qoe1xuICAgICAgbWF4UmVzdWx0czogbGltaXQsXG4gICAgICBwYXJ0OiBbJ3NuaXBwZXQnXSxcbiAgICAgIHE6IHF1ZXJ5LFxuICAgICAgcmVnaW9uQ29kZTogJ1VTJ1xuICAgIH0sIChlcnJvcjogRXJyb3IsIGRhdGE6IGFueSkgPT4ge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoRXJyb3JUeXBlcy5ZT1VUVUJFX0VSUk9SKSk7XG4gICAgICB9IGVsc2UgaWYoZGF0YSkge1xuICAgICAgICBjb25zdCB7aXRlbXN9ID0gZGF0YTtcbiAgICAgICAgY29uc3QgbGlzdCA9IGl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkID0gdHlwZW9mIGl0ZW0uaWQgPT09ICdzdHJpbmcnID8gaXRlbS5pZCA6IGl0ZW0uaWQ/LnZpZGVvSWQ7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgdGh1bWI6IGl0ZW0uc25pcHBldC50aHVtYm5haWxzLmhpZ2gudXJsLFxuICAgICAgICAgICAgdHlwZTogJ3lvdXR1YmUnLFxuICAgICAgICAgICAgdXJsOiBgaHR0cDovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC8ke2lkfWBcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNvbHZlKGxpc3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQYXRoVXNlckZpbGVzID0gKHVzZXJJZDogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nID0+IGB1c2Vycy8ke3VzZXJJZH0vZmlsZXMvJHtmaWxlbmFtZX1gO1xuXG5leHBvcnQgY29uc3QgbGlua0ZpbGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBvc3REb2NJZDogc3RyaW5nLCBmaWxlczogRmlsZVR5cGVbXSk6IFByb21pc2U8YW55PiA9PlxuICBQcm9taXNlLmFsbChcbiAgICBmaWxlcy5tYXAoKGZpbGU6IEZpbGVUeXBlKSA9PiB1cHNlcnRGaWxlKGNvbnRleHQsIGZpbGUpXG4gICAgICAudGhlbigoZmlsZTogRmlsZVR5cGUpID0+IGNyZWF0ZVBvc3RFZGdlKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZS5pZCwgJ2lzUG9zdGVkJywge3R5cGU6IGZpbGUuZmlsZVR5cGV9KSkpXG4gICk7XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVGaWxlcyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBwb3N0RG9jSWQ6IHN0cmluZywgZmlsZXM6IEZpbGVUeXBlW10pOiBQcm9taXNlPGFueT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAndXBkYXRlRmlsZXMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaXNQb3N0ZWQnKTtcblxuICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uaW5FZGdlcyhwb3N0RG9jSWQsIHt9KVxuICAgIC50aGVuKChlZGdlczogYW55KSA9PiB7XG4gICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgICAgIGVkZ2VzLm1hcCgoZWRnZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qge19rZXk6IGVkZ2VLZXl9ID0gZWRnZTtcbiAgICAgICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGlzUG9zdGVkYDtcblxuICAgICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSlcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZihmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGxpbmtGaWxlcyhjb250ZXh0LCBwb3N0RG9jSWQsIGZpbGVzKS50aGVuKCgpID0+IGZpbGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmKGZpbGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gbGlua0ZpbGVzKGNvbnRleHQsIHBvc3REb2NJZCwgZmlsZXMpXG4gICAgICAgICAgLnRoZW4oKCkgPT4gZmlsZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmlsZXM7XG4gICAgfSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlQmFzZTY0ID0gKGJ1ZmZlcjogQnVmZmVyKTogc3RyaW5nID0+IEJ1ZmZlci5mcm9tKGJ1ZmZlcikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuXG5leHBvcnQgY29uc3QgZGVjb2RlQmFzZTY0ID0gKGRhdGFTdHJpbmc6IHN0cmluZyk6IGFueSA9PiB7XG4gIC8vIGNvbnN0IGFjdGlvbiA9ICdkZWNvZGVCYXNlNjQnO1xuICBjb25zdCBnZXREYXRhID0gKHN0cjogc3RyaW5nKSA9PiBzdHIubWF0Y2goL15kYXRhOihbQS1aYS16LSsvXSspO2Jhc2U2NCwoLispJC8pIHx8IFtdO1xuICBsZXQgbWF0Y2hlcyA9IGdldERhdGEoZGF0YVN0cmluZyk7XG5cbiAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICBtYXRjaGVzID0gZ2V0RGF0YShkZWNvZGVVUklDb21wb25lbnQoZGF0YVN0cmluZykpO1xuXG4gICAgaWYobWF0Y2hlcy5sZW5ndGggIT09IDMpIHtcbiAgICAgIHRocm93IEVycm9yKEVycm9yVHlwZXMuSU5WQUxJRF9JTlBVVCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkYXRhOiBCdWZmZXIuZnJvbShtYXRjaGVzWzJdLCAnYmFzZTY0JyksXG4gICAgdHlwZTogbWF0Y2hlc1sxXVxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJnZXQiLCJodHRwR2V0IiwiY3JlYXRlSGFzaCIsImFxbCIsInBhcnNlRmlsZSIsIkNvbmZpZyIsIkVycm9yVHlwZXMiLCJsb2dFcnJvciIsInVzZURiIiwiYWRkSXRlbSIsInJlc2l6ZUFuZFNhdmVJbWFnZSIsImNyZWF0ZVBvc3RFZGdlIiwiZXZlbnRDYXRlZ29yeSIsIkdJUEhZX1VSTCIsIllPVVRVQkVfVVJMIiwiY3JlYXRlWW91VHViZUxpc3QiLCJyZXNvdXJjZSIsIm9wdGlvbnMiLCJjYWxsYmFjayIsInVybCIsIlVSTCIsInNlYXJjaFBhcmFtcyIsInNldCIsImtleSIsInZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsIkFycmF5IiwiaXNBcnJheSIsImpvaW4iLCJTdHJpbmciLCJ0b1N0cmluZyIsInRoZW4iLCJyZXNwb25zZSIsImpzb24iLCJkYXRhIiwidW5kZWZpbmVkIiwiY2F0Y2giLCJlcnJvciIsImdldFlvdVR1YmUiLCJzZWFyY2giLCJsaXN0IiwidmlkZW9zIiwiaW5zZXJ0RmlsZSIsImNvbnRleHQiLCJmaWxlIiwiZm9ybWF0dGVkRmlsZSIsInVwc2VydEZpbGUiLCJhY3Rpb24iLCJkYXRhYmFzZU5hbWUiLCJmaWxlSWQiLCJub3ciLCJEYXRlIiwiaW5zZXJ0IiwiX2tleSIsImFkZGVkIiwibW9kaWZpZWQiLCJ1cGRhdGUiLCJhcWxRcnkiLCJxdWVyeSIsImN1cnNvciIsIm5leHQiLCJ1cGRhdGVkRmlsZSIsImNhdGVnb3J5IiwibGFiZWwiLCJEQVRBQkFTRV9FUlJPUiIsInVwbG9hZEZpbGUiLCJidWZmZXIiLCJzZXNzaW9uIiwidXNlcklkIiwic2Vzc2lvbklkIiwiZGVzY3JpcHRpb24iLCJmaWxlVHlwZSIsIm5hbWUiLCJmb3JtYXRGaWxlSWQiLCJ1cGRhdGVkTmFtZSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicmVzaXplZEltYWdlIiwiYWRkRmlsZSIsImJhc2U2NCIsImJvZHkiLCJCdWZmZXIiLCJmcm9tIiwiRklMRV9SRVFVRVNUIiwiUHJvbWlzZSIsInJlamVjdCIsIkVycm9yIiwiRklMRV9SRVFVSVJFRCIsInBhcnNlR2lwaHlJdGVtIiwiZ2lmSW1hZ2UiLCJpZCIsImltYWdlcyIsIm9yaWdpbmFsIiwiZml4ZWRfaGVpZ2h0X3NtYWxsIiwidGh1bWIiLCJ0eXBlIiwiZ2V0R2lwaHlUcmVuZHMiLCJsaW1pdCIsImdpZlVybCIsInJlcyIsIm1hcCIsImZpbHRlciIsIml0ZW0iLCJnZXRHaXBoeVNlYXJjaCIsImZvcm1hdFF1ZXJ5IiwiZW5jb2RlVVJJIiwiZ2V0WW91VHViZVRyZW5kcyIsInlvdXR1YmUiLCJyZXNvbHZlIiwiY2hhcnQiLCJtYXhSZXN1bHRzIiwicGFydCIsInJlZ2lvbkNvZGUiLCJjb25zb2xlIiwiWU9VVFVCRV9FUlJPUiIsIml0ZW1zIiwic25pcHBldCIsInRodW1ibmFpbHMiLCJoaWdoIiwiZ2V0WW91VHViZVNlYXJjaCIsInEiLCJ2aWRlb0lkIiwiZ2V0UGF0aFVzZXJGaWxlcyIsImZpbGVuYW1lIiwibGlua0ZpbGVzIiwicG9zdERvY0lkIiwiZmlsZXMiLCJhbGwiLCJ1cGRhdGVGaWxlcyIsImVkZ2VDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsImluRWRnZXMiLCJlZGdlcyIsImxlbmd0aCIsImVkZ2UiLCJlZGdlS2V5IiwiZW5jb2RlQmFzZTY0IiwiZGVjb2RlQmFzZTY0IiwiZGF0YVN0cmluZyIsImdldERhdGEiLCJzdHIiLCJtYXRjaCIsIm1hdGNoZXMiLCJkZWNvZGVVUklDb21wb25lbnQiLCJJTlZBTElEX0lOUFVUIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxPQUFPQyxPQUFPLFFBQU8sb0JBQW9CO0FBQ2pELFNBQVFDLFVBQVUsUUFBTywrQkFBK0I7QUFDeEQsU0FBUUMsR0FBRyxRQUFPLFdBQVc7QUFHN0IsU0FBUUMsU0FBUyxRQUFPLDZCQUE2QjtBQUNyRCxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUVwQyxTQUFRQyxVQUFVLFFBQU8sMEJBQTBCO0FBR25ELFNB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
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ApiContext } from '../types/auth.types.js';
|
|
2
|
+
import type { FlagValue, ResolvedFlag } from '../types/flags.types.js';
|
|
3
|
+
export declare const resolveFlags: (context: ApiContext) => Promise<ResolvedFlag[]>;
|
|
4
|
+
export declare const evaluateFlag: <T extends FlagValue>(context: ApiContext, key: string, defaultValue: T) => Promise<T>;
|
|
5
|
+
export declare const setFlagOverride: (context: ApiContext, key: string, value: FlagValue) => Promise<ResolvedFlag>;
|
|
6
|
+
export declare const resetFlagOverride: (context: ApiContext, key: string) => Promise<ResolvedFlag>;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { createHash, parseString } from '@nlabs/utils/parsers/strings';
|
|
2
|
+
import { isAdminUser } from '../utils/sessionUtils.js';
|
|
3
|
+
import { useDb } from '../utils/arangodbUtils.js';
|
|
4
|
+
const COLLECTION = 'flags';
|
|
5
|
+
const FLAG_KEY_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,199}$/;
|
|
6
|
+
const getDefinitions = (context)=>context.flagDefinitions || [];
|
|
7
|
+
const validateDefinition = (definition)=>{
|
|
8
|
+
if (!FLAG_KEY_PATTERN.test(definition.key)) {
|
|
9
|
+
throw new Error(`invalid_flag_key:${definition.key}`);
|
|
10
|
+
}
|
|
11
|
+
if (definition.type === 'boolean' && typeof definition.defaultValue !== 'boolean') {
|
|
12
|
+
throw new Error(`invalid_boolean_flag_default:${definition.key}`);
|
|
13
|
+
}
|
|
14
|
+
if (definition.type === 'variant') {
|
|
15
|
+
if (typeof definition.defaultValue !== 'string' || !definition.values?.length) {
|
|
16
|
+
throw new Error(`invalid_variant_flag:${definition.key}`);
|
|
17
|
+
}
|
|
18
|
+
if (!definition.values.includes(definition.defaultValue)) {
|
|
19
|
+
throw new Error(`variant_default_not_allowed:${definition.key}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const validateValue = (definition, value)=>{
|
|
24
|
+
if (definition.type === 'boolean' && typeof value !== 'boolean') {
|
|
25
|
+
throw new Error(`flag_value_must_be_boolean:${definition.key}`);
|
|
26
|
+
}
|
|
27
|
+
if (definition.type === 'variant' && (typeof value !== 'string' || !definition.values?.includes(value))) {
|
|
28
|
+
throw new Error(`flag_value_not_allowed:${definition.key}`);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const getDefinitionMap = (context)=>{
|
|
32
|
+
const definitions = getDefinitions(context);
|
|
33
|
+
const map = new Map();
|
|
34
|
+
definitions.forEach((definition)=>{
|
|
35
|
+
validateDefinition(definition);
|
|
36
|
+
if (map.has(definition.key)) {
|
|
37
|
+
throw new Error(`duplicate_flag_key:${definition.key}`);
|
|
38
|
+
}
|
|
39
|
+
map.set(definition.key, definition);
|
|
40
|
+
});
|
|
41
|
+
return map;
|
|
42
|
+
};
|
|
43
|
+
const getOverrides = async (context)=>{
|
|
44
|
+
const database = useDb(context.databaseName);
|
|
45
|
+
const collection = database.collection(COLLECTION);
|
|
46
|
+
if (!await collection.exists()) {
|
|
47
|
+
return [];
|
|
48
|
+
}
|
|
49
|
+
const cursor = await database.query({
|
|
50
|
+
bindVars: {
|
|
51
|
+
'@collection': COLLECTION
|
|
52
|
+
},
|
|
53
|
+
query: 'FOR flag IN @@collection RETURN flag'
|
|
54
|
+
});
|
|
55
|
+
return await cursor.all();
|
|
56
|
+
};
|
|
57
|
+
const toResolvedFlag = (definition, override)=>{
|
|
58
|
+
const hasValidOverride = override ? (()=>{
|
|
59
|
+
try {
|
|
60
|
+
validateValue(definition, override.value);
|
|
61
|
+
return true;
|
|
62
|
+
} catch {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
})() : false;
|
|
66
|
+
return {
|
|
67
|
+
...definition,
|
|
68
|
+
source: hasValidOverride ? 'database' : 'default',
|
|
69
|
+
...hasValidOverride && override?.updatedAt ? {
|
|
70
|
+
updatedAt: override.updatedAt
|
|
71
|
+
} : {},
|
|
72
|
+
...hasValidOverride && override?.updatedBy ? {
|
|
73
|
+
updatedBy: override.updatedBy
|
|
74
|
+
} : {},
|
|
75
|
+
value: hasValidOverride && override ? override.value : definition.defaultValue
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
export const resolveFlags = async (context)=>{
|
|
79
|
+
const definitions = [
|
|
80
|
+
...getDefinitionMap(context).values()
|
|
81
|
+
];
|
|
82
|
+
let overrides = [];
|
|
83
|
+
try {
|
|
84
|
+
overrides = await getOverrides(context);
|
|
85
|
+
} catch {
|
|
86
|
+
// Feature evaluation must remain available from code defaults when storage is unavailable.
|
|
87
|
+
}
|
|
88
|
+
const overrideMap = new Map(overrides.map((override)=>[
|
|
89
|
+
override.key,
|
|
90
|
+
override
|
|
91
|
+
]));
|
|
92
|
+
return definitions.map((definition)=>toResolvedFlag(definition, overrideMap.get(definition.key))).sort((left, right)=>left.key.localeCompare(right.key));
|
|
93
|
+
};
|
|
94
|
+
export const evaluateFlag = async (context, key, defaultValue)=>{
|
|
95
|
+
try {
|
|
96
|
+
const flag = (await resolveFlags(context)).find((item)=>item.key === key);
|
|
97
|
+
return flag && typeof flag.value === typeof defaultValue ? flag.value : defaultValue;
|
|
98
|
+
} catch {
|
|
99
|
+
return defaultValue;
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
export const setFlagOverride = async (context, key, value)=>{
|
|
103
|
+
if (!isAdminUser(context.session)) {
|
|
104
|
+
throw new Error('administrator_access_required');
|
|
105
|
+
}
|
|
106
|
+
const definition = getDefinitionMap(context).get(key);
|
|
107
|
+
if (!definition) {
|
|
108
|
+
throw new Error(`unknown_flag:${key}`);
|
|
109
|
+
}
|
|
110
|
+
validateValue(definition, value);
|
|
111
|
+
const database = useDb(context.databaseName);
|
|
112
|
+
const collection = database.collection(COLLECTION);
|
|
113
|
+
if (!await collection.exists()) {
|
|
114
|
+
await collection.create();
|
|
115
|
+
}
|
|
116
|
+
const updatedAt = Date.now();
|
|
117
|
+
const override = {
|
|
118
|
+
_key: createHash(`flag-${parseString(key, 200)}`),
|
|
119
|
+
key,
|
|
120
|
+
updatedAt,
|
|
121
|
+
updatedBy: context.session?.userId,
|
|
122
|
+
value
|
|
123
|
+
};
|
|
124
|
+
await collection.save(override, {
|
|
125
|
+
overwriteMode: 'replace'
|
|
126
|
+
});
|
|
127
|
+
return toResolvedFlag(definition, override);
|
|
128
|
+
};
|
|
129
|
+
export const resetFlagOverride = async (context, key)=>{
|
|
130
|
+
if (!isAdminUser(context.session)) {
|
|
131
|
+
throw new Error('administrator_access_required');
|
|
132
|
+
}
|
|
133
|
+
const definition = getDefinitionMap(context).get(key);
|
|
134
|
+
if (!definition) {
|
|
135
|
+
throw new Error(`unknown_flag:${key}`);
|
|
136
|
+
}
|
|
137
|
+
const collection = useDb(context.databaseName).collection(COLLECTION);
|
|
138
|
+
if (await collection.exists()) {
|
|
139
|
+
const documentKey = createHash(`flag-${parseString(key, 200)}`);
|
|
140
|
+
if (await collection.documentExists(documentKey)) {
|
|
141
|
+
await collection.remove(documentKey);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return toResolvedFlag(definition);
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC9ubGFicy1yZWFrdG9yLXJlbGVhc2UuZU1RNVNoL2NoZWNrb3V0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2FjdGlvbnMvZmxhZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5cbmltcG9ydCB7aXNBZG1pblVzZXJ9IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0ZsYWdEZWZpbml0aW9uLCBGbGFnT3ZlcnJpZGUsIEZsYWdWYWx1ZSwgUmVzb2x2ZWRGbGFnfSBmcm9tICcuLi90eXBlcy9mbGFncy50eXBlcy5qcyc7XG5cbmNvbnN0IENPTExFQ1RJT04gPSAnZmxhZ3MnO1xuY29uc3QgRkxBR19LRVlfUEFUVEVSTiA9IC9eW0EtWmEtejAtOV1bQS1aYS16MC05Ll86LV17MCwxOTl9JC87XG5cbmNvbnN0IGdldERlZmluaXRpb25zID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiByZWFkb25seSBGbGFnRGVmaW5pdGlvbltdID0+IGNvbnRleHQuZmxhZ0RlZmluaXRpb25zIHx8IFtdO1xuXG5jb25zdCB2YWxpZGF0ZURlZmluaXRpb24gPSAoZGVmaW5pdGlvbjogRmxhZ0RlZmluaXRpb24pOiB2b2lkID0+IHtcbiAgaWYoIUZMQUdfS0VZX1BBVFRFUk4udGVzdChkZWZpbml0aW9uLmtleSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGludmFsaWRfZmxhZ19rZXk6JHtkZWZpbml0aW9uLmtleX1gKTtcbiAgfVxuICBpZihkZWZpbml0aW9uLnR5cGUgPT09ICdib29sZWFuJyAmJiB0eXBlb2YgZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgaW52YWxpZF9ib29sZWFuX2ZsYWdfZGVmYXVsdDoke2RlZmluaXRpb24ua2V5fWApO1xuICB9XG4gIGlmKGRlZmluaXRpb24udHlwZSA9PT0gJ3ZhcmlhbnQnKSB7XG4gICAgaWYodHlwZW9mIGRlZmluaXRpb24uZGVmYXVsdFZhbHVlICE9PSAnc3RyaW5nJyB8fCAhZGVmaW5pdGlvbi52YWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkX3ZhcmlhbnRfZmxhZzoke2RlZmluaXRpb24ua2V5fWApO1xuICAgIH1cbiAgICBpZighZGVmaW5pdGlvbi52YWx1ZXMuaW5jbHVkZXMoZGVmaW5pdGlvbi5kZWZhdWx0VmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHZhcmlhbnRfZGVmYXVsdF9ub3RfYWxsb3dlZDoke2RlZmluaXRpb24ua2V5fWApO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3QgdmFsaWRhdGVWYWx1ZSA9IChkZWZpbml0aW9uOiBGbGFnRGVmaW5pdGlvbiwgdmFsdWU6IEZsYWdWYWx1ZSk6IHZvaWQgPT4ge1xuICBpZihkZWZpbml0aW9uLnR5cGUgPT09ICdib29sZWFuJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZmxhZ192YWx1ZV9tdXN0X2JlX2Jvb2xlYW46JHtkZWZpbml0aW9uLmtleX1gKTtcbiAgfVxuICBpZihkZWZpbml0aW9uLnR5cGUgPT09ICd2YXJpYW50JyAmJiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJyB8fCAhZGVmaW5pdGlvbi52YWx1ZXM/LmluY2x1ZGVzKHZhbHVlKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGZsYWdfdmFsdWVfbm90X2FsbG93ZWQ6JHtkZWZpbml0aW9uLmtleX1gKTtcbiAgfVxufTtcblxuY29uc3QgZ2V0RGVmaW5pdGlvbk1hcCA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogTWFwPHN0cmluZywgRmxhZ0RlZmluaXRpb24+ID0+IHtcbiAgY29uc3QgZGVmaW5pdGlvbnMgPSBnZXREZWZpbml0aW9ucyhjb250ZXh0KTtcbiAgY29uc3QgbWFwID0gbmV3IE1hcDxzdHJpbmcsIEZsYWdEZWZpbml0aW9uPigpO1xuICBkZWZpbml0aW9ucy5mb3JFYWNoKChkZWZpbml0aW9uKSA9PiB7XG4gICAgdmFsaWRhdGVEZWZpbml0aW9uKGRlZmluaXRpb24pO1xuICAgIGlmKG1hcC5oYXMoZGVmaW5pdGlvbi5rZXkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGR1cGxpY2F0ZV9mbGFnX2tleToke2RlZmluaXRpb24ua2V5fWApO1xuICAgIH1cbiAgICBtYXAuc2V0KGRlZmluaXRpb24ua2V5LCBkZWZpbml0aW9uKTtcbiAgfSk7XG4gIHJldHVybiBtYXA7XG59O1xuXG5jb25zdCBnZXRPdmVycmlkZXMgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8RmxhZ092ZXJyaWRlW10+ID0+IHtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT04pO1xuICBpZighYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBjb25zdCBjdXJzb3IgPSBhd2FpdCBkYXRhYmFzZS5xdWVyeTxGbGFnT3ZlcnJpZGU+KHtcbiAgICBiaW5kVmFyczogeydAY29sbGVjdGlvbic6IENPTExFQ1RJT059LFxuICAgIHF1ZXJ5OiAnRk9SIGZsYWcgSU4gQEBjb2xsZWN0aW9uIFJFVFVSTiBmbGFnJ1xuICB9KTtcbiAgcmV0dXJuIGF3YWl0IGN1cnNvci5hbGwoKTtcbn07XG5cbmNvbnN0IHRvUmVzb2x2ZWRGbGFnID0gKGRlZmluaXRpb246IEZsYWdEZWZpbml0aW9uLCBvdmVycmlkZT86IEZsYWdPdmVycmlkZSk6IFJlc29sdmVkRmxhZyA9PiB7XG4gIGNvbnN0IGhhc1ZhbGlkT3ZlcnJpZGUgPSBvdmVycmlkZSA/ICgoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHZhbGlkYXRlVmFsdWUoZGVmaW5pdGlvbiwgb3ZlcnJpZGUudmFsdWUpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KSgpIDogZmFsc2U7XG4gIHJldHVybiB7XG4gICAgLi4uZGVmaW5pdGlvbixcbiAgICBzb3VyY2U6IGhhc1ZhbGlkT3ZlcnJpZGUgPyAnZGF0YWJhc2UnIDogJ2RlZmF1bHQnLFxuICAgIC4uLihoYXNWYWxpZE92ZXJyaWRlICYmIG92ZXJyaWRlPy51cGRhdGVkQXQgPyB7dXBkYXRlZEF0OiBvdmVycmlkZS51cGRhdGVkQXR9IDoge30pLFxuICAgIC4uLihoYXNWYWxpZE92ZXJyaWRlICYmIG92ZXJyaWRlPy51cGRhdGVkQnkgPyB7dXBkYXRlZEJ5OiBvdmVycmlkZS51cGRhdGVkQnl9IDoge30pLFxuICAgIHZhbHVlOiBoYXNWYWxpZE92ZXJyaWRlICYmIG92ZXJyaWRlID8gb3ZlcnJpZGUudmFsdWUgOiBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZVxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVGbGFncyA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxSZXNvbHZlZEZsYWdbXT4gPT4ge1xuICBjb25zdCBkZWZpbml0aW9ucyA9IFsuLi5nZXREZWZpbml0aW9uTWFwKGNvbnRleHQpLnZhbHVlcygpXTtcbiAgbGV0IG92ZXJyaWRlczogRmxhZ092ZXJyaWRlW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBvdmVycmlkZXMgPSBhd2FpdCBnZXRPdmVycmlkZXMoY29udGV4dCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIEZlYXR1cmUgZXZhbHVhdGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZnJvbSBjb2RlIGRlZmF1bHRzIHdoZW4gc3RvcmFnZSBpcyB1bmF2YWlsYWJsZS5cbiAgfVxuICBjb25zdCBvdmVycmlkZU1hcCA9IG5ldyBNYXAob3ZlcnJpZGVzLm1hcCgob3ZlcnJpZGUpID0+IFtvdmVycmlkZS5rZXksIG92ZXJyaWRlXSkpO1xuICByZXR1cm4gZGVmaW5pdGlvbnNcbiAgICAubWFwKChkZWZpbml0aW9uKSA9PiB0b1Jlc29sdmVkRmxhZyhkZWZpbml0aW9uLCBvdmVycmlkZU1hcC5nZXQoZGVmaW5pdGlvbi5rZXkpKSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQua2V5LmxvY2FsZUNvbXBhcmUocmlnaHQua2V5KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZXZhbHVhdGVGbGFnID0gYXN5bmMgPFQgZXh0ZW5kcyBGbGFnVmFsdWU+KFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBrZXk6IHN0cmluZyxcbiAgZGVmYXVsdFZhbHVlOiBUXG4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBmbGFnID0gKGF3YWl0IHJlc29sdmVGbGFncyhjb250ZXh0KSkuZmluZCgoaXRlbSkgPT4gaXRlbS5rZXkgPT09IGtleSk7XG4gICAgcmV0dXJuIGZsYWcgJiYgdHlwZW9mIGZsYWcudmFsdWUgPT09IHR5cGVvZiBkZWZhdWx0VmFsdWUgPyBmbGFnLnZhbHVlIGFzIFQgOiBkZWZhdWx0VmFsdWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBkZWZhdWx0VmFsdWU7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBzZXRGbGFnT3ZlcnJpZGUgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGtleTogc3RyaW5nLFxuICB2YWx1ZTogRmxhZ1ZhbHVlXG4pOiBQcm9taXNlPFJlc29sdmVkRmxhZz4gPT4ge1xuICBpZighaXNBZG1pblVzZXIoY29udGV4dC5zZXNzaW9uKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignYWRtaW5pc3RyYXRvcl9hY2Nlc3NfcmVxdWlyZWQnKTtcbiAgfVxuICBjb25zdCBkZWZpbml0aW9uID0gZ2V0RGVmaW5pdGlvbk1hcChjb250ZXh0KS5nZXQoa2V5KTtcbiAgaWYoIWRlZmluaXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHVua25vd25fZmxhZzoke2tleX1gKTtcbiAgfVxuICB2YWxpZGF0ZVZhbHVlKGRlZmluaXRpb24sIHZhbHVlKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIGNvbnN0IGNvbGxlY3Rpb24gPSBkYXRhYmFzZS5jb2xsZWN0aW9uKENPTExFQ1RJT04pO1xuICBpZighYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgIGF3YWl0IGNvbGxlY3Rpb24uY3JlYXRlKCk7XG4gIH1cbiAgY29uc3QgdXBkYXRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgY29uc3Qgb3ZlcnJpZGU6IEZsYWdPdmVycmlkZSA9IHtcbiAgICBfa2V5OiBjcmVhdGVIYXNoKGBmbGFnLSR7cGFyc2VTdHJpbmcoa2V5LCAyMDApfWApLFxuICAgIGtleSxcbiAgICB1cGRhdGVkQXQsXG4gICAgdXBkYXRlZEJ5OiBjb250ZXh0LnNlc3Npb24/LnVzZXJJZCxcbiAgICB2YWx1ZVxuICB9O1xuICBhd2FpdCBjb2xsZWN0aW9uLnNhdmUob3ZlcnJpZGUsIHtvdmVyd3JpdGVNb2RlOiAncmVwbGFjZSd9KTtcbiAgcmV0dXJuIHRvUmVzb2x2ZWRGbGFnKGRlZmluaXRpb24sIG92ZXJyaWRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXNldEZsYWdPdmVycmlkZSA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCBrZXk6IHN0cmluZyk6IFByb21pc2U8UmVzb2x2ZWRGbGFnPiA9PiB7XG4gIGlmKCFpc0FkbWluVXNlcihjb250ZXh0LnNlc3Npb24pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdhZG1pbmlzdHJhdG9yX2FjY2Vzc19yZXF1aXJlZCcpO1xuICB9XG4gIGNvbnN0IGRlZmluaXRpb24gPSBnZXREZWZpbml0aW9uTWFwKGNvbnRleHQpLmdldChrZXkpO1xuICBpZighZGVmaW5pdGlvbikge1xuICAgIHRocm93IG5ldyBFcnJvcihgdW5rbm93bl9mbGFnOiR7a2V5fWApO1xuICB9XG4gIGNvbnN0IGNvbGxlY3Rpb24gPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbihDT0xMRUNUSU9OKTtcbiAgaWYoYXdhaXQgY29sbGVjdGlvbi5leGlzdHMoKSkge1xuICAgIGNvbnN0IGRvY3VtZW50S2V5ID0gY3JlYXRlSGFzaChgZmxhZy0ke3BhcnNlU3RyaW5nKGtleSwgMjAwKX1gKTtcbiAgICBpZihhd2FpdCBjb2xsZWN0aW9uLmRvY3VtZW50RXhpc3RzKGRvY3VtZW50S2V5KSkge1xuICAgICAgYXdhaXQgY29sbGVjdGlvbi5yZW1vdmUoZG9jdW1lbnRLZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdG9SZXNvbHZlZEZsYWcoZGVmaW5pdGlvbik7XG59O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJwYXJzZVN0cmluZyIsImlzQWRtaW5Vc2VyIiwidXNlRGIiLCJDT0xMRUNUSU9OIiwiRkxBR19LRVlfUEFUVEVSTiIsImdldERlZmluaXRpb25zIiwiY29udGV4dCIsImZsYWdEZWZpbml0aW9ucyIsInZhbGlkYXRlRGVmaW5pdGlvbiIsImRlZmluaXRpb24iLCJ0ZXN0Iiwia2V5IiwiRXJyb3IiLCJ0eXBlIiwiZGVmYXVsdFZhbHVlIiwidmFsdWVzIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJ2YWxpZGF0ZVZhbHVlIiwidmFsdWUiLCJnZXREZWZpbml0aW9uTWFwIiwiZGVmaW5pdGlvbnMiLCJtYXAiLCJNYXAiLCJmb3JFYWNoIiwiaGFzIiwic2V0IiwiZ2V0T3ZlcnJpZGVzIiwiZGF0YWJhc2UiLCJkYXRhYmFzZU5hbWUiLCJjb2xsZWN0aW9uIiwiZXhpc3RzIiwiY3Vyc29yIiwicXVlcnkiLCJiaW5kVmFycyIsImFsbCIsInRvUmVzb2x2ZWRGbGFnIiwib3ZlcnJpZGUiLCJoYXNWYWxpZE92ZXJyaWRlIiwic291cmNlIiwidXBkYXRlZEF0IiwidXBkYXRlZEJ5IiwicmVzb2x2ZUZsYWdzIiwib3ZlcnJpZGVzIiwib3ZlcnJpZGVNYXAiLCJnZXQiLCJzb3J0IiwibGVmdCIsInJpZ2h0IiwibG9jYWxlQ29tcGFyZSIsImV2YWx1YXRlRmxhZyIsImZsYWciLCJmaW5kIiwiaXRlbSIsInNldEZsYWdPdmVycmlkZSIsInNlc3Npb24iLCJjcmVhdGUiLCJEYXRlIiwibm93IiwiX2tleSIsInVzZXJJZCIsInNhdmUiLCJvdmVyd3JpdGVNb2RlIiwicmVzZXRGbGFnT3ZlcnJpZGUiLCJkb2N1bWVudEtleSIsImRvY3VtZW50RXhpc3RzIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxVQUFVLEVBQUVDLFdBQVcsUUFBTywrQkFBK0I7QUFFckUsU0FBUUMsV0FBVyxRQUFPLDJCQUEyQjtBQUNyRCxTQUFRQyxLQUFLLFFBQU8sNEJBQTRCO0FBS2hELE1BQU1DLGFBQWE7QUFDbkIsTUFBTUMsbUJBQW1CO0FBRXpCLE1BQU1DLGlCQUFpQixDQUFDQyxVQUFtREEsUUFBUUMsZUFBZSxJQUFJLEVBQUU7QUFFeEcsTUFBTUMscUJBQXFCLENBQUNDO0lBQzFCLElBQUcsQ0FBQ0wsaUJBQWlCTSxJQUFJLENBQUNELFdBQVdFLEdBQUcsR0FBRztRQUN6QyxNQUFNLElBQUlDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRUgsV0FBV0UsR0FBRyxFQUFFO0lBQ3REO0lBQ0EsSUFBR0YsV0FBV0ksSUFBSSxLQUFLLGFBQWEsT0FBT0osV0FBV0ssWUFBWSxLQUFLLFdBQVc7UUFDaEYsTUFBTSxJQUFJRixNQUFNLENBQUMsNkJBQTZCLEVBQUVILFdBQVdFLEdBQUcsRUFBRTtJQUNsRTtJQUNBLElBQUdGLFdBQVdJLElBQUksS0FBSyxXQUFXO1FBQ2hDLElBQUcsT0FBT0osV0FBV0ssWUFBWSxLQUFLLFlBQVksQ0FBQ0wsV0FBV00sTUFBTSxF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
|