@hexonet/semantic-release-whmcs 4.0.2 → 4.0.3

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.
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">76.92% </span>
26
+ <span class="strong">88.23% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>20/26</span>
28
+ <span class='fraction'>45/51</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">83.33% </span>
33
+ <span class="strong">100% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>5/6</span>
35
+ <span class='fraction'>7/7</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">75% </span>
40
+ <span class="strong">80% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>3/4</span>
42
+ <span class='fraction'>4/5</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">76% </span>
47
+ <span class="strong">90% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>19/25</span>
49
+ <span class='fraction'>45/50</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line medium'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -125,21 +125,77 @@
125
125
  <a name='L60'></a><a href='#L60'>60</a>
126
126
  <a name='L61'></a><a href='#L61'>61</a>
127
127
  <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
180
+ <span class="cline-any cline-yes">1x</span>
181
+ <span class="cline-any cline-yes">1x</span>
129
182
  <span class="cline-any cline-neutral">&nbsp;</span>
130
183
  <span class="cline-any cline-yes">1x</span>
131
184
  <span class="cline-any cline-yes">5x</span>
132
- <span class="cline-any cline-no">&nbsp;</span>
133
185
  <span class="cline-any cline-neutral">&nbsp;</span>
134
- <span class="cline-any cline-yes">5x</span>
135
186
  <span class="cline-any cline-neutral">&nbsp;</span>
136
187
  <span class="cline-any cline-neutral">&nbsp;</span>
137
188
  <span class="cline-any cline-neutral">&nbsp;</span>
138
- <span class="cline-any cline-yes">5x</span>
139
189
  <span class="cline-any cline-neutral">&nbsp;</span>
140
190
  <span class="cline-any cline-neutral">&nbsp;</span>
141
191
  <span class="cline-any cline-neutral">&nbsp;</span>
142
- <span class="cline-any cline-yes">5x</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-neutral">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
143
199
  <span class="cline-any cline-neutral">&nbsp;</span>
144
200
  <span class="cline-any cline-neutral">&nbsp;</span>
145
201
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -159,56 +215,108 @@
159
215
  <span class="cline-any cline-neutral">&nbsp;</span>
160
216
  <span class="cline-any cline-neutral">&nbsp;</span>
161
217
  <span class="cline-any cline-yes">5x</span>
162
- <span class="cline-any cline-neutral">&nbsp;</span>
163
218
  <span class="cline-any cline-yes">5x</span>
164
219
  <span class="cline-any cline-yes">5x</span>
165
- <span class="cline-any cline-yes">333x</span>
166
- <span class="cline-any cline-yes">221x</span>
167
220
  <span class="cline-any cline-neutral">&nbsp;</span>
168
- <span class="cline-any cline-yes">112x</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">5x</span>
169
223
  <span class="cline-any cline-neutral">&nbsp;</span>
170
224
  <span class="cline-any cline-neutral">&nbsp;</span>
171
225
  <span class="cline-any cline-yes">5x</span>
172
226
  <span class="cline-any cline-neutral">&nbsp;</span>
173
227
  <span class="cline-any cline-yes">5x</span>
174
228
  <span class="cline-any cline-yes">3x</span>
175
- <span class="cline-any cline-yes">162x</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
176
230
  <span class="cline-any cline-no">&nbsp;</span>
177
231
  <span class="cline-any cline-neutral">&nbsp;</span>
178
232
  <span class="cline-any cline-neutral">&nbsp;</span>
179
233
  <span class="cline-any cline-neutral">&nbsp;</span>
180
234
  <span class="cline-any cline-neutral">&nbsp;</span>
181
235
  <span class="cline-any cline-yes">5x</span>
236
+ <span class="cline-any cline-yes">9x</span>
237
+ <span class="cline-any cline-yes">9x</span>
238
+ <span class="cline-any cline-yes">9x</span>
239
+ <span class="cline-any cline-yes">9x</span>
240
+ <span class="cline-any cline-yes">9x</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-yes">5x</span>
244
+ <span class="cline-any cline-yes">11x</span>
245
+ <span class="cline-any cline-yes">11x</span>
246
+ <span class="cline-any cline-yes">11x</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">5x</span>
250
+ <span class="cline-any cline-yes">5x</span>
251
+ <span class="cline-any cline-yes">5x</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-yes">5x</span>
254
+ <span class="cline-any cline-yes">5x</span>
255
+ <span class="cline-any cline-yes">5x</span>
256
+ <span class="cline-any cline-yes">5x</span>
257
+ <span class="cline-any cline-yes">5x</span>
258
+ <span class="cline-any cline-yes">5x</span>
259
+ <span class="cline-any cline-yes">5x</span>
260
+ <span class="cline-any cline-yes">5x</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
182
262
  <span class="cline-any cline-no">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
266
  <span class="cline-any cline-no">&nbsp;</span>
184
267
  <span class="cline-any cline-no">&nbsp;</span>
185
- <span class="cline-any cline-no">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-yes">5x</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-yes">5x</span>
273
+ <span class="cline-any cline-yes">5x</span>
274
+ <span class="cline-any cline-yes">2x</span>
275
+ <span class="cline-any cline-yes">2x</span>
276
+ <span class="cline-any cline-yes">2x</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-yes">3x</span>
280
+ <span class="cline-any cline-yes">3x</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-yes">3x</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-yes">5x</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
186
288
  <span class="cline-any cline-neutral">&nbsp;</span>
187
289
  <span class="cline-any cline-neutral">&nbsp;</span>
188
290
  <span class="cline-any cline-yes">5x</span>
189
291
  <span class="cline-any cline-neutral">&nbsp;</span>
190
292
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">const puppeteer = require('puppeteer')
293
+ const debug = require('debug')('semantic-release:whmcs')
294
+ const resolveConfig = require('./resolve-config')
191
295
  &nbsp;
192
- module.exports = async (withHEAD, DEBUG, logger) =&gt; {
193
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!logger) {
194
- <span class="cstat-no" title="statement not covered" > logger = console</span>
195
- }
196
- const gotoOpts = {
197
- waitUntil: ['load', 'domcontentloaded'],
198
- timeout: 240000
199
- }
200
- const navOpts = {
201
- waitUntil: 'networkidle0',
202
- timeout: 240000
203
- }
204
- const selectorOpts = {
205
- timeout: 10000
296
+ module.exports = async (context) =&gt; {
297
+ const cfg = {
298
+ urlbase: 'https://marketplace.whmcs.com',
299
+ ...resolveConfig(context),
300
+ // logger: logger,
301
+ gotoOpts: {
302
+ waitUntil: ['load', 'domcontentloaded'],
303
+ timeout: 240000
304
+ },
305
+ navOpts: {
306
+ waitUntil: ['networkidle0'],
307
+ timeout: 240000
308
+ },
309
+ selectorOpts: {
310
+ timeout: 10000
311
+ },
312
+ logger: context.logger
206
313
  }
207
314
  &nbsp;
208
315
  const browser = await puppeteer.launch({
209
- headless: !withHEAD,
316
+ headless: cfg.headless === '1',
210
317
  defaultViewport: null, // automatically full-sized
211
318
  args: [
319
+ '--disable-gpu',
212
320
  '--incognito',
213
321
  '--start-maximized',
214
322
  '--no-sandbox',
@@ -216,38 +324,83 @@ module.exports = async (withHEAD, DEBUG, logger) =&gt; {
216
324
  '--disable-infobars',
217
325
  '--ignore-certifcate-errors',
218
326
  '--ignore-certifcate-errors-spki-list',
219
- '--ignoreHTTPSErrors=true',
220
- '--user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36"'
327
+ '--ignoreHTTPSErrors=true'
221
328
  ]
222
329
  })
330
+ const { logger } = cfg
223
331
  const [page] = await browser.pages()
224
- &nbsp;
225
- await page.setRequestInterception(true)
226
- page.on('request', request =&gt; {
227
- if (/^(image|stylesheet|other)$/i.test(request.resourceType())) {
228
- request.abort()
229
- } else {
230
- request.continue()
231
- }
332
+ await page.setExtraHTTPHeaders({
333
+ 'Accept-Language': 'en-GB,en-US;q=0.9,en;q=0.8'
232
334
  })
335
+ await page.setUserAgent(
336
+ 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
337
+ )
233
338
  await page.setJavaScriptEnabled(true)
234
339
  &nbsp;
235
- if (DEBUG) {
236
- page.on('console', msg =&gt; {
237
- for (let i = 0; i &lt; msg.args().length; i++) {
340
+ if (cfg.debug) {
341
+ page.on('console', <span class="fstat-no" title="function not covered" >(m</span>sg) =&gt; {
342
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >0;</span> i &lt; msg.args().length; i++) {</span>
238
343
  <span class="cstat-no" title="statement not covered" > logger.log(`${i}: ${msg.args()[i]}`)</span>
239
344
  }
240
345
  })
241
346
  }
242
347
  &nbsp;
243
- page.clickAndNavigate = <span class="fstat-no" title="function not covered" >as</span>ync (selector) =&gt; {
244
- const nav = <span class="cstat-no" title="statement not covered" >page.waitForNavigation(navOpts)</span>
245
- <span class="cstat-no" title="statement not covered" > await page.hover(selector)</span>
246
- <span class="cstat-no" title="statement not covered" > await page.click(selector)</span>
247
- <span class="cstat-no" title="statement not covered" > await nav</span>
348
+ page.clickAndNavigate = async (selector) =&gt; {
349
+ const { page, navOpts } = this.config
350
+ const nav = page.waitForNavigation(navOpts)
351
+ await page.hover(selector)
352
+ await page.click(selector)
353
+ await nav
354
+ }
355
+ &nbsp;
356
+ page.enterAndType = async (selector, value) =&gt; {
357
+ const { page, selectorOpts } = this.config
358
+ await page.waitForSelector(selector, selectorOpts)
359
+ await page.type(selector, value)
360
+ }
361
+ &nbsp;
362
+ this.login = async () =&gt; {
363
+ const { page, login, password, productid, gotoOpts, urlbase } = this.config
364
+ const selector = 'div.login-leftcol form button[type="submit"]'
365
+ // do login
366
+ try {
367
+ await page.goto(`${urlbase}/user/login`, gotoOpts)
368
+ debug('login form loaded at %s', `${urlbase}/user/login`)
369
+ await page.enterAndType('#email', login)
370
+ await page.enterAndType('#password', password)
371
+ debug('WHMCS Marketplace credentials entered')
372
+ await page.clickAndNavigate(selector)
373
+ debug('WHMCS Marketplace login form submitted.')
374
+ } catch (error) {
375
+ <span class="cstat-no" title="statement not covered" > debug(</span>
376
+ 'WHMCS Marketplace login failed or Product ID missing',
377
+ error.message
378
+ )
379
+ <span class="cstat-no" title="statement not covered" > await page.browser().close()</span>
380
+ <span class="cstat-no" title="statement not covered" > return false</span>
381
+ }
382
+ debug('WHMCS Marketplace login succeeded.')
383
+ &nbsp;
384
+ // access MP Product ID
385
+ let tmp = productid
386
+ if (!tmp || !/^[0-9]+$/.test(productid) || !parseInt(productid, 10)) {
387
+ debug('No or invalid WHMCS Marketplace Product ID provided.')
388
+ await page.browser().close()
389
+ return false
390
+ }
391
+ &nbsp;
392
+ tmp = tmp.replace(/(.)/g, '$&amp;\u200E')
393
+ debug(`WHMCS Marketplace Product ID: ${tmp}`)
394
+ &nbsp;
395
+ return true
396
+ }
397
+ &nbsp;
398
+ this.config = {
399
+ ...cfg,
400
+ page
248
401
  }
249
402
  &nbsp;
250
- return { page, gotoOpts, navOpts, selectorOpts }
403
+ return this
251
404
  }
252
405
  &nbsp;</pre></td></tr></table></pre>
253
406
 
@@ -256,7 +409,7 @@ module.exports = async (withHEAD, DEBUG, logger) =&gt; {
256
409
  <div class='footer quiet pad2 space-top1 center small'>
257
410
  Code coverage generated by
258
411
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
259
- at Wed Jun 29 2022 13:20:57 GMT+0000 (Coordinated Universal Time)
412
+ at 2022-08-09T11:01:27.229Z
260
413
  </div>
261
414
  <script src="../prettify.js"></script>
262
415
  <script>
@@ -73,7 +73,9 @@
73
73
  <a name='L8'></a><a href='#L8'>8</a>
74
74
  <a name='L9'></a><a href='#L9'>9</a>
75
75
  <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
78
+ <span class="cline-any cline-neutral">&nbsp;</span>
77
79
  <span class="cline-any cline-neutral">&nbsp;</span>
78
80
  <span class="cline-any cline-neutral">&nbsp;</span>
79
81
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -84,14 +86,15 @@
84
86
  <span class="cline-any cline-neutral">&nbsp;</span>
85
87
  <span class="cline-any cline-neutral">&nbsp;</span>
86
88
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">module.exports = ({ env }) =&gt; ({
87
- whmcsLOGIN: env.WHMCSMP_LOGIN || false,
88
- whmcsPASSWORD: env.WHMCSMP_PASSWORD || false,
89
- whmcsPRODUCTID: env.WHMCSMP_PRODUCTID || false,
90
- whmcsMINVERSION: env.WHMCSMP_MINVERSION || '7.10',
91
- githubTOKEN: env.GH_TOKEN || env.GITHUB_TOKEN || false,
92
- githubREPO: env.GH_REPO || env.GITHUB_REPO || false,
93
- withHEAD: env.WITH_HEAD || false,
94
- DEBUG: (env.DEBUG &amp;&amp; /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false
89
+ login: env.WHMCSMP_LOGIN || false,
90
+ password: env.WHMCSMP_PASSWORD || false,
91
+ productid: env.WHMCSMP_PRODUCTID || false,
92
+ minversion: env.WHMCSMP_MINVERSION || '7.10',
93
+ ghtoken: env.GH_TOKEN || env.GITHUB_TOKEN || false,
94
+ ghrepo: env.GH_REPO || env.GITHUB_REPO || false,
95
+ headless: env.PUPPETEER_HEADLESS || '1',
96
+ debug:
97
+ (env.DEBUG &amp;&amp; /^semantic-release:(\*|whmcs)$/.test(env.DEBUG)) || false
95
98
  })
96
99
  &nbsp;</pre></td></tr></table></pre>
97
100
 
@@ -100,7 +103,7 @@
100
103
  <div class='footer quiet pad2 space-top1 center small'>
101
104
  Code coverage generated by
102
105
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
103
- at Wed Jun 29 2022 13:20:57 GMT+0000 (Coordinated Universal Time)
106
+ at 2022-08-09T11:01:27.229Z
104
107
  </div>
105
108
  <script src="../prettify.js"></script>
106
109
  <script>