sockethub 4.0.0 → 5.0.0-alpha.0

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 (140) hide show
  1. package/README.md +3 -3
  2. package/bin/sockethub +23 -19
  3. package/coverage/tmp/coverage-15699-1646422276150-0.json +1 -0
  4. package/dist/bootstrap/init.js +14 -4
  5. package/dist/bootstrap/init.js.map +1 -1
  6. package/dist/bootstrap/platforms.js +81 -69
  7. package/dist/common.js +10 -12
  8. package/dist/common.js.map +1 -1
  9. package/dist/config.js +4 -22
  10. package/dist/config.js.map +1 -1
  11. package/dist/crypto.js +7 -8
  12. package/dist/crypto.js.map +1 -1
  13. package/dist/janitor.js +14 -9
  14. package/dist/janitor.js.map +1 -1
  15. package/dist/middleware/create-activity-object.js +19 -0
  16. package/dist/middleware/create-activity-object.js.map +1 -0
  17. package/dist/middleware/expand-activity-stream.js +33 -0
  18. package/dist/middleware/expand-activity-stream.js.map +1 -0
  19. package/dist/middleware/expand-activity-stream.test.data.js +360 -0
  20. package/dist/middleware/expand-activity-stream.test.data.js.map +1 -0
  21. package/dist/middleware/store-credentials.js +19 -0
  22. package/dist/middleware/store-credentials.js.map +1 -0
  23. package/dist/middleware/validate.js +77 -0
  24. package/dist/middleware/validate.js.map +1 -0
  25. package/dist/middleware/validate.test.data.js +321 -0
  26. package/dist/middleware/validate.test.data.js.map +1 -0
  27. package/dist/middleware.js +47 -49
  28. package/dist/middleware.js.map +1 -1
  29. package/dist/platform-instance.js +84 -66
  30. package/dist/platform-instance.js.map +1 -1
  31. package/dist/platform.js +50 -25
  32. package/dist/platform.js.map +1 -1
  33. package/dist/process-manager.js +7 -4
  34. package/dist/process-manager.js.map +1 -1
  35. package/dist/routes.js +9 -7
  36. package/dist/routes.js.map +1 -1
  37. package/dist/serve.js +3 -3
  38. package/dist/serve.js.map +1 -1
  39. package/dist/sockethub-client.js +2604 -0
  40. package/dist/sockethub-client.js.map +1 -0
  41. package/dist/sockethub-client.min.js +2 -0
  42. package/dist/sockethub-client.min.js.LICENSE.txt +24 -0
  43. package/dist/sockethub.js +75 -58
  44. package/dist/sockethub.js.map +1 -1
  45. package/dist/store.js +17 -0
  46. package/dist/store.js.map +1 -0
  47. package/package.json +48 -44
  48. package/src/bootstrap/init.ts +16 -2
  49. package/src/bootstrap/platforms.js +14 -18
  50. package/src/common.test.ts +44 -33
  51. package/src/common.ts +9 -17
  52. package/src/config.test.ts +16 -38
  53. package/src/config.ts +1 -23
  54. package/src/crypto.test.ts +15 -17
  55. package/src/crypto.ts +4 -5
  56. package/src/janitor.ts +19 -12
  57. package/src/middleware/create-activity-object.test.ts +10 -0
  58. package/src/middleware/create-activity-object.ts +13 -0
  59. package/src/middleware/expand-activity-stream.test.data.ts +365 -0
  60. package/src/middleware/expand-activity-stream.test.ts +78 -0
  61. package/src/middleware/expand-activity-stream.ts +27 -0
  62. package/src/middleware/store-credentials.test.ts +72 -0
  63. package/src/middleware/store-credentials.ts +16 -0
  64. package/src/{validate.d.ts → middleware/validate.d.ts} +0 -0
  65. package/src/middleware/validate.test.data.ts +320 -0
  66. package/src/middleware/validate.test.ts +47 -0
  67. package/src/middleware/validate.ts +49 -0
  68. package/src/middleware.test.ts +148 -0
  69. package/src/middleware.ts +46 -51
  70. package/src/platform-instance.test.ts +224 -196
  71. package/src/platform-instance.ts +74 -58
  72. package/src/platform.ts +44 -24
  73. package/src/process-manager.ts +7 -4
  74. package/src/routes.test.ts +32 -17
  75. package/src/routes.ts +8 -6
  76. package/src/serve.ts +1 -1
  77. package/src/sockethub-client.test.ts +235 -0
  78. package/src/sockethub-client.ts +164 -0
  79. package/src/sockethub.ts +96 -93
  80. package/src/store.test.ts +26 -0
  81. package/src/store.ts +17 -0
  82. package/tsconfig.json +8 -8
  83. package/views/examples/dummy.ejs +7 -7
  84. package/views/examples/feeds.ejs +10 -10
  85. package/views/examples/irc.ejs +65 -59
  86. package/views/examples/shared.js +31 -29
  87. package/views/examples/xmpp.ejs +49 -58
  88. package/webpack.minified.config.js +14 -0
  89. package/webpack.normal.config.js +14 -0
  90. package/coverage/clover.xml +0 -190
  91. package/coverage/coverage-final.json +0 -6
  92. package/coverage/lcov-report/base.css +0 -224
  93. package/coverage/lcov-report/block-navigation.js +0 -79
  94. package/coverage/lcov-report/common.ts.html +0 -143
  95. package/coverage/lcov-report/config.ts.html +0 -359
  96. package/coverage/lcov-report/crypto.ts.html +0 -203
  97. package/coverage/lcov-report/favicon.png +0 -0
  98. package/coverage/lcov-report/index.html +0 -171
  99. package/coverage/lcov-report/platform-instance.ts.html +0 -740
  100. package/coverage/lcov-report/prettify.css +0 -1
  101. package/coverage/lcov-report/prettify.js +0 -2
  102. package/coverage/lcov-report/routes.ts.html +0 -353
  103. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  104. package/coverage/lcov-report/sorter.js +0 -170
  105. package/coverage/lcov-report/src/common.ts.html +0 -143
  106. package/coverage/lcov-report/src/config.ts.html +0 -359
  107. package/coverage/lcov-report/src/crypto.ts.html +0 -182
  108. package/coverage/lcov-report/src/index.html +0 -156
  109. package/coverage/lcov-report/src/platform-instance.ts.html +0 -740
  110. package/coverage/lcov-report/src/routes/base.ts.html +0 -359
  111. package/coverage/lcov-report/src/routes/examples.ts.html +0 -311
  112. package/coverage/lcov-report/src/routes/index.html +0 -111
  113. package/coverage/lcov-report/src/services/http.ts.html +0 -239
  114. package/coverage/lcov-report/src/services/index.html +0 -111
  115. package/coverage/lcov-report/src/services/redis.ts.html +0 -140
  116. package/coverage/lcov-report/src/shared-resources.ts.html +0 -104
  117. package/coverage/lcov.info +0 -336
  118. package/coverage/tmp/coverage-70996-1620314182345-0.json +0 -1
  119. package/dist/bootstrap/platforms.js.map +0 -1
  120. package/dist/js/client.js +0 -177
  121. package/dist/js/client.js.map +0 -1
  122. package/dist/resource-manager.js +0 -66
  123. package/dist/resource-manager.js.map +0 -1
  124. package/dist/routes/base.js +0 -92
  125. package/dist/routes/base.js.map +0 -1
  126. package/dist/routes/examples.js +0 -93
  127. package/dist/routes/examples.js.map +0 -1
  128. package/dist/services/http.js +0 -68
  129. package/dist/services/http.js.map +0 -1
  130. package/dist/services/redis.js +0 -1
  131. package/dist/services/redis.js.map +0 -1
  132. package/dist/shared-resources.js +0 -11
  133. package/dist/shared-resources.js.map +0 -1
  134. package/dist/validate.js +0 -157
  135. package/dist/validate.js.map +0 -1
  136. package/jest.config.js +0 -18
  137. package/src/js/client.js +0 -190
  138. package/src/validate.ts +0 -147
  139. package/test/middleware-suite.js +0 -101
  140. package/test/validate-suite.js +0 -338
@@ -1,740 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/platform-instance.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../prettify.css" />
9
- <link rel="stylesheet" href="../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../index.html">All files</a> / <a href="index.html">src</a> platform-instance.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">90.24% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>74/82</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>15/18</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">71.43% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>15/21</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">90.24% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>74/82</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- </div>
58
- <div class='status-line high'></div>
59
- <pre><table class="coverage">
60
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
- <a name='L2'></a><a href='#L2'>2</a>
62
- <a name='L3'></a><a href='#L3'>3</a>
63
- <a name='L4'></a><a href='#L4'>4</a>
64
- <a name='L5'></a><a href='#L5'>5</a>
65
- <a name='L6'></a><a href='#L6'>6</a>
66
- <a name='L7'></a><a href='#L7'>7</a>
67
- <a name='L8'></a><a href='#L8'>8</a>
68
- <a name='L9'></a><a href='#L9'>9</a>
69
- <a name='L10'></a><a href='#L10'>10</a>
70
- <a name='L11'></a><a href='#L11'>11</a>
71
- <a name='L12'></a><a href='#L12'>12</a>
72
- <a name='L13'></a><a href='#L13'>13</a>
73
- <a name='L14'></a><a href='#L14'>14</a>
74
- <a name='L15'></a><a href='#L15'>15</a>
75
- <a name='L16'></a><a href='#L16'>16</a>
76
- <a name='L17'></a><a href='#L17'>17</a>
77
- <a name='L18'></a><a href='#L18'>18</a>
78
- <a name='L19'></a><a href='#L19'>19</a>
79
- <a name='L20'></a><a href='#L20'>20</a>
80
- <a name='L21'></a><a href='#L21'>21</a>
81
- <a name='L22'></a><a href='#L22'>22</a>
82
- <a name='L23'></a><a href='#L23'>23</a>
83
- <a name='L24'></a><a href='#L24'>24</a>
84
- <a name='L25'></a><a href='#L25'>25</a>
85
- <a name='L26'></a><a href='#L26'>26</a>
86
- <a name='L27'></a><a href='#L27'>27</a>
87
- <a name='L28'></a><a href='#L28'>28</a>
88
- <a name='L29'></a><a href='#L29'>29</a>
89
- <a name='L30'></a><a href='#L30'>30</a>
90
- <a name='L31'></a><a href='#L31'>31</a>
91
- <a name='L32'></a><a href='#L32'>32</a>
92
- <a name='L33'></a><a href='#L33'>33</a>
93
- <a name='L34'></a><a href='#L34'>34</a>
94
- <a name='L35'></a><a href='#L35'>35</a>
95
- <a name='L36'></a><a href='#L36'>36</a>
96
- <a name='L37'></a><a href='#L37'>37</a>
97
- <a name='L38'></a><a href='#L38'>38</a>
98
- <a name='L39'></a><a href='#L39'>39</a>
99
- <a name='L40'></a><a href='#L40'>40</a>
100
- <a name='L41'></a><a href='#L41'>41</a>
101
- <a name='L42'></a><a href='#L42'>42</a>
102
- <a name='L43'></a><a href='#L43'>43</a>
103
- <a name='L44'></a><a href='#L44'>44</a>
104
- <a name='L45'></a><a href='#L45'>45</a>
105
- <a name='L46'></a><a href='#L46'>46</a>
106
- <a name='L47'></a><a href='#L47'>47</a>
107
- <a name='L48'></a><a href='#L48'>48</a>
108
- <a name='L49'></a><a href='#L49'>49</a>
109
- <a name='L50'></a><a href='#L50'>50</a>
110
- <a name='L51'></a><a href='#L51'>51</a>
111
- <a name='L52'></a><a href='#L52'>52</a>
112
- <a name='L53'></a><a href='#L53'>53</a>
113
- <a name='L54'></a><a href='#L54'>54</a>
114
- <a name='L55'></a><a href='#L55'>55</a>
115
- <a name='L56'></a><a href='#L56'>56</a>
116
- <a name='L57'></a><a href='#L57'>57</a>
117
- <a name='L58'></a><a href='#L58'>58</a>
118
- <a name='L59'></a><a href='#L59'>59</a>
119
- <a name='L60'></a><a href='#L60'>60</a>
120
- <a name='L61'></a><a href='#L61'>61</a>
121
- <a name='L62'></a><a href='#L62'>62</a>
122
- <a name='L63'></a><a href='#L63'>63</a>
123
- <a name='L64'></a><a href='#L64'>64</a>
124
- <a name='L65'></a><a href='#L65'>65</a>
125
- <a name='L66'></a><a href='#L66'>66</a>
126
- <a name='L67'></a><a href='#L67'>67</a>
127
- <a name='L68'></a><a href='#L68'>68</a>
128
- <a name='L69'></a><a href='#L69'>69</a>
129
- <a name='L70'></a><a href='#L70'>70</a>
130
- <a name='L71'></a><a href='#L71'>71</a>
131
- <a name='L72'></a><a href='#L72'>72</a>
132
- <a name='L73'></a><a href='#L73'>73</a>
133
- <a name='L74'></a><a href='#L74'>74</a>
134
- <a name='L75'></a><a href='#L75'>75</a>
135
- <a name='L76'></a><a href='#L76'>76</a>
136
- <a name='L77'></a><a href='#L77'>77</a>
137
- <a name='L78'></a><a href='#L78'>78</a>
138
- <a name='L79'></a><a href='#L79'>79</a>
139
- <a name='L80'></a><a href='#L80'>80</a>
140
- <a name='L81'></a><a href='#L81'>81</a>
141
- <a name='L82'></a><a href='#L82'>82</a>
142
- <a name='L83'></a><a href='#L83'>83</a>
143
- <a name='L84'></a><a href='#L84'>84</a>
144
- <a name='L85'></a><a href='#L85'>85</a>
145
- <a name='L86'></a><a href='#L86'>86</a>
146
- <a name='L87'></a><a href='#L87'>87</a>
147
- <a name='L88'></a><a href='#L88'>88</a>
148
- <a name='L89'></a><a href='#L89'>89</a>
149
- <a name='L90'></a><a href='#L90'>90</a>
150
- <a name='L91'></a><a href='#L91'>91</a>
151
- <a name='L92'></a><a href='#L92'>92</a>
152
- <a name='L93'></a><a href='#L93'>93</a>
153
- <a name='L94'></a><a href='#L94'>94</a>
154
- <a name='L95'></a><a href='#L95'>95</a>
155
- <a name='L96'></a><a href='#L96'>96</a>
156
- <a name='L97'></a><a href='#L97'>97</a>
157
- <a name='L98'></a><a href='#L98'>98</a>
158
- <a name='L99'></a><a href='#L99'>99</a>
159
- <a name='L100'></a><a href='#L100'>100</a>
160
- <a name='L101'></a><a href='#L101'>101</a>
161
- <a name='L102'></a><a href='#L102'>102</a>
162
- <a name='L103'></a><a href='#L103'>103</a>
163
- <a name='L104'></a><a href='#L104'>104</a>
164
- <a name='L105'></a><a href='#L105'>105</a>
165
- <a name='L106'></a><a href='#L106'>106</a>
166
- <a name='L107'></a><a href='#L107'>107</a>
167
- <a name='L108'></a><a href='#L108'>108</a>
168
- <a name='L109'></a><a href='#L109'>109</a>
169
- <a name='L110'></a><a href='#L110'>110</a>
170
- <a name='L111'></a><a href='#L111'>111</a>
171
- <a name='L112'></a><a href='#L112'>112</a>
172
- <a name='L113'></a><a href='#L113'>113</a>
173
- <a name='L114'></a><a href='#L114'>114</a>
174
- <a name='L115'></a><a href='#L115'>115</a>
175
- <a name='L116'></a><a href='#L116'>116</a>
176
- <a name='L117'></a><a href='#L117'>117</a>
177
- <a name='L118'></a><a href='#L118'>118</a>
178
- <a name='L119'></a><a href='#L119'>119</a>
179
- <a name='L120'></a><a href='#L120'>120</a>
180
- <a name='L121'></a><a href='#L121'>121</a>
181
- <a name='L122'></a><a href='#L122'>122</a>
182
- <a name='L123'></a><a href='#L123'>123</a>
183
- <a name='L124'></a><a href='#L124'>124</a>
184
- <a name='L125'></a><a href='#L125'>125</a>
185
- <a name='L126'></a><a href='#L126'>126</a>
186
- <a name='L127'></a><a href='#L127'>127</a>
187
- <a name='L128'></a><a href='#L128'>128</a>
188
- <a name='L129'></a><a href='#L129'>129</a>
189
- <a name='L130'></a><a href='#L130'>130</a>
190
- <a name='L131'></a><a href='#L131'>131</a>
191
- <a name='L132'></a><a href='#L132'>132</a>
192
- <a name='L133'></a><a href='#L133'>133</a>
193
- <a name='L134'></a><a href='#L134'>134</a>
194
- <a name='L135'></a><a href='#L135'>135</a>
195
- <a name='L136'></a><a href='#L136'>136</a>
196
- <a name='L137'></a><a href='#L137'>137</a>
197
- <a name='L138'></a><a href='#L138'>138</a>
198
- <a name='L139'></a><a href='#L139'>139</a>
199
- <a name='L140'></a><a href='#L140'>140</a>
200
- <a name='L141'></a><a href='#L141'>141</a>
201
- <a name='L142'></a><a href='#L142'>142</a>
202
- <a name='L143'></a><a href='#L143'>143</a>
203
- <a name='L144'></a><a href='#L144'>144</a>
204
- <a name='L145'></a><a href='#L145'>145</a>
205
- <a name='L146'></a><a href='#L146'>146</a>
206
- <a name='L147'></a><a href='#L147'>147</a>
207
- <a name='L148'></a><a href='#L148'>148</a>
208
- <a name='L149'></a><a href='#L149'>149</a>
209
- <a name='L150'></a><a href='#L150'>150</a>
210
- <a name='L151'></a><a href='#L151'>151</a>
211
- <a name='L152'></a><a href='#L152'>152</a>
212
- <a name='L153'></a><a href='#L153'>153</a>
213
- <a name='L154'></a><a href='#L154'>154</a>
214
- <a name='L155'></a><a href='#L155'>155</a>
215
- <a name='L156'></a><a href='#L156'>156</a>
216
- <a name='L157'></a><a href='#L157'>157</a>
217
- <a name='L158'></a><a href='#L158'>158</a>
218
- <a name='L159'></a><a href='#L159'>159</a>
219
- <a name='L160'></a><a href='#L160'>160</a>
220
- <a name='L161'></a><a href='#L161'>161</a>
221
- <a name='L162'></a><a href='#L162'>162</a>
222
- <a name='L163'></a><a href='#L163'>163</a>
223
- <a name='L164'></a><a href='#L164'>164</a>
224
- <a name='L165'></a><a href='#L165'>165</a>
225
- <a name='L166'></a><a href='#L166'>166</a>
226
- <a name='L167'></a><a href='#L167'>167</a>
227
- <a name='L168'></a><a href='#L168'>168</a>
228
- <a name='L169'></a><a href='#L169'>169</a>
229
- <a name='L170'></a><a href='#L170'>170</a>
230
- <a name='L171'></a><a href='#L171'>171</a>
231
- <a name='L172'></a><a href='#L172'>172</a>
232
- <a name='L173'></a><a href='#L173'>173</a>
233
- <a name='L174'></a><a href='#L174'>174</a>
234
- <a name='L175'></a><a href='#L175'>175</a>
235
- <a name='L176'></a><a href='#L176'>176</a>
236
- <a name='L177'></a><a href='#L177'>177</a>
237
- <a name='L178'></a><a href='#L178'>178</a>
238
- <a name='L179'></a><a href='#L179'>179</a>
239
- <a name='L180'></a><a href='#L180'>180</a>
240
- <a name='L181'></a><a href='#L181'>181</a>
241
- <a name='L182'></a><a href='#L182'>182</a>
242
- <a name='L183'></a><a href='#L183'>183</a>
243
- <a name='L184'></a><a href='#L184'>184</a>
244
- <a name='L185'></a><a href='#L185'>185</a>
245
- <a name='L186'></a><a href='#L186'>186</a>
246
- <a name='L187'></a><a href='#L187'>187</a>
247
- <a name='L188'></a><a href='#L188'>188</a>
248
- <a name='L189'></a><a href='#L189'>189</a>
249
- <a name='L190'></a><a href='#L190'>190</a>
250
- <a name='L191'></a><a href='#L191'>191</a>
251
- <a name='L192'></a><a href='#L192'>192</a>
252
- <a name='L193'></a><a href='#L193'>193</a>
253
- <a name='L194'></a><a href='#L194'>194</a>
254
- <a name='L195'></a><a href='#L195'>195</a>
255
- <a name='L196'></a><a href='#L196'>196</a>
256
- <a name='L197'></a><a href='#L197'>197</a>
257
- <a name='L198'></a><a href='#L198'>198</a>
258
- <a name='L199'></a><a href='#L199'>199</a>
259
- <a name='L200'></a><a href='#L200'>200</a>
260
- <a name='L201'></a><a href='#L201'>201</a>
261
- <a name='L202'></a><a href='#L202'>202</a>
262
- <a name='L203'></a><a href='#L203'>203</a>
263
- <a name='L204'></a><a href='#L204'>204</a>
264
- <a name='L205'></a><a href='#L205'>205</a>
265
- <a name='L206'></a><a href='#L206'>206</a>
266
- <a name='L207'></a><a href='#L207'>207</a>
267
- <a name='L208'></a><a href='#L208'>208</a>
268
- <a name='L209'></a><a href='#L209'>209</a>
269
- <a name='L210'></a><a href='#L210'>210</a>
270
- <a name='L211'></a><a href='#L211'>211</a>
271
- <a name='L212'></a><a href='#L212'>212</a>
272
- <a name='L213'></a><a href='#L213'>213</a>
273
- <a name='L214'></a><a href='#L214'>214</a>
274
- <a name='L215'></a><a href='#L215'>215</a>
275
- <a name='L216'></a><a href='#L216'>216</a>
276
- <a name='L217'></a><a href='#L217'>217</a>
277
- <a name='L218'></a><a href='#L218'>218</a>
278
- <a name='L219'></a><a href='#L219'>219</a>
279
- <a name='L220'></a><a href='#L220'>220</a>
280
- <a name='L221'></a><a href='#L221'>221</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
281
- <span class="cline-any cline-yes">1x</span>
282
- <span class="cline-any cline-yes">1x</span>
283
- <span class="cline-any cline-yes">1x</span>
284
- <span class="cline-any cline-neutral">&nbsp;</span>
285
- <span class="cline-any cline-yes">1x</span>
286
- <span class="cline-any cline-yes">1x</span>
287
- <span class="cline-any cline-neutral">&nbsp;</span>
288
- <span class="cline-any cline-yes">1x</span>
289
- <span class="cline-any cline-neutral">&nbsp;</span>
290
- <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-yes">1x</span>
292
- <span class="cline-any cline-neutral">&nbsp;</span>
293
- <span class="cline-any cline-neutral">&nbsp;</span>
294
- <span class="cline-any cline-neutral">&nbsp;</span>
295
- <span class="cline-any cline-neutral">&nbsp;</span>
296
- <span class="cline-any cline-neutral">&nbsp;</span>
297
- <span class="cline-any cline-neutral">&nbsp;</span>
298
- <span class="cline-any cline-neutral">&nbsp;</span>
299
- <span class="cline-any cline-neutral">&nbsp;</span>
300
- <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-neutral">&nbsp;</span>
302
- <span class="cline-any cline-neutral">&nbsp;</span>
303
- <span class="cline-any cline-neutral">&nbsp;</span>
304
- <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-yes">1x</span>
306
- <span class="cline-any cline-yes">16x</span>
307
- <span class="cline-any cline-neutral">&nbsp;</span>
308
- <span class="cline-any cline-neutral">&nbsp;</span>
309
- <span class="cline-any cline-neutral">&nbsp;</span>
310
- <span class="cline-any cline-neutral">&nbsp;</span>
311
- <span class="cline-any cline-neutral">&nbsp;</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-yes">16x</span>
314
- <span class="cline-any cline-yes">16x</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-yes">16x</span>
317
- <span class="cline-any cline-yes">16x</span>
318
- <span class="cline-any cline-yes">16x</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-yes">16x</span>
323
- <span class="cline-any cline-yes">16x</span>
324
- <span class="cline-any cline-yes">16x</span>
325
- <span class="cline-any cline-yes">16x</span>
326
- <span class="cline-any cline-yes">1x</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-yes">15x</span>
329
- <span class="cline-any cline-neutral">&nbsp;</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-yes">16x</span>
332
- <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-yes">16x</span>
334
- <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">17x</span>
341
- <span class="cline-any cline-yes">17x</span>
342
- <span class="cline-any cline-yes">17x</span>
343
- <span class="cline-any cline-yes">17x</span>
344
- <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">17x</span>
346
- <span class="cline-any cline-yes">17x</span>
347
- <span class="cline-any cline-yes">16x</span>
348
- <span class="cline-any cline-yes">16x</span>
349
- <span class="cline-any cline-neutral">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-neutral">&nbsp;</span>
352
- <span class="cline-any cline-neutral">&nbsp;</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-yes">1x</span>
357
- <span class="cline-any cline-yes">1x</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
- <span class="cline-any cline-no">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-yes">1x</span>
364
- <span class="cline-any cline-no">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">1x</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
368
- <span class="cline-any cline-no">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
- <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-neutral">&nbsp;</span>
372
- <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-neutral">&nbsp;</span>
375
- <span class="cline-any cline-neutral">&nbsp;</span>
376
- <span class="cline-any cline-neutral">&nbsp;</span>
377
- <span class="cline-any cline-neutral">&nbsp;</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">2x</span>
380
- <span class="cline-any cline-yes">2x</span>
381
- <span class="cline-any cline-yes">2x</span>
382
- <span class="cline-any cline-yes">4x</span>
383
- <span class="cline-any cline-yes">4x</span>
384
- <span class="cline-any cline-yes">4x</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-neutral">&nbsp;</span>
390
- <span class="cline-any cline-neutral">&nbsp;</span>
391
- <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-neutral">&nbsp;</span>
393
- <span class="cline-any cline-neutral">&nbsp;</span>
394
- <span class="cline-any cline-neutral">&nbsp;</span>
395
- <span class="cline-any cline-neutral">&nbsp;</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">5x</span>
398
- <span class="cline-any cline-yes">5x</span>
399
- <span class="cline-any cline-neutral">&nbsp;</span>
400
- <span class="cline-any cline-yes">5x</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-yes">5x</span>
403
- <span class="cline-any cline-yes">5x</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
405
- <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-neutral">&nbsp;</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-yes">2x</span>
410
- <span class="cline-any cline-yes">2x</span>
411
- <span class="cline-any cline-yes">2x</span>
412
- <span class="cline-any cline-yes">2x</span>
413
- <span class="cline-any cline-neutral">&nbsp;</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-yes">3x</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-yes">3x</span>
422
- <span class="cline-any cline-yes">1x</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-yes">2x</span>
427
- <span class="cline-any cline-yes">1x</span>
428
- <span class="cline-any cline-neutral">&nbsp;</span>
429
- <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-yes">3x</span>
435
- <span class="cline-any cline-neutral">&nbsp;</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-yes">3x</span>
439
- <span class="cline-any cline-neutral">&nbsp;</span>
440
- <span class="cline-any cline-yes">3x</span>
441
- <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-neutral">&nbsp;</span>
443
- <span class="cline-any cline-neutral">&nbsp;</span>
444
- <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-neutral">&nbsp;</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">1x</span>
450
- <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-neutral">&nbsp;</span>
453
- <span class="cline-any cline-neutral">&nbsp;</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-neutral">&nbsp;</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-yes">1x</span>
459
- <span class="cline-any cline-yes">1x</span>
460
- <span class="cline-any cline-yes">1x</span>
461
- <span class="cline-any cline-neutral">&nbsp;</span>
462
- <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-neutral">&nbsp;</span>
464
- <span class="cline-any cline-neutral">&nbsp;</span>
465
- <span class="cline-any cline-neutral">&nbsp;</span>
466
- <span class="cline-any cline-neutral">&nbsp;</span>
467
- <span class="cline-any cline-neutral">&nbsp;</span>
468
- <span class="cline-any cline-yes">1x</span>
469
- <span class="cline-any cline-yes">1x</span>
470
- <span class="cline-any cline-yes">1x</span>
471
- <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-neutral">&nbsp;</span>
473
- <span class="cline-any cline-neutral">&nbsp;</span>
474
- <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-neutral">&nbsp;</span>
480
- <span class="cline-any cline-yes">8x</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-yes">1x</span>
483
- <span class="cline-any cline-yes">1x</span>
484
- <span class="cline-any cline-neutral">&nbsp;</span>
485
- <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-yes">3x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-yes">1x</span>
489
- <span class="cline-any cline-yes">2x</span>
490
- <span class="cline-any cline-yes">1x</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-yes">1x</span>
494
- <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-neutral">&nbsp;</span>
496
- <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-yes">8x</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { ChildProcess, fork } from 'child_process';
501
- import { join } from 'path';
502
- import { debug, Debugger } from 'debug';
503
- import Queue from 'bull';
504
- &nbsp;
505
- import redisConfig from "./config";
506
- import crypto from "./crypto";
507
- import { ActivityObject, Job } from "./sockethub";
508
- import { getSocket } from "./serve";
509
- &nbsp;
510
- // collection of platform instances, stored by `id`
511
- export const platformInstances = new Map();
512
- &nbsp;
513
- export interface PlatformInstanceParams {
514
- identifier: string;
515
- platform: string;
516
- parentId?: string;
517
- actor?: string;
518
- }
519
- &nbsp;
520
- interface MessageFromPlatform extends Array&lt;string|ActivityObject&gt;{
521
- 0: string, 1: ActivityObject, 2: string}
522
- export interface MessageFromParent extends Array&lt;string|any&gt;{0: string, 1: any}
523
- &nbsp;
524
- &nbsp;
525
- export default class PlatformInstance {
526
- flaggedForTermination: boolean = false;
527
- id: string;
528
- queue: Queue;
529
- readonly name: string;
530
- readonly process: ChildProcess;
531
- readonly debug: Debugger;
532
- readonly parentId: string;
533
- readonly sessions: Set&lt;string&gt; = new Set();
534
- public readonly global?: boolean = false;
535
- private readonly actor?: string;
536
- private readonly sessionCallbacks: object = {
537
- 'close': (() =&gt; new Map())(),
538
- 'message': (() =&gt; new Map())(),
539
- };
540
- &nbsp;
541
- constructor(params: PlatformInstanceParams) {
542
- this.id = params.identifier;
543
- this.name = params.platform;
544
- this.parentId = params.parentId;
545
- if (params.actor) {
546
- this.actor = params.actor;
547
- } else {
548
- this.global = true;
549
- }
550
- &nbsp;
551
- this.debug = debug(`sockethub:platform-instance:${this.id}`);
552
- // spin off a process
553
- this.process = fork(join(__dirname, 'platform.js'), [this.parentId, this.name, this.id]);
554
- }
555
- &nbsp;
556
- /**
557
- * Destroys all references to this platform instance, internal listeners and controlled processes
558
- */
559
- public destroy() {
560
- this.flaggedForTermination = true;
561
- platformInstances.delete(this.id);
562
- try {
563
- this.queue.clean(0);
564
- } catch (e) { }
565
- try {
566
- this.process.removeAllListeners('close');
567
- this.process.unref();
568
- this.process.kill();
569
- } catch (e) { }
570
- }
571
- &nbsp;
572
- /**
573
- * When jobs are completed or failed, we prepare the results and send them to the client socket
574
- */
575
- public initQueue(secret: string) {
576
- this.queue = new Queue(this.parentId + this.id, redisConfig);
577
- this.queue.on('global:completed', <span class="fstat-no" title="function not covered" >(j</span>obId, result) =&gt; {
578
- <span class="cstat-no" title="statement not covered" > this.queue.getJob(jobId).then(<span class="fstat-no" title="function not covered" >(j</span>ob) =&gt; {</span>
579
- <span class="cstat-no" title="statement not covered" > job.data.msg = crypto.decrypt(job.data.msg, secret);</span>
580
- <span class="cstat-no" title="statement not covered" > this.handleJobResult('completed', job, result);</span>
581
- });
582
- });
583
- this.queue.on('global:error', <span class="fstat-no" title="function not covered" >(j</span>obId, result) =&gt; {
584
- <span class="cstat-no" title="statement not covered" > this.debug("unknown queue error", jobId, result);</span>
585
- });
586
- this.queue.on('global:failed', <span class="fstat-no" title="function not covered" >(j</span>obId, result) =&gt; {
587
- <span class="cstat-no" title="statement not covered" > this.queue.getJob(jobId).then(<span class="fstat-no" title="function not covered" >(j</span>ob) =&gt; {</span>
588
- <span class="cstat-no" title="statement not covered" > job.data.msg = crypto.decrypt(job.data.msg, secret);</span>
589
- <span class="cstat-no" title="statement not covered" > this.handleJobResult('failed', job, result);</span>
590
- });
591
- });
592
- }
593
- &nbsp;
594
- /**
595
- * Register listener to be called when the process emits a message.
596
- * @param sessionId ID of socket connection that will receive messages from platform emits
597
- */
598
- public registerSession(sessionId: string) {
599
- <span class="missing-if-branch" title="else path not taken" >E</span>if (! this.sessions.has(sessionId)) {
600
- this.sessions.add(sessionId);
601
- for (let type of Object.keys(this.sessionCallbacks)) {
602
- const cb = this.callbackFunction(type, sessionId);
603
- this.process.on(type, cb);
604
- this.sessionCallbacks[type].set(sessionId, cb);
605
- }
606
- }
607
- }
608
- &nbsp;
609
- /**
610
- * Sends a message to client (user), can be registered with an event emitted from the platform
611
- * process.
612
- * @param sessionId ID of the socket connection to send the message to
613
- * @param type type of message to emit. 'message', 'completed', 'failed'
614
- * @param msg ActivityStream object to send to client
615
- */
616
- public sendToClient(sessionId: string, type: string, msg: ActivityObject) {
617
- getSocket(sessionId).then((socket) =&gt; {
618
- try {
619
- // this property should never be exposed externally
620
- delete msg.sessionSecret;
621
- } catch (e) {}
622
- msg.context = this.name;
623
- socket.emit(type, msg);
624
- }, <span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; <span class="cstat-no" title="statement not covered" >this.debug(`sendToClient ${err}`))</span>;
625
- }
626
- &nbsp;
627
- // send message to every connected socket associated with this platform instance.
628
- private async broadcastToSharedPeers(sessionId: string, msg: ActivityObject) {
629
- for (let sid of this.sessions.values()) {
630
- <span class="missing-if-branch" title="else path not taken" >E</span>if (sid !== sessionId) {
631
- this.debug(`broadcasting message to ${sid}`);
632
- this.sendToClient(sid, 'message', msg);
633
- }
634
- }
635
- }
636
- &nbsp;
637
- // handle job results coming in on the queue from platform instances
638
- private handleJobResult(type: string, job: Job, result) {
639
- this.debug(`job ${job.data.title}: ${type}`);
640
- &nbsp;
641
- if ((type === 'completed') &amp;&amp; (result)) {
642
- job.data.msg.object = {
643
- '@type': 'result',
644
- content: result
645
- };
646
- } else if (type === 'failed') {
647
- job.data.msg.object = {
648
- '@type': 'error',
649
- content: result ? result : <span class="branch-1 cbranch-no" title="branch not covered" >"job failed for unknown reason"</span>
650
- };
651
- }
652
- &nbsp;
653
- // send message to client as completed for failed job
654
- this.sendToClient(job.data.sessionId, type, job.data.msg);
655
- &nbsp;
656
- // let all related peers know of result as an independent message
657
- // (not as part of a job completion, or failure)
658
- this.broadcastToSharedPeers(job.data.sessionId, job.data.msg);
659
- &nbsp;
660
- job.remove();
661
- }
662
- &nbsp;
663
- /**
664
- * Sends error message to client and clears all references to this class.
665
- * @param sessionId
666
- * @param errorMessage
667
- */
668
- private reportError(sessionId: string, errorMessage: any) {
669
- const errorObject: ActivityObject = {
670
- context: this.name,
671
- '@type': 'error',
672
- target: this.actor,
673
- object: {
674
- '@type': 'error',
675
- content: errorMessage
676
- }
677
- };
678
- this.sendToClient(sessionId, 'message', errorObject);
679
- this.sessions.clear();
680
- this.destroy();
681
- }
682
- &nbsp;
683
- /**
684
- * Updates the instance with a new identifier, updating the platformInstances mapping as well.
685
- * @param identifier
686
- */
687
- private updateIdentifier(identifier: string) {
688
- platformInstances.delete(this.id);
689
- this.id = identifier;
690
- platformInstances.set(this.id, this);
691
- }
692
- &nbsp;
693
- /**
694
- * Generates a function tied to a given client session (socket connection), the generated
695
- * function will be called for each session ID registered, for every platform emit.
696
- * @param listener
697
- * @param sessionId
698
- */
699
- private callbackFunction(listener: string, sessionId: string) {
700
- const funcs = {
701
- 'close': (e: object) =&gt; {
702
- this.debug(`close even triggered ${this.id}: ${e}`);
703
- this.reportError(sessionId, `Error: session thread closed unexpectedly: ${e}`);
704
- },
705
- 'message': (data: MessageFromPlatform) =&gt; {
706
- if (data[0] === 'updateActor') {
707
- // We need to update the key to the store in order to find it in the future.
708
- this.updateIdentifier(data[2]);
709
- } else if (data[0] === 'error') {
710
- this.reportError(sessionId, data[1]);
711
- } else {
712
- // treat like a message to clients
713
- this.sendToClient(sessionId, 'message', data[1]);
714
- }
715
- }
716
- };
717
- return funcs[listener];
718
- }
719
- }
720
- &nbsp;</pre></td></tr></table></pre>
721
-
722
- <div class='push'></div><!-- for sticky footer -->
723
- </div><!-- /wrapper -->
724
- <div class='footer quiet pad2 space-top1 center small'>
725
- Code coverage generated by
726
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
727
- at Thu May 06 2021 00:27:45 GMT+0200 (Central European Summer Time)
728
- </div>
729
- </div>
730
- <script src="../prettify.js"></script>
731
- <script>
732
- window.onload = function () {
733
- prettyPrint();
734
- };
735
- </script>
736
- <script src="../sorter.js"></script>
737
- <script src="../block-navigation.js"></script>
738
- </body>
739
- </html>
740
-