Pārlūkot izejas kodu

:construction: Continuing work on integrating email transac

tags/0.0.3^2
tomit4 3 gadus atpakaļ
vecāks
revīzija
9fb95f0820

+ 3
- 0
backend/.env.sample Parādīt failu

32
 
32
 
33
 PSCALE_DB_USER=myuserpleasechange
33
 PSCALE_DB_USER=myuserpleasechange
34
 PSCALE_DB_PASSWORD=pscale_pw_abc123efg456hij789
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 Parādīt failu

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

+ 57
- 0
backend/lib/routes/user/email.js Parādīt failu

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 Parādīt failu

5
 const Schmervice = require('@hapipal/schmervice')
5
 const Schmervice = require('@hapipal/schmervice')
6
 const SecurePassword = require('secure-password')
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
 const hasher = async (pwd, steak) => {
16
 const hasher = async (pwd, steak) => {
9
     const hash = await pwd.hash(steak)
17
     const hash = await pwd.hash(steak)
10
     const result = await pwd.verify(steak, hash)
18
     const result = await pwd.verify(steak, hash)
223
 
231
 
224
         return passwordRow ? passwordRow.token : null
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 Parādīt failu

27
                 "knex": "^0.21.19",
27
                 "knex": "^0.21.19",
28
                 "mysql": "^2.18.1",
28
                 "mysql": "^2.18.1",
29
                 "objection": "^2.2.18",
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
             "devDependencies": {
33
             "devDependencies": {
33
                 "ava": "^3.15.0",
34
                 "ava": "^3.15.0",
707
             }
708
             }
708
         },
709
         },
709
         "node_modules/@hapi/hapi": {
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
             "dependencies": {
714
             "dependencies": {
714
                 "@hapi/accept": "^5.0.1",
715
                 "@hapi/accept": "^5.0.1",
715
                 "@hapi/ammo": "^5.0.1",
716
                 "@hapi/ammo": "^5.0.1",
725
                 "@hapi/shot": "^5.0.5",
726
                 "@hapi/shot": "^5.0.5",
726
                 "@hapi/somever": "^3.0.0",
727
                 "@hapi/somever": "^3.0.0",
727
                 "@hapi/statehood": "^7.0.3",
728
                 "@hapi/statehood": "^7.0.3",
728
-                "@hapi/subtext": "^7.0.3",
729
+                "@hapi/subtext": "^7.1.0",
729
                 "@hapi/teamwork": "^5.1.0",
730
                 "@hapi/teamwork": "^5.1.0",
730
                 "@hapi/topo": "^5.0.0",
731
                 "@hapi/topo": "^5.0.0",
731
                 "@hapi/validate": "^1.1.1"
732
                 "@hapi/validate": "^1.1.1"
813
             }
814
             }
814
         },
815
         },
815
         "node_modules/@hapi/pez": {
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
             "dependencies": {
820
             "dependencies": {
820
                 "@hapi/b64": "5.x.x",
821
                 "@hapi/b64": "5.x.x",
821
                 "@hapi/boom": "9.x.x",
822
                 "@hapi/boom": "9.x.x",
867
             }
868
             }
868
         },
869
         },
869
         "node_modules/@hapi/subtext": {
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
             "dependencies": {
874
             "dependencies": {
874
                 "@hapi/boom": "9.x.x",
875
                 "@hapi/boom": "9.x.x",
875
                 "@hapi/bourne": "2.x.x",
876
                 "@hapi/bourne": "2.x.x",
876
                 "@hapi/content": "^5.0.2",
877
                 "@hapi/content": "^5.0.2",
877
                 "@hapi/file": "2.x.x",
878
                 "@hapi/file": "2.x.x",
878
                 "@hapi/hoek": "9.x.x",
879
                 "@hapi/hoek": "9.x.x",
879
-                "@hapi/pez": "^5.0.1",
880
+                "@hapi/pez": "^5.1.0",
880
                 "@hapi/wreck": "17.x.x"
881
                 "@hapi/wreck": "17.x.x"
881
             }
882
             }
882
         },
883
         },
1499
                 "node": ">=8"
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
         "node_modules/atob": {
1508
         "node_modules/atob": {
1503
             "version": "2.1.2",
1509
             "version": "2.1.2",
1504
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
1510
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
2107
                 "node": ">=8"
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
         "node_modules/call-me-maybe": {
2128
         "node_modules/call-me-maybe": {
2111
             "version": "1.0.2",
2129
             "version": "1.0.2",
2112
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
2130
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
2455
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
2473
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
2456
             "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
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
         "node_modules/commander": {
2487
         "node_modules/commander": {
2459
             "version": "6.2.1",
2488
             "version": "6.2.1",
2460
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
2489
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
2584
                 "node": ">= 4"
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
         "node_modules/copy-descriptor": {
2621
         "node_modules/copy-descriptor": {
2588
             "version": "0.1.1",
2622
             "version": "0.1.1",
2589
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
2623
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
2668
             "version": "3.2.7",
2702
             "version": "3.2.7",
2669
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2703
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
2670
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2704
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
2671
-            "dev": true,
2672
             "dependencies": {
2705
             "dependencies": {
2673
                 "ms": "^2.1.1"
2706
                 "ms": "^2.1.1"
2674
             }
2707
             }
2787
                 "url": "https://github.com/sponsors/sindresorhus"
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
         "node_modules/detect-file": {
2831
         "node_modules/detect-file": {
2791
             "version": "1.0.0",
2832
             "version": "1.0.0",
2792
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
2833
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
3752
                 "node": ">=8.0.0"
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
         "node_modules/format-util": {
3809
         "node_modules/format-util": {
3756
             "version": "1.0.5",
3810
             "version": "1.0.5",
3757
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
3811
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
3758
             "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg=="
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
         "node_modules/fragment-cache": {
3823
         "node_modules/fragment-cache": {
3761
             "version": "0.2.1",
3824
             "version": "0.2.1",
3762
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
3825
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
3837
                 "node": "6.* || 8.* || >= 10.*"
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
         "node_modules/get-package-type": {
3917
         "node_modules/get-package-type": {
3841
             "version": "0.1.0",
3918
             "version": "0.1.0",
3842
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
3919
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
4077
                 "node": ">=4"
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
         "node_modules/has-value": {
4179
         "node_modules/has-value": {
4081
             "version": "1.0.0",
4180
             "version": "1.0.0",
4082
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
4181
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
5333
                 "node": ">= 8"
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
         "node_modules/micromatch": {
5443
         "node_modules/micromatch": {
5337
             "version": "3.1.10",
5444
             "version": "3.1.10",
5338
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
5445
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
5454
                 "node": ">=0.10.0"
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
         "node_modules/mime-db": {
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
             "engines": {
5590
             "engines": {
5462
                 "node": ">= 0.6"
5591
                 "node": ">= 0.6"
5463
             }
5592
             }
5515
         "node_modules/ms": {
5644
         "node_modules/ms": {
5516
             "version": "2.1.3",
5645
             "version": "2.1.3",
5517
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
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
         "node_modules/mysql": {
5649
         "node_modules/mysql": {
5522
             "version": "2.18.1",
5650
             "version": "2.18.1",
5927
                 "node": ">=0.10.0"
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
         "node_modules/object-visit": {
6066
         "node_modules/object-visit": {
5931
             "version": "1.0.1",
6067
             "version": "1.0.1",
5932
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
6068
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
6031
                 "format-util": "^1.0.3"
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
         "node_modules/optionator": {
6176
         "node_modules/optionator": {
6035
             "version": "0.9.1",
6177
             "version": "0.9.1",
6036
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
6178
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
6605
                 "node": ">=8"
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
         "node_modules/queue-microtask": {
6773
         "node_modules/queue-microtask": {
6609
             "version": "1.2.3",
6774
             "version": "1.2.3",
6610
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
6775
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
7087
                 "node": ">=8"
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
         "node_modules/signal-exit": {
7277
         "node_modules/signal-exit": {
7091
             "version": "3.0.3",
7278
             "version": "3.0.3",
7092
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
7279
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
7631
                 "node": ">=0.10.0"
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
         "node_modules/supertap": {
7842
         "node_modules/supertap": {
7635
             "version": "2.0.0",
7843
             "version": "2.0.0",
7636
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",
7844
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",
8925
             }
9133
             }
8926
         },
9134
         },
8927
         "@hapi/hapi": {
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
             "requires": {
9139
             "requires": {
8932
                 "@hapi/accept": "^5.0.1",
9140
                 "@hapi/accept": "^5.0.1",
8933
                 "@hapi/ammo": "^5.0.1",
9141
                 "@hapi/ammo": "^5.0.1",
8943
                 "@hapi/shot": "^5.0.5",
9151
                 "@hapi/shot": "^5.0.5",
8944
                 "@hapi/somever": "^3.0.0",
9152
                 "@hapi/somever": "^3.0.0",
8945
                 "@hapi/statehood": "^7.0.3",
9153
                 "@hapi/statehood": "^7.0.3",
8946
-                "@hapi/subtext": "^7.0.3",
9154
+                "@hapi/subtext": "^7.1.0",
8947
                 "@hapi/teamwork": "^5.1.0",
9155
                 "@hapi/teamwork": "^5.1.0",
8948
                 "@hapi/topo": "^5.0.0",
9156
                 "@hapi/topo": "^5.0.0",
8949
                 "@hapi/validate": "^1.1.1"
9157
                 "@hapi/validate": "^1.1.1"
9025
             }
9233
             }
9026
         },
9234
         },
9027
         "@hapi/pez": {
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
             "requires": {
9239
             "requires": {
9032
                 "@hapi/b64": "5.x.x",
9240
                 "@hapi/b64": "5.x.x",
9033
                 "@hapi/boom": "9.x.x",
9241
                 "@hapi/boom": "9.x.x",
9079
             }
9287
             }
9080
         },
9288
         },
9081
         "@hapi/subtext": {
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
             "requires": {
9293
             "requires": {
9086
                 "@hapi/boom": "9.x.x",
9294
                 "@hapi/boom": "9.x.x",
9087
                 "@hapi/bourne": "2.x.x",
9295
                 "@hapi/bourne": "2.x.x",
9088
                 "@hapi/content": "^5.0.2",
9296
                 "@hapi/content": "^5.0.2",
9089
                 "@hapi/file": "2.x.x",
9297
                 "@hapi/file": "2.x.x",
9090
                 "@hapi/hoek": "9.x.x",
9298
                 "@hapi/hoek": "9.x.x",
9091
-                "@hapi/pez": "^5.0.1",
9299
+                "@hapi/pez": "^5.1.0",
9092
                 "@hapi/wreck": "17.x.x"
9300
                 "@hapi/wreck": "17.x.x"
9093
             }
9301
             }
9094
         },
9302
         },
9407
             "dependencies": {
9615
             "dependencies": {
9408
                 "ansi-regex": {
9616
                 "ansi-regex": {
9409
                     "version": "4.1.0",
9617
                     "version": "4.1.0",
9618
+                    "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
9410
                     "dev": true
9619
                     "dev": true
9411
                 },
9620
                 },
9412
                 "emoji-regex": {
9621
                 "emoji-regex": {
9562
             "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
9771
             "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
9563
             "dev": true
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
         "atob": {
9779
         "atob": {
9566
             "version": "2.1.2",
9780
             "version": "2.1.2",
9567
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
9781
             "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
10003
                 "write-file-atomic": "^3.0.0"
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
         "call-me-maybe": {
10229
         "call-me-maybe": {
10007
             "version": "1.0.2",
10230
             "version": "1.0.2",
10008
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
10231
             "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
10266
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
10489
             "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz",
10267
             "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw=="
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
         "commander": {
10500
         "commander": {
10270
             "version": "6.2.1",
10501
             "version": "6.2.1",
10271
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
10502
             "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
10379
             "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=",
10610
             "integrity": "sha1-fj5Iu+bZl7FBfdyihoIEtNPYVxU=",
10380
             "dev": true
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
         "copy-descriptor": {
10618
         "copy-descriptor": {
10383
             "version": "0.1.1",
10619
             "version": "0.1.1",
10384
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
10620
             "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
10444
             "version": "3.2.7",
10680
             "version": "3.2.7",
10445
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
10681
             "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
10446
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
10682
             "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
10447
-            "dev": true,
10448
             "requires": {
10683
             "requires": {
10449
                 "ms": "^2.1.1"
10684
                 "ms": "^2.1.1"
10450
             }
10685
             }
10538
                 "slash": "^3.0.0"
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
         "detect-file": {
10781
         "detect-file": {
10542
             "version": "1.0.0",
10782
             "version": "1.0.0",
10543
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
10783
             "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
11265
                 "signal-exit": "^3.0.2"
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
         "format-util": {
11518
         "format-util": {
11269
             "version": "1.0.5",
11519
             "version": "1.0.5",
11270
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
11520
             "resolved": "https://registry.npmjs.org/format-util/-/format-util-1.0.5.tgz",
11271
             "integrity": "sha512-varLbTj0e0yVyRpqQhuWV+8hlePAgaoFRhNFj50BNjEIrw1/DphHSObtqwskVCPWNgzwPoQrZAbfa/SBiicNeg=="
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
         "fragment-cache": {
11528
         "fragment-cache": {
11274
             "version": "0.2.1",
11529
             "version": "0.2.1",
11275
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
11530
             "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
11320
             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
11575
             "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
11321
             "dev": true
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
         "get-package-type": {
11589
         "get-package-type": {
11324
             "version": "0.1.0",
11590
             "version": "0.1.0",
11325
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
11591
             "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
11499
             "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
11765
             "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
11500
             "dev": true
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
         "has-value": {
11778
         "has-value": {
11503
             "version": "1.0.0",
11779
             "version": "1.0.0",
11504
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
11780
             "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
12436
             "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
12712
             "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
12437
             "dev": true
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
         "micromatch": {
12720
         "micromatch": {
12440
             "version": "3.1.10",
12721
             "version": "3.1.10",
12441
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
12722
             "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
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
         "mime-db": {
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
         "mimic-fn": {
12840
         "mimic-fn": {
12547
             "version": "3.1.0",
12841
             "version": "3.1.0",
12581
         "ms": {
12875
         "ms": {
12582
             "version": "2.1.3",
12876
             "version": "2.1.3",
12583
             "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
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
         "mysql": {
12880
         "mysql": {
12588
             "version": "2.18.1",
12881
             "version": "2.18.1",
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
         "object-visit": {
13212
         "object-visit": {
12915
             "version": "1.0.1",
13213
             "version": "1.0.1",
12916
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
13214
             "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
12990
                 "format-util": "^1.0.3"
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
         "optionator": {
13297
         "optionator": {
12994
             "version": "0.9.1",
13298
             "version": "0.9.1",
12995
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
13299
             "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
13410
                 "escape-goat": "^2.0.0"
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
         "queue-microtask": {
13730
         "queue-microtask": {
13414
             "version": "1.2.3",
13731
             "version": "1.2.3",
13415
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
13732
             "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
13756
             "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
14073
             "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
13757
             "dev": true
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
         "signal-exit": {
14095
         "signal-exit": {
13760
             "version": "3.0.3",
14096
             "version": "3.0.3",
13761
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
14097
             "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
14198
             "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
14534
             "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
14199
             "dev": true
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
         "supertap": {
14554
         "supertap": {
14202
             "version": "2.0.0",
14555
             "version": "2.0.0",
14203
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",
14556
             "resolved": "https://registry.npmjs.org/supertap/-/supertap-2.0.0.tgz",

+ 2
- 1
backend/package.json Parādīt failu

35
         "knex": "^0.21.19",
35
         "knex": "^0.21.19",
36
         "mysql": "^2.18.1",
36
         "mysql": "^2.18.1",
37
         "objection": "^2.2.18",
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
     "devDependencies": {
41
     "devDependencies": {
41
         "ava": "^3.15.0",
42
         "ava": "^3.15.0",

+ 12
- 3
frontend/src/components/onboarding/Auth.vue Parādīt failu

8
 </template>
8
 </template>
9
 
9
 
10
 <script>
10
 <script>
11
-// import { Authenticator } from '../services/auth.service.js'
11
+import { Authenticator } from '../../services/auth.service.js'
12
+
12
 export default {
13
 export default {
13
     name: 'Auth',
14
     name: 'Auth',
14
     props: {
15
     props: {
17
             type: String,
18
             type: String,
18
             default: 'authenticated question!!',
19
             default: 'authenticated question!!',
19
         },
20
         },
21
+        answered: {
22
+            type: String,
23
+            default: '',
24
+        },
20
     },
25
     },
21
     emits: ['update-answers'],
26
     emits: ['update-answers'],
27
+    data: () => ({
28
+        authenticator: false,
29
+    }),
22
     created() {
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
     methods: {
35
     methods: {
27
         // TODO: remove test button above and use a watcher instead to emit this
36
         // TODO: remove test button above and use a watcher instead to emit this

+ 8
- 1
frontend/src/services/auth.service.js Parādīt failu

1
+import { db } from '../utils/db.js'
2
+
1
 class Authenticator {
3
 class Authenticator {
2
     constructor() {
4
     constructor() {
3
         this.curentUser = null
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 }

Notiek ielāde…
Atcelt
Saglabāt