Sfoglia il codice sorgente

:construction: Continuing work on integrating email transac

tags/0.0.3^2
tomit4 3 anni fa
parent
commit
9fb95f0820

+ 3
- 0
backend/.env.sample Vedi File

@@ -32,3 +32,6 @@ PSCALE_DB_BRANCH=main
32 32
 
33 33
 PSCALE_DB_USER=myuserpleasechange
34 34
 PSCALE_DB_PASSWORD=pscale_pw_abc123efg456hij789
35
+
36
+# Brevo Transactional Email API key
37
+BREVO_KEY=brevo_api_key

+ 2
- 0
backend/lib/plugins/user.js Vedi File

@@ -12,6 +12,7 @@ const UserProfileCreateRoute = require('../routes/user/create-profile')
12 12
 const UserProfilesListRoute = require('../routes/user/list-profiles')
13 13
 const UserLoginRoute = require('../routes/user/login')
14 14
 const UserSignupRoute = require('../routes/user/signup')
15
+const UserEmailRoute = require('../routes/user/email.js')
15 16
 const UserPassword = require('../routes/user/authentication')
16 17
 
17 18
 const UserService = require('../services/user')
@@ -49,6 +50,7 @@ module.exports = {
49 50
         await server.route(UserSignupRoute)
50 51
         await server.route(UserProfileCreateRoute)
51 52
         await server.route(UserProfilesListRoute)
53
+        await server.route(UserEmailRoute)
52 54
         await server.route(UserPassword)
53 55
     },
54 56
 }

+ 57
- 0
backend/lib/routes/user/email.js Vedi File

@@ -0,0 +1,57 @@
1
+'use strict'
2
+
3
+const Joi = require('joi')
4
+
5
+const pluginConfig = {
6
+    handlerType: 'email',
7
+    docs: {
8
+        get: {
9
+            description: 'sends confirmation email',
10
+            notes: 'Stores the email in memory in a hash and sends confirmation email for signup',
11
+        },
12
+    },
13
+}
14
+
15
+module.exports = {
16
+    method: 'POST',
17
+    path: '/sendemail/',
18
+    options: {
19
+        ...pluginConfig.docs.get,
20
+        tags: ['api'],
21
+        auth: false,
22
+        cors: true,
23
+        handler: async function (request, h) {
24
+            const { userService } = request.server.services()
25
+            const userEmail = request.payload.email
26
+            const userPw = request.payload.password
27
+            console.log('this.answered :=>', request.payload)
28
+            try {
29
+                const emailSent = userService.emailSent(userEmail)
30
+                return {
31
+                    ok: true,
32
+                    handler: pluginConfig.handlerType,
33
+                    data: { emailSentSuccessfully: emailSent.wasSuccessfull },
34
+                }
35
+            } catch (err) {
36
+                return {
37
+                    ok: false,
38
+                    handler: pluginConfig.handlerType,
39
+                    data: {
40
+                        error: err,
41
+                    },
42
+                }
43
+            }
44
+        },
45
+        validate: {
46
+            failAction: 'log',
47
+        },
48
+        response: {
49
+            schema: Joi.object({
50
+                ok: Joi.bool(),
51
+                handler: Joi.string(),
52
+                data: Joi.object(),
53
+            }).label('email_res'),
54
+            failAction: 'log',
55
+        },
56
+    },
57
+}

+ 44
- 0
backend/lib/services/user.js Vedi File

@@ -5,6 +5,14 @@ const Jwt = require('@hapi/jwt')
5 5
 const Schmervice = require('@hapipal/schmervice')
6 6
 const SecurePassword = require('secure-password')
7 7
 
8
+// Configuration for Brevo
9
+const SibApiV3Sdk = require('sib-api-v3-sdk')
10
+const defaultClient = SibApiV3Sdk.ApiClient.instance
11
+const apiKey = defaultClient.authentications['api-key']
12
+apiKey.apiKey = process.env.BREVO_KEY
13
+
14
+const apiInstance = new SibApiV3Sdk.TransactionalEmailsApi()
15
+
8 16
 const hasher = async (pwd, steak) => {
9 17
     const hash = await pwd.hash(steak)
10 18
     const result = await pwd.verify(steak, hash)
@@ -223,4 +231,40 @@ module.exports = class UserService extends Schmervice.Service {
223 231
 
224 232
         return passwordRow ? passwordRow.token : null
225 233
     }
234
+
235
+    /**
236
+     * Sends a Transactional Email via Brevo
237
+     * @ returns {Object}
238
+     */
239
+    async emailSent(userEmail) {
240
+        const sendSmtpEmail = {
241
+            to: [
242
+                {
243
+                    email: userEmail,
244
+                },
245
+            ],
246
+            templateId: 1,
247
+            params: {
248
+                // TODO: create basic hashing email above and cache hash...
249
+                email: 'tobehashedemail',
250
+            },
251
+        }
252
+
253
+        await apiInstance.sendTransacEmail(sendSmtpEmail).then(
254
+            data => {
255
+                console.log('data from sendTransacEmail :=>', data)
256
+                return {
257
+                    wasSuccessfull: true,
258
+                    data: data,
259
+                }
260
+            },
261
+            error => {
262
+                console.error('ERROR :=>', error)
263
+                return {
264
+                    wasSuccessfull: false,
265
+                    error: error,
266
+                }
267
+            },
268
+        )
269
+    }
226 270
 }

+ 388
- 35
backend/package-lock.json Vedi File

@@ -27,7 +27,8 @@
27 27
                 "knex": "^0.21.19",
28 28
                 "mysql": "^2.18.1",
29 29
                 "objection": "^2.2.18",
30
-                "secure-password": "^4.0.0"
30
+                "secure-password": "^4.0.0",
31
+                "sib-api-v3-sdk": "^8.5.0"
31 32
             },
32 33
             "devDependencies": {
33 34
                 "ava": "^3.15.0",
@@ -707,9 +708,9 @@
707 708
             }
708 709
         },
709 710
         "node_modules/@hapi/hapi": {
710
-            "version": "20.1.3",
711
-            "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.1.3.tgz",
712
-            "integrity": "sha512-ImOkrixD1kPUuvmSklwytPQ0sG8AtqydwU0JzvITLE6Z7wPMVf9i9LIMWywKPxHTNhCZ6W3oKP9yRjqM/IkHMQ==",
711
+            "version": "20.3.0",
712
+            "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.3.0.tgz",
713
+            "integrity": "sha512-zvPSRvaQyF3S6Nev9aiAzko2/hIFZmNSJNcs07qdVaVAvj8dGJSV4fVUuQSnufYJAGiSau+U5LxMLhx79se5WA==",
713 714
             "dependencies": {
714 715
                 "@hapi/accept": "^5.0.1",
715 716
                 "@hapi/ammo": "^5.0.1",
@@ -725,7 +726,7 @@
725 726
                 "@hapi/shot": "^5.0.5",
726 727
                 "@hapi/somever": "^3.0.0",
727 728
                 "@hapi/statehood": "^7.0.3",
728
-                "@hapi/subtext": "^7.0.3",
729
+                "@hapi/subtext": "^7.1.0",
729 730
                 "@hapi/teamwork": "^5.1.0",
730 731
                 "@hapi/topo": "^5.0.0",
731 732
                 "@hapi/validate": "^1.1.1"
@@ -813,9 +814,9 @@
813 814
             }
814 815
         },
815 816
         "node_modules/@hapi/pez": {
816
-            "version": "5.0.3",
817
-            "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.0.3.tgz",
818
-            "integrity": "sha512-mpikYRJjtrbJgdDHG/H9ySqYqwJ+QU/D7FXsYciS9P7NYBXE2ayKDAy3H0ou6CohOCaxPuTV4SZ0D936+VomHA==",
817
+            "version": "5.1.0",
818
+            "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.1.0.tgz",
819
+            "integrity": "sha512-YfB0btnkLB3lb6Ry/1KifnMPBm5ZPfaAHWFskzOMAgDgXgcBgA+zjpIynyEiBfWEz22DBT8o1e2tAaBdlt8zbw==",
819 820
             "dependencies": {
820 821
                 "@hapi/b64": "5.x.x",
821 822
                 "@hapi/boom": "9.x.x",
@@ -867,16 +868,16 @@
867 868
             }
868 869
         },
869 870
         "node_modules/@hapi/subtext": {
870
-            "version": "7.0.3",
871
-            "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.0.3.tgz",
872
-            "integrity": "sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==",
871
+            "version": "7.1.0",
872
+            "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.1.0.tgz",
873
+            "integrity": "sha512-n94cU6hlvsNRIpXaROzBNEJGwxC+HA69q769pChzej84On8vsU14guHDub7Pphr/pqn5b93zV3IkMPDU5AUiXA==",
873 874
             "dependencies": {
874 875
                 "@hapi/boom": "9.x.x",
875 876
                 "@hapi/bourne": "2.x.x",
876 877
                 "@hapi/content": "^5.0.2",
877 878
                 "@hapi/file": "2.x.x",
878 879
                 "@hapi/hoek": "9.x.x",
879
-                "@hapi/pez": "^5.0.1",
880
+                "@hapi/pez": "^5.1.0",
880 881
                 "@hapi/wreck": "17.x.x"
881 882
             }
882 883
         },
@@ -1499,6 +1500,11 @@
1499 1500
                 "node": ">=8"
1500 1501
             }
1501 1502
         },
1503
+        "node_modules/asynckit": {
1504
+            "version": "0.4.0",
1505
+            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
1506
+            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
1507
+        },
1502 1508
         "node_modules/atob": {
1503 1509
             "version": "2.1.2",
1504 1510
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -2107,6 +2113,18 @@
2107 2113
                 "node": ">=8"
2108 2114
             }
2109 2115
         },
2116
+        "node_modules/call-bind": {
2117
+            "version": "1.0.2",
2118
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
2119
+            "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
2120
+            "dependencies": {
2121
+                "function-bind": "^1.1.1",
2122
+                "get-intrinsic": "^1.0.2"
2123
+            },
2124
+            "funding": {
2125
+                "url": "https://github.com/sponsors/ljharb"
2126
+            }
2127
+        },
2110 2128
         "node_modules/call-me-maybe": {
2111 2129
             "version": "1.0.2",
2112 2130
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -2455,6 +2473,17 @@
2455 2473
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
2456 2474
             "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
2457 2475
         },
2476
+        "node_modules/combined-stream": {
2477
+            "version": "1.0.8",
2478
+            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
2479
+            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
2480
+            "dependencies": {
2481
+                "delayed-stream": "~1.0.0"
2482
+            },
2483
+            "engines": {
2484
+                "node": ">= 0.8"
2485
+            }
2486
+        },
2458 2487
         "node_modules/commander": {
2459 2488
             "version": "6.2.1",
2460 2489
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
@@ -2584,6 +2613,11 @@
2584 2613
                 "node": ">= 4"
2585 2614
             }
2586 2615
         },
2616
+        "node_modules/cookiejar": {
2617
+            "version": "2.1.4",
2618
+            "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
2619
+            "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
2620
+        },
2587 2621
         "node_modules/copy-descriptor": {
2588 2622
             "version": "0.1.1",
2589 2623
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -2668,7 +2702,6 @@
2668 2702
             "version": "3.2.7",
2669 2703
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2670 2704
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2671
-            "dev": true,
2672 2705
             "dependencies": {
2673 2706
                 "ms": "^2.1.1"
2674 2707
             }
@@ -2787,6 +2820,14 @@
2787 2820
                 "url": "https://github.com/sponsors/sindresorhus"
2788 2821
             }
2789 2822
         },
2823
+        "node_modules/delayed-stream": {
2824
+            "version": "1.0.0",
2825
+            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
2826
+            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
2827
+            "engines": {
2828
+                "node": ">=0.4.0"
2829
+            }
2830
+        },
2790 2831
         "node_modules/detect-file": {
2791 2832
             "version": "1.0.0",
2792 2833
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -3752,11 +3793,33 @@
3752 3793
                 "node": ">=8.0.0"
3753 3794
             }
3754 3795
         },
3796
+        "node_modules/form-data": {
3797
+            "version": "2.5.1",
3798
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
3799
+            "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
3800
+            "dependencies": {
3801
+                "asynckit": "^0.4.0",
3802
+                "combined-stream": "^1.0.6",
3803
+                "mime-types": "^2.1.12"
3804
+            },
3805
+            "engines": {
3806
+                "node": ">= 0.12"
3807
+            }
3808
+        },
3755 3809
         "node_modules/format-util": {
3756 3810
             "version": "1.0.5",
3757 3811
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
3758 3812
             "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg=="
3759 3813
         },
3814
+        "node_modules/formidable": {
3815
+            "version": "1.2.6",
3816
+            "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
3817
+            "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ==",
3818
+            "deprecated": "Please upgrade to latest, formidable@v2 or formidable@v3! Check these notes: https://bit.ly/2ZEqIau",
3819
+            "funding": {
3820
+                "url": "https://ko-fi.com/tunnckoCore/commissions"
3821
+            }
3822
+        },
3760 3823
         "node_modules/fragment-cache": {
3761 3824
             "version": "0.2.1",
3762 3825
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -3837,6 +3900,20 @@
3837 3900
                 "node": "6.* || 8.* || >= 10.*"
3838 3901
             }
3839 3902
         },
3903
+        "node_modules/get-intrinsic": {
3904
+            "version": "1.2.1",
3905
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
3906
+            "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
3907
+            "dependencies": {
3908
+                "function-bind": "^1.1.1",
3909
+                "has": "^1.0.3",
3910
+                "has-proto": "^1.0.1",
3911
+                "has-symbols": "^1.0.3"
3912
+            },
3913
+            "funding": {
3914
+                "url": "https://github.com/sponsors/ljharb"
3915
+            }
3916
+        },
3840 3917
         "node_modules/get-package-type": {
3841 3918
             "version": "0.1.0",
3842 3919
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -4077,6 +4154,28 @@
4077 4154
                 "node": ">=4"
4078 4155
             }
4079 4156
         },
4157
+        "node_modules/has-proto": {
4158
+            "version": "1.0.1",
4159
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
4160
+            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
4161
+            "engines": {
4162
+                "node": ">= 0.4"
4163
+            },
4164
+            "funding": {
4165
+                "url": "https://github.com/sponsors/ljharb"
4166
+            }
4167
+        },
4168
+        "node_modules/has-symbols": {
4169
+            "version": "1.0.3",
4170
+            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
4171
+            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
4172
+            "engines": {
4173
+                "node": ">= 0.4"
4174
+            },
4175
+            "funding": {
4176
+                "url": "https://github.com/sponsors/ljharb"
4177
+            }
4178
+        },
4080 4179
         "node_modules/has-value": {
4081 4180
             "version": "1.0.0",
4082 4181
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -5333,6 +5432,14 @@
5333 5432
                 "node": ">= 8"
5334 5433
             }
5335 5434
         },
5435
+        "node_modules/methods": {
5436
+            "version": "1.1.2",
5437
+            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
5438
+            "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
5439
+            "engines": {
5440
+                "node": ">= 0.6"
5441
+            }
5442
+        },
5336 5443
         "node_modules/micromatch": {
5337 5444
             "version": "3.1.10",
5338 5445
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -5454,10 +5561,32 @@
5454 5561
                 "node": ">=0.10.0"
5455 5562
             }
5456 5563
         },
5564
+        "node_modules/mime": {
5565
+            "version": "1.6.0",
5566
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
5567
+            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
5568
+            "bin": {
5569
+                "mime": "cli.js"
5570
+            },
5571
+            "engines": {
5572
+                "node": ">=4"
5573
+            }
5574
+        },
5457 5575
         "node_modules/mime-db": {
5458
-            "version": "1.47.0",
5459
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
5460
-            "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==",
5576
+            "version": "1.52.0",
5577
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
5578
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
5579
+            "engines": {
5580
+                "node": ">= 0.6"
5581
+            }
5582
+        },
5583
+        "node_modules/mime-types": {
5584
+            "version": "2.1.35",
5585
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
5586
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
5587
+            "dependencies": {
5588
+                "mime-db": "1.52.0"
5589
+            },
5461 5590
             "engines": {
5462 5591
                 "node": ">= 0.6"
5463 5592
             }
@@ -5515,8 +5644,7 @@
5515 5644
         "node_modules/ms": {
5516 5645
             "version": "2.1.3",
5517 5646
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
5518
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
5519
-            "dev": true
5647
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
5520 5648
         },
5521 5649
         "node_modules/mysql": {
5522 5650
             "version": "2.18.1",
@@ -5927,6 +6055,14 @@
5927 6055
                 "node": ">=0.10.0"
5928 6056
             }
5929 6057
         },
6058
+        "node_modules/object-inspect": {
6059
+            "version": "1.12.3",
6060
+            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
6061
+            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
6062
+            "funding": {
6063
+                "url": "https://github.com/sponsors/ljharb"
6064
+            }
6065
+        },
5930 6066
         "node_modules/object-visit": {
5931 6067
             "version": "1.0.1",
5932 6068
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
@@ -6031,6 +6167,12 @@
6031 6167
                 "format-util": "^1.0.3"
6032 6168
             }
6033 6169
         },
6170
+        "node_modules/openapi-types": {
6171
+            "version": "12.1.3",
6172
+            "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
6173
+            "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
6174
+            "peer": true
6175
+        },
6034 6176
         "node_modules/optionator": {
6035 6177
             "version": "0.9.1",
6036 6178
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -6605,6 +6747,29 @@
6605 6747
                 "node": ">=8"
6606 6748
             }
6607 6749
         },
6750
+        "node_modules/qs": {
6751
+            "version": "6.11.2",
6752
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
6753
+            "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
6754
+            "dependencies": {
6755
+                "side-channel": "^1.0.4"
6756
+            },
6757
+            "engines": {
6758
+                "node": ">=0.6"
6759
+            },
6760
+            "funding": {
6761
+                "url": "https://github.com/sponsors/ljharb"
6762
+            }
6763
+        },
6764
+        "node_modules/querystring": {
6765
+            "version": "0.2.0",
6766
+            "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
6767
+            "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==",
6768
+            "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.",
6769
+            "engines": {
6770
+                "node": ">=0.4.x"
6771
+            }
6772
+        },
6608 6773
         "node_modules/queue-microtask": {
6609 6774
             "version": "1.2.3",
6610 6775
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -7087,6 +7252,28 @@
7087 7252
                 "node": ">=8"
7088 7253
             }
7089 7254
         },
7255
+        "node_modules/sib-api-v3-sdk": {
7256
+            "version": "8.5.0",
7257
+            "resolved": "https://registry.npmjs.org/sib-api-v3-sdk/-/sib-api-v3-sdk-8.5.0.tgz",
7258
+            "integrity": "sha512-6Ratp5kLN/rEEvk4XVIQ4L8IrCIrcfE9m1HjvHz/WepC+CVXPsjOlgRcK/jQjpN5kC+dmhDAqrTo1OtnF6i1wA==",
7259
+            "dependencies": {
7260
+                "querystring": "0.2.0",
7261
+                "superagent": "3.7.0"
7262
+            }
7263
+        },
7264
+        "node_modules/side-channel": {
7265
+            "version": "1.0.4",
7266
+            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
7267
+            "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
7268
+            "dependencies": {
7269
+                "call-bind": "^1.0.0",
7270
+                "get-intrinsic": "^1.0.2",
7271
+                "object-inspect": "^1.9.0"
7272
+            },
7273
+            "funding": {
7274
+                "url": "https://github.com/sponsors/ljharb"
7275
+            }
7276
+        },
7090 7277
         "node_modules/signal-exit": {
7091 7278
             "version": "3.0.3",
7092 7279
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -7631,6 +7818,27 @@
7631 7818
                 "node": ">=0.10.0"
7632 7819
             }
7633 7820
         },
7821
+        "node_modules/superagent": {
7822
+            "version": "3.7.0",
7823
+            "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.7.0.tgz",
7824
+            "integrity": "sha512-/8trxO6NbLx4YXb7IeeFTSmsQ35pQBiTBsLNvobZx7qBzBeHYvKCyIIhW2gNcWbLzYxPAjdgFbiepd8ypwC0Gw==",
7825
+            "deprecated": "Please upgrade to v7.0.2+ of superagent.  We have fixed numerous issues with streams, form-data, attach(), filesystem errors not bubbling up (ENOENT on attach()), and all tests are now passing.  See the releases tab for more information at <https://github.com/visionmedia/superagent/releases>.",
7826
+            "dependencies": {
7827
+                "component-emitter": "^1.2.0",
7828
+                "cookiejar": "^2.1.0",
7829
+                "debug": "^3.1.0",
7830
+                "extend": "^3.0.0",
7831
+                "form-data": "^2.3.1",
7832
+                "formidable": "^1.1.1",
7833
+                "methods": "^1.1.1",
7834
+                "mime": "^1.4.1",
7835
+                "qs": "^6.5.1",
7836
+                "readable-stream": "^2.0.5"
7837
+            },
7838
+            "engines": {
7839
+                "node": ">= 4.0"
7840
+            }
7841
+        },
7634 7842
         "node_modules/supertap": {
7635 7843
             "version": "2.0.0",
7636 7844
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",
@@ -8925,9 +9133,9 @@
8925 9133
             }
8926 9134
         },
8927 9135
         "@hapi/hapi": {
8928
-            "version": "20.1.3",
8929
-            "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.1.3.tgz",
8930
-            "integrity": "sha512-ImOkrixD1kPUuvmSklwytPQ0sG8AtqydwU0JzvITLE6Z7wPMVf9i9LIMWywKPxHTNhCZ6W3oKP9yRjqM/IkHMQ==",
9136
+            "version": "20.3.0",
9137
+            "resolved": "https://registry.npmjs.org/@hapi/hapi/-/hapi-20.3.0.tgz",
9138
+            "integrity": "sha512-zvPSRvaQyF3S6Nev9aiAzko2/hIFZmNSJNcs07qdVaVAvj8dGJSV4fVUuQSnufYJAGiSau+U5LxMLhx79se5WA==",
8931 9139
             "requires": {
8932 9140
                 "@hapi/accept": "^5.0.1",
8933 9141
                 "@hapi/ammo": "^5.0.1",
@@ -8943,7 +9151,7 @@
8943 9151
                 "@hapi/shot": "^5.0.5",
8944 9152
                 "@hapi/somever": "^3.0.0",
8945 9153
                 "@hapi/statehood": "^7.0.3",
8946
-                "@hapi/subtext": "^7.0.3",
9154
+                "@hapi/subtext": "^7.1.0",
8947 9155
                 "@hapi/teamwork": "^5.1.0",
8948 9156
                 "@hapi/topo": "^5.0.0",
8949 9157
                 "@hapi/validate": "^1.1.1"
@@ -9025,9 +9233,9 @@
9025 9233
             }
9026 9234
         },
9027 9235
         "@hapi/pez": {
9028
-            "version": "5.0.3",
9029
-            "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.0.3.tgz",
9030
-            "integrity": "sha512-mpikYRJjtrbJgdDHG/H9ySqYqwJ+QU/D7FXsYciS9P7NYBXE2ayKDAy3H0ou6CohOCaxPuTV4SZ0D936+VomHA==",
9236
+            "version": "5.1.0",
9237
+            "resolved": "https://registry.npmjs.org/@hapi/pez/-/pez-5.1.0.tgz",
9238
+            "integrity": "sha512-YfB0btnkLB3lb6Ry/1KifnMPBm5ZPfaAHWFskzOMAgDgXgcBgA+zjpIynyEiBfWEz22DBT8o1e2tAaBdlt8zbw==",
9031 9239
             "requires": {
9032 9240
                 "@hapi/b64": "5.x.x",
9033 9241
                 "@hapi/boom": "9.x.x",
@@ -9079,16 +9287,16 @@
9079 9287
             }
9080 9288
         },
9081 9289
         "@hapi/subtext": {
9082
-            "version": "7.0.3",
9083
-            "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.0.3.tgz",
9084
-            "integrity": "sha512-CekDizZkDGERJ01C0+TzHlKtqdXZxzSWTOaH6THBrbOHnsr3GY+yiMZC+AfNCypfE17RaIakGIAbpL2Tk1z2+A==",
9290
+            "version": "7.1.0",
9291
+            "resolved": "https://registry.npmjs.org/@hapi/subtext/-/subtext-7.1.0.tgz",
9292
+            "integrity": "sha512-n94cU6hlvsNRIpXaROzBNEJGwxC+HA69q769pChzej84On8vsU14guHDub7Pphr/pqn5b93zV3IkMPDU5AUiXA==",
9085 9293
             "requires": {
9086 9294
                 "@hapi/boom": "9.x.x",
9087 9295
                 "@hapi/bourne": "2.x.x",
9088 9296
                 "@hapi/content": "^5.0.2",
9089 9297
                 "@hapi/file": "2.x.x",
9090 9298
                 "@hapi/hoek": "9.x.x",
9091
-                "@hapi/pez": "^5.0.1",
9299
+                "@hapi/pez": "^5.1.0",
9092 9300
                 "@hapi/wreck": "17.x.x"
9093 9301
             }
9094 9302
         },
@@ -9407,6 +9615,7 @@
9407 9615
             "dependencies": {
9408 9616
                 "ansi-regex": {
9409 9617
                     "version": "4.1.0",
9618
+                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
9410 9619
                     "dev": true
9411 9620
                 },
9412 9621
                 "emoji-regex": {
@@ -9562,6 +9771,11 @@
9562 9771
             "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
9563 9772
             "dev": true
9564 9773
         },
9774
+        "asynckit": {
9775
+            "version": "0.4.0",
9776
+            "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
9777
+            "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
9778
+        },
9565 9779
         "atob": {
9566 9780
             "version": "2.1.2",
9567 9781
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -10003,6 +10217,15 @@
10003 10217
                 "write-file-atomic": "^3.0.0"
10004 10218
             }
10005 10219
         },
10220
+        "call-bind": {
10221
+            "version": "1.0.2",
10222
+            "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
10223
+            "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
10224
+            "requires": {
10225
+                "function-bind": "^1.1.1",
10226
+                "get-intrinsic": "^1.0.2"
10227
+            }
10228
+        },
10006 10229
         "call-me-maybe": {
10007 10230
             "version": "1.0.2",
10008 10231
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
@@ -10266,6 +10489,14 @@
10266 10489
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
10267 10490
             "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
10268 10491
         },
10492
+        "combined-stream": {
10493
+            "version": "1.0.8",
10494
+            "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
10495
+            "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
10496
+            "requires": {
10497
+                "delayed-stream": "~1.0.0"
10498
+            }
10499
+        },
10269 10500
         "commander": {
10270 10501
             "version": "6.2.1",
10271 10502
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
@@ -10379,6 +10610,11 @@
10379 10610
             "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=",
10380 10611
             "dev": true
10381 10612
         },
10613
+        "cookiejar": {
10614
+            "version": "2.1.4",
10615
+            "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz",
10616
+            "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw=="
10617
+        },
10382 10618
         "copy-descriptor": {
10383 10619
             "version": "0.1.1",
10384 10620
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
@@ -10444,7 +10680,6 @@
10444 10680
             "version": "3.2.7",
10445 10681
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
10446 10682
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
10447
-            "dev": true,
10448 10683
             "requires": {
10449 10684
                 "ms": "^2.1.1"
10450 10685
             }
@@ -10538,6 +10773,11 @@
10538 10773
                 "slash": "^3.0.0"
10539 10774
             }
10540 10775
         },
10776
+        "delayed-stream": {
10777
+            "version": "1.0.0",
10778
+            "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
10779
+            "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
10780
+        },
10541 10781
         "detect-file": {
10542 10782
             "version": "1.0.0",
10543 10783
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
@@ -11265,11 +11505,26 @@
11265 11505
                 "signal-exit": "^3.0.2"
11266 11506
             }
11267 11507
         },
11508
+        "form-data": {
11509
+            "version": "2.5.1",
11510
+            "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz",
11511
+            "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==",
11512
+            "requires": {
11513
+                "asynckit": "^0.4.0",
11514
+                "combined-stream": "^1.0.6",
11515
+                "mime-types": "^2.1.12"
11516
+            }
11517
+        },
11268 11518
         "format-util": {
11269 11519
             "version": "1.0.5",
11270 11520
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
11271 11521
             "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg=="
11272 11522
         },
11523
+        "formidable": {
11524
+            "version": "1.2.6",
11525
+            "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.6.tgz",
11526
+            "integrity": "sha512-KcpbcpuLNOwrEjnbpMC0gS+X8ciDoZE1kkqzat4a8vrprf+s9pKNQ/QIwWfbfs4ltgmFl3MD177SNTkve3BwGQ=="
11527
+        },
11273 11528
         "fragment-cache": {
11274 11529
             "version": "0.2.1",
11275 11530
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
@@ -11320,6 +11575,17 @@
11320 11575
             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
11321 11576
             "dev": true
11322 11577
         },
11578
+        "get-intrinsic": {
11579
+            "version": "1.2.1",
11580
+            "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
11581
+            "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
11582
+            "requires": {
11583
+                "function-bind": "^1.1.1",
11584
+                "has": "^1.0.3",
11585
+                "has-proto": "^1.0.1",
11586
+                "has-symbols": "^1.0.3"
11587
+            }
11588
+        },
11323 11589
         "get-package-type": {
11324 11590
             "version": "0.1.0",
11325 11591
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -11499,6 +11765,16 @@
11499 11765
             "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
11500 11766
             "dev": true
11501 11767
         },
11768
+        "has-proto": {
11769
+            "version": "1.0.1",
11770
+            "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
11771
+            "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg=="
11772
+        },
11773
+        "has-symbols": {
11774
+            "version": "1.0.3",
11775
+            "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
11776
+            "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
11777
+        },
11502 11778
         "has-value": {
11503 11779
             "version": "1.0.0",
11504 11780
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
@@ -12436,6 +12712,11 @@
12436 12712
             "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
12437 12713
             "dev": true
12438 12714
         },
12715
+        "methods": {
12716
+            "version": "1.1.2",
12717
+            "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
12718
+            "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w=="
12719
+        },
12439 12720
         "micromatch": {
12440 12721
             "version": "3.1.10",
12441 12722
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
@@ -12538,10 +12819,23 @@
12538 12819
                 }
12539 12820
             }
12540 12821
         },
12822
+        "mime": {
12823
+            "version": "1.6.0",
12824
+            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
12825
+            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
12826
+        },
12541 12827
         "mime-db": {
12542
-            "version": "1.47.0",
12543
-            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz",
12544
-            "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw=="
12828
+            "version": "1.52.0",
12829
+            "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
12830
+            "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
12831
+        },
12832
+        "mime-types": {
12833
+            "version": "2.1.35",
12834
+            "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
12835
+            "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
12836
+            "requires": {
12837
+                "mime-db": "1.52.0"
12838
+            }
12545 12839
         },
12546 12840
         "mimic-fn": {
12547 12841
             "version": "3.1.0",
@@ -12581,8 +12875,7 @@
12581 12875
         "ms": {
12582 12876
             "version": "2.1.3",
12583 12877
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
12584
-            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
12585
-            "dev": true
12878
+            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
12586 12879
         },
12587 12880
         "mysql": {
12588 12881
             "version": "2.18.1",
@@ -12911,6 +13204,11 @@
12911 13204
                 }
12912 13205
             }
12913 13206
         },
13207
+        "object-inspect": {
13208
+            "version": "1.12.3",
13209
+            "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
13210
+            "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g=="
13211
+        },
12914 13212
         "object-visit": {
12915 13213
             "version": "1.0.1",
12916 13214
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
@@ -12990,6 +13288,12 @@
12990 13288
                 "format-util": "^1.0.3"
12991 13289
             }
12992 13290
         },
13291
+        "openapi-types": {
13292
+            "version": "12.1.3",
13293
+            "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
13294
+            "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
13295
+            "peer": true
13296
+        },
12993 13297
         "optionator": {
12994 13298
             "version": "0.9.1",
12995 13299
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -13410,6 +13714,19 @@
13410 13714
                 "escape-goat": "^2.0.0"
13411 13715
             }
13412 13716
         },
13717
+        "qs": {
13718
+            "version": "6.11.2",
13719
+            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz",
13720
+            "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==",
13721
+            "requires": {
13722
+                "side-channel": "^1.0.4"
13723
+            }
13724
+        },
13725
+        "querystring": {
13726
+            "version": "0.2.0",
13727
+            "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
13728
+            "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g=="
13729
+        },
13413 13730
         "queue-microtask": {
13414 13731
             "version": "1.2.3",
13415 13732
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
@@ -13756,6 +14073,25 @@
13756 14073
             "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
13757 14074
             "dev": true
13758 14075
         },
14076
+        "sib-api-v3-sdk": {
14077
+            "version": "8.5.0",
14078
+            "resolved": "https://registry.npmjs.org/sib-api-v3-sdk/-/sib-api-v3-sdk-8.5.0.tgz",
14079
+            "integrity": "sha512-6Ratp5kLN/rEEvk4XVIQ4L8IrCIrcfE9m1HjvHz/WepC+CVXPsjOlgRcK/jQjpN5kC+dmhDAqrTo1OtnF6i1wA==",
14080
+            "requires": {
14081
+                "querystring": "0.2.0",
14082
+                "superagent": "3.7.0"
14083
+            }
14084
+        },
14085
+        "side-channel": {
14086
+            "version": "1.0.4",
14087
+            "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
14088
+            "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
14089
+            "requires": {
14090
+                "call-bind": "^1.0.0",
14091
+                "get-intrinsic": "^1.0.2",
14092
+                "object-inspect": "^1.9.0"
14093
+            }
14094
+        },
13759 14095
         "signal-exit": {
13760 14096
             "version": "3.0.3",
13761 14097
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
@@ -14198,6 +14534,23 @@
14198 14534
             "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
14199 14535
             "dev": true
14200 14536
         },
14537
+        "superagent": {
14538
+            "version": "3.7.0",
14539
+            "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.7.0.tgz",
14540
+            "integrity": "sha512-/8trxO6NbLx4YXb7IeeFTSmsQ35pQBiTBsLNvobZx7qBzBeHYvKCyIIhW2gNcWbLzYxPAjdgFbiepd8ypwC0Gw==",
14541
+            "requires": {
14542
+                "component-emitter": "^1.2.0",
14543
+                "cookiejar": "^2.1.0",
14544
+                "debug": "^3.1.0",
14545
+                "extend": "^3.0.0",
14546
+                "form-data": "^2.3.1",
14547
+                "formidable": "^1.1.1",
14548
+                "methods": "^1.1.1",
14549
+                "mime": "^1.4.1",
14550
+                "qs": "^6.5.1",
14551
+                "readable-stream": "^2.0.5"
14552
+            }
14553
+        },
14201 14554
         "supertap": {
14202 14555
             "version": "2.0.0",
14203 14556
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",

+ 2
- 1
backend/package.json Vedi File

@@ -35,7 +35,8 @@
35 35
         "knex": "^0.21.19",
36 36
         "mysql": "^2.18.1",
37 37
         "objection": "^2.2.18",
38
-        "secure-password": "^4.0.0"
38
+        "secure-password": "^4.0.0",
39
+        "sib-api-v3-sdk": "^8.5.0"
39 40
     },
40 41
     "devDependencies": {
41 42
         "ava": "^3.15.0",

+ 12
- 3
frontend/src/components/onboarding/Auth.vue Vedi File

@@ -8,7 +8,8 @@
8 8
 </template>
9 9
 
10 10
 <script>
11
-// import { Authenticator } from '../services/auth.service.js'
11
+import { Authenticator } from '../../services/auth.service.js'
12
+
12 13
 export default {
13 14
     name: 'Auth',
14 15
     props: {
@@ -17,11 +18,19 @@ export default {
17 18
             type: String,
18 19
             default: 'authenticated question!!',
19 20
         },
21
+        answered: {
22
+            type: String,
23
+            default: '',
24
+        },
20 25
     },
21 26
     emits: ['update-answers'],
27
+    data: () => ({
28
+        authenticator: false,
29
+    }),
22 30
     created() {
23
-        // TODO: Put front end ping here to send email via Brevo on the backend
24
-        console.log('hi from auth :=>')
31
+        this.authenticator = new Authenticator()
32
+        console.log('this.answered :=>', this.answered)
33
+        this.authenticator.sendAuthEmail(this.answered)
25 34
     },
26 35
     methods: {
27 36
         // TODO: remove test button above and use a watcher instead to emit this

+ 8
- 1
frontend/src/services/auth.service.js Vedi File

@@ -1,7 +1,14 @@
1
+import { db } from '../utils/db.js'
2
+
1 3
 class Authenticator {
2 4
     constructor() {
3 5
         this.curentUser = null
6
+        this.authenticated = false
7
+    }
8
+    async sendAuthEmail(answered) {
9
+        const emailWasSent = await db.post(`/user/sendemail/`, answered)
10
+        console.log('emailwasSent :=>', emailWasSent)
4 11
     }
5 12
 }
6 13
 
7
-export { Authenticator }
14
+export { Authenticator }

Loading…
Annulla
Salva