5htp 0.3.5 → 0.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/package.json +4 -3
  2. package/skeleton/docker-compose.yml +7 -15
  3. package/skeleton/identity.yaml +12 -8
  4. package/skeleton/package.json +25 -7
  5. package/skeleton/src/client/assets/identity/logo.svg +13 -63
  6. package/skeleton/src/client/assets/identity/logoAndText.svg +9 -104
  7. package/skeleton/src/client/assets/identity/logoAndTextBlack.svg +11 -0
  8. package/skeleton/src/client/assets/illustration/landing/banner.webp +0 -0
  9. package/skeleton/src/client/assets/illustration/landing/candidate/employers.webp +0 -0
  10. package/skeleton/src/client/assets/illustration/landing/candidate/hero.webp +0 -0
  11. package/skeleton/src/client/assets/illustration/landing/candidate/mentors.webp +0 -0
  12. package/skeleton/src/client/assets/illustration/landing/headhunter/hero.webp +0 -0
  13. package/skeleton/src/client/assets/illustration/landing/hero.jpeg +0 -0
  14. package/skeleton/src/client/assets/illustration/landing/hero.webp +0 -0
  15. package/skeleton/src/client/assets/illustration/landing/hero.xcf +0 -0
  16. package/skeleton/src/client/assets/illustration/landing/recruiter/onboarding.webp +0 -0
  17. package/skeleton/src/client/assets/illustration/landing/team/andre.png +0 -0
  18. package/skeleton/src/client/assets/illustration/landing/team/emma.png +0 -0
  19. package/skeleton/src/client/assets/illustration/landing/team/fei.png +0 -0
  20. package/skeleton/src/client/assets/illustration/landing/team/gaetan.png +0 -0
  21. package/skeleton/src/client/assets/illustration/landing/team/jordan.png +0 -0
  22. package/skeleton/src/client/assets/illustration/landing/team/lery.png +0 -0
  23. package/skeleton/src/client/assets/illustration/landing/team/mehdi.png +0 -0
  24. package/skeleton/src/client/assets/illustration/landing/team/omkar.png +0 -0
  25. package/skeleton/src/client/assets/illustration/landing/team/thibaut.png +0 -0
  26. package/skeleton/src/client/assets/img/background/header-blur.png +0 -0
  27. package/skeleton/src/client/assets/img/partners/citron.svg +987 -0
  28. package/skeleton/src/client/assets/patterns/dots.png +0 -0
  29. package/skeleton/src/client/assets/theme.less +179 -226
  30. package/skeleton/src/client/assets/vars.less +54 -0
  31. package/skeleton/src/client/context.ts +23 -0
  32. package/skeleton/src/client/index.ts +59 -0
  33. package/skeleton/src/client/pages/_messages/400.tsx +45 -0
  34. package/skeleton/src/client/pages/_messages/401.tsx +39 -0
  35. package/skeleton/src/client/pages/_messages/403.tsx +43 -0
  36. package/skeleton/src/client/pages/_messages/404.tsx +42 -0
  37. package/skeleton/src/client/pages/_messages/500.tsx +42 -0
  38. package/skeleton/src/client/pages/platform/Header.less +12 -0
  39. package/skeleton/src/client/pages/platform/Header.tsx +119 -0
  40. package/skeleton/src/client/pages/platform/_layout/index.less +118 -0
  41. package/skeleton/src/client/pages/platform/_layout/index.tsx +131 -0
  42. package/skeleton/src/client/pages/platform/_layout/mobile.less +114 -0
  43. package/skeleton/src/client/pages/platform/_page.tsx +54 -0
  44. package/skeleton/src/client/pages/platform/headhunters/index.tsx +88 -0
  45. package/skeleton/src/client/pages/platform/index.tsx +58 -0
  46. package/skeleton/src/client/pages/platform/missions/index.tsx +149 -0
  47. package/skeleton/src/client/services/metrics/index.ts +59 -0
  48. package/skeleton/src/client/tsconfig.json +4 -1
  49. package/skeleton/src/common/config/router.ts +16 -0
  50. package/skeleton/src/common/forms/company/bookCall.ts +25 -0
  51. package/skeleton/src/common/forms/company/importJob.ts +26 -0
  52. package/skeleton/src/common/forms/company/signup.ts +31 -0
  53. package/skeleton/src/common/forms/headhunter/feedback.ts +31 -0
  54. package/skeleton/src/common/forms/headhunter/mission/cancel.ts +26 -0
  55. package/skeleton/src/common/forms/headhunter/mission/candidate/availability.ts +31 -0
  56. package/skeleton/src/common/forms/headhunter/mission/candidate/education.ts +19 -0
  57. package/skeleton/src/common/forms/headhunter/mission/candidate/identity.ts +31 -0
  58. package/skeleton/src/common/forms/headhunter/mission/candidate/others.ts +19 -0
  59. package/skeleton/src/common/forms/headhunter/mission/candidate/skills.ts +21 -0
  60. package/skeleton/src/common/forms/headhunter/mission/reject.ts +23 -0
  61. package/skeleton/src/common/forms/headhunter/mission/search.ts +78 -0
  62. package/skeleton/src/common/forms/headhunter/signup.ts +34 -0
  63. package/skeleton/src/common/libs/headhunter/candidate/index.ts +155 -0
  64. package/skeleton/src/common/libs/headhunter/mission/index.ts +30 -0
  65. package/skeleton/src/common/libs/hub/index.ts +41 -0
  66. package/skeleton/src/server/config/communication.ts +48 -0
  67. package/skeleton/src/server/config/crosspath.ts +9 -0
  68. package/skeleton/src/server/config/data.ts +34 -0
  69. package/skeleton/src/server/config/database.ts +26 -0
  70. package/skeleton/src/server/config/internal.ts +21 -0
  71. package/skeleton/src/server/config/user.ts +90 -0
  72. package/skeleton/src/server/index.ts +111 -23
  73. package/skeleton/src/server/libs/utils/slug.ts +11 -0
  74. package/skeleton/src/server/routes/global.ts +33 -0
  75. package/skeleton/src/server/routes/headhunters.ts +24 -0
  76. package/skeleton/src/server/routes/missions.ts +50 -0
  77. package/skeleton/src/server/services/Headhunter/index.ts +127 -0
  78. package/skeleton/src/server/services/Headhunter/service.json +6 -0
  79. package/skeleton/src/server/services/Mission/index.ts +174 -0
  80. package/skeleton/src/server/services/Mission/service.json +6 -0
  81. package/skeleton/src/server/services/email/sendgrid/index.ts +97 -0
  82. package/skeleton/src/server/services/email/sendgrid/service.json +6 -0
  83. package/skeleton/src/server/services/slack/index.ts +105 -0
  84. package/skeleton/src/server/services/slack/service.json +6 -0
  85. package/skeleton/src/server/services/users/index.ts +133 -0
  86. package/skeleton/src/server/services/users/service.json +6 -0
  87. package/skeleton/src/server/tsconfig.json +6 -8
  88. package/skeleton/var/typings/routes.d.ts +541 -0
  89. package/src/compiler/common/babel/index.ts +28 -25
  90. package/src/index.ts +1 -1
  91. package/src/utils/keyboard.ts +1 -1
  92. package/skeleton/package-lock.json +0 -6139
  93. package/skeleton/src/client/components/LoginModal.tsx +0 -45
  94. package/skeleton/src/client/pages/app/_layout/index.less +0 -20
  95. package/skeleton/src/client/pages/app/_layout/index.tsx +0 -33
  96. package/skeleton/src/client/pages/app/index.tsx +0 -57
  97. package/skeleton/src/client/pages/landing/_layout/index.less +0 -145
  98. package/skeleton/src/client/pages/landing/_layout/index.tsx +0 -63
  99. package/skeleton/src/client/pages/landing/index.tsx +0 -73
  100. package/skeleton/src/server/models.ts +0 -117
  101. package/skeleton/src/server/routes/general.ts +0 -66
  102. package/skeleton/src/server/services/auth/index.ts +0 -80
@@ -1,45 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
- import React from 'react';
7
-
8
- // Core
9
- import useContext from '@/client/context';
10
- import { Props as ModalProps } from '@client/components/Dialog/card';
11
-
12
- // Core components
13
- import Input from '@client/components/input';
14
- import Button from '@client/components/button';
15
-
16
- // App
17
-
18
- /*----------------------------------
19
- - CONTROLEUR
20
- ----------------------------------*/
21
- export default ({ close }: ModalProps) => {
22
-
23
- const { api, page } = useContext();
24
-
25
- const [username, setUserName] = React.useState("");
26
-
27
- const login = () => api.post('/login', { username }).then(() => {
28
- close(true);
29
- return router.go('/app');
30
- });
31
-
32
- return (
33
- <div class="card col w-3-4">
34
- <header>
35
- <h2>Login</h2>
36
- </header>
37
-
38
- <Input title="Username" value={username} onChange={setUserName} />
39
-
40
- <Button type="primary" iconR="long-arrow-right" async onClick={login}>
41
- Let's go
42
- </Button>
43
- </div>
44
- )
45
- }
@@ -1,20 +0,0 @@
1
- @import (reference) "@/client/assets/theme.less";
2
-
3
- @layoutWidth: 80em;
4
-
5
- #layout.app {
6
-
7
- background: #fff;
8
-
9
- > .page {
10
- display: flex;
11
- flex-direction: column;
12
- align-items: center;
13
- justify-content: center;
14
- gap: 2em;
15
-
16
- min-height: 100vh;
17
- padding: 1.2em;
18
- }
19
-
20
- }
@@ -1,33 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
- import React from 'react';
7
-
8
- // Core
9
- import { ClientContext } from '@/client/context';
10
-
11
- // Core components
12
- import Router from '@client/router/component';
13
-
14
- // Resources
15
- import "./index.less";
16
-
17
- /*----------------------------------
18
- - TYPES
19
- ----------------------------------*/
20
-
21
-
22
- /*----------------------------------
23
- - COMPOSANT
24
- ----------------------------------*/
25
- export default function App ({ context }: { context: ClientContext }) {
26
- return (
27
- <div id="layout" class="app">
28
-
29
- <Router />
30
-
31
- </div>
32
- )
33
- }
@@ -1,57 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
- import React from 'react';
7
-
8
- // Core
9
- import route from '@router';
10
- import greetings from '@common/data/chaines/greetings';
11
-
12
- // Core components
13
- import Button from '@client/components/button';
14
-
15
- // App
16
- import useHeader from '@client/pages/useHeader';
17
-
18
- /*----------------------------------
19
- - CONTROLEUR
20
- ----------------------------------*/
21
- route.page('/app', { }, ({}, { api }) => ({
22
-
23
- // Get data from your API here
24
-
25
- }), ({ }, { api, router, user, socket }) => {
26
-
27
- /*----------------------------------
28
- - INIT
29
- ----------------------------------*/
30
-
31
- const [connected, setConnected] = React.useState(0);
32
- React.useEffect(() => {
33
- const client = socket.open("/user").on('connected', setConnected)
34
- return () => client.close();
35
- }, []);
36
-
37
- useHeader({
38
- title: "Megacharger: Rent your mobile Internet without compromise",
39
- subtitle: "Get passive incomes by sharing your internet access to the world developpers. Low battery usage, fully transparent.",
40
- });
41
-
42
- /*----------------------------------
43
- - ACTIONS
44
- ----------------------------------*/
45
- const logout = () => api.post('/auth/logout').then(() => router.go('/'))
46
-
47
- /*----------------------------------
48
- - RENDER
49
- ----------------------------------*/
50
- return <>
51
- {greetings( user.email )}
52
-
53
- <strong class="xxl">Connected users: {connected}</strong>
54
-
55
- <Button onClick={logout}>Logout</Button>
56
- </>
57
- });
@@ -1,145 +0,0 @@
1
- @import (reference) "@/client/assets/theme.less";
2
-
3
- @layoutWidth: 80em;
4
-
5
- #layout.landing {
6
-
7
- padding: 1.2em;
8
- background: #fff;
9
-
10
- &,
11
- > .page {
12
- display: flex;
13
- flex-direction: column;
14
- gap: 2rem;
15
- }
16
-
17
- > header {
18
- #logo {
19
- height: 2.5em;
20
- }
21
- }
22
-
23
- main#page {
24
- background: none;
25
- }
26
-
27
- main.home ~ section {
28
-
29
- margin-top: 5rem;
30
- align-items: stretch;
31
- gap: 2em;
32
-
33
- > .illustration {
34
- background: #f5f5f5 url(../../../assets/patterns/interlaced.png) fixed;
35
- border-radius: @radius;
36
-
37
- display: flex;
38
- align-items: center;
39
- justify-content: center;
40
-
41
- min-height: 10em;
42
-
43
- > i {
44
- font-size: 5em;
45
- color: var(--cAccent);
46
- }
47
- }
48
- }
49
-
50
- #introduction {
51
- > p {
52
- font-size: 1.2em;
53
- line-height: 1.5em;
54
- }
55
- }
56
-
57
- #screenshot {
58
- border-radius: @layoutRadius;
59
- min-height: 200px;
60
- background: #eee url('../../../assets/illustration/launch.jpg') left center no-repeat;
61
- background-size: cover;
62
- }
63
-
64
- footer {
65
- display: inline-block;
66
- padding: 1.5em;
67
- border: solid 2px #eee;
68
- color: var(--cTxtDesc);
69
- border-radius: 20px;
70
- }
71
-
72
- /*----------------------------------
73
- - MOBILE
74
- ----------------------------------*/
75
- @media (max-width: 50em) {
76
-
77
- h1 {
78
- font-size: 11.5vw;
79
- }
80
- }
81
-
82
- /*----------------------------------
83
- - DESKTOP
84
- ----------------------------------*/
85
- @media (min-width: 50em) {
86
-
87
- max-width: @layoutWidth;
88
- box-shadow: none;
89
- padding: 0;
90
- margin: 2rem auto;
91
-
92
- main.home ~ section {
93
-
94
- flex-direction: row;
95
- gap: 1em;
96
-
97
- &:nth-child(odd) {
98
- flex-direction: row-reverse;
99
- }
100
-
101
- > * {
102
- flex: 1;
103
- }
104
-
105
- > .illustration {
106
-
107
- }
108
- }
109
-
110
- #page {
111
- flex-direction: row-reverse;
112
- gap: 4em;
113
-
114
- #introduction {
115
- flex: 1;
116
- max-width: 27em;
117
- gap: 1em;
118
- }
119
-
120
- #screenshot {
121
-
122
- flex: 1;
123
- height: 40rem;
124
- min-width: 10em;
125
- }
126
-
127
- h1 {
128
- font-size: 3.3em;
129
-
130
- }
131
- }
132
- }
133
-
134
- @media (min-width: @responsive1) {
135
-
136
- #page {
137
-
138
- justify-content: center;
139
-
140
- > header h1 {
141
- font-size: 3em;
142
- }
143
- }
144
- }
145
- }
@@ -1,63 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
- import React from 'react';
7
-
8
- // Core
9
- import { ClientContext } from '@/client/context';
10
-
11
- // Core components
12
- import { Link } from '@client/router';
13
- import Router from '@client/router/component';
14
- import Button from '@client/components/button';
15
-
16
- // Resources
17
- import "./index.less";
18
- import LogoWithText from '@/client/assets/identity/logoAndText.svg';
19
-
20
- /*----------------------------------
21
- - TYPES
22
- ----------------------------------*/
23
-
24
-
25
- /*----------------------------------
26
- - COMPOSANT
27
- ----------------------------------*/
28
- export default function App ({ context }: { context: ClientContext }) {
29
-
30
- const { user, toast, Application } = context;
31
-
32
- return (
33
- <div id="layout" class="landing">
34
-
35
- <header class="row">
36
-
37
- <Link to="/"><img id="logo" src={LogoWithText} /></Link>
38
-
39
- <nav class="col-1">
40
- <ul class="menu row al-right s desk-only">
41
- <li>
42
- <Button link="/#how">How it works</Button>
43
- </li>
44
- <li>
45
- <Button link="/#who">Who we are</Button>
46
- </li>
47
- <li>
48
- <Button link="/help">Help center</Button>
49
- </li>
50
- </ul>
51
- </nav>
52
-
53
- <Button id="cta" size="s" type="secondary" shape="pill" async onClick={() => {
54
- toast.loading("Asking Google if he's okay ...");
55
- Application.googleAuth();
56
- }}>Login</Button>
57
- </header>
58
-
59
- <Router />
60
-
61
- </div>
62
- )
63
- }
@@ -1,73 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
- import React from 'react';
7
-
8
- // Core
9
- import route from '@router';
10
-
11
- // Core components
12
- import Button from '@client/components/button';
13
-
14
- // App
15
- import useHeader from '@client/pages/useHeader';
16
- import LoginModal from '@/client/components/LoginModal';
17
-
18
- /*----------------------------------
19
- - CONTROLEUR
20
- ----------------------------------*/
21
- route.page('/', { }, ({}, { api }) => ({
22
-
23
- serverTime: api.get('/serverTime')
24
-
25
- }), ({ serverTime }, { modal }) => {
26
-
27
- /*----------------------------------
28
- - INIT
29
- ----------------------------------*/
30
- useHeader({
31
- title: "Megacharger: Rent your mobile Internet without compromise",
32
- subtitle: "Get passive incomes by sharing your internet access to the world developpers. Low battery usage, fully transparent.",
33
- });
34
-
35
- /*----------------------------------
36
- - ACTIONS
37
- ----------------------------------*/
38
-
39
-
40
- /*----------------------------------
41
- - RENDER
42
- ----------------------------------*/
43
- return <>
44
-
45
- <main id="page" class="home col sp-05 al-fill">
46
-
47
- <div id="screenshot" class="row-1" />
48
-
49
- <div id="introduction" class="col sp-1">
50
-
51
- <h1 class="txt-left">
52
- <strong>Welcome</strong> to your New App.
53
- </h1>
54
-
55
- <p class="txt-left l">
56
- Lorem ipsum dolor sit amet consectetur adipisicing elit. Expedita dolores, consequuntur minima voluptate temporibus iure.
57
- </p>
58
-
59
- <Button id="cta" type="primary" iconR="long-arrow-right" onClick={() =>
60
- modal.show(LoginModal)
61
- }>Login</Button>
62
-
63
- Server time: {serverTime}
64
- </div>
65
- </main>
66
-
67
- <footer class="col al-center">
68
- <div>
69
- Made with <i src="solid/heart" class="m mgh-05" /> & <i src="solid/mug-hot" class="m mgh-05" /> in London.
70
- </div>
71
- </footer>
72
- </>
73
- });
@@ -1,117 +0,0 @@
1
- export type BugApp = {
2
- action: string,
3
- build: string,
4
- client: string,
5
- date: Date,
6
- device?: string,
7
- hash: string,
8
- ip: string,
9
- message?: string,
10
- side: string,
11
- solved?: Date,
12
- stacktrace: string,
13
- status?: string,
14
- user?: string
15
- }
16
- export type BugGUI = {
17
- before?: string,
18
- date: Date,
19
- device: string,
20
- guiVersion: string,
21
- hash: string,
22
- ip: string,
23
- observation?: string,
24
- serverVersion: string,
25
- solved?: Date,
26
- context?: object,
27
- stacktrace?: string,
28
- url: string,
29
- user?: string
30
- }
31
- export type BugServer = {
32
- channelId?: string,
33
- channelType: string,
34
- date: Date,
35
- hash: string,
36
- ip?: string,
37
- logs: string,
38
- solved?: Date,
39
- stacktrace: string,
40
- user?: string
41
- }
42
- export type Countries = {
43
- id: string,
44
- name: string
45
- }
46
- export type Devices = {
47
- activity: Date,
48
- bandwidth: number,
49
- build: number,
50
- connectedSince: Date,
51
- id: string,
52
- invalid: number,
53
- ip: string,
54
- meet: Date,
55
- name?: string,
56
- platform: string,
57
- rewards: number,
58
- user: string,
59
- valid: number
60
- }
61
- export type Locales = {
62
- id: string,
63
- name: string
64
- }
65
- export type User = {
66
- activity: Date,
67
- balance: number,
68
- balanceGoal: number,
69
- balanceGoalReached: number,
70
- banned?: Date,
71
- boosterEnd?: Date,
72
- country?: string,
73
- donationPc: number,
74
- email: string,
75
- emailHash: string,
76
- exp: number,
77
- level: number,
78
- levelsReached: number,
79
- meet: Date,
80
- name: string,
81
- phone?: string,
82
- referrer?: string,
83
- refPeriodEnd?: Date,
84
- roles: string[],
85
- smscode?: string,
86
- utm?: string
87
- }
88
- export type UserLogin = {
89
- date: Date,
90
- device: string,
91
- id: number,
92
- ip: string,
93
- user: string
94
- }
95
- export type UserStats = {
96
- activity: Date,
97
- balance: number,
98
- bandwidth: number,
99
- date: Date,
100
- failures: number,
101
- refClics: number,
102
- refCommission: number,
103
- refSignups: number,
104
- success: number,
105
- user: string
106
- }
107
- export type Withdraw = {
108
- address: string,
109
- amount: number,
110
- btcPrice: number,
111
- date: Date,
112
- fees: number,
113
- id: number,
114
- sent: number,
115
- transactionId?: string,
116
- user: string
117
- }
@@ -1,66 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
-
7
- // Core
8
- import app, { $ } from '@server/app';
9
- const route = $.router;
10
- import { NotFound, InputError } from '@common/errors';
11
-
12
- // App
13
-
14
- /*----------------------------------
15
- - ROUTES
16
- ----------------------------------*/
17
-
18
- route.get('/serverTime', { }, async ({ response, user }) => {
19
-
20
- return new Date().toString();
21
-
22
- });
23
-
24
- // If already connected, redirect to the wallet
25
- route.get('/', { priority: 2 }, async ({ response, user }) => {
26
-
27
- if (user)
28
- return response.redirect('/app');
29
-
30
- });
31
-
32
- route.post('/login', { }, async ({ schema, response, auth }) => {
33
-
34
- const { username } = await schema.validate({
35
- username: schema.string()
36
- });
37
-
38
- auth.login(username);
39
-
40
- return true;
41
-
42
- });
43
-
44
-
45
- /*----------------------------------
46
- - SOCKETS
47
- ----------------------------------*/
48
- // Main socket entry point: balance, devices, ...
49
- const connectedUsers = new Set<string>();
50
- $.socket.open('/user')
51
- .onConnect(async (client) => {
52
-
53
- if (client.username === undefined) return;
54
-
55
- console.log("User connected to socket:", client.username);
56
- connectedUsers.add(client.username);
57
-
58
- })
59
- .onDisconnect(async (client) => {
60
-
61
- if (client.username === undefined) return;
62
-
63
- console.log("User disconnected to socket:", client.username);
64
- connectedUsers.delete(client.username);
65
-
66
- })
@@ -1,80 +0,0 @@
1
- /*----------------------------------
2
- - DEPENDANCES
3
- ----------------------------------*/
4
-
5
- // Npm
6
-
7
- // core
8
- import '@server/services/socket';
9
- import app, { $ } from '@server/app';
10
-
11
- // App
12
- import UserAuthBase from '@server/services/auth/base';
13
-
14
- /*----------------------------------
15
- - TYPES
16
- ----------------------------------*/
17
-
18
- import type { User as UserBase } from '@/server/models';
19
-
20
- declare global {
21
- interface User extends UserBase {
22
-
23
- }
24
-
25
- interface Services {
26
- auth: UserAuthService
27
- }
28
- }
29
-
30
- /*----------------------------------
31
- - SERVICE
32
- ----------------------------------*/
33
- export default class UserAuthService extends UserAuthBase {
34
-
35
- /*----------------------------------
36
- - DATA
37
- ----------------------------------*/
38
-
39
- public async getData( where: string ): Promise<User> {
40
- return {
41
- name: 'DummyUser' + Date.now()
42
- }
43
- return await $.sql`
44
- SELECT * FROM User
45
- WHERE :${where}
46
- `.first<User>();
47
- }
48
-
49
- // Don't expose sensitive data
50
- public SsrMask = `
51
- name
52
- emailHash
53
-
54
- level
55
- exp
56
- expGoal
57
- bonus
58
-
59
- balance
60
- balanceGoal
61
- boosterEnd
62
-
63
- activity
64
-
65
- donationPc
66
- `
67
-
68
- /*----------------------------------
69
- - HOOKS
70
- ----------------------------------*/
71
- public async beforeSignup (user: User) {
72
-
73
- }
74
-
75
- public async afterSignup (user: User) {
76
- return {
77
- redirect: '/onboard'
78
- }
79
- }
80
- }