@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,122 @@
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
+ /// Mapping for create-chat-room-for-rezervation HttpTask (Type 6).
9
+ /// Creates a Matrix chat room via native /_matrix/client/v3/createRoom.
10
+ /// APISIX converts X-Matrix-User header to Bearer token automatically.
11
+ /// Business logic ported from MatrixChatApi: name prefixing, alias, topic, private config, invite formatting.
12
+ /// </summary>
13
+ public class CreateChatRoomForRezervationMapping : ScriptBase, IMapping
14
+ {
15
+ public async Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)
16
+ {
17
+ var httpTask = task as HttpTask;
18
+ if (httpTask == null)
19
+ throw new InvalidOperationException("Task must be an HttpTask");
20
+
21
+ var matrixBaseUrl = await GetSecretAsync("vnext-secret", "workflow-secret", "MatrixBaseUrl");
22
+ if (string.IsNullOrWhiteSpace(matrixBaseUrl))
23
+ throw new InvalidOperationException("MatrixBaseUrl secret is required");
24
+ var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/createRoom";
25
+ httpTask.SetUrl(fullUrl);
26
+
27
+ var instanceKey = context.Instance?.Key;
28
+ var data = context.Instance?.Data;
29
+ var user = data?.user?.ToString();
30
+ var advisorId = data?.advisor?.ToString();
31
+
32
+ var prefixedName = $"{instanceKey}";
33
+ var aliasName = $"{instanceKey}";
34
+ var topic = $"Room created by {user}";
35
+
36
+ var inviteList = new List<string>();
37
+ if (!string.IsNullOrWhiteSpace(advisorId))
38
+ inviteList.Add(advisorId.StartsWith("@") ? advisorId : $"@{advisorId}:localhost");
39
+
40
+ var headers = new Dictionary<string, string>
41
+ {
42
+ ["Content-Type"] = "application/json",
43
+ ["Accept"] = "application/json",
44
+ ["X-Matrix-User"] = user,
45
+ ["x-matrix-user"] = user
46
+ };
47
+ httpTask.SetHeaders(headers);
48
+
49
+ var body = new
50
+ {
51
+ name = prefixedName,
52
+ room_alias_name = aliasName,
53
+ topic = topic,
54
+ preset = "private_chat",
55
+ visibility = "private",
56
+ initial_state = new[]
57
+ {
58
+ new { type = "m.room.join_rules", state_key = "", content = new { join_rule = "invite" } }
59
+ },
60
+ invite = inviteList
61
+ };
62
+ httpTask.SetBody(body);
63
+
64
+ return new ScriptResponse();
65
+ }
66
+
67
+ public Task<ScriptResponse> OutputHandler(ScriptContext context)
68
+ {
69
+ var result = new ScriptResponse();
70
+ var response = context.Body;
71
+ var bodyData = response?.data;
72
+
73
+ string roomId = GetString(bodyData, "room_id");
74
+ string errcode = GetString(bodyData, "errcode");
75
+ string errorMsg = GetString(bodyData, "error");
76
+
77
+ if (!string.IsNullOrEmpty(errcode))
78
+ {
79
+ if (errcode == "M_ROOM_IN_USE")
80
+ throw new Exception("M_ROOM_IN_USE");
81
+
82
+ result.Data = new
83
+ {
84
+ chatIntegration = new
85
+ {
86
+ roomId = (string)null,
87
+ error = errorMsg,
88
+ errorCode = errcode
89
+ }
90
+ };
91
+ }
92
+ else
93
+ {
94
+ result.Data = new
95
+ {
96
+ chatIntegration = new
97
+ {
98
+ roomId=roomId??response?.data?.chatIntegration?.roomId,
99
+ error = (string)null,
100
+ errorCode = (string)null
101
+ }
102
+ };
103
+ }
104
+
105
+ return Task.FromResult(result);
106
+ }
107
+
108
+ private string GetString(dynamic obj, string name)
109
+ {
110
+ if (obj == null) return null;
111
+ try
112
+ {
113
+ if (HasProperty(obj, name))
114
+ {
115
+ var v = GetPropertyValue(obj, name);
116
+ return v?.ToString();
117
+ }
118
+ }
119
+ catch { }
120
+ return null;
121
+ }
122
+ }
@@ -0,0 +1,140 @@
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
+ /// Mapping for create-permanent-chat-room HttpTask (Type 6) in the chat-room subflow.
9
+ /// Creates a permanent Matrix room via native /_matrix/client/v3/createRoom.
10
+ /// APISIX converts X-Matrix-User header to Bearer token automatically.
11
+ /// Room name = {user}_{instanceKey}-{advisorType}, advisor invited.
12
+ /// </summary>
13
+ public class CreatePermanentChatRoomMapping : ScriptBase, IMapping
14
+ {
15
+ public async Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)
16
+ {
17
+ var httpTask = task as HttpTask;
18
+ if (httpTask == null)
19
+ throw new InvalidOperationException("Task must be an HttpTask");
20
+
21
+ var matrixBaseUrl = await GetSecretAsync("vnext-secret", "workflow-secret", "MatrixBaseUrl");
22
+ if (string.IsNullOrWhiteSpace(matrixBaseUrl))
23
+ throw new InvalidOperationException("MatrixBaseUrl secret is required");
24
+ var fullUrl = matrixBaseUrl.TrimEnd('/') + "/_matrix/client/v3/createRoom";
25
+ httpTask.SetUrl(fullUrl);
26
+
27
+ var instanceKey = context.Instance?.Key;
28
+ var data = context.Instance?.Data;
29
+ var user = data?.user?.ToString();
30
+ var advisorType = data?.advisorType?.ToString() ?? "pm";
31
+ var advisorId = data?.advisorId?.ToString();
32
+
33
+ var prefixedName = $"{instanceKey}";
34
+ var aliasName = $"{instanceKey}";
35
+ var topic = $"Room created by {user}";
36
+
37
+ var inviteList = new List<string>();
38
+ if (!string.IsNullOrWhiteSpace(advisorId))
39
+ inviteList.Add(advisorId.StartsWith("@") ? advisorId : $"@{advisorId}:localhost");
40
+
41
+ var headers = new Dictionary<string, string>
42
+ {
43
+ ["Content-Type"] = "application/json",
44
+ ["Accept"] = "application/json",
45
+ ["X-Matrix-User"] = user
46
+ };
47
+ httpTask.SetHeaders(headers);
48
+
49
+ var body = new
50
+ {
51
+ name = prefixedName,
52
+ room_alias_name = aliasName,
53
+ topic = topic,
54
+ preset = "private_chat",
55
+ visibility = "private",
56
+ initial_state = new[]
57
+ {
58
+ new { type = "m.room.join_rules", state_key = "", content = new { join_rule = "invite" } }
59
+ },
60
+ invite = inviteList
61
+ };
62
+ httpTask.SetBody(body);
63
+
64
+ return new ScriptResponse();
65
+ }
66
+
67
+ public Task<ScriptResponse> OutputHandler(ScriptContext context)
68
+ {
69
+ var result = new ScriptResponse();
70
+ var response = context.Body;
71
+ var bodyData = response?.data;
72
+ var instanceData = context.Instance?.Data;
73
+
74
+ string roomId = GetString(bodyData, "room_id");
75
+ string errcode = GetString(bodyData, "errcode");
76
+ string errorMsg = GetString(bodyData, "error");
77
+ string advisorId = GetString(instanceData, "advisorId");
78
+
79
+ if (!string.IsNullOrEmpty(errcode))
80
+ {
81
+ if (errcode == "M_ROOM_IN_USE")
82
+ throw new Exception("M_ROOM_IN_USE");
83
+
84
+ result.Data = new
85
+ {
86
+ chatIntegration = new
87
+ {
88
+ roomId = (string)null,
89
+ error = errorMsg,
90
+ errorCode = errcode
91
+ }
92
+ };
93
+ }
94
+ else
95
+ {
96
+ string user = GetString(instanceData, "user");
97
+ var members = new List<object>();
98
+ if (!string.IsNullOrWhiteSpace(user))
99
+ members.Add(new { memberId = user, role = "owner" });
100
+ if (!string.IsNullOrWhiteSpace(advisorId))
101
+ members.Add(new { memberId = advisorId, role = "advisor" });
102
+
103
+ string roomType = GetString(instanceData, "roomType");
104
+ string startDateTime = GetString(instanceData, "startDateTime");
105
+ string endDateTime = GetString(instanceData, "endDateTime");
106
+
107
+ result.Data = new
108
+ {
109
+ chatIntegration = new
110
+ {
111
+ roomId,
112
+ error = (string)null,
113
+ errorCode = (string)null
114
+ },
115
+ roomType,
116
+ startDateTime,
117
+ endDateTime,
118
+ members = members,
119
+ pendingJoinUserId = advisorId
120
+ };
121
+ }
122
+
123
+ return Task.FromResult(result);
124
+ }
125
+
126
+ private string GetString(dynamic obj, string name)
127
+ {
128
+ if (obj == null) return null;
129
+ try
130
+ {
131
+ if (HasProperty(obj, name))
132
+ {
133
+ var v = GetPropertyValue(obj, name);
134
+ return v?.ToString();
135
+ }
136
+ }
137
+ catch { }
138
+ return null;
139
+ }
140
+ }
@@ -0,0 +1,14 @@
1
+ using System.Threading.Tasks;
2
+ using BBT.Workflow.Scripting;
3
+
4
+ /// <summary>
5
+ /// Condition for customer-control to end transition in rezervation-start flow.
6
+ /// Both advisor and customer complete to end. Returns true when in customer-control.
7
+ /// </summary>
8
+ public class CustomerControlToEndRule : ScriptBase, IConditionMapping
9
+ {
10
+ public Task<bool> Handler(ScriptContext context)
11
+ {
12
+ return Task.FromResult(true);
13
+ }
14
+ }
@@ -0,0 +1,92 @@
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
+ /// Mapping for determine-transfer-type task (ScriptTask - Type 7).
9
+ /// Reads startDate and endDate from instance data.
10
+ /// If endDate is present: transferType = "annual-leave"
11
+ /// If endDate is absent: transferType = "termination", endDate defaults to "2099-12-31"
12
+ /// </summary>
13
+ public class DetermineTransferTypeMapping : ScriptBase, IMapping
14
+ {
15
+ public Task<ScriptResponse> InputHandler(WorkflowTask task, ScriptContext context)
16
+ {
17
+ var data = context.Instance?.Data;
18
+ if (data == null)
19
+ throw new InvalidOperationException("Instance data is required");
20
+
21
+ var startDate = GetString(data, "startDate");
22
+ var endDate = GetString(data, "endDate");
23
+
24
+ if (string.IsNullOrEmpty(startDate))
25
+ throw new ArgumentException("startDate is required.", "startDate");
26
+
27
+ string transferType;
28
+ if (string.IsNullOrEmpty(endDate))
29
+ {
30
+ transferType = "termination";
31
+ endDate = "2099-12-31";
32
+ }
33
+ else
34
+ {
35
+ transferType = "annual-leave";
36
+ }
37
+
38
+ var sourceAdvisorId = GetString(data, "sourceAdvisorId");
39
+ var advisorType = GetString(data, "advisorType");
40
+
41
+ return Task.FromResult(new ScriptResponse
42
+ {
43
+ Data = new
44
+ {
45
+ transferType,
46
+ startDate,
47
+ endDate,
48
+ sourceAdvisorId,
49
+ advisorType
50
+ }
51
+ });
52
+ }
53
+
54
+ public Task<ScriptResponse> OutputHandler(ScriptContext context)
55
+ {
56
+ var data = context.Instance?.Data;
57
+
58
+ var startDate = GetString(data, "startDate");
59
+ var endDate = GetString(data, "endDate");
60
+
61
+ string transferType = string.IsNullOrEmpty(endDate) ? "termination" : "annual-leave";
62
+ if (string.IsNullOrEmpty(endDate))
63
+ endDate = "2099-12-31";
64
+
65
+ var result = new Dictionary<string, object>();
66
+ result["transferType"] = transferType;
67
+ result["startDate"] = startDate;
68
+ result["endDate"] = endDate;
69
+
70
+ var sourceAdvisorId = GetString(data, "sourceAdvisorId");
71
+ var advisorType = GetString(data, "advisorType");
72
+ if (sourceAdvisorId != null) result["sourceAdvisorId"] = sourceAdvisorId;
73
+ if (advisorType != null) result["advisorType"] = advisorType;
74
+
75
+ return Task.FromResult(new ScriptResponse { Data = result });
76
+ }
77
+
78
+ private string GetString(dynamic obj, string name)
79
+ {
80
+ if (obj == null) return null;
81
+ try
82
+ {
83
+ if (HasProperty(obj, name))
84
+ {
85
+ var v = GetPropertyValue(obj, name);
86
+ return v?.ToString();
87
+ }
88
+ }
89
+ catch { }
90
+ return null;
91
+ }
92
+ }