@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.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/burgan-tech-morph-touch-runtime-0.0.2.tgz +0 -0
  3. package/package.json +21 -0
  4. package/touch/Extensions/.gitkeep +0 -0
  5. package/touch/Functions/.gitkeep +0 -0
  6. package/touch/Functions/check-livekit-room-access.1.0.0.json +28 -0
  7. package/touch/Functions/check-livekit-room-access.http +44 -0
  8. package/touch/Functions/get-absence-entry.1.0.0.json +28 -0
  9. package/touch/Functions/get-advisor-stats.1.0.0.json +27 -0
  10. package/touch/Functions/get-available-slots.1.0.0.json +30 -0
  11. package/touch/Functions/get-available-slots.http +29 -0
  12. package/touch/Functions/get-chat-rooms.1.0.0.json +28 -0
  13. package/touch/Functions/get-chat-rooms.http +62 -0
  14. package/touch/Functions/get-customer-info.1.0.0.json +27 -0
  15. package/touch/Functions/get-matrix-sync.1.0.0.json +28 -0
  16. package/touch/Functions/get-rezervations.1.0.0.json +26 -0
  17. package/touch/Functions/get-rezervations.http +59 -0
  18. package/touch/Functions/get-room-messages.1.0.0.json +29 -0
  19. package/touch/Functions/get-room-messages.http +45 -0
  20. package/touch/Functions/rezervation-transfer.http +118 -0
  21. package/touch/Functions/send-room-message.1.0.0.json +29 -0
  22. package/touch/Functions/src/CheckLivekitRoomAccessMapping.csx +238 -0
  23. package/touch/Functions/src/GetAbsenceEntryMapping.csx +225 -0
  24. package/touch/Functions/src/GetAdvisorStatsMapping.csx +190 -0
  25. package/touch/Functions/src/GetAvailableSlotsMapping.csx +468 -0
  26. package/touch/Functions/src/GetChatRoomsMapping.csx +202 -0
  27. package/touch/Functions/src/GetCustomerInfoMapping.csx +140 -0
  28. package/touch/Functions/src/GetMatrixSyncMapping.csx +197 -0
  29. package/touch/Functions/src/GetRezervationsMapping.csx +162 -0
  30. package/touch/Functions/src/GetRoomMessagesMapping.csx +165 -0
  31. package/touch/Functions/src/SendCancelNotificationMapping.csx +63 -0
  32. package/touch/Functions/src/SendRoomMessageMapping.csx +131 -0
  33. package/touch/Schemas/.gitkeep +0 -0
  34. package/touch/Schemas/absence-entry.1.0.0.json +232 -0
  35. package/touch/Schemas/advisor-chat-rooms.1.0.0.json +62 -0
  36. package/touch/Schemas/chat-room.1.0.0.json +110 -0
  37. package/touch/Schemas/notification-sender.1.0.0.json +159 -0
  38. package/touch/Schemas/portfolio-manager.1.0.0.json +63 -0
  39. package/touch/Schemas/rezervation.1.0.0.json +102 -0
  40. package/touch/Tasks/.gitkeep +0 -0
  41. package/touch/Tasks/cancel-absence-entry-for-rezervation.1.0.0.json +21 -0
  42. package/touch/Tasks/check-already-completed-chat-room.1.0.0.json +24 -0
  43. package/touch/Tasks/check-duplicate-portfolio-manager.1.0.0.json +23 -0
  44. package/touch/Tasks/check-duplicate-rezervation.1.0.0.json +23 -0
  45. package/touch/Tasks/check-existing-permanent-chat-room.1.0.0.json +21 -0
  46. package/touch/Tasks/check-randevu-time.1.0.0.json +17 -0
  47. package/touch/Tasks/create-permanent-chat-room.1.0.0.json +28 -0
  48. package/touch/Tasks/determine-transfer-type.1.0.0.json +16 -0
  49. package/touch/Tasks/enrich-rezervations-for-transfer.1.0.0.json +23 -0
  50. package/touch/Tasks/execute-permanent-chatroom-update.1.0.0.json +21 -0
  51. package/touch/Tasks/execute-rez-chatroom-transfer.1.0.0.json +21 -0
  52. package/touch/Tasks/execute-rezervation-transfer.1.0.0.json +19 -0
  53. package/touch/Tasks/fetch-absence-entries-for-transfer.1.0.0.json +23 -0
  54. package/touch/Tasks/fetch-advisors-for-transfer.1.0.0.json +23 -0
  55. package/touch/Tasks/fetch-permanent-chatrooms-for-transfer.1.0.0.json +23 -0
  56. package/touch/Tasks/fetch-rez-chatrooms-for-transfer.1.0.0.json +23 -0
  57. package/touch/Tasks/fetch-rezervations-for-transfer.1.0.0.json +22 -0
  58. package/touch/Tasks/get-absence-entry-task.1.0.0.json +23 -0
  59. package/touch/Tasks/get-available-slots-http.1.0.0.json +27 -0
  60. package/touch/Tasks/get-available-slots.1.0.0.json +24 -0
  61. package/touch/Tasks/get-chat-room-data-for-rezervation.1.0.0.json +23 -0
  62. package/touch/Tasks/get-chat-token.1.0.0.json +27 -0
  63. package/touch/Tasks/get-matrix-room-messages.1.0.0.json +25 -0
  64. package/touch/Tasks/get-matrix-sync.1.0.0.json +25 -0
  65. package/touch/Tasks/get-rezervation-data-task.1.0.0.json +22 -0
  66. package/touch/Tasks/get-rezervation-state-task.1.0.0.json +22 -0
  67. package/touch/Tasks/get-rezervations-task.1.0.0.json +21 -0
  68. package/touch/Tasks/get-user-info-for-rezervation.1.0.0.json +24 -0
  69. package/touch/Tasks/get-video-call-url.1.0.0.json +17 -0
  70. package/touch/Tasks/invite-user-to-rezervation-room.1.0.0.json +27 -0
  71. package/touch/Tasks/join-chat-room-for-rezervation.1.0.0.json +28 -0
  72. package/touch/Tasks/join-matrix-room.1.0.0.json +27 -0
  73. package/touch/Tasks/join-user-to-room.1.0.0.json +27 -0
  74. package/touch/Tasks/merge-invited-user.1.0.0.json +17 -0
  75. package/touch/Tasks/merge-rezervation-update.1.0.0.json +16 -0
  76. package/touch/Tasks/merge-target-advisor-for-transfer.1.0.0.json +17 -0
  77. package/touch/Tasks/merge-update-body-for-randevu-update.1.0.0.json +16 -0
  78. package/touch/Tasks/merge-video-call-urls.1.0.0.json +17 -0
  79. package/touch/Tasks/query-chat-room-instances.1.0.0.json +23 -0
  80. package/touch/Tasks/remove-member-from-room.1.0.0.json +28 -0
  81. package/touch/Tasks/send-matrix-room-message.1.0.0.json +26 -0
  82. package/touch/Tasks/send-push-notification.1.0.0.json +26 -0
  83. package/touch/Tasks/send-sms-notification.1.0.0.json +26 -0
  84. package/touch/Tasks/set-chat-room-status-active.1.0.0.json +16 -0
  85. package/touch/Tasks/set-chat-room-status-deactive.1.0.0.json +16 -0
  86. package/touch/Tasks/set-previous-advisor.1.0.0.json +16 -0
  87. package/touch/Tasks/set-user-from-headers-for-rezervation.1.0.0.json +17 -0
  88. package/touch/Tasks/start-absence-entry-for-rezervation.1.0.0.json +21 -0
  89. package/touch/Tasks/start-chat-room-for-rezervation.1.0.0.json +20 -0
  90. package/touch/Tasks/start-notification-sender.1.0.0.json +20 -0
  91. package/touch/Tasks/start-permanent-chat-room.1.0.0.json +21 -0
  92. package/touch/Tasks/start-transfer-from-absence-entry.1.0.0.json +19 -0
  93. package/touch/Tasks/start-video-call.1.0.0.json +22 -0
  94. package/touch/Tasks/trigger-chat-room-deactivate.1.0.0.json +21 -0
  95. package/touch/Tasks/trigger-chat-room-transfer.1.0.0.json +21 -0
  96. package/touch/Tasks/trigger-chat-room-update.1.0.0.json +20 -0
  97. package/touch/Tasks/trigger-rezervation-add-invited-participant.1.0.0.json +20 -0
  98. package/touch/Tasks/trigger-rezervation-apply-update.1.0.0.json +20 -0
  99. package/touch/Tasks/trigger-rezervation-to-in-meet.1.0.0.json +20 -0
  100. package/touch/Tasks/trigger-rezervation-video-call-update.1.0.0.json +21 -0
  101. package/touch/Tasks/validate-date-for-rezervation.1.0.0.json +18 -0
  102. package/touch/Tasks/validate-slot-for-rezervation.1.0.0.json +24 -0
  103. package/touch/Tasks/validate-transfer-availability.1.0.0.json +23 -0
  104. package/touch/Views/.gitkeep +0 -0
  105. package/touch/Workflows/.gitkeep +0 -0
  106. package/touch/Workflows/absence-entry.http +458 -0
  107. package/touch/Workflows/absence-entry.json +179 -0
  108. package/touch/Workflows/add-participant-to-rezervation.http +47 -0
  109. package/touch/Workflows/add-participant-to-rezervation.json +340 -0
  110. package/touch/Workflows/chat-room.http +207 -0
  111. package/touch/Workflows/chat-room.json +452 -0
  112. package/touch/Workflows/investment-advisor.json +367 -0
  113. package/touch/Workflows/notification-sender.http +299 -0
  114. package/touch/Workflows/notification-sender.json +262 -0
  115. package/touch/Workflows/portfolio-manager.json +367 -0
  116. package/touch/Workflows/randevu-update.http +87 -0
  117. package/touch/Workflows/rezervation-start.json +467 -0
  118. package/touch/Workflows/rezervation-transfer.json +512 -0
  119. package/touch/Workflows/rezervation-update.http +87 -0
  120. package/touch/Workflows/rezervation-update.json +485 -0
  121. package/touch/Workflows/rezervation.http +214 -0
  122. package/touch/Workflows/rezervation.json +726 -0
  123. package/touch/Workflows/src/AllChatRoomsSuccessRule.csx +65 -0
  124. package/touch/Workflows/src/AlwaysTrueRule.csx +13 -0
  125. package/touch/Workflows/src/AnyChatRoomFailedRule.csx +64 -0
  126. package/touch/Workflows/src/AutoProcessRule.csx +38 -0
  127. package/touch/Workflows/src/BuildRezChatRoomPlanMapping.csx +160 -0
  128. package/touch/Workflows/src/CanStartRezervationTimerMapping.csx +48 -0
  129. package/touch/Workflows/src/CanStartTransferMapping.csx +14 -0
  130. package/touch/Workflows/src/CancelAbsenceEntryForRezervationMapping.csx +48 -0
  131. package/touch/Workflows/src/CancelAbsenceForRandevuUpdateMapping.csx +62 -0
  132. package/touch/Workflows/src/ChatRoomCreatedFailedRule.csx +54 -0
  133. package/touch/Workflows/src/ChatRoomCreatedSuccessRule.csx +54 -0
  134. package/touch/Workflows/src/ChatRoomRemoveMapping.csx +104 -0
  135. package/touch/Workflows/src/ChatRoomTransferInviteMapping.csx +109 -0
  136. package/touch/Workflows/src/ChatRoomTransferRemoveMapping.csx +71 -0
  137. package/touch/Workflows/src/ChatRoomUpdateMapping.csx +107 -0
  138. package/touch/Workflows/src/CheckAlreadyCompletedChatRoomMapping.csx +100 -0
  139. package/touch/Workflows/src/CheckDuplicatePortfolioManagerMapping.csx +119 -0
  140. package/touch/Workflows/src/CheckDuplicateRezervationMapping.csx +150 -0
  141. package/touch/Workflows/src/CheckExistingPermanentChatRoomMapping.csx +169 -0
  142. package/touch/Workflows/src/CheckRandevuTimeMapping.csx +67 -0
  143. package/touch/Workflows/src/CheckRezervationStateActiveOrInMeetRule.csx +14 -0
  144. package/touch/Workflows/src/CreateAbsenceEntryForRezervationMapping.csx +111 -0
  145. package/touch/Workflows/src/CreateAbsenceForRandevuUpdateMapping.csx +108 -0
  146. package/touch/Workflows/src/CreateChatRoomForRezervationMapping.csx +122 -0
  147. package/touch/Workflows/src/CreatePermanentChatRoomMapping.csx +140 -0
  148. package/touch/Workflows/src/CustomerControlToEndRule.csx +14 -0
  149. package/touch/Workflows/src/DetermineTransferTypeMapping.csx +92 -0
  150. package/touch/Workflows/src/EnrichRezervationsForTransferMapping.csx +495 -0
  151. package/touch/Workflows/src/ExecutePermanentChatRoomUpdateMapping.csx +124 -0
  152. package/touch/Workflows/src/ExecuteRezChatRoomTransferMapping.csx +95 -0
  153. package/touch/Workflows/src/ExecuteTransferMapping.csx +152 -0
  154. package/touch/Workflows/src/FetchAbsenceEntriesForTransferMapping.csx +116 -0
  155. package/touch/Workflows/src/FetchAdvisorsForTransferMapping.csx +145 -0
  156. package/touch/Workflows/src/FetchPermanentChatRoomsMapping.csx +128 -0
  157. package/touch/Workflows/src/FetchRezervationsForTransferMapping.csx +124 -0
  158. package/touch/Workflows/src/GetChatRoomDataForRezervationMapping.csx +100 -0
  159. package/touch/Workflows/src/GetChatTokenMapping.csx +85 -0
  160. package/touch/Workflows/src/GetRezervationDataForAddParticipantMapping.csx +105 -0
  161. package/touch/Workflows/src/GetRezervationDataForRandevuUpdateMapping.csx +110 -0
  162. package/touch/Workflows/src/GetRezervationDataMapping.csx +111 -0
  163. package/touch/Workflows/src/GetRezervationStateForRandevuUpdateMapping.csx +80 -0
  164. package/touch/Workflows/src/GetRezervationStateMapping.csx +92 -0
  165. package/touch/Workflows/src/GetUserInfoForRezervationMapping.csx +63 -0
  166. package/touch/Workflows/src/GetVideoCallUrlMapping.csx +62 -0
  167. package/touch/Workflows/src/HasChangedAdvisorRule.csx +28 -0
  168. package/touch/Workflows/src/HasChatIntegrationRule.csx +41 -0
  169. package/touch/Workflows/src/HasExistingPermanentRoomRule.csx +28 -0
  170. package/touch/Workflows/src/InviteAdvisorForRandevuUpdateMapping.csx +86 -0
  171. package/touch/Workflows/src/InviteNewAdvisorToRezervationRoomMapping.csx +78 -0
  172. package/touch/Workflows/src/InviteNewParticipantToRandevuRoomMapping.csx +88 -0
  173. package/touch/Workflows/src/InvitedUserMergeMapping.csx +77 -0
  174. package/touch/Workflows/src/InvitedUserNotAllowedRule.csx +71 -0
  175. package/touch/Workflows/src/InvitedUserNotInMeetRule.csx +19 -0
  176. package/touch/Workflows/src/IsNotfSentRule.csx +36 -0
  177. package/touch/Workflows/src/JoinChatRoomForAddParticipantMapping.csx +118 -0
  178. package/touch/Workflows/src/JoinChatRoomForRandevuStartMapping.csx +119 -0
  179. package/touch/Workflows/src/JoinChatRoomForRezervationMapping.csx +118 -0
  180. package/touch/Workflows/src/JoinMatrixRoomMapping.csx +100 -0
  181. package/touch/Workflows/src/JoinUserToRoomMapping.csx +118 -0
  182. package/touch/Workflows/src/LoginForAddParticipantChatMapping.csx +102 -0
  183. package/touch/Workflows/src/LoginForRandevuStartChatMapping.csx +96 -0
  184. package/touch/Workflows/src/MergeRezervationUpdateMapping.csx +82 -0
  185. package/touch/Workflows/src/MergeTargetAdvisorForTransferMapping.csx +79 -0
  186. package/touch/Workflows/src/MergeUpdateBodyForRandevuUpdateMapping.csx +91 -0
  187. package/touch/Workflows/src/NoExistingPermanentRoomRule.csx +23 -0
  188. package/touch/Workflows/src/NotificationCompleteAlwaysRule.csx +14 -0
  189. package/touch/Workflows/src/NotificationCompleteFromPendingRule.csx +41 -0
  190. package/touch/Workflows/src/NotificationCompleteFromSmsRule.csx +36 -0
  191. package/touch/Workflows/src/NotificationPushFromPendingRule.csx +42 -0
  192. package/touch/Workflows/src/NotificationPushFromSmsRule.csx +36 -0
  193. package/touch/Workflows/src/NotificationSmsPendingRule.csx +32 -0
  194. package/touch/Workflows/src/PermanentDoneRule.csx +44 -0
  195. package/touch/Workflows/src/PermanentProcessNextRule.csx +44 -0
  196. package/touch/Workflows/src/RezChatRoomProcessNextRule.csx +44 -0
  197. package/touch/Workflows/src/RezChatRoomsDoneRule.csx +44 -0
  198. package/touch/Workflows/src/SendPushNotificationMapping.csx +146 -0
  199. package/touch/Workflows/src/SendSmsNotificationMapping.csx +138 -0
  200. package/touch/Workflows/src/SetChatRoomStatusActiveMapping.csx +22 -0
  201. package/touch/Workflows/src/SetChatRoomStatusDeactiveMapping.csx +22 -0
  202. package/touch/Workflows/src/SetPreviousAdvisorMapping.csx +28 -0
  203. package/touch/Workflows/src/SetUserFromHeadersForRezervationMapping.csx +24 -0
  204. package/touch/Workflows/src/SlotAvailableRule.csx +33 -0
  205. package/touch/Workflows/src/SlotUnavailableRule.csx +33 -0
  206. package/touch/Workflows/src/StartChatRoomForRezervationMapping.csx +100 -0
  207. package/touch/Workflows/src/StartGetChatTokenForRezervationMapping.csx +71 -0
  208. package/touch/Workflows/src/StartNotificationForAdvisorMapping.csx +117 -0
  209. package/touch/Workflows/src/StartNotificationForRezervationFromUserInfoMapping.csx +128 -0
  210. package/touch/Workflows/src/StartNotificationForUserMapping.csx +117 -0
  211. package/touch/Workflows/src/StartPermanentChatRoomMapping.csx +92 -0
  212. package/touch/Workflows/src/StartTransferFromAbsenceEntryMapping.csx +94 -0
  213. package/touch/Workflows/src/StartVideoCallCustomerSubFlowMapping.csx +37 -0
  214. package/touch/Workflows/src/StartVideoCallForInvitedParticipantMapping.csx +54 -0
  215. package/touch/Workflows/src/StartVideoCallForRandevuStartMapping.csx +70 -0
  216. package/touch/Workflows/src/StartVideoCallStaffSubFlowMapping.csx +37 -0
  217. package/touch/Workflows/src/StateActiveForUpdateRule.csx +14 -0
  218. package/touch/Workflows/src/StateActiveRule.csx +14 -0
  219. package/touch/Workflows/src/StateInMeetRule.csx +14 -0
  220. package/touch/Workflows/src/StateNotActiveForUpdateRule.csx +14 -0
  221. package/touch/Workflows/src/StateNotActiveOrInMeetRule.csx +14 -0
  222. package/touch/Workflows/src/StatusCustomerEnterRule.csx +25 -0
  223. package/touch/Workflows/src/StatusStaffEnterRule.csx +25 -0
  224. package/touch/Workflows/src/SyncWorkingHoursRule.csx +46 -0
  225. package/touch/Workflows/src/TokenSuccessRule.csx +24 -0
  226. package/touch/Workflows/src/TransferAllDoneRule.csx +50 -0
  227. package/touch/Workflows/src/TransferHasInvalidRule.csx +34 -0
  228. package/touch/Workflows/src/TransferProcessNextRule.csx +50 -0
  229. package/touch/Workflows/src/TriggerChatRoomDeactivateMapping.csx +77 -0
  230. package/touch/Workflows/src/TriggerChatRoomTransferMapping.csx +93 -0
  231. package/touch/Workflows/src/TriggerChatRoomUpdateMapping.csx +99 -0
  232. package/touch/Workflows/src/TriggerRezervationAddInvitedParticipantMapping.csx +77 -0
  233. package/touch/Workflows/src/TriggerRezervationApplyUpdateMapping.csx +66 -0
  234. package/touch/Workflows/src/TriggerRezervationToInMeetMapping.csx +69 -0
  235. package/touch/Workflows/src/TriggerRezervationVideoCallUpdateMapping.csx +67 -0
  236. package/touch/Workflows/src/ValidateDateForRezervationMapping.csx +60 -0
  237. package/touch/Workflows/src/ValidateSlotForRandevuUpdateMapping.csx +211 -0
  238. package/touch/Workflows/src/ValidateSlotForRezervationMapping.csx +246 -0
  239. package/touch/Workflows/src/ValidateTransferMapping.csx +243 -0
  240. package/touch/Workflows/src/VideoCallUrlUpdateMergeMapping.csx +141 -0
  241. package/touch/Workflows/start-chat.json +217 -0
  242. package/touch/Workflows/start-video-call.http +93 -0
  243. package/touch/Workflows/start-video-call.json +206 -0
  244. package/vnext.config.json +58 -0
@@ -0,0 +1,141 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Threading.Tasks;
4
+ using BBT.Workflow.Scripting;
5
+ using BBT.Workflow.Definitions;
6
+
7
+ /// <summary>
8
+ /// Merges incoming videoCallUrls into rezervation instance data.
9
+ /// Appends new entries to existing videoCallUrls array.
10
+ /// </summary>
11
+ public class VideoCallUrlUpdateMergeMapping : ScriptBase, IMapping
12
+ {
13
+ public Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)
14
+ {
15
+ return Task.FromResult(new ScriptResponse());
16
+ }
17
+
18
+ public Task<ScriptResponse> OutputHandler(ScriptContext context)
19
+ {
20
+ var instanceData = context.Instance?.Data;
21
+ var incomingBody = context.Body;
22
+ var existingList = GetVideoCallUrlsList(instanceData);
23
+ var incomingList = GetIncomingEntries(incomingBody, instanceData);
24
+ if (incomingList != null && incomingList.Count > 0)
25
+ {
26
+ foreach (var item in incomingList)
27
+ {
28
+ if (item == null || item.Count == 0) continue;
29
+ string participantId = null;
30
+ string url = string.Empty;
31
+ foreach (var kv in item)
32
+ {
33
+ participantId = kv.Key;
34
+ url = kv.Value ?? string.Empty;
35
+ break;
36
+ }
37
+ if (string.IsNullOrEmpty(participantId)) continue;
38
+ int existingIdx = -1;
39
+ for (int i = 0; i < existingList.Count; i++)
40
+ {
41
+ var d = existingList[i];
42
+ if (d != null && d.ContainsKey(participantId))
43
+ {
44
+ existingIdx = i;
45
+ break;
46
+ }
47
+ }
48
+ if (existingIdx >= 0)
49
+ existingList[existingIdx][participantId] = url;
50
+ else
51
+ existingList.Add(new Dictionary<string, string> { { participantId, url } });
52
+ }
53
+ }
54
+
55
+ var dataList = new List<Dictionary<string, object>>();
56
+ foreach (var d in existingList)
57
+ {
58
+ var objDict = new Dictionary<string, object>();
59
+ foreach (var kv in d)
60
+ objDict[kv.Key] = kv.Value;
61
+ dataList.Add(objDict);
62
+ }
63
+ return Task.FromResult(new ScriptResponse
64
+ {
65
+ Data = new Dictionary<string, object> { { "videoCallUrls", dataList } }
66
+ });
67
+ }
68
+
69
+ private List<Dictionary<string, string>> GetIncomingEntries(dynamic body, dynamic instanceData)
70
+ {
71
+ var fromBody = TryGetVideoCallUrlToAdd(body);
72
+ if (fromBody != null && fromBody.Count > 0) return fromBody;
73
+ var fromInstance = TryGetVideoCallUrlToAdd(instanceData);
74
+ if (fromInstance != null && fromInstance.Count > 0) return fromInstance;
75
+ if (body != null)
76
+ {
77
+ var fromBodyUrls = GetVideoCallUrlsList(body);
78
+ if (fromBodyUrls != null && fromBodyUrls.Count > 0) return fromBodyUrls;
79
+ }
80
+ return new List<Dictionary<string, string>>();
81
+ }
82
+
83
+ private List<Dictionary<string, string>> TryGetVideoCallUrlToAdd(dynamic source)
84
+ {
85
+ if (source == null) return null;
86
+ try
87
+ {
88
+ if (!HasProperty(source, "videoCallUrlToAdd")) return null;
89
+ var toAdd = source.videoCallUrlToAdd;
90
+ if (toAdd == null) return null;
91
+ var stringDict = new Dictionary<string, string>();
92
+ var dictObj = toAdd as IDictionary<string, object>;
93
+ if (dictObj != null && dictObj.Count > 0)
94
+ {
95
+ foreach (var kv in dictObj)
96
+ stringDict[kv.Key] = kv.Value?.ToString() ?? string.Empty;
97
+ }
98
+ else
99
+ {
100
+ var dictStr = toAdd as IDictionary<string, string>;
101
+ if (dictStr == null || dictStr.Count == 0) return null;
102
+ foreach (var kv in dictStr)
103
+ stringDict[kv.Key] = kv.Value ?? string.Empty;
104
+ }
105
+ if (stringDict.Count == 0) return null;
106
+ return new List<Dictionary<string, string>> { stringDict };
107
+ }
108
+ catch { }
109
+ return null;
110
+ }
111
+
112
+ private List<Dictionary<string, string>> GetVideoCallUrlsList(dynamic source)
113
+ {
114
+ if (source == null) return new List<Dictionary<string, string>>();
115
+ try
116
+ {
117
+ if (!HasProperty(source, "videoCallUrls")) return new List<Dictionary<string, string>>();
118
+ var urls = source.videoCallUrls;
119
+ if (urls == null) return new List<Dictionary<string, string>>();
120
+ var list = urls as IEnumerable<object>;
121
+ if (list == null) return new List<Dictionary<string, string>>();
122
+ var result = new List<Dictionary<string, string>>();
123
+ foreach (var item in list)
124
+ {
125
+ var dict = item as IDictionary<string, object>;
126
+ if (dict != null)
127
+ {
128
+ var stringDict = new Dictionary<string, string>();
129
+ foreach (var kv in dict)
130
+ stringDict[kv.Key] = kv.Value?.ToString() ?? string.Empty;
131
+ result.Add(stringDict);
132
+ }
133
+ }
134
+ return result;
135
+ }
136
+ catch
137
+ {
138
+ return new List<Dictionary<string, string>>();
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,217 @@
1
+ {
2
+ "key": "start-chat",
3
+ "flow": "sys-flows",
4
+ "domain": "touch",
5
+ "version": "1.0.0",
6
+ "flowVersion": "2.0.0",
7
+ "tags": [
8
+ "new"
9
+ ],
10
+ "attributes": {
11
+ "type": "S",
12
+ "labels": [
13
+ {
14
+ "label": "Start Chat",
15
+ "language": "en-US"
16
+ },
17
+ {
18
+ "label": "Mesaj Başlat",
19
+ "language": "tr-TR"
20
+ }
21
+ ],
22
+ "functions": [],
23
+ "features": [],
24
+ "extensions": [],
25
+ "sharedTransitions": [],
26
+ "startTransition": {
27
+ "key": "start",
28
+ "target": "chat-init",
29
+ "versionStrategy": "Major",
30
+ "triggerType": 0,
31
+ "labels": [
32
+ {
33
+ "label": "Start",
34
+ "language": "en-US"
35
+ },
36
+ {
37
+ "label": "Başla",
38
+ "language": "tr-TR"
39
+ }
40
+ ],
41
+ "onExecutionTasks": [
42
+ {
43
+ "order": 1,
44
+ "task": {
45
+ "domain": "touch",
46
+ "flow": "sys-tasks",
47
+ "key": "check-existing-permanent-chat-room",
48
+ "version": "1.0.0"
49
+ },
50
+ "mapping": {
51
+ "location": "./src/CheckExistingPermanentChatRoomMapping.csx",
52
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgY2hlY2stZXhpc3RpbmctcGVybWFuZW50LWNoYXQtcm9vbSBEYXByU2VydmljZVRhc2sgKFR5cGUgMykuCi8vLyBDYWxscyBnZXQtY2hhdC1yb29tcyBmbG93IGZ1bmN0aW9uIHdpdGggdXNlciBhbmQgcm9vbVR5cGU9cGVybWFuZW50IGZyb20gSW5zdGFuY2VEYXRhLgovLy8gT3V0cHV0OiBoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20gKGJvb2wpLCBleGlzdGluZ1Jvb21BZHZpc29yTWF0Y2hlcyAoYm9vbCksIGV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleSAoc3RyaW5nKS4KLy8vIC0gaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tOiB0cnVlIG9ubHkgaWYgdXNlciBoYXMgYSBwZXJtYW5lbnQgcm9vbSB3aXRoIHRoZSBzYW1lIGFkdmlzb3JUeXBlIChlLmcuIFBNIHJlcXVlc3Qgb25seSBjb3VudHMgUE0gcm9vbXM7IElBIHJlcXVlc3Qgb25seSBjb3VudHMgSUEgcm9vbXMpLgovLy8gLSBleGlzdGluZ1Jvb21BZHZpc29yTWF0Y2hlczogdHJ1ZSBpZiB0aGF0IHJvb20ncyBhZHZpc29ySWQgYWxzbyBtYXRjaGVzOyBmYWxzZSBvdGhlcndpc2UuCi8vLyAtIGV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleToga2V5IG9mIG1hdGNoaW5nIHJvb20sIG9yIGZpcnN0IHJvb20gd2l0aCBzYW1lIGFkdmlzb3JUeXBlIHdoZW4gbm8gbWF0Y2ggKGZvciB0cmFuc2ZlcikuCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBjbGFzcyBDaGVja0V4aXN0aW5nUGVybWFuZW50Q2hhdFJvb21NYXBwaW5nIDogU2NyaXB0QmFzZSwgSU1hcHBpbmcKewogICAgcHVibGljIFRhc2s8U2NyaXB0UmVzcG9uc2U+IElucHV0SGFuZGxlcihXb3JrZmxvd1Rhc2sgdGFzaywgU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBzZXJ2aWNlVGFzayA9IHRhc2sgYXMgRGFwclNlcnZpY2VUYXNrOwogICAgICAgIGlmIChzZXJ2aWNlVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGFwclNlcnZpY2VUYXNrIik7CgogICAgICAgIHZhciBhcHBJZCA9IEdldENvbmZpZ1ZhbHVlKCJEQVBSX0FQUF9JRCIpOwogICAgICAgIGlmICghc3RyaW5nLklzTnVsbE9yRW1wdHkoYXBwSWQpKQogICAgICAgICAgICBzZXJ2aWNlVGFzay5TZXRBcHBJZChhcHBJZCk7CgogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiSW5zdGFuY2UgZGF0YSBpcyByZXF1aXJlZCIpOwoKICAgICAgICB2YXIgdXNlciA9IEdldFN0cmluZyhkYXRhLCAidXNlciIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigidXNlciBpcyByZXF1aXJlZCBpbiBpbnN0YW5jZSBkYXRhIik7CgogICAgICAgIHZhciBxdWVyeVBhcmFtcyA9IG5ldyBMaXN0PHN0cmluZz4KICAgICAgICB7CiAgICAgICAgICAgICJ1c2VyPSIgKyBVcmkuRXNjYXBlRGF0YVN0cmluZyh1c2VyLlRyaW0oKSksCiAgICAgICAgICAgICJyb29tVHlwZT1wZXJtYW5lbnQiLAogICAgICAgICAgICAic3RhdGU9YWN0aXZhdGVkIiwKICAgICAgICAgICAgInBhZ2VTaXplPTIwIgogICAgICAgIH07CiAgICAgICAgc2VydmljZVRhc2suU2V0UXVlcnlTdHJpbmcoc3RyaW5nLkpvaW4oIiYiLCBxdWVyeVBhcmFtcykpOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gY29udGV4dC5Cb2R5OwogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICB2YXIgYWR2aXNvcklkID0gR2V0U3RyaW5nKGRhdGEsICJhZHZpc29ySWQiKTsKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CgogICAgICAgIGJvb2wgaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tID0gZmFsc2U7CiAgICAgICAgYm9vbCBleGlzdGluZ1Jvb21BZHZpc29yTWF0Y2hlcyA9IGZhbHNlOwogICAgICAgIHN0cmluZyBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgPSBudWxsOwogICAgICAgIHN0cmluZyBmaXJzdFJvb21XaXRoU2FtZUFkdmlzb3JUeXBlS2V5ID0gbnVsbDsKCiAgICAgICAgaWYgKHJlc3BvbnNlPy5pc1N1Y2Nlc3MgPT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHZhciByZXNwb25zZURhdGEgPSByZXNwb25zZT8uZGF0YSA/PyByZXNwb25zZT8uRGF0YSA/PyByZXNwb25zZTsKICAgICAgICAgICAgdmFyIHJvb21zID0gR2V0Um9vbXNMaXN0KHJlc3BvbnNlRGF0YSk7CiAgICAgICAgICAgIGlmIChyb29tcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICh2YXIgcm9vbSBpbiByb29tcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB2YXIgcm9vbUFkdmlzb3JUeXBlID0gR2V0U3RyaW5nKHJvb20sICJhZHZpc29yVHlwZSIpOwogICAgICAgICAgICAgICAgICAgIGlmICghc3RyaW5nLkVxdWFscyhyb29tQWR2aXNvclR5cGU/LlRyaW0oKSwgYWR2aXNvclR5cGU/LlRyaW0oKSwgU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgICAgICAgICB2YXIgcm9vbUtleSA9IEdldFN0cmluZyhyb29tLCAiaW5zdGFuY2VLZXkiKSA/PyBHZXRTdHJpbmcocm9vbSwgImtleSIpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHJvb21LZXkpKSBjb250aW51ZTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0Um9vbVdpdGhTYW1lQWR2aXNvclR5cGVLZXkgPT0gbnVsbCkKICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RSb29tV2l0aFNhbWVBZHZpc29yVHlwZUtleSA9IHJvb21LZXk7CgogICAgICAgICAgICAgICAgICAgIGhhc0V4aXN0aW5nUGVybWFuZW50Um9vbSA9IHRydWU7CgogICAgICAgICAgICAgICAgICAgIHZhciByb29tQWR2aXNvcklkID0gR2V0U3RyaW5nKHJvb20sICJhZHZpc29ySWQiKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaW5nLkVxdWFscyhyb29tQWR2aXNvcklkPy5UcmltKCksIGFkdmlzb3JJZD8uVHJpbSgpLCBTdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nUm9vbUFkdmlzb3JNYXRjaGVzID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5ID0gcm9vbUtleTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20gJiYgZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5ID09IG51bGwpCiAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5ID0gZmlyc3RSb29tV2l0aFNhbWVBZHZpc29yVHlwZUtleTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICB7CiAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tID0gaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tLAogICAgICAgICAgICAgICAgZXhpc3RpbmdSb29tQWR2aXNvck1hdGNoZXMgPSBleGlzdGluZ1Jvb21BZHZpc29yTWF0Y2hlcywKICAgICAgICAgICAgICAgIGV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleSA9IGV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgcHJpdmF0ZSBTeXN0ZW0uQ29sbGVjdGlvbnMuSUVudW1lcmFibGUgR2V0Um9vbXNMaXN0KGR5bmFtaWMgcmVzcG9uc2VEYXRhKQogICAgewogICAgICAgIGlmIChyZXNwb25zZURhdGEgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgICAvLyBEaXJlY3Qgcm9vbXMKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KHJlc3BvbnNlRGF0YSwgInJvb21zIikgJiYgcmVzcG9uc2VEYXRhLnJvb21zICE9IG51bGwpCiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VEYXRhLnJvb21zOwogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkocmVzcG9uc2VEYXRhLCAiZGF0YSIpICYmIHJlc3BvbnNlRGF0YS5kYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkocmVzcG9uc2VEYXRhLmRhdGEsICJyb29tcyIpKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YS5kYXRhLnJvb21zOwogICAgICAgICAgICBpZiAoSGFzUHJvcGVydHkocmVzcG9uc2VEYXRhLCAiRGF0YSIpICYmIHJlc3BvbnNlRGF0YS5EYXRhICE9IG51bGwgJiYgSGFzUHJvcGVydHkocmVzcG9uc2VEYXRhLkRhdGEsICJyb29tcyIpKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YS5EYXRhLnJvb21zOwoKICAgICAgICAgICAgLy8gV3JhcHBlZDogY2hlY2tFeGlzdGluZ0RhdGEuaXRlbXNbXS5nZXRDaGF0Um9vbXMucm9vbXMgKHJ1bnRpbWUgdGFzayByZXN1bHQgc2hhcGUpCiAgICAgICAgICAgIHZhciBjaGVja0V4aXN0aW5nID0gR2V0VmFsdWUocmVzcG9uc2VEYXRhLCAiY2hlY2tFeGlzdGluZ0RhdGEiKSA/PyBHZXRWYWx1ZShyZXNwb25zZURhdGEsICJkYXRhIik7CiAgICAgICAgICAgIHZhciByb290ID0gY2hlY2tFeGlzdGluZyA/PyByZXNwb25zZURhdGE7CiAgICAgICAgICAgIGlmIChyb290ICE9IG51bGwgJiYgSGFzUHJvcGVydHkocm9vdCwgIml0ZW1zIikgJiYgcm9vdC5pdGVtcyAhPSBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSByb290Lml0ZW1zIGFzIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZTsKICAgICAgICAgICAgICAgIGlmIChpdGVtcyAhPSBudWxsKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGl0ZW1zKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBnZXRDaGF0Um9vbXMgPSBHZXRWYWx1ZShpdGVtLCAiZ2V0Q2hhdFJvb21zIik7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRDaGF0Um9vbXMgIT0gbnVsbCAmJiBIYXNQcm9wZXJ0eShnZXRDaGF0Um9vbXMsICJyb29tcyIpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vbXMgPSBHZXRWYWx1ZShnZXRDaGF0Um9vbXMsICJyb29tcyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvb21zIGlzIFN5c3RlbS5Db2xsZWN0aW9ucy5JRW51bWVyYWJsZSBlbiAmJiBlbiAhPSBudWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwcml2YXRlIG9iamVjdCBHZXRWYWx1ZShkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICAgICAgcmV0dXJuIEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
53
+ }
54
+ }
55
+ ]
56
+ },
57
+ "states": [
58
+ {
59
+ "key": "chat-init",
60
+ "stateType": 1,
61
+ "versionStrategy": "Minor",
62
+ "labels": [
63
+ {
64
+ "label": "Initialize Chat",
65
+ "language": "en-US"
66
+ },
67
+ {
68
+ "label": "Sohbet Başlatılıyor",
69
+ "language": "tr-TR"
70
+ }
71
+ ],
72
+ "transitions": [
73
+ {
74
+ "key": "open-existing-room",
75
+ "target": "in-chat",
76
+ "triggerType": 1,
77
+ "versionStrategy": "Minor",
78
+ "labels": [
79
+ {
80
+ "label": "Open Existing Room",
81
+ "language": "en-US"
82
+ },
83
+ {
84
+ "label": "Mevcut Odayı Aç",
85
+ "language": "tr-TR"
86
+ }
87
+ ],
88
+ "rule": {
89
+ "location": "./src/HasExistingPermanentRoomRule.csx",
90
+ "code": "dXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKCi8vLyA8c3VtbWFyeT4KLy8vIENvbmRpdGlvbiBmb3IgY2hhdC1pbml0OiBoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20gPT0gdHJ1ZSBBTkQgZXhpc3RpbmdSb29tQWR2aXNvck1hdGNoZXMgPT0gdHJ1ZSAtPiBvcGVuLWV4aXN0aW5nLXJvb20gdHJhbnNpdGlvbiB0byBpbi1jaGF0LgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgSGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tUnVsZSA6IFNjcmlwdEJhc2UsIElDb25kaXRpb25NYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPGJvb2w+IEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KGZhbHNlKTsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQoR2V0Qm9vbChkYXRhLCAiaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tIikgJiYgR2V0Qm9vbChkYXRhLCAiZXhpc3RpbmdSb29tQWR2aXNvck1hdGNoZXMiKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChmYWxzZSk7IH0KICAgIH0KCiAgICBwcml2YXRlIGJvb2wgR2V0Qm9vbChkeW5hbWljIGRhdGEsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChkYXRhID09IG51bGwgfHwgIUhhc1Byb3BlcnR5KGRhdGEsIG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKGRhdGEsIG5hbWUpOwogICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodiBpcyBib29sIGIpIHJldHVybiBiOwogICAgICAgIHJldHVybiBzdHJpbmcuRXF1YWxzKHYuVG9TdHJpbmcoKSwgInRydWUiLCBTeXN0ZW0uU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSk7CiAgICB9Cn0K"
91
+ }
92
+ },
93
+ {
94
+ "key": "to-change-advisor",
95
+ "target": "in-chat",
96
+ "triggerType": 1,
97
+ "versionStrategy": "Minor",
98
+ "labels": [
99
+ {
100
+ "label": "Change Advisor",
101
+ "language": "en-US"
102
+ },
103
+ {
104
+ "label": "Danışmanı Değiştir",
105
+ "language": "tr-TR"
106
+ }
107
+ ],
108
+ "rule": {
109
+ "location": "./src/HasChangedAdvisorRule.csx",
110
+ "code": "dXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKCi8vLyA8c3VtbWFyeT4KLy8vIENvbmRpdGlvbiBmb3IgY2hhdC1pbml0OiBoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20gPT0gdHJ1ZSBBTkQgZXhpc3RpbmdSb29tQWR2aXNvck1hdGNoZXMgPT0gZmFsc2UgLT4gdG8tY2hhbmdlLWFkdmlzb3IgdHJhbnNpdGlvbiB0byBpbi1jaGF0LgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgSGFzQ2hhbmdlZEFkdmlzb3JSdWxlIDogU2NyaXB0QmFzZSwgSUNvbmRpdGlvbk1hcHBpbmcKewogICAgcHVibGljIFRhc2s8Ym9vbD4gSGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIGlmIChkYXRhID09IG51bGwpIHJldHVybiBUYXNrLkZyb21SZXN1bHQoZmFsc2UpOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChHZXRCb29sKGRhdGEsICJoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20iKSAmJiAhR2V0Qm9vbChkYXRhLCAiZXhpc3RpbmdSb29tQWR2aXNvck1hdGNoZXMiKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChmYWxzZSk7IH0KICAgIH0KCiAgICBwcml2YXRlIGJvb2wgR2V0Qm9vbChkeW5hbWljIGRhdGEsIHN0cmluZyBuYW1lKQogICAgewogICAgICAgIGlmIChkYXRhID09IG51bGwgfHwgIUhhc1Byb3BlcnR5KGRhdGEsIG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgdmFyIHYgPSBHZXRQcm9wZXJ0eVZhbHVlKGRhdGEsIG5hbWUpOwogICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAodiBpcyBib29sIGIpIHJldHVybiBiOwogICAgICAgIHJldHVybiBzdHJpbmcuRXF1YWxzKHYuVG9TdHJpbmcoKSwgInRydWUiLCBTeXN0ZW0uU3RyaW5nQ29tcGFyaXNvbi5PcmRpbmFsSWdub3JlQ2FzZSk7CiAgICB9Cn0K"
111
+ },
112
+ "onExecutionTasks": [
113
+ {
114
+ "order": 1,
115
+ "task": {
116
+ "domain": "touch",
117
+ "flow": "sys-tasks",
118
+ "key": "trigger-chat-room-transfer",
119
+ "version": "1.0.0"
120
+ },
121
+ "mapping": {
122
+ "location": "./src/TriggerChatRoomTransferMapping.csx",
123
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKdXNpbmcgQkJULldvcmtmbG93LkRlZmluaXRpb25zOwoKLy8vIDxzdW1tYXJ5PgovLy8gTWFwcGluZyBmb3IgdHJpZ2dlci1jaGF0LXJvb20tdHJhbnNmZXIgRGlyZWN0VHJpZ2dlclRhc2suCi8vLyBUcmlnZ2VycyB0cmFuc2ZlciB0cmFuc2l0aW9uIG9uIGNoYXQtcm9vbSBpbnN0YW5jZS4gVXNlcyBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgYW5kIG5ld0Fkdmlzb3JJZCBmcm9tIHN0YXJ0LWNoYXQgaW5zdGFuY2UgZGF0YS4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIFRyaWdnZXJDaGF0Um9vbVRyYW5zZmVyTWFwcGluZyA6IFNjcmlwdEJhc2UsIElNYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBJbnB1dEhhbmRsZXIoV29ya2Zsb3dUYXNrIHRhc2ssIFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICB2YXIgdHJpZ2dlclRhc2sgPSB0YXNrIGFzIERpcmVjdFRyaWdnZXJUYXNrOwogICAgICAgIGlmICh0cmlnZ2VyVGFzayA9PSBudWxsKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigiVGFzayBtdXN0IGJlIGEgRGlyZWN0VHJpZ2dlclRhc2siKTsKCiAgICAgICAgdmFyIGRhdGEgPSBjb250ZXh0Lkluc3RhbmNlPy5EYXRhOwogICAgICAgIHZhciBleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkgPSBHZXRTdHJpbmcoZGF0YSwgImV4aXN0aW5nQ2hhdFJvb21JbnN0YW5jZUtleSIpOwogICAgICAgIHZhciBuZXdBZHZpc29ySWQgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JJZCIpOwoKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctZXhpc3RpbmdDaGF0Um9vbUluc3RhbmNlS2V5IiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yV2hpdGVTcGFjZShuZXdBZHZpc29ySWQpKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgS2V5ID0gImNoYXQtcm9vbS10cmFuc2Zlci1za2lwcGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcgRGljdGlvbmFyeTxzdHJpbmcsIG9iamVjdD4KICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB7ICJ0cmFuc2ZlclRyaWdnZXJlZCIsIGZhbHNlIH0sCiAgICAgICAgICAgICAgICAgICAgeyAicmVhc29uIiwgIm1pc3NpbmctbmV3QWR2aXNvcklkIiB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgdHJpZ2dlclRhc2suU2V0RG9tYWluKCJ0b3VjaCIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHRyaWdnZXJUYXNrLlNldEtleShleGlzdGluZ0NoYXRSb29tSW5zdGFuY2VLZXkuVHJpbSgpKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRUcmFuc2l0aW9uTmFtZSgidHJhbnNmZXIiKTsKICAgICAgICB0cmlnZ2VyVGFzay5TZXRCb2R5KG5ldyBEaWN0aW9uYXJ5PHN0cmluZywgb2JqZWN0PgogICAgICAgIHsKICAgICAgICAgICAgeyAibmV3QWR2aXNvcklkIiwgbmV3QWR2aXNvcklkLlRyaW0oKSB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgewogICAgICAgICAgICBEYXRhID0gbmV3IERpY3Rpb25hcnk8c3RyaW5nLCBvYmplY3Q+IHsgeyAidHJhbnNmZXJUcmlnZ2VyZWQiLCB0cnVlIH0gfQogICAgICAgIH0pOwogICAgfQoKICAgIHB1YmxpYyBUYXNrPFNjcmlwdFJlc3BvbnNlPiBPdXRwdXRIYW5kbGVyKFNjcmlwdENvbnRleHQgY29udGV4dCkKICAgIHsKICAgICAgICBpZiAoY29udGV4dC5Cb2R5Py5pc1N1Y2Nlc3MgIT0gdHJ1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQobmV3IFNjcmlwdFJlc3BvbnNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIEtleSA9ICJjaGF0LXJvb20tdHJhbnNmZXItZmFpbGVkIiwKICAgICAgICAgICAgICAgIERhdGEgPSBuZXcKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGNvbnRleHQuQm9keT8uZXJyb3JNZXNzYWdlPy5Ub1N0cmluZygpID8/ICJDaGF0IHJvb20gdHJhbnNmZXIgZmFpbGVkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFRhc2suRnJvbVJlc3VsdChuZXcgU2NyaXB0UmVzcG9uc2UoKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgR2V0U3RyaW5nKGR5bmFtaWMgb2JqLCBzdHJpbmcgbmFtZSkKICAgIHsKICAgICAgICBpZiAob2JqID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKEhhc1Byb3BlcnR5KG9iaiwgbmFtZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShvYmosIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIHY/LlRvU3RyaW5nKCk/LlRyaW0oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjYXRjaCB7IH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KfQo="
124
+ }
125
+ }
126
+ ]
127
+ },
128
+ {
129
+ "key": "create-room-and-open",
130
+ "target": "in-chat",
131
+ "triggerType": 1,
132
+ "versionStrategy": "Minor",
133
+ "labels": [
134
+ {
135
+ "label": "Create Room and Open",
136
+ "language": "en-US"
137
+ },
138
+ {
139
+ "label": "Oda Oluştur ve Aç",
140
+ "language": "tr-TR"
141
+ }
142
+ ],
143
+ "rule": {
144
+ "location": "./src/NoExistingPermanentRoomRule.csx",
145
+ "code": "dXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgQkJULldvcmtmbG93LlNjcmlwdGluZzsKCi8vLyA8c3VtbWFyeT4KLy8vIENvbmRpdGlvbiBmb3IgY2hhdC1pbml0OiBoYXNFeGlzdGluZ1Blcm1hbmVudFJvb20gIT0gdHJ1ZSAtPiBjcmVhdGUtcm9vbS1hbmQtb3BlbiB0cmFuc2l0aW9uICh3aXRoIHN0YXJ0LXBlcm1hbmVudC1jaGF0LXJvb20gdGFzaykgdG8gaW4tY2hhdC4KLy8vIDwvc3VtbWFyeT4KcHVibGljIGNsYXNzIE5vRXhpc3RpbmdQZXJtYW5lbnRSb29tUnVsZSA6IFNjcmlwdEJhc2UsIElDb25kaXRpb25NYXBwaW5nCnsKICAgIHB1YmxpYyBUYXNrPGJvb2w+IEhhbmRsZXIoU2NyaXB0Q29udGV4dCBjb250ZXh0KQogICAgewogICAgICAgIHZhciBkYXRhID0gY29udGV4dC5JbnN0YW5jZT8uRGF0YTsKICAgICAgICBpZiAoZGF0YSA9PSBudWxsKSByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KHRydWUpOwogICAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgICAgaWYgKCFIYXNQcm9wZXJ0eShkYXRhLCAiaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tIikpIHJldHVybiBUYXNrLkZyb21SZXN1bHQodHJ1ZSk7CiAgICAgICAgICAgIHZhciB2ID0gR2V0UHJvcGVydHlWYWx1ZShkYXRhLCAiaGFzRXhpc3RpbmdQZXJtYW5lbnRSb29tIik7CiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiBUYXNrLkZyb21SZXN1bHQodHJ1ZSk7CiAgICAgICAgICAgIGlmICh2IGlzIGJvb2wgYikgcmV0dXJuIFRhc2suRnJvbVJlc3VsdCghYik7CiAgICAgICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQoIXN0cmluZy5FcXVhbHModi5Ub1N0cmluZygpLCAidHJ1ZSIsIFN5c3RlbS5TdHJpbmdDb21wYXJpc29uLk9yZGluYWxJZ25vcmVDYXNlKSk7CiAgICAgICAgfQogICAgICAgIGNhdGNoIHsgcmV0dXJuIFRhc2suRnJvbVJlc3VsdCh0cnVlKTsgfQogICAgfQp9Cg=="
146
+ },
147
+ "onExecutionTasks": [
148
+ {
149
+ "order": 1,
150
+ "task": {
151
+ "domain": "touch",
152
+ "flow": "sys-tasks",
153
+ "key": "start-permanent-chat-room",
154
+ "version": "1.0.0"
155
+ },
156
+ "mapping": {
157
+ "location": "./src/StartPermanentChatRoomMapping.csx",
158
+ "code": "dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uVGhyZWFkaW5nLlRhc2tzOwp1c2luZyBCQlQuV29ya2Zsb3cuU2NyaXB0aW5nOwp1c2luZyBCQlQuV29ya2Zsb3cuRGVmaW5pdGlvbnM7CgovLy8gPHN1bW1hcnk+Ci8vLyBNYXBwaW5nIGZvciBzdGFydC1wZXJtYW5lbnQtY2hhdC1yb29tIFN0YXJ0VGFzayAoVHlwZSAxMSkuCi8vLyBTdGFydHMgY2hhdC1yb29tIGZsb3cgYXMgc3ViZmxvdyB3aXRoIGJvZHk6IHVzZXIsIGFkdmlzb3JUeXBlLCBhZHZpc29ySWQgZnJvbSBJbnN0YW5jZURhdGEsIHJvb21UeXBlICJwZXJtYW5lbnQiLgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgY2xhc3MgU3RhcnRQZXJtYW5lbnRDaGF0Um9vbU1hcHBpbmcgOiBTY3JpcHRCYXNlLCBJTWFwcGluZwp7CiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gSW5wdXRIYW5kbGVyKFdvcmtmbG93VGFzayB0YXNrLCBTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHN0YXJ0VGFzayA9IHRhc2sgYXMgU3RhcnRUYXNrOwogICAgICAgIGlmIChzdGFydFRhc2sgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIlRhc2sgbXVzdCBiZSBhIFN0YXJ0VGFzayIpOwoKICAgICAgICB2YXIgZGF0YSA9IGNvbnRleHQuSW5zdGFuY2U/LkRhdGE7CiAgICAgICAgaWYgKGRhdGEgPT0gbnVsbCkKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRPcGVyYXRpb25FeGNlcHRpb24oIkluc3RhbmNlIGRhdGEgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgdmFyIHVzZXIgPSBHZXRTdHJpbmcoZGF0YSwgInVzZXIiKTsKICAgICAgICB2YXIgYWR2aXNvclR5cGUgPSBHZXRTdHJpbmcoZGF0YSwgImFkdmlzb3JUeXBlIik7CiAgICAgICAgdmFyIGFkdmlzb3JJZCA9IEdldFN0cmluZyhkYXRhLCAiYWR2aXNvcklkIik7CgogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKHVzZXIpKQogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZE9wZXJhdGlvbkV4Y2VwdGlvbigidXNlciBpcyByZXF1aXJlZCIpOwogICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGFkdmlzb3JJZCkpCiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCJhZHZpc29ySWQgaXMgcmVxdWlyZWQiKTsKCiAgICAgICAgaWYgKHN0cmluZy5Jc051bGxPcldoaXRlU3BhY2UoYWR2aXNvclR5cGUpKQogICAgICAgICAgICBhZHZpc29yVHlwZSA9ICJJQSI7CgogICAgICAgIHZhciBjaGF0Um9vbUtleSA9IE5vcm1hbGl6ZUZvcktleSh1c2VyKSArICItIiArIE5vcm1hbGl6ZUZvcktleShhZHZpc29yVHlwZSk7CgogICAgICAgIHN0YXJ0VGFzay5TZXREb21haW4oInRvdWNoIik7CiAgICAgICAgc3RhcnRUYXNrLlNldEZsb3coImNoYXQtcm9vbSIpOwogICAgICAgIHN0YXJ0VGFzay5TZXRLZXkoY2hhdFJvb21LZXkpOwogICAgICAgIHN0YXJ0VGFzay5TZXRTeW5jKHRydWUpOwogICAgICAgIHN0YXJ0VGFzay5TZXRCb2R5KG5ldwogICAgICAgIHsKICAgICAgICAgICAgdXNlciwKICAgICAgICAgICAgYWR2aXNvclR5cGUsCiAgICAgICAgICAgIGFkdmlzb3JJZCwKICAgICAgICAgICAgcm9vbVR5cGUgPSAicGVybWFuZW50IgogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gVGFzay5Gcm9tUmVzdWx0KG5ldyBTY3JpcHRSZXNwb25zZSB7IERhdGEgPSBuZXcgeyBjaGF0Um9vbUluc3RhbmNlS2V5ID0gY2hhdFJvb21LZXkgfSB9KTsKICAgIH0KCiAgICBwdWJsaWMgVGFzazxTY3JpcHRSZXNwb25zZT4gT3V0cHV0SGFuZGxlcihTY3JpcHRDb250ZXh0IGNvbnRleHQpCiAgICB7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFNjcmlwdFJlc3BvbnNlKCk7CiAgICAgICAgaWYgKGNvbnRleHQuQm9keT8uaXNTdWNjZXNzID09IHRydWUpCiAgICAgICAgewogICAgICAgICAgICB2YXIga2V5ID0gR2V0U3RyaW5nKGNvbnRleHQuQm9keSwgImtleSIpID8/IEdldFN0cmluZyhjb250ZXh0LkJvZHk/LmRhdGEgPz8gY29udGV4dC5Cb2R5Py5EYXRhLCAia2V5Iik7CiAgICAgICAgICAgIGlmIChzdHJpbmcuSXNOdWxsT3JXaGl0ZVNwYWNlKGtleSkpCiAgICAgICAgICAgICAgICBrZXkgPSBHZXRTdHJpbmcoY29udGV4dC5JbnN0YW5jZT8uRGF0YSwgImNoYXRSb29tSW5zdGFuY2VLZXkiKTsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldyB7IGNoYXRSb29tSW5zdGFuY2VLZXkgPSBrZXkgfTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgcmVzcG9uc2UuRGF0YSA9IG5ldwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGF0Um9vbUluc3RhbmNlS2V5ID0gKHN0cmluZyludWxsLAogICAgICAgICAgICAgICAgZXJyb3IgPSBjb250ZXh0LkJvZHk/LmVycm9yTWVzc2FnZT8uVG9TdHJpbmcoKSA/PyAiRmFpbGVkIHRvIHN0YXJ0IHBlcm1hbmVudCBjaGF0LXJvb20iCiAgICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBUYXNrLkZyb21SZXN1bHQocmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgc3RyaW5nIEdldFN0cmluZyhkeW5hbWljIG9iaiwgc3RyaW5nIG5hbWUpCiAgICB7CiAgICAgICAgaWYgKG9iaiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChIYXNQcm9wZXJ0eShvYmosIG5hbWUpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB2YXIgdiA9IEdldFByb3BlcnR5VmFsdWUob2JqLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiB2Py5Ub1N0cmluZygpPy5UcmltKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2ggeyB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBzdHJpbmcgTm9ybWFsaXplRm9yS2V5KHN0cmluZyB2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoc3RyaW5nLklzTnVsbE9yRW1wdHkodmFsdWUpKSByZXR1cm4gdmFsdWUgPz8gIiI7CiAgICAgICAgcmV0dXJuIHZhbHVlLlJlcGxhY2UoIjoiLCAiLSIpLlJlcGxhY2UoIiAiLCAiLSIpLlJlcGxhY2UoIkAiLCAiLSIpOwogICAgfQp9Cg=="
159
+ }
160
+ }
161
+ ]
162
+ }
163
+ ]
164
+ },
165
+ {
166
+ "key": "in-chat",
167
+ "stateType": 2,
168
+ "versionStrategy": "Minor",
169
+ "labels": [
170
+ {
171
+ "label": "In Chat",
172
+ "language": "en-US"
173
+ },
174
+ {
175
+ "label": "Sohbette",
176
+ "language": "tr-TR"
177
+ }
178
+ ],
179
+ "transitions": [
180
+ {
181
+ "key": "close-chat",
182
+ "target": "chat-closed",
183
+ "triggerType": 0,
184
+ "versionStrategy": "Minor",
185
+ "labels": [
186
+ {
187
+ "label": "Close Chat",
188
+ "language": "en-US"
189
+ },
190
+ {
191
+ "label": "Sohbeti Kapat",
192
+ "language": "tr-TR"
193
+ }
194
+ ]
195
+ }
196
+ ]
197
+ },
198
+ {
199
+ "key": "chat-closed",
200
+ "stateType": 3,
201
+ "versionStrategy": "Minor",
202
+ "labels": [
203
+ {
204
+ "label": "Chat Closed",
205
+ "language": "en-US"
206
+ },
207
+ {
208
+ "label": "Sohbet Kapatıldı",
209
+ "language": "tr-TR"
210
+ }
211
+ ]
212
+ }
213
+ ],
214
+ "subFlowType": "S",
215
+ "timeout": null
216
+ }
217
+ }
@@ -0,0 +1,93 @@
1
+ ###############################################################################
2
+ # Start Video Call Workflow - HTTP Test File
3
+ #
4
+ # This file tests the start-video-call subprocess which:
5
+ # - Is triggered by rezervation staff-start-meet (status=staff-enter) or customer-enter (status=customer-enter)
6
+ # - Builds video call page URL via get-video-call-url Script task for the participant
7
+ # - Flow: start → check-customer-staff → creating-token → completed | retry
8
+ #
9
+ # Can be tested standalone (direct start) or as triggered by rezervation transitions.
10
+ #
11
+ # Prerequisites:
12
+ # 1. vNext Runtime running on localhost:4201
13
+ ###############################################################################
14
+
15
+ @baseUrl = http://localhost:4201
16
+ @apiVersion = 1
17
+ @domain = touch
18
+ @workflow = start-video-call
19
+
20
+ ###############################################################################
21
+ # #
22
+ # START VIDEO CALL (Direct - for testing) #
23
+ # #
24
+ ###############################################################################
25
+
26
+ # Use same key format as rezervation subprocess: {rezervationKey}-token-{status}
27
+ @rezervationKey = rez-{{$timestamp}}
28
+
29
+ ### Start Video Call (Staff Enter)
30
+ # Simulates staff-start-meet transition. Gets token for advisor.
31
+ # @name startVideoCallStaff
32
+ POST {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/{{workflow}}/instances/start?sync=true
33
+ Content-Type: application/json
34
+ Accept-Language: tr-TR
35
+ X-Request-Id: {{$guid}}
36
+
37
+ {
38
+ "key": "{{rezervationKey}}-token-staff-enter",
39
+ "tags": ["video-call", "rezervation"],
40
+ "attributes": {
41
+ "roomName": "{{rezervationKey}}",
42
+ "status": "staff-enter",
43
+ "user": "core.user.user-001",
44
+ "advisor": "touch.portfolio-manager.pm-001"
45
+ }
46
+ }
47
+
48
+ ### Start Video Call (Customer Enter)
49
+ # Simulates customer-enter transition. Gets token for user.
50
+ # @name startVideoCallCustomer
51
+ POST {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/{{workflow}}/instances/start?sync=true
52
+ Content-Type: application/json
53
+ Accept-Language: tr-TR
54
+ X-Request-Id: {{$guid}}
55
+
56
+ {
57
+ "key": "{{rezervationKey}}-token-customer-enter",
58
+ "tags": ["video-call", "rezervation"],
59
+ "attributes": {
60
+ "roomName": "{{rezervationKey}}",
61
+ "status": "customer-enter",
62
+ "user": "core.user.user-001",
63
+ "advisor": "touch.portfolio-manager.pm-001"
64
+ }
65
+ }
66
+
67
+ ###############################################################################
68
+ # #
69
+ # GET INSTANCE / RETRY #
70
+ # #
71
+ ###############################################################################
72
+
73
+ @instanceId = <paste-instance-id-from-start-response>
74
+
75
+ ### Get Start Video Call Instance
76
+ # Inspect state and videoCallUrl / getTokenSuccess / getTokenError.
77
+ # @name getStartVideoCallInstance
78
+ GET {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/{{workflow}}/instances/{{instanceId}}
79
+ Accept: application/json
80
+ Accept-Language: tr-TR
81
+ X-Request-Id: {{$guid}}
82
+
83
+ ### Retry (creating-token → creating-token)
84
+ # When URL generation fails, manually retry.
85
+ # @name retryGetToken
86
+ PATCH {{baseUrl}}/api/v{{apiVersion}}/{{domain}}/workflows/{{workflow}}/instances/{{instanceId}}/transitions/retry?sync=true
87
+ Content-Type: application/json
88
+ Accept-Language: tr-TR
89
+ X-Request-Id: {{$guid}}
90
+
91
+ {
92
+ "attributes": {}
93
+ }