@burgan-tech/morph-touch-runtime 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/burgan-tech-morph-touch-runtime-0.0.2.tgz +0 -0
- package/package.json +21 -0
- package/touch/Extensions/.gitkeep +0 -0
- package/touch/Functions/.gitkeep +0 -0
- package/touch/Functions/check-livekit-room-access.1.0.0.json +28 -0
- package/touch/Functions/check-livekit-room-access.http +44 -0
- package/touch/Functions/get-absence-entry.1.0.0.json +28 -0
- package/touch/Functions/get-advisor-stats.1.0.0.json +27 -0
- package/touch/Functions/get-available-slots.1.0.0.json +30 -0
- package/touch/Functions/get-available-slots.http +29 -0
- package/touch/Functions/get-chat-rooms.1.0.0.json +28 -0
- package/touch/Functions/get-chat-rooms.http +62 -0
- package/touch/Functions/get-customer-info.1.0.0.json +27 -0
- package/touch/Functions/get-matrix-sync.1.0.0.json +28 -0
- package/touch/Functions/get-rezervations.1.0.0.json +26 -0
- package/touch/Functions/get-rezervations.http +59 -0
- package/touch/Functions/get-room-messages.1.0.0.json +29 -0
- package/touch/Functions/get-room-messages.http +45 -0
- package/touch/Functions/rezervation-transfer.http +118 -0
- package/touch/Functions/send-room-message.1.0.0.json +29 -0
- package/touch/Functions/src/CheckLivekitRoomAccessMapping.csx +238 -0
- package/touch/Functions/src/GetAbsenceEntryMapping.csx +225 -0
- package/touch/Functions/src/GetAdvisorStatsMapping.csx +190 -0
- package/touch/Functions/src/GetAvailableSlotsMapping.csx +468 -0
- package/touch/Functions/src/GetChatRoomsMapping.csx +202 -0
- package/touch/Functions/src/GetCustomerInfoMapping.csx +140 -0
- package/touch/Functions/src/GetMatrixSyncMapping.csx +197 -0
- package/touch/Functions/src/GetRezervationsMapping.csx +162 -0
- package/touch/Functions/src/GetRoomMessagesMapping.csx +165 -0
- package/touch/Functions/src/SendCancelNotificationMapping.csx +63 -0
- package/touch/Functions/src/SendRoomMessageMapping.csx +131 -0
- package/touch/Schemas/.gitkeep +0 -0
- package/touch/Schemas/absence-entry.1.0.0.json +232 -0
- package/touch/Schemas/advisor-chat-rooms.1.0.0.json +62 -0
- package/touch/Schemas/chat-room.1.0.0.json +110 -0
- package/touch/Schemas/notification-sender.1.0.0.json +159 -0
- package/touch/Schemas/portfolio-manager.1.0.0.json +63 -0
- package/touch/Schemas/rezervation.1.0.0.json +102 -0
- package/touch/Tasks/.gitkeep +0 -0
- package/touch/Tasks/cancel-absence-entry-for-rezervation.1.0.0.json +21 -0
- package/touch/Tasks/check-already-completed-chat-room.1.0.0.json +24 -0
- package/touch/Tasks/check-duplicate-portfolio-manager.1.0.0.json +23 -0
- package/touch/Tasks/check-duplicate-rezervation.1.0.0.json +23 -0
- package/touch/Tasks/check-existing-permanent-chat-room.1.0.0.json +21 -0
- package/touch/Tasks/check-randevu-time.1.0.0.json +17 -0
- package/touch/Tasks/create-permanent-chat-room.1.0.0.json +28 -0
- package/touch/Tasks/determine-transfer-type.1.0.0.json +16 -0
- package/touch/Tasks/enrich-rezervations-for-transfer.1.0.0.json +23 -0
- package/touch/Tasks/execute-permanent-chatroom-update.1.0.0.json +21 -0
- package/touch/Tasks/execute-rez-chatroom-transfer.1.0.0.json +21 -0
- package/touch/Tasks/execute-rezervation-transfer.1.0.0.json +19 -0
- package/touch/Tasks/fetch-absence-entries-for-transfer.1.0.0.json +23 -0
- package/touch/Tasks/fetch-advisors-for-transfer.1.0.0.json +23 -0
- package/touch/Tasks/fetch-permanent-chatrooms-for-transfer.1.0.0.json +23 -0
- package/touch/Tasks/fetch-rez-chatrooms-for-transfer.1.0.0.json +23 -0
- package/touch/Tasks/fetch-rezervations-for-transfer.1.0.0.json +22 -0
- package/touch/Tasks/get-absence-entry-task.1.0.0.json +23 -0
- package/touch/Tasks/get-available-slots-http.1.0.0.json +27 -0
- package/touch/Tasks/get-available-slots.1.0.0.json +24 -0
- package/touch/Tasks/get-chat-room-data-for-rezervation.1.0.0.json +23 -0
- package/touch/Tasks/get-chat-token.1.0.0.json +27 -0
- package/touch/Tasks/get-matrix-room-messages.1.0.0.json +25 -0
- package/touch/Tasks/get-matrix-sync.1.0.0.json +25 -0
- package/touch/Tasks/get-rezervation-data-task.1.0.0.json +22 -0
- package/touch/Tasks/get-rezervation-state-task.1.0.0.json +22 -0
- package/touch/Tasks/get-rezervations-task.1.0.0.json +21 -0
- package/touch/Tasks/get-user-info-for-rezervation.1.0.0.json +24 -0
- package/touch/Tasks/get-video-call-url.1.0.0.json +17 -0
- package/touch/Tasks/invite-user-to-rezervation-room.1.0.0.json +27 -0
- package/touch/Tasks/join-chat-room-for-rezervation.1.0.0.json +28 -0
- package/touch/Tasks/join-matrix-room.1.0.0.json +27 -0
- package/touch/Tasks/join-user-to-room.1.0.0.json +27 -0
- package/touch/Tasks/merge-invited-user.1.0.0.json +17 -0
- package/touch/Tasks/merge-rezervation-update.1.0.0.json +16 -0
- package/touch/Tasks/merge-target-advisor-for-transfer.1.0.0.json +17 -0
- package/touch/Tasks/merge-update-body-for-randevu-update.1.0.0.json +16 -0
- package/touch/Tasks/merge-video-call-urls.1.0.0.json +17 -0
- package/touch/Tasks/query-chat-room-instances.1.0.0.json +23 -0
- package/touch/Tasks/remove-member-from-room.1.0.0.json +28 -0
- package/touch/Tasks/send-matrix-room-message.1.0.0.json +26 -0
- package/touch/Tasks/send-push-notification.1.0.0.json +26 -0
- package/touch/Tasks/send-sms-notification.1.0.0.json +26 -0
- package/touch/Tasks/set-chat-room-status-active.1.0.0.json +16 -0
- package/touch/Tasks/set-chat-room-status-deactive.1.0.0.json +16 -0
- package/touch/Tasks/set-previous-advisor.1.0.0.json +16 -0
- package/touch/Tasks/set-user-from-headers-for-rezervation.1.0.0.json +17 -0
- package/touch/Tasks/start-absence-entry-for-rezervation.1.0.0.json +21 -0
- package/touch/Tasks/start-chat-room-for-rezervation.1.0.0.json +20 -0
- package/touch/Tasks/start-notification-sender.1.0.0.json +20 -0
- package/touch/Tasks/start-permanent-chat-room.1.0.0.json +21 -0
- package/touch/Tasks/start-transfer-from-absence-entry.1.0.0.json +19 -0
- package/touch/Tasks/start-video-call.1.0.0.json +22 -0
- package/touch/Tasks/trigger-chat-room-deactivate.1.0.0.json +21 -0
- package/touch/Tasks/trigger-chat-room-transfer.1.0.0.json +21 -0
- package/touch/Tasks/trigger-chat-room-update.1.0.0.json +20 -0
- package/touch/Tasks/trigger-rezervation-add-invited-participant.1.0.0.json +20 -0
- package/touch/Tasks/trigger-rezervation-apply-update.1.0.0.json +20 -0
- package/touch/Tasks/trigger-rezervation-to-in-meet.1.0.0.json +20 -0
- package/touch/Tasks/trigger-rezervation-video-call-update.1.0.0.json +21 -0
- package/touch/Tasks/validate-date-for-rezervation.1.0.0.json +18 -0
- package/touch/Tasks/validate-slot-for-rezervation.1.0.0.json +24 -0
- package/touch/Tasks/validate-transfer-availability.1.0.0.json +23 -0
- package/touch/Views/.gitkeep +0 -0
- package/touch/Workflows/.gitkeep +0 -0
- package/touch/Workflows/absence-entry.http +458 -0
- package/touch/Workflows/absence-entry.json +179 -0
- package/touch/Workflows/add-participant-to-rezervation.http +47 -0
- package/touch/Workflows/add-participant-to-rezervation.json +340 -0
- package/touch/Workflows/chat-room.http +207 -0
- package/touch/Workflows/chat-room.json +452 -0
- package/touch/Workflows/investment-advisor.json +367 -0
- package/touch/Workflows/notification-sender.http +299 -0
- package/touch/Workflows/notification-sender.json +262 -0
- package/touch/Workflows/portfolio-manager.json +367 -0
- package/touch/Workflows/randevu-update.http +87 -0
- package/touch/Workflows/rezervation-start.json +467 -0
- package/touch/Workflows/rezervation-transfer.json +512 -0
- package/touch/Workflows/rezervation-update.http +87 -0
- package/touch/Workflows/rezervation-update.json +485 -0
- package/touch/Workflows/rezervation.http +214 -0
- package/touch/Workflows/rezervation.json +726 -0
- package/touch/Workflows/src/AllChatRoomsSuccessRule.csx +65 -0
- package/touch/Workflows/src/AlwaysTrueRule.csx +13 -0
- package/touch/Workflows/src/AnyChatRoomFailedRule.csx +64 -0
- package/touch/Workflows/src/AutoProcessRule.csx +38 -0
- package/touch/Workflows/src/BuildRezChatRoomPlanMapping.csx +160 -0
- package/touch/Workflows/src/CanStartRezervationTimerMapping.csx +48 -0
- package/touch/Workflows/src/CanStartTransferMapping.csx +14 -0
- package/touch/Workflows/src/CancelAbsenceEntryForRezervationMapping.csx +48 -0
- package/touch/Workflows/src/CancelAbsenceForRandevuUpdateMapping.csx +62 -0
- package/touch/Workflows/src/ChatRoomCreatedFailedRule.csx +54 -0
- package/touch/Workflows/src/ChatRoomCreatedSuccessRule.csx +54 -0
- package/touch/Workflows/src/ChatRoomRemoveMapping.csx +104 -0
- package/touch/Workflows/src/ChatRoomTransferInviteMapping.csx +109 -0
- package/touch/Workflows/src/ChatRoomTransferRemoveMapping.csx +71 -0
- package/touch/Workflows/src/ChatRoomUpdateMapping.csx +107 -0
- package/touch/Workflows/src/CheckAlreadyCompletedChatRoomMapping.csx +100 -0
- package/touch/Workflows/src/CheckDuplicatePortfolioManagerMapping.csx +119 -0
- package/touch/Workflows/src/CheckDuplicateRezervationMapping.csx +150 -0
- package/touch/Workflows/src/CheckExistingPermanentChatRoomMapping.csx +169 -0
- package/touch/Workflows/src/CheckRandevuTimeMapping.csx +67 -0
- package/touch/Workflows/src/CheckRezervationStateActiveOrInMeetRule.csx +14 -0
- package/touch/Workflows/src/CreateAbsenceEntryForRezervationMapping.csx +111 -0
- package/touch/Workflows/src/CreateAbsenceForRandevuUpdateMapping.csx +108 -0
- package/touch/Workflows/src/CreateChatRoomForRezervationMapping.csx +122 -0
- package/touch/Workflows/src/CreatePermanentChatRoomMapping.csx +140 -0
- package/touch/Workflows/src/CustomerControlToEndRule.csx +14 -0
- package/touch/Workflows/src/DetermineTransferTypeMapping.csx +92 -0
- package/touch/Workflows/src/EnrichRezervationsForTransferMapping.csx +495 -0
- package/touch/Workflows/src/ExecutePermanentChatRoomUpdateMapping.csx +124 -0
- package/touch/Workflows/src/ExecuteRezChatRoomTransferMapping.csx +95 -0
- package/touch/Workflows/src/ExecuteTransferMapping.csx +152 -0
- package/touch/Workflows/src/FetchAbsenceEntriesForTransferMapping.csx +116 -0
- package/touch/Workflows/src/FetchAdvisorsForTransferMapping.csx +145 -0
- package/touch/Workflows/src/FetchPermanentChatRoomsMapping.csx +128 -0
- package/touch/Workflows/src/FetchRezervationsForTransferMapping.csx +124 -0
- package/touch/Workflows/src/GetChatRoomDataForRezervationMapping.csx +100 -0
- package/touch/Workflows/src/GetChatTokenMapping.csx +85 -0
- package/touch/Workflows/src/GetRezervationDataForAddParticipantMapping.csx +105 -0
- package/touch/Workflows/src/GetRezervationDataForRandevuUpdateMapping.csx +110 -0
- package/touch/Workflows/src/GetRezervationDataMapping.csx +111 -0
- package/touch/Workflows/src/GetRezervationStateForRandevuUpdateMapping.csx +80 -0
- package/touch/Workflows/src/GetRezervationStateMapping.csx +92 -0
- package/touch/Workflows/src/GetUserInfoForRezervationMapping.csx +63 -0
- package/touch/Workflows/src/GetVideoCallUrlMapping.csx +62 -0
- package/touch/Workflows/src/HasChangedAdvisorRule.csx +28 -0
- package/touch/Workflows/src/HasChatIntegrationRule.csx +41 -0
- package/touch/Workflows/src/HasExistingPermanentRoomRule.csx +28 -0
- package/touch/Workflows/src/InviteAdvisorForRandevuUpdateMapping.csx +86 -0
- package/touch/Workflows/src/InviteNewAdvisorToRezervationRoomMapping.csx +78 -0
- package/touch/Workflows/src/InviteNewParticipantToRandevuRoomMapping.csx +88 -0
- package/touch/Workflows/src/InvitedUserMergeMapping.csx +77 -0
- package/touch/Workflows/src/InvitedUserNotAllowedRule.csx +71 -0
- package/touch/Workflows/src/InvitedUserNotInMeetRule.csx +19 -0
- package/touch/Workflows/src/IsNotfSentRule.csx +36 -0
- package/touch/Workflows/src/JoinChatRoomForAddParticipantMapping.csx +118 -0
- package/touch/Workflows/src/JoinChatRoomForRandevuStartMapping.csx +119 -0
- package/touch/Workflows/src/JoinChatRoomForRezervationMapping.csx +118 -0
- package/touch/Workflows/src/JoinMatrixRoomMapping.csx +100 -0
- package/touch/Workflows/src/JoinUserToRoomMapping.csx +118 -0
- package/touch/Workflows/src/LoginForAddParticipantChatMapping.csx +102 -0
- package/touch/Workflows/src/LoginForRandevuStartChatMapping.csx +96 -0
- package/touch/Workflows/src/MergeRezervationUpdateMapping.csx +82 -0
- package/touch/Workflows/src/MergeTargetAdvisorForTransferMapping.csx +79 -0
- package/touch/Workflows/src/MergeUpdateBodyForRandevuUpdateMapping.csx +91 -0
- package/touch/Workflows/src/NoExistingPermanentRoomRule.csx +23 -0
- package/touch/Workflows/src/NotificationCompleteAlwaysRule.csx +14 -0
- package/touch/Workflows/src/NotificationCompleteFromPendingRule.csx +41 -0
- package/touch/Workflows/src/NotificationCompleteFromSmsRule.csx +36 -0
- package/touch/Workflows/src/NotificationPushFromPendingRule.csx +42 -0
- package/touch/Workflows/src/NotificationPushFromSmsRule.csx +36 -0
- package/touch/Workflows/src/NotificationSmsPendingRule.csx +32 -0
- package/touch/Workflows/src/PermanentDoneRule.csx +44 -0
- package/touch/Workflows/src/PermanentProcessNextRule.csx +44 -0
- package/touch/Workflows/src/RezChatRoomProcessNextRule.csx +44 -0
- package/touch/Workflows/src/RezChatRoomsDoneRule.csx +44 -0
- package/touch/Workflows/src/SendPushNotificationMapping.csx +146 -0
- package/touch/Workflows/src/SendSmsNotificationMapping.csx +138 -0
- package/touch/Workflows/src/SetChatRoomStatusActiveMapping.csx +22 -0
- package/touch/Workflows/src/SetChatRoomStatusDeactiveMapping.csx +22 -0
- package/touch/Workflows/src/SetPreviousAdvisorMapping.csx +28 -0
- package/touch/Workflows/src/SetUserFromHeadersForRezervationMapping.csx +24 -0
- package/touch/Workflows/src/SlotAvailableRule.csx +33 -0
- package/touch/Workflows/src/SlotUnavailableRule.csx +33 -0
- package/touch/Workflows/src/StartChatRoomForRezervationMapping.csx +100 -0
- package/touch/Workflows/src/StartGetChatTokenForRezervationMapping.csx +71 -0
- package/touch/Workflows/src/StartNotificationForAdvisorMapping.csx +117 -0
- package/touch/Workflows/src/StartNotificationForRezervationFromUserInfoMapping.csx +128 -0
- package/touch/Workflows/src/StartNotificationForUserMapping.csx +117 -0
- package/touch/Workflows/src/StartPermanentChatRoomMapping.csx +92 -0
- package/touch/Workflows/src/StartTransferFromAbsenceEntryMapping.csx +94 -0
- package/touch/Workflows/src/StartVideoCallCustomerSubFlowMapping.csx +37 -0
- package/touch/Workflows/src/StartVideoCallForInvitedParticipantMapping.csx +54 -0
- package/touch/Workflows/src/StartVideoCallForRandevuStartMapping.csx +70 -0
- package/touch/Workflows/src/StartVideoCallStaffSubFlowMapping.csx +37 -0
- package/touch/Workflows/src/StateActiveForUpdateRule.csx +14 -0
- package/touch/Workflows/src/StateActiveRule.csx +14 -0
- package/touch/Workflows/src/StateInMeetRule.csx +14 -0
- package/touch/Workflows/src/StateNotActiveForUpdateRule.csx +14 -0
- package/touch/Workflows/src/StateNotActiveOrInMeetRule.csx +14 -0
- package/touch/Workflows/src/StatusCustomerEnterRule.csx +25 -0
- package/touch/Workflows/src/StatusStaffEnterRule.csx +25 -0
- package/touch/Workflows/src/SyncWorkingHoursRule.csx +46 -0
- package/touch/Workflows/src/TokenSuccessRule.csx +24 -0
- package/touch/Workflows/src/TransferAllDoneRule.csx +50 -0
- package/touch/Workflows/src/TransferHasInvalidRule.csx +34 -0
- package/touch/Workflows/src/TransferProcessNextRule.csx +50 -0
- package/touch/Workflows/src/TriggerChatRoomDeactivateMapping.csx +77 -0
- package/touch/Workflows/src/TriggerChatRoomTransferMapping.csx +93 -0
- package/touch/Workflows/src/TriggerChatRoomUpdateMapping.csx +99 -0
- package/touch/Workflows/src/TriggerRezervationAddInvitedParticipantMapping.csx +77 -0
- package/touch/Workflows/src/TriggerRezervationApplyUpdateMapping.csx +66 -0
- package/touch/Workflows/src/TriggerRezervationToInMeetMapping.csx +69 -0
- package/touch/Workflows/src/TriggerRezervationVideoCallUpdateMapping.csx +67 -0
- package/touch/Workflows/src/ValidateDateForRezervationMapping.csx +60 -0
- package/touch/Workflows/src/ValidateSlotForRandevuUpdateMapping.csx +211 -0
- package/touch/Workflows/src/ValidateSlotForRezervationMapping.csx +246 -0
- package/touch/Workflows/src/ValidateTransferMapping.csx +243 -0
- package/touch/Workflows/src/VideoCallUrlUpdateMergeMapping.csx +141 -0
- package/touch/Workflows/start-chat.json +217 -0
- package/touch/Workflows/start-video-call.http +93 -0
- package/touch/Workflows/start-video-call.json +206 -0
- package/vnext.config.json +58 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Burgan Tech
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@burgan-tech/morph-touch-runtime",
|
|
3
|
+
"version": "0.0.2",
|
|
4
|
+
"description": "morph-touch - Runtime Package for engine deployment",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"keywords": ["vnext", "workflow", "runtime", "domain", "burgan", "morph-touch"],
|
|
8
|
+
"author": "Burgan Tech Team <dev@burgan-tech.com>",
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "git+https://github.com/burgan-tech/morph-touch.git"
|
|
13
|
+
},
|
|
14
|
+
"bugs": {
|
|
15
|
+
"url": "https://github.com/burgan-tech/morph-touch/issues"
|
|
16
|
+
},
|
|
17
|
+
"homepage": "https://github.com/burgan-tech/morph-touch#readme",
|
|
18
|
+
"publishConfig": {
|
|
19
|
+
"access": "public"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "check-livekit-room-access",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"livekit",
|
|
9
|
+
"room-access",
|
|
10
|
+
"rezervation"
|
|
11
|
+
],
|
|
12
|
+
"attributes": {
|
|
13
|
+
"scope": "I",
|
|
14
|
+
"task": {
|
|
15
|
+
"order": 1,
|
|
16
|
+
"task": {
|
|
17
|
+
"key": "get-rezervations-task",
|
|
18
|
+
"domain": "touch",
|
|
19
|
+
"version": "1.0.0",
|
|
20
|
+
"flow": "sys-tasks"
|
|
21
|
+
},
|
|
22
|
+
"mapping": {
|
|
23
|
+
"location": "./src/CheckLivekitRoomAccessMapping.csx",
|
|
24
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0Owp1c2luZyBTeXN0ZW0uVGV4dC5Kc29uOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBNYXBwaW5nIGZvciBjaGVjay1saXZla2l0LXJvb20tYWNjZXNzIGZ1bmN0aW9uLgovLy8gRGVjb2RlcyBhY2Nlc3NfdG9rZW4gKHBsYWluIGZvcm1hdCAicHJlZml4OnJvb21OYW1lOnBhcnRpY2lwYW50TmFtZSIgb3IgTGl2ZUtpdCBKV1QpIGZyb20gcXVlcnkgcGFyYW1ldGVyIHRvIGV4dHJhY3Qgcm9vbU5hbWUgYW5kIHBhcnRpY2lwYW50TmFtZSwKLy8vIGZpbHRlcnMgcmV6ZXJ2YXRpb24gaW5zdGFuY2VzIGJ5IHJvb21OYW1lICh3ZWJydGNJbnRlZ3JhdGlvbikgYW5kIHBhcnRpY2lwYW50TmFtZSAoYWR2aXNvciBPUiB1c2VyKSwKLy8vIGFuZCB2YWxpZGF0ZXM6IGl0ZW1zIG51bGwgPSB0aHJvdy9kZW55LCBpdGVtcyA+IDEgPSBzaW1wbGUgcmVzcG9uc2UsIGl0ZW1zID09IDEgPSBzdWNjZXNzLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgQ2hlY2tMaXZla2l0Um9vbUFjY2Vzc01hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGFjY2Vzc1Rva2VuID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnM/WyJhY2Nlc3NfdG9rZW4iXT8uVG9TdHJpbmcoKT8uVHJpbSgpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGFjY2Vzc1Rva2VuKSkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJhY2Nlc3NfdG9rZW4gcXVlcnkgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIik7CiAgICAgICAgfQoKICAgICAgICBzdHJpbmcgcm9vbU5hbWU7CiAgICAgICAgc3RyaW5nIHBhcnRpY2lwYW50TmFtZTsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBkZWNvZGVkID0gRGVjb2RlTGl2ZUtpdEp3dFBheWxvYWQoYWNjZXNzVG9rZW4gPz8gIiIpOwogICAgICAgICAgICByb29tTmFtZSA9IGRlY29kZWQuSXRlbTEgPz8gIiI7CiAgICAgICAgICAgIHBhcnRpY2lwYW50TmFtZSA9IGRlY29kZWQuSXRlbTIgPz8gIiI7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkludmFsaWQgb3IgbWFsZm9ybWVkIGFjY2Vzc190b2tlbjogIiArIGV4Lk1lc3NhZ2UpOwogICAgICAgICAgICAvLyByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAvLyB7CiAgICAgICAgICAgIC8vICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgIC8vICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgIC8vICAgICB7CiAgICAgICAgICAgIC8vICAgICAgICAgZXJyb3IgPSAiSW52YWxpZCBvciBtYWxmb3JtZWQgYWNjZXNzX3Rva2VuOiAiICsgZXguTWVzc2FnZSwKICAgICAgICAgICAgLy8gICAgICAgICBlcnJvckNvZGUgPSAiSU5WQUxJRF9UT0tFTiIKICAgICAgICAgICAgLy8gICAgIH0sCiAgICAgICAgICAgIC8vICAgICBUYWdzID0gbmV3W10geyAibGl2ZWtpdCIsICJyb29tLWFjY2VzcyIsICJlcnJvciIgfQogICAgICAgICAgICAvLyB9KTsKICAgICAgICB9CgogICAgICAgIExvZ0Vycm9yKCQicm9vbU5hbWU9e3Jvb21OYW1lfSwgcGFydGljaXBhbnROYW1lPXtwYXJ0aWNpcGFudE5hbWV9Iik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHJvb21OYW1lKSB8fCBzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHBhcnRpY2lwYW50TmFtZSkpCiAgICAgICAgewogICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oImFjY2Vzc190b2tlbiBtdXN0IGNvbnRhaW4gcm9vbU5hbWUgYW5kIHBhcnRpY2lwYW50TmFtZSIpOwogICAgICAgICAgICAvLyByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAvLyB7CiAgICAgICAgICAgIC8vICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgIC8vICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgIC8vICAgICB7CiAgICAgICAgICAgIC8vICAgICAgICAgZXJyb3IgPSAiYWNjZXNzX3Rva2VuIG11c3QgY29udGFpbiByb29tTmFtZSBhbmQgcGFydGljaXBhbnROYW1lIiwKICAgICAgICAgICAgLy8gICAgICAgICBlcnJvckNvZGUgPSAiVkFMSURBVElPTl9FUlJPUiIKICAgICAgICAgICAgLy8gICAgIH0sCiAgICAgICAgICAgIC8vICAgICBUYWdzID0gbmV3W10geyAibGl2ZWtpdCIsICJyb29tLWFjY2VzcyIsICJlcnJvciIgfQogICAgICAgICAgICAvLyB9KTsKICAgICAgICB9CgogICAgICAgIHZhciByb29tTmFtZUVzY2FwZWQgPSBFc2NhcGVKc29uU3RyaW5nKHJvb21OYW1lKTsKICAgICAgICB2YXIgcGFydGljaXBhbnROYW1lRXNjYXBlZCA9IEVzY2FwZUpzb25TdHJpbmcocGFydGljaXBhbnROYW1lKTsKCiAgICAgICAgdmFyIGNvbmRpdGlvbnMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAie1wib3JcIjpbIiArCiAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYWN0aXZlXCJ9fSwiICsKICAgICAgICAgICAgIntcImN1cnJlbnRTdGF0ZVwiOntcImVxXCI6XCJpbi1tZWV0XCJ9fSIgKwogICAgICAgICAgICAiXX0iLAogICAgICAgICAgICAKICAgICAgICAgICAgIntcImtleVwiOntcImVxXCI6XCIiICsgcm9vbU5hbWVFc2NhcGVkICsgIlwifX0iLAogICAgICAgICAgICAie1wib3JcIjpbIiArCiAgICAgICAgICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wiYWR2aXNvclwiOntcImVxXCI6XCIiICsgcGFydGljaXBhbnROYW1lRXNjYXBlZCArICJcIn19fSwiICsKICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyBwYXJ0aWNpcGFudE5hbWVFc2NhcGVkICsgIlwifX19LCIgKwogICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImludml0ZWRVc2VyXCI6e1wiY29udGFpbnNcIjpcIiIgKyBwYXJ0aWNpcGFudE5hbWVFc2NhcGVkICsgIlwifX19IiArCiAgICAgICAgICAgICJdfSIKICAgICAgICB9OwoKICAgICAgICB2YXIgZmlsdGVySnNvbiA9ICJ7XCJhbmRcIjpbIiArIHN0cmluZy5Kb2luKCIsIiwgY29uZGl0aW9ucykgKyAiXX0iOwogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4geyAicGFnZVNpemU9MTAwIiwgImZpbHRlcj0iICsgZmlsdGVySnNvbiB9OwogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewoKICAgICAgICB2YXIgcmVzcG9uc2UgPSBjb250ZXh0LkJvZHk7CgogICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkZhaWxlZCB0byBmZXRjaCByZXplcnZhdGlvbiBpbnN0YW5jZXMiKTsKICAgICAgICB9CgogICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICB2YXIgaXRlbXMgPSByZXNwb25zZURhdGE/Lml0ZW1zOwoKICAgICAgICBpZiAoaXRlbXMgPT0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJVc2VyIGlzIG5vdCByZWdpc3RlcmVkIGluIHRoaXMgcm9vbSIpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNvdW50ID0gQ291bnRJdGVtcyhpdGVtcyk7CiAgICAgICAgaWYgKGNvdW50ID4gMSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJtdWx0aXBsZS1tYXRjaGVzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0ZXN0PWl0ZW1zLAogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkJpcmRlbiBmYXpsYSBlxZ9sZcWfZW4gcmV6ZXJ2YXN5b24gYnVsdW5kdSIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIk1VTFRJUExFX01BVENIRVMiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImxpdmVraXQiLCAicm9vbS1hY2Nlc3MiLCAiZXJyb3IiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoY291bnQgPT0gMSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzaW5nbGVJdGVtID0gR2V0Rmlyc3RJdGVtKGl0ZW1zKTsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gInJvb20tYWNjZXNzLWFsbG93ZWQiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IGFsbG93ZWQgPSB0cnVlLCBpdGVtID0gc2luZ2xlSXRlbSB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImxpdmVraXQiLCAicm9vbS1hY2Nlc3MiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oInJvb20tYWNjZXNzLWRlbmllZCIpOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldEhlYWRlcihTY3JpcHRDb250ZXh0IGNvbnRleHQsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChjb250ZXh0Py5IZWFkZXJzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGtleSA9IG5hbWUuVG9Mb3dlckludmFyaWFudCgpOwogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkoY29udGV4dC5IZWFkZXJzLCBrZXkpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUoY29udGV4dC5IZWFkZXJzLCBrZXkpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIChzdHJpbmcgcm9vbU5hbWUsIHN0cmluZyBwYXJ0aWNpcGFudE5hbWUpIERlY29kZUxpdmVLaXRKd3RQYXlsb2FkKHN0cmluZyBhY2Nlc3NUb2tlbikKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShhY2Nlc3NUb2tlbikpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiYWNjZXNzX3Rva2VuIGlzIHJlcXVpcmVkIik7CgogICAgICAgIC8vIEpXVCBmb3JtYXQ6IGV4YWN0bHkgMyBkb3Qtc2VwYXJhdGVkIHBhcnRzIChoZWFkZXIucGF5bG9hZC5zaWduYXR1cmUpCiAgICAgICAgdmFyIGRvdFBhcnRzID0gYWNjZXNzVG9rZW4uU3BsaXQoJy4nKTsKICAgICAgICBpZiAoZG90UGFydHMuTGVuZ3RoID09IDMpCiAgICAgICAgewogICAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdmFyIHBheWxvYWRCYXNlNjQgPSBkb3RQYXJ0c1sxXTsKICAgICAgICAgICAgICAgIHZhciBiYXNlNjQgPSBwYXlsb2FkQmFzZTY0LlJlcGxhY2UoJy0nLCAnKycpLlJlcGxhY2UoJ18nLCAnLycpOwogICAgICAgICAgICAgICAgc3dpdGNoIChiYXNlNjQuTGVuZ3RoICUgNCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IGJhc2U2NCArPSAiPT0iOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IGJhc2U2NCArPSAiPSI7IGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGJ5dGVzID0gQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKGJhc2U2NCk7CiAgICAgICAgICAgICAgICB2YXIganNvbiA9IFN5c3RlbS5UZXh0LkVuY29kaW5nLlVURjguR2V0U3RyaW5nKGJ5dGVzKTsKICAgICAgICAgICAgICAgIGpzb24gPSBqc29uLlRyaW1TdGFydCgnXHVGRUZGJyk7IC8vIFN0cmlwIFVURi04IEJPTSBpZiBwcmVzZW50CiAgICAgICAgICAgICAgICB1c2luZyB2YXIgZG9jID0gSnNvbkRvY3VtZW50LlBhcnNlKGpzb24pOwogICAgICAgICAgICAgICAgdmFyIHJvb3QgPSBkb2MuUm9vdEVsZW1lbnQ7CiAgICAgICAgICAgICAgICBzdHJpbmcgcm4gPSBudWxsOwogICAgICAgICAgICAgICAgc3RyaW5nIHBuID0gbnVsbDsKICAgICAgICAgICAgICAgIGlmIChyb290LlRyeUdldFByb3BlcnR5KCJ2aWRlbyIsIG91dCB2YXIgdmlkZW8pICYmIHZpZGVvLlRyeUdldFByb3BlcnR5KCJyb29tIiwgb3V0IHZhciByb29tKSkKICAgICAgICAgICAgICAgICAgICBybiA9IHJvb20uR2V0U3RyaW5nKCk7CiAgICAgICAgICAgICAgICBpZiAocm9vdC5UcnlHZXRQcm9wZXJ0eSgic3ViIiwgb3V0IHZhciBzdWIpKQogICAgICAgICAgICAgICAgICAgIHBuID0gc3ViLkdldFN0cmluZygpOwogICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShybikgfHwgIXN0cmluZy5Jc051bGxPckVtcHR5KHBuKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHJuID8/ICIiLCBwbiA/PyAiIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggeyAvKiBGYWxsIHRocm91Z2ggdG8gcGxhaW4gZm9ybWF0IGlmIEpXVCBkZWNvZGUgZmFpbHMgKi8gfQogICAgICAgIH0KCiAgICAgICAgLy8gUGxhaW4gZm9ybWF0OiAiZ2VuZXJhdGU6cm9vbU5hbWU6cGFydGljaXBhbnROYW1lIiBvciAicm9vbU5hbWU6cGFydGljaXBhbnROYW1lIgogICAgICAgIHZhciBjb2xvblBhcnRzID0gYWNjZXNzVG9rZW4uU3BsaXQoJzonKTsKICAgICAgICBpZiAoY29sb25QYXJ0cy5MZW5ndGggPj0gMikKICAgICAgICB7CiAgICAgICAgICAgIHZhciByb29tTmFtZSA9IGNvbG9uUGFydHMuTGVuZ3RoID49IDMgPyBjb2xvblBhcnRzWzFdLlRyaW0oKSA6IGNvbG9uUGFydHNbMF0uVHJpbSgpOwogICAgICAgICAgICB2YXIgcGFydGljaXBhbnROYW1lID0gY29sb25QYXJ0cy5MZW5ndGggPj0gMyA/IGNvbG9uUGFydHNbMl0uVHJpbSgpIDogY29sb25QYXJ0c1sxXS5UcmltKCk7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkocm9vbU5hbWUpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShwYXJ0aWNpcGFudE5hbWUpKQogICAgICAgICAgICAgICAgcmV0dXJuIChyb29tTmFtZSwgcGFydGljaXBhbnROYW1lKTsKICAgICAgICB9CgogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiSW52YWxpZCBhY2Nlc3NfdG9rZW4gZm9ybWF0OiBleHBlY3RlZCAncHJlZml4OnJvb21OYW1lOnBhcnRpY2lwYW50TmFtZScgb3IgSldUIik7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgRXNjYXBlSnNvblN0cmluZyhzdHJpbmcgcykKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkocykpIHJldHVybiBzOwogICAgICAgIHJldHVybiBzLlJlcGxhY2UoIlxcIiwgIlxcXFwiKS5SZXBsYWNlKCJcIiIsICJcXFwiIikuUmVwbGFjZSgiXG4iLCAiXFxuIikuUmVwbGFjZSgiXHIiLCAiXFxyIikuUmVwbGFjZSgiXHQiLCAiXFx0Iik7CiAgICB9CgogICAgcHJpdmF0ZSBpbnQgQ291bnRJdGVtcyhkeW5hbWljIGl0ZW1zKQogICAgewogICAgICAgIGlmIChpdGVtcyA9PSBudWxsKSByZXR1cm4gMDsKICAgICAgICBpZiAoaXRlbXMgaXMgU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhYmxlIGVudW1lcmFibGUgYW5kIG5vdCBzdHJpbmcpCiAgICAgICAgewogICAgICAgICAgICB2YXIgYyA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBfIGluIGVudW1lcmFibGUpIGMrKzsKICAgICAgICAgICAgcmV0dXJuIGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKICAgIHByaXZhdGUgb2JqZWN0IEdldEZpcnN0SXRlbShkeW5hbWljIGl0ZW1zKQogICAgewogICAgICAgIGlmIChpdGVtcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBpZiAoaXRlbXMgaXMgU3lzdGVtLkNvbGxlY3Rpb25zLklFbnVtZXJhYmxlIGVudW1lcmFibGUgYW5kIG5vdCBzdHJpbmcpCiAgICAgICAgewogICAgICAgICAgICBmb3JlYWNoICh2YXIgaXRlbSBpbiBlbnVtZXJhYmxlKQogICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Cg=="
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# Check LiveKit Room Access Function - HTTP Test File
|
|
3
|
+
#
|
|
4
|
+
# This file tests the check-livekit-room-access function which:
|
|
5
|
+
# - Decodes access_token (LiveKit JWT) from query parameter
|
|
6
|
+
# - Extracts roomName and participantName from JWT (video.room, sub)
|
|
7
|
+
# - Filters rezervation instances by roomName (webrtcIntegration) and participantName (advisor OR user)
|
|
8
|
+
# - Returns: room-access-allowed | room-access-denied | multiple-matches
|
|
9
|
+
#
|
|
10
|
+
# Prerequisites:
|
|
11
|
+
# 1. vNext Runtime running on localhost:4201
|
|
12
|
+
# 2. access_token must be a valid LiveKit JWT with video.room and sub claims
|
|
13
|
+
#
|
|
14
|
+
# Usage:
|
|
15
|
+
# - Replace {{accessToken}} with a real LiveKit JWT token
|
|
16
|
+
# - The JWT should contain: video.room (roomName), sub (participantName/identity)
|
|
17
|
+
###############################################################################
|
|
18
|
+
|
|
19
|
+
@baseUrl = http://localhost:4201
|
|
20
|
+
@apiVersion = 1
|
|
21
|
+
@domain = touch
|
|
22
|
+
|
|
23
|
+
# Replace with a valid LiveKit JWT token (contains video.room and sub claims)
|
|
24
|
+
@accessToken = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2aWRlbyI6eyJyb29tIjoicm9vbS0xMjMifSwic3ViIjoidG91Y2g6cG9ydGZvbGlvLW1hbmFnZXI6cG0tMDAxIn0.signature
|
|
25
|
+
|
|
26
|
+
###############################################################################
|
|
27
|
+
# Call check-livekit-room-access function
|
|
28
|
+
###############################################################################
|
|
29
|
+
|
|
30
|
+
### Check LiveKit Room Access
|
|
31
|
+
# @name checkLivekitRoomAccess
|
|
32
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/functions/check-livekit-room-access?access_token={{accessToken}}
|
|
33
|
+
Accept: application/json
|
|
34
|
+
Accept-Language: tr-TR
|
|
35
|
+
X-Request-Id: {{$guid}}
|
|
36
|
+
|
|
37
|
+
###############################################################################
|
|
38
|
+
# Notes:
|
|
39
|
+
# - Function uses get-rezervations-task (DaprServiceTask) internally
|
|
40
|
+
# - Filter: currentState in (active, in-meet), status eq "A",
|
|
41
|
+
# attributes.webrtcIntegration.roomName eq roomName,
|
|
42
|
+
# (attributes.advisor OR attributes.user) eq participantName
|
|
43
|
+
# - Resource Rule: Utils.CallApiGet(url) with access_token as query parameter
|
|
44
|
+
###############################################################################
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-absence-entry",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"absence-entry",
|
|
9
|
+
"list",
|
|
10
|
+
"filter"
|
|
11
|
+
],
|
|
12
|
+
"attributes": {
|
|
13
|
+
"scope": "I",
|
|
14
|
+
"task": {
|
|
15
|
+
"order": 1,
|
|
16
|
+
"task": {
|
|
17
|
+
"key": "get-absence-entry-task",
|
|
18
|
+
"domain": "touch",
|
|
19
|
+
"version": "1.0.0",
|
|
20
|
+
"flow": "sys-tasks"
|
|
21
|
+
},
|
|
22
|
+
"mapping": {
|
|
23
|
+
"location": "./src/GetAbsenceEntryMapping.csx",
|
|
24
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgR2V0QWJzZW5jZUVudHJ5VGFzayAoRGFwclNlcnZpY2VUYXNrIC0gVHlwZSAzKQovLy8gUXVlcmllcyBhYnNlbmNlLWVudHJ5IHdvcmtmbG93IGluc3RhbmNlcyBpbiBjb21wbGV0ZSBzdGF0ZSwgZmlsdGVyZWQgYnkgYWJzZW5jZVR5cGUuCi8vLwovLy8gUXVlcnkgcGFyYW1ldGVyczoKLy8vICAgLSBhYnNlbmNlVHlwZSAocmVxdWlyZWQpOiAicHVibGljLWhvbGlkYXkiIHwgInBlcnNvbmFsLWxlYXZlIiB8ICJ3b3JraW5nLWhvdXJzLWNoYW5nZSIgfCAicmV6ZXJ2YXRpb24iCi8vLyAgIC0gc3RhcnREYXRlIChvcHRpb25hbCwgcHVibGljLWhvbGlkYXkvcGVyc29uYWwtbGVhdmUvcmV6ZXJ2YXRpb24pOiBmaWx0ZXIgc3RhcnREYXRlVGltZSA+PSB2YWx1ZQovLy8gICAtIGVuZERhdGUgKG9wdGlvbmFsLCBwdWJsaWMtaG9saWRheS9wZXJzb25hbC1sZWF2ZS9yZXplcnZhdGlvbik6IGZpbHRlciBlbmREYXRlVGltZSA8PSB2YWx1ZQovLy8gICAtIGFkdmlzb3IgKG9wdGlvbmFsLCBwZXJzb25hbC1sZWF2ZS93b3JraW5nLWhvdXJzLWNoYW5nZS9yZXplcnZhdGlvbik6IGZpbHRlciBieSBhZHZpc29yCi8vLyAgIC0gcGFnZVNpemUgKG9wdGlvbmFsLCBkZWZhdWx0IDEwMCkKLy8vCi8vLyBOb3RlOiBEYXRlIGZpbHRlcmluZyAoc3RhcnREYXRlL2VuZERhdGUpIGlzIHBlcmZvcm1lZCBjbGllbnQtc2lkZSBpbiBPdXRwdXRIYW5kbGVyCi8vLyBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBBUEkgZG9lcyBub3Qgc3VwcG9ydCBndGUvbHRlIG9wZXJhdG9ycyBvbiBhdHRyaWJ1dGUgZmllbGRzLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgR2V0QWJzZW5jZUVudHJ5TWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgYWJzZW5jZVR5cGUgPSBSZWFkUGFyYW0oY29udGV4dCwgImFic2VuY2VUeXBlIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShhYnNlbmNlVHlwZSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiYWJzZW5jZVR5cGUgaXMgcmVxdWlyZWQiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJWQUxJREFUSU9OX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICB2YWxpZFZhbHVlcyA9IG5ld1tdIHsgInB1YmxpYy1ob2xpZGF5IiwgInBlcnNvbmFsLWxlYXZlIiwgIndvcmtpbmctaG91cnMtY2hhbmdlIiwgInJlemVydmF0aW9uIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHZhbGlkVHlwZXMgPSBuZXdbXSB7ICJwdWJsaWMtaG9saWRheSIsICJwZXJzb25hbC1sZWF2ZSIsICJ3b3JraW5nLWhvdXJzLWNoYW5nZSIsICJyZXplcnZhdGlvbiIgfTsKICAgICAgICBib29sIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICBmb3JlYWNoICh2YXIgdnQgaW4gdmFsaWRUeXBlcykKICAgICAgICB7CiAgICAgICAgICAgIGlmICh2dCA9PSBhYnNlbmNlVHlwZSkgeyBpc1ZhbGlkID0gdHJ1ZTsgYnJlYWs7IH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNWYWxpZCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJJbnZhbGlkIGFic2VuY2VUeXBlIHZhbHVlIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiVkFMSURBVElPTl9FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgPSBhYnNlbmNlVHlwZSwKICAgICAgICAgICAgICAgICAgICB2YWxpZFZhbHVlcyA9IHZhbGlkVHlwZXMKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICB2YXIgYWR2aXNvciA9IFJlYWRQYXJhbShjb250ZXh0LCAiYWR2aXNvciIpOwoKICAgICAgICB2YXIgcGFnZVNpemVTdHIgPSBSZWFkUGFyYW0oY29udGV4dCwgInBhZ2VTaXplIik7CiAgICAgICAgaW50IHBhZ2VTaXplID0gMTAwOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkocGFnZVNpemVTdHIpKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHBhcnNlZCA9IDA7CiAgICAgICAgICAgIGlmIChpbnQuVHJ5UGFyc2UocGFnZVNpemVTdHIsIG91dCBwYXJzZWQpICYmIHBhcnNlZCA+IDApCiAgICAgICAgICAgICAgICBwYWdlU2l6ZSA9IHBhcnNlZDsKICAgICAgICB9CgogICAgICAgIHZhciBjb25kaXRpb25zID0gbmV3IExpc3Q8c3RyaW5nPigpOwoKICAgICAgICBjb25kaXRpb25zLkFkZCgie1wiYXR0cmlidXRlc1wiOntcImFic2VuY2VUeXBlXCI6e1wiZXFcIjpcIiIgKyBhYnNlbmNlVHlwZSArICJcIn19fSIpOwoKICAgICAgICBpZiAoYWJzZW5jZVR5cGUgPT0gIndvcmtpbmctaG91cnMtY2hhbmdlIikKICAgICAgICB7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcikpCiAgICAgICAgICAgICAgICBjb25kaXRpb25zLkFkZCgie1wia2V5XCI6e1wiZXFcIjpcIndvcmtpbmctaG91ci0iICsgYWR2aXNvciArICJcIn19Iik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMuQWRkKCJ7XCJrZXlcIjp7XCJlcVwiOlwid29ya2luZy1ob3VyXCJ9fSIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKChhYnNlbmNlVHlwZSA9PSAicGVyc29uYWwtbGVhdmUiIHx8IGFic2VuY2VUeXBlID09ICJyZXplcnZhdGlvbiIpICYmICFzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgY29uZGl0aW9ucy5BZGQoIntcImF0dHJpYnV0ZXNcIjp7XCJhZHZpc29yXCI6e1wiZXFcIjpcIiIgKyBhZHZpc29yICsgIlwifX19Iik7CgogICAgICAgIHZhciBmaWx0ZXJKc29uID0gIntcImFuZFwiOlsiICsgc3RyaW5nLkpvaW4oIiwiLCBjb25kaXRpb25zKSArICJdfSI7CgogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0iICsgcGFnZVNpemUsCiAgICAgICAgICAgICJjdXJyZW50U3RhdGU9Y29tcGxldGUiLAogICAgICAgICAgICAiZmlsdGVyPSIgKyBmaWx0ZXJKc29uCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgYXN5bmMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYWJzZW5jZVR5cGUgPSBSZWFkUGFyYW0oY29udGV4dCwgImFic2VuY2VUeXBlIik7CiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGNvbnRleHQuQm9keTsKCiAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInNlcnZpY2UtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkZhaWxlZCB0byBmZXRjaCBhYnNlbmNlIGVudHJpZXMiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiU0VSVklDRV9FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VJbmZvID0gbmV3CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcElkID0gcmVzcG9uc2U/Lm1ldGFkYXRhPy5hcHBJZD8uVG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSByZXNwb25zZT8ubWV0YWRhdGE/Lm1ldGhvZE5hbWU/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwVmVyYiA9IHJlc3BvbnNlPy5tZXRhZGF0YT8uaHR0cFZlcmI/LlRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFic2VuY2UtZW50cnkiLCAiZXJyb3IiIH0KICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgICAgIGJvb2wgc3VwcG9ydHNEYXRlRmlsdGVyID0gKGFic2VuY2VUeXBlID09ICJwdWJsaWMtaG9saWRheSIgfHwgYWJzZW5jZVR5cGUgPT0gInBlcnNvbmFsLWxlYXZlIiB8fCBhYnNlbmNlVHlwZSA9PSAicmV6ZXJ2YXRpb24iKTsKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZVN0ciA9IFJlYWRQYXJhbShjb250ZXh0LCAic3RhcnREYXRlIik7CiAgICAgICAgICAgIHZhciBlbmREYXRlU3RyID0gUmVhZFBhcmFtKGNvbnRleHQsICJlbmREYXRlIik7CgogICAgICAgICAgICBpZiAoc3VwcG9ydHNEYXRlRmlsdGVyICYmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlU3RyKSB8fCAhc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVN0cikpICYmIGl0ZW1zICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIERhdGVUaW1lIHN0YXJ0RGF0ZUZpbHRlciA9IGRlZmF1bHQ7CiAgICAgICAgICAgICAgICBEYXRlVGltZSBlbmREYXRlRmlsdGVyID0gZGVmYXVsdDsKICAgICAgICAgICAgICAgIGJvb2wgaGFzU3RhcnRGaWx0ZXIgPSAhc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlU3RyKSAmJiBEYXRlVGltZS5UcnlQYXJzZShzdGFydERhdGVTdHIsIG91dCBzdGFydERhdGVGaWx0ZXIpOwogICAgICAgICAgICAgICAgYm9vbCBoYXNFbmRGaWx0ZXIgPSAhc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVN0cikgJiYgRGF0ZVRpbWUuVHJ5UGFyc2UoZW5kRGF0ZVN0ciwgb3V0IGVuZERhdGVGaWx0ZXIpOwoKICAgICAgICAgICAgICAgIHZhciBmaWx0ZXJlZEl0ZW1zID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKGR5bmFtaWMgaXRlbSBpbiBpdGVtcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cnMgPSBpdGVtPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgICAgIGlmIChhdHRycyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGl0ZW1TdGFydFN0ciA9IGF0dHJzPy5zdGFydERhdGVUaW1lPy5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIHN0cmluZyBpdGVtRW5kU3RyID0gYXR0cnM/LmVuZERhdGVUaW1lPy5Ub1N0cmluZygpOwoKICAgICAgICAgICAgICAgICAgICBEYXRlVGltZSBpdGVtU3RhcnQgPSBkZWZhdWx0OwogICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQgPSBkZWZhdWx0OwogICAgICAgICAgICAgICAgICAgIGJvb2wgcGFyc2VkU3RhcnQgPSAhc3RyaW5nLklzTnVsbE9yRW1wdHkoaXRlbVN0YXJ0U3RyKSAmJiBEYXRlVGltZS5UcnlQYXJzZShpdGVtU3RhcnRTdHIsIG91dCBpdGVtU3RhcnQpOwogICAgICAgICAgICAgICAgICAgIGJvb2wgcGFyc2VkRW5kID0gIXN0cmluZy5Jc051bGxPckVtcHR5KGl0ZW1FbmRTdHIpICYmIERhdGVUaW1lLlRyeVBhcnNlKGl0ZW1FbmRTdHIsIG91dCBpdGVtRW5kKTsKCiAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1N0YXJ0RmlsdGVyICYmIHBhcnNlZFN0YXJ0ICYmIGl0ZW1TdGFydCA8IHN0YXJ0RGF0ZUZpbHRlcikKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaGFzRW5kRmlsdGVyICYmIHBhcnNlZEVuZCAmJiBpdGVtRW5kID4gZW5kRGF0ZUZpbHRlcikKICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IGZhbHNlOwoKICAgICAgICAgICAgICAgICAgICBpZiAoaW5jbHVkZSkKICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJdGVtcy5BZGQoaXRlbSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJhYnNlbmNlLWVudHJ5LXN1Y2Nlc3MiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGFic2VuY2VUeXBlLAogICAgICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IGZpbHRlcmVkSXRlbXMKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXcgc3RyaW5nW10geyAiYWJzZW5jZS1lbnRyeSIsIGFic2VuY2VUeXBlID8/ICIiLCAic3VjY2VzcyIgfQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAiYWJzZW5jZS1lbnRyeS1zdWNjZXNzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBhYnNlbmNlVHlwZSwKICAgICAgICAgICAgICAgICAgICBpdGVtcwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXcgc3RyaW5nW10geyAiYWJzZW5jZS1lbnRyeSIsIGFic2VuY2VUeXBlID8/ICIiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBjYXRjaCAoRXhjZXB0aW9uIGV4KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAib3V0cHV0LWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJJbnRlcm5hbCBwcm9jZXNzaW5nIGVycm9yIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiUFJPQ0VTU0lOR19FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiYWJzZW5jZS1lbnRyeSIsICJlcnJvciIgfQogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBSZWFkUGFyYW0oU2NyaXB0Q29udGV4dCBjb250ZXh0LCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMsIG5hbWUpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgdmFsID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnNbbmFtZV07CiAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8gdmFsLlRvU3RyaW5nKCkgOiBudWxsOwogICAgfQp9Cg=="
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-advisor-stats",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"advisor-stats",
|
|
9
|
+
"performance"
|
|
10
|
+
],
|
|
11
|
+
"attributes": {
|
|
12
|
+
"scope": "I",
|
|
13
|
+
"task": {
|
|
14
|
+
"order": 1,
|
|
15
|
+
"task": {
|
|
16
|
+
"key": "get-advisor-stats-task",
|
|
17
|
+
"domain": "touch",
|
|
18
|
+
"version": "1.0.0",
|
|
19
|
+
"flow": "sys-tasks"
|
|
20
|
+
},
|
|
21
|
+
"mapping": {
|
|
22
|
+
"location": "./src/GetAdvisorStatsMapping.csx",
|
|
23
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgR2V0QWR2aXNvclN0YXRzVGFzayAoRGFwclNlcnZpY2VUYXNrIC0gVHlwZSAzKQovLy8gUXVlcmllcyByZXplcnZhdGlvbiB3b3JrZmxvdyBpbnN0YW5jZXMgdG8gY2FsY3VsYXRlIGFkdmlzb3IgcGVyZm9ybWFuY2Ugc3RhdGlzdGljcy4KLy8vCi8vLyBRdWVyeSBwYXJhbWV0ZXJzOgovLy8gICAtIGFkdmlzb3JJZCAocmVxdWlyZWQpOiBhZHZpc29yIGlkZW50aWZpZXIKLy8vICAgLSBwZXJpb2QgKG9wdGlvbmFsKTogIndlZWsiIHwgIm1vbnRoIiDigJQgZGVmYXVsdCAid2VlayIKLy8vICAgLSBzdGFydERhdGUgKG9wdGlvbmFsKTogZmlsdGVyIHN0YXJ0RGF0ZVRpbWUgPj0gdmFsdWUKLy8vICAgLSBlbmREYXRlIChvcHRpb25hbCk6IGZpbHRlciBlbmREYXRlVGltZSA8PSB2YWx1ZQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgR2V0QWR2aXNvclN0YXRzTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYWR2aXNvcklkID0gUmVhZFBhcmFtKGNvbnRleHQsICJhZHZpc29ySWQiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYWR2aXNvcklkKSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJhZHZpc29ySWQgaXMgcmVxdWlyZWQiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJWQUxJREFUSU9OX0VSUk9SIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIHZhciBwZXJpb2QgPSBSZWFkUGFyYW0oY29udGV4dCwgInBlcmlvZCIpID8/ICJ3ZWVrIjsKICAgICAgICB2YXIgc3RhcnREYXRlID0gUmVhZFBhcmFtKGNvbnRleHQsICJzdGFydERhdGUiKTsKICAgICAgICB2YXIgZW5kRGF0ZSA9IFJlYWRQYXJhbShjb250ZXh0LCAiZW5kRGF0ZSIpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlKSB8fCBzdHJpbmcuSXNOdWxsT3JFbXB0eShlbmREYXRlKSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBub3cgPSBEYXRlVGltZS5VdGNOb3c7CiAgICAgICAgICAgIGlmIChwZXJpb2QgPT0gIm1vbnRoIikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlID8/IG5vdy5BZGREYXlzKC0zMCkuVG9TdHJpbmcoInl5eXktTU0tZGRUSEg6bW06c3MiKTsKICAgICAgICAgICAgICAgIGVuZERhdGUgPSBlbmREYXRlID8/IG5vdy5Ub1N0cmluZygieXl5eS1NTS1kZFRISDptbTpzcyIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3RhcnREYXRlID0gc3RhcnREYXRlID8/IG5vdy5BZGREYXlzKC03KS5Ub1N0cmluZygieXl5eS1NTS1kZFRISDptbTpzcyIpOwogICAgICAgICAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUgPz8gbm93LlRvU3RyaW5nKCJ5eXl5LU1NLWRkVEhIOm1tOnNzIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBjb25kaXRpb25zID0gbmV3IExpc3Q8c3RyaW5nPigpOwogICAgICAgIGNvbmRpdGlvbnMuQWRkKCJ7XCJhdHRyaWJ1dGVzXCI6e1wiYWR2aXNvclwiOntcImVxXCI6XCIiICsgYWR2aXNvcklkICsgIlwifX19Iik7CiAgICAgICAgY29uZGl0aW9ucy5BZGQoIntcInN0YXR1c1wiOntcImVxXCI6XCJBXCJ9fSIpOwoKICAgICAgICB2YXIgZmlsdGVySnNvbiA9ICJ7XCJhbmRcIjpbIiArIHN0cmluZy5Kb2luKCIsIiwgY29uZGl0aW9ucykgKyAiXX0iOwoKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+ewogICAgICAgICAgICAicGFnZVNpemU9NTAwIiwKICAgICAgICAgICAgJCJmaWx0ZXI9e2ZpbHRlckpzb259IgogICAgICAgIH07CgogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYWR2aXNvcklkID0gUmVhZFBhcmFtKGNvbnRleHQsICJhZHZpc29ySWQiKTsKICAgICAgICAgICAgdmFyIHBlcmlvZCA9IFJlYWRQYXJhbShjb250ZXh0LCAicGVyaW9kIikgPz8gIndlZWsiOwogICAgICAgICAgICB2YXIgc3RhcnREYXRlID0gUmVhZFBhcmFtKGNvbnRleHQsICJzdGFydERhdGUiKTsKICAgICAgICAgICAgdmFyIGVuZERhdGUgPSBSZWFkUGFyYW0oY29udGV4dCwgImVuZERhdGUiKTsKCiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGNvbnRleHQuQm9keTsKCiAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJzZXJ2aWNlLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZmV0Y2ggcmVzZXJ2YXRpb25zIGZvciBzdGF0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJTRVJWSUNFX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmVzcG9uc2U/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFkdmlzb3Itc3RhdHMiLCAiZXJyb3IiIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2U/LmRhdGE7CiAgICAgICAgICAgIHZhciBpdGVtcyA9IHJlc3BvbnNlRGF0YT8uaXRlbXM7CgogICAgICAgICAgICBpbnQgdG90YWxDb3VudCA9IDA7CiAgICAgICAgICAgIGludCBjb21wbGV0ZWRDb3VudCA9IDA7CiAgICAgICAgICAgIGludCBjYW5jZWxsZWRDb3VudCA9IDA7CiAgICAgICAgICAgIGludCBhY3RpdmVDb3VudCA9IDA7CiAgICAgICAgICAgIGludCBpbk1lZXRDb3VudCA9IDA7CiAgICAgICAgICAgIGRvdWJsZSB0b3RhbER1cmF0aW9uTWludXRlcyA9IDA7CgogICAgICAgICAgICBEYXRlVGltZSBmaWx0ZXJTdGFydCA9IERhdGVUaW1lLk1pblZhbHVlOwogICAgICAgICAgICBEYXRlVGltZSBmaWx0ZXJFbmQgPSBEYXRlVGltZS5NYXhWYWx1ZTsKICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydERhdGUpKSBEYXRlVGltZS5UcnlQYXJzZShzdGFydERhdGUsIG91dCBmaWx0ZXJTdGFydCk7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZSkpIERhdGVUaW1lLlRyeVBhcnNlKGVuZERhdGUsIG91dCBmaWx0ZXJFbmQpOwoKICAgICAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKGR5bmFtaWMgaXRlbSBpbiBpdGVtcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cnMgPSBpdGVtPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgICAgIGlmIChhdHRycyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGl0ZW1TdGFydFN0ciA9IGF0dHJzPy5zdGFydERhdGVUaW1lPy5Ub1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtU3RhcnRTdHIpKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgRGF0ZVRpbWUgaXRlbVN0YXJ0OwogICAgICAgICAgICAgICAgICAgIGlmICghRGF0ZVRpbWUuVHJ5UGFyc2UoaXRlbVN0YXJ0U3RyLCBvdXQgaXRlbVN0YXJ0KSkgY29udGludWU7CgogICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU3RhcnQgPCBmaWx0ZXJTdGFydCB8fCBpdGVtU3RhcnQgPiBmaWx0ZXJFbmQpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB0b3RhbENvdW50Kys7CgogICAgICAgICAgICAgICAgICAgIHN0cmluZyBzdGF0ZSA9IGl0ZW0/Lm1ldGFkYXRhPy5jdXJyZW50U3RhdGU/LlRvU3RyaW5nKCkgPz8gIiI7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09ICJtZWV0LWNvbXBsZXRlZCIgfHwgc3RhdGUgPT0gImNvbXBsZXRlZCIpIGNvbXBsZXRlZENvdW50Kys7CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gInVzZXItY2FuY2VsbGVkIiB8fCBzdGF0ZSA9PSAiYWR2aXNvci1jYW5jZWxsZWQiIHx8IHN0YXRlID09ICJ0aW1lb3V0IikgY2FuY2VsbGVkQ291bnQrKzsKICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSAiYWN0aXZlIiB8fCBzdGF0ZSA9PSAiY2FuLXN0YXJ0LW1lZXRpbmciIHx8IHN0YXRlID09ICJhY2NlcHQtdGVybXMiKSBhY3RpdmVDb3VudCsrOwogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHN0YXRlID09ICJpbi1tZWV0IikgaW5NZWV0Q291bnQrKzsKCiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGl0ZW1FbmRTdHIgPSBhdHRycz8uZW5kRGF0ZVRpbWU/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShpdGVtRW5kU3RyKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIERhdGVUaW1lIGl0ZW1FbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChEYXRlVGltZS5UcnlQYXJzZShpdGVtRW5kU3RyLCBvdXQgaXRlbUVuZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbER1cmF0aW9uTWludXRlcyArPSAoaXRlbUVuZCAtIGl0ZW1TdGFydCkuVG90YWxNaW51dGVzOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImFkdmlzb3Itc3RhdHMtc3VjY2VzcyIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgYWR2aXNvcklkLAogICAgICAgICAgICAgICAgICAgIHBlcmlvZCwKICAgICAgICAgICAgICAgICAgICBzdGFydERhdGUsCiAgICAgICAgICAgICAgICAgICAgZW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgICB0b3RhbFJlc2VydmF0aW9ucyA9IHRvdGFsQ291bnQsCiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkID0gY29tcGxldGVkQ291bnQsCiAgICAgICAgICAgICAgICAgICAgY2FuY2VsbGVkID0gY2FuY2VsbGVkQ291bnQsCiAgICAgICAgICAgICAgICAgICAgYWN0aXZlID0gYWN0aXZlQ291bnQsCiAgICAgICAgICAgICAgICAgICAgaW5NZWV0ID0gaW5NZWV0Q291bnQsCiAgICAgICAgICAgICAgICAgICAgYXZlcmFnZUR1cmF0aW9uTWludXRlcyA9IHRvdGFsQ291bnQgPiAwID8gTWF0aC5Sb3VuZCh0b3RhbER1cmF0aW9uTWludXRlcyAvIHRvdGFsQ291bnQsIDEpIDogMCwKICAgICAgICAgICAgICAgICAgICB0b3RhbER1cmF0aW9uTWludXRlcyA9IE1hdGguUm91bmQodG90YWxEdXJhdGlvbk1pbnV0ZXMsIDEpCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFkdmlzb3Itc3RhdHMiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJQUk9DRVNTSU5HX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gZXguTWVzc2FnZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhZHZpc29yLXN0YXRzIiwgImVycm9yIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBSZWFkUGFyYW0oU2NyaXB0Q29udGV4dCBjb250ZXh0LCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMsIG5hbWUpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgdmFsID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnNbbmFtZV07CiAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8gdmFsLlRvU3RyaW5nKCkgOiBudWxsOwogICAgfQp9Cg=="
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-available-slots",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"appointments",
|
|
9
|
+
"availability",
|
|
10
|
+
"slots",
|
|
11
|
+
"advisor",
|
|
12
|
+
"calendar"
|
|
13
|
+
],
|
|
14
|
+
"attributes": {
|
|
15
|
+
"scope": "I",
|
|
16
|
+
"task": {
|
|
17
|
+
"order": 1,
|
|
18
|
+
"task": {
|
|
19
|
+
"key": "get-available-slots-task",
|
|
20
|
+
"domain": "touch",
|
|
21
|
+
"version": "1.0.0",
|
|
22
|
+
"flow": "sys-tasks"
|
|
23
|
+
},
|
|
24
|
+
"mapping": {
|
|
25
|
+
"location": "./src/GetAvailableSlotsMapping.csx",
|
|
26
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgR2V0QXZhaWxhYmxlU2xvdHNUYXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpCi8vLyBRdWVyaWVzIGFic2VuY2UtZW50cnkgd29ya2Zsb3cgKHN0YXRlOiBjb21wbGV0ZSkgdmlhIERhcHIgc2VydmljZSBpbnZvY2F0aW9uIHRvIGdldAovLy8gcHVibGljIGhvbGlkYXlzLCB3b3JraW5nIGhvdXJzIGNoYW5nZXMsIGFuZCBwZXJzb25hbCBsZWF2ZXMuCi8vLyBUaGVuIGNhbGN1bGF0ZXMgYXZhaWxhYmxlIGFwcG9pbnRtZW50IHNsb3RzIGZvciB0aGUgZ2l2ZW4gYWR2aXNvciBhbmQgZGF0ZS4KLy8vCi8vLyBXb3JraW5nIGhvdXJzIHByaW9yaXR5OiBhZHZpc29yLXNwZWNpZmljID4gY29tcGFueS13aWRlIChhZHZpc29yPW51bGwpID4gbm8gaG91cnMKLy8vIEhhbGYtZGF5IHB1YmxpYyBob2xpZGF5cyBvbmx5IGJsb2NrIHRoZSBob2xpZGF5IGhvdXJzLCBub3QgdGhlIGVudGlyZSBkYXkuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBHZXRBdmFpbGFibGVTbG90c01hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGFwcElkID0gR2V0Q29uZmlnVmFsdWUoIkRBUFJfQVBQX0lEIik7CiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShhcHBJZCkpCiAgICAgICAgICAgIHNlcnZpY2VUYXNrLlNldEFwcElkKGFwcElkKTsKCiAgICAgICAgdmFyIGFkdmlzb3JJZCA9IGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzP1siYWR2aXNvcklkIl0/LlRvU3RyaW5nKCk7CiAgICAgICAgdmFyIGRhdGUgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bImRhdGUiXT8uVG9TdHJpbmcoKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3JJZCkgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZGF0ZSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAidmFsaWRhdGlvbi1lcnJvciIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiYWR2aXNvcklkIGFuZCBkYXRlIGFyZSByZXF1aXJlZCIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlZBTElEQVRJT05fRVJST1IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdmFyIHJlcXVlc3RlZERhdGUgPSBEYXRlVGltZS5QYXJzZShkYXRlKTsKICAgICAgICBpZiAocmVxdWVzdGVkRGF0ZS5EYXRlIDwgRGF0ZVRpbWUuVXRjTm93LkRhdGUpCiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudEV4Y2VwdGlvbigiRGF0ZSBjYW5ub3QgYmUgaW4gdGhlIHBhc3QuIiwgImRhdGUiKTsKCiAgICAgICAgdmFyIGZpbHRlckpzb24gPQogICAgICAgICAgICAie1wiYW5kXCI6WyIgKwogICAgICAgICAgICAie1wib3JcIjpbe1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImNvbXBsZXRlXCJ9fSx7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiY29tcGxldGUtd2l0aC10cmFuc2ZlclwifX1dfSwiICsKICAgICAgICAgICAgIntcIm9yXCI6WyIgKwogICAgICAgICAgICAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJhZHZpc29yXCI6e1wiZXFcIjpcIiIgKyBhZHZpc29ySWQgKyAiXCJ9fX0sIiArCiAgICAgICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImFic2VuY2VUeXBlXCI6e1wiZXFcIjpcInB1YmxpYy1ob2xpZGF5XCJ9fX0sIiArCiAgICAgICAgICAgICAgICAie1wiYXR0cmlidXRlc1wiOntcImFic2VuY2VUeXBlXCI6e1wiZXFcIjpcIndvcmtpbmctaG91cnMtY2hhbmdlXCJ9fX0iICsKICAgICAgICAgICAgIl19IiArCiAgICAgICAgICAgICJdfSI7CgogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJwYWdlU2l6ZT0xMDAiLAogICAgICAgICAgICAkImZpbHRlcj17ZmlsdGVySnNvbn0iCiAgICAgICAgfTsKCiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgYWR2aXNvcklkID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnM/WyJhZHZpc29ySWQiXT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGRhdGVTdHIgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bImRhdGUiXT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gR2V0QXBwb2ludG1lbnREdXJhdGlvbihjb250ZXh0KTsKCiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29ySWQpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGRhdGVTdHIpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJhZHZpc29ySWQgYW5kIGRhdGUgYXJlIHJlcXVpcmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlZBTElEQVRJT05fRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBhZHZpc29ySWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgPSBkYXRlU3RyCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXF1ZXN0ZWREYXRlID0gRGF0ZVRpbWUuUGFyc2UoZGF0ZVN0cik7CiAgICAgICAgICAgIHZhciBkYXlPZldlZWsgPSByZXF1ZXN0ZWREYXRlLkRheU9mV2Vlay5Ub1N0cmluZygpLlRvTG93ZXIoKTsKCiAgICAgICAgICAgIHZhciByZXNwb25zZSA9IGNvbnRleHQuQm9keTsKCiAgICAgICAgICAgIGlmIChyZXNwb25zZT8uaXNTdWNjZXNzID09IGZhbHNlKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgZXJyb3JUeXBlID0gQ2xhc3NpZnlTZXJ2aWNlRXJyb3IocmVzcG9uc2U/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiIik7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJzZXJ2aWNlLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZmV0Y2ggYWJzZW5jZSBlbnRyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlNFUlZJQ0VfRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGUgPSBlcnJvclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VJbmZvID0gbmV3CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcElkID0gcmVzcG9uc2U/Lm1ldGFkYXRhPy5hcHBJZD8uVG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSByZXNwb25zZT8ubWV0YWRhdGE/Lm1ldGhvZE5hbWU/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwVmVyYiA9IHJlc3BvbnNlPy5tZXRhZGF0YT8uaHR0cFZlcmI/LlRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFwcG9pbnRtZW50cyIsICJlcnJvciIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKCiAgICAgICAgICAgIHZhciBpbnN0YW5jZXMgPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICBpZiAoaXRlbXMgIT0gbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIGl0ZW0gaW4gaXRlbXMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2VzLkFkZChpdGVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHB1YmxpY0hvbGlkYXlzID0gbmV3IExpc3Q8ZHluYW1pYz4oKTsKICAgICAgICAgICAgdmFyIGFkdmlzb3JXb3JraW5nSG91cnMgPSBuZXcgTGlzdDxkeW5hbWljPigpOwogICAgICAgICAgICB2YXIgY29tcGFueVdvcmtpbmdIb3VycyA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CiAgICAgICAgICAgIHZhciBwZXJzb25hbExlYXZlcyA9IG5ldyBMaXN0PGR5bmFtaWM+KCk7CgogICAgICAgICAgICBmb3JlYWNoICh2YXIgaW5zdGFuY2UgaW4gaW5zdGFuY2VzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGluc3RhbmNlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgPT0gbnVsbCkgY29udGludWU7CgogICAgICAgICAgICAgICAgdmFyIGFic2VuY2VUeXBlID0gYXR0cmlidXRlcz8uYWJzZW5jZVR5cGU/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgICAgICB2YXIgYWR2aXNvciA9IEhhc1Byb3BlcnR5KGF0dHJpYnV0ZXMsICJhZHZpc29yIikgPyBhdHRyaWJ1dGVzPy5hZHZpc29yPy5Ub1N0cmluZygpIDogbnVsbDsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFic2VuY2VUeXBlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgInB1YmxpYy1ob2xpZGF5IjoKICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljSG9saWRheXMuQWRkKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAid29ya2luZy1ob3Vycy1jaGFuZ2UiOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3IpICYmIGFkdmlzb3IgPT0gYWR2aXNvcklkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2aXNvcldvcmtpbmdIb3Vycy5BZGQoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShhZHZpc29yKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhbnlXb3JraW5nSG91cnMuQWRkKGluc3RhbmNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAicGVyc29uYWwtbGVhdmUiIHdoZW4gYWR2aXNvciA9PSBhZHZpc29ySWQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFsTGVhdmVzLkFkZChpbnN0YW5jZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgInJlemVydmF0aW9uIiB3aGVuIGFkdmlzb3IgPT0gYWR2aXNvcklkOgogICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbExlYXZlcy5BZGQoaW5zdGFuY2UpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIHVuYXZhaWxhYmxlUmFuZ2VzID0gR2V0VW5hdmFpbGFibGVSYW5nZXMocGVyc29uYWxMZWF2ZXMsIHJlcXVlc3RlZERhdGUpOwoKICAgICAgICAgICAgLy8gSGFsZi1kYXkgLyBmdWxsLWRheSBwdWJsaWMgaG9saWRheSBoYW5kbGluZwogICAgICAgICAgICB2YXIgaG9saWRheVJhbmdlcyA9IEdldEhvbGlkYXlSYW5nZXMocHVibGljSG9saWRheXMsIHJlcXVlc3RlZERhdGUpOwogICAgICAgICAgICBpZiAoaG9saWRheVJhbmdlcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoaG9saWRheVJhbmdlcy5Db3VudCA9PSAxCiAgICAgICAgICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMSA9PSBUaW1lU3Bhbi5aZXJvCiAgICAgICAgICAgICAgICAgICAgJiYgaG9saWRheVJhbmdlc1swXS5JdGVtMiA+PSBuZXcgVGltZVNwYW4oMjMsIDU5LCAwKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgS2V5ID0gInB1YmxpYy1ob2xpZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9IG5ldyB7IGF2YWlsYWJsZVNsb3RzID0gbmV3IExpc3Q8c3RyaW5nPigpIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiaG9saWRheSIgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHVuYXZhaWxhYmxlUmFuZ2VzLkFkZFJhbmdlKGhvbGlkYXlSYW5nZXMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBXb3JraW5nIGhvdXJzIHByaW9yaXR5OiBhZHZpc29yLXNwZWNpZmljID4gY29tcGFueS13aWRlCiAgICAgICAgICAgIHZhciB3b3JraW5nSG91cnMgPSBHZXRXb3JraW5nSG91cnNGb3JEYXkoYWR2aXNvcldvcmtpbmdIb3VycywgZGF5T2ZXZWVrKTsKICAgICAgICAgICAgaWYgKHdvcmtpbmdIb3VycyA9PSBudWxsIHx8IHdvcmtpbmdIb3Vycy5Db3VudCA9PSAwKQogICAgICAgICAgICAgICAgd29ya2luZ0hvdXJzID0gR2V0V29ya2luZ0hvdXJzRm9yRGF5KGNvbXBhbnlXb3JraW5nSG91cnMsIGRheU9mV2Vlayk7CgogICAgICAgICAgICBpZiAod29ya2luZ0hvdXJzID09IG51bGwgfHwgd29ya2luZ0hvdXJzLkNvdW50ID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gIm5vLXdvcmtpbmctaG91cnMiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBhdmFpbGFibGVTbG90cyA9IG5ldyBMaXN0PHN0cmluZz4oKSB9LAogICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiY2xvc2VkIiB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdmFyIGF2YWlsYWJsZVNsb3RzID0gQ2FsY3VsYXRlQXZhaWxhYmxlU2xvdHMod29ya2luZ0hvdXJzLCB1bmF2YWlsYWJsZVJhbmdlcywgZHVyYXRpb24pOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImF2YWlsYWJsZS1zbG90cy1zdWNjZXNzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgeyBhdmFpbGFibGVTbG90cyB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFwcG9pbnRtZW50cyIsICJhdmFpbGFiaWxpdHkiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJvdXRwdXQtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJQUk9DRVNTSU5HX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gZXguTWVzc2FnZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiZXJyb3IiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgICNyZWdpb24gSGVscGVyIE1ldGhvZHMKCiAgICBwcml2YXRlIHN0cmluZyBDbGFzc2lmeVNlcnZpY2VFcnJvcihzdHJpbmcgZXJyb3JNZXNzYWdlKQogICAgewogICAgICAgIGlmIChlcnJvck1lc3NhZ2UuQ29udGFpbnMoInRpbWVvdXQiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgcmV0dXJuICJ0aW1lb3V0IjsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLkNvbnRhaW5zKCJ1bmF1dGhvcml6ZWQiLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgcmV0dXJuICJhdXRoZW50aWNhdGlvbiI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygiZm9yYmlkZGVuIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAiYXV0aG9yaXphdGlvbiI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygibm90IGZvdW5kIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAibm90LWZvdW5kIjsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLkNvbnRhaW5zKCJzZXJ2aWNlIHVuYXZhaWxhYmxlIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAic2VydmljZS11bmF2YWlsYWJsZSI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygiY29ubmVjdGlvbiIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICByZXR1cm4gImNvbm5lY3Rpb24tZXJyb3IiOwoKICAgICAgICByZXR1cm4gImdlbmVyYWwtZXJyb3IiOwogICAgfQoKICAgIHByaXZhdGUgaW50IEdldEFwcG9pbnRtZW50RHVyYXRpb24oU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIGNvbnN0IGludCBkZWZhdWx0RHVyYXRpb24gPSAzMDsKCiAgICAgICAgaWYgKGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzICE9IG51bGwgJiYgSGFzUHJvcGVydHkoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMsICJkdXJhdGlvbiIpKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGR1cmF0aW9uUGFyYW0gPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVyc1siZHVyYXRpb24iXTsKICAgICAgICAgICAgaW50IHF1ZXJ5RHVyYXRpb24gPSAwOwogICAgICAgICAgICBpZiAoZHVyYXRpb25QYXJhbSAhPSBudWxsICYmIGludC5UcnlQYXJzZShkdXJhdGlvblBhcmFtLlRvU3RyaW5nKCksIG91dCBxdWVyeUR1cmF0aW9uKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuIHF1ZXJ5RHVyYXRpb247CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBjb25maWdEdXJhdGlvbiA9IEdldENvbmZpZ1ZhbHVlKCJBcHBvaW50bWVudHM6RGVmYXVsdER1cmF0aW9uIik7CiAgICAgICAgaW50IGNvbmZpZ0R1cmF0aW9uVmFsdWUgPSAwOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoY29uZmlnRHVyYXRpb24pICYmIGludC5UcnlQYXJzZShjb25maWdEdXJhdGlvbiwgb3V0IGNvbmZpZ0R1cmF0aW9uVmFsdWUpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ0R1cmF0aW9uVmFsdWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZGVmYXVsdER1cmF0aW9uOwogICAgfQoKICAgICNlbmRyZWdpb24KCiAgICAjcmVnaW9uIEJ1c2luZXNzIExvZ2ljIE1ldGhvZHMKCiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gUmV0dXJucyB1bmF2YWlsYWJsZSB0aW1lIHJhbmdlcyBmb3IgcHVibGljIGhvbGlkYXlzIG9uIHRoZSByZXF1ZXN0ZWQgZGF0ZS4KICAgIC8vLyBudWxsID0gbm8gaG9saWRheSBvbiB0aGlzIGRhdGUuCiAgICAvLy8gRnVsbC1kYXkgaG9saWRheTogc2luZ2xlIHJhbmdlIDAwOjAwLTIzOjU5LgogICAgLy8vIEhhbGYtZGF5IGhvbGlkYXk6IHBhcnRpYWwgcmFuZ2UgKGUuZy4sIDAwOjAwLTEzOjAwKS4KICAgIC8vLyA8L3N1bW1hcnk+CiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0SG9saWRheVJhbmdlcyhMaXN0PGR5bmFtaWM+IGhvbGlkYXlzLCBEYXRlVGltZSBkYXRlKQogICAgewogICAgICAgIHZhciByYW5nZXMgPSBuZXcgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PigpOwogICAgICAgIGJvb2wgaGFzSG9saWRheSA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICh2YXIgaG9saWRheSBpbiBob2xpZGF5cykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBob2xpZGF5RGF0YSA9IGhvbGlkYXk/LmF0dHJpYnV0ZXM7CiAgICAgICAgICAgIGlmIChob2xpZGF5RGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHN0cmluZyBzdGFydERhdGVUaW1lU3RyID0gbnVsbDsKICAgICAgICAgICAgc3RyaW5nIGVuZERhdGVUaW1lU3RyID0gbnVsbDsKCiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShob2xpZGF5RGF0YSwgInN0YXJ0RGF0ZVRpbWUiKSAmJiBob2xpZGF5RGF0YS5zdGFydERhdGVUaW1lICE9IG51bGwpCiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lU3RyID0gaG9saWRheURhdGEuc3RhcnREYXRlVGltZS5Ub1N0cmluZygpOwoKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGhvbGlkYXlEYXRhLCAiZW5kRGF0ZVRpbWUiKSAmJiBob2xpZGF5RGF0YS5lbmREYXRlVGltZSAhPSBudWxsKQogICAgICAgICAgICAgICAgZW5kRGF0ZVRpbWVTdHIgPSBob2xpZGF5RGF0YS5lbmREYXRlVGltZS5Ub1N0cmluZygpOwoKICAgICAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZVRpbWVTdHIpIHx8IHN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGVUaW1lU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIHN0YXJ0RGF0ZVRpbWUgPSBEYXRlVGltZS5QYXJzZShzdGFydERhdGVUaW1lU3RyKTsKICAgICAgICAgICAgdmFyIGVuZERhdGVUaW1lID0gRGF0ZVRpbWUuUGFyc2UoZW5kRGF0ZVRpbWVTdHIpOwoKICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA8IHN0YXJ0RGF0ZVRpbWUuRGF0ZSB8fCBkYXRlLkRhdGUgPiBlbmREYXRlVGltZS5EYXRlKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICBoYXNIb2xpZGF5ID0gdHJ1ZTsKCiAgICAgICAgICAgIGlmIChzdGFydERhdGVUaW1lLkRhdGUgIT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA9PSBzdGFydERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0ZS5EYXRlID09IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBoYXNIb2xpZGF5ID8gcmFuZ2VzIDogbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8b2JqZWN0PiBHZXRXb3JraW5nSG91cnNGb3JEYXkoTGlzdDxkeW5hbWljPiB3b3JraW5nSG91cnNDaGFuZ2VzLCBzdHJpbmcgZGF5T2ZXZWVrKQogICAgewogICAgICAgIGZvcmVhY2ggKHZhciBjaGFuZ2UgaW4gd29ya2luZ0hvdXJzQ2hhbmdlcykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBjaGFuZ2VEYXRhID0gY2hhbmdlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICBpZiAoY2hhbmdlRGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgIHZhciBjdXN0b21XSCA9IGNoYW5nZURhdGE/LmN1c3RvbVdvcmtpbmdIb3VyczsKICAgICAgICAgICAgaWYgKGN1c3RvbVdIID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGRheUhvdXJzID0gR2V0RGF5SG91cnNGcm9tQ3VzdG9tKGN1c3RvbVdILCBkYXlPZldlZWspOwogICAgICAgICAgICBpZiAoZGF5SG91cnMgIT0gbnVsbCkgcmV0dXJuIGRheUhvdXJzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PG9iamVjdD4gR2V0RGF5SG91cnNGcm9tQ3VzdG9tKGR5bmFtaWMgY3VzdG9tV0gsIHN0cmluZyBkYXlPZldlZWspCiAgICB7CiAgICAgICAgZHluYW1pYyBkYXlIb3VycyA9IG51bGw7CiAgICAgICAgc3dpdGNoIChkYXlPZldlZWspCiAgICAgICAgewogICAgICAgICAgICBjYXNlICJtb25kYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5tb25kYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJ0dWVzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8udHVlc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIndlZG5lc2RheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LndlZG5lc2RheTsgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRodXJzZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8udGh1cnNkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJmcmlkYXkiOiBkYXlIb3VycyA9IGN1c3RvbVdIPy5mcmlkYXk7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJzYXR1cmRheSI6IGRheUhvdXJzID0gY3VzdG9tV0g/LnNhdHVyZGF5OyBicmVhazsKICAgICAgICAgICAgY2FzZSAic3VuZGF5IjogZGF5SG91cnMgPSBjdXN0b21XSD8uc3VuZGF5OyBicmVhazsKICAgICAgICB9CgogICAgICAgIGlmIChkYXlIb3VycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgICAgdmFyIHJlc3VsdCA9IG5ldyBMaXN0PG9iamVjdD4oKTsKICAgICAgICBmb3JlYWNoICh2YXIgcmFuZ2UgaW4gZGF5SG91cnMpCiAgICAgICAgewogICAgICAgICAgICB2YXIgc3RhcnQgPSByYW5nZT8uc3RhcnQ/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIHZhciBlbmQgPSByYW5nZT8uZW5kPy5Ub1N0cmluZygpOwogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0KSAmJiAhc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmVzdWx0LkFkZChuZXcgeyBzdGFydCwgZW5kIH0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQuQ291bnQgPiAwID8gcmVzdWx0IDogbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4gR2V0VW5hdmFpbGFibGVSYW5nZXMoTGlzdDxkeW5hbWljPiBwZXJzb25hbExlYXZlcywgRGF0ZVRpbWUgZGF0ZSkKICAgIHsKICAgICAgICB2YXIgcmFuZ2VzID0gbmV3IExpc3Q8VHVwbGU8VGltZVNwYW4sIFRpbWVTcGFuPj4oKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIGxlYXZlIGluIHBlcnNvbmFsTGVhdmVzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGxlYXZlRGF0YSA9IGxlYXZlPy5hdHRyaWJ1dGVzOwogICAgICAgICAgICBpZiAobGVhdmVEYXRhID09IG51bGwpIGNvbnRpbnVlOwoKICAgICAgICAgICAgc3RyaW5nIHN0YXJ0RGF0ZVRpbWVTdHIgPSBudWxsOwogICAgICAgICAgICBzdHJpbmcgZW5kRGF0ZVRpbWVTdHIgPSBudWxsOwoKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KGxlYXZlRGF0YSwgInN0YXJ0RGF0ZVRpbWUiKSAmJiBsZWF2ZURhdGEuc3RhcnREYXRlVGltZSAhPSBudWxsKQogICAgICAgICAgICAgICAgc3RhcnREYXRlVGltZVN0ciA9IGxlYXZlRGF0YS5zdGFydERhdGVUaW1lLlRvU3RyaW5nKCk7CgogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkobGVhdmVEYXRhLCAiZW5kRGF0ZVRpbWUiKSAmJiBsZWF2ZURhdGEuZW5kRGF0ZVRpbWUgIT0gbnVsbCkKICAgICAgICAgICAgICAgIGVuZERhdGVUaW1lU3RyID0gbGVhdmVEYXRhLmVuZERhdGVUaW1lLlRvU3RyaW5nKCk7CgogICAgICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoc3RhcnREYXRlVGltZVN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kRGF0ZVRpbWVTdHIpKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICB2YXIgc3RhcnREYXRlVGltZSA9IERhdGVUaW1lLlBhcnNlKHN0YXJ0RGF0ZVRpbWVTdHIpOwogICAgICAgICAgICB2YXIgZW5kRGF0ZVRpbWUgPSBEYXRlVGltZS5QYXJzZShlbmREYXRlVGltZVN0cik7CgogICAgICAgICAgICBpZiAoZGF0ZS5EYXRlIDwgc3RhcnREYXRlVGltZS5EYXRlIHx8IGRhdGUuRGF0ZSA+IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGlmIChzdGFydERhdGVUaW1lLkRhdGUgIT0gZW5kRGF0ZVRpbWUuRGF0ZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYgKGRhdGUuRGF0ZSA9PSBzdGFydERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoc3RhcnREYXRlVGltZS5UaW1lT2ZEYXksIG5ldyBUaW1lU3BhbigyMywgNTksIDU5KSkpOwogICAgICAgICAgICAgICAgZWxzZSBpZiAoZGF0ZS5EYXRlID09IGVuZERhdGVUaW1lLkRhdGUpCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLkFkZChUdXBsZS5DcmVhdGUoVGltZVNwYW4uWmVybywgbmV3IFRpbWVTcGFuKDIzLCA1OSwgNTkpKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByYW5nZXMuQWRkKFR1cGxlLkNyZWF0ZShzdGFydERhdGVUaW1lLlRpbWVPZkRheSwgZW5kRGF0ZVRpbWUuVGltZU9mRGF5KSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiByYW5nZXM7CiAgICB9CgogICAgcHJpdmF0ZSBMaXN0PHN0cmluZz4gQ2FsY3VsYXRlQXZhaWxhYmxlU2xvdHMoTGlzdDxvYmplY3Q+IHdvcmtpbmdIb3VycywgTGlzdDxUdXBsZTxUaW1lU3BhbiwgVGltZVNwYW4+PiB1bmF2YWlsYWJsZVJhbmdlcywgaW50IGR1cmF0aW9uTWludXRlcykKICAgIHsKICAgICAgICB2YXIgc2xvdHMgPSBuZXcgTGlzdDxzdHJpbmc+KCk7CiAgICAgICAgdmFyIGR1cmF0aW9uID0gVGltZVNwYW4uRnJvbU1pbnV0ZXMoZHVyYXRpb25NaW51dGVzKTsKCiAgICAgICAgZm9yZWFjaCAodmFyIHdoIGluIHdvcmtpbmdIb3VycykKICAgICAgICB7CiAgICAgICAgICAgIGR5bmFtaWMgd2hEeW4gPSB3aDsKICAgICAgICAgICAgdmFyIHN0YXJ0U3RyID0gd2hEeW4/LnN0YXJ0Py5Ub1N0cmluZygpOwogICAgICAgICAgICB2YXIgZW5kU3RyID0gd2hEeW4/LmVuZD8uVG9TdHJpbmcoKTsKCiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JFbXB0eShzdGFydFN0cikgfHwgc3RyaW5nLklzTnVsbE9yRW1wdHkoZW5kU3RyKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIHdoU3RhcnQgPSBUaW1lU3Bhbi5QYXJzZShzdGFydFN0cik7CiAgICAgICAgICAgIHZhciB3aEVuZCA9IFRpbWVTcGFuLlBhcnNlKGVuZFN0cik7CgogICAgICAgICAgICBpZiAod2hTdGFydCA9PSB3aEVuZCkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB3aFN0YXJ0OwogICAgICAgICAgICB3aGlsZSAoY3VycmVudCArIGR1cmF0aW9uIDw9IHdoRW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgc2xvdFN0YXJ0ID0gY3VycmVudDsKICAgICAgICAgICAgICAgIHZhciBzbG90RW5kID0gY3VycmVudCArIGR1cmF0aW9uOwoKICAgICAgICAgICAgICAgIGJvb2wgaXNBdmFpbGFibGUgPSB0cnVlOwogICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIHVyIGluIHVuYXZhaWxhYmxlUmFuZ2VzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChzbG90U3RhcnQgPCB1ci5JdGVtMiAmJiBzbG90RW5kID4gdXIuSXRlbTEpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpc0F2YWlsYWJsZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGlzQXZhaWxhYmxlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHNsb3RzLkFkZCgkIntzbG90U3RhcnQ6aGhcXDptbX0te3Nsb3RFbmQ6aGhcXDptbX0iKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudCArIGR1cmF0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2xvdHM7CiAgICB9CgogICAgI2VuZHJlZ2lvbgp9Cg=="
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# Get Available Slots Function - HTTP Test File
|
|
3
|
+
#
|
|
4
|
+
# This file tests the get-available-slots function which:
|
|
5
|
+
# - Queries absence-entry instances in "complete" state via DaprServiceTask
|
|
6
|
+
# - Filter: currentState eq complete AND (advisor eq advisorId OR absenceType eq public-holiday OR absenceType eq working-hours-change)
|
|
7
|
+
# - Working hours priority: advisor-specific > company-wide (advisor=null)
|
|
8
|
+
# - Half-day public holidays only block holiday hours, not the entire day
|
|
9
|
+
# - Returns available appointment slots for a given advisor and date
|
|
10
|
+
#
|
|
11
|
+
# Prerequisites:
|
|
12
|
+
# 1. vNext Runtime running on localhost:4201
|
|
13
|
+
# 2. Some absence-entry instances (use absence-entry.http)
|
|
14
|
+
###############################################################################
|
|
15
|
+
|
|
16
|
+
@baseUrl = http://localhost:4201
|
|
17
|
+
@apiVersion = 1
|
|
18
|
+
@domain = touch
|
|
19
|
+
|
|
20
|
+
###############################################################################
|
|
21
|
+
# Call get-available-slots function
|
|
22
|
+
###############################################################################
|
|
23
|
+
|
|
24
|
+
### Get Available Slots - by advisor and date
|
|
25
|
+
# @name getAvailableSlots
|
|
26
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/functions/get-available-slots?advisorId=touch.portfolio-manager.pm-001&date=2026-02-02&duration=30
|
|
27
|
+
Accept: application/json
|
|
28
|
+
Accept-Language: tr-TR
|
|
29
|
+
X-Request-Id: {{$guid}}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-chat-rooms",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"chat",
|
|
9
|
+
"rooms",
|
|
10
|
+
"permanent"
|
|
11
|
+
],
|
|
12
|
+
"attributes": {
|
|
13
|
+
"scope": "F",
|
|
14
|
+
"task": {
|
|
15
|
+
"order": 1,
|
|
16
|
+
"task": {
|
|
17
|
+
"key": "query-chat-room-instances",
|
|
18
|
+
"domain": "touch",
|
|
19
|
+
"version": "1.0.0",
|
|
20
|
+
"flow": "sys-tasks"
|
|
21
|
+
},
|
|
22
|
+
"mapping": {
|
|
23
|
+
"location": "./src/GetChatRoomsMapping.csx",
|
|
24
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgcXVlcnktY2hhdC1yb29tLWluc3RhbmNlcyBEYXByU2VydmljZVRhc2sgKFR5cGUgMykuCi8vLyBGbG93LWxldmVsIGZ1bmN0aW9uIChzY29wZTogRikgLS0gbm8gaW5zdGFuY2UgY29udGV4dC4KLy8vIFJlYWRzICJ1c2VyIiBPUiAiYWR2aXNvciIgZnJvbSBxdWVyeSBwYXJhbWV0ZXJzIChtdXR1YWxseSBleGNsdXNpdmUpLgovLy8gRm9yIGFkdmlzb3I6IHNlcnZlciBmaWx0ZXIgYWR2aXNvcklkPVggT1IgbWVtYmVycyBjb250YWlucyB7IHJvbGU6ICJtZW1iZXIiLCBtZW1iZXJJZDogWCB9LgovLy8gRm9yIHVzZXI6IHJldHVybnMgcm9vbXMgd2hlcmUgdXNlcj1YIChzZXJ2ZXItc2lkZSBmaWx0ZXIpLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgR2V0Q2hhdFJvb21zTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICB2YXIgdXNlciA9IFJlYWRQYXJhbShjb250ZXh0LCAidXNlciIpOwogICAgICAgIHZhciBhZHZpc29yID0gUmVhZFBhcmFtKGNvbnRleHQsICJhZHZpc29yIik7CgogICAgICAgIGJvb2wgaGFzVXNlciA9ICFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpOwogICAgICAgIGJvb2wgaGFzQWR2aXNvciA9ICFzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGFkdmlzb3IpOwoKICAgICAgICBpZiAoaGFzVXNlciAmJiBoYXNBZHZpc29yKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVkFMSURBVElPTl9FUlJPUjogdXNlciBhbmQgYWR2aXNvciBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLCBwcm92aWRlIG9ubHkgb25lIik7CgogICAgICAgIGlmICghaGFzVXNlciAmJiAhaGFzQWR2aXNvcikKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlZBTElEQVRJT05fRVJST1I6IGVpdGhlciB1c2VyIG9yIGFkdmlzb3IgcXVlcnkgcGFyYW1ldGVyIGlzIHJlcXVpcmVkIik7CgogICAgICAgIHN0cmluZyBhdHRyaWJ1dGVGaWx0ZXI7CiAgICAgICAgaWYgKGhhc1VzZXIpCiAgICAgICAgewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IHVzZXIuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyID0gIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyBlc2NhcGVkICsgIlwifX19IjsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGVzY2FwZWQgPSBhZHZpc29yLlJlcGxhY2UoIlxcIiwgIlxcXFwiKS5SZXBsYWNlKCJcIiIsICJcXFwiIik7CiAgICAgICAgICAgIGF0dHJpYnV0ZUZpbHRlciA9ICJ7XCJhdHRyaWJ1dGVzXCI6e1wiYWR2aXNvcklkXCI6e1wiZXFcIjpcIiIgKyBlc2NhcGVkICsgIlwifX19IjsKCiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZUZpbHRlciA9ICJ7XCJvclwiOlsiICsKICAgICAgICAgICAgLy8gICAgICJ7XCJhdHRyaWJ1dGVzXCI6e1wiYWR2aXNvcklkXCI6e1wiZXFcIjpcIiIgKyBlc2NhcGVkICsgIlwifX19LCIgKwogICAgICAgICAgICAvLyAgICAgIntcImF0dHJpYnV0ZXNcIjp7XCJtZW1iZXJzXCI6e1wiY29udGFpbnNcIjp7XCJyb2xlXCI6XCJtZW1iZXJcIixcIm1lbWJlcklkXCI6XCIiICsgZXNjYXBlZCArICJcIn19fSIgKwogICAgICAgICAgICAvLyAgICAgIl19IjsKICAgICAgICB9CgogICAgICAgIHZhciByb29tVHlwZSA9IFJlYWRQYXJhbShjb250ZXh0LCAicm9vbVR5cGUiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPcldoaXRlU3BhY2Uocm9vbVR5cGUpKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGVzY2FwZWRUeXBlID0gcm9vbVR5cGUuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICAgICAgYXR0cmlidXRlRmlsdGVyID0gIntcImFuZFwiOlsiICsgYXR0cmlidXRlRmlsdGVyICsgIix7XCJhdHRyaWJ1dGVzXCI6e1wicm9vbVR5cGVcIjp7XCJlcVwiOlwiIiArIGVzY2FwZWRUeXBlICsgIlwifX19XX0iOwogICAgICAgIH0KCiAgICAgICAgdmFyIHN0YXRlID0gUmVhZFBhcmFtKGNvbnRleHQsICJzdGF0ZSIpOwogICAgICAgIHN0cmluZyBzdGF0ZUZpbHRlcjsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShzdGF0ZSkpCiAgICAgICAgewogICAgICAgICAgICBzdGF0ZUZpbHRlciA9ICJ7XCJvclwiOlt7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYWN0aXZhdGVkXCJ9fSx7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiZGVhY3RpdmF0ZWRcIn19XX0iOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICB2YXIgZXNjYXBlZFN0YXRlID0gc3RhdGUuUmVwbGFjZSgiXFwiLCAiXFxcXCIpLlJlcGxhY2UoIlwiIiwgIlxcXCIiKTsKICAgICAgICAgICAgc3RhdGVGaWx0ZXIgPSAie1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcIiIgKyBlc2NhcGVkU3RhdGUgKyAiXCJ9fSI7CiAgICAgICAgfQoKICAgICAgICB2YXIgZmlsdGVyQm9keSA9ICJ7XCJhbmRcIjpbIiArIGF0dHJpYnV0ZUZpbHRlciArICIsIiArIHN0YXRlRmlsdGVyICsgIl19IjsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICAicGFnZVNpemU9MTAwIiwKICAgICAgICAgICAgImZpbHRlcj0iICsgZmlsdGVyQm9keQogICAgICAgIH07CgogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJTZXJ2aWNlIGNhbGwgZmFpbGVkIjsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gImdldC1jaGF0LXJvb21zLWZhaWx1cmUiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiU0VSVklDRV9FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgICAgIHJvb21zID0gbmV3IExpc3Q8b2JqZWN0PigpCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiY2hhdCIsICJyb29tcyIsICJlcnJvciIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YTsKICAgICAgICAgICAgdmFyIGl0ZW1zID0gcmVzcG9uc2VEYXRhPy5pdGVtczsKICAgICAgICAgICAgdmFyIHJvb21zID0gbmV3IExpc3Q8b2JqZWN0PigpOwoKICAgICAgICAgICAgaWYgKGl0ZW1zICE9IG51bGwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGl0ZW1zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIC8vIFJ1bnRpbWUgbWF5IGV4cG9zZSBpbnN0YW5jZSBwYXlsb2FkIGFzICJhdHRyaWJ1dGVzIiBvciAiZGF0YSIKICAgICAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlcyA9IGl0ZW0/LmF0dHJpYnV0ZXMgPz8gaXRlbT8uZGF0YTsKICAgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgdmFyIG1ldGFkYXRhID0gaXRlbT8ubWV0YWRhdGE7CiAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGN1cnJlbnRTdGF0ZSA9IG1ldGFkYXRhICE9IG51bGwgPyBHZXRTdHJpbmcobWV0YWRhdGEsICJjdXJyZW50U3RhdGUiKSA6IG51bGw7CgogICAgICAgICAgICAgICAgICAgIHN0cmluZyByb29tSWQgPSBudWxsOwogICAgICAgICAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShhdHRyaWJ1dGVzLCAiY2hhdEludGVncmF0aW9uIikgJiYgYXR0cmlidXRlcy5jaGF0SW50ZWdyYXRpb24gIT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgcm9vbUlkID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMuY2hhdEludGVncmF0aW9uLCAicm9vbUlkIik7CgogICAgICAgICAgICAgICAgICAgIHZhciBtZW1iZXJzID0gbmV3IExpc3Q8b2JqZWN0PigpOwogICAgICAgICAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShhdHRyaWJ1dGVzLCAibWVtYmVycyIpICYmIGF0dHJpYnV0ZXMubWVtYmVycyAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAodmFyIG0gaW4gYXR0cmlidXRlcy5tZW1iZXJzKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWlkID0gR2V0U3RyaW5nKG0sICJtZW1iZXJJZCIpID8/IEdldFN0cmluZyhtLCAiYWR2aXNvcklkIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLkFkZChuZXcgeyBtZW1iZXJJZCA9IG1pZCwgcm9sZSA9IEdldFN0cmluZyhtLCAicm9sZSIpIH0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICB2YXIgaW5zdGFuY2VLZXkgPSBHZXRTdHJpbmcoaXRlbSwgImtleSIpOwogICAgICAgICAgICAgICAgICAgIHJvb21zLkFkZChuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gR2V0U3RyaW5nKGl0ZW0sICJpZCIpID8/IGluc3RhbmNlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUtleSA9IGluc3RhbmNlS2V5LAogICAgICAgICAgICAgICAgICAgICAgICB1c2VyID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMsICJ1c2VyIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGFkdmlzb3JUeXBlID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMsICJhZHZpc29yVHlwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICBhZHZpc29ySWQgPSBHZXRTdHJpbmcoYXR0cmlidXRlcywgImFkdmlzb3JJZCIpLAogICAgICAgICAgICAgICAgICAgICAgICByb29tSWQgPSByb29tSWQsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IEdldFN0cmluZyhhdHRyaWJ1dGVzLCAic3RhdHVzIiksCiAgICAgICAgICAgICAgICAgICAgICAgIHJvb21UeXBlID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMsICJyb29tVHlwZSIpLAogICAgICAgICAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMsICJzdGFydERhdGVUaW1lIiksCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZERhdGVUaW1lID0gR2V0U3RyaW5nKGF0dHJpYnV0ZXMsICJlbmREYXRlVGltZSIpLAogICAgICAgICAgICAgICAgICAgICAgICBtZW1iZXJzID0gbWVtYmVycywKICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGEgPSBjdXJyZW50U3RhdGUgIT0gbnVsbCA/IG5ldyB7IGN1cnJlbnRTdGF0ZSB9IDogbnVsbAogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAiZ2V0LWNoYXQtcm9vbXMtc3VjY2VzcyIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3IHsgcm9vbXMgPSByb29tcyB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImNoYXQiLCAicm9vbXMiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJnZXQtY2hhdC1yb29tcy1lcnJvciIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSAiSW50ZXJuYWwgcHJvY2Vzc2luZyBlcnJvciIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlBST0NFU1NJTkdfRVJST1IiLAogICAgICAgICAgICAgICAgICAgIGVycm9yRGVzY3JpcHRpb24gPSBleC5NZXNzYWdlLAogICAgICAgICAgICAgICAgICAgIHJvb21zID0gbmV3IExpc3Q8b2JqZWN0PigpCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImNoYXQiLCAicm9vbXMiLCAiZXJyb3IiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIFJlYWRQYXJhbShTY3JpcHRDb250ZXh0IGNvbnRleHQsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycyA9PSBudWxsIHx8ICFIYXNQcm9wZXJ0eShjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycywgbmFtZSkpCiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIHZhciB2YWwgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVyc1tuYW1lXTsKICAgICAgICByZXR1cm4gdmFsICE9IG51bGwgPyB2YWwuVG9TdHJpbmcoKSA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9Cn0K"
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# get-chat-rooms - Flow-level Function (scope: F)
|
|
3
|
+
#
|
|
4
|
+
# Queries chat-room workflow instances filtered by user OR advisor.
|
|
5
|
+
# Parameters are mutually exclusive: provide only one.
|
|
6
|
+
# Returns structured room list from instanceData (instanceKey, user,
|
|
7
|
+
# advisorType, advisorId, roomId, currentState, roomType, startDateTime,
|
|
8
|
+
# endDateTime, members).
|
|
9
|
+
#
|
|
10
|
+
# Optional roomType filter: permanent | rezervation
|
|
11
|
+
#
|
|
12
|
+
# No Matrix API calls -- all data comes from chat-room instances.
|
|
13
|
+
#
|
|
14
|
+
# Prerequisites:
|
|
15
|
+
# 1. vNext Runtime running (e.g. localhost:4201)
|
|
16
|
+
# 2. At least one chat-room instance exists
|
|
17
|
+
###############################################################################
|
|
18
|
+
|
|
19
|
+
@baseUrl = http://localhost:4201
|
|
20
|
+
@apiVersion = 1
|
|
21
|
+
@domain = touch
|
|
22
|
+
@user = core.user.user-001
|
|
23
|
+
@advisor = touch.portfolio-manager.pm-001
|
|
24
|
+
|
|
25
|
+
###############################################################################
|
|
26
|
+
# Get Chat Rooms by User
|
|
27
|
+
###############################################################################
|
|
28
|
+
|
|
29
|
+
### Get Chat Rooms by User - Lists all permanent chat rooms for a user
|
|
30
|
+
# Flow-level function (scope: F) on chat-room workflow.
|
|
31
|
+
# Returns rooms array with instanceKey, user, advisorType, advisorId, roomId, currentState.
|
|
32
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/chat-room/functions/get-chat-rooms?user={{user}}&pageSize=1
|
|
33
|
+
Accept: application/json
|
|
34
|
+
Accept-Language: tr-TR
|
|
35
|
+
X-Request-Id: {{$guid}}
|
|
36
|
+
|
|
37
|
+
###############################################################################
|
|
38
|
+
# Get Chat Rooms by Advisor
|
|
39
|
+
###############################################################################
|
|
40
|
+
|
|
41
|
+
### Get Chat Rooms by Advisor - Lists all chat rooms for an advisor
|
|
42
|
+
# Flow-level function (scope: F) on chat-room workflow.
|
|
43
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/chat-room/functions/get-chat-rooms?advisor={{advisor}}&pageSize=1
|
|
44
|
+
Accept: application/json
|
|
45
|
+
Accept-Language: tr-TR
|
|
46
|
+
X-Request-Id: {{$guid}}
|
|
47
|
+
|
|
48
|
+
###############################################################################
|
|
49
|
+
# Get Chat Rooms by User + roomType filter
|
|
50
|
+
###############################################################################
|
|
51
|
+
|
|
52
|
+
### Get Chat Rooms by User (permanent only)
|
|
53
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/chat-room/functions/get-chat-rooms?user={{user}}&roomType=permanent&pageSize=1
|
|
54
|
+
Accept: application/json
|
|
55
|
+
Accept-Language: tr-TR
|
|
56
|
+
X-Request-Id: {{$guid}}
|
|
57
|
+
|
|
58
|
+
### Get Chat Rooms by User (rezervation only)
|
|
59
|
+
GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/chat-room/functions/get-chat-rooms?user={{user}}&roomType=rezervation&pageSize=1
|
|
60
|
+
Accept: application/json
|
|
61
|
+
Accept-Language: tr-TR
|
|
62
|
+
X-Request-Id: {{$guid}}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-customer-info",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"customer",
|
|
9
|
+
"segment"
|
|
10
|
+
],
|
|
11
|
+
"attributes": {
|
|
12
|
+
"scope": "I",
|
|
13
|
+
"task": {
|
|
14
|
+
"order": 1,
|
|
15
|
+
"task": {
|
|
16
|
+
"key": "get-customer-info-task",
|
|
17
|
+
"domain": "touch",
|
|
18
|
+
"version": "1.0.0",
|
|
19
|
+
"flow": "sys-tasks"
|
|
20
|
+
},
|
|
21
|
+
"mapping": {
|
|
22
|
+
"location": "./src/GetCustomerInfoMapping.csx",
|
|
23
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwovLy8gPHN1bW1hcnk+Ci8vLyBNYXBwaW5nIGZvciBHZXRDdXN0b21lckluZm9UYXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpCi8vLyBGZXRjaGVzIGN1c3RvbWVyIGluZm9ybWF0aW9uIChuYW1lLCBzdXJuYW1lLCBzZWdtZW50KSBmcm9tIHRoZSBVc2VyU2VnbWVudEJhc2VVcmwgZW5kcG9pbnQuCi8vLwovLy8gUXVlcnkgcGFyYW1ldGVyczoKLy8vICAgLSBjdXN0b21lcklkIChyZXF1aXJlZCk6IGN1c3RvbWVyIGlkZW50aWZpZXIgKFRDS04gb3IgY3VzdG9tZXIgbnVtYmVyKQovLy8KLy8vIFRoZSB0YXNrIGNhbGxzIHRoZSBleHRlcm5hbCBBUEkgY29uZmlndXJlZCB2aWEgVXNlclNlZ21lbnRCYXNlVXJsIHNlY3JldCBpbiBWYXVsdC4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIEdldEN1c3RvbWVySW5mb01hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgYXN5bmMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHNlcnZpY2VUYXNrID0gdGFzayBhcyBEYXByU2VydmljZVRhc2s7CiAgICAgICAgaWYgKHNlcnZpY2VUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYSBEYXByU2VydmljZVRhc2siKTsKCiAgICAgICAgdmFyIGN1c3RvbWVySWQgPSBSZWFkUGFyYW0oY29udGV4dCwgImN1c3RvbWVySWQiKTsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoY3VzdG9tZXJJZCkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJ2YWxpZGF0aW9uLWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJjdXN0b21lcklkIGlzIHJlcXVpcmVkIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiVkFMSURBVElPTl9FUlJPUiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICB9CgogICAgICAgIHZhciBzZWNyZXRTdG9yZSA9IGNvbnRleHQuRGFwckNsaWVudDsKICAgICAgICBzdHJpbmcgYmFzZVVybCA9ICIiOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHNlY3JldHMgPSBhd2FpdCBzZWNyZXRTdG9yZS5HZXRTZWNyZXRBc3luYygidmF1bHQiLCAiVXNlclNlZ21lbnRCYXNlVXJsIik7CiAgICAgICAgICAgIGlmIChzZWNyZXRzICE9IG51bGwgJiYgc2VjcmV0cy5Db250YWluc0tleSgiVXNlclNlZ21lbnRCYXNlVXJsIikpCiAgICAgICAgICAgICAgICBiYXNlVXJsID0gc2VjcmV0c1siVXNlclNlZ21lbnRCYXNlVXJsIl07CiAgICAgICAgfQogICAgICAgIGNhdGNoCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJjb25maWctZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIlVzZXJTZWdtZW50QmFzZVVybCBzZWNyZXQgbm90IGNvbmZpZ3VyZWQgaW4gVmF1bHQiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJDT05GSUdfRVJST1IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkoYmFzZVVybCkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJjb25maWctZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIlVzZXJTZWdtZW50QmFzZVVybCBpcyBlbXB0eSBvciBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJDT05GSUdfRVJST1IiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBzZXJ2aWNlVGFzay5TZXRVcmwoYmFzZVVybCk7CiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoJCJjdXN0b21lcklkPXtjdXN0b21lcklkfSIpOwoKICAgICAgICByZXR1cm4gbmV3IFNjcmlwdFJlc3BvbnNlKCk7CiAgICB9CgogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IE91dHB1dEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGN1c3RvbWVySWQgPSBSZWFkUGFyYW0oY29udGV4dCwgImN1c3RvbWVySWQiKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwoKICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgS2V5ID0gInNlcnZpY2UtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkZhaWxlZCB0byBmZXRjaCBjdXN0b21lciBpbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlNFUlZJQ0VfRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSByZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiY3VzdG9tZXItaW5mbyIsICJlcnJvciIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkYXRhID0gcmVzcG9uc2U/LmRhdGEgPz8gcmVzcG9uc2U7CgogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAiY3VzdG9tZXItaW5mby1zdWNjZXNzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjdXN0b21lcklkLAogICAgICAgICAgICAgICAgICAgIG5hbWUgPSBkYXRhPy5uYW1lPy5Ub1N0cmluZygpID8/IGRhdGE/LmZpcnN0TmFtZT8uVG9TdHJpbmcoKSA/PyAiIiwKICAgICAgICAgICAgICAgICAgICBzdXJuYW1lID0gZGF0YT8uc3VybmFtZT8uVG9TdHJpbmcoKSA/PyBkYXRhPy5sYXN0TmFtZT8uVG9TdHJpbmcoKSA/PyAiIiwKICAgICAgICAgICAgICAgICAgICBzZWdtZW50ID0gZGF0YT8uc2VnbWVudD8uVG9TdHJpbmcoKSA/PyAiIiwKICAgICAgICAgICAgICAgICAgICBjaGFubmVsU2VnbWVudCA9IGRhdGE/LmNoYW5uZWxTZWdtZW50Py5Ub1N0cmluZygpID8/ICIiLAogICAgICAgICAgICAgICAgICAgIGVtYWlsID0gZGF0YT8uZW1haWw/LlRvU3RyaW5nKCkgPz8gIiIsCiAgICAgICAgICAgICAgICAgICAgcGhvbmUgPSBkYXRhPy5waG9uZT8uVG9TdHJpbmcoKSA/PyAiIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJjdXN0b21lci1pbmZvIiwgInN1Y2Nlc3MiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAib3V0cHV0LWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJJbnRlcm5hbCBwcm9jZXNzaW5nIGVycm9yIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiUFJPQ0VTU0lOR19FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiY3VzdG9tZXItaW5mbyIsICJlcnJvciIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgUmVhZFBhcmFtKFNjcmlwdENvbnRleHQgY29udGV4dCwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzID09IG51bGwgfHwgIUhhc1Byb3BlcnR5KGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzLCBuYW1lKSkKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgdmFyIHZhbCA9IGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzW25hbWVdOwogICAgICAgIHJldHVybiB2YWwgIT0gbnVsbCA/IHZhbC5Ub1N0cmluZygpIDogbnVsbDsKICAgIH0KfQo="
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-matrix-sync",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"chat",
|
|
9
|
+
"matrix",
|
|
10
|
+
"sync"
|
|
11
|
+
],
|
|
12
|
+
"attributes": {
|
|
13
|
+
"scope": "F",
|
|
14
|
+
"task": {
|
|
15
|
+
"order": 1,
|
|
16
|
+
"task": {
|
|
17
|
+
"key": "get-matrix-sync",
|
|
18
|
+
"domain": "touch",
|
|
19
|
+
"version": "1.0.0",
|
|
20
|
+
"flow": "sys-tasks"
|
|
21
|
+
},
|
|
22
|
+
"mapping": {
|
|
23
|
+
"location": "./src/GetMatrixSyncMapping.csx",
|
|
24
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgZ2V0LW1hdHJpeC1zeW5jIEh0dHBUYXNrIChUeXBlIDYpLgovLy8gRmxvdy1sZXZlbCBmdW5jdGlvbiAoc2NvcGU6IEYpIC0tIG5vIGluc3RhbmNlIGNvbnRleHQuCi8vLyBSZWFkcyB1c2VyLCBzaW5jZSwgdGltZW91dCwgcm9vbUlkIGZyb20gcXVlcnkgcGFyYW1ldGVycy4KLy8vIENhbGxzIEdFVCAvX21hdHJpeC9jbGllbnQvdjMvc3luYyB2aWEgQVBJU0lYLiBTdXBwb3J0cyBsb25nIHBvbGxpbmcuCi8vLyBSZXR1cm5zIG5leHRfYmF0Y2ggdG9rZW4gYW5kIGV2ZW50c0J5Um9vbSAobS5yb29tLm1lc3NhZ2UgZXZlbnRzIHBlciByb29tKS4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIEdldE1hdHJpeFN5bmNNYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIGFzeW5jIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBodHRwVGFzayA9IHRhc2sgYXMgSHR0cFRhc2s7CiAgICAgICAgaWYgKGh0dHBUYXNrID09IG51bGwpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJUYXNrIG11c3QgYmUgYW4gSHR0cFRhc2siKTsKCiAgICAgICAgdmFyIG1hdHJpeEJhc2VVcmwgPSBhd2FpdCBHZXRTZWNyZXRBc3luYygidm5leHQtc2VjcmV0IiwgIndvcmtmbG93LXNlY3JldCIsICJNYXRyaXhCYXNlVXJsIik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UobWF0cml4QmFzZVVybCkpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJNYXRyaXhCYXNlVXJsIHNlY3JldCBpcyByZXF1aXJlZCIpOwoKICAgICAgICB2YXIgdXNlciA9IFJlYWRQYXJhbShjb250ZXh0LCAidXNlciIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVkFMSURBVElPTl9FUlJPUjogdXNlciBxdWVyeSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHNpbmNlID0gUmVhZFBhcmFtKGNvbnRleHQsICJzaW5jZSIpOwogICAgICAgIHZhciB0aW1lb3V0ID0gUmVhZFBhcmFtKGNvbnRleHQsICJ0aW1lb3V0Iik7CiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UodGltZW91dCkpCiAgICAgICAgICAgIHRpbWVvdXQgPSAiMzAwMDAiOwoKICAgICAgICB2YXIgcm9vbUlkID0gUmVhZFBhcmFtKGNvbnRleHQsICJyb29tSWQiKTsKCiAgICAgICAgdmFyIHFzID0gInRpbWVvdXQ9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKHRpbWVvdXQpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShzaW5jZSkpCiAgICAgICAgICAgIHFzICs9ICImc2luY2U9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKHNpbmNlKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPcldoaXRlU3BhY2Uocm9vbUlkKSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciBmaWx0ZXIgPSAie1wicm9vbVwiOntcInJvb21zXCI6W1wiIiArIHJvb21JZC5SZXBsYWNlKCJcXCIsICJcXFxcIikuUmVwbGFjZSgiXCIiLCAiXFxcIiIpICsgIlwiXX19IjsKICAgICAgICAgICAgcXMgKz0gIiZmaWx0ZXI9IiArIFVyaS5Fc2NhcGVEYXRhU3RyaW5nKGZpbHRlcik7CiAgICAgICAgfQoKICAgICAgICB2YXIgZnVsbFVybCA9IG1hdHJpeEJhc2VVcmwuVHJpbUVuZCgnLycpICsgIi9fbWF0cml4L2NsaWVudC92My9zeW5jPyIgKyBxczsKICAgICAgICBodHRwVGFzay5TZXRVcmwoZnVsbFVybCk7CgogICAgICAgIHZhciBoZWFkZXJzID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICBbIkFjY2VwdCJdID0gImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICBbIlgtTWF0cml4LVVzZXIiXSA9IHVzZXIKICAgICAgICB9OwogICAgICAgIGh0dHBUYXNrLlNldEhlYWRlcnMoaGVhZGVycyk7CgogICAgICAgIHJldHVybiBuZXcgU2NyaXB0UmVzcG9uc2UoKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBjb250ZXh0LkJvZHk7CiAgICAgICAgICAgIHZhciBib2R5RGF0YSA9IHJlc3BvbnNlPy5kYXRhOwoKICAgICAgICAgICAgc3RyaW5nIGVycmNvZGUgPSBHZXRTdHJpbmcoYm9keURhdGEsICJlcnJjb2RlIik7CiAgICAgICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoZXJyY29kZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cmluZyBlcnJvck1zZyA9IEdldFN0cmluZyhib2R5RGF0YSwgImVycm9yIik7CiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJnZXQtbWF0cml4LXN5bmMtZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JNc2csCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9IGVycmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG5leHRCYXRjaCA9IChzdHJpbmcpbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRzQnlSb29tID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PG9iamVjdD4+KCkKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJjaGF0IiwgInN5bmMiLCAiZXJyb3IiIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdHJpbmcgbmV4dEJhdGNoID0gR2V0U3RyaW5nKGJvZHlEYXRhLCAibmV4dF9iYXRjaCIpOwogICAgICAgICAgICB2YXIgZXZlbnRzQnlSb29tID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PG9iamVjdD4+KCk7CgogICAgICAgICAgICB2YXIgcm9vbXMgPSBHZXRQcm9wZXJ0eVZhbHVlKGJvZHlEYXRhLCAicm9vbXMiKTsKICAgICAgICAgICAgaWYgKHJvb21zICE9IG51bGwgJiYgSGFzUHJvcGVydHkocm9vbXMsICJqb2luIikpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBqb2luID0gR2V0UHJvcGVydHlWYWx1ZShyb29tcywgImpvaW4iKTsKICAgICAgICAgICAgICAgIGlmIChqb2luICE9IG51bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIChkeW5hbWljIGt2IGluIChTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGUpam9pbikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHJJZCA9IGt2LktleT8uVG9TdHJpbmcoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHJJZCkpIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR5bmFtaWMgcm9vbURhdGEgPSBrdi5WYWx1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb29tRGF0YSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGltZWxpbmUgPSByb29tRGF0YS50aW1lbGluZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aW1lbGluZSA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXZlbnRzID0gdGltZWxpbmUuZXZlbnRzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50cyA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnTGlzdCA9IG5ldyBMaXN0PG9iamVjdD4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBldnQgaW4gZXZlbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBldnRUeXBlID0gR2V0U3RyaW5nKGV2dCwgInR5cGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZ0VHlwZSAhPSAibS5yb29tLm1lc3NhZ2UiKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGNvbnRlbnQgPSBHZXRQcm9wZXJ0eVZhbHVlKGV2dCwgImNvbnRlbnQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudCA9PSBudWxsKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGJvZHkgPSBHZXRTdHJpbmcoY29udGVudCwgImJvZHkiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgbXNndHlwZSA9IEdldFN0cmluZyhjb250ZW50LCAibXNndHlwZSIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyBzZW5kZXIgPSBHZXRTdHJpbmcoZXZ0LCAic2VuZGVyIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIGV2ZW50SWQgPSBHZXRTdHJpbmcoZXZ0LCAiZXZlbnRfaWQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdHNPYmogPSBHZXRQcm9wZXJ0eVZhbHVlKGV2dCwgIm9yaWdpbl9zZXJ2ZXJfdHMiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcgdHMgPSB0c09iaiAhPSBudWxsID8gdHNPYmouVG9TdHJpbmcoKSA6IG51bGw7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZ0xpc3QuQWRkKG5ldwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRJZCA9IGV2ZW50SWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlciA9IHNlbmRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGJvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcCA9IHRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2d0eXBlID0gbXNndHlwZSA/PyAibS50ZXh0IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2dMaXN0LkNvdW50ID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudHNCeVJvb21bcklkXSA9IG1zZ0xpc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrOiBqb2luIG1heSBoYXZlIGRpZmZlcmVudCBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJnZXQtbWF0cml4LXN5bmMtc3VjY2VzcyIsCiAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgbmV4dEJhdGNoID0gbmV4dEJhdGNoLAogICAgICAgICAgICAgICAgICAgIGV2ZW50c0J5Um9vbSA9IGV2ZW50c0J5Um9vbQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJjaGF0IiwgInN5bmMiLCAic3VjY2VzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKEV4Y2VwdGlvbiBleCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJnZXQtbWF0cml4LXN5bmMtZXJyb3IiLAogICAgICAgICAgICAgICAgRGF0YSA9IG5ldwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVycm9yID0gIkludGVybmFsIHByb2Nlc3NpbmcgZXJyb3IiLAogICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9ICJQUk9DRVNTSU5HX0VSUk9SIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uID0gZXguTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICBuZXh0QmF0Y2ggPSAoc3RyaW5nKW51bGwsCiAgICAgICAgICAgICAgICAgICAgZXZlbnRzQnlSb29tID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBMaXN0PG9iamVjdD4+KCkKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiY2hhdCIsICJzeW5jIiwgImVycm9yIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0cmluZyBSZWFkUGFyYW0oU2NyaXB0Q29udGV4dCBjb250ZXh0LCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMgPT0gbnVsbCB8fCAhSGFzUHJvcGVydHkoY29udGV4dC5RdWVyeVBhcmFtZXRlcnMsIG5hbWUpKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB2YXIgdmFsID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnNbbmFtZV07CiAgICAgICAgcmV0dXJuIHZhbCAhPSBudWxsID8gdmFsLlRvU3RyaW5nKCkgOiBudWxsOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Cg=="
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"key": "get-rezervations",
|
|
3
|
+
"flow": "sys-functions",
|
|
4
|
+
"domain": "touch",
|
|
5
|
+
"version": "1.0.0",
|
|
6
|
+
"flowVersion": "1.0.0",
|
|
7
|
+
"tags": [
|
|
8
|
+
"rezervation"
|
|
9
|
+
],
|
|
10
|
+
"attributes": {
|
|
11
|
+
"scope": "I",
|
|
12
|
+
"task": {
|
|
13
|
+
"order": 1,
|
|
14
|
+
"task": {
|
|
15
|
+
"key": "get-rezervations-task",
|
|
16
|
+
"domain": "touch",
|
|
17
|
+
"version": "1.0.0",
|
|
18
|
+
"flow": "sys-tasks"
|
|
19
|
+
},
|
|
20
|
+
"mapping": {
|
|
21
|
+
"location": "./src/GetRezervationsMapping.csx",
|
|
22
|
+
"code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIEJCVC5Xb3JrZmxvdy5TY3JpcHRpbmc7CnVzaW5nIEJCVC5Xb3JrZmxvdy5EZWZpbml0aW9uczsKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgR2V0QXZhaWxhYmxlU2xvdHNUYXNrIChEYXByU2VydmljZVRhc2sgLSBUeXBlIDMpCi8vLyBRdWVyaWVzIGFic2VuY2UtZW50cnkgd29ya2Zsb3cgdmlhIERhcHIgc2VydmljZSBpbnZvY2F0aW9uIHRvIGdldCBwdWJsaWMgaG9saWRheXMsIAovLy8gd29ya2luZyBob3VycyBjaGFuZ2VzLCBhbmQgcGVyc29uYWwgbGVhdmVzLgovLy8gVGhlbiBjYWxjdWxhdGVzIGF2YWlsYWJsZSBhcHBvaW50bWVudCBzbG90cyBmb3IgdGhlIGdpdmVuIGFkdmlzb3IgYW5kIGRhdGUuCi8vLyAKLy8vIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL2J1cmdhbi10ZWNoL3ZuZXh0LXJ1bnRpbWUvYmxvYi9tYWluL2RvYy9lbi9mbG93L3Rhc2tzL2RhcHItc2VydmljZS5tZAovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgR2V0UmV6ZXJ2YXRpb25zTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgc2VydmljZVRhc2sgPSB0YXNrIGFzIERhcHJTZXJ2aWNlVGFzazsKICAgICAgICBpZiAoc2VydmljZVRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIERhcHJTZXJ2aWNlVGFzayIpOwoKICAgICAgICB2YXIgYXBwSWQgPSBHZXRDb25maWdWYWx1ZSgiREFQUl9BUFBfSUQiKTsKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFwcElkKSkKICAgICAgICAgICAgc2VydmljZVRhc2suU2V0QXBwSWQoYXBwSWQpOwoKICAgICAgICAvLyBSZWFkIHBhcmFtZXRlcnMgZnJvbSBxdWVyeSBzdHJpbmcgKEdFVCByZXF1ZXN0KQogICAgICAgIHZhciBhZHZpc29ySWQgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzLCAiYWR2aXNvcklkIikgPyBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bImFkdmlzb3JJZCJdPy5Ub1N0cmluZygpIDogc3RyaW5nLkVtcHR5OwogICAgICAgIHZhciB1c2VySWQgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzLCAidXNlcklkIikgPyBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bInVzZXJJZCJdPy5Ub1N0cmluZygpIDogc3RyaW5nLkVtcHR5OwogICAgICAgIHZhciBtYW5hZ2VySWQgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzLCAibWFuYWdlcklkIikgPyBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bIm1hbmFnZXJJZCJdPy5Ub1N0cmluZygpIDogc3RyaW5nLkVtcHR5OwogICAgICAgIHZhciBzdGFydERhdGUgPSBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycyAhPSBudWxsICYmIEhhc1Byb3BlcnR5KGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzLCAic3RhcnREYXRlIikgPyBjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycz9bInN0YXJ0RGF0ZSJdPy5Ub1N0cmluZygpIDogc3RyaW5nLkVtcHR5OwogICAgICAgIHZhciBlbmREYXRlID0gY29udGV4dC5RdWVyeVBhcmFtZXRlcnMgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShjb250ZXh0LlF1ZXJ5UGFyYW1ldGVycywgImVuZERhdGUiKSA/IGNvbnRleHQuUXVlcnlQYXJhbWV0ZXJzP1siZW5kRGF0ZSJdPy5Ub1N0cmluZygpIDogc3RyaW5nLkVtcHR5OwoKICAgICAgICAvLyBCdWlsZCBmaWx0ZXIgY29uZGl0aW9ucwogICAgICAgIHZhciBjb25kaXRpb25zID0gbmV3IExpc3Q8c3RyaW5nPigpOwoKICAgICAgICAvLyBDdXJyZW50U3RhdGUgaW4gKCJhY3RpdmUiLCAiY2FuLXN0YXJ0LW1lZXRpbmciLCAiYWNjZXB0LXRlcm1zIikKICAgICAgICBjb25kaXRpb25zLkFkZCgKICAgICAgICAgICAgIntcIm9yXCI6WyIgKwogICAgICAgICAgICAie1wiY3VycmVudFN0YXRlXCI6e1wiZXFcIjpcImFjdGl2ZVwifX0sIiArCiAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiaW4tbWVldFwifX0sIiArCiAgICAgICAgICAgICJ7XCJjdXJyZW50U3RhdGVcIjp7XCJlcVwiOlwiYWNjZXB0LXRlcm1zXCJ9fSIgKwogICAgICAgICAgICAiXX0iKTsKCiAgICAgICAgLy8gU3RhdHVzID0gIkEiCiAgICAgICAgY29uZGl0aW9ucy5BZGQoIntcInN0YXR1c1wiOntcImVxXCI6XCJBXCJ9fSIpOwoKICAgICAgICAvLyBDb25kaXRpb25hbDogYWR2aXNvciBmaWx0ZXIKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGFkdmlzb3JJZCkpCiAgICAgICAgICAgIGNvbmRpdGlvbnMuQWRkKCJ7XCJhdHRyaWJ1dGVzXCI6e1wiYWR2aXNvclwiOntcImVxXCI6XCIiICsgYWR2aXNvcklkICsgIlwifX19Iik7CgogICAgICAgIC8vIENvbmRpdGlvbmFsOiB1c2VyIGZpbHRlcgogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkodXNlcklkKSkKICAgICAgICAgICAgY29uZGl0aW9ucy5BZGQoIntcImF0dHJpYnV0ZXNcIjp7XCJ1c2VyXCI6e1wiZXFcIjpcIiIgKyB1c2VySWQgKyAiXCJ9fX0iKTsKCiAgICAgICAgLy8gQ29uZGl0aW9uYWw6IG1hbmFnZXIgZmlsdGVyCiAgICAgICAgaWYgKCFzdHJpbmcuSXNOdWxsT3JFbXB0eShtYW5hZ2VySWQpKQogICAgICAgICAgICBjb25kaXRpb25zLkFkZCgie1wiYXR0cmlidXRlc1wiOntcIm1hbmFnZXJcIjp7XCJlcVwiOlwiIiArIG1hbmFnZXJJZCArICJcIn19fSIpOwoKICAgICAgICAvLyBDb25kaXRpb25hbDogc3RhcnREYXRlIGZpbHRlciAoYXR0cmlidXRlcy5zdGFydERhdGVUaW1lID49IHN0YXJ0RGF0ZSkKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KHN0YXJ0RGF0ZSkpCiAgICAgICAgICAgIGNvbmRpdGlvbnMuQWRkKCJ7XCJhdHRyaWJ1dGVzXCI6e1wic3RhcnREYXRlVGltZVwiOntcImd0ZVwiOlwiIiArIHN0YXJ0RGF0ZSArICJcIn19fSIpOwoKICAgICAgICAvLyBDb25kaXRpb25hbDogZW5kRGF0ZSBmaWx0ZXIgKGF0dHJpYnV0ZXMuZW5kRGF0ZVRpbWUgPD0gZW5kRGF0ZSkKICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGVuZERhdGUpKQogICAgICAgICAgICBjb25kaXRpb25zLkFkZCgie1wiYXR0cmlidXRlc1wiOntcImVuZERhdGVUaW1lXCI6e1wibHRlXCI6XCIiICsgZW5kRGF0ZSArICJcIn19fSIpOwoKICAgICAgICB2YXIgZmlsdGVySnNvbiA9ICJ7XCJhbmRcIjpbIiArIHN0cmluZy5Kb2luKCIsIiwgY29uZGl0aW9ucykgKyAiXX0iOwoKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgTGlzdDxzdHJpbmc+ewogICAgICAgICAgICAicGFnZVNpemU9MTAwIiwKICAgICAgICAgICAgJCJmaWx0ZXI9e2ZpbHRlckpzb259IgogICAgICAgIH07CgogICAgICAgIHNlcnZpY2VUYXNrLlNldFF1ZXJ5U3RyaW5nKHN0cmluZy5Kb2luKCImIiwgcXVlcnlQYXJhbXMpKTsKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBjb250ZXh0LkJvZHk7CgogICAgICAgICAgICAvLyBDaGVjayBpZiBzZXJ2aWNlIGNhbGwgd2FzIHN1Y2Nlc3NmdWwKICAgICAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3MgPT0gZmFsc2UpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvclR5cGUgPSBDbGFzc2lmeVNlcnZpY2VFcnJvcihyZXNwb25zZT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICIiKTsKCiAgICAgICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIEtleSA9ICJzZXJ2aWNlLWVycm9yIiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0gbmV3CiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJGYWlsZWQgdG8gZmV0Y2ggYWJzZW5jZSBlbnRyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JDb2RlID0gIlNFUlZJQ0VfRVJST1IiLAogICAgICAgICAgICAgICAgICAgICAgICBlcnJvclR5cGUgPSBlcnJvclR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJlc3BvbnNlPy5lcnJvck1lc3NhZ2U/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZpY2VJbmZvID0gbmV3CiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcElkID0gcmVzcG9uc2U/Lm1ldGFkYXRhPy5hcHBJZD8uVG9TdHJpbmcoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSByZXNwb25zZT8ubWV0YWRhdGE/Lm1ldGhvZE5hbWU/LlRvU3RyaW5nKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwVmVyYiA9IHJlc3BvbnNlPy5tZXRhZGF0YT8uaHR0cFZlcmI/LlRvU3RyaW5nKCkKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgVGFncyA9IG5ld1tdIHsgImFwcG9pbnRtZW50cyIsICJlcnJvciIgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIEdldCBpdGVtcyBmcm9tIHNlcnZpY2UgcmVzcG9uc2UKICAgICAgICAgICAgLy8gUmVzcG9uc2Ugc3RydWN0dXJlOiB7IGRhdGE6IHsgaXRlbXM6IFsuLi5dIH0sIGlzU3VjY2VzczogdHJ1ZSwgLi4uIH0KICAgICAgICAgICAgdmFyIHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlPy5kYXRhOwogICAgICAgICAgICB2YXIgaXRlbXMgPSByZXNwb25zZURhdGE/Lml0ZW1zOwoKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gInJlemVydmF0aW9ucy1zdWNjZXNzIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpdGVtcwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIFRhZ3MgPSBuZXdbXSB7ICJhcHBvaW50bWVudHMiLCAiYXZhaWxhYmlsaXR5IiwgInN1Y2Nlc3MiIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIChFeGNlcHRpb24gZXgpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBLZXkgPSAib3V0cHV0LWVycm9yIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9ICJJbnRlcm5hbCBwcm9jZXNzaW5nIGVycm9yIiwKICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPSAiUFJPQ0VTU0lOR19FUlJPUiIsCiAgICAgICAgICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiA9IGV4Lk1lc3NhZ2UKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBUYWdzID0gbmV3W10geyAiYXBwb2ludG1lbnRzIiwgImVycm9yIiB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KCiAgICAjcmVnaW9uIEhlbHBlciBNZXRob2RzCgogICAgcHJpdmF0ZSBzdHJpbmcgQ2xhc3NpZnlTZXJ2aWNlRXJyb3Ioc3RyaW5nIGVycm9yTWVzc2FnZSkKICAgIHsKICAgICAgICBpZiAoZXJyb3JNZXNzYWdlLkNvbnRhaW5zKCJ0aW1lb3V0IiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAidGltZW91dCI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygidW5hdXRob3JpemVkIiwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgIHJldHVybiAiYXV0aGVudGljYXRpb24iOwogICAgICAgIGlmIChlcnJvck1lc3NhZ2UuQ29udGFpbnMoImZvcmJpZGRlbiIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICByZXR1cm4gImF1dGhvcml6YXRpb24iOwogICAgICAgIGlmIChlcnJvck1lc3NhZ2UuQ29udGFpbnMoIm5vdCBmb3VuZCIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICByZXR1cm4gIm5vdC1mb3VuZCI7CiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5Db250YWlucygic2VydmljZSB1bmF2YWlsYWJsZSIsIFN0cmluZ0NvbXBhcmlzb24uT3JkaW5hbElnbm9yZUNhc2UpKQogICAgICAgICAgICByZXR1cm4gInNlcnZpY2UtdW5hdmFpbGFibGUiOwogICAgICAgIGlmIChlcnJvck1lc3NhZ2UuQ29udGFpbnMoImNvbm5lY3Rpb24iLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgcmV0dXJuICJjb25uZWN0aW9uLWVycm9yIjsKCiAgICAgICAgcmV0dXJuICJnZW5lcmFsLWVycm9yIjsKICAgIH0KCiAgICAjZW5kcmVnaW9uCn0K"
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|