From d260d3681efae1833b01243830ad6a06c202537e Mon Sep 17 00:00:00 2001 From: Lyncoln Date: Sat, 17 Oct 2026 00:41:52 -0400 Subject: [PATCH] Successfully built RMASS message push module, sender id resolver from DM room and included processing for 204 HTTP response with no content when handling incoming JSON --- .../__pycache__/operation.cpython-314.pyc | Bin 924 -> 931 bytes core/execution/operation/operation.py | 5 +- core/runtime/__pycache__/logs.cpython-314.pyc | Bin 1226 -> 1403 bytes .../__pycache__/outputs.cpython-314.pyc | Bin 1102 -> 1143 bytes .../__pycache__/resolver.cpython-314.pyc | Bin 1404 -> 1925 bytes .../__pycache__/savedata.cpython-314.pyc | Bin 3137 -> 3126 bytes core/runtime/logs.py | 10 ++- core/runtime/outputs.py | 38 +++++----- core/runtime/recursive.py | 4 +- core/runtime/resolver.py | 11 +++ core/runtime/savedata.py | 4 +- .../server/__pycache__/server.cpython-314.pyc | Bin 4454 -> 4796 bytes core/server/server.py | 24 ++++-- login.py | 4 +- plugins/rmass/__init__.py | 2 +- .../__pycache__/__init__.cpython-314.pyc | Bin 223 -> 225 bytes .../rmassmessagepush.cpython-314.pyc | Bin 0 -> 872 bytes .../synapsegetroomalias.cpython-314.pyc | Bin 0 -> 682 bytes .../synapsepushmessages.cpython-314.pyc | Bin 1471 -> 1452 bytes plugins/rmass/actions/rmassmessagepush.py | 70 ++++++++++++++++++ plugins/rmass/actions/synapsegetroomalias.py | 54 ++++++++++++++ plugins/rmass/actions/synapsepushmessages.py | 2 +- plugins/rmass/listeners/__init__.py | 2 +- .../__pycache__/__init__.cpython-314.pyc | Bin 189 -> 199 bytes .../synapselistener.cpython-314.pyc | Bin 0 -> 275 bytes .../rmassmessagepush.cpython-314.pyc | Bin 0 -> 501 bytes plugins/rmass/operations/rmassmessagepush.py | 17 +++++ savedata/rmmanager.db | Bin 16384 -> 16384 bytes savedata/tokens.json | 2 +- synapsemessagepush.py | 4 +- 30 files changed, 211 insertions(+), 42 deletions(-) create mode 100644 plugins/rmass/actions/__pycache__/rmassmessagepush.cpython-314.pyc create mode 100644 plugins/rmass/actions/__pycache__/synapsegetroomalias.cpython-314.pyc create mode 100644 plugins/rmass/actions/rmassmessagepush.py create mode 100644 plugins/rmass/actions/synapsegetroomalias.py create mode 100644 plugins/rmass/listeners/__pycache__/synapselistener.cpython-314.pyc create mode 100644 plugins/rmass/operations/__pycache__/rmassmessagepush.cpython-314.pyc create mode 100644 plugins/rmass/operations/rmassmessagepush.py diff --git a/core/execution/operation/__pycache__/operation.cpython-314.pyc b/core/execution/operation/__pycache__/operation.cpython-314.pyc index 0823dbe5d3edff61af7ed8294467f0b48a60c24c..26870273806dffe47993c463b090d64d96e534e0 100644 GIT binary patch delta 282 zcmbQkzL=d)n~#@^0SGbYd0 z#IrKojCu?OO!^E3%wdcZKZr6iPiA8@)@C+gf+#Lv_SR-#h+&6nWe9hM$&>?C6q$xG zO-^Cd1nTNzbTTU91S-45S(I8_ke^qaT6~K=zqF*Fw50eJTViraW`5o+4!9i15o!vP znV75D;qcyul~X;Qm-ha&iSzFeBIGGfeH1BbZef UB`4Q1i*tQp5n&WA5&~)j0LNZCo&W#< diff --git a/core/execution/operation/operation.py b/core/execution/operation/operation.py index 69158d9..402d863 100644 --- a/core/execution/operation/operation.py +++ b/core/execution/operation/operation.py @@ -4,10 +4,11 @@ from core.execution.action.action import buildAction from core.runtime.skipstep import skipStep from core.runtime.recursive import recursiveSet -def buildOperation(definition): +outputs = {} +def buildOperation(definition, outputs): actions = definition.actions responses = [] - outputs = {} + #outputs = {} for action in actions: diff --git a/core/runtime/__pycache__/logs.cpython-314.pyc b/core/runtime/__pycache__/logs.cpython-314.pyc index f8ee91a6eac36870a4eed1fe962e863acf67de0e..dba84d428f9dd2bfb4f5ad92a5c1c96ef1358dc9 100644 GIT binary patch delta 474 zcmX@b`J0PZn~#@^0SG*PT*~@8k=LIwV`A)Ojv!7;pje9ZRmb0{+e0kHyuJVOiz$T$#)0UHcr88gW<$TIlsux6HJ z$YfMNQp3iOBG14e1JcJ1QV9Y<>>*46!V?!rNtrM~L_oSh=4UcMOwi<-oWtZUQNVAiVcY@e->50-4 zcxOak;M2Uqq4iOKftC9M?_@p}G1dcCSJZtcYqH4Ke_&$fG`zzjIKgX1#r)ctwX^G2 zlwXxMzaVFELCEq7kJV>3pspVu#2Gl%rbx`Oyey#l`->2RfW#LDMuSD-z#DEb zPtVLtF9P{sCBtVR$xtK?ByMro)IAAE|1ri^a85tRGGw^+35n<#m Ik_L(Z0JO|-EC2ui delta 308 zcmey(b&8W$n~#@^0SM0RKc6*mBCkIq*TmS%9C0TsA{ZD_q$jUqRG%Er$j8V&Ige46 zF>-PbqZCN894P4ll=PYWhtVA<>A|GPxz(CkmLZc-lVkEJCU-`^$(qb(xy67cGXrt) zGlt2GEGd@3S5zJDaPUqLn=U<3dIIl^=nH(BS2(mj@-VP+f8b=`61dJOb&*qQM#^PQ zr3Dq&)vYh8Tkj~oqV6<#9*cZENGI0}i}|)QZD-rBFuy8od_l_O0-xy>4zq_WTt7Yt zGjOU+k(gt7SwQtyF*nfKDVEMg42O;QT$q?OnQpP?bT(y$nGmvB`5(N^s pIBatBQ%ZAE?TVy;Tt*-+<^>WTm>C%vZ!_?HVG&~FE|LU!1OU@%S4;o^ diff --git a/core/runtime/__pycache__/outputs.cpython-314.pyc b/core/runtime/__pycache__/outputs.cpython-314.pyc index a6cee941556ca4fc695ef7f2700383758823a70d..44e2c61e2360a0479fc049ec1dc3a989d0098f5c 100644 GIT binary patch delta 343 zcmX@d@tuQLn~#@^0SHe1yp)wYk=LK`#Kc$?$(0NYG7Mo1L5vpV3=Am?Ks;$6KY)31 z9;4L8Wpa#cVNA+E>B)x}-9@)%GFUUqGGsDpGTma&FD)r3Eh+ZfEXyRtSbr91as$I1 zcD|0X36B&IAiy9Z-Qfqc8$^B7W#CZy@r8pyMCl6yBd_Tl1(oGoi?~);Tvjld#QT96DDhk0kV-@BmthWkU{~I+5trrv1tH1104Wq z0Vx662XA$BaCLNZvor!40e`yy004jh^a=n74~TYFEO_@!b zPl!$M1^^u@m_N`680QWi*d8v|9x~A$GSeP3h)>`jF4rG4(H}I{A2yK-kOSls9hhaL zRM!(K(i1A!6eQOaE724ys72HiGT<>cw;r(`*D*!WF-6ufN6{25kX1|A7aGc837Y=8UO$Qh!R}5 diff --git a/core/runtime/__pycache__/resolver.cpython-314.pyc b/core/runtime/__pycache__/resolver.cpython-314.pyc index 86fb6efb9001bacc2d848a245cd25568dd4df577..4cd847b8a933b9ff8b17e7bc9e6d58f473764ab1 100644 GIT binary patch delta 599 zcmeyv)ymJO&Bx2d00d`0U&>m?I+4$un;pnw2I9{Tm?s8kGTxjl$0)sVYCIED5bMM` zF*Zw}R7x*MkdbwA0+V)q00Tog69Yrho)~VR6c~hS>qx=a3=AfW5Ox7?7>@vhn;Zi} z0b>|%053uXjD;{Ej1i_Qh}i^aItUc-dMhw6a5Bg-#PEX!fJ6{m3{0Usl5iL=Lex75 zqA7wmj46U!4X6pBJ&Y-c9h+0-8N!&988kU2|6)?pxy7B5nw+0kTvAk;Tv8?M;_B@0 z7aS54>KvjF;u;*{>F0intvEF=CAA2sL5W#M=oWiXYC%q7a_TMCf}+g45>39z0nF** zw|J4vNlhu{13E=bO=0prW=}2!AR81+#cMYUvS={YOU`hc?>E!$3b)n`6|Lod3;j0O zUR80tuHt@C#r>L!=S2a932b*1loxnhRWZ4&U^;>Kv5d+Dmj^0_*HtVps#xw(-jT9f z^FYvL6^}{2A6Xe>Rll$?2#Q@0)4n30b4NgQLhdyIm5=-ks$PsA1Q--_J3J2KczG$)vic+ Oaw4lRhdQGOSQY>$*n{%` delta 168 zcmZqW|HH+n&Bx2d00d5dFJ#?jp2%m;%?9K#1M%l&OcMh%8Eq!ZF-mWo8qdTQ#-z-k z$vWADMU6?5ZE_on4wEMDou}y+kn~#@^0SH`HT*`{s$or6qapUCoOmW-+L7u*jL6HjHu91^tm^C-|FmL4m E0A-aA5C8xG delta 57 zcmdlcaZrL+n~#@^0SHcOUdl?}$or6qanI!UOmX~v{vir}p*}tep?;o$p{|o7m^CMF M;S$)~#k__C0O}?Yng9R* diff --git a/core/runtime/logs.py b/core/runtime/logs.py index 81e593e..5d19255 100644 --- a/core/runtime/logs.py +++ b/core/runtime/logs.py @@ -11,11 +11,13 @@ def buildLog (action, outputs, response): except: (KeyError, TypeError) - if action.showstatus is True and response.status_code == 200: + if action.showstatus is True and response.status_code in [200, 204]: print(f"{action.name} successful") - elif action.showstatus is True and response.status_code != 200: + elif action.showstatus is True and response.status_code not in [200, 204]: print(f"{action.name} failed with status code {response.status_code}") - print(f"Response: {response.json()["error"]}") - + try: + print(f"Response: {response.json()["error"]}") + except KeyError: + print(f"Response:", response.json()) return diff --git a/core/runtime/outputs.py b/core/runtime/outputs.py index 8409d82..418eea1 100644 --- a/core/runtime/outputs.py +++ b/core/runtime/outputs.py @@ -1,30 +1,32 @@ import json def buildOutput(response, action, outputs): - #if select_data != "not applied": - #response_data = select_data - #else: - #response_data = response.json() if hasattr(action, "outputs"): - try: - response_data = response.json() - except AttributeError: - response_data = json.loads(response) - response_objects = [response_data] + if response != None: + try: + response_data = response.json() + except AttributeError: + response_data = json.loads(response) + response_objects = [response_data] - while response_objects: - response_object = response_objects.pop() + while response_objects: + response_object = response_objects.pop() - for key, value, in response_object.items(): + for key, value, in response_object.items(): - if isinstance(value, dict): - response_objects.append(value) + if isinstance(value, dict): + response_objects.append(value) - for output_name, response_key in action.outputs.items(): - if key == response_key: - outputs[output_name] = value + for output_name, response_key in action.outputs.items(): + if key == response_key: + outputs[output_name] = value + return outputs + + else: + return outputs + - return outputs + #return outputs diff --git a/core/runtime/recursive.py b/core/runtime/recursive.py index e1a2ee9..e9a8eb1 100644 --- a/core/runtime/recursive.py +++ b/core/runtime/recursive.py @@ -11,8 +11,8 @@ def recursiveSet(definition, outputs): for job in recursiveset: outputs, response = buildAction(job, outputs) - #print(outputs["profile"]) - #print(outputs["messages"]) + print("MESSAGE BODY DEBUG") + print(resolved["messages"]) return outputs from core.execution.action.action import buildAction diff --git a/core/runtime/resolver.py b/core/runtime/resolver.py index c4a56d8..cc5201a 100644 --- a/core/runtime/resolver.py +++ b/core/runtime/resolver.py @@ -26,4 +26,15 @@ def resolveItem(action, item): if resolved[source] == key: resolved[source] = value + if "deconstruct" in action.resolve: + for source, mutation in action.resolve["deconstruct"].items(): + deconstructed = str(resolved[source]) + + for item in mutation: + + deconstructed = deconstructed.replace(str(item), "") + print("DECONSTRUCT TESTING") + print(deconstructed) + resolved[source] = deconstructed + print(resolved["sender"]) return resolved diff --git a/core/runtime/savedata.py b/core/runtime/savedata.py index 1906117..52696d8 100644 --- a/core/runtime/savedata.py +++ b/core/runtime/savedata.py @@ -17,8 +17,8 @@ def buildSave(action, outputs): for key, value in save_data.items(): database.execute(""" CREATE TABLE IF NOT EXISTS output_test ( - dictionary TEXT NOT NULL UNIQUE, - value TEXT NOT NULL UNIQUE + dictionary TEXT PRIMARY KEY, + value TEXT NOT NULL ) """) diff --git a/core/server/__pycache__/server.cpython-314.pyc b/core/server/__pycache__/server.cpython-314.pyc index ed915826d93239b5b081e23e1e1bbc7a0ec7aac4..941c636755ffcab9b091a71503987ecc9eb0bca5 100644 GIT binary patch delta 1273 zcmY+EO>7%Q6oB8v_WF0%b{+rZr%oIvP28kzR1!!c6jeZ*L}|fnREwgd#cf8x#ojeD z>xh6Ly--?lXw!*AIMHK|p!V294;(l~1o5*WqD2L93=jkd4$ND}RGGs!&+l*Mz1inq zdmi*@gPIxuxw`-T`pUz|nwBE=TK~C|7eM#UsMDIIb%B(9GvVoo6>(($OmzB?b*Kv# zVi{O~!T^RJT!lgLg+KOOKo5?zG%O>ev0I5aWIzukL01>tBd&dIQrD7TrF4>oTzKv0 zOQ(X2a1nCnb+?cpId1G?p*xmS6@c5Q@_^NwPv66&jHsgbPU`b)G L;_{FV=gj{AA6_bk delta 918 zcmY+COH30%7{_PY?rz(CKwG+PL4l<_+)z1S6NDgYjPVg4&7#B@s)F5+64-^=ZDV2# zUW_IZBN;EAY6B17zJbLh;kpn3Z;z9ICghVbH=i5SnIs9hk|Gnn>G9TL3Ta->k z4kNav?|mJgRpyi=em~c7J(ZU=lt;NkU^=kqKtSygj9}JRm9x0IyR~toAtRJPMmQhH z`ghcbAtsO;HEHtYV3Q!Md02~GgfFPg=&YQiT@MDaZQD_;7 mYpCxB>R3hkD#|c^7wFSyDmjL+_9foAh2XGd_&MC*W&ID_$F>&$ diff --git a/core/server/server.py b/core/server/server.py index 4329062..8ab5a01 100644 --- a/core/server/server.py +++ b/core/server/server.py @@ -5,7 +5,10 @@ from http.server import HTTPServer, BaseHTTPRequestHandler from .dispatcher import dispatchRequest from .createresponse import buildResponse from core.runtime.outputs import buildOutput +from core.runtime.resolver import resolveItem from plugins.rmass.listeners import synapselistener +from plugins.rmass.operations import rmassmessagepush +from core.execution.operation import buildOperation port = int(os.environ.get("SERVER_PORT", 19001)) @@ -104,13 +107,20 @@ class RequestHandler(BaseHTTPRequestHandler): request = json.loads(data) requestjson = json.dumps(request, indent=4) - print (request) - print(requestjson) - - outputs = buildOutput(data, synapselistener, outputs) - print (outputs) - #resolved = - #outputs = buildOperation(listener, outputs, resolved) + #print (request) + #print(requestjson) + for event in request["events"]: + if "state_key" in event: + # Room state event + continue + + if event.get("type") == "m.room.message": + # Process the message + print (event) + outputs = buildOutput(data, synapselistener, outputs) + #print (event) + + outputs = buildOperation(rmassmessagepush, outputs) self.send_response(200) self.send_header("Content-Type", "application/json") diff --git a/login.py b/login.py index a39d8bd..0dcb070 100644 --- a/login.py +++ b/login.py @@ -1,5 +1,7 @@ from plugins import rmass from core.execution.operation import buildOperation -outputs = buildOperation(rmass.operations.login) +outputs = {} + +outputs = buildOperation(rmass.operations.login, outputs) diff --git a/plugins/rmass/__init__.py b/plugins/rmass/__init__.py index 9516405..905e15f 100644 --- a/plugins/rmass/__init__.py +++ b/plugins/rmass/__init__.py @@ -1 +1 @@ -from . import actions, operations, inbound +from . import actions, operations, listeners diff --git a/plugins/rmass/__pycache__/__init__.cpython-314.pyc b/plugins/rmass/__pycache__/__init__.cpython-314.pyc index e8ecef06a6922e9111b15ab391b92a1347e0d533..d95e6c4b7d3a7c83a24d6baf77ce177b3d1cb0f4 100644 GIT binary patch delta 45 ycmcc5_>hrTn~#@^0SLqwUCPp($Q#DRnUh&ulA4!VR6H>|n^Wg9gH90#P#ypnunac< delta 43 wcmaFJc%PA1n~#@^0SNBqUd+;-$Q#DNo|%`FUz(RPF*lo2>oS8@5eHBf01H0RsX|4X(2$M{WO^#Hkc}))Lyo7Qjbjzn0K1;%8>kL98mI|p)z^fMTBwaWXbCwL z2DCg!Muj|07-&V9sOzc1LOs++kI*Vw^Wm+q(fXD$csyQ4M+YY-n@5Cmd_gup6+Ds_ z9*US|r&7NlLRy?;Az`w{C{2S5r$jnrL^2V?p={AYqz`XnK~mXRfZ&XV*Rm#Jzyhba z>`)e8#96=z8xa-=F6$u~(u@mM48_>pVkzc42-9HP-c9J0h)4n)ydh1cb4jj6ED|E^ zMf$mGgp&feFv4jvBB8A1jGo5{ISi%o>GGFtvfewg*OMAgo8lZ;TwgvfA*!&lmQdd=V zW^YW4JG%|0xioRhu41|~r*pG+vomv+r@iMt#?$WWnbW^reRJomO#9o@7rWEmURk#q zR=KU1%W!+vSe-SVl&0QwOWo{R&1TO)%wN(z6Yu~4 literal 0 HcmV?d00001 diff --git a/plugins/rmass/actions/__pycache__/synapsegetroomalias.cpython-314.pyc b/plugins/rmass/actions/__pycache__/synapsegetroomalias.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a75be1a6368eea41461fe661d0e737ffbbcf2b03 GIT binary patch literal 682 zcmXw0&ubJh6wb_Ke(dbeZkLuK;zC6z#fczz5D~gsiilO>-j}cwJE@b&Fv+alIjx>N z_UO^8|B9!@(~^_mKQPdLz|2-30Dqd~zq$W{n|CHy z0Spwtma?#|Z0ul&T?``|S;$fj_7ucE4lqO(ZbgoAafsWvgS)tgY~05KWGfHv;Guc# z2P^JCCRAwyJJy9x7r6d=WDay5T zb~>$4qEs%QB9w|NmC)4mMRUQ?j1yI`D>P3T%@kTZMh%QaIw+_V>4L`9T_hDz6!EAj zMRSsgjLk_pBU={TlTsz3U=?Y|Xj@3#K6&}()%k4t_Vwwx_VR*$U{{qtp`@V2xazzR znKHv3PM0~Y1|-i@1J^X8OKA{V+eI?Msdl#`&W{2Ow>kXCvRH>Q5uX}Pr8HaL($pTO zhDNMmPE?}(gp!yRrf$T@OC^7Ro937F1SNt~6q5yuQNcOMj7$Z})AE94(%cX!(XFl$ z$y?2hx(%f*mndKA;29TjnbPOQfq}Hlk)MsL9m}#d{=F6a?e~rA?ySOk2;8s^Kx?=j z-T%(kyN~LY*YRp+)V5cC9f7dF@@fybPd0A<`d|(3Y~W$-!@yp_x(D3RCg^*MtLLmGtAvWX=v=k3<016rkgcJ)2nnj{VLWr6R(B%NR z0|!Al0xxN><@w&5H=4rJ>^sW`^}MEdUZ+2IpYM66`lWeMP+md2Kzj{?03kFY#Ljqw z1Sw+FtVTvIkvUl>8(6l2Cf$nFF2pJdtf7U}3EI}MuCvp@h7(@n18iao+vqw?wL?|4 zkTaUw9_{Wz?NR;r`wN%Nr)=m$?E44@%o|*PNHW0@S&+wMlPqoOW1L`sQw(9b)#1!( zpWwW&%F%Oi^>lypFuv_gMslsqWto1wnXk6vX9(Z8Vx1WgnMEq;PA-B+35E>*0Qsgq AhyVZp delta 334 zcmY+9y;1@(6oqq>EX(e?AfmXSsEB_nnjrcHRyG#r0kpT&43#tR3Xb-^fE^FuJJ{OT z+F4n9pfj1=@0@#*JCnEUJnHRL3VePQ9flV*mCPe6B3)|T7 z6HVEpEKp}Oce`}`h1&bq-(R?Ve#=Fnf`bs_knb8Ce?&4tNw&yivPlkH5~?`CDI7e8 zoO*_l*CB!QReAocEWdv}>&UH+%k;iS_xxyHiy?*ZJWN@CjEH=yOV diff --git a/plugins/rmass/listeners/__pycache__/synapselistener.cpython-314.pyc b/plugins/rmass/listeners/__pycache__/synapselistener.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..386c46406335022e711f2ac6702e6742971503f5 GIT binary patch literal 275 zcmXv{%SyyR5S&S}8_kjxya=8|PmAFEfQToL9)|saVbdhh%!72#%6bZ({0y)DjwhLu z;12}$2b_Rg(A8B%(S5xv3lso<2#?24^s zuS*FVaMW6Ju?D0tSDVQ^ggI=%5I(N5kQt>RWY4XsLV=BaK~m%~sA=}?RXo0ad)m?n$lE$@$G?GFsDPp|+0 literal 0 HcmV?d00001 diff --git a/plugins/rmass/operations/__pycache__/rmassmessagepush.cpython-314.pyc b/plugins/rmass/operations/__pycache__/rmassmessagepush.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a88fc0f80e84b75d0e03b196f615063814e5587 GIT binary patch literal 501 zcmYjOJ#Q015Z%4q^IhT(oLE#8L~>;z-BolbQb38EA_#4YR1R9~!9H?(d)nEv6e=qf zKZ7>Egw{ktinbvVG;}BB53olJVv47kx0*L^W}o%C+r-DuFE<~)Q9^z+#ovfG$^E`h zR^*%rdQ8UD(s5veF|+I`5rO4`*--F=+Lj1KOGF|TTa#eICNyCwvys>yl2Q9tBQ|2L zZI*3FdH*PwO|Q_Mc3AqEi0SLcaXcDFE-;d3(7@u+DPE*QS2U< zc{R@pO#YZmHZO*G>xMTFdT_ju3LL-4ikay&Y~le4en>@Iq;;&;*Riq|m- s2X)BW!78ddBB>;CZb`TF_c`q5Dx@qTdCF*{!8HyE^;n*aa+ literal 0 HcmV?d00001 diff --git a/plugins/rmass/operations/rmassmessagepush.py b/plugins/rmass/operations/rmassmessagepush.py new file mode 100644 index 0000000..9752f8f --- /dev/null +++ b/plugins/rmass/operations/rmassmessagepush.py @@ -0,0 +1,17 @@ +from plugins.rmass.actions import rmassmessagepush, synapsegetroomalias, refresh_tokens + +name = "RMASS Message Push" + +kind = "operation" + +actions = [ + #Recursiveset is used to reference a nested operation inside an operation whose actions are listed in the recursiveset action list + "recursiveset", +] + +recursiveset = { + "source": "events", + "outputlabel": "outmessageitem", + "actions": [synapsegetroomalias, refresh_tokens, rmassmessagepush], +} + diff --git a/savedata/rmmanager.db b/savedata/rmmanager.db index 94e431de9cb3d63c80d7018e2e9b6097a37b0d51..e7aeb4fca61048de6e93aedc99bf0ff3ee437507 100644 GIT binary patch delta 717 zcmd7OO;3Vg00;2V+FIw@I;5_9(*fe++`2#*Jn2KcJiN%(R45S;L{LFb9y)Za`AMn| z)2R>9H>kF*9b0{Y|I2T)AvPQ0;h4xCOXo!PGzd#BgLqVza65xh!?%415Oy0VfCa+6 z2GVkW7^?{krv9*gQ5XS7-L#Wf1hD3{_k<&YB^g$2-rOQDC2jvF9)D5`T?R|++x zmImI|%4d6Dfi8u%v+|M7C;}LnCY!I9(X?Qc$c$VWI8Xx#+cbPSOS2?NCXnQK3(}J5 z_+Bx}@)W0$Lsb>nloPHsT#LNiwB~)U*9ZM1-oBN^$_n8&BdvdU^I3lQVpbqA_+Dd? zwUsQVY>0s!tF2x=?T+=()VwaR`jFHYoprnjIFIgD^$^xWLAIS+T3}dSv$+|`3x&@b rapX;MXKdMG29$-E!z-*jpS=DF?e(wFvO9MNyZ5L2+xIf_Z-_qtUiV3ot-4p<_}m>`oz81EW2n*`+Q- zg2L}g&a2`dg8)I8LrxLRn-