Add akismet plugin
This commit is contained in:
		
							
								
								
									
										6
									
								
								peertube-plugin-akismet/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								peertube-plugin-akismet/README.md
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| # Akismet plugin for PeerTube | ||||
|  | ||||
| [Akismet](https://akismet.com/) plugin for PeerTube: | ||||
|  | ||||
|  * Check local comments and reject them if they are considered as SPAM | ||||
|  * Check remote comments and reject them if they are considered as SPAM | ||||
							
								
								
									
										178
									
								
								peertube-plugin-akismet/main.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								peertube-plugin-akismet/main.js
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,178 @@ | ||||
| const AkismetClient = require('akismet-api').AkismetClient | ||||
|  | ||||
| let akismetClient | ||||
|  | ||||
| async function register ({ | ||||
|   settingsManager, | ||||
|   peertubeHelpers, | ||||
|   registerSetting, | ||||
|   registerHook | ||||
| }) { | ||||
|   registerSetting({ | ||||
|     name: 'akismet-api-key', | ||||
|     label: 'Akismet API key', | ||||
|     type: 'input-password', | ||||
|     private: true | ||||
|   }) | ||||
|  | ||||
|   const settings = await settingsManager.getSettings([ 'akismet-api-key' ]) | ||||
|   await updateSettings(peertubeHelpers, settings) | ||||
|  | ||||
|   settingsManager.onSettingsChange(async settings => { | ||||
|     await updateSettings(peertubeHelpers, settings) | ||||
|   }) | ||||
|  | ||||
|   for (const hook of [ | ||||
|     'filter:api.video-thread.create.accept.result', | ||||
|     'filter:api.video-comment-reply.create.accept.result' | ||||
|   ]) { | ||||
|     registerHook({ | ||||
|       target: hook, | ||||
|       handler: (result, params) => { | ||||
|         if (!akismetClient) return result | ||||
|         if (!result.accepted) return result | ||||
|  | ||||
|         return checkLocalComment(peertubeHelpers, { | ||||
|           // No req in params before 5.0 | ||||
|           ip: params.req | ||||
|             ? params.req.ip | ||||
|             : '127.0.0.1', | ||||
|  | ||||
|           userAgent: params.req | ||||
|             ? params.req.get('user-agent') | ||||
|             : undefined, | ||||
|  | ||||
|           commentType: params.parentComment | ||||
|             ? 'reply' | ||||
|             : 'comment', | ||||
|  | ||||
|           text: params.commentBody.text, | ||||
|           authorEmail: params.user.email, | ||||
|           author: params.user.username | ||||
|         }) | ||||
|       } | ||||
|     }) | ||||
|   } | ||||
|  | ||||
|   registerHook({ | ||||
|     target: 'filter:activity-pub.remote-video-comment.create.accept.result', | ||||
|     handler: (result, params) => { | ||||
|       if (!akismetClient) return result | ||||
|       if (!result.accepted) return result | ||||
|  | ||||
|       return checkRemoteComment(peertubeHelpers, { | ||||
|         text: params.comment.text, | ||||
|         commentType: params.comment.originCommentId | ||||
|           ? 'reply' | ||||
|           : 'comment' | ||||
|       }) | ||||
|     } | ||||
|   }) | ||||
| } | ||||
|  | ||||
| async function unregister () { | ||||
|   return | ||||
| } | ||||
|  | ||||
| module.exports = { | ||||
|   register, | ||||
|   unregister | ||||
| } | ||||
|  | ||||
| // ############################################################################ | ||||
|  | ||||
| async function updateSettings (peertubeHelpers, settings) { | ||||
|   const { logger } = peertubeHelpers | ||||
|  | ||||
|   apiKey = settings['akismet-api-key'] | ||||
|   if (!apiKey) { | ||||
|     akismetClient = undefined | ||||
|     return | ||||
|   } | ||||
|  | ||||
|   akismetClient = new AkismetClient({ key: settings['akismet-api-key'], blog: peertubeHelpers.config.getWebserverUrl() }) | ||||
|  | ||||
|   try { | ||||
|     const isValid = await akismetClient.verifyKey() | ||||
|  | ||||
|     if (isValid) { | ||||
|       logger.info('Loaded valid Akismet key.') | ||||
|       return | ||||
|     } | ||||
|  | ||||
|     logger.error('Invalid Akismet key.') | ||||
|     akismetClient = undefined | ||||
|   } catch (err) { | ||||
|     logger.error('Cannot reach Akismet.', { err }) | ||||
|     akismetClient = undefined | ||||
|   } | ||||
| } | ||||
|  | ||||
| async function checkLocalComment (peertubeHelpers, options) { | ||||
|   const { logger } = peertubeHelpers | ||||
|  | ||||
|   const accepted = { accepted: true } | ||||
|   const rejected = { accepted: false, errorMessage: 'SPAM detected from Akismet' } | ||||
|  | ||||
|   for (const key of [ 'ip', 'text', 'commentType', 'author', 'authorEmail' ]) { | ||||
|     if (!options[key]) { | ||||
|       logger.error('Cannot check local comment from Akismet without ' + key) | ||||
|       return accepted | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // https://github.com/chrisfosterelli/akismet-api/blob/master/docs/comments.md | ||||
|   const comment = { | ||||
|     ip: options.ip, | ||||
|     content: options.text, | ||||
|     type: options.commentType, | ||||
|     name: options.author, | ||||
|     email: options.authorEmail, | ||||
|  | ||||
|     // Optional | ||||
|     useragent: options.userAgent | ||||
|   } | ||||
|  | ||||
|   try { | ||||
|     const isSpam = await akismetClient.checkSpam(comment) | ||||
|     logger.info('Checking local comment from Akismet.', { comment, isSpam }) | ||||
|  | ||||
|     if (isSpam) return rejected | ||||
|   } catch (err) { | ||||
|     logger.error('Cannot reach Akismet.', { err, comment }) | ||||
|   } | ||||
|  | ||||
|   return accepted | ||||
| } | ||||
|  | ||||
| async function checkRemoteComment (peertubeHelpers, options) { | ||||
|   const { logger } = peertubeHelpers | ||||
|  | ||||
|   const accepted = { accepted: true } | ||||
|   const rejected = { accepted: false } | ||||
|  | ||||
|   for (const key of [ 'text' ]) { | ||||
|     if (!options[key]) { | ||||
|       logger.error('Cannot check local comment from Akismet without ' + key) | ||||
|       return accepted | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   // https://github.com/chrisfosterelli/akismet-api/blob/master/docs/comments.md | ||||
|   const comment = { | ||||
|     ip: '127.0.0.1', | ||||
|     content: options.text, | ||||
|     type: options.commentType | ||||
|   } | ||||
|  | ||||
|   try { | ||||
|     const isSpam = await akismetClient.checkSpam(comment) | ||||
|     logger.info('Checking remote comment from Akismet.', { comment, isSpam }) | ||||
|  | ||||
|     if (isSpam) return rejected | ||||
|   } catch (err) { | ||||
|     logger.error('Cannot reach Akismet.', { err, comment }) | ||||
|   } | ||||
|  | ||||
|   return accepted | ||||
| } | ||||
							
								
								
									
										668
									
								
								peertube-plugin-akismet/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										668
									
								
								peertube-plugin-akismet/package-lock.json
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,668 @@ | ||||
| { | ||||
|   "name": "peertube-plugin-akismet", | ||||
|   "version": "0.0.1", | ||||
|   "lockfileVersion": 2, | ||||
|   "requires": true, | ||||
|   "packages": { | ||||
|     "": { | ||||
|       "name": "peertube-plugin-akismet", | ||||
|       "version": "0.0.1", | ||||
|       "dependencies": { | ||||
|         "akismet-api": "^5.3.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/akismet-api": { | ||||
|       "version": "5.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/akismet-api/-/akismet-api-5.3.0.tgz", | ||||
|       "integrity": "sha512-mFkZptwjdPt73gH63vqzVXe2kYZBgGV05FNS3BWLolYG4B8mVRxgoXtuSyg+jXl/pRPC37a92E9fX6tKwrMErg==", | ||||
|       "dependencies": { | ||||
|         "bluebird": "^3.1.1", | ||||
|         "superagent": "^7.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/asap": { | ||||
|       "version": "2.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", | ||||
|       "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" | ||||
|     }, | ||||
|     "node_modules/asynckit": { | ||||
|       "version": "0.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||
|       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" | ||||
|     }, | ||||
|     "node_modules/bluebird": { | ||||
|       "version": "3.7.2", | ||||
|       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", | ||||
|       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" | ||||
|     }, | ||||
|     "node_modules/call-bind": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", | ||||
|       "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", | ||||
|       "dependencies": { | ||||
|         "function-bind": "^1.1.1", | ||||
|         "get-intrinsic": "^1.0.2" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/combined-stream": { | ||||
|       "version": "1.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||||
|       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||||
|       "dependencies": { | ||||
|         "delayed-stream": "~1.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 0.8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/component-emitter": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", | ||||
|       "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" | ||||
|     }, | ||||
|     "node_modules/cookiejar": { | ||||
|       "version": "2.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", | ||||
|       "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" | ||||
|     }, | ||||
|     "node_modules/debug": { | ||||
|       "version": "4.3.4", | ||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", | ||||
|       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", | ||||
|       "dependencies": { | ||||
|         "ms": "2.1.2" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6.0" | ||||
|       }, | ||||
|       "peerDependenciesMeta": { | ||||
|         "supports-color": { | ||||
|           "optional": true | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/delayed-stream": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||||
|       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", | ||||
|       "engines": { | ||||
|         "node": ">=0.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/dezalgo": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", | ||||
|       "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", | ||||
|       "dependencies": { | ||||
|         "asap": "^2.0.0", | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/fast-safe-stringify": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", | ||||
|       "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" | ||||
|     }, | ||||
|     "node_modules/form-data": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", | ||||
|       "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", | ||||
|       "dependencies": { | ||||
|         "asynckit": "^0.4.0", | ||||
|         "combined-stream": "^1.0.8", | ||||
|         "mime-types": "^2.1.12" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/formidable": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", | ||||
|       "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", | ||||
|       "dependencies": { | ||||
|         "dezalgo": "1.0.3", | ||||
|         "hexoid": "1.0.0", | ||||
|         "once": "1.4.0", | ||||
|         "qs": "6.9.3" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://ko-fi.com/tunnckoCore/commissions" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/formidable/node_modules/qs": { | ||||
|       "version": "6.9.3", | ||||
|       "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", | ||||
|       "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", | ||||
|       "engines": { | ||||
|         "node": ">=0.6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/function-bind": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | ||||
|       "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" | ||||
|     }, | ||||
|     "node_modules/get-intrinsic": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", | ||||
|       "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", | ||||
|       "dependencies": { | ||||
|         "function-bind": "^1.1.1", | ||||
|         "has": "^1.0.3", | ||||
|         "has-symbols": "^1.0.3" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | ||||
|       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", | ||||
|       "dependencies": { | ||||
|         "function-bind": "^1.1.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 0.4.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/has-symbols": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", | ||||
|       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", | ||||
|       "engines": { | ||||
|         "node": ">= 0.4" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/hexoid": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", | ||||
|       "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", | ||||
|       "engines": { | ||||
|         "node": ">=8" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||
|       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | ||||
|     }, | ||||
|     "node_modules/lru-cache": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||||
|       "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", | ||||
|       "dependencies": { | ||||
|         "yallist": "^4.0.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/methods": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", | ||||
|       "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", | ||||
|       "engines": { | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mime": { | ||||
|       "version": "2.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", | ||||
|       "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", | ||||
|       "bin": { | ||||
|         "mime": "cli.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mime-db": { | ||||
|       "version": "1.52.0", | ||||
|       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", | ||||
|       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", | ||||
|       "engines": { | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/mime-types": { | ||||
|       "version": "2.1.35", | ||||
|       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", | ||||
|       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", | ||||
|       "dependencies": { | ||||
|         "mime-db": "1.52.0" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 0.6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/ms": { | ||||
|       "version": "2.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||||
|       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||||
|     }, | ||||
|     "node_modules/object-inspect": { | ||||
|       "version": "1.12.2", | ||||
|       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", | ||||
|       "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/once": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | ||||
|       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", | ||||
|       "dependencies": { | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/qs": { | ||||
|       "version": "6.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", | ||||
|       "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", | ||||
|       "dependencies": { | ||||
|         "side-channel": "^1.0.4" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=0.6" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/readable-stream": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", | ||||
|       "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", | ||||
|       "dependencies": { | ||||
|         "inherits": "^2.0.3", | ||||
|         "string_decoder": "^1.1.1", | ||||
|         "util-deprecate": "^1.0.1" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">= 6" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", | ||||
|       "funding": [ | ||||
|         { | ||||
|           "type": "github", | ||||
|           "url": "https://github.com/sponsors/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "patreon", | ||||
|           "url": "https://www.patreon.com/feross" | ||||
|         }, | ||||
|         { | ||||
|           "type": "consulting", | ||||
|           "url": "https://feross.org/support" | ||||
|         } | ||||
|       ] | ||||
|     }, | ||||
|     "node_modules/semver": { | ||||
|       "version": "7.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", | ||||
|       "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", | ||||
|       "dependencies": { | ||||
|         "lru-cache": "^6.0.0" | ||||
|       }, | ||||
|       "bin": { | ||||
|         "semver": "bin/semver.js" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=10" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/side-channel": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", | ||||
|       "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", | ||||
|       "dependencies": { | ||||
|         "call-bind": "^1.0.0", | ||||
|         "get-intrinsic": "^1.0.2", | ||||
|         "object-inspect": "^1.9.0" | ||||
|       }, | ||||
|       "funding": { | ||||
|         "url": "https://github.com/sponsors/ljharb" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/string_decoder": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||||
|       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||||
|       "dependencies": { | ||||
|         "safe-buffer": "~5.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/superagent": { | ||||
|       "version": "7.1.5", | ||||
|       "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz", | ||||
|       "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==", | ||||
|       "dependencies": { | ||||
|         "component-emitter": "^1.3.0", | ||||
|         "cookiejar": "^2.1.3", | ||||
|         "debug": "^4.3.4", | ||||
|         "fast-safe-stringify": "^2.1.1", | ||||
|         "form-data": "^4.0.0", | ||||
|         "formidable": "^2.0.1", | ||||
|         "methods": "^1.1.2", | ||||
|         "mime": "^2.5.0", | ||||
|         "qs": "^6.10.3", | ||||
|         "readable-stream": "^3.6.0", | ||||
|         "semver": "^7.3.7" | ||||
|       }, | ||||
|       "engines": { | ||||
|         "node": ">=6.4.0 <13 || >=14" | ||||
|       } | ||||
|     }, | ||||
|     "node_modules/util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | ||||
|     }, | ||||
|     "node_modules/wrappy": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | ||||
|       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" | ||||
|     }, | ||||
|     "node_modules/yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||
|     } | ||||
|   }, | ||||
|   "dependencies": { | ||||
|     "akismet-api": { | ||||
|       "version": "5.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/akismet-api/-/akismet-api-5.3.0.tgz", | ||||
|       "integrity": "sha512-mFkZptwjdPt73gH63vqzVXe2kYZBgGV05FNS3BWLolYG4B8mVRxgoXtuSyg+jXl/pRPC37a92E9fX6tKwrMErg==", | ||||
|       "requires": { | ||||
|         "bluebird": "^3.1.1", | ||||
|         "superagent": "^7.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "asap": { | ||||
|       "version": "2.0.6", | ||||
|       "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", | ||||
|       "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" | ||||
|     }, | ||||
|     "asynckit": { | ||||
|       "version": "0.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", | ||||
|       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" | ||||
|     }, | ||||
|     "bluebird": { | ||||
|       "version": "3.7.2", | ||||
|       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", | ||||
|       "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" | ||||
|     }, | ||||
|     "call-bind": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", | ||||
|       "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", | ||||
|       "requires": { | ||||
|         "function-bind": "^1.1.1", | ||||
|         "get-intrinsic": "^1.0.2" | ||||
|       } | ||||
|     }, | ||||
|     "combined-stream": { | ||||
|       "version": "1.0.8", | ||||
|       "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", | ||||
|       "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", | ||||
|       "requires": { | ||||
|         "delayed-stream": "~1.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "component-emitter": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", | ||||
|       "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" | ||||
|     }, | ||||
|     "cookiejar": { | ||||
|       "version": "2.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz", | ||||
|       "integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ==" | ||||
|     }, | ||||
|     "debug": { | ||||
|       "version": "4.3.4", | ||||
|       "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", | ||||
|       "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", | ||||
|       "requires": { | ||||
|         "ms": "2.1.2" | ||||
|       } | ||||
|     }, | ||||
|     "delayed-stream": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", | ||||
|       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" | ||||
|     }, | ||||
|     "dezalgo": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", | ||||
|       "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", | ||||
|       "requires": { | ||||
|         "asap": "^2.0.0", | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|     }, | ||||
|     "fast-safe-stringify": { | ||||
|       "version": "2.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", | ||||
|       "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" | ||||
|     }, | ||||
|     "form-data": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", | ||||
|       "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", | ||||
|       "requires": { | ||||
|         "asynckit": "^0.4.0", | ||||
|         "combined-stream": "^1.0.8", | ||||
|         "mime-types": "^2.1.12" | ||||
|       } | ||||
|     }, | ||||
|     "formidable": { | ||||
|       "version": "2.0.1", | ||||
|       "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", | ||||
|       "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", | ||||
|       "requires": { | ||||
|         "dezalgo": "1.0.3", | ||||
|         "hexoid": "1.0.0", | ||||
|         "once": "1.4.0", | ||||
|         "qs": "6.9.3" | ||||
|       }, | ||||
|       "dependencies": { | ||||
|         "qs": { | ||||
|           "version": "6.9.3", | ||||
|           "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", | ||||
|           "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==" | ||||
|         } | ||||
|       } | ||||
|     }, | ||||
|     "function-bind": { | ||||
|       "version": "1.1.1", | ||||
|       "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", | ||||
|       "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" | ||||
|     }, | ||||
|     "get-intrinsic": { | ||||
|       "version": "1.1.3", | ||||
|       "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", | ||||
|       "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", | ||||
|       "requires": { | ||||
|         "function-bind": "^1.1.1", | ||||
|         "has": "^1.0.3", | ||||
|         "has-symbols": "^1.0.3" | ||||
|       } | ||||
|     }, | ||||
|     "has": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", | ||||
|       "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", | ||||
|       "requires": { | ||||
|         "function-bind": "^1.1.1" | ||||
|       } | ||||
|     }, | ||||
|     "has-symbols": { | ||||
|       "version": "1.0.3", | ||||
|       "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", | ||||
|       "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" | ||||
|     }, | ||||
|     "hexoid": { | ||||
|       "version": "1.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", | ||||
|       "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==" | ||||
|     }, | ||||
|     "inherits": { | ||||
|       "version": "2.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", | ||||
|       "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" | ||||
|     }, | ||||
|     "lru-cache": { | ||||
|       "version": "6.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", | ||||
|       "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", | ||||
|       "requires": { | ||||
|         "yallist": "^4.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "methods": { | ||||
|       "version": "1.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", | ||||
|       "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" | ||||
|     }, | ||||
|     "mime": { | ||||
|       "version": "2.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", | ||||
|       "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" | ||||
|     }, | ||||
|     "mime-db": { | ||||
|       "version": "1.52.0", | ||||
|       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", | ||||
|       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" | ||||
|     }, | ||||
|     "mime-types": { | ||||
|       "version": "2.1.35", | ||||
|       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", | ||||
|       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", | ||||
|       "requires": { | ||||
|         "mime-db": "1.52.0" | ||||
|       } | ||||
|     }, | ||||
|     "ms": { | ||||
|       "version": "2.1.2", | ||||
|       "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", | ||||
|       "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" | ||||
|     }, | ||||
|     "object-inspect": { | ||||
|       "version": "1.12.2", | ||||
|       "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", | ||||
|       "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" | ||||
|     }, | ||||
|     "once": { | ||||
|       "version": "1.4.0", | ||||
|       "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", | ||||
|       "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", | ||||
|       "requires": { | ||||
|         "wrappy": "1" | ||||
|       } | ||||
|     }, | ||||
|     "qs": { | ||||
|       "version": "6.11.0", | ||||
|       "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", | ||||
|       "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", | ||||
|       "requires": { | ||||
|         "side-channel": "^1.0.4" | ||||
|       } | ||||
|     }, | ||||
|     "readable-stream": { | ||||
|       "version": "3.6.0", | ||||
|       "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", | ||||
|       "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", | ||||
|       "requires": { | ||||
|         "inherits": "^2.0.3", | ||||
|         "string_decoder": "^1.1.1", | ||||
|         "util-deprecate": "^1.0.1" | ||||
|       } | ||||
|     }, | ||||
|     "safe-buffer": { | ||||
|       "version": "5.2.1", | ||||
|       "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", | ||||
|       "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" | ||||
|     }, | ||||
|     "semver": { | ||||
|       "version": "7.3.7", | ||||
|       "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", | ||||
|       "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", | ||||
|       "requires": { | ||||
|         "lru-cache": "^6.0.0" | ||||
|       } | ||||
|     }, | ||||
|     "side-channel": { | ||||
|       "version": "1.0.4", | ||||
|       "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", | ||||
|       "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", | ||||
|       "requires": { | ||||
|         "call-bind": "^1.0.0", | ||||
|         "get-intrinsic": "^1.0.2", | ||||
|         "object-inspect": "^1.9.0" | ||||
|       } | ||||
|     }, | ||||
|     "string_decoder": { | ||||
|       "version": "1.3.0", | ||||
|       "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", | ||||
|       "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", | ||||
|       "requires": { | ||||
|         "safe-buffer": "~5.2.0" | ||||
|       } | ||||
|     }, | ||||
|     "superagent": { | ||||
|       "version": "7.1.5", | ||||
|       "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.5.tgz", | ||||
|       "integrity": "sha512-HQYyGuDRFGmZ6GNC4hq2f37KnsY9Lr0/R1marNZTgMweVDQLTLJJ6DGQ9Tj/xVVs5HEnop9EMmTbywb5P30aqw==", | ||||
|       "requires": { | ||||
|         "component-emitter": "^1.3.0", | ||||
|         "cookiejar": "^2.1.3", | ||||
|         "debug": "^4.3.4", | ||||
|         "fast-safe-stringify": "^2.1.1", | ||||
|         "form-data": "^4.0.0", | ||||
|         "formidable": "^2.0.1", | ||||
|         "methods": "^1.1.2", | ||||
|         "mime": "^2.5.0", | ||||
|         "qs": "^6.10.3", | ||||
|         "readable-stream": "^3.6.0", | ||||
|         "semver": "^7.3.7" | ||||
|       } | ||||
|     }, | ||||
|     "util-deprecate": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", | ||||
|       "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" | ||||
|     }, | ||||
|     "wrappy": { | ||||
|       "version": "1.0.2", | ||||
|       "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", | ||||
|       "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" | ||||
|     }, | ||||
|     "yallist": { | ||||
|       "version": "4.0.0", | ||||
|       "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", | ||||
|       "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" | ||||
|     } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										23
									
								
								peertube-plugin-akismet/package.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								peertube-plugin-akismet/package.json
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,23 @@ | ||||
| { | ||||
|   "name": "peertube-plugin-akismet", | ||||
|   "version": "0.0.1", | ||||
|   "description": "Reject comments based on Akismet service", | ||||
|   "engine": { | ||||
|     "peertube": ">=4.3.0" | ||||
|   }, | ||||
|   "keywords": [ | ||||
|     "peertube", | ||||
|     "plugin" | ||||
|   ], | ||||
|   "homepage": "https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-akismet", | ||||
|   "author": "Chocobozzz", | ||||
|   "bugs": "https://framagit.org/framasoft/peertube/official-plugins/issues", | ||||
|   "library": "./main.js", | ||||
|   "staticDirs": {}, | ||||
|   "css": [], | ||||
|   "clientScripts": [], | ||||
|   "translations": {}, | ||||
|   "dependencies": { | ||||
|     "akismet-api": "^5.3.0" | ||||
|   } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user