@nlabs/reaktor 0.10.2 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/coverage/block-navigation.js +1 -1
- package/coverage/index.html +23 -23
- package/coverage/sorter.js +21 -7
- package/lib/actions/index.d.ts +1 -0
- package/lib/actions/notifications.d.ts +2 -2
- package/lib/actions/videos.d.ts +25 -0
- package/lib/mocks/video.d.ts +3 -0
- package/lib/types/arangodb.types.d.ts +1 -1
- package/lib/types/index.d.ts +1 -0
- package/lib/types/videos.types.d.ts +46 -0
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/package.json +21 -22
- package/lib/actions/apps.js +0 -20
- package/lib/actions/connections.js +0 -7
- package/lib/actions/content.js +0 -17
- package/lib/actions/conversations.js +0 -33
- package/lib/actions/dynamodb.js +0 -2
- package/lib/actions/email.js +0 -2
- package/lib/actions/files.js +0 -5
- package/lib/actions/groups.js +0 -52
- package/lib/actions/images.js +0 -66
- package/lib/actions/index.js +0 -2
- package/lib/actions/ios.js +0 -11
- package/lib/actions/locations.js +0 -7
- package/lib/actions/messages.js +0 -33
- package/lib/actions/notifications.js +0 -2
- package/lib/actions/payments.js +0 -32
- package/lib/actions/posts.js +0 -143
- package/lib/actions/profiles.js +0 -8
- package/lib/actions/reactions.js +0 -35
- package/lib/actions/s3.js +0 -2
- package/lib/actions/search.js +0 -5
- package/lib/actions/sms.js +0 -2
- package/lib/actions/statistics.js +0 -8
- package/lib/actions/subscriptions.js +0 -12
- package/lib/actions/tags.js +0 -24
- package/lib/actions/users.js +0 -87
- package/lib/actions/websockets.js +0 -30
- package/lib/adapters/arangoAdapter.js +0 -2
- package/lib/adapters/contentAdapter.js +0 -2
- package/lib/adapters/fileAdapter.js +0 -2
- package/lib/adapters/imageAdapter.js +0 -2
- package/lib/adapters/index.js +0 -2
- package/lib/adapters/messageAdapter.js +0 -2
- package/lib/adapters/postAdapter.js +0 -2
- package/lib/adapters/reaktorAdapter.js +0 -2
- package/lib/adapters/tagAdapter.js +0 -2
- package/lib/adapters/userAdapter.js +0 -2
- package/lib/config.js +0 -2
- package/lib/handlers/graphqlHandler.js +0 -2
- package/lib/index.js +0 -2
- package/lib/lambdas/actions/websockets.js +0 -30
- package/lib/lambdas/authorizer.js +0 -2
- package/lib/lambdas/connection.js +0 -2
- package/lib/lambdas/utils/message.js +0 -2
- package/lib/lambdas/utils/websocket.js +0 -2
- package/lib/mocks/conversation.js +0 -2
- package/lib/mocks/file.js +0 -2
- package/lib/mocks/group.js +0 -2
- package/lib/mocks/image.js +0 -2
- package/lib/mocks/post.js +0 -2
- package/lib/mocks/tag.js +0 -2
- package/lib/mocks/user.js +0 -2
- package/lib/mutations/content.js +0 -2
- package/lib/mutations/index.js +0 -2
- package/lib/mutations/locations.js +0 -2
- package/lib/mutations/messages.js +0 -2
- package/lib/mutations/posts.js +0 -2
- package/lib/mutations/profiles.js +0 -2
- package/lib/mutations/reactions.js +0 -2
- package/lib/mutations/statistics.js +0 -2
- package/lib/mutations/subscriptions.js +0 -2
- package/lib/mutations/tags.js +0 -2
- package/lib/mutations/users.js +0 -2
- package/lib/objectTypes/app.js +0 -2
- package/lib/objectTypes/bankAccount.js +0 -2
- package/lib/objectTypes/connection.js +0 -2
- package/lib/objectTypes/content.js +0 -2
- package/lib/objectTypes/conversation.js +0 -2
- package/lib/objectTypes/creditCard.js +0 -2
- package/lib/objectTypes/document.js +0 -2
- package/lib/objectTypes/error.js +0 -2
- package/lib/objectTypes/external.js +0 -2
- package/lib/objectTypes/file.js +0 -2
- package/lib/objectTypes/filter.js +0 -2
- package/lib/objectTypes/group.js +0 -2
- package/lib/objectTypes/iapSubscription.js +0 -2
- package/lib/objectTypes/image.js +0 -2
- package/lib/objectTypes/index.js +0 -2
- package/lib/objectTypes/location.js +0 -2
- package/lib/objectTypes/message.js +0 -2
- package/lib/objectTypes/passcode.js +0 -2
- package/lib/objectTypes/plan.js +0 -2
- package/lib/objectTypes/post.js +0 -2
- package/lib/objectTypes/profile.js +0 -2
- package/lib/objectTypes/reaction.js +0 -2
- package/lib/objectTypes/relation.js +0 -2
- package/lib/objectTypes/search.js +0 -2
- package/lib/objectTypes/statistics.js +0 -2
- package/lib/objectTypes/subscription.js +0 -2
- package/lib/objectTypes/tag.js +0 -2
- package/lib/objectTypes/user.js +0 -2
- package/lib/queries/content.js +0 -2
- package/lib/queries/index.js +0 -2
- package/lib/queries/locations.js +0 -2
- package/lib/queries/messages.js +0 -2
- package/lib/queries/posts.js +0 -2
- package/lib/queries/reactions.js +0 -2
- package/lib/queries/statistics.js +0 -2
- package/lib/queries/subscriptions.js +0 -2
- package/lib/queries/tags.js +0 -2
- package/lib/queries/users.js +0 -2
- package/lib/templates/email/layout.js +0 -280
- package/lib/templates/email/passwordForgot.js +0 -16
- package/lib/templates/email/passwordRecovery.js +0 -13
- package/lib/templates/email/verifyEmail.js +0 -16
- package/lib/templates/email/welcome.js +0 -16
- package/lib/templates/sms/passwordForgot.js +0 -2
- package/lib/templates/sms/passwordRecovery.js +0 -2
- package/lib/templates/sms/verifyEmail.js +0 -2
- package/lib/templates/sms/verifyPhone.js +0 -2
- package/lib/templates/sms/welcome.js +0 -2
- package/lib/types/apps.types.js +0 -2
- package/lib/types/arangodb.types.js +0 -1
- package/lib/types/auth.types.js +0 -1
- package/lib/types/connections.types.js +0 -1
- package/lib/types/content.types.js +0 -1
- package/lib/types/conversations.types.js +0 -1
- package/lib/types/email.types.js +0 -1
- package/lib/types/error.types.js +0 -2
- package/lib/types/files.types.js +0 -1
- package/lib/types/google.types.js +0 -1
- package/lib/types/groups.types.js +0 -1
- package/lib/types/images.types.js +0 -1
- package/lib/types/index.js +0 -2
- package/lib/types/locations.types.js +0 -1
- package/lib/types/messages.types.js +0 -1
- package/lib/types/notifications.types.js +0 -1
- package/lib/types/payments.types.js +0 -1
- package/lib/types/posts.types.js +0 -1
- package/lib/types/profiles.types.js +0 -1
- package/lib/types/statistics.types.js +0 -1
- package/lib/types/tags.types.js +0 -1
- package/lib/types/users.types.js +0 -1
- package/lib/types/websockets.types.js +0 -1
- package/lib/utils/adapterUtils.js +0 -2
- package/lib/utils/analyticsUtils.js +0 -2
- package/lib/utils/arangodbUtils.js +0 -7
- package/lib/utils/authUtils.js +0 -2
- package/lib/utils/contextUtils.js +0 -2
- package/lib/utils/dbI18n.example.js +0 -6
- package/lib/utils/dbI18n.js +0 -2
- package/lib/utils/googleTranslate.js +0 -2
- package/lib/utils/graphqlUtils.js +0 -2
- package/lib/utils/index.js +0 -2
- package/lib/utils/languageDetection.js +0 -2
- package/lib/utils/localeUtils.example.js +0 -2
- package/lib/utils/localeUtils.js +0 -2
- package/lib/utils/middlewareUtils.js +0 -2
- package/lib/utils/sessionUtils.js +0 -2
- package/lib/utils/stripeUtils.js +0 -2
- package/lib/utils/templateUtils.js +0 -2
- package/lib/utils/testUtils.js +0 -2
- package/lib/utils/translationQueue.example.js +0 -2
- package/lib/utils/translationQueue.js +0 -2
package/lib/actions/ios.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{createHash as f}from"@nlabs/utils/parsers/strings";import{aql as d}from"arangojs";import{ErrorTypes as u}from"../types/error.types.js";import{logError as m}from"../utils/analyticsUtils.js";import{useDb as l}from"../utils/arangodbUtils.js";const I="ios",N=t=>({0:{error:!1,message:"Active",valid:!0},21e3:{error:!0,id:"payment_receipt_unreadable",message:"App store could not read",valid:!1},21002:{error:!0,id:"payment_data_malformed",message:"Data was malformed",valid:!1},21003:{error:!0,id:"payment_receipt_unauthorized",message:"Receipt not authenticated",valid:!1},21004:{error:!0,id:"payment_invalid_secret",message:"Shared secret does not match",valid:!1},21005:{error:!0,id:"payment_server_unavailable",message:"Receipt server unavailable",valid:!1},21006:{error:!1,id:"payment_subscription_expired",message:"Receipt valid but sub expired",valid:!0},21007:{error:!0,id:"payment_invalid_server",message:"Sandbox receipt sent to Production environment",redirect:!0,valid:!1},21008:{error:!0,id:"payment_invalid_server",message:"Production receipt sent to Sandbox environment",valid:!1}})[t]||{},O=(t,r)=>{const s="iosSubscriptionUpdate",{auto_renew_adam_id:n,cancellation_date:i,notification_type:e,latest_receipt:y,latest_receipt_info:b,latest_expired_receipt:_,latest_expired_receipt_info:p,original_transaction_id:c}=r,g=(e||"").toLowerCase(),a=Date.now(),S=b||p,o=f(`payment-${c}`),A={cancelDate:i,isValid:S[0].expires_date_ms>a,modified:a,planId:n,receipt:y||_,status:g},R={...A,_key:o,added:a,type:"ios_payment"},E=d`UPSERT {transactionId: ${c}}
|
|
2
|
-
INSERT ${R}
|
|
3
|
-
UPDATE ${A} IN subscriptions
|
|
4
|
-
LIMIT 1`;return l(t).query(E).then(()=>null).catch(P=>m({action:s,category:I,label:u.DATABASE_ERROR},P,{}).then(()=>null))},D=t=>{const r="getIosSubscription",{databaseName:s,session:{userId:n}}=t,i=d`FOR s IN subscriptions
|
|
5
|
-
FILTER s.userId == ${n} && s.type == "ios_payment"
|
|
6
|
-
LIMIT 1
|
|
7
|
-
RETURN s`;return l(s).query(i).then(e=>e.next()).then(e=>e).catch(e=>m({action:r,category:I,label:u.DATABASE_ERROR},e,t).then(()=>null))},Q=(t,r)=>{const s="addIosInApp",{databaseName:n,session:{userId:i}}=t,e=Date.now(),{added:y=e,planId:b,receipt:_,transactionId:p,trialEnd:c}=r,a={_key:f(`subscription-${p}`),added:y,modified:e,planId:b,receipt:_,transactionId:p,trialEnd:c,type:"ios_subscription",userId:i},S=d`INSERT ${a} IN subscriptions RETURN NEW`;return l(n).query(S).then(o=>o.next()).then(o=>o).catch(o=>m({action:s,category:I,label:u.DATABASE_ERROR},o,t).then(()=>null))},U=t=>{const r="getIosInApp",{databaseName:s,session:{userId:n}}=t,i=d`FOR s IN subscription
|
|
8
|
-
FILTER s.userId == ${n} && s.type == "ios"
|
|
9
|
-
LIMIT 1
|
|
10
|
-
RETURN s`;return l(s).query(i).then(e=>e.next()).then(e=>e).catch(e=>m({action:r,category:I,label:u.DATABASE_ERROR},e,t).then(()=>null))};export{Q as addIosInApp,U as getIosInApp,N as getIosInAppError,D as getIosSubscription,O as iosSubscriptionUpdate};
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvaW9zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7XG4gIFBheW1lbnRJT1NJbkFwcEVycm9yLFxuICBQYXltZW50SU9TU3Vic2NyaXB0aW9uSW5mbyxcbiAgUGF5bWVudElPU1N1YnNjcmlwdGlvblVwZGF0ZSxcbiAgUGF5bWVudFN1YnNjcmlwdGlvblxufSBmcm9tICcuLi90eXBlcy9wYXltZW50cy50eXBlcy5qcyc7XG5pbXBvcnQge2xvZ0Vycm9yfSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge3VzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcblxuY29uc3QgZXZlbnRDYXRlZ29yeTogc3RyaW5nID0gJ2lvcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRJb3NJbkFwcEVycm9yID0gKHN0YXR1c0NvZGU6IHN0cmluZyk6IFBheW1lbnRJT1NJbkFwcEVycm9yID0+IHtcbiAgY29uc3QgY29kZXMgPSB7XG4gICAgWzBdOiB7ZXJyb3I6IGZhbHNlLCBtZXNzYWdlOiAnQWN0aXZlJywgdmFsaWQ6IHRydWV9LFxuICAgIFsyMTAwMF06IHtlcnJvcjogdHJ1ZSwgaWQ6ICdwYXltZW50X3JlY2VpcHRfdW5yZWFkYWJsZScsIG1lc3NhZ2U6ICdBcHAgc3RvcmUgY291bGQgbm90IHJlYWQnLCB2YWxpZDogZmFsc2V9LFxuICAgIFsyMTAwMl06IHtlcnJvcjogdHJ1ZSwgaWQ6ICdwYXltZW50X2RhdGFfbWFsZm9ybWVkJywgbWVzc2FnZTogJ0RhdGEgd2FzIG1hbGZvcm1lZCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDAzXToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfcmVjZWlwdF91bmF1dGhvcml6ZWQnLCBtZXNzYWdlOiAnUmVjZWlwdCBub3QgYXV0aGVudGljYXRlZCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDA0XToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfaW52YWxpZF9zZWNyZXQnLCBtZXNzYWdlOiAnU2hhcmVkIHNlY3JldCBkb2VzIG5vdCBtYXRjaCcsIHZhbGlkOiBmYWxzZX0sXG4gICAgWzIxMDA1XToge2Vycm9yOiB0cnVlLCBpZDogJ3BheW1lbnRfc2VydmVyX3VuYXZhaWxhYmxlJywgbWVzc2FnZTogJ1JlY2VpcHQgc2VydmVyIHVuYXZhaWxhYmxlJywgdmFsaWQ6IGZhbHNlfSxcbiAgICBbMjEwMDZdOiB7XG4gICAgICBlcnJvcjogZmFsc2UsXG4gICAgICBpZDogJ3BheW1lbnRfc3Vic2NyaXB0aW9uX2V4cGlyZWQnLFxuICAgICAgbWVzc2FnZTogJ1JlY2VpcHQgdmFsaWQgYnV0IHN1YiBleHBpcmVkJyxcbiAgICAgIHZhbGlkOiB0cnVlXG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBzcGVjaWFsIGNhc2UgZm9yIGFwcCByZXZpZXcgaGFuZGxpbmcgLSBmb3J3YXJkIGFueSByZXF1ZXN0IHRoYXQgaXMgaW50ZW5kZWQgZm9yIHRoZSBTYW5kYm94IGJ1dCB3YXMgc2VudCB0b1xuICAgICAqIFByb2R1Y3Rpb24sIHRoaXMgaXMgd2hhdCB0aGUgYXBwIHJldmlldyB0ZWFtIGRvZXNcbiAgICAgKi9cbiAgICBbMjEwMDddOiB7XG4gICAgICBlcnJvcjogdHJ1ZSxcbiAgICAgIGlkOiAncGF5bWVudF9pbnZhbGlkX3NlcnZlcicsXG4gICAgICBtZXNzYWdlOiAnU2FuZGJveCByZWNlaXB0IHNlbnQgdG8gUHJvZHVjdGlvbiBlbnZpcm9ubWVudCcsXG4gICAgICByZWRpcmVjdDogdHJ1ZSxcbiAgICAgIHZhbGlkOiBmYWxzZVxuICAgIH0sXG4gICAgWzIxMDA4XToge1xuICAgICAgZXJyb3I6IHRydWUsXG4gICAgICBpZDogJ3BheW1lbnRfaW52YWxpZF9zZXJ2ZXInLFxuICAgICAgbWVzc2FnZTogJ1Byb2R1Y3Rpb24gcmVjZWlwdCBzZW50IHRvIFNhbmRib3ggZW52aXJvbm1lbnQnLFxuICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBjb2Rlc1tzdGF0dXNDb2RlXSB8fCB7fTtcbn07XG5cbmV4cG9ydCBjb25zdCBpb3NTdWJzY3JpcHRpb25VcGRhdGUgPSAoXG4gIGRhdGFiYXNlTmFtZTogc3RyaW5nLFxuICBzdWJzY3JpcHRpb25VcGRhdGU6IFBheW1lbnRJT1NTdWJzY3JpcHRpb25VcGRhdGVcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdpb3NTdWJzY3JpcHRpb25VcGRhdGUnO1xuICBjb25zdCB7XG4gICAgYXV0b19yZW5ld19hZGFtX2lkOiBwbGFuSWQsXG4gICAgY2FuY2VsbGF0aW9uX2RhdGU6IGNhbmNlbERhdGUsXG4gICAgbm90aWZpY2F0aW9uX3R5cGU6IHN0YXR1cyxcbiAgICBsYXRlc3RfcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbiAgICBsYXRlc3RfcmVjZWlwdF9pbmZvOiBsYXRlc3RJbmZvLFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHQ6IGV4cGlyZWRSZWNlaXB0LFxuICAgIGxhdGVzdF9leHBpcmVkX3JlY2VpcHRfaW5mbzogZXhwaXJlZEluZm8sXG4gICAgb3JpZ2luYWxfdHJhbnNhY3Rpb25faWQ6IHRyYW5zYWN0aW9uSWRcbiAgfSA9IHN1YnNjcmlwdGlvblVwZGF0ZTtcbiAgY29uc3QgZm9ybWF0U3RhdHVzOiBzdHJpbmcgPSAoc3RhdHVzIHx8ICcnKS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHJlY2VpcHRJbmZvOiBQYXltZW50SU9TU3Vic2NyaXB0aW9uSW5mb1tdID0gbGF0ZXN0SW5mbyB8fCBleHBpcmVkSW5mbztcbiAgY29uc3QgaWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuXG4gIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICBjYW5jZWxEYXRlLFxuICAgIGlzVmFsaWQ6IHJlY2VpcHRJbmZvWzBdLmV4cGlyZXNfZGF0ZV9tcyA+IG5vdyxcbiAgICBtb2RpZmllZDogbm93LFxuICAgIHBsYW5JZCxcbiAgICByZWNlaXB0OiBsYXRlc3RSZWNlaXB0IHx8IGV4cGlyZWRSZWNlaXB0LFxuICAgIHN0YXR1czogZm9ybWF0U3RhdHVzXG4gIH07XG4gIGNvbnN0IGluc2VydDogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogaWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICB0eXBlOiAnaW9zX3BheW1lbnQnXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHt0cmFuc2FjdGlvbklkOiAke3RyYW5zYWN0aW9uSWR9fVxuICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgIFVQREFURSAke3VwZGF0ZX0gSU4gc3Vic2NyaXB0aW9uc1xuICAgICBMSU1JVCAxYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKCkgPT4gbnVsbClcbiAgICAuY2F0Y2goKGRiRXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZGJFcnJvciwge30pLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuLy8gZXhwb3J0IGNvbnN0IGFkZElvc0luQXBwID0gKFxuLy8gICBjb250ZXh0OiBBcGlDb250ZXh0LFxuLy8gICBhcHAsXG4vLyAgIHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvblxuLy8gKTogUHJvbWlzZTxQYXltZW50U3Vic2NyaXB0aW9uPiA9PiB7XG4vLyAgIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2FkZElvc0luQXBwJztcbi8vICAgY29uc3Qge2lzUHJvZHVjdGlvbiwgcmVjZWlwdH0gPSBzdWJzY3JpcHRpb247XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgdXNlcklkOiBzZXNzaW9uSWR9ID0gY29udGV4dDtcblxuLy8gICBjb25zdCBwcm9kdWN0aW9uSG9zdDogc3RyaW5nID0gJ2J1eS5pdHVuZXMuYXBwbGUuY29tJztcbi8vICAgY29uc3Qgc2FuZGJveEhvc3Q6IHN0cmluZyA9ICdzYW5kYm94Lml0dW5lcy5hcHBsZS5jb20nO1xuLy8gICBjb25zdCBlbmRwb2ludDogc3RyaW5nID0gaXNQcm9kdWN0aW9uID8gcHJvZHVjdGlvbkhvc3QgOiBzYW5kYm94SG9zdDtcbi8vICAgY29uc3QgdmVyaWZ5VXJsOiBzdHJpbmcgPSBgaHR0cHM6Ly8ke2VuZHBvaW50fS92ZXJpZnlSZWNlaXB0YDtcbi8vICAgY29uc3QgcGF5bG9hZDogb2JqZWN0ID0ge1xuLy8gICAgIHBhc3N3b3JkOiBhcHAuaWFwLFxuLy8gICAgICdyZWNlaXB0LWRhdGEnOiBkZWNvZGVVUklDb21wb25lbnQocmVjZWlwdClcbi8vICAgfTtcbi8vICAgY29uc3Qgb3B0aW9uczogb2JqZWN0ID0ge1xuLy8gICAgIGhlYWRlcnM6IHtcbi8vICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xuLy8gICAgIH1cbi8vICAgfTtcblxuLy8gICByZXR1cm4gcG9zdCh2ZXJpZnlVcmwsIHBheWxvYWQsIG9wdGlvbnMpXG4vLyAgICAgLnRoZW4oKHJlc3VsdHMpID0+IHtcbi8vICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKHJlc3VsdHMpO1xuLy8gICAgICAgY29uc3Qge1xuLy8gICAgICAgICBsYXRlc3RfcmVjZWlwdDogbGF0ZXN0UmVjZWlwdCxcbi8vICAgICAgICAgbGF0ZXN0X3JlY2VpcHRfaW5mbzogbGF0ZXN0SW5mbyxcbi8vICAgICAgICAgc3RhdHVzXG4vLyAgICAgICB9ID0ganNvbjtcblxuLy8gICAgICAgY29uc3Qge1xuLy8gICAgICAgICBpc190cmlhbF9wZXJpb2Q6IHRyaWFsUGVyaW9kLFxuLy8gICAgICAgICBvcmlnaW5hbF9wdXJjaGFzZV9kYXRlX21zOiBhZGRlZCxcbi8vICAgICAgICAgZXhwaXJlc19kYXRlOiBleHBpcmVzLFxuLy8gICAgICAgICBwcm9kdWN0X2lkOiBwbGFuSWQsXG4vLyAgICAgICAgIHRyYW5zYWN0aW9uX2lkOiB0cmFuc2FjdGlvbklkXG4vLyAgICAgICB9ID0gbGF0ZXN0SW5mbztcblxuLy8gICAgICAgaWYoc3RhdHVzID09PSAwIHx8IHN0YXR1cyA9PT0gMjEwMDYpIHtcbi8vICAgICAgICAgY29uc3QgaWQ6IHN0cmluZyA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHt0cmFuc2FjdGlvbklkfWApO1xuLy8gICAgICAgICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4vLyAgICAgICAgIGNvbnN0IHVwZGF0ZTogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHtcbi8vICAgICAgICAgICBleHBpcmVzLFxuLy8gICAgICAgICAgIGlzVHJpYWw6IHRyaWFsUGVyaW9kID09PSAndHJ1ZScsXG4vLyAgICAgICAgICAgaXNWYWxpZDogZXhwaXJlcyA+IG5vdyxcbi8vICAgICAgICAgICBtb2RpZmllZDogbm93LFxuLy8gICAgICAgICAgIHBsYW5JZCxcbi8vICAgICAgICAgICByZWNlaXB0OiBsYXRlc3RSZWNlaXB0LFxuLy8gICAgICAgICAgIHRyYW5zYWN0aW9uSWQsXG4vLyAgICAgICAgICAgdXNlcklkOiBzZXNzaW9uSWRcbi8vICAgICAgICAgfTtcbi8vICAgICAgICAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuLy8gICAgICAgICAgIC4uLnVwZGF0ZSxcbi8vICAgICAgICAgICBfa2V5OiBpZCxcbi8vICAgICAgICAgICBhZGRlZCxcbi8vICAgICAgICAgICB0eXBlOiAnaW9zX3BheW1lbnQnXG4vLyAgICAgICAgIH07XG5cbi8vICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge3RyYW5zYWN0aW9uSWQ6ICR7dHJhbnNhY3Rpb25JZH19XG4vLyAgICAgICAgICAgICAgIElOU0VSVCAke2luc2VydH1cbi8vICAgICAgICAgICAgICAgVVBEQVRFICR7dXBkYXRlfSBJTiBzdWJzY3JpcHRpb25zXG4vLyAgICAgICAgICAgICAgIFJFVFVSTiBORVdgO1xuXG4vLyAgICAgICAgIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4vLyAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbi8vICAgICAgICAgICAudGhlbigodXBkYXRlZFN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbiA9IHt9KSA9PiB1cGRhdGVkU3Vic2NyaXB0aW9uKVxuLy8gICAgICAgICAgIC5jYXRjaCgoZGJFcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbi8vICAgICAgICAgICAgIGFjdGlvbixcbi8vICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuLy8gICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1Jcbi8vICAgICAgICAgICB9LCBkYkVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbi8vICAgICAgIH1cblxuLy8gICAgICAgLy8gRXJyb3JzXG4vLyAgICAgICBjb25zdCBlcnJvcjogUGF5bWVudElPU0luQXBwRXJyb3IgPSBnZXRJb3NJbkFwcEVycm9yKHJlc3VsdHMuc3RhdHVzKTtcblxuLy8gICAgICAgcmV0dXJuIGxvZ0V4Y2VwdGlvbih7XG4vLyAgICAgICAgIGFjdGlvbixcbi8vICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4vLyAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcicsXG4vLyAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4vLyAgICAgICAgIHZhbHVlOiBlcnJvci5pZFxuLy8gICAgICAgfSwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKTtcbi8vICAgICB9KTtcbi8vIH07XG5cbmV4cG9ydCBjb25zdCBnZXRJb3NTdWJzY3JpcHRpb24gPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJb3NTdWJzY3JpcHRpb24nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIHMgSU4gc3Vic2NyaXB0aW9uc1xuICAgICAgRklMVEVSIHMudXNlcklkID09ICR7c2Vzc2lvbklkfSAmJiBzLnR5cGUgPT0gXCJpb3NfcGF5bWVudFwiXG4gICAgICBMSU1JVCAxXG4gICAgICBSRVRVUk4gc2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbikgPT4gc3Vic2NyaXB0aW9uKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZElvc0luQXBwID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHN1YnNjcmlwdGlvbjogUGF5bWVudFN1YnNjcmlwdGlvbik6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB7YWRkZWQgPSBub3csIHBsYW5JZCwgcmVjZWlwdCwgdHJhbnNhY3Rpb25JZCwgdHJpYWxFbmR9ID0gc3Vic2NyaXB0aW9uO1xuICBjb25zdCBzdWJzY3JpcHRpb25JZDogc3RyaW5nID0gY3JlYXRlSGFzaChgc3Vic2NyaXB0aW9uLSR7dHJhbnNhY3Rpb25JZH1gKTtcbiAgY29uc3QgaW5zZXJ0OiBQYXltZW50U3Vic2NyaXB0aW9uID0ge1xuICAgIF9rZXk6IHN1YnNjcmlwdGlvbklkLFxuICAgIGFkZGVkLFxuICAgIG1vZGlmaWVkOiBub3csXG4gICAgcGxhbklkLFxuICAgIHJlY2VpcHQsXG4gICAgdHJhbnNhY3Rpb25JZCxcbiAgICB0cmlhbEVuZCxcbiAgICB0eXBlOiAnaW9zX3N1YnNjcmlwdGlvbicsXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHN1YnNjcmlwdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHVwZGF0ZWRTdWJzY3JpcHRpb246IFBheW1lbnRTdWJzY3JpcHRpb24pID0+IHVwZGF0ZWRTdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SW9zSW5BcHAgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudFN1YnNjcmlwdGlvbj4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRJb3NJbkFwcCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgcyBJTiBzdWJzY3JpcHRpb25cbiAgICAgIEZJTFRFUiBzLnVzZXJJZCA9PSAke3Nlc3Npb25JZH0gJiYgcy50eXBlID09IFwiaW9zXCJcbiAgICAgIExJTUlUIDFcbiAgICAgIFJFVFVSTiBzYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigoc3Vic2NyaXB0aW9uOiBQYXltZW50U3Vic2NyaXB0aW9uKSA9PiBzdWJzY3JpcHRpb24pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG59O1xuIl0sCiAgIm1h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T0osQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDdkMiLAogICJuYW1lcyI6IFsiY3JlYXRlSGFzaCIsICJhcWwiLCAiRXJyb3JUeXBlcyIsICJsb2dFcnJvciIsICJ1c2VEYiIsICJldmVudENhdGVnb3J5IiwgImdldElvc0luQXBwRXJyb3IiLCAic3RhdHVzQ29kZSIsICJpb3NTdWJzY3JpcHRpb25VcGRhdGUiLCAiZGF0YWJhc2VOYW1lIiwgInN1YnNjcmlwdGlvblVwZGF0ZSIsICJhY3Rpb24iLCAicGxhbklkIiwgImNhbmNlbERhdGUiLCAic3RhdHVzIiwgImxhdGVzdFJlY2VpcHQiLCAibGF0ZXN0SW5mbyIsICJleHBpcmVkUmVjZWlwdCIsICJleHBpcmVkSW5mbyIsICJ0cmFuc2FjdGlvbklkIiwgImZvcm1hdFN0YXR1cyIsICJub3ciLCAicmVjZWlwdEluZm8iLCAiaWQiLCAidXBkYXRlIiwgImluc2VydCIsICJhcWxRcnkiLCAiZGJFcnJvciIsICJnZXRJb3NTdWJzY3JpcHRpb24iLCAiY29udGV4dCIsICJzZXNzaW9uSWQiLCAiY3Vyc29yIiwgInN1YnNjcmlwdGlvbiIsICJlcnJvciIsICJhZGRJb3NJbkFwcCIsICJhZGRlZCIsICJyZWNlaXB0IiwgInRyaWFsRW5kIiwgInVwZGF0ZWRTdWJzY3JpcHRpb24iLCAiZ2V0SW9zSW5BcHAiXQp9Cg==
|
package/lib/actions/locations.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import{get as v,queryString as P}from"@nlabs/rip-hunter";import{createHash as u,parseChar as S,parseId as T}from"@nlabs/utils/parsers/strings";import{aql as I}from"arangojs";import{Config as f}from"../config.js";import{ErrorTypes as F}from"../types/error.types.js";import{logError as O}from"../utils/analyticsUtils.js";import{useDb as d}from"../utils/arangodbUtils.js";const K="locations",n=(e,a)=>{const{short_name:l=""}=e.find(r=>(r.types||[]).findIndex(o=>o===a)>=0)||{};return l},Y=(e,a)=>{const{databaseName:r,session:{userId:i}}=e,{address:o,itemId:h,itemType:E}=a,_=f.get("google.geocode.url"),A={address:o,key:f.get("google.geocode.key")},R=`${_}?${P(A)}`;return v(R).then(L=>{const{results:g=[],status:C=""}=L;if(C==="OK"&&g.length){const c=g[0],s=c?.address_components||[],N=n(s,"street_number"),$=n(s,"route"),b=Date.now(),q=S(E).toLowerCase(),x=T(h),m=c?.place_id||"",k={},G={_key:u(`post-${i}`),added:b,city:n(s,"locality"),country:n(s,"country"),formatted:c?.formatted_address,googleId:m,latitude:c?.geometry.location.lat,longitude:c?.geometry.location.lng,state:n(s,"administrative_area_level_1"),street:[N,$].filter(t=>t).join(" "),zip:n(s,"postal_code")},w=I`UPSERT {googleId: ${m}}
|
|
2
|
-
INSERT ${G}
|
|
3
|
-
UPDATE ${k}
|
|
4
|
-
IN locations RETURN NEW`;return d(r).query(w).then(t=>t.next()).then(t=>{let p;const{_key:D}=t;switch(q){case"posts":p=`posts/${x}`;break;default:p=""}if(p){const M=d(r).collection("hasLocation"),y=D,Q=`locations/${y}`,U=u(`hasLocation-${y}-${i}`),j={_from:p,_key:U,_to:Q};return M.save(j,{returnNew:!0}).then(()=>t)}return t}).catch(t=>O({action:"add",category:K,label:F.DATABASE_ERROR},t,e).then(()=>null))}return null})},Z=(e,a)=>{const{databaseName:l}=e,r=T(a),i=I`FOR l IN locations
|
|
5
|
-
FILTER l._key == ${r}
|
|
6
|
-
RETURN l`;return d(l).query(i).then(o=>o.next()).catch(o=>{throw o})};export{Y as addLocation,n as getFieldVal,Z as getLocation};
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbG9jYXRpb25zLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHtnZXQgYXMgaHR0cEdldCwgcXVlcnlTdHJpbmd9IGZyb20gJ0BubGFicy9yaXAtaHVudGVyJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQge0Vycm9yVHlwZXN9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7R29vZ2xlTWFwc0FkZHJlc3NUeXBlLCBHb29nbGVNYXBzUmVzdWx0VHlwZX0gZnJvbSAnLi4vdHlwZXMvZ29vZ2xlLnR5cGVzLmpzJztcbmltcG9ydCB7TG9jYXRpb25UeXBlfSBmcm9tICcuLi90eXBlcy9sb2NhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtFZGdlQ29sbGVjdGlvbn0gZnJvbSAnYXJhbmdvanMvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHR5cGUge0VkZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdsb2NhdGlvbnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0RmllbGRWYWwgPSAoYWRkcmVzc0NvbXBvbmVudHM6IEdvb2dsZU1hcHNBZGRyZXNzVHlwZVtdLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB7c2hvcnRfbmFtZTogc2hvcnROYW1lID0gJyd9ID0gYWRkcmVzc0NvbXBvbmVudHMuZmluZCgoYWRkcmVzc0ZpZWxkOiBHb29nbGVNYXBzQWRkcmVzc1R5cGUpID0+IHtcbiAgICBjb25zdCB0eXBlcyA9IGFkZHJlc3NGaWVsZC50eXBlcyB8fCBbXTtcbiAgICByZXR1cm4gdHlwZXMuZmluZEluZGV4KChmaWVsZFR5cGU6IHN0cmluZykgPT4gZmllbGRUeXBlID09PSBuYW1lKSA+PSAwO1xuICB9KSB8fCB7fTtcblxuICByZXR1cm4gc2hvcnROYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uOiBMb2NhdGlvblR5cGUpOiBQcm9taXNlPExvY2F0aW9uVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGQnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHthZGRyZXNzLCBpdGVtSWQsIGl0ZW1UeXBlfSA9IGxvY2F0aW9uO1xuICBjb25zdCBnZW9jb2RlVXJsOiBzdHJpbmcgPSBDb25maWcuZ2V0KCdnb29nbGUuZ2VvY29kZS51cmwnKTtcbiAgY29uc3QgcGFyYW1zOiBvYmplY3QgPSB7XG4gICAgYWRkcmVzcyxcbiAgICBrZXk6IENvbmZpZy5nZXQoJ2dvb2dsZS5nZW9jb2RlLmtleScpXG4gIH07XG4gIGNvbnN0IHVybDogc3RyaW5nID0gYCR7Z2VvY29kZVVybH0/JHtxdWVyeVN0cmluZyhwYXJhbXMpfWA7XG5cbiAgcmV0dXJuIGh0dHBHZXQodXJsKVxuICAgIC50aGVuKChqc29uKSA9PiB7XG4gICAgICBjb25zdCB7cmVzdWx0cyA9IFtdLCBzdGF0dXMgPSAnJ30gPSBqc29uO1xuXG4gICAgICBpZihzdGF0dXMgPT09ICdPSycgJiYgcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZ2VvZGF0YTogR29vZ2xlTWFwc1Jlc3VsdFR5cGUgPSByZXN1bHRzWzBdO1xuICAgICAgICBjb25zdCBhZGRyZXNzQ29tcG9uZW50czogR29vZ2xlTWFwc0FkZHJlc3NUeXBlW10gPSBnZW9kYXRhPy5hZGRyZXNzX2NvbXBvbmVudHMgfHwgW107XG5cbiAgICAgICAgLy8gU3RyZWV0XG4gICAgICAgIGNvbnN0IHN0cmVldE51bWJlcjogc3RyaW5nID0gZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdzdHJlZXRfbnVtYmVyJyk7XG4gICAgICAgIGNvbnN0IHJvdXRlOiBzdHJpbmcgPSBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ3JvdXRlJyk7XG5cbiAgICAgICAgLy8gTG9jYXRpb25cbiAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuXG4gICAgICAgIC8vIEl0ZW1cbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbVR5cGU6IHN0cmluZyA9IHBhcnNlQ2hhcihpdGVtVHlwZSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgY29uc3QgZm9ybWF0SXRlbUlkOiBzdHJpbmcgPSBwYXJzZUlkKGl0ZW1JZCk7XG4gICAgICAgIGNvbnN0IGdvb2dsZUlkOiBzdHJpbmcgPSBnZW9kYXRhPy5wbGFjZV9pZCB8fCAnJztcbiAgICAgICAgY29uc3QgdXBkYXRlOiBMb2NhdGlvblR5cGUgPSB7fTtcbiAgICAgICAgY29uc3QgaW5zZXJ0OiBMb2NhdGlvblR5cGUgPSB7XG4gICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgcG9zdC0ke3Nlc3Npb25JZH1gKSxcbiAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgIGNpdHk6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnbG9jYWxpdHknKSxcbiAgICAgICAgICBjb3VudHJ5OiBnZXRGaWVsZFZhbChhZGRyZXNzQ29tcG9uZW50cywgJ2NvdW50cnknKSxcbiAgICAgICAgICBmb3JtYXR0ZWQ6IGdlb2RhdGE/LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgIGdvb2dsZUlkLFxuICAgICAgICAgIGxhdGl0dWRlOiBnZW9kYXRhPy5nZW9tZXRyeS5sb2NhdGlvbi5sYXQsXG4gICAgICAgICAgbG9uZ2l0dWRlOiBnZW9kYXRhPy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcsXG4gICAgICAgICAgc3RhdGU6IGdldEZpZWxkVmFsKGFkZHJlc3NDb21wb25lbnRzLCAnYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xJyksXG4gICAgICAgICAgc3RyZWV0OiBbc3RyZWV0TnVtYmVyLCByb3V0ZV0uZmlsdGVyKChvYmopID0+IG9iaikuam9pbignICcpLFxuICAgICAgICAgIHppcDogZ2V0RmllbGRWYWwoYWRkcmVzc0NvbXBvbmVudHMsICdwb3N0YWxfY29kZScpXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtnb29nbGVJZDogJHtnb29nbGVJZH19XG4gICAgICAgICAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgICAgICAgICBVUERBVEUgJHt1cGRhdGV9XG4gICAgICAgICAgICBJTiBsb2NhdGlvbnMgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgICAgLnRoZW4oKHVwZGF0ZWRMb2NhdGlvbjogTG9jYXRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgICBsZXQgaXRlbURvY0lkOiBzdHJpbmc7XG4gICAgICAgICAgICBjb25zdCB7X2tleTogdXBkYXRlZExvY2F0aW9uS2V5fSA9IHVwZGF0ZWRMb2NhdGlvbjtcblxuICAgICAgICAgICAgc3dpdGNoKGZvcm1hdEl0ZW1UeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc3RzJzpcbiAgICAgICAgICAgICAgICBpdGVtRG9jSWQgPSBgcG9zdHMvJHtmb3JtYXRJdGVtSWR9YDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpdGVtRG9jSWQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSB2YWxpZCBpdGVtIGRvYyBpZCwgY3JlYXRlIGFuIGVkZ2VcbiAgICAgICAgICAgIGlmKGl0ZW1Eb2NJZCkge1xuICAgICAgICAgICAgICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc0xvY2F0aW9uJyk7XG4gICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uSWQ6IHN0cmluZyA9IHVwZGF0ZWRMb2NhdGlvbktleTtcbiAgICAgICAgICAgICAgY29uc3QgbG9jYXRpb25Eb2NJZDogc3RyaW5nID0gYGxvY2F0aW9ucy8ke2xvY2F0aW9uSWR9YDtcbiAgICAgICAgICAgICAgY29uc3QgZWRnZUlkID0gY3JlYXRlSGFzaChgaGFzTG9jYXRpb24tJHtsb2NhdGlvbklkfS0ke3Nlc3Npb25JZH1gKTtcbiAgICAgICAgICAgICAgY29uc3QgZWRnZTogRWRnZVR5cGUgPSB7X2Zyb206IGl0ZW1Eb2NJZCwgX2tleTogZWRnZUlkLCBfdG86IGxvY2F0aW9uRG9jSWR9O1xuXG4gICAgICAgICAgICAgIHJldHVybiBlZGdlQ29sbGVjdGlvbi5zYXZlKGVkZ2UsIHtyZXR1cm5OZXc6IHRydWV9KS50aGVuKCgpID0+IHVwZGF0ZWRMb2NhdGlvbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSBqdXN0IHJldHVybiB0aGUgbmV3IGxvY2F0aW9uXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlZExvY2F0aW9uO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCkudGhlbigoKSA9PiBudWxsKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldExvY2F0aW9uID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGxvY2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TG9jYXRpb25UeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQobG9jYXRpb25JZCk7XG5cbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBGT1IgbCBJTiBsb2NhdGlvbnNcbiAgICBGSUxURVIgbC5fa2V5ID09ICR7Zm9ybWF0SWR9XG4gICAgUkVUVVJOIGxgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLE9BQU9BLEVBQVMsZUFBQUMsTUFBa0Isb0JBQzFDLE9B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LEVBQVcsS0FBTUssRUFBUSxJQUFLRCxDQUFhLEVBRTFFLE9BQU9GLEVBQWUsS0FBS0ksRUFBTSxDQUFDLFVBQVcsRUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFNUCxDQUFlLENBQ2hGLENBR0EsT0FBT0EsQ0FDVCxDQUFDLEVBQ0EsTUFBT1EsR0FBaUIzQyxFQUFTLENBQ2hDLGFBQ0EsU0FBVUUsRUFDVixNQUFPSCxFQUFXLGNBQ3BCLEVBQUc0QyxFQUFPakMsQ0FBTyxFQUFFLEtBQUssSUFBTSxJQUFJLENBQUMsQ0FDdkMsQ0FFQSxPQUFPLElBQ1QsQ0FBQyxDQUNMLEVBRWFrQyxFQUFjLENBQUNsQyxFQUFxQjZCLElBQThDLENBQzdGLEtBQU0sQ0FBQyxhQUFBM0IsQ0FBWSxFQUFJRixFQUNqQm1DLEVBQW1CakQsRUFBUTJDLENBQVUsRUFFckNOLEVBQW1CcEM7QUFBQSx1QkFDSmdELENBQVE7QUFBQSxjQUc3QixPQUFPNUMsRUFBTVcsQ0FBWSxFQUFFLE1BQU1xQixDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLE1BQU9TLEdBQWlCLENBQ3ZCLE1BQU1BLENBQ1IsQ0FBQyxDQUNMIiwKICAibmFtZXMiOiBbImh0dHBHZXQiLCAicXVlcnlTdHJpbmciLCAiY3JlYXRlSGFzaCIsICJwYXJzZUNoYXIiLCAicGFyc2VJZCIsICJhcWwiLCAiQ29uZmlnIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAidXNlRGIiLCAiZXZlbnRDYXRlZ29yeSIsICJnZXRGaWVsZFZhbCIsICJhZGRyZXNzQ29tcG9uZW50cyIsICJuYW1lIiwgInNob3J0TmFtZSIsICJhZGRyZXNzRmllbGQiLCAiZmllbGRUeXBlIiwgImFkZExvY2F0aW9uIiwgImNvbnRleHQiLCAibG9jYXRpb24iLCAiZGF0YWJhc2VOYW1lIiwgInNlc3Npb25JZCIsICJhZGRyZXNzIiwgIml0ZW1JZCIsICJpdGVtVHlwZSIsICJnZW9jb2RlVXJsIiwgInBhcmFtcyIsICJ1cmwiLCAianNvbiIsICJyZXN1bHRzIiwgInN0YXR1cyIsICJnZW9kYXRhIiwgInN0cmVldE51bWJlciIsICJyb3V0ZSIsICJub3ciLCAiZm9ybWF0SXRlbVR5cGUiLCAiZm9ybWF0SXRlbUlkIiwgImdvb2dsZUlkIiwgInVwZGF0ZSIsICJpbnNlcnQiLCAib2JqIiwgImFxbFFyeSIsICJjdXJzb3IiLCAidXBkYXRlZExvY2F0aW9uIiwgIml0ZW1Eb2NJZCIsICJ1cGRhdGVkTG9jYXRpb25LZXkiLCAiZWRnZUNvbGxlY3Rpb24iLCAibG9jYXRpb25JZCIsICJsb2NhdGlvbkRvY0lkIiwgImVkZ2VJZCIsICJlZGdlIiwgImVycm9yIiwgImdldExvY2F0aW9uIiwgImZvcm1hdElkIl0KfQo=
|
package/lib/actions/messages.js
DELETED
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import{cloneDeep as N}from"@nlabs/utils/objects/clone";import{createHash as M,parseId as y,parseString as h}from"@nlabs/utils/parsers/strings";import{aql as p}from"arangojs";import{parseMessage as l}from"../adapters/messageAdapter.js";import{logError as f}from"../utils/analyticsUtils.js";import{getLimit as v,useDb as c}from"../utils/arangodbUtils.js";import{getConversation as R}from"./conversations.js";const A="messages",_=(s,o,{from:t,to:n})=>{const{databaseName:a,session:{userId:r}}=s,m=y(o),g=`users/${r}`,i=`conversations/${m}`,e=p`FOR e IN hasConversation
|
|
2
|
-
FILTER e._from == ${g} && e._to == ${i}
|
|
3
|
-
LIMIT 1
|
|
4
|
-
RETURN e`;return c(a).query(e).then(d=>d.all()).then(d=>{if(!d.length)return[];const T=v(t,n),u=`FOR m IN messages
|
|
5
|
-
FILTER m.conversationId == "${m}"
|
|
6
|
-
SORT m.added DESC
|
|
7
|
-
${T.aql}
|
|
8
|
-
SORT m.added ASC
|
|
9
|
-
LET user = FIRST(
|
|
10
|
-
FOR u IN users
|
|
11
|
-
FILTER u._key == m.userId
|
|
12
|
-
LIMIT 1
|
|
13
|
-
RETURN u
|
|
14
|
-
)
|
|
15
|
-
RETURN MERGE(m, {user: user})`;return c(a).query(u).then(I=>I.all()).catch(I=>{throw I})})},O=(s,o)=>{const{databaseName:t,session:{userId:n}}=s,{conversationId:a,files:r,images:m,messageId:g=M(`message-${n}`)}=o,i=y(a);if(i==="")throw new Error("required_conversationId");const e=Date.now(),d={content:h(o.content,640),files:r||[],images:m||[],modified:e},T=y(g),u={...N(d),_key:T,added:e,conversationId:i,userId:n},I=p`UPSERT {_key: ${T}, conversationId: ${i}, userId: ${n}}
|
|
16
|
-
INSERT ${u}
|
|
17
|
-
UPDATE ${d} IN messages
|
|
18
|
-
RETURN NEW`;return c(t).query(I).then(E=>E.next()).catch(E=>{throw E})},U=(s,o)=>{const{databaseName:t}=s,n=l(o),a=p`INSERT ${n} IN messages RETURN NEW`;return c(t).query(a).then(r=>r.next()).catch(r=>f({action:"addMessage",category:A,label:"addMessage"},r,s))},P=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
|
|
19
|
-
FILTER m._key == ${r} && m.to == ${g}
|
|
20
|
-
UPDATE m WITH {saved: APPEND(m.saved, ${a}, true)} IN messages
|
|
21
|
-
RETURN NEW`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},b=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
|
|
22
|
-
FILTER m._key == ${r} && m.to == ${g}
|
|
23
|
-
UPDATE m WITH {saved: REMOVE_VALUE(m.saved, ${a})} IN messages
|
|
24
|
-
RETURN NEW`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},w=(s,o,t)=>{const{databaseName:n,session:{userId:a}}=s,r=y(o);return R(s,t).then(m=>{const{_key:g}=m,i=p`FOR m IN messages
|
|
25
|
-
FILTER m._key == ${r} && m.to == ${g} && m.from == ${a}
|
|
26
|
-
REMOVE m IN messages
|
|
27
|
-
RETURN OLD`;return c(n).query(i).then(e=>e.next()).then(e=>e).catch(e=>{throw e})})},Q=(s,o)=>{const{databaseName:t}=s,n=y(o),a=p`FOR m IN messages
|
|
28
|
-
FILTER m._key == ${n}
|
|
29
|
-
RETURN m`;return c(t).query(a).then(r=>r.next()).catch(r=>{throw r})},S=s=>{const o=p`FOR m IN messages
|
|
30
|
-
FILTER m.added < DATE_TIMESTAMP(DATE_SUBTRACT(DATE_NOW(), 60, 'day')) && LENGTH(m.saved) > 0
|
|
31
|
-
REMOVE m IN messages
|
|
32
|
-
RETURN OLD`;return c(s).query(o).then(t=>t.all()).then(t=>t.length).catch(t=>{throw t})};export{U as addMessage,S as cleanMessages,w as deleteMessage,Q as getMessage,_ as getMessages,P as saveMessage,b as unsaveMessage,O as updateMessage};
|
|
33
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbWVzc2FnZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge2Nsb25lRGVlcH0gZnJvbSAnQG5sYWJzL3V0aWxzL29iamVjdHMvY2xvbmUnO1xuaW1wb3J0IHtjcmVhdGVIYXNoLCBwYXJzZUlkLCBwYXJzZVN0cmluZ30gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcblxuaW1wb3J0IHtwYXJzZU1lc3NhZ2V9IGZyb20gJy4uL2FkYXB0ZXJzL21lc3NhZ2VBZGFwdGVyLmpzJztcbmltcG9ydCB7bG9nRXJyb3J9IGZyb20gJy4uL3V0aWxzL2FuYWx5dGljc1V0aWxzLmpzJztcbmltcG9ydCB7Z2V0TGltaXQsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7Z2V0Q29udmVyc2F0aW9ufSBmcm9tICcuL2NvbnZlcnNhdGlvbnMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXJhbmdvRGJMaW1pdH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0NvbnZlcnNhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL2NvbnZlcnNhdGlvbnMudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge01lc3NhZ2VJbnB1dFR5cGUsIE1lc3NhZ2VUeXBlfSBmcm9tICcuLi90eXBlcy9tZXNzYWdlcy50eXBlcy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdtZXNzYWdlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRNZXNzYWdlcyA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCB7ZnJvbSwgdG99KTogUHJvbWlzZTxNZXNzYWdlVHlwZVtdPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0Q29udmVyc2F0aW9uSWQ6IHN0cmluZyA9IHBhcnNlSWQoY29udmVyc2F0aW9uSWQpO1xuICBjb25zdCBzZXNzaW9uRG9jSWQ6IHN0cmluZyA9IGB1c2Vycy8ke3Nlc3Npb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25Eb2NJZDogc3RyaW5nID0gYGNvbnZlcnNhdGlvbnMvJHtmb3JtYXRDb252ZXJzYXRpb25JZH1gO1xuICBjb25zdCBjb252ZXJzYXRpb25RcnkgPSBhcWxgRk9SIGUgSU4gaGFzQ29udmVyc2F0aW9uXG4gICAgRklMVEVSIGUuX2Zyb20gPT0gJHtzZXNzaW9uRG9jSWR9ICYmIGUuX3RvID09ICR7Y29udmVyc2F0aW9uRG9jSWR9XG4gICAgTElNSVQgMVxuICAgIFJFVFVSTiBlYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShjb252ZXJzYXRpb25RcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChjb252ZXJzYXRpb25zKSA9PiB7XG4gICAgICBpZighY29udmVyc2F0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW1pdDogQXJhbmdvRGJMaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcbiAgICAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICAgICAgRklMVEVSIG0uY29udmVyc2F0aW9uSWQgPT0gXCIke2Zvcm1hdENvbnZlcnNhdGlvbklkfVwiXG4gICAgICAgICAgU09SVCBtLmFkZGVkIERFU0NcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBTT1JUIG0uYWRkZWQgQVNDXG4gICAgICAgICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IG0udXNlcklkXG4gICAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgICBSRVRVUk4gdVxuICAgICAgICAgIClcbiAgICAgICAgICBSRVRVUk4gTUVSR0UobSwge3VzZXI6IHVzZXJ9KWA7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2U6IE1lc3NhZ2VJbnB1dFR5cGUpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGNvbnZlcnNhdGlvbklkLFxuICAgIGZpbGVzLFxuICAgIGltYWdlcyxcbiAgICBtZXNzYWdlSWQgPSBjcmVhdGVIYXNoKGBtZXNzYWdlLSR7c2Vzc2lvbklkfWApXG4gIH0gPSBtZXNzYWdlO1xuICBjb25zdCBmb3JtYXRDb252ZXJzYXRpb25JZDogc3RyaW5nID0gcGFyc2VJZChjb252ZXJzYXRpb25JZCk7XG5cbiAgaWYoZm9ybWF0Q29udmVyc2F0aW9uSWQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZXF1aXJlZF9jb252ZXJzYXRpb25JZCcpO1xuICB9XG5cbiAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBjb25zdCB1cGRhdGU6IE1lc3NhZ2VUeXBlID0ge1xuICAgIGNvbnRlbnQ6IHBhcnNlU3RyaW5nKG1lc3NhZ2UuY29udGVudCwgNjQwKSxcbiAgICBmaWxlczogZmlsZXMgfHwgW10sXG4gICAgaW1hZ2VzOiBpbWFnZXMgfHwgW10sXG4gICAgbW9kaWZpZWQ6IG5vd1xuICB9O1xuICBjb25zdCBmb3JtYXRNc2dJZDogc3RyaW5nID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuICBjb25zdCBpbnNlcnQ6IE1lc3NhZ2VUeXBlID0ge1xuICAgIC4uLmNsb25lRGVlcCh1cGRhdGUpLFxuICAgIF9rZXk6IGZvcm1hdE1zZ0lkLFxuICAgIGFkZGVkOiBub3csXG4gICAgY29udmVyc2F0aW9uSWQ6IGZvcm1hdENvbnZlcnNhdGlvbklkLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBTRVJUIHtfa2V5OiAke2Zvcm1hdE1zZ0lkfSwgY29udmVyc2F0aW9uSWQ6ICR7Zm9ybWF0Q29udmVyc2F0aW9uSWR9LCB1c2VySWQ6ICR7c2Vzc2lvbklkfX1cbiAgICBJTlNFUlQgJHtpbnNlcnR9XG4gICAgVVBEQVRFICR7dXBkYXRlfSBJTiBtZXNzYWdlc1xuICAgIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2U6IE1lc3NhZ2VJbnB1dFR5cGUpOiBQcm9taXNlPE1lc3NhZ2VUeXBlPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3QgbmV3TWVzc2FnZTogTWVzc2FnZVR5cGUgPSBwYXJzZU1lc3NhZ2UobWVzc2FnZSk7XG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBJTlNFUlQgJHtuZXdNZXNzYWdlfSBJTiBtZXNzYWdlcyBSRVRVUk4gTkVXYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uOiAnYWRkTWVzc2FnZScsXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiAnYWRkTWVzc2FnZSdcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG5cbiAgcmV0dXJuIGdldENvbnZlcnNhdGlvbihjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgbSBJTiBtZXNzYWdlc1xuICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgIFVQREFURSBtIFdJVEgge3NhdmVkOiBBUFBFTkQobS5zYXZlZCwgJHtzZXNzaW9uSWR9LCB0cnVlKX0gSU4gbWVzc2FnZXNcbiAgICAgICAgUkVUVVJOIE5FV2A7XG5cbiAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgLnRoZW4oKG1lc3NhZ2U6IE1lc3NhZ2VUeXBlKSA9PiB7XG4gICAgICAgICAgaWYobWVzc2FnZSkge1xuICAgICAgICAgICAgLy8gQnJvYWRjYXN0IHRvIG1lc3NhZ2UgYm94XG4gICAgICAgICAgICAvLyBjb25zdCBtZXNzYWdlOiBNZXNzYWdlVHlwZSA9IE1lc3NhZ2VzLmdldE1lc3NhZ2VPYmplY3QobWVzc2FnZSk7XG4gICAgICAgICAgICAvLyBpby50byhtZXNzYWdlLnRvSWQpLmVtaXQoJ21lc3NhZ2Vfc2F2ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCB1bnNhdmVNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nLCBjb252ZXJzYXRpb25JZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG5cbiAgcmV0dXJuIGdldENvbnZlcnNhdGlvbihjb250ZXh0LCBjb252ZXJzYXRpb25JZClcbiAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb252ZXJzYXRpb25UeXBlKSA9PiB7XG4gICAgICBjb25zdCB7X2tleTogY29udmVyc2F0aW9uS2V5fSA9IGNvbnZlcnNhdGlvbjtcbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgICBGSUxURVIgbS5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIG0udG8gPT0gJHtjb252ZXJzYXRpb25LZXl9XG4gICAgICAgICAgVVBEQVRFIG0gV0lUSCB7c2F2ZWQ6IFJFTU9WRV9WQUxVRShtLnNhdmVkLCAke3Nlc3Npb25JZH0pfSBJTiBtZXNzYWdlc1xuICAgICAgICAgIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgICAgIGlmKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbWVzc2FnZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlcy5nZXRNZXNzYWdlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gaW8udG8obWVzc2FnZS5pZCkuZW1pdCgnbWVzc2FnZV91bnNhdmUnLCBtZXNzYWdlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVsZXRlTWVzc2FnZSA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBtZXNzYWdlSWQ6IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZyk6IFByb21pc2U8TWVzc2FnZVR5cGU+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJZDogc3RyaW5nID0gcGFyc2VJZChtZXNzYWdlSWQpO1xuXG4gIHJldHVybiBnZXRDb252ZXJzYXRpb24oY29udGV4dCwgY29udmVyc2F0aW9uSWQpXG4gICAgLnRoZW4oKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge19rZXk6IGNvbnZlcnNhdGlvbktleX0gPSBjb252ZXJzYXRpb247XG4gICAgICBjb25zdCBhcWxRcnkgPSBhcWxgRk9SIG0gSU4gbWVzc2FnZXNcbiAgICAgICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfSAmJiBtLnRvID09ICR7Y29udmVyc2F0aW9uS2V5fSAmJiBtLmZyb20gPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIFJFTU9WRSBtIElOIG1lc3NhZ2VzXG4gICAgICAgIFJFVFVSTiBPTERgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChtZXNzYWdlOiBNZXNzYWdlVHlwZSkgPT4ge1xuICAgICAgICAgIGlmKG1lc3NhZ2UpIHtcbiAgICAgICAgICAgIC8vIEJyb2FkY2FzdCB0byBtZXNzYWdlIGJveFxuICAgICAgICAgICAgLy8gY29uc3QgbWVzc2FnZTogTWVzc2FnZVR5cGUgPSBNZXNzYWdlcy5nZXRNZXNzYWdlT2JqZWN0KG1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gaW8udG8obWVzc2FnZS50b0lkKS5lbWl0KCdtZXNzYWdlX2RlbGV0ZScsIG1lc3NhZ2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRNZXNzYWdlID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG1lc3NhZ2VJZDogc3RyaW5nKTogUHJvbWlzZTxNZXNzYWdlVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IGZvcm1hdElkOiBzdHJpbmcgPSBwYXJzZUlkKG1lc3NhZ2VJZCk7XG5cbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgRklMVEVSIG0uX2tleSA9PSAke2Zvcm1hdElkfVxuICAgIFJFVFVSTiBtYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYW5NZXNzYWdlcyA9IChkYXRhYmFzZU5hbWU6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIC8vIFJlbW92ZSBhbGwgbWVzc2FnZXMgdGhhdCBhcmUgb3ZlciA2MCBkYXlzIGFuZCBub3Qgc2F2ZWRcbiAgY29uc3QgYXFsUXJ5ID0gYXFsYEZPUiBtIElOIG1lc3NhZ2VzXG4gICAgICBGSUxURVIgbS5hZGRlZCA8IERBVEVfVElNRVNUQU1QKERBVEVfU1VCVFJBQ1QoREFURV9OT1coKSwgNjAsICdkYXknKSkgJiYgTEVOR1RIKG0uc2F2ZWQpID4gMFxuICAgICAgUkVNT1ZFIG0gSU4gbWVzc2FnZXNcbiAgICAgIFJFVFVSTiBPTERgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKGxpc3Q6IE1lc3NhZ2VUeXBlW10pID0+IGxpc3QubGVuZ3RoKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFRLGFBQUFBLE1BQWdCLDZCQUN4QixPQUFRLGNBQUFDLEVBQVksV0FBQUMsRUFBUyxlQUFBQyxNQUFrQiwrQkFDL0MsT0FBUSxPQUFBQyxNQUFVLFdBR2xCLE9BQVEsZ0JBQUFDLE1BQW1CLGdDQUMzQixPQUFRLFlBQUFDLE1BQWUsNkJBQ3ZCLE9BQVEsWUFBQUMsRUFBVSxTQUFBQyxNQUFZLDRCQUM5QixPQUFRLG1CQUFBQyxNQUFzQixxQkFPOUIsTUFBTUMsRUFBd0IsV0FFakJDLEVBQWMsQ0FBQ0MsRUFBcUJDLEVBQXdCLENBQUMsS0FBQUMsRUFBTSxHQUFBQyxDQUFFLElBQThCLENBQzlHLEtBQU0sQ0FBQyxhQUFBQyxFQUFjLFFBQVMsQ0FBQyxPQUFRQyxDQUFTLENBQUMsRUFBSUwsRUFDL0NNLEVBQStCaEIsRUFBUVcsQ0FBYyxFQUNyRE0sRUFBdUIsU0FBU0YsQ0FBUyxHQUN6Q0csRUFBNEIsaUJBQWlCRixDQUFvQixHQUNqRUcsRUFBa0JqQjtBQUFBLHdCQUNGZSxDQUFZLGdCQUFnQkMsQ0FBaUI7QUFBQTtBQUFBLGNBSW5FLE9BQU9aLEVBQU1RLENBQVksRUFBRSxNQUFNSyxDQUFlLEVBQzdDLEtBQU1DLEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLEtBQU1DLEdBQWtCLENBQ3ZCLEdBQUcsQ0FBQ0EsRUFBYyxPQUNoQixNQUFPLENBQUMsRUFHVixNQUFNQyxFQUF1QmpCLEVBQVNPLEVBQU1DLENBQUUsRUFDeENVLEVBQWlCO0FBQUEsd0NBQ1dQLENBQW9CO0FBQUE7QUFBQSxZ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TUFBTUEsQ0FDUixDQUFDLENBQ0wsRUFFYW1CLEVBQWlCN0IsR0FBMEMsQ0FFdEUsTUFBTVMsRUFBU3JCO0FBQUE7QUFBQTtBQUFBLGtCQUtmLE9BQU9JLEVBQU1RLENBQVksRUFBRSxNQUFNUyxDQUFNLEVBQ3BDLEtBQU1ILEdBQVdBLEVBQU8sSUFBSSxDQUFDLEVBQzdCLEtBQU13QixHQUF3QkEsRUFBSyxNQUFNLEVBQ3pDLE1BQU9wQixHQUFpQixDQUN2QixNQUFNQSxDQUNSLENBQUMsQ0FDTCIsCiAgIm5hbWVzIjogWyJjbG9uZURlZXAiLCAiY3JlYXRlSGFzaCIsICJwYXJzZUlkIiwgInBhcnNlU3RyaW5nIiwgImFxbCIsICJwYXJzZU1lc3NhZ2UiLCAibG9nRXJyb3IiLCAiZ2V0TGltaXQiLCAidXNlRGIiLCAiZ2V0Q29udmVyc2F0aW9uIiwgImV2ZW50Q2F0ZWdvcnkiLCAiZ2V0TWVzc2FnZXMiLCAiY29udGV4dCIsICJjb252ZXJzYXRpb25JZCIsICJmcm9tIiwgInRvIiwgImRhdGFiYXNlTmFtZSIsICJzZXNzaW9uSWQiLCAiZm9ybWF0Q29udmVyc2F0aW9uSWQiLCAic2Vzc2lvbkRvY0lkIiwgImNvbnZlcnNhdGlvbkRvY0lkIiwgImNvbnZlcnNhdGlvblFyeSIsICJjdXJzb3IiLCAiY29udmVyc2F0aW9ucyIsICJsaW1pdCIsICJhcWxRcnkiLCAiZXJyb3IiLCAidXBkYXRlTWVzc2FnZSIsICJtZXNzYWdlIiwgImZpbGVzIiwgImltYWdlcyIsICJtZXNzYWdlSWQiLCAibm93IiwgInVwZGF0ZSIsICJmb3JtYXRNc2dJZCIsICJpbnNlcnQiLCAiYWRkTWVzc2FnZSIsICJuZXdNZXNzYWdlIiwgInNhdmVNZXNzYWdlIiwgImZvcm1hdElkIiwgImNvbnZlcnNhdGlvbiIsICJjb252ZXJzYXRpb25LZXkiLCAidW5zYXZlTWVzc2FnZSIsICJkZWxldGVNZXNzYWdlIiwgImdldE1lc3NhZ2UiLCAiY2xlYW5NZXNzYWdlcyIsICJsaXN0Il0KfQo=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{Notification as a,Provider as p}from"apn";import{Config as o}from"../config.js";const r=()=>new p({ca:o.get("app.apn.ca"),cert:o.get("app.apn.cert"),key:o.get("app.apn.key"),production:o.get("environment")==="prod"}),f=(n,t)=>{const i=r(),e=new a;return e.topic=o.get("app.apn.id"),e.alert=t.message,t.data&&(e.mutableContent=!0,e.payload=t.data),t.badge!==void 0&&(e.badge=t.badge),i.send(e,n)},g=n=>{const t=r(),i=new a;return i.badge=0,t.send(i,n)};export{g as clearBadges,r as getApnProvider,f as pushNotification};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvbm90aWZpY2F0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbi8vIGNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdub3RpZmljYXRpb25zJztcbi8vIFB1c2ggTm90aWZpY2F0aW9uc1xuaW1wb3J0IHtOb3RpZmljYXRpb24gYXMgQVBOTm90aWZpY2F0aW9uLCBQcm92aWRlciwgUmVzcG9uc2VzfSBmcm9tICdhcG4nO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcblxuaW1wb3J0IHR5cGUge05vdGlmaWNhdGlvblR5cGV9IGZyb20gJy4uL3R5cGVzL25vdGlmaWNhdGlvbnMudHlwZXMuanMnO1xuXG5leHBvcnQgY29uc3QgZ2V0QXBuUHJvdmlkZXIgPSAoKSA9PiBuZXcgUHJvdmlkZXIoe1xuICBjYTogQ29uZmlnLmdldCgnYXBwLmFwbi5jYScpLFxuICBjZXJ0OiBDb25maWcuZ2V0KCdhcHAuYXBuLmNlcnQnKSxcbiAga2V5OiBDb25maWcuZ2V0KCdhcHAuYXBuLmtleScpLFxuICBwcm9kdWN0aW9uOiBDb25maWcuZ2V0KCdlbnZpcm9ubWVudCcpID09PSAncHJvZCdcbn0pO1xuXG5leHBvcnQgY29uc3QgcHVzaE5vdGlmaWNhdGlvbiA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdLCBub3RlOiBOb3RpZmljYXRpb25UeXBlKTogUHJvbWlzZTxSZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyOiBQcm92aWRlciA9IGdldEFwblByb3ZpZGVyKCk7XG4gIGNvbnN0IG5vdGlmaWNhdGlvbjogQVBOTm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24udG9waWMgPSBDb25maWcuZ2V0KCdhcHAuYXBuLmlkJyk7XG4gIG5vdGlmaWNhdGlvbi5hbGVydCA9IG5vdGUubWVzc2FnZTtcblxuICBpZihub3RlLmRhdGEpIHtcbiAgICBub3RpZmljYXRpb24ubXV0YWJsZUNvbnRlbnQgPSB0cnVlO1xuICAgIG5vdGlmaWNhdGlvbi5wYXlsb2FkID0gbm90ZS5kYXRhO1xuICB9XG5cbiAgaWYobm90ZS5iYWRnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgbm90aWZpY2F0aW9uLmJhZGdlID0gbm90ZS5iYWRnZTtcbiAgfVxuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhckJhZGdlcyA9IChkZXZpY2VUb2tlbnM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZXM+ID0+IHtcbiAgLy8gUHVzaCBub3RpZmljYXRpb24gdG8gZGV2aWNlXG4gIGNvbnN0IHByb3ZpZGVyID0gZ2V0QXBuUHJvdmlkZXIoKTtcbiAgY29uc3Qgbm90aWZpY2F0aW9uID0gbmV3IEFQTk5vdGlmaWNhdGlvbigpO1xuICBub3RpZmljYXRpb24uYmFkZ2UgPSAwO1xuXG4gIHJldHVybiBwcm92aWRlci5zZW5kKG5vdGlmaWNhdGlvbiwgZGV2aWNlVG9rZW5zKTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFNQSxPQUFRLGdCQUFnQkEsRUFBaUIsWUFBQUMsTUFBMEIsTUFFbkUsT0FBUSxVQUFBQyxNQUFhLGVBSWQsTUFBTUMsRUFBaUIsSUFBTSxJQUFJRixFQUFTLENBQy9DLEdBQUlDLEVBQU8sSUFBSSxZQUFZLEVBQzNCLEtBQU1BLEVBQU8sSUFBSSxjQUFjLEVBQy9CLElBQUtBLEVBQU8sSUFBSSxhQUFhLEVBQzdCLFdBQVlBLEVBQU8sSUFBSSxhQUFhLElBQU0sTUFDNUMsQ0FBQyxFQUVZRSxFQUFtQixDQUFDQyxFQUF3QkMsSUFBK0MsQ0FFdEcsTUFBTUMsRUFBcUJKLEVBQWUsRUFDcENLLEVBQWdDLElBQUlSLEVBQzFDLE9BQUFRLEVBQWEsTUFBUU4sRUFBTyxJQUFJLFlBQVksRUFDNUNNLEVBQWEsTUFBUUYsRUFBSyxRQUV2QkEsRUFBSyxPQUNORSxFQUFhLGVBQWlCLEdBQzlCQSxFQUFhLFFBQVVGLEVBQUssTUFHM0JBLEVBQUssUUFBVSxTQUNoQkUsRUFBYSxNQUFRRixFQUFLLE9BR3JCQyxFQUFTLEtBQUtDLEVBQWNILENBQVksQ0FDakQsRUFFYUksRUFBZUosR0FBK0MsQ0FFekUsTUFBTUUsRUFBV0osRUFBZSxFQUMxQkssRUFBZSxJQUFJUixFQUN6QixPQUFBUSxFQUFhLE1BQVEsRUFFZEQsRUFBUyxLQUFLQyxFQUFjSCxDQUFZLENBQ2pEIiwKICAibmFtZXMiOiBbIkFQTk5vdGlmaWNhdGlvbiIsICJQcm92aWRlciIsICJDb25maWciLCAiZ2V0QXBuUHJvdmlkZXIiLCAicHVzaE5vdGlmaWNhdGlvbiIsICJkZXZpY2VUb2tlbnMiLCAibm90ZSIsICJwcm92aWRlciIsICJub3RpZmljYXRpb24iLCAiY2xlYXJCYWRnZXMiXQp9Cg==
|
package/lib/actions/payments.js
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import{parseNum as A}from"@nlabs/utils/parsers/numbers";import{createHash as Y,parseChar as x,parseId as K,parseString as B,parseVarChar as _}from"@nlabs/utils/parsers/strings";import{aql as T}from"arangojs";import{ErrorTypes as V}from"../types/error.types.js";import{logError as L,UserError as h}from"../utils/analyticsUtils.js";import{useDb as I}from"../utils/arangodbUtils.js";import{getStripeClient as N}from"../utils/stripeUtils.js";import{getUser as H}from"./users.js";const M="payments",pe=r=>{const t="addCustomerAccount",{databaseName:c,session:{userId:n,username:s}={}}=r;return N().customers.create({metadata:{userId:n,username:s}}).then(o=>{const d={modified:Date.now(),stripeCustomerId:o.id},m=T`UPDATE ${n} WITH ${d} IN users LIMIT 1 RETURN NEW`;return I(c).query(m).then(y=>y.next()).then(y=>!!y).catch(y=>L({action:t,category:M,label:V.DATABASE_ERROR},y,r).then(()=>null))})},le=(r,t)=>{const c="addPaymentAccountBank",{databaseName:n,session:{userId:s}={}}=r,{accountNumber:a,fullName:o,routing:u}=t,d=B(a,32);if(d==="")throw new h("required_account_number");const m=_(o,128);if(m==="")throw new h("required_full_name");const y=B(u,32);if(y==="")throw new h("required_routing_number");return H(r,{userId:s}).then(p=>{const{stripeAccountId:l}=p,f=N();return f.tokens.create({bank_account:{account_holder_name:m,account_holder_type:"individual",account_number:d,country:"US",currency:"USD",routing_number:y}}).then(e=>f.customers.createSource(l,{source:e.id})).then(e=>{const i=Date.now(),E={bankAccount:t,bankFullName:m,bankId:e.id,bankRouting:y,modified:i},b=T`UPDATE ${s} WITH ${E} IN users LIMIT 1 RETURN NEW`;return I(n).query(b).then(g=>g.next()).then(g=>g)}).catch(e=>e.message==="A bank account with that routing number and account number already exists for this customer."?L({action:c,category:M,label:"bank_account_exists"},e,r).then(()=>null):L({action:c,category:M,label:"payment_error"},e,r).then(()=>null))})},fe=(r,t)=>{const c="addCreditCard",{databaseName:n,session:{userId:s}}=r;return H(r,{userId:s}).then(a=>{const{stripeAccountId:o}=a,{accountNumber:u,city:d,country:m,cvc:y,expMonth:p,expYear:l,fullName:f,street1:e,street2:i,state:E,zip:b}=t,g=A(u,16);if(!g)throw new h("required_credit_card_number");const P=A(p,2);if(!P)throw new h("required_credit_card_exp_month");const q=A(l,2);if(!q)throw new h("required_credit_card_exp_year");const U=A(y,3),C={},v=_(d,32);v&&(C.city=v);const S=x(m,2);S&&(C.country=S);const R=_(f,32);R&&(C.fullName=R);const k=_(e,32);k&&(C.street1=k);const F=_(i,32);F&&(C.street2=F);const Q=x(E,2);Q&&(C.state=Q);const $=_(b,10);$&&(C.zip=$);const W=N();return W.tokens.create({card:{address_city:v,address_country:S,address_line1:k,address_line2:F,address_state:Q,address_zip:$,cvc:U.toString(),exp_month:P.toString(),exp_year:q.toString(),name:f,number:g.toString()}}).then(D=>W.customers.createSource(o,{source:D.id})).then(D=>{const O=D,Z=O.brand||"",j=O.cvc_check||"",G=O.last4||"",z=Date.now(),J={...C,_key:Y(`user-payment-${s}`),accountNumber:G,added:z,brand:Z,cvcCheck:j,expMonth:p,expYear:l,modified:z,userId:s},X=T`INSERT ${J} IN creditCards RETURN NEW`;return I(n).query(X).then(w=>w.next()).then(w=>{if(w){const{_id:ee,_key:re}=t,te=I(n).collection("hasPayment"),ne=Y(`payment-${re}`),se={_from:`users/${s}`,_key:ne,_to:ee};return te.save(se,{returnNew:!0}).then(()=>t)}return w}).catch(w=>L({action:c,category:M,label:"payment_error"},w,r).then(()=>null))})})},Ce=(r,t)=>{const{databaseName:c,session:{userId:n}}=r,{city:s,country:a,expMonth:o,expYear:u,fullName:d,id:m,street1:y,state:p,zip:l}=t,f=K(m);if(f)throw new h("required_credit_card_id");const e={},i=A(o,2),E=A(u,2),b=_(s,32),g=x(a,2),P=_(d,32),q=B(y,32),U=x(p,2),C=_(l,10);i&&(e.expMonth=i),E&&(e.expYear=E),b&&(e.city=b),g&&(e.country=g),P&&(e.fullName=P),q&&(e.street1=q),U&&(e.state=U),C&&(e.zip=C);const S=T`
|
|
2
|
-
LET updatedCard = FIRST(
|
|
3
|
-
FOR c IN creditCards
|
|
4
|
-
FILTER c._key == ${f} && c.userId == ${n}
|
|
5
|
-
UPDATE c WITH ${e} IN creditCards
|
|
6
|
-
LIMIT 1
|
|
7
|
-
RETURN NEW
|
|
8
|
-
)
|
|
9
|
-
LET user = FIRST(
|
|
10
|
-
FOR u IN users
|
|
11
|
-
FILTER u._key == ${n}
|
|
12
|
-
LIMIT 1
|
|
13
|
-
RETURN u
|
|
14
|
-
)
|
|
15
|
-
RETURN {user: user, card: updatedCard}`;return I(c).query(S).then(R=>R.next()).then((R={card:{},user:{}})=>{const k=R.card,{user:F}=R;if(!k)throw new h("not_found");const{stripeCustomerId:Q}=F,{stripeId:$}=t,W=N(),D={address_city:b,address_country:g,address_line1:q,address_state:U,address_zip:C,exp_month:i.toString(),exp_year:E.toString(),name:P};return W.customers.updateSource(Q,$,D).then(()=>t).catch(O=>{throw new h("payment_error")})})},Ie=r=>{const t="getCreditCards",{databaseName:c,session:{userId:n}}=r,s=T`FOR c IN creditCards
|
|
16
|
-
FILTER c.userId == ${n}
|
|
17
|
-
RETURN c`;return I(c).query(s).then(a=>a.all()).then((a=[])=>a).catch(a=>L({action:t,category:M,label:V.DATABASE_ERROR},a,r).then(()=>null))},he=(r,t)=>{const{databaseName:c,session:{userId:n}}=r,s=K(t),a=T`
|
|
18
|
-
LET card = FIRST(
|
|
19
|
-
FOR c IN creditCards
|
|
20
|
-
FILTER c._key == ${s} && c.userId == ${n}
|
|
21
|
-
LIMIT 1
|
|
22
|
-
REMOVE c IN creditCards
|
|
23
|
-
RETURN OLD
|
|
24
|
-
)
|
|
25
|
-
LET user = FIRST(
|
|
26
|
-
FOR u IN users
|
|
27
|
-
FILTER u._key == ${n}
|
|
28
|
-
LIMIT 1
|
|
29
|
-
RETURN u
|
|
30
|
-
)
|
|
31
|
-
RETURN {user: user, card: card}`;return I(c).query(a).then(o=>o.next()).then((o={card:{},user:{}})=>{if(!o)return!1;const{card:u,user:d}=o,{_key:m}=u;return I(c).collection("hasPayment").outEdges(m,{}).then(async p=>{const l=Array.isArray(p)?p:[];return l.length?(await Promise.all(l.map(f=>{const{_key:e}=f,i=T`REMOVE {_key:${e}} IN hasPayment`;return I(c).query(i)})).then(()=>N().customers.deleteSource(d.stripeCustomerId,u.stripeId).then(()=>!0).catch(e=>{throw new h("payment_error")})),!0):!1})})},ge=(r,t)=>{const{databaseName:c,session:{userId:n}}=r,s={bankAccount:"",bankFullName:"",bankId:"",bankRouting:"",modified:Date.now()},a=T`UPDATE ${n} WITH ${s} IN users LIMIT 1 RETURN NEW`;return I(c).query(a).then(o=>o.next()).then(o=>{const{stripeAccountId:u}=o;return N().customers.deleteSource(u,t).then(()=>!0).catch(()=>Promise.resolve(!1))})},Te=(r,t)=>{const{databaseName:c,session:{userId:n}}=r,{amount:s,currency:a}=t,o=A(s),u=x(a,3,"USD").toUpperCase();return H(r,{userId:n}).then(d=>{const{stripeAccountId:m}=d;return N().transfers.create({amount:o,currency:u,destination:m}).then(p=>{const l=Date.now(),e=T`INSERT ${{added:l,amount:o,currency:u,modified:l,userId:n}} IN transfers RETURN NEW`;return I(c).query(e).then(i=>i.next()).then(i=>i)})})},_e=(r,t)=>{const{databaseName:c,session:{userId:n}}=r,{amount:s,capture:a,cardId:o,currency:u,description:d}=t,m=x(u,3,"USD").toUpperCase();return N().charges.create({amount:s,capture:a,currency:m,description:d,source:o}).then(p=>{const l=Date.now(),f={added:l,amount:s,capture:a,cardId:o,chargeFailCode:p.failure_code,chargeFailMsg:p.failure_message,chargeId:p.id,chargeStatus:p.status,currency:m,description:d,modified:l,userId:n},e=T`INSERT ${f} IN payments RETURN NEW`;return I(c).query(e).then(i=>i.next()).then(i=>i)}).catch(p=>{throw new h("payment_error")})};export{le as addBankAccount,fe as addCreditCard,pe as addCustomerAccount,_e as createPaymentHold,Te as createPaymentTransfer,ge as deleteBankAccount,he as deleteCreditCard,Ie as getCreditCards,Ce as updateCreditCard};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcGF5bWVudHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7Y3JlYXRlSGFzaCwgcGFyc2VDaGFyLCBwYXJzZUlkLCBwYXJzZVN0cmluZywgcGFyc2VWYXJDaGFyfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9zdHJpbmdzJztcbmltcG9ydCB7YXFsfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQge0FxbFF1ZXJ5fSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHN0cmlwZSBmcm9tICdzdHJpcGUnO1xuXG5pbXBvcnQge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQge1BheW1lbnRCYW5rQWNjb3VudCwgUGF5bWVudENhcmRUeXBlLCBQYXltZW50Q2hhcmdlLCBQYXltZW50VHJhbnNmZXJ9IGZyb20gJy4uL3R5cGVzL3BheW1lbnRzLnR5cGVzLmpzJztcbmltcG9ydCB7VXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIFVzZXJFcnJvcn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQge2dldFN0cmlwZUNsaWVudH0gZnJvbSAnLi4vdXRpbHMvc3RyaXBlVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRVc2VyfSBmcm9tICcuL3VzZXJzLmpzJztcblxuaW1wb3J0IHR5cGUge0VkZ2VDb2xsZWN0aW9ufSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAncGF5bWVudHMnO1xuXG5leHBvcnQgY29uc3QgYWRkQ3VzdG9tZXJBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2FkZEN1c3RvbWVyQWNjb3VudCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9ID0ge319ID0gY29udGV4dDtcblxuICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgIC5jcmVhdGUoe1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlcklkOiBzZXNzaW9uSWQsXG4gICAgICAgIHVzZXJuYW1lXG4gICAgICB9XG4gICAgfSBhcyBhbnkpXG4gICAgLnRoZW4oKGN1c3RvbWVyKSA9PiB7XG4gICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgY29uc3QgdXBkYXRlOiBVc2VyVHlwZSA9IHtcbiAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgc3RyaXBlQ3VzdG9tZXJJZDogY3VzdG9tZXIuaWRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKCh1cGRhdGVkVXNlcjogVXNlclR5cGUpID0+ICEhdXBkYXRlZFVzZXIpXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRCYW5rQWNjb3VudCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBiYW5rQWNjb3VudDogUGF5bWVudEJhbmtBY2NvdW50KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRQYXltZW50QWNjb3VudEJhbmsnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcblxuICAvLyBQYXJhbXNcbiAgY29uc3Qge1xuICAgIGFjY291bnROdW1iZXIsXG4gICAgZnVsbE5hbWUsXG4gICAgcm91dGluZ1xuICB9ID0gYmFua0FjY291bnQ7XG5cbiAgY29uc3QgZm9ybWF0QWNjb3VudDogc3RyaW5nID0gcGFyc2VTdHJpbmcoYWNjb3VudE51bWJlciwgMzIpO1xuXG4gIGlmKGZvcm1hdEFjY291bnQgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfYWNjb3VudF9udW1iZXInKTtcbiAgfVxuXG4gIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDEyOCk7XG5cbiAgaWYoZm9ybWF0RnVsbE5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfZnVsbF9uYW1lJyk7XG4gIH1cblxuICBjb25zdCBmb3JtYXRSb3V0aW5nOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhyb3V0aW5nLCAzMik7XG5cbiAgaWYoZm9ybWF0Um91dGluZyA9PT0gJycpIHtcbiAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9yb3V0aW5nX251bWJlcicpO1xuICB9XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICAvLyBDcmVhdGUgYSB0b2tlbiBmaXJzdCwgdGhlbiB1c2UgdGhlIHRva2VuIGFzIHRoZSBzb3VyY2VcbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQudG9rZW5zLmNyZWF0ZSh7XG4gICAgICAgIGJhbmtfYWNjb3VudDoge1xuICAgICAgICAgIGFjY291bnRfaG9sZGVyX25hbWU6IGZvcm1hdEZ1bGxOYW1lLFxuICAgICAgICAgIGFjY291bnRfaG9sZGVyX3R5cGU6ICdpbmRpdmlkdWFsJyxcbiAgICAgICAgICBhY2NvdW50X251bWJlcjogZm9ybWF0QWNjb3VudCxcbiAgICAgICAgICBjb3VudHJ5OiAnVVMnLFxuICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJyxcbiAgICAgICAgICByb3V0aW5nX251bWJlcjogZm9ybWF0Um91dGluZ1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgICAudGhlbigodG9rZW4pID0+IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuY3JlYXRlU291cmNlKFxuICAgICAgICAgIHN0cmlwZUFjY291bnRJZCxcbiAgICAgICAgICB7c291cmNlOiB0b2tlbi5pZH1cbiAgICAgICAgKSlcbiAgICAgICAgLnRoZW4oKGFjY291bnQpID0+IHtcbiAgICAgICAgICAvLyBVc2UgdHlwZSBhc3NlcnRpb24gZm9yIGNhcmQgcHJvcGVydGllc1xuICAgICAgICAgIC8vIGNvbnN0IGNhcmRTb3VyY2UgPSBhY2NvdW50IGFzIHVua25vd24gYXMgQ2FyZDtcbiAgICAgICAgICAvLyBjb25zdCBicmFuZCA9IGNhcmRTb3VyY2UuYnJhbmQgfHwgJyc7XG4gICAgICAgICAgLy8gY29uc3QgY3ZjQ2hlY2sgPSBjYXJkU291cmNlLmN2Y19jaGVjayB8fCAnJztcbiAgICAgICAgICAvLyBjb25zdCBsYXN0NCA9IGNhcmRTb3VyY2UubGFzdDQgfHwgJyc7XG5cbiAgICAgICAgICAvLyBDcmVhdGUgc2Vzc2lvblxuICAgICAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICBjb25zdCB1cGRhdGUgPSB7XG4gICAgICAgICAgICBiYW5rQWNjb3VudCxcbiAgICAgICAgICAgIGJhbmtGdWxsTmFtZTogZm9ybWF0RnVsbE5hbWUsXG4gICAgICAgICAgICBiYW5rSWQ6IGFjY291bnQuaWQsXG4gICAgICAgICAgICBiYW5rUm91dGluZzogZm9ybWF0Um91dGluZyxcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3dcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUERBVEUgJHtzZXNzaW9uSWR9IFdJVEggJHt1cGRhdGV9IElOIHVzZXJzIExJTUlUIDEgUkVUVVJOIE5FV2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgICAgLnRoZW4oKHVwZGF0ZWRVc2VyOiBVc2VyVHlwZSkgPT4gdXBkYXRlZFVzZXIpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1zZyA9IGVycm9yLm1lc3NhZ2U7XG5cbiAgICAgICAgICBpZihtc2cgPT09ICdBIGJhbmsgYWNjb3VudCB3aXRoIHRoYXQgcm91dGluZyBudW1iZXIgYW5kIGFjY291bnQgbnVtYmVyICcgK1xuICAgICAgICAgICAgJ2FscmVhZHkgZXhpc3RzIGZvciB0aGlzIGN1c3RvbWVyLicpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAnYmFua19hY2NvdW50X2V4aXN0cydcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbG9nRXJyb3Ioe1xuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICBsYWJlbDogJ3BheW1lbnRfZXJyb3InXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZENyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZDogUGF5bWVudENhcmRUeXBlKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnYWRkQ3JlZGl0Q2FyZCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICByZXR1cm4gZ2V0VXNlcihjb250ZXh0LCB7dXNlcklkOiBzZXNzaW9uSWR9KVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgLy8gVXNlclxuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuXG4gICAgICAvLyBDYXJkXG4gICAgICBjb25zdCB7XG4gICAgICAgIGFjY291bnROdW1iZXIsXG4gICAgICAgIGNpdHksXG4gICAgICAgIGNvdW50cnksXG4gICAgICAgIGN2YyxcbiAgICAgICAgZXhwTW9udGgsXG4gICAgICAgIGV4cFllYXIsXG4gICAgICAgIGZ1bGxOYW1lLFxuICAgICAgICBzdHJlZXQxLFxuICAgICAgICBzdHJlZXQyLFxuICAgICAgICBzdGF0ZSxcbiAgICAgICAgemlwXG4gICAgICB9OiBQYXltZW50Q2FyZFR5cGUgPSBjYXJkO1xuXG4gICAgICBjb25zdCBmb3JtYXROdW1iZXI6IG51bWJlciA9IHBhcnNlTnVtKGFjY291bnROdW1iZXIsIDE2KTtcblxuICAgICAgaWYoIWZvcm1hdE51bWJlcikge1xuICAgICAgICB0aHJvdyBuZXcgVXNlckVycm9yKCdyZXF1aXJlZF9jcmVkaXRfY2FyZF9udW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cE1vbnRoKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3JlcXVpcmVkX2NyZWRpdF9jYXJkX2V4cF9tb250aCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRFeHBZZWFyOiBudW1iZXIgPSBwYXJzZU51bShleHBZZWFyLCAyKTtcblxuICAgICAgaWYoIWZvcm1hdEV4cFllYXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfZXhwX3llYXInKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0Q3ZjOiBudW1iZXIgPSBwYXJzZU51bShjdmMsIDMpO1xuXG4gICAgICAvLyBBZGRyZXNzXG4gICAgICBjb25zdCBwYXltZW50Q2FyZDogUGF5bWVudENhcmRUeXBlID0ge307XG4gICAgICBjb25zdCBmb3JtYXRDaXR5OiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoY2l0eSwgMzIpO1xuXG4gICAgICBpZihmb3JtYXRDaXR5KSB7XG4gICAgICAgIHBheW1lbnRDYXJkLmNpdHkgPSBmb3JtYXRDaXR5O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3JtYXRDb3VudHJ5OiBzdHJpbmcgPSBwYXJzZUNoYXIoY291bnRyeSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdENvdW50cnkpIHtcbiAgICAgICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdEZ1bGxOYW1lOiBzdHJpbmcgPSBwYXJzZVZhckNoYXIoZnVsbE5hbWUsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0RnVsbE5hbWUpIHtcbiAgICAgICAgcGF5bWVudENhcmQuZnVsbE5hbWUgPSBmb3JtYXRGdWxsTmFtZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0MTogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDEsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0MSkge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQxID0gZm9ybWF0U3RyZWV0MTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RyZWV0Mjogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHN0cmVldDIsIDMyKTtcblxuICAgICAgaWYoZm9ybWF0U3RyZWV0Mikge1xuICAgICAgICBwYXltZW50Q2FyZC5zdHJlZXQyID0gZm9ybWF0U3RyZWV0MjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9ybWF0U3RhdGU6IHN0cmluZyA9IHBhcnNlQ2hhcihzdGF0ZSwgMik7XG5cbiAgICAgIGlmKGZvcm1hdFN0YXRlKSB7XG4gICAgICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvcm1hdFppcDogc3RyaW5nID0gcGFyc2VWYXJDaGFyKHppcCwgMTApO1xuXG4gICAgICBpZihmb3JtYXRaaXApIHtcbiAgICAgICAgcGF5bWVudENhcmQuemlwID0gZm9ybWF0WmlwO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcblxuICAgICAgLy8gQ3JlYXRlIGEgdG9rZW4gZmlyc3QsIHRoZW4gdXNlIHRoZSB0b2tlbiBhcyB0aGUgc291cmNlXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRva2Vucy5jcmVhdGUoe1xuICAgICAgICBjYXJkOiB7XG4gICAgICAgICAgYWRkcmVzc19jaXR5OiBmb3JtYXRDaXR5LFxuICAgICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgICBhZGRyZXNzX2xpbmUxOiBmb3JtYXRTdHJlZXQxLFxuICAgICAgICAgIGFkZHJlc3NfbGluZTI6IGZvcm1hdFN0cmVldDIsXG4gICAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgICAgYWRkcmVzc196aXA6IGZvcm1hdFppcCxcbiAgICAgICAgICBjdmM6IGZvcm1hdEN2Yy50b1N0cmluZygpLFxuICAgICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgudG9TdHJpbmcoKSxcbiAgICAgICAgICBleHBfeWVhcjogZm9ybWF0RXhwWWVhci50b1N0cmluZygpLFxuICAgICAgICAgIG5hbWU6IGZ1bGxOYW1lLFxuICAgICAgICAgIG51bWJlcjogZm9ybWF0TnVtYmVyLnRvU3RyaW5nKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgICAgLnRoZW4oKHRva2VuKSA9PiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzLmNyZWF0ZVNvdXJjZShcbiAgICAgICAgICBzdHJpcGVBY2NvdW50SWQsXG4gICAgICAgICAge3NvdXJjZTogdG9rZW4uaWR9XG4gICAgICAgICkpXG4gICAgICAgIC50aGVuKChuZXdTb3VyY2UpID0+IHtcbiAgICAgICAgICAvLyBVc2UgdHlwZSBhc3NlcnRpb24gZm9yIGNhcmQgcHJvcGVydGllc1xuICAgICAgICAgIGNvbnN0IGNhcmRTb3VyY2UgPSBuZXdTb3VyY2UgYXMgdW5rbm93biBhcyBDYXJkO1xuICAgICAgICAgIGNvbnN0IGJyYW5kID0gY2FyZFNvdXJjZS5icmFuZCB8fCAnJztcbiAgICAgICAgICBjb25zdCBjdmNDaGVjayA9IGNhcmRTb3VyY2UuY3ZjX2NoZWNrIHx8ICcnO1xuICAgICAgICAgIGNvbnN0IGxhc3Q0ID0gY2FyZFNvdXJjZS5sYXN0NCB8fCAnJztcblxuICAgICAgICAgIC8vIENyZWF0ZSBzZXNzaW9uXG4gICAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydCA9IHtcbiAgICAgICAgICAgIC4uLnBheW1lbnRDYXJkLFxuICAgICAgICAgICAgX2tleTogY3JlYXRlSGFzaChgdXNlci1wYXltZW50LSR7c2Vzc2lvbklkfWApLFxuICAgICAgICAgICAgYWNjb3VudE51bWJlcjogbGFzdDQsXG4gICAgICAgICAgICBhZGRlZDogbm93LFxuICAgICAgICAgICAgYnJhbmQsXG4gICAgICAgICAgICBjdmNDaGVjayxcbiAgICAgICAgICAgIGV4cE1vbnRoLFxuICAgICAgICAgICAgZXhwWWVhcixcbiAgICAgICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgICAgICB1c2VySWQ6IHNlc3Npb25JZFxuICAgICAgICAgIH07XG4gICAgICAgICAgY29uc3QgaW5zZXJ0QXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIGNyZWRpdENhcmRzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoaW5zZXJ0QXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdDYXJkOiBQYXltZW50Q2FyZFR5cGUpID0+IHtcbiAgICAgICAgICAgICAgaWYobmV3Q2FyZCkge1xuICAgICAgICAgICAgICAgIC8vIEFkZCBsaW5rZWQgZWRnZVxuICAgICAgICAgICAgICAgIGNvbnN0IHtfaWQ6IGNhcmRJZCwgX2tleTogY2FyZEtleX0gPSBjYXJkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VDb2xsZWN0aW9uOiBFZGdlQ29sbGVjdGlvbiA9IHVzZURiKGRhdGFiYXNlTmFtZSkuY29sbGVjdGlvbignaGFzUGF5bWVudCcpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2VJZCA9IGNyZWF0ZUhhc2goYHBheW1lbnQtJHtjYXJkS2V5fWApO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkZ2UgPSB7XG4gICAgICAgICAgICAgICAgICBfZnJvbTogYHVzZXJzLyR7c2Vzc2lvbklkfWAsXG4gICAgICAgICAgICAgICAgICBfa2V5OiBlZGdlSWQsXG4gICAgICAgICAgICAgICAgICBfdG86IGNhcmRJZFxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZWRnZUNvbGxlY3Rpb24uc2F2ZShlZGdlLCB7cmV0dXJuTmV3OiB0cnVlfSkudGhlbigoKSA9PiBjYXJkKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBuZXdDYXJkO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiAncGF5bWVudF9lcnJvcidcbiAgICAgICAgICAgIH0sIGVycm9yLCBjb250ZXh0KS50aGVuKCgpID0+IG51bGwpKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlQ3JlZGl0Q2FyZCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBjYXJkOiBQYXltZW50Q2FyZFR5cGUpOiBQcm9taXNlPFBheW1lbnRDYXJkVHlwZT4gPT4ge1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG5cbiAgY29uc3Qge1xuICAgIGNpdHksXG4gICAgY291bnRyeSxcbiAgICBleHBNb250aCxcbiAgICBleHBZZWFyLFxuICAgIGZ1bGxOYW1lLFxuICAgIGlkLFxuICAgIHN0cmVldDEsXG4gICAgc3RhdGUsXG4gICAgemlwXG4gIH06IFBheW1lbnRDYXJkVHlwZSA9IGNhcmQ7XG5cbiAgY29uc3QgZm9ybWF0SWQ6IHN0cmluZyA9IHBhcnNlSWQoaWQpO1xuXG4gIGlmKGZvcm1hdElkKSB7XG4gICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncmVxdWlyZWRfY3JlZGl0X2NhcmRfaWQnKTtcbiAgfVxuXG4gIGNvbnN0IHBheW1lbnRDYXJkOiBQYXltZW50Q2FyZFR5cGUgPSB7fTtcbiAgY29uc3QgZm9ybWF0RXhwTW9udGg6IG51bWJlciA9IHBhcnNlTnVtKGV4cE1vbnRoLCAyKTtcbiAgY29uc3QgZm9ybWF0RXhwWWVhcjogbnVtYmVyID0gcGFyc2VOdW0oZXhwWWVhciwgMik7XG4gIGNvbnN0IGZvcm1hdENpdHk6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihjaXR5LCAzMik7XG4gIGNvbnN0IGZvcm1hdENvdW50cnk6IHN0cmluZyA9IHBhcnNlQ2hhcihjb3VudHJ5LCAyKTtcbiAgY29uc3QgZm9ybWF0RnVsbE5hbWU6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcihmdWxsTmFtZSwgMzIpO1xuICBjb25zdCBmb3JtYXRTdHJlZXQxOiBzdHJpbmcgPSBwYXJzZVN0cmluZyhzdHJlZXQxLCAzMik7XG4gIGNvbnN0IGZvcm1hdFN0YXRlOiBzdHJpbmcgPSBwYXJzZUNoYXIoc3RhdGUsIDIpO1xuICBjb25zdCBmb3JtYXRaaXA6IHN0cmluZyA9IHBhcnNlVmFyQ2hhcih6aXAsIDEwKTtcblxuICBpZihmb3JtYXRFeHBNb250aCkge1xuICAgIHBheW1lbnRDYXJkLmV4cE1vbnRoID0gZm9ybWF0RXhwTW9udGg7XG4gIH1cblxuICBpZihmb3JtYXRFeHBZZWFyKSB7XG4gICAgcGF5bWVudENhcmQuZXhwWWVhciA9IGZvcm1hdEV4cFllYXI7XG4gIH1cblxuICBpZihmb3JtYXRDaXR5KSB7XG4gICAgcGF5bWVudENhcmQuY2l0eSA9IGZvcm1hdENpdHk7XG4gIH1cblxuICBpZihmb3JtYXRDb3VudHJ5KSB7XG4gICAgcGF5bWVudENhcmQuY291bnRyeSA9IGZvcm1hdENvdW50cnk7XG4gIH1cblxuICBpZihmb3JtYXRGdWxsTmFtZSkge1xuICAgIHBheW1lbnRDYXJkLmZ1bGxOYW1lID0gZm9ybWF0RnVsbE5hbWU7XG4gIH1cblxuICBpZihmb3JtYXRTdHJlZXQxKSB7XG4gICAgcGF5bWVudENhcmQuc3RyZWV0MSA9IGZvcm1hdFN0cmVldDE7XG4gIH1cblxuICBpZihmb3JtYXRTdGF0ZSkge1xuICAgIHBheW1lbnRDYXJkLnN0YXRlID0gZm9ybWF0U3RhdGU7XG4gIH1cblxuICBpZihmb3JtYXRaaXApIHtcbiAgICBwYXltZW50Q2FyZC56aXAgPSBmb3JtYXRaaXA7XG4gIH1cblxuICBjb25zdCB1cGRhdGUgPSBwYXltZW50Q2FyZDtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICAgIExFVCB1cGRhdGVkQ2FyZCA9IEZJUlNUKFxuICAgICAgICBGT1IgYyBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBGSUxURVIgYy5fa2V5ID09ICR7Zm9ybWF0SWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgICBVUERBVEUgYyBXSVRIICR7dXBkYXRlfSBJTiBjcmVkaXRDYXJkc1xuICAgICAgICBMSU1JVCAxXG4gICAgICAgIFJFVFVSTiBORVdcbiAgICAgIClcbiAgICAgIExFVCB1c2VyID0gRklSU1QoXG4gICAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICAgIEZJTFRFUiB1Ll9rZXkgPT0gJHtzZXNzaW9uSWR9XG4gICAgICAgIExJTUlUIDFcbiAgICAgICAgUkVUVVJOIHVcbiAgICAgIClcbiAgICAgIFJFVFVSTiB7dXNlcjogdXNlciwgY2FyZDogdXBkYXRlZENhcmR9YDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocmVzdWx0cyA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBjb25zdCB1cGRhdGVkQ2FyZDogUGF5bWVudENhcmRUeXBlID0gcmVzdWx0cy5jYXJkO1xuICAgICAgY29uc3Qge3VzZXJ9ID0gcmVzdWx0cztcblxuICAgICAgaWYoIXVwZGF0ZWRDYXJkKSB7XG4gICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ25vdF9mb3VuZCcpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7c3RyaXBlQ3VzdG9tZXJJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qge3N0cmlwZUlkfSA9IGNhcmQ7XG4gICAgICBjb25zdCBzdHJpcGVDbGllbnQgPSBnZXRTdHJpcGVDbGllbnQoKTtcbiAgICAgIGNvbnN0IHVwZGF0ZTogc3RyaXBlLkN1c3RvbWVyVXBkYXRlU291cmNlUGFyYW1zID0ge1xuICAgICAgICBhZGRyZXNzX2NpdHk6IGZvcm1hdENpdHksXG4gICAgICAgIGFkZHJlc3NfY291bnRyeTogZm9ybWF0Q291bnRyeSxcbiAgICAgICAgYWRkcmVzc19saW5lMTogZm9ybWF0U3RyZWV0MSxcbiAgICAgICAgYWRkcmVzc19zdGF0ZTogZm9ybWF0U3RhdGUsXG4gICAgICAgIGFkZHJlc3NfemlwOiBmb3JtYXRaaXAsXG4gICAgICAgIGV4cF9tb250aDogZm9ybWF0RXhwTW9udGgudG9TdHJpbmcoKSxcbiAgICAgICAgZXhwX3llYXI6IGZvcm1hdEV4cFllYXIudG9TdHJpbmcoKSxcbiAgICAgICAgbmFtZTogZm9ybWF0RnVsbE5hbWVcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC51cGRhdGVTb3VyY2Uoc3RyaXBlQ3VzdG9tZXJJZCwgc3RyaXBlSWQsIHVwZGF0ZSlcbiAgICAgICAgLnRoZW4oKCkgPT4gY2FyZClcbiAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OnVwZGF0ZUNhcmQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgICAgIHRocm93IG5ldyBVc2VyRXJyb3IoJ3BheW1lbnRfZXJyb3InKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q3JlZGl0Q2FyZHMgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8UGF5bWVudENhcmRUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldENyZWRpdENhcmRzJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBjIElOIGNyZWRpdENhcmRzXG4gICAgRklMVEVSIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgIFJFVFVSTiBjYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC50aGVuKChsaXN0OiBQYXltZW50Q2FyZFR5cGVbXSA9IFtdKSA9PiBsaXN0KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpLnRoZW4oKCkgPT4gbnVsbCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUNyZWRpdENhcmQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgY2FyZElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRDYXJkSWQ6IHN0cmluZyA9IHBhcnNlSWQoY2FyZElkKTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBMRVQgY2FyZCA9IEZJUlNUKFxuICAgICAgRk9SIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIEZJTFRFUiBjLl9rZXkgPT0gJHtmb3JtYXRDYXJkSWR9ICYmIGMudXNlcklkID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVNT1ZFIGMgSU4gY3JlZGl0Q2FyZHNcbiAgICAgIFJFVFVSTiBPTERcbiAgICApXG4gICAgTEVUIHVzZXIgPSBGSVJTVChcbiAgICAgIEZPUiB1IElOIHVzZXJzXG4gICAgICBGSUxURVIgdS5fa2V5ID09ICR7c2Vzc2lvbklkfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgICApXG4gICAgUkVUVVJOIHt1c2VyOiB1c2VyLCBjYXJkOiBjYXJkfWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgLnRoZW4oKHJlc3VsdCA9IHtjYXJkOiB7fSwgdXNlcjoge319KSA9PiB7XG4gICAgICBpZighcmVzdWx0KSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qge2NhcmQsIHVzZXJ9ID0gcmVzdWx0O1xuICAgICAgY29uc3Qge19rZXk6IGNhcmRLZXl9ID0gY2FyZDtcblxuICAgICAgLy8gUmVtb3ZlIGxpbmtlZCBlZGdlc1xuICAgICAgY29uc3QgZWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oJ2hhc1BheW1lbnQnKTtcblxuICAgICAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLm91dEVkZ2VzKGNhcmRLZXksIHt9KVxuICAgICAgICAudGhlbihhc3luYyAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAvLyBFeHRyYWN0IGVkZ2VzIGZyb20gdGhlIHJlc3BvbnNlXG4gICAgICAgICAgY29uc3QgZWRnZXMgPSBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSA/IHJlc3BvbnNlIDogW107XG5cbiAgICAgICAgICBpZihlZGdlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgICBlZGdlcy5tYXAoKGVkZ2UpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7X2tleTogZWRnZUtleX0gPSBlZGdlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgUkVNT1ZFIHtfa2V5OiR7ZWRnZUtleX19IElOIGhhc1BheW1lbnRgO1xuICAgICAgICAgICAgICAgIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KHJlbW92ZUFxbFFyeSk7XG4gICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU3RyaXBlXG4gICAgICAgICAgICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LmN1c3RvbWVyc1xuICAgICAgICAgICAgICAgICAgLmRlbGV0ZVNvdXJjZSh1c2VyLnN0cmlwZUN1c3RvbWVySWQsIGNhcmQuc3RyaXBlSWQpXG4gICAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB0cnVlKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3BheW1lbnRzOjpkZWxldGVDYXJkOjplcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZUJhbmtBY2NvdW50ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIGJhbmtJZDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcblxuICAvLyBDbGVhbiBkYlxuICBjb25zdCB1cGRhdGU6IFVzZXJUeXBlID0ge1xuICAgIGJhbmtBY2NvdW50OiAnJyxcbiAgICBiYW5rRnVsbE5hbWU6ICcnLFxuICAgIGJhbmtJZDogJycsXG4gICAgYmFua1JvdXRpbmc6ICcnLFxuICAgIG1vZGlmaWVkOiBEYXRlLm5vdygpXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgVVBEQVRFICR7c2Vzc2lvbklkfSBXSVRIICR7dXBkYXRlfSBJTiB1c2VycyBMSU1JVCAxIFJFVFVSTiBORVdgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyOiBVc2VyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qge3N0cmlwZUFjY291bnRJZH0gPSB1c2VyO1xuICAgICAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgICAgIHJldHVybiBzdHJpcGVDbGllbnQuY3VzdG9tZXJzXG4gICAgICAgIC5kZWxldGVTb3VyY2Uoc3RyaXBlQWNjb3VudElkLCBiYW5rSWQpXG4gICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgIC5jYXRjaCgoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVQYXltZW50VHJhbnNmZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdHJhbnNmZXI6IFBheW1lbnRUcmFuc2Zlcik6IFByb21pc2U8UGF5bWVudFRyYW5zZmVyPiA9PiB7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH19ID0gY29udGV4dDtcbiAgY29uc3Qge2Ftb3VudCwgY3VycmVuY3l9ID0gdHJhbnNmZXI7XG4gIGNvbnN0IGZvcm1hdEFtb3VudDogbnVtYmVyID0gcGFyc2VOdW0oYW1vdW50KTtcbiAgY29uc3QgZm9ybWF0Q3VycmVuY3k6IHN0cmluZyA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGdldFVzZXIoY29udGV4dCwge3VzZXJJZDogc2Vzc2lvbklkfSlcbiAgICAudGhlbigodXNlcjogVXNlclR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtzdHJpcGVBY2NvdW50SWR9ID0gdXNlcjtcbiAgICAgIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gICAgICByZXR1cm4gc3RyaXBlQ2xpZW50LnRyYW5zZmVyc1xuICAgICAgICAuY3JlYXRlKHtcbiAgICAgICAgICBhbW91bnQ6IGZvcm1hdEFtb3VudCxcbiAgICAgICAgICBjdXJyZW5jeTogZm9ybWF0Q3VycmVuY3ksXG4gICAgICAgICAgZGVzdGluYXRpb246IHN0cmlwZUFjY291bnRJZFxuICAgICAgICB9KVxuICAgICAgICAudGhlbigoc3RyaXBlVHJhbnNmZXIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhzdHJpcGVUcmFuc2Zlcik7XG4gICAgICAgICAgY29uc3Qgbm93OiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudFRyYW5zZmVyID0ge1xuICAgICAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgICAgIGFtb3VudDogZm9ybWF0QW1vdW50LFxuICAgICAgICAgICAgY3VycmVuY3k6IGZvcm1hdEN1cnJlbmN5LFxuICAgICAgICAgICAgbW9kaWZpZWQ6IG5vdyxcbiAgICAgICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICAgICAgfTtcbiAgICAgICAgICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYElOU0VSVCAke2luc2VydH0gSU4gdHJhbnNmZXJzIFJFVFVSTiBORVdgO1xuXG4gICAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgICAgICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgICAgICAgIC50aGVuKChuZXdUcmFuc2ZlcjogUGF5bWVudFRyYW5zZmVyKSA9PiBuZXdUcmFuc2Zlcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVBheW1lbnRIb2xkID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHBheW1lbnQ6IFBheW1lbnRDaGFyZ2UpOiBQcm9taXNlPFBheW1lbnRDaGFyZ2U+ID0+IHtcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuICBjb25zdCB7YW1vdW50LCBjYXB0dXJlLCBjYXJkSWQsIGN1cnJlbmN5LCBkZXNjcmlwdGlvbn0gPSBwYXltZW50O1xuICBjb25zdCBmb3JtYXRDdXJyZW5jeSA9IHBhcnNlQ2hhcihjdXJyZW5jeSwgMywgJ1VTRCcpLnRvVXBwZXJDYXNlKCk7XG4gIGNvbnN0IHN0cmlwZUNsaWVudCA9IGdldFN0cmlwZUNsaWVudCgpO1xuXG4gIHJldHVybiBzdHJpcGVDbGllbnQuY2hhcmdlc1xuICAgIC5jcmVhdGUoe1xuICAgICAgYW1vdW50LFxuICAgICAgY2FwdHVyZSxcbiAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgc291cmNlOiBjYXJkSWRcbiAgICB9KVxuICAgIC50aGVuKChzdHJpcGVDaGFyZ2UpID0+IHtcbiAgICAgIGNvbnN0IG5vdzogbnVtYmVyID0gRGF0ZS5ub3coKTtcbiAgICAgIGNvbnN0IGluc2VydDogUGF5bWVudENoYXJnZSA9IHtcbiAgICAgICAgYWRkZWQ6IG5vdyxcbiAgICAgICAgYW1vdW50LFxuICAgICAgICBjYXB0dXJlLFxuICAgICAgICBjYXJkSWQsXG4gICAgICAgIGNoYXJnZUZhaWxDb2RlOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9jb2RlLFxuICAgICAgICBjaGFyZ2VGYWlsTXNnOiBzdHJpcGVDaGFyZ2UuZmFpbHVyZV9tZXNzYWdlLFxuICAgICAgICBjaGFyZ2VJZDogc3RyaXBlQ2hhcmdlLmlkLFxuICAgICAgICBjaGFyZ2VTdGF0dXM6IHN0cmlwZUNoYXJnZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbmN5OiBmb3JtYXRDdXJyZW5jeSxcbiAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgIG1vZGlmaWVkOiBub3csXG4gICAgICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gICAgICB9O1xuICAgICAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBJTlNFUlQgJHtpbnNlcnR9IElOIHBheW1lbnRzIFJFVFVSTiBORVdgO1xuXG4gICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAgIC50aGVuKChuZXdQYXltZW50OiBQYXltZW50Q2hhcmdlKSA9PiBuZXdQYXltZW50KTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZygncGF5bWVudHM6OmNyZWF0ZUhvbGQ6OmVycm9yJywgZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IFVzZXJFcnJvcigncGF5bWVudF9lcnJvcicpO1xuICAgIH0pO1xufTtcblxuaW50ZXJmYWNlIENhcmQge1xuICBpZDogc3RyaW5nO1xuICBicmFuZD86IHN0cmluZztcbiAgY3ZjX2NoZWNrPzogc3RyaW5nO1xuICBsYXN0ND86IHN0cmluZztcbn1cbiJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQVEsWUFBQUEsTUFBZSwrQkFDdkIsT0FBUSxjQUFBQyxFQUFZLGFBQUFDLEVBQVcsV0FBQUMsRUFBUyxlQUFBQyxFQUFhLGdCQUFBQyxNQUFtQiwrQkFDeEUsT0FBUSxPQUFBQyxNQUFVLFdBS2xCLE9BQVEsY0FBQUMsTUFBaUIsMEJBR3pCLE9BQVEsWUFBQUMsRUFBVSxhQUFBQyxNQUFnQiw2QkFDbEMsT0FBUSxTQUFBQyxNQUFZLDRCQUNwQixPQUFRLG1CQUFBQyxNQUFzQiwwQkFDOUIsT0FBUSxXQUFBQyxNQUFjLGFBSXRCLE1BQU1DLEVBQWdCLFdBRVRDLEdBQXNCQyxHQUEwQyxDQUMzRSxNQUFNQyxFQUFTLHFCQUNULENBQUMsYUFBQUMsRUFBYyxRQUFTLENBQUMsT0FBUUMsRUFBVyxTQUFBQyxDQUFRLEVBQUksQ0FBQyxDQUFDLEVBQUlKLEVBSXBFLE9BRnFCSixFQUFnQixFQUVqQixVQUNqQixPQUFPLENBQ04sU0FBVSxDQUNSLE9BQVFPLEVBQ1IsU0FBQUMsQ0FDRixDQUNGLENBQVEsRUFDUCxLQUFNQyxHQUFhLENBR2xCLE1BQU1DLEVBQW1CLENBQ3ZCLFNBRmtCLEtBQUssSUFBSSxFQUczQixpQkFBa0JELEVBQVMsRUFDN0IsRUFFTUUsRUFBbUJoQixXQUFhWSxDQUFTLFNBQVNHLENBQU0sK0JBRTlELE9B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QVVBLEVBQWEsR0FDdkIsYUFBY0EsRUFBYSxPQUMzQixTQUFVUCxFQUNWLFlBQUFNLEVBQ0EsU0FBVWpFLEVBQ1YsT0FBUXJCLENBQ1YsRUFDTUksRUFBbUJoQixXQUFhNkQsQ0FBTSwwQkFFNUMsT0FBT3pELEVBQU1PLENBQVksRUFBRSxNQUFNSyxDQUFNLEVBQ3BDLEtBQU1DLEdBQVdBLEVBQU8sS0FBSyxDQUFDLEVBQzlCLEtBQU1tRixHQUE4QkEsQ0FBVSxDQUNuRCxDQUFDLEVBQ0EsTUFBT2pGLEdBQWlCLENBRXZCLE1BQU0sSUFBSWhCLEVBQVUsZUFBZSxDQUNyQyxDQUFDLENBQ0wiLAogICJuYW1lcyI6IFsicGFyc2VOdW0iLCAiY3JlYXRlSGFzaCIsICJwYXJzZUNoYXIiLCAicGFyc2VJZCIsICJwYXJzZVN0cmluZyIsICJwYXJzZVZhckNoYXIiLCAiYXFsIiwgIkVycm9yVHlwZXMiLCAibG9nRXJyb3IiLCAiVXNlckVycm9yIiwgInVzZURiIiwgImdldFN0cmlwZUNsaWVudCIsICJnZXRVc2VyIiwgImV2ZW50Q2F0ZWdvcnkiLCAiYWRkQ3VzdG9tZXJBY2NvdW50IiwgImNvbnRleHQiLCAiYWN0aW9uIiwgImRhdGFiYXNlTmFtZSIsICJzZXNzaW9uSWQiLCAidXNlcm5hbWUiLCAiY3VzdG9tZXIiLCAidXBkYXRlIiwgImFxbFFyeSIsICJjdXJzb3IiLCAidXBkYXRlZFVzZXIiLCAiZXJyb3IiLCAiYWRkQmFua0FjY291bnQiLCAiYmFua0FjY291bnQiLCAiYWNjb3VudE51bWJlciIsICJmdWxsTmFtZSIsICJyb3V0aW5nIiwgImZvcm1hdEFjY291bnQiLCAiZm9ybWF0RnVsbE5hbWUiLCAiZm9ybWF0Um91dGluZyIsICJ1c2VyIiwgInN0cmlwZUFjY291bnRJZCIsICJzdHJpcGVDbGllbnQiLCAidG9rZW4iLCAiYWNjb3VudCIsICJub3ciLCAiYWRkQ3JlZGl0Q2FyZCIsICJjYXJkIiwgImNpdHkiLCAiY291bnRyeSIsICJjdmMiLCAiZXhwTW9udGgiLCAiZXhwWWVhciIsICJzdHJlZXQxIiwgInN0cmVldDIiLCAic3RhdGUiLCAiemlwIiwgImZvcm1hdE51bWJlciIsICJmb3JtYXRFeHBNb250aCIsICJmb3JtYXRFeHBZZWFyIiwgImZvcm1hdEN2YyIsICJwYXltZW50Q2FyZCIsICJmb3JtYXRDaXR5IiwgImZvcm1hdENvdW50cnkiLCAiZm9ybWF0U3RyZWV0MSIsICJmb3JtYXRTdHJlZXQyIiwgImZvcm1hdFN0YXRlIiwgImZvcm1hdFppcCIsICJuZXdTb3VyY2UiLCAiY2FyZFNvdXJjZSIsICJicmFuZCIsICJjdmNDaGVjayIsICJsYXN0NCIsICJpbnNlcnQiLCAiaW5zZXJ0QXFsUXJ5IiwgIm5ld0NhcmQiLCAiY2FyZElkIiwgImNhcmRLZXkiLCAiZWRnZUNvbGxlY3Rpb24iLCAiZWRnZUlkIiwgImVkZ2UiLCAidXBkYXRlQ3JlZGl0Q2FyZCIsICJpZCIsICJmb3JtYXRJZCIsICJyZXN1bHRzIiwgInVwZGF0ZWRDYXJkIiwgInN0cmlwZUN1c3RvbWVySWQiLCAic3RyaXBlSWQiLCAiZ2V0Q3JlZGl0Q2FyZHMiLCAibGlzdCIsICJkZWxldGVDcmVkaXRDYXJkIiwgImZvcm1hdENhcmRJZCIsICJyZXN1bHQiLCAicmVzcG9uc2UiLCAiZWRnZXMiLCAiZWRnZUtleSIsICJyZW1vdmVBcWxRcnkiLCAiZGVsZXRlQmFua0FjY291bnQiLCAiYmFua0lkIiwgImNyZWF0ZVBheW1lbnRUcmFuc2ZlciIsICJ0cmFuc2ZlciIsICJhbW91bnQiLCAiY3VycmVuY3kiLCAiZm9ybWF0QW1vdW50IiwgImZvcm1hdEN1cnJlbmN5IiwgInN0cmlwZVRyYW5zZmVyIiwgIm5ld1RyYW5zZmVyIiwgImNyZWF0ZVBheW1lbnRIb2xkIiwgInBheW1lbnQiLCAiY2FwdHVyZSIsICJkZXNjcmlwdGlvbiIsICJzdHJpcGVDaGFyZ2UiLCAibmV3UGF5bWVudCJdCn0K
|
package/lib/actions/posts.js
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import{parseNum as L}from"@nlabs/utils/parsers/numbers";import{createHash as v,parseArangoId as S,parseChar as _,parseId as D,parseString as q,parseVarChar as x}from"@nlabs/utils/parsers/strings";import{aql as A}from"arangojs";import{parsePost as H}from"../adapters/postAdapter.js";import{ErrorTypes as m}from"../types/error.types.js";import{logError as f,logException as w}from"../utils/analyticsUtils.js";import{getLimit as V,useDb as E}from"../utils/arangodbUtils.js";import{extractTags as B,getTagsByName as U,updateTagsInItem as Q}from"./tags.js";const W=1e5,O="posts",$=(t={})=>{const{from:r=0,latitude:e=0,longitude:o=0,to:i=30,type:n="post"}=t;return{latitude:L(e,32),limit:V(r,i),longitude:L(o,32),type:_(n,32)}},C=(t=[],r="")=>(t||[]).reduce((e,o)=>{switch(o){case"hasRsvp":return e.queries.push(`LET hasRsvp = TO_BOOL(FIRST(
|
|
2
|
-
FOR post, r IN INBOUND p._id hasReaction
|
|
3
|
-
FILTER r.name == "rsvp" && r.type == "posts" && r._from == "users/${r}"
|
|
4
|
-
COLLECT WITH COUNT INTO count
|
|
5
|
-
RETURN count
|
|
6
|
-
))`),e.objects.push("hasRsvp:hasRsvp"),e;case"isSaved":return e.queries.push(`LET isSaved = TO_BOOL(FIRST(
|
|
7
|
-
FOR post, r IN INBOUND p._id hasReaction
|
|
8
|
-
FILTER r.name == "pin" && r.type == "posts" && r._from == "users/${r}"
|
|
9
|
-
COLLECT WITH COUNT INTO count
|
|
10
|
-
RETURN count
|
|
11
|
-
))`),e.objects.push("isSaved:isSaved"),e;case"reactions":return e.queries.push(`LET reactions = (
|
|
12
|
-
FOR post, r IN INBOUND p._id hasReaction
|
|
13
|
-
COLLECT reactionName = r.value INTO reactionItems
|
|
14
|
-
RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
|
|
15
|
-
)`),e.objects.push("reactions:reactions"),e;case"rsvpCount":return e.queries.push(`LET rsvpCount = FIRST(
|
|
16
|
-
FOR post, r IN INBOUND p._id hasReaction
|
|
17
|
-
FILTER r.name == "rsvp" && r.type == "posts"
|
|
18
|
-
COLLECT WITH COUNT INTO count
|
|
19
|
-
RETURN count
|
|
20
|
-
)`),e.objects.push("rsvpCount:rsvpCount"),e;case"viewCount":return e.queries.push(`LET viewCount = FIRST(
|
|
21
|
-
FOR post, r IN INBOUND p._id hasReaction
|
|
22
|
-
FILTER r.name == "view" && r.type == "posts"
|
|
23
|
-
COLLECT WITH COUNT INTO count
|
|
24
|
-
RETURN count
|
|
25
|
-
)`),e.objects.push("viewCount:viewCount"),e;default:return e}},{objects:[],queries:[]}),st=async(t,r,e)=>{const o="getPost",{databaseName:i,fields:n,session:{userId:p}={}}=t,R=D(r),{type:c}=$(e),s=E(i),{objects:a,queries:u}=C(n,p),d=A`FOR p IN posts
|
|
26
|
-
FILTER p._key == ${R} && p.type == ${c}
|
|
27
|
-
LIMIT 1
|
|
28
|
-
RETURN p`;return s.query(d).then(I=>I.next()).then(I=>{const{_id:g,userId:T,groupId:h,privacy:N="default"}=I;let y;return T===p?I:(h&&N==="group"?y=`LET p = DOCUMENT("${g}")
|
|
29
|
-
${u.join(`
|
|
30
|
-
`)}
|
|
31
|
-
FOR group IN groups
|
|
32
|
-
FILTER group._key == p.groupId
|
|
33
|
-
FOR u, e IN OUTBOUND group._id hasConnection
|
|
34
|
-
FILTER u._key == "${p}"
|
|
35
|
-
LIMIT 1
|
|
36
|
-
RETURN MERGE(p, {${a.join(", ")}})`:N==="public"&&(y=`LET p = DOCUMENT("${g}")
|
|
37
|
-
${u.join(`
|
|
38
|
-
`)}
|
|
39
|
-
LIMIT 1
|
|
40
|
-
RETURN MERGE(p, {${a.join(", ")}})`),y?s.query(y).then(l=>l.next()).catch(l=>f({action:o,category:O,label:m.DATABASE_ERROR},l,t)):{})}).catch(I=>f({action:o,category:O,label:m.DATABASE_ERROR},I,t))},ot=(t,r,e,o)=>{const i="getPostsByArea",{databaseName:n,fields:p,session:{userId:R}={}}=t,{limit:c,type:s}=$(o),a=L(r),u=L(e),{objects:d,queries:I}=C(p,R);I.push(`LET distance = DISTANCE(
|
|
41
|
-
${a},
|
|
42
|
-
${u},
|
|
43
|
-
NOT_NULL(p.latitude, 0),
|
|
44
|
-
NOT_NULL(p.longitude, 0))
|
|
45
|
-
`),d.push("distance:distance");const g=`FOR p IN posts
|
|
46
|
-
${I.join(`
|
|
47
|
-
`)}
|
|
48
|
-
FILTER p.type == "${s}" && p.privacy == "public" && p.parentId == null
|
|
49
|
-
${c.aql}
|
|
50
|
-
SORT distance, p.added
|
|
51
|
-
RETURN DISTINCT MERGE(p, {${d.join(", ")}})`;return E(n).query(g).then(T=>T.all()).catch(T=>(f({action:i,category:O,label:m.DATABASE_ERROR},T,t),[]))},rt=(t,r)=>{const{databaseName:e,fields:o,session:{userId:i}={}}=t,{limit:n,type:p}=$(r),{objects:R,queries:c}=C(o,i),s=`FOR p IN posts
|
|
52
|
-
FILTER p.type == "${p}" && p.privacy == "public" && p.parent == null
|
|
53
|
-
${c.join(`
|
|
54
|
-
`)}
|
|
55
|
-
${n.aql}
|
|
56
|
-
SORT p.added DESC
|
|
57
|
-
RETURN DISTINCT MERGE(p, {${R.join(", ")}})`;return E(e).query(s).then(a=>a.all()).catch(a=>{throw a})},nt=(t,r=[],e)=>{const o="getPostsByReactions",{databaseName:i,fields:n,session:{userId:p}={}}=t,{latitude:R,limit:c,longitude:s,type:a}=$(e),{objects:u,queries:d}=C(n,p),I=`users/${p}`,g=JSON.stringify(r.map(P=>_(P,32).toLowerCase())),T=[],h=[`p.type == "${a}"`,'p.privacy == "public"'],N=L(R),y=L(s);N&&y&&(d.push(`LET distance = DISTANCE(
|
|
58
|
-
${N},
|
|
59
|
-
${y},
|
|
60
|
-
NOT_NULL(p.latitude, 0),
|
|
61
|
-
NOT_NULL(p.longitude, 0))
|
|
62
|
-
`),u.push("distance:distance"),T.push("distance")),r.length&&(T.push("matchedTags DESC"),d.push(`LET matchedReactions = LENGTH(
|
|
63
|
-
FOR mr IN reactions
|
|
64
|
-
FILTER mr.matched == true
|
|
65
|
-
RETURN mr
|
|
66
|
-
)`),u.push("matchedReactions:matchedReactions"),h.push("matchedReactions > 0")),T.push("p.added DESC"),u.push("reactions:reactions");const l=`FOR p, r IN OUTBOUND "${I}" hasReaction
|
|
67
|
-
LET reactions = (
|
|
68
|
-
FOR reaction, hr IN 1..1 INBOUND p isTagged
|
|
69
|
-
LET matched = LENGTH(${g}) > 0 && POSITION(${g}, reaction.name)
|
|
70
|
-
SORT reaction.name
|
|
71
|
-
RETURN MERGE(reaction, {matched:matched})
|
|
72
|
-
)
|
|
73
|
-
${d.join(`
|
|
74
|
-
`)}
|
|
75
|
-
FILTER ${h.join(" && ")}
|
|
76
|
-
${c.aql}
|
|
77
|
-
RETURN DISTINCT MERGE(p, {${u.join(", ")}})`;return E(i).query(l).then(P=>P.all()).catch(P=>(f({action:o,category:O,label:m.DATABASE_ERROR},P,t),[]))},at=(t,r=[],e)=>{const o="getPostsByTags",{databaseName:i,fields:n,session:{userId:p}={}}=t,{latitude:R,limit:c,longitude:s,type:a}=$(e),{objects:u,queries:d}=C(n,p),I=JSON.stringify(r.map(l=>_(l,32).toLowerCase())),g=[],T=[`p.type == "${a}"`,'p.privacy == "public"'],h=L(R),N=L(s);h&&N&&(d.push(`LET distance = DISTANCE(
|
|
78
|
-
${h},
|
|
79
|
-
${N},
|
|
80
|
-
NOT_NULL(p.latitude, 0),
|
|
81
|
-
NOT_NULL(p.longitude, 0))
|
|
82
|
-
`),u.push("distance:distance"),g.push("distance")),r.length&&(g.push("matchedTags DESC"),d.push(`LET matchedTags = LENGTH(
|
|
83
|
-
FOR t IN tags
|
|
84
|
-
FILTER t.matched == true
|
|
85
|
-
RETURN t
|
|
86
|
-
)`),u.push("matchedTags:matchedTags"),T.push("matchedTags > 0")),g.push("p.added DESC"),u.push("tags:tags");const y=`FOR p IN posts
|
|
87
|
-
LET tags = (
|
|
88
|
-
FOR tag, it IN 1..1 INBOUND p isTagged
|
|
89
|
-
LET matched = LENGTH(${I}) > 0 && POSITION(${I}, tag.name)
|
|
90
|
-
SORT tag.name
|
|
91
|
-
RETURN MERGE(tag, {matched:matched})
|
|
92
|
-
)
|
|
93
|
-
${d.join(`
|
|
94
|
-
`)}
|
|
95
|
-
FILTER ${T.join(" && ")}
|
|
96
|
-
${c.aql}
|
|
97
|
-
SORT ${g.join(", ")}
|
|
98
|
-
RETURN DISTINCT MERGE(p, {${u.join(", ")}})`;return E(i).query(y).then(l=>l.all()).catch(l=>(f({action:o,category:O,label:m.DATABASE_ERROR},l,t),[]))},it=(t,r,e)=>{const o="getPostsByUser",{databaseName:i,fields:n,session:{userId:p}={}}=t,{limit:R,type:c}=$(e),s=D(r),{objects:a,queries:u}=C(n,p),d=`FOR p IN posts
|
|
99
|
-
FILTER p.userId == "${s}" && p.type == "${c}" && p.privacy == "public" && p.parent == null
|
|
100
|
-
${u.join(`
|
|
101
|
-
`)}
|
|
102
|
-
${R.aql}
|
|
103
|
-
SORT p.added
|
|
104
|
-
RETURN DISTINCT MERGE(p, {${a.join(", ")}})`;return E(i).query(d).then(I=>I.all()).catch(I=>(f({action:o,category:O,label:m.DATABASE_ERROR},I,t),[]))},pt=(t,r,e)=>{const o="getPostComments",{databaseName:i,session:{userId:n}={}}=t,{limit:p,type:R}=$(e),c=D(r),s=A`FOR p IN posts
|
|
105
|
-
FILTER p.type == ${R} && p._key == ${c}
|
|
106
|
-
LIMIT 1
|
|
107
|
-
RETURN p`;return E(i).query(s).then(a=>a.next()).then(a=>{const{_key:u,groupId:d,privacy:I="default"}=a;let g;return d&&I==="group"?g=`FOR p IN posts
|
|
108
|
-
FOR user IN users
|
|
109
|
-
FILTER p.parent == "${u}" && user._key == p.userId
|
|
110
|
-
LET reactions = (
|
|
111
|
-
FOR post, r IN INBOUND p._id reactions
|
|
112
|
-
COLLECT reactionName = r.value INTO reactionItems
|
|
113
|
-
RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
|
|
114
|
-
)
|
|
115
|
-
FOR group IN groups
|
|
116
|
-
FILTER group._key == p.groupId
|
|
117
|
-
FOR u, e IN OUTBOUND group._id hasConnection
|
|
118
|
-
FILTER u._key == "${n}"
|
|
119
|
-
SORT p.added
|
|
120
|
-
${p.aql}
|
|
121
|
-
RETURN MERGE(p, {user: user, reactions: reactions})`:I==="public"&&(g=`FOR p IN posts
|
|
122
|
-
FOR user IN users
|
|
123
|
-
FILTER p.parent == "${u}" && user._key == p.userId
|
|
124
|
-
LET reactions = (
|
|
125
|
-
FOR post, r IN INBOUND p._id reactions
|
|
126
|
-
COLLECT reactionName = r.value INTO reactionItems
|
|
127
|
-
RETURN {name: reactionName, count: LENGTH(reactionItems[*].r.value)}
|
|
128
|
-
)
|
|
129
|
-
SORT p.added
|
|
130
|
-
${p.aql}
|
|
131
|
-
RETURN MERGE(p, {user: user, reactions: reactions})`),g?E(i).query(g).then(T=>T.all()).catch(T=>(f({action:o,category:O,label:m.DATABASE_ERROR},T,t),[])):[]}).catch(a=>(f({action:o,category:O,label:m.DATABASE_ERROR},a,t),[]))},ct=async(t,{content:r="",endDate:e,groupId:o="",location:i,latitude:n,longitude:p,name:R="",parentId:c="",privacy:s="public",tags:a=[],startDate:u,type:d="default"})=>{const I="addPost",{databaseName:g,session:{userId:T}={}}=t,h=Date.now(),N=v(`post-${T}`),y={_id:`posts/${N}`,_key:N,added:h,content:q(r,W)||"",endDate:e?L(e,13):void 0,groupId:o?D(o):void 0,latitude:n!==void 0?L(n):void 0,location:i?q(i,160):void 0,longitude:p!==void 0?L(p):void 0,modified:h,name:q(R,160),parentId:c?D(c):void 0,privacy:x(s,16),startDate:u?L(u,13):void 0,type:_(d,32),userId:T},l=A`INSERT ${y} IN posts RETURN NEW`;try{const P=await E(g).query(l).then(b=>b.next()).catch(b=>f({action:I,category:O,label:m.DATABASE_ERROR},b,t)),{_id:M}=P,j=await B(y.content||"");if(a.length||j.length){const b=(await U(t,a.map(({name:F})=>F||""))).map(F=>({...F,tagBy:T})),G=(await U(t,j||[])).map(F=>({...F,tagBy:"extract"})),k=await Q(t,{itemDocId:M,tags:[...G,...b]});return{...P,tags:k}}return P}catch(P){throw P}},ut=async(t,r)=>{const e="updatePost",{databaseName:o,session:{userId:i}={}}=t,n=Date.now(),p=H(r),{postId:R,tags:c=[]}=p,s={...p,modified:n};if(!R)throw w({action:e,category:O,value:m.INVALID_ID},t);const a={...s,_key:R,added:n,userId:i},u=A`UPSERT {_key: ${R}, userId: ${i}}
|
|
132
|
-
INSERT ${a}
|
|
133
|
-
UPDATE ${s}
|
|
134
|
-
IN posts RETURN NEW`;try{const d=await E(o).query(u).then(T=>T.next()).catch(T=>f({action:e,category:O,value:m.DATABASE_ERROR},T,{})),{_id:I}=d,g=await B(a.content||"");if(c?.length||g?.length){const T=c?.length?(await U(t,c.map(({name:y})=>y||""))).map(y=>({...y,tagBy:i})):[],h=g?.length?(await U(t,g||[])).map(y=>({...y,tagBy:"extract"})):[],N=await Q(t,{itemDocId:I,tags:[...h,...T]});return{...d,tags:N}}return d}catch(d){throw d}},dt=async(t,r)=>{const e="deletePost",{databaseName:o,session:{userId:i}={}}=t,n=S(r);if(!n)throw w({action:e,category:O,value:m.INVALID_ID},t);const p=A`FOR t IN isTagged
|
|
135
|
-
FILTER t._to == ${n}
|
|
136
|
-
REMOVE t IN isTagged`;await E(o).query(p).catch(s=>{throw s});const R=A`FOR f IN hasFile
|
|
137
|
-
FILTER f._to == ${n}
|
|
138
|
-
REMOVE f IN hasFile`;await E(o).query(R).catch(s=>{throw s});const c=A`FOR p IN posts
|
|
139
|
-
FILTER p._id == ${n} && p.userId == ${i}
|
|
140
|
-
LIMIT 1
|
|
141
|
-
REMOVE p IN posts
|
|
142
|
-
RETURN OLD`;return E(o).query(c).then(s=>s.next()).catch(s=>{throw s})},Tt=(t,r,e,o="isPosted",i={})=>{const n="createPostEdge",{databaseName:p}=t,R=E(p).collection(o),c=S(r),s=S(e);if(!s||!c)throw new Error(m.INVALID_ID);const a=v(`postEdge-${c}-${s}`),u={_from:c,_key:a,_to:s,added:Date.now(),...i};return R.save(u,{returnNew:!0}).catch(d=>{throw f({action:n,category:O,value:m.DATABASE_ERROR},d,t)})};export{ct as addPost,Tt as createPostEdge,dt as deletePost,st as getPost,pt as getPostComments,C as getPostOptional,ot as getPostsByArea,rt as getPostsByLatest,nt as getPostsByReactions,at as getPostsByTags,it as getPostsByUser,$ as parsePostOptions,ut as updatePost};
|
|
143
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2FjdGlvbnMvcG9zdHMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIENvcHlyaWdodHMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLiBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUgZm9yIHRlcm1zLlxuICovXG5pbXBvcnQgeyBwYXJzZU51bSB9IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL251bWJlcnMnO1xuaW1wb3J0IHtcbiAgICBjcmVhdGVIYXNoLCBwYXJzZUFyYW5nb0lkLCBwYXJzZUNoYXIsIHBhcnNlSWQsIHBhcnNlU3RyaW5nLCBwYXJzZVZhckNoYXJcbn0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQgeyBhcWwgfSBmcm9tICdhcmFuZ29qcyc7XG5pbXBvcnQgeyBBcWxRdWVyeSB9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5cbmltcG9ydCB7IHBhcnNlUG9zdCB9IGZyb20gJy4uL2FkYXB0ZXJzL3Bvc3RBZGFwdGVyLmpzJztcbmltcG9ydCB7IEVycm9yVHlwZXMgfSBmcm9tICcuLi90eXBlcy9lcnJvci50eXBlcy5qcyc7XG5pbXBvcnQgeyBsb2dFcnJvciwgbG9nRXhjZXB0aW9uIH0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHsgZ2V0TGltaXQsIHVzZURiIH0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5pbXBvcnQgeyBleHRyYWN0VGFncywgZ2V0VGFnc0J5TmFtZSwgdXBkYXRlVGFnc0luSXRlbSB9IGZyb20gJy4vdGFncy5qcyc7XG5cbmltcG9ydCB0eXBlIHsgRWRnZUNvbGxlY3Rpb24gfSBmcm9tICdhcmFuZ29qcy9jb2xsZWN0aW9ucyc7XG5pbXBvcnQgdHlwZSB7IEFyYW5nb0RiTGltaXQgfSBmcm9tICcuLi90eXBlcy9hcmFuZ29kYi50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEFwaUNvbnRleHQgfSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgRmlsZVR5cGUgfSBmcm9tICcuLi90eXBlcy9maWxlcy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IFBvc3RJbnB1dFR5cGUsIFBvc3RPcHRpb25zLCBQb3N0VHlwZSB9IGZyb20gJy4uL3R5cGVzL3Bvc3RzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHsgVGFnVHlwZSB9IGZyb20gJy4uL3R5cGVzL3RhZ3MudHlwZXMuanMnO1xuXG5jb25zdCBNQVhfQ09OVEVOVF9MRU5HVEg6IG51bWJlciA9IDEwMDAwMDtcbmNvbnN0IGV2ZW50Q2F0ZWdvcnk6IHN0cmluZyA9ICdwb3N0cyc7XG5cbmV4cG9ydCBjb25zdCBwYXJzZVBvc3RPcHRpb25zID0gKG9wdGlvbnM6IFBvc3RPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3Qge1xuICAgIGZyb20gPSAwLFxuICAgIGxhdGl0dWRlID0gMCxcbiAgICBsb25naXR1ZGUgPSAwLFxuICAgIHRvID0gMzAsXG4gICAgdHlwZSA9ICdwb3N0J1xuICB9ID0gb3B0aW9ucztcblxuICByZXR1cm4ge1xuICAgIGxhdGl0dWRlOiBwYXJzZU51bShsYXRpdHVkZSwgMzIpLFxuICAgIGxpbWl0OiBnZXRMaW1pdChmcm9tLCB0bykgYXMgQXJhbmdvRGJMaW1pdCxcbiAgICBsb25naXR1ZGU6IHBhcnNlTnVtKGxvbmdpdHVkZSwgMzIpLFxuICAgIHR5cGU6IHBhcnNlQ2hhcih0eXBlLCAzMilcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0T3B0aW9uYWwgPSAoZmllbGRzOiBzdHJpbmdbXSA9IFtdLCBzZXNzaW9uSWQ6IHN0cmluZyA9ICcnKSA9PlxuICAoZmllbGRzIHx8IFtdKS5yZWR1Y2UoKHNlbGVjdHM6IHtvYmplY3RzOiBzdHJpbmdbXSwgcXVlcmllczogc3RyaW5nW119LCBmaWVsZDogc3RyaW5nKSA9PiB7XG4gICAgc3dpdGNoKGZpZWxkKSB7XG4gICAgICBjYXNlICdoYXNSc3ZwJzoge1xuICAgICAgICBzZWxlY3RzLnF1ZXJpZXMucHVzaChgTEVUIGhhc1JzdnAgPSBUT19CT09MKEZJUlNUKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBGSUxURVIgci5uYW1lID09IFwicnN2cFwiICYmIHIudHlwZSA9PSBcInBvc3RzXCIgJiYgci5fZnJvbSA9PSBcInVzZXJzLyR7c2Vzc2lvbklkfVwiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKSlgKTtcbiAgICAgICAgc2VsZWN0cy5vYmplY3RzLnB1c2goJ2hhc1JzdnA6aGFzUnN2cCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2lzU2F2ZWQnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgaXNTYXZlZCA9IFRPX0JPT0woRklSU1QoXG4gICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCBoYXNSZWFjdGlvblxuICAgICAgICAgIEZJTFRFUiByLm5hbWUgPT0gXCJwaW5cIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiICYmIHIuX2Zyb20gPT0gXCJ1c2Vycy8ke3Nlc3Npb25JZH1cIlxuICAgICAgICAgIENPTExFQ1QgV0lUSCBDT1VOVCBJTlRPIGNvdW50XG4gICAgICAgICAgUkVUVVJOIGNvdW50XG4gICAgICAgICkpYCk7XG4gICAgICAgIHNlbGVjdHMub2JqZWN0cy5wdXNoKCdpc1NhdmVkOmlzU2F2ZWQnKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgICBjYXNlICdyZWFjdGlvbnMnOiB7XG4gICAgICAgIHNlbGVjdHMucXVlcmllcy5wdXNoKGBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgaGFzUmVhY3Rpb25cbiAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgUkVUVVJOIHtuYW1lOiByZWFjdGlvbk5hbWUsIGNvdW50OiBMRU5HVEgocmVhY3Rpb25JdGVtc1sqXS5yLnZhbHVlKX1cbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3JzdnBDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCByc3ZwQ291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInJzdnBcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgncnN2cENvdW50OnJzdnBDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ3ZpZXdDb3VudCc6IHtcbiAgICAgICAgc2VsZWN0cy5xdWVyaWVzLnB1c2goYExFVCB2aWV3Q291bnQgPSBGSVJTVChcbiAgICAgICAgICBGT1IgcG9zdCwgciBJTiBJTkJPVU5EIHAuX2lkIGhhc1JlYWN0aW9uXG4gICAgICAgICAgRklMVEVSIHIubmFtZSA9PSBcInZpZXdcIiAmJiByLnR5cGUgPT0gXCJwb3N0c1wiXG4gICAgICAgICAgQ09MTEVDVCBXSVRIIENPVU5UIElOVE8gY291bnRcbiAgICAgICAgICBSRVRVUk4gY291bnRcbiAgICAgICAgKWApO1xuICAgICAgICBzZWxlY3RzLm9iamVjdHMucHVzaCgndmlld0NvdW50OnZpZXdDb3VudCcpO1xuICAgICAgICByZXR1cm4gc2VsZWN0cztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHNlbGVjdHM7XG4gICAgICB9XG4gICAgfVxuICB9LCB7b2JqZWN0czogW10sIHF1ZXJpZXM6IFtdfSk7XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0ID0gYXN5bmMgKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBwb3N0SWQ6IHN0cmluZyxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRJdGVtSWQ6IHN0cmluZyA9IHBhcnNlSWQocG9zdElkKTtcbiAgY29uc3Qge3R5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZGF0YWJhc2UgPSB1c2VEYihkYXRhYmFzZU5hbWUpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH0gJiYgcC50eXBlID09ICR7dHlwZX1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiBkYXRhYmFzZS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigocG9zdDogUG9zdFR5cGUpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgX2lkOiBwb3N0RG9jSWQsXG4gICAgICAgIHVzZXJJZCxcbiAgICAgICAgZ3JvdXBJZCxcbiAgICAgICAgcHJpdmFjeSA9ICdkZWZhdWx0J1xuICAgICAgfTogUG9zdFR5cGUgPSBwb3N0O1xuXG4gICAgICBsZXQgcHJpdmFjeUFxbFFyeTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gICAgICBpZih1c2VySWQgPT09IHNlc3Npb25JZCkge1xuICAgICAgICByZXR1cm4gcG9zdDtcbiAgICAgIH1cblxuICAgICAgaWYoZ3JvdXBJZCAmJiBwcml2YWN5ID09PSAnZ3JvdXAnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgTEVUIHAgPSBET0NVTUVOVChcIiR7cG9zdERvY0lkfVwiKVxuICAgICAgICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBMSU1JVCAxXG4gICAgICAgICAgUkVUVVJOIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG4gICAgICB9IGVsc2UgaWYocHJpdmFjeSA9PT0gJ3B1YmxpYycpIHtcbiAgICAgICAgcHJpdmFjeUFxbFFyeSA9IGBMRVQgcCA9IERPQ1VNRU5UKFwiJHtwb3N0RG9jSWR9XCIpXG4gICAgICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuICAgICAgICAgIExJTUlUIDFcbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcbiAgICAgIH1cblxuICAgICAgaWYocHJpdmFjeUFxbFFyeSkge1xuICAgICAgICByZXR1cm4gZGF0YWJhc2UucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgICAgICBhY3Rpb24sXG4gICAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHt9O1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCkpO1xufTtcblxuXG4vLyBleHBvcnQgY29uc3QgZ2V0UG9zdExpc3QgPSAoY29udGV4dDogQXBpQ29udGV4dCwgb3B0aW9ucz86IFBvc3RPcHRpb25zKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4vLyAgIC8vIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldExpc3RCeUFwcCc7XG4vLyAgIGNvbnN0IHtkYXRhYmFzZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9fSA9IGNvbnRleHQ7XG4vLyAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuLy8gICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuLy8gICAgIEZJTFRFUiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuLy8gICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbi8vICAgICAke2xpbWl0LmFxbH1cbi8vICAgICBTT1JUIHAuYWRkZWRcbi8vICAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuLy8gICByZXR1cm4gZGF0YWJhc2UucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbi8vICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuLy8gICAgICAgdGhyb3cgZXJyb3I7XG4vLyAgICAgfSk7XG4vLyB9O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeUFyZWEgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGxhdGl0dWRlOiBudW1iZXIsXG4gIGxvbmdpdHVkZTogbnVtYmVyLFxuICBvcHRpb25zPzogUG9zdE9wdGlvbnNcbik6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0c0J5QXJlYSc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFBvc3RPcHRpb25hbChmaWVsZHMsIHNlc3Npb25JZCk7XG4gIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UoXG4gICAgJHtmb3JtYXRMYXRpdHVkZX0sXG4gICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgIE5PVF9OVUxMKHAubGF0aXR1ZGUsIDApLFxuICAgIE5PVF9OVUxMKHAubG9uZ2l0dWRlLCAwKSlcbiAgYCk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50SWQgPT0gbnVsbFxuICAgICR7bGltaXQuYXFsfVxuICAgIFNPUlQgZGlzdGFuY2UsIHAuYWRkZWRcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbi8vIGV4cG9ydCBjb25zdCBnZXRQb3N0c0J5R3JvdXAgPSAoXG4vLyAgIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4vLyAgIGdyb3VwSWQ6IHN0cmluZyxcbi8vICAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4vLyApOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbi8vICAgLy8gY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0TGlzdEJ5R3JvdXAnO1xuLy8gICBjb25zdCB7ZGF0YWJhc2UsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfX0gPSBjb250ZXh0O1xuLy8gICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRQb3N0T3B0aW9uYWwoZmllbGRzLCBzZXNzaW9uSWQpO1xuXG4vLyAgIC8vIEdyb3VwIGlkXG4vLyAgIGNvbnN0IGZvcm1hdEdyb3VwSWQ6IHN0cmluZyA9IHBhcnNlSWQoZ3JvdXBJZCk7XG4vLyAgIGNvbnN0IGRiID0gZGF0YWJhc2U7XG4vLyAgIGNvbnN0IGFxbFFyeTogc3RyaW5nID0gYEZPUiB1LCBnIElOIElOQk9VTkQgJHtmb3JtYXRHcm91cElkfSBoYXNHcm91cFxuLy8gICAgICAgRklMVEVSIHUuX2tleSA9PSAke3Nlc3Npb25JZH1cbi8vICAgICAgIFJFVFVSTiBnYDtcblxuLy8gICByZXR1cm4gZGIucXVlcnkoYXFsUXJ5KVxuLy8gICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbi8vICAgICAudGhlbigoZ3JvdXBzOiBHcm91cFR5cGVbXSA9IFtdKSA9PiB7XG4vLyAgICAgICBpZihncm91cHMubGVuZ3RoKSB7XG4vLyAgICAgICAgIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuLy8gICAgICAgICBjb25zdCBwb3N0QXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbi8vICAgICAgICAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAuZ3JvdXBJZCA9PSBcIiR7Zm9ybWF0R3JvdXBJZH1cIiAmJiBwLnBhcmVudCA9PSBudWxsXG4vLyAgICAgICAgICAgJHtzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpfVxuLy8gICAgICAgICAgICR7bGltaXQuYXFsfVxuLy8gICAgICAgICAgIFNPUlQgcC5hZGRlZFxuLy8gICAgICAgICAgIFJFVFVSTiBESVNUSU5DVCBNRVJHRShwLCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgO1xuXG4vLyAgICAgICAgIHJldHVybiBkYi5xdWVyeShwb3N0QXFsUXJ5KVxuLy8gICAgICAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbi8vICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuLy8gICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4vLyAgICAgICAgICAgfSk7XG4vLyAgICAgICB9XG5cbi8vICAgICAgIHJldHVybiBbXTtcbi8vICAgICB9KVxuLy8gICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4vLyAgICAgICB0aHJvdyBlcnJvcjtcbi8vICAgICB9KTtcbi8vIH07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICAvLyBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRMaXN0QnlMYXRlc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBGSUxURVIgcC50eXBlID09IFwiJHt0eXBlfVwiICYmIHAucHJpdmFjeSA9PSBcInB1YmxpY1wiICYmIHAucGFyZW50ID09IG51bGxcbiAgICAke3NlbGVjdFF1ZXJpZXMuam9pbignXFxuJyl9XG4gICAgJHtsaW1pdC5hcWx9XG4gICAgU09SVCBwLmFkZGVkIERFU0NcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICByZWFjdGlvbnM6IHN0cmluZ1tdID0gW10sXG4gIG9wdGlvbnM/OiBQb3N0T3B0aW9uc1xuKTogUHJvbWlzZTxQb3N0VHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2dldFBvc3RzQnlSZWFjdGlvbnMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkOiBzdHJpbmcgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmcgPSBKU09OLnN0cmluZ2lmeShyZWFjdGlvbnMubWFwKChyZWFjdGlvbikgPT4gcGFyc2VDaGFyKHJlYWN0aW9uLCAzMikudG9Mb3dlckNhc2UoKSkpO1xuICBjb25zdCBzb3J0Qnk6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGZpbHRlcnM6IHN0cmluZ1tdID0gW2BwLnR5cGUgPT0gXCIke3R5cGV9XCJgLCAncC5wcml2YWN5ID09IFwicHVibGljXCInXTtcbiAgY29uc3QgZm9ybWF0TGF0aXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxhdGl0dWRlKTtcbiAgY29uc3QgZm9ybWF0TG9uZ2l0dWRlOiBudW1iZXIgPSBwYXJzZU51bShsb25naXR1ZGUpO1xuXG4gIGlmKGZvcm1hdExhdGl0dWRlICYmIGZvcm1hdExvbmdpdHVkZSkge1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UoXG4gICAgICAke2Zvcm1hdExhdGl0dWRlfSxcbiAgICAgICR7Zm9ybWF0TG9uZ2l0dWRlfSxcbiAgICAgIE5PVF9OVUxMKHAubGF0aXR1ZGUsIDApLFxuICAgICAgTk9UX05VTEwocC5sb25naXR1ZGUsIDApKVxuICAgIGApO1xuICAgIHNlbGVjdE9iamVjdHMucHVzaCgnZGlzdGFuY2U6ZGlzdGFuY2UnKTtcbiAgICBzb3J0QnkucHVzaCgnZGlzdGFuY2UnKTtcbiAgfVxuXG4gIGlmKHJlYWN0aW9ucy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIG1hdGNoZWRSZWFjdGlvbnMgPSBMRU5HVEgoXG4gICAgICBGT1IgbXIgSU4gcmVhY3Rpb25zXG4gICAgICBGSUxURVIgbXIubWF0Y2hlZCA9PSB0cnVlXG4gICAgICBSRVRVUk4gbXJcbiAgICApYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdtYXRjaGVkUmVhY3Rpb25zOm1hdGNoZWRSZWFjdGlvbnMnKTtcbiAgICBmaWx0ZXJzLnB1c2goJ21hdGNoZWRSZWFjdGlvbnMgPiAwJyk7XG4gIH1cblxuICBzb3J0QnkucHVzaCgncC5hZGRlZCBERVNDJyk7XG4gIHNlbGVjdE9iamVjdHMucHVzaCgncmVhY3Rpb25zOnJlYWN0aW9ucycpO1xuXG4gIC8vIEdldCBkYXRhIGZyb20gZGF0YWJhc2VcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAsIHIgSU4gT1VUQk9VTkQgXCIke2Zvcm1hdFNlc3Npb25JZH1cIiBoYXNSZWFjdGlvblxuICAgIExFVCByZWFjdGlvbnMgPSAoXG4gICAgICBGT1IgcmVhY3Rpb24sIGhyIElOIDEuLjEgSU5CT1VORCBwIGlzVGFnZ2VkXG4gICAgICBMRVQgbWF0Y2hlZCA9IExFTkdUSCgke2Zvcm1hdFJlYWN0aW9uc30pID4gMCAmJiBQT1NJVElPTigke2Zvcm1hdFJlYWN0aW9uc30sIHJlYWN0aW9uLm5hbWUpXG4gICAgICBTT1JUIHJlYWN0aW9uLm5hbWVcbiAgICAgIFJFVFVSTiBNRVJHRShyZWFjdGlvbiwge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0c0J5VGFncyA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdGFnczogc3RyaW5nW10gPSBbXSxcbiAgb3B0aW9ucz86IFBvc3RPcHRpb25zXG4pOiBQcm9taXNlPFBvc3RUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAnZ2V0UG9zdHNCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGF0aXR1ZGUsIGxpbWl0LCBsb25naXR1ZGUsIHR5cGV9ID0gcGFyc2VQb3N0T3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgZm9ybWF0VGFnTmFtZXM6IHN0cmluZyA9IEpTT04uc3RyaW5naWZ5KHRhZ3MubWFwKCh0YWcpID0+IHBhcnNlQ2hhcih0YWcsIDMyKS50b0xvd2VyQ2FzZSgpKSk7XG4gIGNvbnN0IHNvcnRCeTogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZmlsdGVyczogc3RyaW5nW10gPSBbYHAudHlwZSA9PSBcIiR7dHlwZX1cImAsICdwLnByaXZhY3kgPT0gXCJwdWJsaWNcIiddO1xuICBjb25zdCBmb3JtYXRMYXRpdHVkZTogbnVtYmVyID0gcGFyc2VOdW0obGF0aXR1ZGUpO1xuICBjb25zdCBmb3JtYXRMb25naXR1ZGU6IG51bWJlciA9IHBhcnNlTnVtKGxvbmdpdHVkZSk7XG5cbiAgaWYoZm9ybWF0TGF0aXR1ZGUgJiYgZm9ybWF0TG9uZ2l0dWRlKSB7XG4gICAgc2VsZWN0UXVlcmllcy5wdXNoKGBMRVQgZGlzdGFuY2UgPSBESVNUQU5DRShcbiAgICAgICR7Zm9ybWF0TGF0aXR1ZGV9LFxuICAgICAgJHtmb3JtYXRMb25naXR1ZGV9LFxuICAgICAgTk9UX05VTEwocC5sYXRpdHVkZSwgMCksXG4gICAgICBOT1RfTlVMTChwLmxvbmdpdHVkZSwgMCkpXG4gICAgYCk7XG4gICAgc2VsZWN0T2JqZWN0cy5wdXNoKCdkaXN0YW5jZTpkaXN0YW5jZScpO1xuICAgIHNvcnRCeS5wdXNoKCdkaXN0YW5jZScpO1xuICB9XG5cbiAgaWYodGFncy5sZW5ndGgpIHtcbiAgICBzb3J0QnkucHVzaCgnbWF0Y2hlZFRhZ3MgREVTQycpO1xuICAgIHNlbGVjdFF1ZXJpZXMucHVzaChgTEVUIG1hdGNoZWRUYWdzID0gTEVOR1RIKFxuICAgICAgRk9SIHQgSU4gdGFnc1xuICAgICAgRklMVEVSIHQubWF0Y2hlZCA9PSB0cnVlXG4gICAgICBSRVRVUk4gdFxuICAgIClgKTtcbiAgICBzZWxlY3RPYmplY3RzLnB1c2goJ21hdGNoZWRUYWdzOm1hdGNoZWRUYWdzJyk7XG4gICAgZmlsdGVycy5wdXNoKCdtYXRjaGVkVGFncyA+IDAnKTtcbiAgfVxuXG4gIHNvcnRCeS5wdXNoKCdwLmFkZGVkIERFU0MnKTtcbiAgc2VsZWN0T2JqZWN0cy5wdXNoKCd0YWdzOnRhZ3MnKTtcblxuICBjb25zdCBhcWxRcnk6IHN0cmluZyA9IGBGT1IgcCBJTiBwb3N0c1xuICAgIExFVCB0YWdzID0gKFxuICAgICAgRk9SIHRhZywgaXQgSU4gMS4uMSBJTkJPVU5EIHAgaXNUYWdnZWRcbiAgICAgIExFVCBtYXRjaGVkID0gTEVOR1RIKCR7Zm9ybWF0VGFnTmFtZXN9KSA+IDAgJiYgUE9TSVRJT04oJHtmb3JtYXRUYWdOYW1lc30sIHRhZy5uYW1lKVxuICAgICAgU09SVCB0YWcubmFtZVxuICAgICAgUkVUVVJOIE1FUkdFKHRhZywge21hdGNoZWQ6bWF0Y2hlZH0pXG4gICAgKVxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICBGSUxURVIgJHtmaWx0ZXJzLmpvaW4oJyAmJiAnKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUICR7c29ydEJ5LmpvaW4oJywgJyl9XG4gICAgUkVUVVJOIERJU1RJTkNUIE1FUkdFKHAsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSBhcyB1bmtub3duIGFzIFBvc3RUeXBlW10pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgbGFiZWw6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgICAgcmV0dXJuIFtdIGFzIFBvc3RUeXBlW107XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UG9zdHNCeVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcklkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0c0J5VXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtsaW1pdCwgdHlwZX0gPSBwYXJzZVBvc3RPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQ6IHN0cmluZyA9IHBhcnNlSWQodXNlcklkKTtcbiAgY29uc3Qge29iamVjdHM6IHNlbGVjdE9iamVjdHMsIHF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXN9ID0gZ2V0UG9zdE9wdGlvbmFsKGZpZWxkcywgc2Vzc2lvbklkKTtcbiAgY29uc3QgYXFsUXJ5OiBzdHJpbmcgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICBGSUxURVIgcC51c2VySWQgPT0gXCIke2Zvcm1hdFVzZXJJZH1cIiAmJiBwLnR5cGUgPT0gXCIke3R5cGV9XCIgJiYgcC5wcml2YWN5ID09IFwicHVibGljXCIgJiYgcC5wYXJlbnQgPT0gbnVsbFxuICAgICR7c2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKX1cbiAgICAke2xpbWl0LmFxbH1cbiAgICBTT1JUIHAuYWRkZWRcbiAgICBSRVRVUk4gRElTVElOQ1QgTUVSR0UocCwgeyR7c2VsZWN0T2JqZWN0cy5qb2luKCcsICcpfX0pYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLmFsbCgpIGFzIHVua25vd24gYXMgUG9zdFR5cGVbXSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRQb3N0Q29tbWVudHMgPSAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdElkOiBzdHJpbmcsIG9wdGlvbnM/OiBQb3N0T3B0aW9ucyk6IFByb21pc2U8UG9zdFR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdnZXRQb3N0Q29tbWVudHMnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3Qge2xpbWl0LCB0eXBlfSA9IHBhcnNlUG9zdE9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IGZvcm1hdEl0ZW1JZDogc3RyaW5nID0gcGFyc2VJZChwb3N0SWQpO1xuXG4gIC8vIEdldCB0aGUgcGFyZW50IHBvc3QgdG8gZ2V0IHJlc3RyaWN0aW9uc1xuICBjb25zdCBhcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiBwIElOIHBvc3RzXG4gICAgRklMVEVSIHAudHlwZSA9PSAke3R5cGV9ICYmIHAuX2tleSA9PSAke2Zvcm1hdEl0ZW1JZH1cbiAgICBMSU1JVCAxXG4gICAgUkVUVVJOIHBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKChwb3N0OiBQb3N0VHlwZSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBfa2V5LFxuICAgICAgICBncm91cElkLFxuICAgICAgICBwcml2YWN5ID0gJ2RlZmF1bHQnXG4gICAgICB9OiBQb3N0VHlwZSA9IHBvc3Q7XG5cbiAgICAgIC8vIFF1ZXJ5IGJhc2VkIG9uIHByaXZhY3kgbGV2ZWxcbiAgICAgIGxldCBwcml2YWN5QXFsUXJ5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmKGdyb3VwSWQgJiYgcHJpdmFjeSA9PT0gJ2dyb3VwJykge1xuICAgICAgICBwcml2YWN5QXFsUXJ5ID0gYEZPUiBwIElOIHBvc3RzXG4gICAgICAgICAgRk9SIHVzZXIgSU4gdXNlcnNcbiAgICAgICAgICBGSUxURVIgcC5wYXJlbnQgPT0gXCIke19rZXl9XCIgJiYgdXNlci5fa2V5ID09IHAudXNlcklkXG4gICAgICAgICAgTEVUIHJlYWN0aW9ucyA9IChcbiAgICAgICAgICAgIEZPUiBwb3N0LCByIElOIElOQk9VTkQgcC5faWQgcmVhY3Rpb25zXG4gICAgICAgICAgICBDT0xMRUNUIHJlYWN0aW9uTmFtZSA9IHIudmFsdWUgSU5UTyByZWFjdGlvbkl0ZW1zXG4gICAgICAgICAgICBSRVRVUk4ge25hbWU6IHJlYWN0aW9uTmFtZSwgY291bnQ6IExFTkdUSChyZWFjdGlvbkl0ZW1zWypdLnIudmFsdWUpfVxuICAgICAgICAgIClcbiAgICAgICAgICBGT1IgZ3JvdXAgSU4gZ3JvdXBzXG4gICAgICAgICAgRklMVEVSIGdyb3VwLl9rZXkgPT0gcC5ncm91cElkXG4gICAgICAgICAgRk9SIHUsIGUgSU4gT1VUQk9VTkQgZ3JvdXAuX2lkIGhhc0Nvbm5lY3Rpb25cbiAgICAgICAgICBGSUxURVIgdS5fa2V5ID09IFwiJHtzZXNzaW9uSWR9XCJcbiAgICAgICAgICBTT1JUIHAuYWRkZWRcbiAgICAgICAgICAke2xpbWl0LmFxbH1cbiAgICAgICAgICBSRVRVUk4gTUVSR0UocCwge3VzZXI6IHVzZXIsIHJlYWN0aW9uczogcmVhY3Rpb25zfSlgO1xuICAgICAgfSBlbHNlIGlmKHByaXZhY3kgPT09ICdwdWJsaWMnKSB7XG4gICAgICAgIHByaXZhY3lBcWxRcnkgPSBgRk9SIHAgSU4gcG9zdHNcbiAgICAgICAgICBGT1IgdXNlciBJTiB1c2Vyc1xuICAgICAgICAgIEZJTFRFUiBwLnBhcmVudCA9PSBcIiR7X2tleX1cIiAmJiB1c2VyLl9rZXkgPT0gcC51c2VySWRcbiAgICAgICAgICBMRVQgcmVhY3Rpb25zID0gKFxuICAgICAgICAgICAgRk9SIHBvc3QsIHIgSU4gSU5CT1VORCBwLl9pZCByZWFjdGlvbnNcbiAgICAgICAgICAgIENPTExFQ1QgcmVhY3Rpb25OYW1lID0gci52YWx1ZSBJTlRPIHJlYWN0aW9uSXRlbXNcbiAgICAgICAgICAgIFJFVFVSTiB7bmFtZTogcmVhY3Rpb25OYW1lLCBjb3VudDogTEVOR1RIKHJlYWN0aW9uSXRlbXNbKl0uci52YWx1ZSl9XG4gICAgICAgICAgKVxuICAgICAgICAgIFNPUlQgcC5hZGRlZFxuICAgICAgICAgICR7bGltaXQuYXFsfVxuICAgICAgICAgIFJFVFVSTiBNRVJHRShwLCB7dXNlcjogdXNlciwgcmVhY3Rpb25zOiByZWFjdGlvbnN9KWA7XG4gICAgICB9XG5cbiAgICAgIGlmKHByaXZhY3lBcWxRcnkpIHtcbiAgICAgICAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkocHJpdmFjeUFxbFFyeSlcbiAgICAgICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkgYXMgdW5rbm93biBhcyBQb3N0VHlwZVtdKVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW10gYXMgUG9zdFR5cGVbXTtcbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIGxhYmVsOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBQb3N0VHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFBvc3QgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtcbiAgICBjb250ZW50ID0gJycsXG4gICAgZW5kRGF0ZSxcbiAgICBncm91cElkID0gJycsXG4gICAgbG9jYXRpb24sXG4gICAgbGF0aXR1ZGUsXG4gICAgbG9uZ2l0dWRlLFxuICAgIG5hbWUgPSAnJyxcbiAgICBwYXJlbnRJZCA9ICcnLFxuICAgIHByaXZhY3kgPSAncHVibGljJyxcbiAgICB0YWdzID0gW10sXG4gICAgc3RhcnREYXRlLFxuICAgIHR5cGUgPSAnZGVmYXVsdCdcbiAgfTogUG9zdElucHV0VHlwZVxuKTogUHJvbWlzZTxQb3N0VHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb246IHN0cmluZyA9ICdhZGRQb3N0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkfSA9IHt9fSA9IGNvbnRleHQ7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGNvbnN0IHBvc3RJZCA9IGNyZWF0ZUhhc2goYHBvc3QtJHtzZXNzaW9uSWR9YCk7XG4gIGNvbnN0IGluc2VydDogUG9zdFR5cGUgPSB7XG4gICAgX2lkOiBgcG9zdHMvJHtwb3N0SWR9YCxcbiAgICBfa2V5OiBwb3N0SWQsXG4gICAgYWRkZWQ6IG5vdyxcbiAgICBjb250ZW50OiBwYXJzZVN0cmluZyhjb250ZW50LCBNQVhfQ09OVEVOVF9MRU5HVEgpIHx8ICcnLFxuICAgIGVuZERhdGU6IGVuZERhdGUgPyBwYXJzZU51bShlbmREYXRlLCAxMykgOiB1bmRlZmluZWQsXG4gICAgZ3JvdXBJZDogZ3JvdXBJZCA/IHBhcnNlSWQoZ3JvdXBJZCkgOiB1bmRlZmluZWQsXG4gICAgbGF0aXR1ZGU6IGxhdGl0dWRlICE9PSB1bmRlZmluZWQgPyBwYXJzZU51bShsYXRpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbG9jYXRpb246IGxvY2F0aW9uID8gcGFyc2VTdHJpbmcobG9jYXRpb24sIDE2MCkgOiB1bmRlZmluZWQsXG4gICAgbG9uZ2l0dWRlOiBsb25naXR1ZGUgIT09IHVuZGVmaW5lZCA/IHBhcnNlTnVtKGxvbmdpdHVkZSkgOiB1bmRlZmluZWQsXG4gICAgbW9kaWZpZWQ6IG5vdyxcbiAgICBuYW1lOiBwYXJzZVN0cmluZyhuYW1lLCAxNjApLFxuICAgIHBhcmVudElkOiBwYXJlbnRJZCA/IHBhcnNlSWQocGFyZW50SWQpIDogdW5kZWZpbmVkLFxuICAgIHByaXZhY3k6IHBhcnNlVmFyQ2hhcihwcml2YWN5LCAxNiksXG4gICAgc3RhcnREYXRlOiBzdGFydERhdGUgPyBwYXJzZU51bShzdGFydERhdGUsIDEzKSA6IHVuZGVmaW5lZCxcbiAgICB0eXBlOiBwYXJzZUNoYXIodHlwZSwgMzIpLFxuICAgIHVzZXJJZDogc2Vzc2lvbklkXG4gIH07XG4gIGNvbnN0IGFxbFFyeTogQXFsUXVlcnkgPSBhcWxgSU5TRVJUICR7aW5zZXJ0fSBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHNhdmVkUG9zdDogUG9zdFR5cGUgPSBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFFyeSlcbiAgICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpXG4gICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICBsYWJlbDogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbiAgICBjb25zdCB7X2lkOiBwb3N0RG9jSWR9ID0gc2F2ZWRQb3N0O1xuICAgIGNvbnN0IGNvbnRlbnRUYWdOYW1lcyA9IGF3YWl0IGV4dHJhY3RUYWdzKGluc2VydC5jb250ZW50IHx8ICcnKTtcblxuICAgIGlmKHRhZ3MubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHVzZXJUYWdzID0gKGF3YWl0IGdldFRhZ3NCeU5hbWUoY29udGV4dCwgdGFncy5tYXAoKHtuYW1lfSkgPT4gbmFtZSB8fCAnJykpKVxuICAgICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogc2Vzc2lvbklkfSkpO1xuICAgICAgY29uc3QgY29udGVudFRhZ3MgPSAoYXdhaXQgZ2V0VGFnc0J5TmFtZShjb250ZXh0LCBjb250ZW50VGFnTmFtZXMgfHwgW10pKVxuICAgICAgICAubWFwKCh0YWcpID0+ICh7Li4udGFnLCB0YWdCeTogJ2V4dHJhY3QnfSkpO1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3M6IFRhZ1R5cGVbXSA9IGF3YWl0IHVwZGF0ZVRhZ3NJbkl0ZW0oXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIHtcbiAgICAgICAgICBpdGVtRG9jSWQ6IHBvc3REb2NJZCxcbiAgICAgICAgICB0YWdzOiBbLi4uY29udGVudFRhZ3MsIC4uLnVzZXJUYWdzXVxuICAgICAgICB9XG4gICAgICApO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5zYXZlZFBvc3QsXG4gICAgICAgIHRhZ3M6IHVwZGF0ZWRUYWdzXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBzYXZlZFBvc3Q7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdDogUG9zdElucHV0VHlwZSk6IFByb21pc2U8UG9zdFR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uOiBzdHJpbmcgPSAndXBkYXRlUG9zdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBub3c6IG51bWJlciA9IERhdGUubm93KCk7XG4gIGNvbnN0IHBhcnNlZFBvc3QgPSBwYXJzZVBvc3QocG9zdCk7XG4gIGNvbnN0IHtcbiAgICBwb3N0SWQsXG4gICAgdGFncyA9IFtdXG4gIH0gPSBwYXJzZWRQb3N0O1xuXG4gIGNvbnN0IHVwZGF0ZTogUG9zdFR5cGUgPSB7XG4gICAgLi4ucGFyc2VkUG9zdCxcbiAgICBtb2RpZmllZDogbm93XG4gIH07XG5cbiAgaWYoIXBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydCA9IHtcbiAgICAuLi51cGRhdGUsXG4gICAgX2tleTogcG9zdElkLFxuICAgIGFkZGVkOiBub3csXG4gICAgdXNlcklkOiBzZXNzaW9uSWRcbiAgfTtcbiAgY29uc3QgYXFsUXJ5OiBBcWxRdWVyeSA9IGFxbGBVUFNFUlQge19rZXk6ICR7cG9zdElkfSwgdXNlcklkOiAke3Nlc3Npb25JZH19XG4gICAgSU5TRVJUICR7aW5zZXJ0fVxuICAgIFVQREFURSAke3VwZGF0ZX1cbiAgICBJTiBwb3N0cyBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGNvbnN0IHVwZGF0ZWRQb3N0OiBQb3N0VHlwZSA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSlcbiAgICAgIC5xdWVyeShhcWxRcnkpXG4gICAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCB7fSkpO1xuICAgIGNvbnN0IHtfaWQ6IHVwZGF0ZWRQb3N0SWR9ID0gdXBkYXRlZFBvc3Q7XG4gICAgY29uc3QgY29udGVudFRhZ05hbWVzID0gYXdhaXQgZXh0cmFjdFRhZ3MoaW5zZXJ0LmNvbnRlbnQgfHwgJycpO1xuXG4gICAgaWYodGFncz8ubGVuZ3RoIHx8IGNvbnRlbnRUYWdOYW1lcz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB1c2VyVGFncyA9IHRhZ3M/Lmxlbmd0aCA/IChhd2FpdCBnZXRUYWdzQnlOYW1lKGNvbnRleHQsIHRhZ3MubWFwKCh7bmFtZX0pID0+IG5hbWUgfHwgJycpKSlcbiAgICAgICAgLm1hcCgodGFnKSA9PiAoey4uLnRhZywgdGFnQnk6IHNlc3Npb25JZH0pKSA6IFtdO1xuICAgICAgY29uc3QgY29udGVudFRhZ3MgPSBjb250ZW50VGFnTmFtZXM/Lmxlbmd0aCA/IChhd2FpdCBnZXRUYWdzQnlOYW1lKGNvbnRleHQsIGNvbnRlbnRUYWdOYW1lcyB8fCBbXSkpXG4gICAgICAgIC5tYXAoKHRhZykgPT4gKHsuLi50YWcsIHRhZ0J5OiAnZXh0cmFjdCd9KSkgOiBbXTtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzOiBUYWdUeXBlW10gPSBhd2FpdCB1cGRhdGVUYWdzSW5JdGVtKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICB7XG4gICAgICAgICAgaXRlbURvY0lkOiB1cGRhdGVkUG9zdElkLFxuICAgICAgICAgIHRhZ3M6IFsuLi5jb250ZW50VGFncywgLi4udXNlclRhZ3NdXG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnVwZGF0ZWRQb3N0LFxuICAgICAgICB0YWdzOiB1cGRhdGVkVGFnc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZFBvc3Q7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVBvc3QgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgcG9zdERvY0lkOiBzdHJpbmcpOiBQcm9taXNlPFBvc3RUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbjogc3RyaW5nID0gJ2RlbGV0ZVBvc3QnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UG9zdElkOiBzdHJpbmcgPSBwYXJzZUFyYW5nb0lkKHBvc3REb2NJZCk7XG5cbiAgaWYoIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfSURcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IGVkZ2VBcWxRcnk6IEFxbFF1ZXJ5ID0gYXFsYEZPUiB0IElOIGlzVGFnZ2VkXG4gIEZJTFRFUiB0Ll90byA9PSAke2Zvcm1hdFBvc3RJZH1cbiAgUkVNT1ZFIHQgSU4gaXNUYWdnZWRgO1xuXG4gIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoZWRnZUFxbFFyeSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG5cbiAgY29uc3QgZmlsZUFxbFFyeTogQXFsUXVlcnkgPSBhcWxgRk9SIGYgSU4gaGFzRmlsZVxuICAgIEZJTFRFUiBmLl90byA9PSAke2Zvcm1hdFBvc3RJZH1cbiAgICBSRU1PVkUgZiBJTiBoYXNGaWxlYDtcblxuICBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGZpbGVBcWxRcnkpXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuXG4gIGNvbnN0IGFxbFFyeSA9IGFxbGBGT1IgcCBJTiBwb3N0c1xuICAgICAgRklMVEVSIHAuX2lkID09ICR7Zm9ybWF0UG9zdElkfSAmJiBwLnVzZXJJZCA9PSAke3Nlc3Npb25JZH1cbiAgICAgIExJTUlUIDFcbiAgICAgIFJFTU9WRSBwIElOIHBvc3RzXG4gICAgICBSRVRVUk4gT0xEYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlUG9zdEVkZ2UgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHBvc3REb2NJZDogc3RyaW5nLFxuICBpdGVtRG9jSWQ6IHN0cmluZyxcbiAgZWRnZVR5cGU6IHN0cmluZyA9ICdpc1Bvc3RlZCcsXG4gIHByb3BzID0ge31cbik6IFByb21pc2U8RmlsZVR5cGU+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NyZWF0ZVBvc3RFZGdlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBlZGdlQ29sbGVjdGlvbjogRWRnZUNvbGxlY3Rpb24gPSB1c2VEYihkYXRhYmFzZU5hbWUpLmNvbGxlY3Rpb24oZWRnZVR5cGUpO1xuICBjb25zdCBmb3JtYXRQb3N0SWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQocG9zdERvY0lkKTtcbiAgY29uc3QgZm9ybWF0RG9jSWQ6IHN0cmluZyA9IHBhcnNlQXJhbmdvSWQoaXRlbURvY0lkKTtcblxuICBpZighZm9ybWF0RG9jSWQgfHwgIWZvcm1hdFBvc3RJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihFcnJvclR5cGVzLklOVkFMSURfSUQpO1xuICB9XG5cbiAgY29uc3QgZWRnZUlkOiBzdHJpbmcgPSBjcmVhdGVIYXNoKGBwb3N0RWRnZS0ke2Zvcm1hdFBvc3RJZH0tJHtmb3JtYXREb2NJZH1gKTtcbiAgY29uc3QgZWRnZSA9IHtcbiAgICBfZnJvbTogZm9ybWF0UG9zdElkLFxuICAgIF9rZXk6IGVkZ2VJZCxcbiAgICBfdG86IGZvcm1hdERvY0lkLFxuICAgIGFkZGVkOiBEYXRlLm5vdygpLFxuICAgIC4uLnByb3BzXG4gIH07XG5cbiAgcmV0dXJuIGVkZ2VDb2xsZWN0aW9uLnNhdmUoZWRnZSwge3JldHVybk5ldzogdHJ1ZX0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJQSxPQUFTLFlBQUFBLE1BQWdCLCtCQUN6QixPQUNJLGNBQUFDLEVBQVksaUJBQUFDLEVBQWUsYUFBQUMsRUFBVyxXQUFBQyxFQUFTLGVBQUFDLEVBQWEsZ0JBQUFDLE1BQ3pELCtCQUNQLE9BQVMsT0FBQUMsTUFBVyxXQUdwQixPQUFTLGFBQUFDLE1BQWlCLDZCQUMxQixPQUFTLGNBQUFDLE1BQWtCLDBCQUMzQixPQUFTLFlBQUFDLEVBQVUsZ0JBQUFDLE1BQW9CLDZCQUN2QyxPQUFTLFlBQUFDLEVBQVUsU0FBQUMsTUFBYSw0QkFDaEMsT0FBUyxlQUFBQyxFQUFhLGlCQUFBQyxFQUFlLG9CQUFBQyxNQUF3QixZQVM3RCxNQUFNQyxFQUE2QixJQUM3QkMsRUFBd0IsUUFFakJDLEVBQW1CLENBQUNDLEVBQXVCLENBQUMsSUFBTSxDQUM3RCxLQUFNLENBQ0osS0FBQUMsRUFBTyxFQUNQLFNBQUFDLEVBQVcsRUFDWCxVQUFBQyxFQUFZLEVBQ1osR0FBQUMsRUFBSyxHQUNMLEtBQUFDLEVBQU8sTUFDVCxFQUFJTCxFQUVKLE1BQU8sQ0FDTCxTQUFVcEIsRUFBU3NCLEVBQVUsRUFBRSxFQUMvQixNQUFPVixFQUFTUyxFQUFNRyxDQUFFLEVBQ3hCLFVBQVd4QixFQUFTdUIsRUFBVyxFQUFFLEVBQ2pDLEtBQU1wQixFQUFVc0IsRUFBTSxFQUFFLENBQzFCLENBQ0YsRUFFYUMsRUFBa0IsQ0FBQ0MsRUFBbUIsQ0FBQyxFQUFHQyxFQUFvQixNQUN4RUQsR0FBVSxDQUFDLEdBQUcsT0FBTyxDQUFDRSxFQUFpREMsSUFBa0IsQ0FDeEYsT0FBT0EsRUFBTyxDQUNaLElBQUssVUFDSCxPQUFBRCxFQUFRLFFBQVEsS0FBSztBQUFBO0FBQUEsOEVBRWlERCxDQUFTO0FBQUE7QUFBQTtBQUFBLFdBRzVFLEVBQ0hD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QixFQUNBLFNBQVVoQixFQUNWLE1BQU9ULEVBQVcsY0FDcEIsRUFBR3VDLEVBQU9oQixDQUFPLENBQ25CLENBQUMsQ0FDTCIsCiAgIm5hbWVzIjogWyJwYXJzZU51bSIsICJjcmVhdGVIYXNoIiwgInBhcnNlQXJhbmdvSWQiLCAicGFyc2VDaGFyIiwgInBhcnNlSWQiLCAicGFyc2VTdHJpbmciLCAicGFyc2VWYXJDaGFyIiwgImFxbCIsICJwYXJzZVBvc3QiLCAiRXJyb3JUeXBlcyIsICJsb2dFcnJvciIsICJsb2dFeGNlcHRpb24iLCAiZ2V0TGltaXQiLCAidXNlRGIiLCAiZXh0cmFjdFRhZ3MiLCAiZ2V0VGFnc0J5TmFtZSIsICJ1cGRhdGVUYWdzSW5JdGVtIiwgIk1BWF9DT05URU5UX0xFTkdUSCIsICJldmVudENhdGVnb3J5IiwgInBhcnNlUG9zdE9wdGlvbnMiLCAib3B0aW9ucyIsICJmcm9tIiwgImxhdGl0dWRlIiwgImxvbmdpdHVkZSIsICJ0byIsICJ0eXBlIiwgImdldFBvc3RPcHRpb25hbCIsICJmaWVsZHMiLCAic2Vzc2lvbklkIiwgInNlbGVjdHMiLCAiZmllbGQiLCAiZ2V0UG9zdCIsICJjb250ZXh0IiwgInBvc3RJZCIsICJhY3Rpb24iLCAiZGF0YWJhc2VOYW1lIiwgImZvcm1hdEl0ZW1JZCIsICJkYXRhYmFzZSIsICJzZWxlY3RPYmplY3RzIiwgInNlbGVjdFF1ZXJpZXMiLCAiYXFsUXJ5IiwgImN1cnNvciIsICJwb3N0IiwgInBvc3REb2NJZCIsICJ1c2VySWQiLCAiZ3JvdXBJZCIsICJwcml2YWN5IiwgInByaXZhY3lBcWxRcnkiLCAiZXJyb3IiLCAiZ2V0UG9zdHNCeUFyZWEiLCAibGltaXQiLCAiZm9ybWF0TGF0aXR1ZGUiLCAiZm9ybWF0TG9uZ2l0dWRlIiwgImdldFBvc3RzQnlMYXRlc3QiLCAiZ2V0UG9zdHNCeVJlYWN0aW9ucyIsICJyZWFjdGlvbnMiLCAiZm9ybWF0U2Vzc2lvbklkIiwgImZvcm1hdFJlYWN0aW9ucyIsICJyZWFjdGlvbiIsICJzb3J0QnkiLCAiZmlsdGVycyIsICJnZXRQb3N0c0J5VGFncyIsICJ0YWdzIiwgImZvcm1hdFRhZ05hbWVzIiwgInRhZyIsICJnZXRQb3N0c0J5VXNlciIsICJmb3JtYXRVc2VySWQiLCAiZ2V0UG9zdENvbW1lbnRzIiwgIl9rZXkiLCAiYWRkUG9zdCIsICJjb250ZW50IiwgImVuZERhdGUiLCAibG9jYXRpb24iLCAibmFtZSIsICJwYXJlbnRJZCIsICJzdGFydERhdGUiLCAibm93IiwgImluc2VydCIsICJzYXZlZFBvc3QiLCAiY29udGVudFRhZ05hbWVzIiwgInVzZXJUYWdzIiwgImNvbnRlbnRUYWdzIiwgInVwZGF0ZWRUYWdzIiwgInVwZGF0ZVBvc3QiLCAicGFyc2VkUG9zdCIsICJ1cGRhdGUiLCAidXBkYXRlZFBvc3QiLCAidXBkYXRlZFBvc3RJZCIsICJkZWxldGVQb3N0IiwgImZvcm1hdFBvc3RJZCIsICJlZGdlQXFsUXJ5IiwgImZpbGVBcWxRcnkiLCAiY3JlYXRlUG9zdEVkZ2UiLCAiaXRlbURvY0lkIiwgImVkZ2VUeXBlIiwgInByb3BzIiwgImVkZ2VDb2xsZWN0aW9uIiwgImZvcm1hdERvY0lkIiwgImVkZ2VJZCIsICJlZGdlIl0KfQo=
|