├── .DS_Store
├── .gitignore
├── backend
├── package.json
├── server.ts
└── yarn.lock
├── frontend
├── .DS_Store
├── .eslintignore
├── .eslintrc.cjs
├── .prettierignore
├── README.md
├── adaptors
│ └── express
│ │ └── vite.config.ts
├── package-lock.json
├── package.json
├── postcss.config.js
├── public
│ ├── favicon.svg
│ ├── img
│ │ └── icon.png
│ ├── manifest.json
│ └── robots.txt
├── server
│ ├── @qwik-city-not-found-paths.js
│ ├── @qwik-city-plan.mjs
│ ├── @qwik-city-static-paths.js
│ ├── assets
│ │ └── root-7ec1d247.mjs
│ ├── entry.express.js
│ ├── entry.express.mjs
│ ├── entry.ssr.js
│ ├── entry.ssr.mjs
│ └── package.json
├── src
│ ├── .DS_Store
│ ├── components
│ │ ├── router-head
│ │ │ └── router-head.tsx
│ │ ├── site
│ │ │ ├── footer
│ │ │ │ └── footer.tsx
│ │ │ ├── hero
│ │ │ │ └── hero.tsx
│ │ │ ├── logo
│ │ │ │ ├── logo.css
│ │ │ │ └── logo.tsx
│ │ │ └── navigation
│ │ │ │ └── navigation.tsx
│ │ ├── svgs
│ │ │ └── grid.tsx
│ │ └── ui
│ │ │ ├── button-action.tsx
│ │ │ ├── button-std.tsx
│ │ │ └── message.tsx
│ ├── entry.dev.tsx
│ ├── entry.express.tsx
│ ├── entry.preview.tsx
│ ├── entry.ssr.tsx
│ ├── global.css
│ ├── root.tsx
│ ├── routes
│ │ ├── .DS_Store
│ │ ├── about
│ │ │ └── index@site.tsx
│ │ ├── contact
│ │ │ └── index.tsx
│ │ ├── disclaimer
│ │ │ └── index.tsx
│ │ ├── index@site.tsx
│ │ ├── layout-site.tsx
│ │ ├── login
│ │ │ ├── .DS_Store
│ │ │ ├── index.tsx
│ │ │ └── staging
│ │ │ │ └── index.tsx
│ │ ├── members
│ │ │ └── dashboard
│ │ │ │ └── index.tsx
│ │ ├── privacy
│ │ │ └── index.tsx
│ │ ├── service-worker.ts
│ │ ├── services
│ │ │ └── index@site.tsx
│ │ ├── shop
│ │ │ └── index@site.tsx
│ │ ├── signup
│ │ │ └── index.tsx
│ │ └── terms
│ │ │ └── index.tsx
│ └── utils
│ │ ├── helpers.ts
│ │ └── supabase.ts
├── tailwind.config.js
├── tsconfig.json
└── vite.config.ts
└── proxy
├── Dockerfile
└── nginx.conf
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | /frontend/node_modules
2 | /backend/node_modules
3 | /frontend/dist
4 | *.env
--------------------------------------------------------------------------------
/backend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "backend",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "scripts": {
7 | "start": "ts-node server.ts"
8 | },
9 | "dependencies": {
10 | "@supabase/supabase-js": "^2.4.0",
11 | "@types/cookie-parser": "^1.4.3",
12 | "@types/cors": "^2.8.13",
13 | "axios": "^1.2.2",
14 | "body-parser": "^1.20.1",
15 | "cookie-parser": "^1.4.6",
16 | "cors": "^2.8.5",
17 | "dotenv": "^16.0.3",
18 | "express": "^4.18.2",
19 | "stripe": "^11.6.0",
20 | "ts-node": "^10.9.1",
21 | "typescript": "^4.9.4"
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/backend/server.ts:
--------------------------------------------------------------------------------
1 | import express, { Express } from "express";
2 | import type { Request, Response } from "express";
3 | import bodyParser from "body-parser";
4 | import cors from "cors";
5 | import cookieParser from "cookie-parser";
6 | import dotenv from "dotenv";
7 | dotenv.config();
8 |
9 | // Determine root domain
10 | let rootDomain =
11 | process.env.NODE_ENV == "development"
12 | ? process.env.ROOT_DOMAIN_DEV
13 | : process.env.ROOT_DOMAIN_PROD;
14 |
15 | const app: Express = express();
16 | const port = 3005;
17 | const route = "/api_v1";
18 |
19 | app.use(cookieParser());
20 | app.use(cors({ origin: rootDomain, credentials: true }));
21 | app.use(bodyParser.json());
22 |
23 | // Health
24 | app.get(route + "/health", async (req: Request, res: Response) => {
25 | return res.status(200).json({ message: "Healthy" });
26 | });
27 |
28 | // Logout
29 | app.get(route + "/logout", async (req: Request, res: Response) => {
30 | res.cookie("server-access-token", { expires: Date.now() });
31 | res.cookie("server-refresh-token", { expires: Date.now() });
32 | return res.status(200).json({ message: "Cookies expired" });
33 | });
34 |
35 | // Store Auth Cookies
36 | app.post(route + "/store-auth", async (req: Request, res: Response) => {
37 | // Guard: Ensure tokens
38 | if (!req?.body?.accessToken || !req?.body?.refreshToken) {
39 | return res.status(401).json({ message: "Missing token(s)" });
40 | }
41 |
42 | // Get tokens
43 | const accessToken = req.body.accessToken;
44 | const refreshToken = req.body.refreshToken;
45 |
46 | // Determine expiration
47 | const dateAccess = new Date();
48 | const dateRefresh = new Date();
49 | dateAccess.setHours(dateAccess.getHours() + 1);
50 | dateRefresh.setDate(dateRefresh.getDate() + 1);
51 |
52 | // Set Cookies - access token
53 | res.cookie("server-access-token", accessToken, {
54 | secure: process.env.NODE_ENV != "development",
55 | httpOnly: true,
56 | expires: dateAccess,
57 | sameSite: "lax",
58 | });
59 |
60 | // Set Cookies - refresh token
61 | res.cookie("server-refresh-token", refreshToken, {
62 | secure: process.env.NODE_ENV != "development",
63 | httpOnly: true,
64 | expires: dateRefresh,
65 | sameSite: "lax",
66 | });
67 |
68 | // Return response
69 | return res.status(200).json({ message: "Tokens stored" });
70 | });
71 |
72 | app.listen(port, () => {
73 | console.log("Backend server listening on port " + port);
74 | });
75 |
--------------------------------------------------------------------------------
/backend/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@cspotcode/source-map-support@^0.8.0":
6 | version "0.8.1"
7 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
9 | dependencies:
10 | "@jridgewell/trace-mapping" "0.3.9"
11 |
12 | "@jridgewell/resolve-uri@^3.0.3":
13 | version "3.1.0"
14 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78"
15 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==
16 |
17 | "@jridgewell/sourcemap-codec@^1.4.10":
18 | version "1.4.14"
19 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
20 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
21 |
22 | "@jridgewell/trace-mapping@0.3.9":
23 | version "0.3.9"
24 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
25 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
26 | dependencies:
27 | "@jridgewell/resolve-uri" "^3.0.3"
28 | "@jridgewell/sourcemap-codec" "^1.4.10"
29 |
30 | "@supabase/functions-js@^2.0.0":
31 | version "2.0.0"
32 | resolved "https://registry.yarnpkg.com/@supabase/functions-js/-/functions-js-2.0.0.tgz#4ba0c9e6dff031e17666bef6779c48eff290a8a0"
33 | integrity sha512-ozb7bds2yvf5k7NM2ZzUkxvsx4S4i2eRKFSJetdTADV91T65g4gCzEs9L3LUXSrghcGIkUaon03VPzOrFredqg==
34 | dependencies:
35 | cross-fetch "^3.1.5"
36 |
37 | "@supabase/gotrue-js@^2.6.1":
38 | version "2.6.2"
39 | resolved "https://registry.yarnpkg.com/@supabase/gotrue-js/-/gotrue-js-2.6.2.tgz#7c0822c84ec80e4f1c54ed65660a01a9fab18ff0"
40 | integrity sha512-ZUSbTe2SPPztOxFA4BjLncYVpAvTATgIdxQj8y1FDd43aqOh30bDzigIM0f1jMRMrGtcVFFOzRpp9TV7HUSitQ==
41 | dependencies:
42 | cross-fetch "^3.1.5"
43 |
44 | "@supabase/postgrest-js@^1.1.1":
45 | version "1.1.1"
46 | resolved "https://registry.yarnpkg.com/@supabase/postgrest-js/-/postgrest-js-1.1.1.tgz#2fa8d2bd14d443c82c5e20947f98d23b73f62ddc"
47 | integrity sha512-jhdBah1JIxkZUp+5QH5JS7Uq9teGwh0Bs3FzbhnVlH619FSUFquTpHuNDxLsJmqEe8r3Wcnw19Dz0t3wEpkfug==
48 | dependencies:
49 | cross-fetch "^3.1.5"
50 |
51 | "@supabase/realtime-js@^2.3.1":
52 | version "2.3.1"
53 | resolved "https://registry.yarnpkg.com/@supabase/realtime-js/-/realtime-js-2.3.1.tgz#b567441073e0b86c9be59bf8eccdc03df3e810fd"
54 | integrity sha512-AX4pzZozVPvHAWfPcKl0UWj19pqwogD9TnCEHq1x/6oQjVoqA3n6H+1Ea2of9MheSroajHguaQMen3xLEoWrug==
55 | dependencies:
56 | "@types/phoenix" "^1.5.4"
57 | websocket "^1.0.34"
58 |
59 | "@supabase/storage-js@^2.1.0":
60 | version "2.1.0"
61 | resolved "https://registry.yarnpkg.com/@supabase/storage-js/-/storage-js-2.1.0.tgz#b855558ff5c2eaa5633b89193c8ec61aff53d59b"
62 | integrity sha512-bRMLWCbkkx84WDAtHAAMN7FAWuayrGZtTHj/WMUK6PsAWuonovvEa5s34a5iux61qJSn+ls3tFkyQgqxunl5ww==
63 | dependencies:
64 | cross-fetch "^3.1.5"
65 |
66 | "@supabase/supabase-js@^2.4.0":
67 | version "2.4.0"
68 | resolved "https://registry.yarnpkg.com/@supabase/supabase-js/-/supabase-js-2.4.0.tgz#fa925c6bde521ceed0b6be668202db02425aaef9"
69 | integrity sha512-fouVDoTcxM4/xEsh2iaR0wr0liwER7Pth8pvmbqqm7JVDLd2Z3+ie+k9fesg0OAd8VR1plOi80gdjxYm/ZIYMA==
70 | dependencies:
71 | "@supabase/functions-js" "^2.0.0"
72 | "@supabase/gotrue-js" "^2.6.1"
73 | "@supabase/postgrest-js" "^1.1.1"
74 | "@supabase/realtime-js" "^2.3.1"
75 | "@supabase/storage-js" "^2.1.0"
76 | cross-fetch "^3.1.5"
77 |
78 | "@tsconfig/node10@^1.0.7":
79 | version "1.0.9"
80 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
81 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
82 |
83 | "@tsconfig/node12@^1.0.7":
84 | version "1.0.11"
85 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
86 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
87 |
88 | "@tsconfig/node14@^1.0.0":
89 | version "1.0.3"
90 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
91 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
92 |
93 | "@tsconfig/node16@^1.0.2":
94 | version "1.0.3"
95 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
96 | integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
97 |
98 | "@types/body-parser@*":
99 | version "1.19.2"
100 | resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0"
101 | integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==
102 | dependencies:
103 | "@types/connect" "*"
104 | "@types/node" "*"
105 |
106 | "@types/connect@*":
107 | version "3.4.35"
108 | resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1"
109 | integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==
110 | dependencies:
111 | "@types/node" "*"
112 |
113 | "@types/cookie-parser@^1.4.3":
114 | version "1.4.3"
115 | resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.3.tgz#3a01df117c5705cf89a84c876b50c5a1fd427a21"
116 | integrity sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==
117 | dependencies:
118 | "@types/express" "*"
119 |
120 | "@types/cors@^2.8.13":
121 | version "2.8.13"
122 | resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.13.tgz#b8ade22ba455a1b8cb3b5d3f35910fd204f84f94"
123 | integrity sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==
124 | dependencies:
125 | "@types/node" "*"
126 |
127 | "@types/express-serve-static-core@^4.17.31":
128 | version "4.17.32"
129 | resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.32.tgz#93dda387f5516af616d8d3f05f2c4c79d81e1b82"
130 | integrity sha512-aI5h/VOkxOF2Z1saPy0Zsxs5avets/iaiAJYznQFm5By/pamU31xWKL//epiF4OfUA2qTOc9PV6tCUjhO8wlZA==
131 | dependencies:
132 | "@types/node" "*"
133 | "@types/qs" "*"
134 | "@types/range-parser" "*"
135 |
136 | "@types/express@*":
137 | version "4.17.15"
138 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.15.tgz#9290e983ec8b054b65a5abccb610411953d417ff"
139 | integrity sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==
140 | dependencies:
141 | "@types/body-parser" "*"
142 | "@types/express-serve-static-core" "^4.17.31"
143 | "@types/qs" "*"
144 | "@types/serve-static" "*"
145 |
146 | "@types/mime@*":
147 | version "3.0.1"
148 | resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10"
149 | integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==
150 |
151 | "@types/node@*", "@types/node@>=8.1.0":
152 | version "18.11.18"
153 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.18.tgz#8dfb97f0da23c2293e554c5a50d61ef134d7697f"
154 | integrity sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==
155 |
156 | "@types/phoenix@^1.5.4":
157 | version "1.5.4"
158 | resolved "https://registry.yarnpkg.com/@types/phoenix/-/phoenix-1.5.4.tgz#c08a1da6d7b4e365f6a1fe1ff9aada55f5356d24"
159 | integrity sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==
160 |
161 | "@types/qs@*":
162 | version "6.9.7"
163 | resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb"
164 | integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==
165 |
166 | "@types/range-parser@*":
167 | version "1.2.4"
168 | resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc"
169 | integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==
170 |
171 | "@types/serve-static@*":
172 | version "1.15.0"
173 | resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.0.tgz#c7930ff61afb334e121a9da780aac0d9b8f34155"
174 | integrity sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==
175 | dependencies:
176 | "@types/mime" "*"
177 | "@types/node" "*"
178 |
179 | accepts@~1.3.8:
180 | version "1.3.8"
181 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e"
182 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
183 | dependencies:
184 | mime-types "~2.1.34"
185 | negotiator "0.6.3"
186 |
187 | acorn-walk@^8.1.1:
188 | version "8.2.0"
189 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
190 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
191 |
192 | acorn@^8.4.1:
193 | version "8.8.1"
194 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.1.tgz#0a3f9cbecc4ec3bea6f0a80b66ae8dd2da250b73"
195 | integrity sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==
196 |
197 | arg@^4.1.0:
198 | version "4.1.3"
199 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
200 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
201 |
202 | array-flatten@1.1.1:
203 | version "1.1.1"
204 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
205 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
206 |
207 | asynckit@^0.4.0:
208 | version "0.4.0"
209 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
210 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
211 |
212 | axios@^1.2.2:
213 | version "1.2.2"
214 | resolved "https://registry.yarnpkg.com/axios/-/axios-1.2.2.tgz#72681724c6e6a43a9fea860fc558127dbe32f9f1"
215 | integrity sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==
216 | dependencies:
217 | follow-redirects "^1.15.0"
218 | form-data "^4.0.0"
219 | proxy-from-env "^1.1.0"
220 |
221 | body-parser@1.20.1, body-parser@^1.20.1:
222 | version "1.20.1"
223 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668"
224 | integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==
225 | dependencies:
226 | bytes "3.1.2"
227 | content-type "~1.0.4"
228 | debug "2.6.9"
229 | depd "2.0.0"
230 | destroy "1.2.0"
231 | http-errors "2.0.0"
232 | iconv-lite "0.4.24"
233 | on-finished "2.4.1"
234 | qs "6.11.0"
235 | raw-body "2.5.1"
236 | type-is "~1.6.18"
237 | unpipe "1.0.0"
238 |
239 | bufferutil@^4.0.1:
240 | version "4.0.7"
241 | resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.7.tgz#60c0d19ba2c992dd8273d3f73772ffc894c153ad"
242 | integrity sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==
243 | dependencies:
244 | node-gyp-build "^4.3.0"
245 |
246 | bytes@3.1.2:
247 | version "3.1.2"
248 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
249 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
250 |
251 | call-bind@^1.0.0:
252 | version "1.0.2"
253 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
254 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
255 | dependencies:
256 | function-bind "^1.1.1"
257 | get-intrinsic "^1.0.2"
258 |
259 | combined-stream@^1.0.8:
260 | version "1.0.8"
261 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
262 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
263 | dependencies:
264 | delayed-stream "~1.0.0"
265 |
266 | content-disposition@0.5.4:
267 | version "0.5.4"
268 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe"
269 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
270 | dependencies:
271 | safe-buffer "5.2.1"
272 |
273 | content-type@~1.0.4:
274 | version "1.0.4"
275 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
276 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
277 |
278 | cookie-parser@^1.4.6:
279 | version "1.4.6"
280 | resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594"
281 | integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==
282 | dependencies:
283 | cookie "0.4.1"
284 | cookie-signature "1.0.6"
285 |
286 | cookie-signature@1.0.6:
287 | version "1.0.6"
288 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c"
289 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==
290 |
291 | cookie@0.4.1:
292 | version "0.4.1"
293 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
294 | integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
295 |
296 | cookie@0.5.0:
297 | version "0.5.0"
298 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b"
299 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==
300 |
301 | cors@^2.8.5:
302 | version "2.8.5"
303 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
304 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==
305 | dependencies:
306 | object-assign "^4"
307 | vary "^1"
308 |
309 | create-require@^1.1.0:
310 | version "1.1.1"
311 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
312 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
313 |
314 | cross-fetch@^3.1.5:
315 | version "3.1.5"
316 | resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
317 | integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
318 | dependencies:
319 | node-fetch "2.6.7"
320 |
321 | d@1, d@^1.0.1:
322 | version "1.0.1"
323 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a"
324 | integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==
325 | dependencies:
326 | es5-ext "^0.10.50"
327 | type "^1.0.1"
328 |
329 | debug@2.6.9, debug@^2.2.0:
330 | version "2.6.9"
331 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
332 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
333 | dependencies:
334 | ms "2.0.0"
335 |
336 | delayed-stream@~1.0.0:
337 | version "1.0.0"
338 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
339 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
340 |
341 | depd@2.0.0:
342 | version "2.0.0"
343 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
344 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
345 |
346 | destroy@1.2.0:
347 | version "1.2.0"
348 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015"
349 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
350 |
351 | diff@^4.0.1:
352 | version "4.0.2"
353 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
354 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
355 |
356 | dotenv@^16.0.3:
357 | version "16.0.3"
358 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
359 | integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
360 |
361 | ee-first@1.1.1:
362 | version "1.1.1"
363 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
364 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==
365 |
366 | encodeurl@~1.0.2:
367 | version "1.0.2"
368 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
369 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==
370 |
371 | es5-ext@^0.10.35, es5-ext@^0.10.50:
372 | version "0.10.62"
373 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.62.tgz#5e6adc19a6da524bf3d1e02bbc8960e5eb49a9a5"
374 | integrity sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==
375 | dependencies:
376 | es6-iterator "^2.0.3"
377 | es6-symbol "^3.1.3"
378 | next-tick "^1.1.0"
379 |
380 | es6-iterator@^2.0.3:
381 | version "2.0.3"
382 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7"
383 | integrity sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==
384 | dependencies:
385 | d "1"
386 | es5-ext "^0.10.35"
387 | es6-symbol "^3.1.1"
388 |
389 | es6-symbol@^3.1.1, es6-symbol@^3.1.3:
390 | version "3.1.3"
391 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
392 | integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
393 | dependencies:
394 | d "^1.0.1"
395 | ext "^1.1.2"
396 |
397 | escape-html@~1.0.3:
398 | version "1.0.3"
399 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
400 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==
401 |
402 | etag@~1.8.1:
403 | version "1.8.1"
404 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887"
405 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==
406 |
407 | express@^4.18.2:
408 | version "4.18.2"
409 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59"
410 | integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==
411 | dependencies:
412 | accepts "~1.3.8"
413 | array-flatten "1.1.1"
414 | body-parser "1.20.1"
415 | content-disposition "0.5.4"
416 | content-type "~1.0.4"
417 | cookie "0.5.0"
418 | cookie-signature "1.0.6"
419 | debug "2.6.9"
420 | depd "2.0.0"
421 | encodeurl "~1.0.2"
422 | escape-html "~1.0.3"
423 | etag "~1.8.1"
424 | finalhandler "1.2.0"
425 | fresh "0.5.2"
426 | http-errors "2.0.0"
427 | merge-descriptors "1.0.1"
428 | methods "~1.1.2"
429 | on-finished "2.4.1"
430 | parseurl "~1.3.3"
431 | path-to-regexp "0.1.7"
432 | proxy-addr "~2.0.7"
433 | qs "6.11.0"
434 | range-parser "~1.2.1"
435 | safe-buffer "5.2.1"
436 | send "0.18.0"
437 | serve-static "1.15.0"
438 | setprototypeof "1.2.0"
439 | statuses "2.0.1"
440 | type-is "~1.6.18"
441 | utils-merge "1.0.1"
442 | vary "~1.1.2"
443 |
444 | ext@^1.1.2:
445 | version "1.7.0"
446 | resolved "https://registry.yarnpkg.com/ext/-/ext-1.7.0.tgz#0ea4383c0103d60e70be99e9a7f11027a33c4f5f"
447 | integrity sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==
448 | dependencies:
449 | type "^2.7.2"
450 |
451 | finalhandler@1.2.0:
452 | version "1.2.0"
453 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32"
454 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
455 | dependencies:
456 | debug "2.6.9"
457 | encodeurl "~1.0.2"
458 | escape-html "~1.0.3"
459 | on-finished "2.4.1"
460 | parseurl "~1.3.3"
461 | statuses "2.0.1"
462 | unpipe "~1.0.0"
463 |
464 | follow-redirects@^1.15.0:
465 | version "1.15.2"
466 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
467 | integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
468 |
469 | form-data@^4.0.0:
470 | version "4.0.0"
471 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
472 | integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
473 | dependencies:
474 | asynckit "^0.4.0"
475 | combined-stream "^1.0.8"
476 | mime-types "^2.1.12"
477 |
478 | forwarded@0.2.0:
479 | version "0.2.0"
480 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811"
481 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
482 |
483 | fresh@0.5.2:
484 | version "0.5.2"
485 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
486 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==
487 |
488 | function-bind@^1.1.1:
489 | version "1.1.1"
490 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
491 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
492 |
493 | get-intrinsic@^1.0.2:
494 | version "1.1.3"
495 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385"
496 | integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==
497 | dependencies:
498 | function-bind "^1.1.1"
499 | has "^1.0.3"
500 | has-symbols "^1.0.3"
501 |
502 | has-symbols@^1.0.3:
503 | version "1.0.3"
504 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
505 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
506 |
507 | has@^1.0.3:
508 | version "1.0.3"
509 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
510 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
511 | dependencies:
512 | function-bind "^1.1.1"
513 |
514 | http-errors@2.0.0:
515 | version "2.0.0"
516 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3"
517 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
518 | dependencies:
519 | depd "2.0.0"
520 | inherits "2.0.4"
521 | setprototypeof "1.2.0"
522 | statuses "2.0.1"
523 | toidentifier "1.0.1"
524 |
525 | iconv-lite@0.4.24:
526 | version "0.4.24"
527 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
528 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
529 | dependencies:
530 | safer-buffer ">= 2.1.2 < 3"
531 |
532 | inherits@2.0.4:
533 | version "2.0.4"
534 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
535 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
536 |
537 | ipaddr.js@1.9.1:
538 | version "1.9.1"
539 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
540 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
541 |
542 | is-typedarray@^1.0.0:
543 | version "1.0.0"
544 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
545 | integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
546 |
547 | make-error@^1.1.1:
548 | version "1.3.6"
549 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
550 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
551 |
552 | media-typer@0.3.0:
553 | version "0.3.0"
554 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
555 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==
556 |
557 | merge-descriptors@1.0.1:
558 | version "1.0.1"
559 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61"
560 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==
561 |
562 | methods@~1.1.2:
563 | version "1.1.2"
564 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee"
565 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==
566 |
567 | mime-db@1.52.0:
568 | version "1.52.0"
569 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
570 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
571 |
572 | mime-types@^2.1.12, mime-types@~2.1.24, mime-types@~2.1.34:
573 | version "2.1.35"
574 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
575 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
576 | dependencies:
577 | mime-db "1.52.0"
578 |
579 | mime@1.6.0:
580 | version "1.6.0"
581 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
582 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
583 |
584 | ms@2.0.0:
585 | version "2.0.0"
586 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
587 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
588 |
589 | ms@2.1.3:
590 | version "2.1.3"
591 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
592 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
593 |
594 | negotiator@0.6.3:
595 | version "0.6.3"
596 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd"
597 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
598 |
599 | next-tick@^1.1.0:
600 | version "1.1.0"
601 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.1.0.tgz#1836ee30ad56d67ef281b22bd199f709449b35eb"
602 | integrity sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==
603 |
604 | node-fetch@2.6.7:
605 | version "2.6.7"
606 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
607 | integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
608 | dependencies:
609 | whatwg-url "^5.0.0"
610 |
611 | node-gyp-build@^4.3.0:
612 | version "4.6.0"
613 | resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055"
614 | integrity sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==
615 |
616 | object-assign@^4:
617 | version "4.1.1"
618 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
619 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
620 |
621 | object-inspect@^1.9.0:
622 | version "1.12.3"
623 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
624 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
625 |
626 | on-finished@2.4.1:
627 | version "2.4.1"
628 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f"
629 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
630 | dependencies:
631 | ee-first "1.1.1"
632 |
633 | parseurl@~1.3.3:
634 | version "1.3.3"
635 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4"
636 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
637 |
638 | path-to-regexp@0.1.7:
639 | version "0.1.7"
640 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
641 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
642 |
643 | proxy-addr@~2.0.7:
644 | version "2.0.7"
645 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
646 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
647 | dependencies:
648 | forwarded "0.2.0"
649 | ipaddr.js "1.9.1"
650 |
651 | proxy-from-env@^1.1.0:
652 | version "1.1.0"
653 | resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
654 | integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
655 |
656 | qs@6.11.0, qs@^6.11.0:
657 | version "6.11.0"
658 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a"
659 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
660 | dependencies:
661 | side-channel "^1.0.4"
662 |
663 | range-parser@~1.2.1:
664 | version "1.2.1"
665 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
666 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
667 |
668 | raw-body@2.5.1:
669 | version "2.5.1"
670 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857"
671 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==
672 | dependencies:
673 | bytes "3.1.2"
674 | http-errors "2.0.0"
675 | iconv-lite "0.4.24"
676 | unpipe "1.0.0"
677 |
678 | safe-buffer@5.2.1:
679 | version "5.2.1"
680 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
681 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
682 |
683 | "safer-buffer@>= 2.1.2 < 3":
684 | version "2.1.2"
685 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
686 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
687 |
688 | send@0.18.0:
689 | version "0.18.0"
690 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be"
691 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
692 | dependencies:
693 | debug "2.6.9"
694 | depd "2.0.0"
695 | destroy "1.2.0"
696 | encodeurl "~1.0.2"
697 | escape-html "~1.0.3"
698 | etag "~1.8.1"
699 | fresh "0.5.2"
700 | http-errors "2.0.0"
701 | mime "1.6.0"
702 | ms "2.1.3"
703 | on-finished "2.4.1"
704 | range-parser "~1.2.1"
705 | statuses "2.0.1"
706 |
707 | serve-static@1.15.0:
708 | version "1.15.0"
709 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
710 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
711 | dependencies:
712 | encodeurl "~1.0.2"
713 | escape-html "~1.0.3"
714 | parseurl "~1.3.3"
715 | send "0.18.0"
716 |
717 | setprototypeof@1.2.0:
718 | version "1.2.0"
719 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424"
720 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
721 |
722 | side-channel@^1.0.4:
723 | version "1.0.4"
724 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
725 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
726 | dependencies:
727 | call-bind "^1.0.0"
728 | get-intrinsic "^1.0.2"
729 | object-inspect "^1.9.0"
730 |
731 | statuses@2.0.1:
732 | version "2.0.1"
733 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63"
734 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
735 |
736 | stripe@^11.6.0:
737 | version "11.6.0"
738 | resolved "https://registry.yarnpkg.com/stripe/-/stripe-11.6.0.tgz#4f1f79e5c43695f161b9073b0aab78a2c1bf7e9d"
739 | integrity sha512-ht8S1l8CJJE3jtv2NM1mEQzZBkITYvb9uDpSeXYeNz9iJkFFgDU169htwOW00OdIESvFaIsGgWQatAE5dfOERQ==
740 | dependencies:
741 | "@types/node" ">=8.1.0"
742 | qs "^6.11.0"
743 |
744 | toidentifier@1.0.1:
745 | version "1.0.1"
746 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35"
747 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
748 |
749 | tr46@~0.0.3:
750 | version "0.0.3"
751 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
752 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
753 |
754 | ts-node@^10.9.1:
755 | version "10.9.1"
756 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
757 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
758 | dependencies:
759 | "@cspotcode/source-map-support" "^0.8.0"
760 | "@tsconfig/node10" "^1.0.7"
761 | "@tsconfig/node12" "^1.0.7"
762 | "@tsconfig/node14" "^1.0.0"
763 | "@tsconfig/node16" "^1.0.2"
764 | acorn "^8.4.1"
765 | acorn-walk "^8.1.1"
766 | arg "^4.1.0"
767 | create-require "^1.1.0"
768 | diff "^4.0.1"
769 | make-error "^1.1.1"
770 | v8-compile-cache-lib "^3.0.1"
771 | yn "3.1.1"
772 |
773 | type-is@~1.6.18:
774 | version "1.6.18"
775 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
776 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
777 | dependencies:
778 | media-typer "0.3.0"
779 | mime-types "~2.1.24"
780 |
781 | type@^1.0.1:
782 | version "1.2.0"
783 | resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
784 | integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
785 |
786 | type@^2.7.2:
787 | version "2.7.2"
788 | resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0"
789 | integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==
790 |
791 | typedarray-to-buffer@^3.1.5:
792 | version "3.1.5"
793 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080"
794 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==
795 | dependencies:
796 | is-typedarray "^1.0.0"
797 |
798 | typescript@^4.9.4:
799 | version "4.9.4"
800 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.4.tgz#a2a3d2756c079abda241d75f149df9d561091e78"
801 | integrity sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==
802 |
803 | unpipe@1.0.0, unpipe@~1.0.0:
804 | version "1.0.0"
805 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
806 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
807 |
808 | utf-8-validate@^5.0.2:
809 | version "5.0.10"
810 | resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.10.tgz#d7d10ea39318171ca982718b6b96a8d2442571a2"
811 | integrity sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==
812 | dependencies:
813 | node-gyp-build "^4.3.0"
814 |
815 | utils-merge@1.0.1:
816 | version "1.0.1"
817 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
818 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==
819 |
820 | v8-compile-cache-lib@^3.0.1:
821 | version "3.0.1"
822 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
823 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
824 |
825 | vary@^1, vary@~1.1.2:
826 | version "1.1.2"
827 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
828 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
829 |
830 | webidl-conversions@^3.0.0:
831 | version "3.0.1"
832 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
833 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
834 |
835 | websocket@^1.0.34:
836 | version "1.0.34"
837 | resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111"
838 | integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==
839 | dependencies:
840 | bufferutil "^4.0.1"
841 | debug "^2.2.0"
842 | es5-ext "^0.10.50"
843 | typedarray-to-buffer "^3.1.5"
844 | utf-8-validate "^5.0.2"
845 | yaeti "^0.0.6"
846 |
847 | whatwg-url@^5.0.0:
848 | version "5.0.0"
849 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
850 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
851 | dependencies:
852 | tr46 "~0.0.3"
853 | webidl-conversions "^3.0.0"
854 |
855 | yaeti@^0.0.6:
856 | version "0.0.6"
857 | resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577"
858 | integrity sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==
859 |
860 | yn@3.1.1:
861 | version "3.1.1"
862 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
863 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
864 |
--------------------------------------------------------------------------------
/frontend/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/.DS_Store
--------------------------------------------------------------------------------
/frontend/.eslintignore:
--------------------------------------------------------------------------------
1 | **/*.log
2 | **/.DS_Store
3 | *.
4 | .vscode/settings.json
5 | .history
6 | .yarn
7 | bazel-*
8 | bazel-bin
9 | bazel-out
10 | bazel-qwik
11 | bazel-testlogs
12 | dist
13 | dist-dev
14 | lib
15 | lib-types
16 | etc
17 | external
18 | node_modules
19 | temp
20 | tsc-out
21 | tsdoc-metadata.json
22 | target
23 | output
24 | rollup.config.js
25 | build
26 | .cache
27 | .vscode
28 | .rollup.cache
29 | dist
30 | tsconfig.tsbuildinfo
31 | vite.config.ts
32 | *.spec.tsx
33 | *.spec.ts
34 |
--------------------------------------------------------------------------------
/frontend/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | root: true,
3 | env: {
4 | browser: true,
5 | es2021: true,
6 | node: true,
7 | },
8 | extends: [
9 | 'eslint:recommended',
10 | 'plugin:@typescript-eslint/recommended',
11 | 'plugin:qwik/recommended',
12 | ],
13 | parser: '@typescript-eslint/parser',
14 | parserOptions: {
15 | tsconfigRootDir: __dirname,
16 | project: ['./tsconfig.json'],
17 | ecmaVersion: 2021,
18 | sourceType: 'module',
19 | ecmaFeatures: {
20 | jsx: true,
21 | },
22 | },
23 | plugins: ['@typescript-eslint'],
24 | rules: {
25 | '@typescript-eslint/no-explicit-any': 'off',
26 | '@typescript-eslint/explicit-module-boundary-types': 'off',
27 | '@typescript-eslint/no-inferrable-types': 'off',
28 | '@typescript-eslint/no-non-null-assertion': 'off',
29 | '@typescript-eslint/no-empty-interface': 'off',
30 | '@typescript-eslint/no-namespace': 'off',
31 | '@typescript-eslint/no-empty-function': 'off',
32 | '@typescript-eslint/no-this-alias': 'off',
33 | '@typescript-eslint/ban-types': 'off',
34 | '@typescript-eslint/ban-ts-comment': 'off',
35 | 'prefer-spread': 'off',
36 | 'no-case-declarations': 'off',
37 | 'no-console': 'off',
38 | '@typescript-eslint/no-unused-vars': ['error'],
39 | },
40 | };
41 |
--------------------------------------------------------------------------------
/frontend/.prettierignore:
--------------------------------------------------------------------------------
1 | # Files Prettier should not format
2 | **/*.log
3 | **/.DS_Store
4 | *.
5 | dist
6 | node_modules
7 |
--------------------------------------------------------------------------------
/frontend/README.md:
--------------------------------------------------------------------------------
1 | # Qwik Intro Useful Links
2 |
3 | - [YouTube Series](https://youtu.be/zLHYDY9dAbs)
4 | - [Code Raiders](https://coderaiders.com)
5 |
6 | ---
7 |
8 | ## Step 1
9 |
10 | Add your SUPABASE credentials to frontend/src/utils/supabase.ts
11 |
12 | ## Step 2
13 |
14 | ```shell
15 | cd frontend
16 | ```
17 |
18 | ## Step 3
19 |
20 | ```shell
21 | npm ci
22 | ```
23 |
24 | ## Step 4
25 |
26 | ```shell
27 | npm run build
28 | ```
29 |
30 | ## Step 5
31 |
32 | ```shell
33 | npm run dev
34 | ```
35 |
36 | ## Express Server
37 |
38 | This app has a minimal [Express server](https://expressjs.com/) implementation. After running a full build, you can preview the build using the command:
39 |
40 | ```
41 | npm run serve
42 | ```
43 |
44 | Then visit [http://localhost:8080/](http://localhost:8080/)
45 |
46 | ## Express Server
47 |
48 | This app has a minimal [Express server](https://expressjs.com/) implementation. After running a full build, you can preview the build using the command:
49 |
50 | ```
51 | npm run serve
52 | ```
53 |
54 | Then visit [http://localhost:8080/](http://localhost:8080/)
55 |
--------------------------------------------------------------------------------
/frontend/adaptors/express/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { expressAdaptor } from '@builder.io/qwik-city/adaptors/express/vite';
2 | import { extendConfig } from '@builder.io/qwik-city/vite';
3 | import baseConfig from '../../vite.config';
4 |
5 | export default extendConfig(baseConfig, () => {
6 | return {
7 | build: {
8 | ssr: true,
9 | rollupOptions: {
10 | input: ['src/entry.express.tsx', '@qwik-city-plan'],
11 | },
12 | },
13 | plugins: [
14 | expressAdaptor({
15 | staticGenerate: true,
16 | }),
17 | ],
18 | };
19 | });
20 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-qwik-basic-starter",
3 | "description": "App with Routing built-in (recommended)",
4 | "engines": {
5 | "node": ">=15.0.0"
6 | },
7 | "private": true,
8 | "scripts": {
9 | "build": "qwik build",
10 | "build.client": "vite build",
11 | "build.preview": "vite build --ssr src/entry.preview.tsx",
12 | "build.server": "vite build -c adaptors/express/vite.config.ts",
13 | "build.types": "tsc --incremental --noEmit",
14 | "deploy": "node server/entry.express",
15 | "dev": "vite --mode ssr",
16 | "dev.debug": "node --inspect-brk ./node_modules/vite/bin/vite.js --mode ssr --force",
17 | "fmt": "prettier --write .",
18 | "fmt.check": "prettier --check .",
19 | "lint": "eslint \"src/**/*.ts*\"",
20 | "preview": "qwik build preview && vite preview --open",
21 | "start": "vite --open --mode ssr",
22 | "qwik": "qwik"
23 | },
24 | "devDependencies": {
25 | "@builder.io/qwik": "0.16.1",
26 | "@builder.io/qwik-city": "0.0.128",
27 | "@types/compression": "^1.7.2",
28 | "@types/eslint": "8.4.10",
29 | "@types/express": "4.17.13",
30 | "@types/node": "^18.11.16",
31 | "@types/node-fetch": "latest",
32 | "@typescript-eslint/eslint-plugin": "5.46.1",
33 | "@typescript-eslint/parser": "5.46.1",
34 | "autoprefixer": "10.4.11",
35 | "compression": "^1.7.4",
36 | "eslint": "8.30.0",
37 | "eslint-plugin-qwik": "0.16.1",
38 | "express": "4.17.3",
39 | "node-fetch": "3.3.0",
40 | "postcss": "^8.4.16",
41 | "prettier": "2.8.1",
42 | "tailwindcss": "^3.1.8",
43 | "typescript": "4.9.4",
44 | "undici": "5.14.0",
45 | "vite": "4.0.1",
46 | "vite-tsconfig-paths": "3.5.0"
47 | },
48 | "dependencies": {
49 | "@supabase/supabase-js": "^2.2.2",
50 | "axios": "^1.2.3",
51 | "dotenv": "^16.0.3"
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/frontend/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/frontend/public/favicon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/frontend/public/img/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/public/img/icon.png
--------------------------------------------------------------------------------
/frontend/public/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://json.schemastore.org/web-manifest-combined.json",
3 | "name": "qwik-project-name",
4 | "short_name": "Welcome to Qwik",
5 | "start_url": ".",
6 | "display": "standalone",
7 | "background_color": "#fff",
8 | "description": "A Qwik project app."
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/public/robots.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/public/robots.txt
--------------------------------------------------------------------------------
/frontend/server/@qwik-city-not-found-paths.js:
--------------------------------------------------------------------------------
1 | const notFounds = [
2 | [
3 | "/",
4 | "\n\n
\n \n \n 404 Resource Not Found\n \n \n\n\n 404 Resource Not Found
\n\n"
5 | ]
6 | ];
7 | function getNotFound(p) {
8 | for (const r of notFounds) {
9 | if (p.startsWith(r[0])) {
10 | return r[1];
11 | }
12 | }
13 | return "Resource Not Found";
14 | }
15 | export { getNotFound };
--------------------------------------------------------------------------------
/frontend/server/@qwik-city-plan.mjs:
--------------------------------------------------------------------------------
1 | import{componentQrl as a,inlinedQrl as n,useStylesScopedQrl as E,_wrapSignal as b,useContext as $,useSignal as v,useLexicalScope as O,useClientEffectQrl as C,_noopQrl as P,_IMMUTABLE as t,Slot as D,useStore as I}from"@builder.io/qwik";import{jsxs as s,jsx as e,Fragment as x}from"@builder.io/qwik/jsx-runtime";import{U as L,u as T,L as l,a as B}from"./assets/root-7ec1d247.mjs";import{createClient as A}from"@supabase/supabase-js";import G from"dotenv";const U=`.logo-title{font-weight:350;font-stretch:125%}.logo-subtitle{font-weight:400;font-stretch:95%}
2 | `,H=a(n(()=>(E(n(U,"s_Nha0bvvmMwE")),s("div",{class:"flex justify-start items-center",children:[e("div",{class:"w-12 h-12 mr-2",children:e("img",{src:"/img/icon.png",alt:"Code Raiders Logo"})}),s("div",{children:[e("div",{class:"text-lg logo-title text-gray-800",children:"Code Raiders"}),e("div",{class:"-mt-2 text-[10pt] logo-subtitle text-gray-500 italic",children:"Shut up and code"})]})]})),"s_Pr2nqhxZcRI")),w=a(n(r=>e("button",{onClick$:r.handleFunction,class:r.classText+" transition-all duration-300 px-4 py-2 rounded-sm ",children:e("div",{children:b(r,"title")})}),"s_htFOus9HPNo")),N="https://somgwzxrlvjonciazklm.supabase.co",Q="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNvbWd3enhybHZqb25jaWF6a2xtIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NzMxNzQzMDMsImV4cCI6MTk4ODc1MDMwM30.FV5Gh4bG09RtPImVBdZgcVD3MtDC-taSoo4hOyVTePo",y=A(N,Q),V=a(n(()=>{const r=$(L),i=v(!1),o=T(),h=n(async()=>{const[u]=O();await y.auth.signOut(),u.path="/"},"s_4lI93x0px88",[o]);return C(P("s_3LSBotgjcd4",[i,r])),e("nav",{class:"bg-white py-4 px-7 sticky",children:s("div",{class:"flex justify-between items-center",children:[e(l,{href:"/",children:e(H,{},"uO_0"),[t]:{href:t}},"uO_1"),s("div",{class:"flex items-center text-sm",children:[s("ul",{class:"flex space-x-10",children:[e("li",{children:e(l,{href:"/about",children:"About",[t]:{href:t}},"uO_2")}),e("li",{children:e(l,{href:"/shop",children:"Shop",[t]:{href:t}},"uO_3")}),e("li",{children:e(l,{href:"/services",children:"Services",[t]:{href:t}},"uO_4")})]}),e("div",{class:"border-r border-gray-300 h-10 ml-10"}),i.value&&s(x,{children:[e("button",{onClick$:h,class:"ml-10",children:"Logout"}),e(l,{href:"/members/dashboard",children:e(w,{title:"Dashboard",classText:"mr-5 ml-10 bg-sky-500 border border-sky-500 hover:bg-sky-400 text-white",[t]:{title:t,classText:t}},"uO_5"),[t]:{href:t}},"uO_6")]},"uO_7"),!i.value&&s(x,{children:[e(l,{href:"/login",children:e(w,{title:"Log In",classText:"mr-2 ml-10 border border-sky-500 text-sky-500 hover:text-sky-400 hover:border-sky-400",noBackground:!0,[t]:{title:t,classText:t,noBackground:t}},"uO_8"),[t]:{href:t}},"uO_9"),e(l,{href:"/signup",children:e(w,{title:"Sign Up",classText:"mr-5 ml-5 bg-green-500 border border-green-500 hover:bg-green-400 text-white",[t]:{title:t,classText:t}},"uO_10"),[t]:{href:t}},"uO_11")]},"uO_12")],[t]:{children:!1}})]})})},"s_D6gnpqBvIxc")),Y=[{label:"About",link:"/about"},{label:"Shop",link:"/shop"},{label:"Services",link:"/services"},{label:"Privacy",link:"/privacy"},{label:"Terms",link:"/terms"},{label:"Disclaimer",link:"/disclaimer"},{label:"Contact",link:"/contact"}],J=a(n(()=>e("footer",{class:"bg-gray-900",children:s("div",{class:"mx-auto max-w-7xl overflow-hidden py-12 px-4 sm:px-6 lg:px-8",children:[e("nav",{class:"-mx-5 -my-2 flex flex-wrap justify-center","aria-label":"Footer",children:Y.map(r=>e("div",{class:"px-5 py-2",children:e(l,{get href(){return r.link},class:"text-base text-gray-500 hover:text-sky-500",children:b(r,"label"),[t]:{href:b(r,"link"),class:t}},"py_0")},r.label))}),e("p",{class:"mt-8 text-center text-base text-gray-400",children:"© 2023 CodeRaiders.com - XCHAIN ANALYTICS LTD"})]})}),"s_GG4uQ3LbNIU")),F=a(n(()=>e(x,{children:s("main",{children:[e(V,{},"p0_0"),e("section",{children:e(D,{},"p0_1")}),e(J,{},"p0_2")]})},"p0_3"),"s_AFVtdLQxhqM")),Z=Object.freeze(Object.defineProperty({__proto__:null,default:F},Symbol.toStringTag,{value:"Module"})),W=a(n(()=>e("section",{class:"py-24 w-full bg-gradient-to-br from-gray-900 to-sky-900 shadow-xl",children:s("div",{class:"flex flex-col h-full items-center justify-center w-full",children:[e("div",{class:"text-white text-4xl md:text-5xl lg:text-7xl tracking-tighter font-extrabold font-sans",children:"Good People Borrow"}),e("div",{class:"relative flex justify-center text-white text-5xl md:text-6xl lg:text-8xl tracking-tight font-extrabold font-sans",children:e("div",{class:"text-green-500 ",children:"Great People Steal"})}),e("div",{class:"text-slate-300 mt-24 italic text-xl font-light",children:"~ Picasso ~"}),e("div",{class:"text-white mt-24 itali text-xl italic",children:"Get the Developer Resources Your Need"}),e(l,{href:"/signup",children:e(w,{title:"Become a Code Raider",classText:"bg-sky-500 hover:bg-sky-400 mt-5 shadow-xl hover:shadow-none",[t]:{title:t,classText:t}},"hU_0"),[t]:{href:t}},"hU_1")]})}),"s_iM00hJibi0U")),K=a(n(()=>s(x,{children:[e(W,{},"Ro_0"),e("div",{class:"flex justify-center py-12 w-full",children:e("a",{href:"/members/dashboard",children:"DASHBOARD"})})]},"Ro_1"),"s_4uBaEu4a7Ac")),X={title:"Code Raiders",meta:[{name:"description",content:"Code, training and applications for making development exciting"}]},ee=Object.freeze(Object.defineProperty({__proto__:null,default:K,head:X},Symbol.toStringTag,{value:"Module"})),te=a(n(()=>{const r=$(L),i=v(!1),o=T();return C(P("s_j0ikt72I750",[i,o,r])),e(x,{children:s("div",{children:[i&&s(x,{children:[e("span",{children:"Redirecting to "}),e(l,{href:"/members/dashboard",children:e("button",{class:"text-sky-500 hover:text-sky-600",children:"Dashboard"}),[t]:{href:t}},"Cv_0")]},"Cv_1"),!i&&e(x,{children:"Please log in"},"Cv_2")],[t]:{children:!1}})},"Cv_3")},"s_DWH5H0sHpx8")),se={title:"Staging",meta:[{name:"description",content:"Authorization check for Code Raiders"}]},re=Object.freeze(Object.defineProperty({__proto__:null,default:te,head:se},Symbol.toStringTag,{value:"Module"})),z=r=>!!new RegExp(/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/).test(r),ie=async r=>{var u,c;G.config();const i={isSession:!1,user:{},role:""},o=process.env.SUPABASE_URL,h=process.env.SUPABASE_SECRET_KEY;if(o&&h){const d=A(o,h),m=(u=r.get("server-access-token"))==null?void 0:u.value,{data:g}=await d.auth.getUser(m);if((c=g==null?void 0:g.user)!=null&&c.id){i.isSession=!0,i.user=g.user;const{data:f}=await d.from("profiles").select("id, role").eq("id",g.user.id).limit(1);f&&(f!=null&&f[0].role)&&(i.role=f[0].role)}}return i},ne=async({response:r,cookie:i})=>{const o=await ie(i);if((o==null?void 0:o.role)!=="free")throw r.redirect("/login",300);return o},le=a(n(()=>{const r=B(),i=v(!1),o=T();return C(P("s_04qKAmMDQjI",[i,o,r])),e("main",{children:i.value&&s("div",{class:"text-gray-900",children:[e("div",{class:"text-2xl",children:"Welcome to the Dashboard Page"}),e(l,{href:"/",children:e("button",{class:"text-sm text-sky-500 hover:text-sky-400",children:"Home page"}),[t]:{href:t}},"pD_0")]}),[t]:{children:!1}})},"s_7w7YYyGS1d0")),ae={title:"Dashboard",meta:[{name:"description",content:"Members dashboard for Code Raiders"}]},oe=Object.freeze(Object.defineProperty({__proto__:null,onGet:ne,default:le,head:ae},Symbol.toStringTag,{value:"Module"})),ce=a(n(()=>e("h1",{class:"h-screen",children:"About Page"}),"s_ReBlX6NH9R0")),de={title:"About",meta:[{name:"description",content:"Learn all about the Code Raiders initialive"}]},ue=Object.freeze(Object.defineProperty({__proto__:null,default:ce,head:de},Symbol.toStringTag,{value:"Module"})),he=a(n(()=>e("div",{children:"Contact"}),"s_M0MhZOWBKK8")),me={title:"Contact us",meta:[{name:"description",content:"Contact admin team at Code Raiders"}]},ge=Object.freeze(Object.defineProperty({__proto__:null,default:he,head:me},Symbol.toStringTag,{value:"Module"})),fe=a(n(()=>e("div",{children:"Disclaimer"}),"s_1s5dhyML68g")),xe={title:"Disclaimer",meta:[{name:"description",content:"Disclaimer"}]},pe=Object.freeze(Object.defineProperty({__proto__:null,default:fe,head:xe},Symbol.toStringTag,{value:"Module"})),R=a(n(({message:r,classText:i})=>e(x,{children:r.message&&e("div",{class:i+" transition-all duration-500 text-sm border py-2 px-4 w-full fade-in "+(r.status==="error"&&" text-red-600 bg-red-50 border-red-600 ")+(r.status==="warning"&&" text-yellow-600 bg-yellow-50 border-yellow-600 ")+(r.status==="notice"&&" text-sky-600 bg-sky-50 border-sky-600 ")+(r.status==="success"&&" text-green-600 bg-green-50 border-green-600 "),children:b(r,"message")}),[t]:{children:!1}},"Js_0"),"s_qVqzm1QnNRM")),S="http://localhost:80/login/staging",be=a(n(()=>{const r=I({message:void 0,status:"error"}),i=v(!1),o=n(async()=>{const{data:u,error:c}=await y.auth.signInWithOAuth({provider:"github",options:{redirectTo:S}});console.log(u),console.log("Error: ",c)},"s_RZswcvlb56s"),h=n(async u=>{const[c,d]=O();d.message=void 0,d.status="error",c.value=!0;const m=u.target.email.value;if(!z(m)){d.message="You must have a valid email",c.value=!1;return}const{data:f,error:p}=await y.auth.signInWithOtp({email:m,options:{emailRedirectTo:S}});if(f&&!p){d.message="Success. Please check your email/spam folder",d.status="success",c.value=!1;return}else{d.message="There was a problem creating a user. "+(p==null?void 0:p.message),c.value=!1;return}},"s_eKGt4z6xr5M",[i,r]);return s("div",{class:"flex min-h-full flex-col justify-center py-12 sm:px-6 lg:px-8",children:[s("div",{class:"sm:mx-auto sm:w-full sm:max-w-md",children:[e(l,{href:"/",children:e("img",{class:"w-24 h-24 mx-auto",src:"/img/icon.png"}),[t]:{href:t}},"iS_0"),e("h2",{class:"mt-6 text-center text-3xl font-bold tracking-tight text-gray-900",children:"Log in"}),s("p",{class:"mt-2 text-center text-sm text-gray-600",children:["Or"," ",e(l,{href:"/signup",class:"font-medium text-sky-600 hover:text-sky-500",children:"create an account",[t]:{href:t,class:t}},"iS_1")]})]}),e("div",{class:"mt-8 sm:mx-auto sm:w-full sm:max-w-md",children:s("div",{class:"bg-white py-8 px-4 shadow sm:rounded-sm sm:px-10",children:[s("div",{class:"",children:[s("div",{class:"grid grid-cols-2 gap-3",children:[e("div",{children:s("a",{href:"#",class:"inline-flex w-full justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-500 shadow-sm hover:bg-gray-50",children:[e("span",{class:"sr-only",children:"Log in with Google"}),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",class:"h-5 w-5",viewBox:"0 0 16 16",children:[" ",e("path",{d:"M15.545 6.558a9.42 9.42 0 0 1 .139 1.626c0 2.434-.87 4.492-2.384 5.885h.002C11.978 15.292 10.158 16 8 16A8 8 0 1 1 8 0a7.689 7.689 0 0 1 5.352 2.082l-2.284 2.284A4.347 4.347 0 0 0 8 3.166c-2.087 0-3.86 1.408-4.492 3.304a4.792 4.792 0 0 0 0 3.063h.003c.635 1.893 2.405 3.301 4.492 3.301 1.078 0 2.004-.276 2.722-.764h-.003a3.702 3.702 0 0 0 1.599-2.431H8v-3.08h7.545z"})," "]})]})}),e("div",{children:s("button",{onClick$:o,class:"inline-flex w-full justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-500 shadow-sm hover:bg-gray-50",children:[e("span",{class:"sr-only",children:"Log in with GitHub"}),e("svg",{class:"h-5 w-5","aria-hidden":"true",fill:"currentColor",viewBox:"0 0 20 20",children:e("path",{fillRule:"evenodd",d:"M10 0C4.477 0 0 4.484 0 10.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0110 4.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0020 10.017C20 4.484 15.522 0 10 0z",clipRule:"evenodd"})})]})})]}),s("div",{class:"relative py-5",children:[e("div",{class:"absolute inset-0 flex items-center",children:e("div",{class:"w-full border-t border-gray-300"})}),e("div",{class:"relative flex justify-center text-sm",children:e("span",{class:"bg-white px-2 text-gray-500",children:"Or log in with email"})})]})]}),s("form",{"preventdefault:submit":!0,onSubmit$:h,class:"space-y-6",action:"#",method:"POST",children:[s("div",{children:[e("label",{class:"block text-sm font-medium text-gray-700",children:"Email address"}),e("div",{class:"mt-1",children:e("input",{id:"email",name:"email",type:"email",autoComplete:"email",required:!0,class:"block w-full appearance-none rounded-sm border border-gray-300 px-3 py-2 placeholder-gray-400 shadow-sm focus:border-sky-500 focus:outline-none focus:ring-sky-500 sm:text-sm"})})]}),e("div",{class:"flex items-center justify-between",children:e("div",{class:"text-sm",children:e(l,{href:"/contact",class:"font-medium text-sky-600 hover:text-sky-500",children:"Problems signing in?",[t]:{href:t,class:t}},"iS_2")})}),s("div",{children:[e("button",{type:"submit",class:"transition-all duration-300 flex w-full justify-center rounded-sm border border-transparent bg-sky-500 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-sky-600 focus:outline-none focus:ring-2 focus:ring-sky-500 disabled:bg-gray-500 disabled:hover:bg-gray-500 focus:ring-offset-2",children:"Log in"}),e("p",{class:"text-xs text-center text-gray-500 mt-1",children:"No password required. Authorize via email."})]})]}),e(R,{message:r,classText:"mt-3",[t]:{message:t,classText:t}},"iS_3")]})})]})},"s_2gZ5kKqe2wY")),ye=Object.freeze(Object.defineProperty({__proto__:null,REDIRECT_URL:S,default:be},Symbol.toStringTag,{value:"Module"})),ve=a(n(()=>e("div",{children:"Privacy"}),"s_mmJHJQmfzpQ")),_e={title:"Privacy Policy",meta:[{name:"description",content:"Privacy Policy"}]},we=Object.freeze(Object.defineProperty({__proto__:null,default:ve,head:_e},Symbol.toStringTag,{value:"Module"})),Se=a(n(()=>e("h1",{class:"h-screen",children:"Services Page"}),"s_xz0IpC0v0Fc")),ke={title:"Services",meta:[{name:"description",content:"Code downloads, consulting, apps and more"}]},je=Object.freeze(Object.defineProperty({__proto__:null,default:Se,head:ke},Symbol.toStringTag,{value:"Module"})),Oe=a(n(()=>e("h1",{class:"h-screen",children:"Shop Page"}),"s_GE1BvJV0HFk")),Ce={title:"Shop",meta:[{name:"description",content:"Purchase one off code downloads to make your life easier"}]},Pe=Object.freeze(Object.defineProperty({__proto__:null,default:Oe,head:Ce},Symbol.toStringTag,{value:"Module"})),Te=a(n(()=>{const r=I({message:void 0,status:"error"}),i=v(!1),o=n(async()=>{const{data:u,error:c}=await y.auth.signInWithOAuth({provider:"github",options:{redirectTo:S}});console.log(u),console.log("Error: ",c)},"s_BA88xGcEQY8"),h=n(async u=>{var M;const[c,d]=O();d.message=void 0,d.status="error",c.value=!0;const m=u.target.email.value,g=u.target.terms.checked;if(!z(m)){d.message="You must have a valid email",c.value=!1;return}if(!g){d.message="You must agree to our terms, privacy and disclaimer before signing up",c.value=!1;return}const p=Date.now(),q=Math.floor(Math.random()*1e6)+m+p,{data:k,error:j}=await y.auth.signUp({email:m,password:q});if((M=k==null?void 0:k.user)!=null&&M.id){d.message="Success. Please check your email/spam folder",d.status="success",c.value=!1;return}else{d.message="There was a problem creating a user. "+(j==null?void 0:j.message),c.value=!1;return}},"s_rJ6GlGrY00o",[i,r]);return s("div",{class:"flex min-h-full flex-col justify-center py-12 sm:px-6 lg:px-8",children:[s("div",{class:"sm:mx-auto sm:w-full sm:max-w-md",children:[e(l,{href:"/",children:e("img",{class:"w-24 h-24 mx-auto",src:"/img/icon.png"}),[t]:{href:t}},"ft_0"),e("h2",{class:"mt-6 text-center text-3xl font-bold tracking-tight text-gray-900",children:"Sign up"}),s("p",{class:"mt-2 text-center text-sm text-gray-600",children:["Or"," ",e(l,{href:"/login",class:"font-medium text-green-600 hover:text-green-500",children:"log in to my account",[t]:{href:t,class:t}},"ft_1")]})]}),e("div",{class:"mt-8 sm:mx-auto sm:w-full sm:max-w-md",children:s("div",{class:"bg-white py-8 px-4 shadow sm:rounded-sm sm:px-10",children:[s("div",{class:"",children:[s("div",{class:"grid grid-cols-2 gap-3",children:[e("div",{children:s("a",{href:"#",class:"inline-flex w-full justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-500 shadow-sm hover:bg-gray-50",children:[e("span",{class:"sr-only",children:"Log in with Google"}),s("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"currentColor",class:"h-5 w-5",viewBox:"0 0 16 16",children:[" ",e("path",{d:"M15.545 6.558a9.42 9.42 0 0 1 .139 1.626c0 2.434-.87 4.492-2.384 5.885h.002C11.978 15.292 10.158 16 8 16A8 8 0 1 1 8 0a7.689 7.689 0 0 1 5.352 2.082l-2.284 2.284A4.347 4.347 0 0 0 8 3.166c-2.087 0-3.86 1.408-4.492 3.304a4.792 4.792 0 0 0 0 3.063h.003c.635 1.893 2.405 3.301 4.492 3.301 1.078 0 2.004-.276 2.722-.764h-.003a3.702 3.702 0 0 0 1.599-2.431H8v-3.08h7.545z"})," "]})]})}),e("div",{children:s("button",{onClick$:o,class:"inline-flex w-full justify-center rounded-md border border-gray-300 bg-white py-2 px-4 text-sm font-medium text-gray-500 shadow-sm hover:bg-gray-50",children:[e("span",{class:"sr-only",children:"Log in with GitHub"}),e("svg",{class:"h-5 w-5","aria-hidden":"true",fill:"currentColor",viewBox:"0 0 20 20",children:e("path",{fillRule:"evenodd",d:"M10 0C4.477 0 0 4.484 0 10.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0110 4.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.203 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.942.359.31.678.921.678 1.856 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0020 10.017C20 4.484 15.522 0 10 0z",clipRule:"evenodd"})})]})})]}),s("div",{class:"relative py-5",children:[e("div",{class:"absolute inset-0 flex items-center",children:e("div",{class:"w-full border-t border-gray-300"})}),e("div",{class:"relative flex justify-center text-sm",children:e("span",{class:"bg-white px-2 text-gray-500",children:"Or sign up with email"})})]})]}),s("form",{onSubmit$:h,"preventdefault:submit":!0,class:"space-y-6",children:[s("div",{children:[e("label",{class:"block text-sm font-medium text-gray-700",children:"Email address"}),e("div",{class:"mt-1",children:e("input",{id:"email",name:"email",type:"email",autoComplete:"email",required:!0,class:"block w-full appearance-none rounded-sm border border-gray-300 px-3 py-2 placeholder-gray-400 shadow-sm focus:border-sky-500 focus:outline-none focus:ring-sky-500 sm:text-sm"})})]}),e("div",{class:"flex flex-col items-start justify-between space-y-4",children:s("div",{class:"flex items-center",children:[e("input",{id:"terms",name:"terms",type:"checkbox",class:"h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-500"}),e("label",{class:"ml-2 block text-sm text-gray-900",children:s("span",{children:["Agree to"," ",e(l,{href:"/terms",children:e("span",{class:"text-sky-500 hover:text-sky-400",children:"terms"}),[t]:{href:t}},"ft_2"),","," ",e(l,{href:"/privacy",children:e("span",{class:"text-sky-500 hover:text-sky-400",children:"privacy"}),[t]:{href:t}},"ft_3")," ","and"," ",e(l,{href:"/disclaimer",children:e("span",{class:"text-sky-500 hover:text-sky-400",children:"disclaimer"}),[t]:{href:t}},"ft_4")]})})]})}),s("div",{children:[e("button",{type:"submit",get disabled(){return i.value},class:"transition-all duration-300 flex w-full justify-center rounded-sm border border-transparent bg-sky-500 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-sky-600 focus:outline-none focus:ring-2 focus:ring-sky-500 disabled:bg-gray-500 disabled:hover:bg-gray-500 focus:ring-offset-2",children:"Sign up",[t]:{disabled:b(i,"value")}}),e("p",{class:"text-xs text-center text-gray-500 mt-1",children:"No password required. Authorize via email."})]}),e(R,{message:r,[t]:{message:t}},"ft_5")]})]})})]})},"s_5aZSva0X07s")),Me=Object.freeze(Object.defineProperty({__proto__:null,default:Te},Symbol.toStringTag,{value:"Module"})),$e=a(n(()=>e("div",{children:"Terms"}),"s_cTGLZV12wIY")),Ie={title:"Terms",meta:[{name:"description",content:"Terms of use"}]},Le=Object.freeze(Object.defineProperty({__proto__:null,default:$e,head:Ie},Symbol.toStringTag,{value:"Module"})),_=()=>Z,Ae=[[/^\/$/,[_,()=>ee],void 0,"/",["q-da8a015d.js","q-b4a1d39e.js"]],[/^\/login\/staging\/?$/,[()=>re],void 0,"/login/staging/",["q-8766c9f1.js"]],[/^\/members\/dashboard\/?$/,[()=>oe],void 0,"/members/dashboard/",["q-f8953492.js"]],[/^\/about\/?$/,[_,()=>ue],void 0,"/about/",["q-da8a015d.js","q-7c0f50e7.js"]],[/^\/contact\/?$/,[()=>ge],void 0,"/contact/",["q-933655d4.js"]],[/^\/disclaimer\/?$/,[()=>pe],void 0,"/disclaimer/",["q-fb8e0cd7.js"]],[/^\/login\/?$/,[()=>ye],void 0,"/login/",["q-e6d839bc.js"]],[/^\/privacy\/?$/,[()=>we],void 0,"/privacy/",["q-ffa06541.js"]],[/^\/services\/?$/,[_,()=>je],void 0,"/services/",["q-da8a015d.js","q-4ad21a03.js"]],[/^\/shop\/?$/,[_,()=>Pe],void 0,"/shop/",["q-da8a015d.js","q-1d1ea278.js"]],[/^\/signup\/?$/,[()=>Me],void 0,"/signup/",["q-462a0958.js"]],[/^\/terms\/?$/,[()=>Le],void 0,"/terms/",["q-d9b32b7d.js"]]],ze=[],Re=!0,qe="/",Ee=!0,Ne={routes:Ae,menus:ze,trailingSlash:Re,basePathname:qe,cacheModules:Ee};export{qe as basePathname,Ee as cacheModules,Ne as default,ze as menus,Ae as routes,Re as trailingSlash};
3 |
--------------------------------------------------------------------------------
/frontend/server/@qwik-city-static-paths.js:
--------------------------------------------------------------------------------
1 | const staticPaths = new Set(["/favicon.svg","/img/icon.png","/manifest.json","/q-manifest.json","/robots.txt","/service-worker.js","/sitemap.xml"]);
2 | function isStaticPath(p) {
3 | if (p.startsWith("/build/")) {
4 | return true;
5 | }
6 | if (p.startsWith("/assets/")) {
7 | return true;
8 | }
9 | if (staticPaths.has(p)) {
10 | return true;
11 | }
12 | return false;
13 | }
14 | export { isStaticPath };
--------------------------------------------------------------------------------
/frontend/server/assets/root-7ec1d247.mjs:
--------------------------------------------------------------------------------
1 | import{componentQrl as v,inlinedQrl as l,useContext as j,jsx as nt,SkipRender as It,useEnvData as it,useStore as g,useContextProvider as w,useWatchQrl as Et,useLexicalScope as M,getLocale as zt,noSerialize as st,Slot as U,useOnDocument as Ct,createContext as k,withLocale as Z,useResourceQrl as Lt,_wrapSignal as R,_IMMUTABLE as V,useStylesQrl as St,useClientEffectQrl as $,_noopQrl as K}from"@builder.io/qwik";import{jsx as c,jsxs as L,Fragment as jt}from"@builder.io/qwik/jsx-runtime";const Pt=!0,Rt=!1,qt='((s,a,i,r)=>{i=(e,t)=>{t=document.querySelector("[q\\\\:base]"),t&&a.active&&a.active.postMessage({type:"qprefetch",base:t.getAttribute("q:base"),...e})},document.addEventListener("qprefetch",e=>{const t=e.detail;a?i(t):t.bundles&&s.push(...t.bundles)}),navigator.serviceWorker.register("/service-worker.js").then(e=>{r=()=>{a=e,i({bundles:s})},e.installing?e.installing.addEventListener("statechange",t=>{t.target.state=="activated"&&r()}):e.active&&r()}).catch(e=>console.error(e))})([])',ct=k("qc-c"),N=k("qc-ic"),O=k("qc-h"),Q=k("qc-l"),H=k("qc-n"),At=v(l(()=>{const{contents:t}=j(N);if(t&&t.length>0){const e=t.length;let o=null;for(let r=e-1;r>=0;r--)o=nt(t[r].default,{children:o});return o}return It},"RouterOutlet_component_AKetNByE5TM")),X=new WeakMap,S=Symbol(),T=Symbol(),I=new Map,Dt=async(t,e,o,r)=>{if(Array.isArray(t))for(const a of t){const n=a[0].exec(r);if(n){const i=a[1],s=Mt(a[2],n),d=a[4],m=new Array(i.length),y=[],b=Tt(e,r);let E;return i.forEach((p,u)=>{G(p,y,P=>m[u]=P,o)}),G(b,y,p=>E=p==null?void 0:p.default,o),y.length>0&&await Promise.all(y),[s,m,E,d]}}return null},G=(t,e,o,r)=>{if(typeof t=="function"){const a=X.get(t);if(a)o(a);else{const n=t();typeof n.then=="function"?e.push(n.then(i=>{r!==!1&&X.set(t,i),o(i)})):n&&o(n)}}},Tt=(t,e)=>{if(t){e=e.endsWith("/")?e:e+"/";const o=t.find(r=>r[0]===e||e.startsWith(r[0]+(e.endsWith("/")?"":"/")));if(o)return o[1]}},Mt=(t,e)=>{const o={};if(t)for(let r=0;r{const a=W(),n={data:t?t.body:null,head:a,withLocale:i=>Z(r,i),...e};for(let i=o.length-1;i>=0;i--){const s=o[i]&&o[i].head;s&&(typeof s=="function"?J(a,Z(r,()=>s(n))):typeof s=="object"&&J(a,s))}return n.head},J=(t,e)=>{typeof e.title=="string"&&(t.title=e.title),q(t.meta,e.meta),q(t.links,e.links),q(t.styles,e.styles),Object.assign(t.frontmatter,e.frontmatter)},q=(t,e)=>{if(Array.isArray(e))for(const o of e){if(typeof o.key=="string"){const r=t.findIndex(a=>a.key===o.key);if(r>-1){t[r]=o;continue}}t.push(o)}},W=()=>({title:"",meta:[],links:[],styles:[],frontmatter:{}}),Nt=()=>j(O),B=()=>j(Q),Ot=()=>j(H),lt=()=>st(it("qwikcity")),f=t=>t.pathname+t.search+t.hash,x=(t,e)=>new URL(t,e.href),dt=(t,e)=>t.origin===e.origin,pt=(t,e)=>t.pathname+t.search===e.pathname+e.search,Qt=(t,e)=>t.pathname===e.pathname,tt=(t,e)=>dt(t,e)&&!pt(t,e),Ht=(t,e)=>t+(t.endsWith("/")?"":"/")+"q-data.json"+(e??""),Wt=(t,e)=>{const o=t.href;if(typeof o=="string"&&o.trim()!==""&&typeof t.target!="string")try{const r=x(o,e),a=x("",e);if(dt(r,a))return f(r)}catch(r){console.error(r)}return null},Bt=(t,e,o)=>{if(t.prefetch!==!1&&e){const r=x(e,o);if(!Qt(r,x("",o)))return""}return null},Yt=(t,e)=>{const o=t.location,r=x(e.path,o);tt(o,r)&&(et(t,o,r),t.history.pushState("","",f(r))),t[T]||(t[T]=1,t.addEventListener("popstate",()=>{const a=t.location,n=x(e.path,a);tt(a,n)&&(et(t,n,a),e.path=f(a))}),t.removeEventListener("popstate",t[S]))},et=async(t,e,o)=>{const r=t.document,a=o.hash;if(pt(e,o))e.hash!==a&&(await A(),a?ot(r,a):t.scrollTo(0,0));else if(a)for(let n=0;n<24&&(await A(),!ot(r,a));n++);else await A(),t.scrollTo(0,0)},A=()=>new Promise(t=>setTimeout(t,12)),ot=(t,e)=>{const o=e.slice(1),r=t.getElementById(o);return r&&r.scrollIntoView(),r},rt=t=>{typeof document<"u"&&document.dispatchEvent(new CustomEvent("qprefetch",{detail:t}))},Jt=()=>{const t=B(),e=lt();return Lt(l(async({track:o})=>{const[r,a]=M();o(()=>a.href);{if(!r)throw new Error("Endpoint response body is missing");return r.response.body}},"useEndpoint_useResource_00bFc4tHmxA",[e,t]))},gt=async(t,e)=>{const o=new URL(t),r=o.pathname,a=o.search,n=Ht(r,a);let i=I.get(n);return rt({links:[r]}),i||(i=fetch(n).then(s=>{if(s.ok&&(s.headers.get("content-type")||"").includes("json"))return s.json().then(d=>(rt({bundles:d.prefetch}),e&&I.delete(n),d));I.delete(n)}),I.set(n,i)),i},Ft=v(l(()=>{const t=lt();if(!(t!=null&&t.params))throw new Error("Missing Qwik City Env Data");const e=it("url");if(!e)throw new Error("Missing Qwik URL Env Data");const o=new URL(e),r=g({href:o.href,pathname:o.pathname,query:Object.fromEntries(o.searchParams.entries()),params:t.params}),a=g({path:f(o)}),n=g(W),i=g({headings:void 0,menu:void 0}),s=g({contents:void 0});return w(ct,i),w(N,s),w(O,n),w(Q,r),w(H,a),Et(l(async({track:d})=>{const[m,y,b,E,p,u]=M(),P=zt(""),{routes:wt,menus:ht,cacheModules:mt,trailingSlash:Y}=await import("../@qwik-city-plan.mjs"),bt=d(()=>u.path),h=new URL(bt,p.href),z=h.pathname,ft=Dt(wt,ht,mt,z),yt=Pt?E.response:gt(h.href,!0),F=await ft;if(F){const[ut,xt,vt]=F,C=xt,kt=C[C.length-1];if(z.endsWith("/")){if(!Y){h.pathname=z.slice(0,-1),u.path=f(h);return}}else if(Y){h.pathname+="/",u.path=f(h);return}p.href=h.href,p.pathname=z,p.params={...ut},p.query=Object.fromEntries(h.searchParams.entries()),m.headings=kt.headings,m.menu=vt,y.contents=st(C);const _t=await yt,_=Ut(_t,p,C,P);I.clear(),b.links=_.links,b.meta=_.meta,b.styles=_.styles,b.title=_.title,b.frontmatter=_.frontmatter,Rt&&Yt(window,u)}},"QwikCityProvider_component_useWatch_2Eo7WCpaqI8",[i,s,n,t,r,a])),c(U,{},"qY_0")},"QwikCityProvider_component_TxCFOy819ag"));l(t=>{const e=t.url??"http://localhost/",o=new URL(e),r=g({href:o.href,pathname:o.pathname,query:Object.fromEntries(o.searchParams.entries()),params:t.params??{}}),a=g({path:f(o)}),n=g(W),i=g({headings:void 0,menu:void 0}),s=g({contents:void 0});return w(ct,i),w(N,s),w(O,n),w(Q,r),w(H,a),c(U,{},"qY_1")},"QwikCityMockProvider_component_WmYC5H00wtI");const te=v(l(t=>{const e=Ot(),o=B(),r=t.href,a={...t},n=Wt(a,o),i=Bt(t,n,o);return a["preventdefault:click"]=!!n,a.href=n||r,Ct("qinit",l(()=>{window[S]||(window[S]=()=>{window[T]||location.reload()},setTimeout(()=>{addEventListener("popstate",window[S])},0))},"Link_component_useOnDocument_u0YVoxt2aTY")),c("a",{...a,onClick$:l(()=>{const[s,d,m]=M();s&&(m.path=d.href)},"Link_component_a_onClick_kzjavhDI3L0",[n,a,e]),"data-prefetch":i,onMouseOver$:l((s,d)=>at(d),"Link_component_a_onMouseOver_yiXwCC0m3jY"),onQVisible$:l((s,d)=>at(d,!0),"Link_component_a_onQVisible_EpaZ5qQ4Lg4"),children:c(U,{},"AD_0")})},"Link_component_8gdLBszqbaM")),at=(t,e)=>{t&&t.href&&t.hasAttribute("data-prefetch")&&(D||(D=innerWidth),(!e||e&&D<520)&>(t.href))};let D=0;const Zt=()=>nt("script",{dangerouslySetInnerHTML:qt}),Vt=v(l(()=>{const t=Nt(),e=B();return L(jt,{children:[c("title",{children:R(t,"title")}),c("link",{rel:"canonical",get href(){return e.href},[V]:{href:R(e,"href")}}),c("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),c("link",{rel:"icon",type:"image/svg+xml",href:"/favicon.svg"}),t.meta.map(o=>c("meta",{...o})),t.links.map(o=>c("link",{...o})),t.styles.map(o=>c("style",{...o.props,get dangerouslySetInnerHTML(){return o.style},[V]:{dangerouslySetInnerHTML:R(o,"style")}}))]},"OA_0")},"s_zrbrqoaqXSY")),$t=`*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.container{width:100%}@media (min-width: 640px){.container{max-width:640px}}@media (min-width: 768px){.container{max-width:768px}}@media (min-width: 1024px){.container{max-width:1024px}}@media (min-width: 1280px){.container{max-width:1280px}}@media (min-width: 1536px){.container{max-width:1536px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.static{position:static}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{top:0px;right:0px;bottom:0px;left:0px}.mx-auto{margin-left:auto;margin-right:auto}.-mx-5{margin-left:-1.25rem;margin-right:-1.25rem}.-my-2{margin-top:-.5rem;margin-bottom:-.5rem}.mt-6{margin-top:1.5rem}.mt-2{margin-top:.5rem}.mt-8{margin-top:2rem}.mt-1{margin-top:.25rem}.mt-3{margin-top:.75rem}.ml-2{margin-left:.5rem}.mt-24{margin-top:6rem}.mt-5{margin-top:1.25rem}.mr-2{margin-right:.5rem}.-mt-2{margin-top:-.5rem}.ml-10{margin-left:2.5rem}.mr-5{margin-right:1.25rem}.ml-5{margin-left:1.25rem}.block{display:block}.inline{display:inline}.flex{display:flex}.inline-flex{display:inline-flex}.grid{display:grid}.h-screen{height:100vh}.h-24{height:6rem}.h-5{height:1.25rem}.h-4{height:1rem}.h-full{height:100%}.h-12{height:3rem}.h-10{height:2.5rem}.min-h-screen{min-height:100vh}.min-h-full{min-height:100%}.w-full{width:100%}.w-56{width:14rem}.w-24{width:6rem}.w-5{width:1.25rem}.w-4{width:1rem}.w-12{width:3rem}.max-w-7xl{max-width:80rem}.appearance-none{-webkit-appearance:none;-moz-appearance:none;appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.items-center{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-3{gap:.75rem}.space-x-4>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(1rem * var(--tw-space-x-reverse));margin-left:calc(1rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.space-x-10>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(2.5rem * var(--tw-space-x-reverse));margin-left:calc(2.5rem * calc(1 - var(--tw-space-x-reverse)))}.overflow-hidden{overflow:hidden}.rounded-sm{border-radius:.125rem}.rounded-md{border-radius:.375rem}.rounded{border-radius:.25rem}.border{border-width:1px}.border-t{border-top-width:1px}.border-r{border-right-width:1px}.border-red-600{--tw-border-opacity: 1;border-color:rgb(220 38 38 / var(--tw-border-opacity))}.border-yellow-600{--tw-border-opacity: 1;border-color:rgb(202 138 4 / var(--tw-border-opacity))}.border-sky-600{--tw-border-opacity: 1;border-color:rgb(2 132 199 / var(--tw-border-opacity))}.border-green-600{--tw-border-opacity: 1;border-color:rgb(22 163 74 / var(--tw-border-opacity))}.border-gray-300{--tw-border-opacity: 1;border-color:rgb(209 213 219 / var(--tw-border-opacity))}.border-transparent{border-color:transparent}.border-sky-500{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity))}.border-green-500{--tw-border-opacity: 1;border-color:rgb(34 197 94 / var(--tw-border-opacity))}.bg-gray-500{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.bg-sky-500{--tw-bg-opacity: 1;background-color:rgb(14 165 233 / var(--tw-bg-opacity))}.bg-red-50{--tw-bg-opacity: 1;background-color:rgb(254 242 242 / var(--tw-bg-opacity))}.bg-yellow-50{--tw-bg-opacity: 1;background-color:rgb(254 252 232 / var(--tw-bg-opacity))}.bg-sky-50{--tw-bg-opacity: 1;background-color:rgb(240 249 255 / var(--tw-bg-opacity))}.bg-green-50{--tw-bg-opacity: 1;background-color:rgb(240 253 244 / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gray-900{--tw-bg-opacity: 1;background-color:rgb(17 24 39 / var(--tw-bg-opacity))}.bg-green-500{--tw-bg-opacity: 1;background-color:rgb(34 197 94 / var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-gray-900{--tw-gradient-from: #111827;--tw-gradient-to: rgb(17 24 39 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-sky-900{--tw-gradient-to: #0c4a6e}.p-5{padding:1.25rem}.py-12{padding-top:3rem;padding-bottom:3rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-8{padding-top:2rem;padding-bottom:2rem}.py-5{padding-top:1.25rem;padding-bottom:1.25rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-24{padding-top:6rem;padding-bottom:6rem}.py-4{padding-top:1rem;padding-bottom:1rem}.px-7{padding-left:1.75rem;padding-right:1.75rem}.text-center{text-align:center}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-sm{font-size:.875rem;line-height:1.25rem}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-xs{font-size:.75rem;line-height:1rem}.text-base{font-size:1rem;line-height:1.5rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.text-5xl{font-size:3rem;line-height:1}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-\\[10pt\\]{font-size:10pt}.text-2xl{font-size:1.5rem;line-height:2rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-extrabold{font-weight:800}.font-light{font-weight:300}.italic{font-style:italic}.tracking-tight{letter-spacing:-.025em}.tracking-tighter{letter-spacing:-.05em}.text-gray-900{--tw-text-opacity: 1;color:rgb(17 24 39 / var(--tw-text-opacity))}.text-white{--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity))}.text-red-600{--tw-text-opacity: 1;color:rgb(220 38 38 / var(--tw-text-opacity))}.text-yellow-600{--tw-text-opacity: 1;color:rgb(202 138 4 / var(--tw-text-opacity))}.text-sky-600{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity))}.text-green-600{--tw-text-opacity: 1;color:rgb(22 163 74 / var(--tw-text-opacity))}.text-gray-600{--tw-text-opacity: 1;color:rgb(75 85 99 / var(--tw-text-opacity))}.text-gray-500{--tw-text-opacity: 1;color:rgb(107 114 128 / var(--tw-text-opacity))}.text-gray-700{--tw-text-opacity: 1;color:rgb(55 65 81 / var(--tw-text-opacity))}.text-sky-500{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.text-gray-400{--tw-text-opacity: 1;color:rgb(156 163 175 / var(--tw-text-opacity))}.text-green-500{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.text-slate-300{--tw-text-opacity: 1;color:rgb(203 213 225 / var(--tw-text-opacity))}.text-gray-800{--tw-text-opacity: 1;color:rgb(31 41 55 / var(--tw-text-opacity))}.placeholder-gray-400::-moz-placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.placeholder-gray-400::placeholder{--tw-placeholder-opacity: 1;color:rgb(156 163 175 / var(--tw-placeholder-opacity))}.shadow-lg{--tw-shadow: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);--tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.transition-all{transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.duration-300{transition-duration:.3s}.duration-500{transition-duration:.5s}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}body{margin:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;background-color:#f2f2f2}a{-webkit-appearance:none;-moz-appearance:none;appearance:none}.fade-in{animation:fadeIn .5s;-webkit-animation:fadeIn .5s;-moz-animation:fadeIn .5s;-o-animation:fadeIn .5s;-ms-animation:fadeIn .5s}.hover\\:border-sky-400:hover{--tw-border-opacity: 1;border-color:rgb(56 189 248 / var(--tw-border-opacity))}.hover\\:bg-sky-400:hover{--tw-bg-opacity: 1;background-color:rgb(56 189 248 / var(--tw-bg-opacity))}.hover\\:bg-gray-50:hover{--tw-bg-opacity: 1;background-color:rgb(249 250 251 / var(--tw-bg-opacity))}.hover\\:bg-sky-600:hover{--tw-bg-opacity: 1;background-color:rgb(2 132 199 / var(--tw-bg-opacity))}.hover\\:bg-green-400:hover{--tw-bg-opacity: 1;background-color:rgb(74 222 128 / var(--tw-bg-opacity))}.hover\\:text-sky-500:hover{--tw-text-opacity: 1;color:rgb(14 165 233 / var(--tw-text-opacity))}.hover\\:text-green-500:hover{--tw-text-opacity: 1;color:rgb(34 197 94 / var(--tw-text-opacity))}.hover\\:text-sky-400:hover{--tw-text-opacity: 1;color:rgb(56 189 248 / var(--tw-text-opacity))}.hover\\:text-sky-600:hover{--tw-text-opacity: 1;color:rgb(2 132 199 / var(--tw-text-opacity))}.hover\\:shadow-none:hover{--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.focus\\:border-sky-500:focus{--tw-border-opacity: 1;border-color:rgb(14 165 233 / var(--tw-border-opacity))}.focus\\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\\:ring-sky-500:focus{--tw-ring-opacity: 1;--tw-ring-color: rgb(14 165 233 / var(--tw-ring-opacity))}.focus\\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.disabled\\:bg-gray-500:disabled{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}.disabled\\:hover\\:bg-gray-500:hover:disabled{--tw-bg-opacity: 1;background-color:rgb(107 114 128 / var(--tw-bg-opacity))}@media (min-width: 640px){.sm\\:mx-auto{margin-left:auto;margin-right:auto}.sm\\:w-full{width:100%}.sm\\:max-w-md{max-width:28rem}.sm\\:rounded-sm{border-radius:.125rem}.sm\\:px-6{padding-left:1.5rem;padding-right:1.5rem}.sm\\:px-10{padding-left:2.5rem;padding-right:2.5rem}.sm\\:text-sm{font-size:.875rem;line-height:1.25rem}}@media (min-width: 768px){.md\\:text-5xl{font-size:3rem;line-height:1}.md\\:text-6xl{font-size:3.75rem;line-height:1}}@media (min-width: 1024px){.lg\\:px-8{padding-left:2rem;padding-right:2rem}.lg\\:text-7xl{font-size:4.5rem;line-height:1}.lg\\:text-8xl{font-size:6rem;line-height:1}}
2 | `,Kt=k("user-session"),ee=v(l(()=>{const t=g({userId:"",isLoggedIn:!1});return St(l($t,"s_hO3b5j0m2ZI")),$(K("s_T9y0TUh8CDA",[t])),$(K("s_1VIjpu9TdEc",[t])),w(Kt,t),L(Ft,{children:[L("head",{children:[c("meta",{charSet:"utf-8"}),c("link",{rel:"manifest",href:"/manifest.json"}),c(Vt,{},"35_0")]}),L("body",{lang:"en",children:[c(At,{},"35_1"),c(Zt,{},"35_2")]})]},"35_3")},"s_3sccYCDd1Z0"));export{te as L,ee as R,Kt as U,Jt as a,Ot as u};
3 |
--------------------------------------------------------------------------------
/frontend/server/entry.express.js:
--------------------------------------------------------------------------------
1 | export * from "./entry.express.mjs";
--------------------------------------------------------------------------------
/frontend/server/entry.express.mjs:
--------------------------------------------------------------------------------
1 | import oe,{Headers as se,Request as re,Response as ie}from"node-fetch";import{getNotFound as ae}from"./@qwik-city-not-found-paths.js";import ce from"./@qwik-city-plan.mjs";import le from"./entry.ssr.mjs";import B from"express";import{fileURLToPath as fe}from"node:url";import{join as z}from"node:path";import de from"compression";import"@builder.io/qwik";import"@builder.io/qwik/jsx-runtime";import"./assets/root-7ec1d247.mjs";import"@supabase/supabase-js";import"dotenv";import"@builder.io/qwik/server";var _={lax:"Lax",none:"None",strict:"Strict"},ue={seconds:1,minutes:1*60,hours:1*60*60,days:1*60*60*24,weeks:1*60*60*24*7},he=(e,t,n)=>{const o=[`${e}=${t}`];return typeof n.domain=="string"&&o.push(`Domain=${n.domain}`),typeof n.maxAge=="number"?o.push(`Max-Age=${n.maxAge}`):Array.isArray(n.maxAge)?o.push(`Max-Age=${n.maxAge[0]*ue[n.maxAge[1]]}`):typeof n.expires=="number"||typeof n.expires=="string"?o.push(`Expires=${n.expires}`):n.expires instanceof Date&&o.push(`Expires=${n.expires.toUTCString()}`),n.httpOnly&&o.push("HttpOnly"),typeof n.path=="string"&&o.push(`Path=${n.path}`),n.sameSite&&_[n.sameSite]&&o.push(`SameSite=${_[n.sameSite]}`),n.secure&&o.push("Secure"),o.join("; ")},pe=e=>{const t={};if(typeof e=="string"&&e!==""){const n=e.split(";");for(const o of n){const s=o.split("=");if(s.length>1){const i=decodeURIComponent(s[0].trim()),r=decodeURIComponent(s[1].trim());t[i]=r}}}return t},C=Symbol("request-cookies"),N=Symbol("response-cookies"),G,T=class{constructor(e){this[G]={},this[C]=pe(e)}get(e){const t=this[C][e];return t?{value:t,json(){return JSON.parse(t)},number(){return Number(t)}}:null}has(e){return!!this[C][e]}set(e,t,n={}){const o=typeof t=="string"?t:encodeURIComponent(JSON.stringify(t));this[N][e]=he(e,o,n)}delete(e,t){this.set(e,"deleted",{...t,maxAge:0})}headers(){return Object.values(this[N])}};G=N;var m=Symbol("headers"),I,ye=class{constructor(){this[I]={}}[(I=m,Symbol.iterator)](){return this.entries()}*keys(){for(const e of Object.keys(this[m]))yield e}*values(){for(const e of Object.values(this[m]))yield e}*entries(){for(const e of Object.keys(this[m]))yield[e,this.get(e)]}get(e){return this[m][E(e)]||null}set(e,t){const n=E(e);this[m][n]=typeof t!="string"?String(t):t}append(e,t){const n=E(e),o=this.has(n)?`${this.get(n)}, ${t}`:t;this.set(e,o)}delete(e){if(!this.has(e))return;const t=E(e);delete this[m][t]}all(){return this[m]}has(e){return this[m].hasOwnProperty(E(e))}forEach(e,t){for(const n in this[m])this[m].hasOwnProperty(n)&&e.call(t,this[m][n],n,this)}},me=/[^a-z0-9\-#$%&'*+.^_`|~]/i;function E(e){if(typeof e!="string"&&(e=String(e)),me.test(e)||e.trim()==="")throw new TypeError("Invalid character in header field name");return e.toLowerCase()}function A(){return new(typeof Headers=="function"?Headers:ye)}var O=class extends Error{constructor(e,t){super(t),this.status=e}};function V(e,t){const o=Q(500,t),s=A();return s.set("Content-Type","text/html; charset=utf-8"),e.response(500,s,new T,async i=>{i.write(o)},t)}function ge(e,t){const n=K(t.status,t.message,t.stack),o=A();return o.set("Content-Type","text/html; charset=utf-8"),e.response(t.status,o,new T,async s=>{s.write(n)},t)}function Q(e,t){let n="Server Error",o;return t!=null&&(typeof t=="object"?(typeof t.message=="string"&&(n=t.message),t.stack!=null&&(o=String(t.stack))):n=String(t)),K(e,n,o)}function K(e,t,n){const o=typeof t=="string"?"600px":"300px",s=e>=500?be:we;return e<500&&(n=""),`
2 |
3 |
4 |
5 |
6 | ${e} ${t}
7 |
8 |
15 |
16 |
17 | ${e} ${t}
${n?`
18 | ${n}
`:""}
19 |
20 | `}var we="#006ce9",be="#713fc2";function ve(e,t){const{pendingBody:n,resolvedBody:o,status:s,headers:i,cookie:r}=t,{response:l}=e;if(n===void 0&&o===void 0)return l(s,i,r,Se);i.has("Content-Type")||i.set("Content-Type","application/json; charset=utf-8");const a=i.get("Content-Type").includes("json");return l(s,i,r,async({write:c})=>{const d=n!==void 0?await n:o;if(d!==void 0)if(a)c(JSON.stringify(d));else{const u=typeof d;c(u==="string"?d:u==="number"||u==="boolean"?String(d):d)}})}var Se=async()=>{},R=class{constructor(e,t,n,o){this.url=e,this.location=e,this.status=X(t)?t:302,this.headers=n??A(),this.headers.set("Location",this.location),this.headers.delete("Cache-Control"),this.cookies=o??new T}};function ke(e,t){return e.response(t.status,t.headers,t.cookies,async()=>{})}function X(e){return typeof e=="number"&&e>=301&&e<=308}function xe(e){if(JSON.stringify(e),!$(e))throw new Error("Unable to serialize value.")}function $(e){if(e==null||typeof e=="string"||typeof e=="boolean"||typeof e=="number")return!0;if(Array.isArray(e)){for(const t of e)if(!$(t))return!1;return!0}if(e.constructor==null||e.constructor===Object){for(const t in e)if(!$(e[t]))return!1;return!0}return!1}async function Ee(e,t,n,o,s="/"){if(n.length===0)throw new O(404,"Not Found");const{request:i,url:r,platform:l}=e,{pathname:a}=r,{method:c,headers:d}=i,u=Oe(n),h=u&&a.endsWith(D),p=!h&&Ae(c,d.get("Accept"),d.get("Content-Type")),w=new T(d.get("cookie")),f={type:h?"pagedata":u&&!p?"pagehtml":"endpoint",url:r,params:t,status:200,headers:A(),resolvedBody:void 0,pendingBody:void 0,cookie:w,aborted:!1};let P=!1;if(u&&!h&&a!==s&&!a.endsWith(".html")){if(o){if(!a.endsWith("/"))throw new R(a+"/"+r.search,302)}else if(a.endsWith("/"))throw new R(a.slice(0,a.length-1)+r.search,302)}let b=-1;const Z=()=>{b=U},j=async()=>{for(b++;b=U,!h&&X(f.status)&&f.headers.has("Location"))throw new R(f.headers.get("Location"),f.status,f.headers,f.cookie);if(P)u&&c==="GET"&&(f.headers.has("Vary")||f.headers.set("Vary","Content-Type, Accept"));else if(p&&!h||!u)throw new O(405,"Method Not Allowed");return f}var S=Symbol("UserResponse"),H=Symbol("RequestContext"),Re=class{constructor(e,t){this[S]=e,this[H]=t}get status(){return this[S].status}set status(e){this[S].status=e}get headers(){return this[S].headers}get locale(){return this[H].locale}set locale(e){this[H].locale=e}redirect(e,t){return new R(e,t,this[S].headers,this[S].cookie)}error(e,t){return new O(e,t)}};function Ae(e,t,n){if(e==="GET"||e==="POST"){if(n&&n.includes("application/json"))return!0;if(t){const o=t.indexOf("text/html");if(o===0)return!1;const s=t.indexOf("application/json");if(s>-1)return o>-1?s{try{const o=e();o!==null&&typeof o=="object"&&typeof o.then=="function"?o.then(t,n):t(o)}catch(o){n(o)}})}function Oe(e){const t=e[e.length-1];return t&&typeof t.default=="function"}function Te(e,t){if(e.endsWith(D)){const n=e.length-Pe+(t?1:0);e=e.slice(0,n),e===""&&(e="/")}return e}var D="/q-data.json",Pe=D.length,U=999999999,q=new WeakMap,Ce=async(e,t,n,o)=>{if(Array.isArray(e))for(const s of e){const i=s[0].exec(o);if(i){const r=s[1],l=Ne(s[2],i),a=s[4],c=new Array(r.length),d=[],u=He(t,o);let h;return r.forEach((p,w)=>{M(p,d,f=>c[w]=f,n)}),M(u,d,p=>h=p==null?void 0:p.default,n),d.length>0&&await Promise.all(d),[l,c,h,a]}}return null},M=(e,t,n,o)=>{if(typeof e=="function"){const s=q.get(e);if(s)n(s);else{const i=e();typeof i.then=="function"?t.push(i.then(r=>{o!==!1&&q.set(e,r),n(r)})):i&&n(i)}}},He=(e,t)=>{if(e){t=t.endsWith("/")?t:t+"/";const n=e.find(o=>o[0]===t||t.startsWith(o[0]+(t.endsWith("/")?"":"/")));if(n)return n[1]}},Ne=(e,t)=>{const n={};if(e)for(let o=0;od[h]=u),c?r.set("Content-Type","application/json; charset=utf-8"):r.has("Content-Type")||r.set("Content-Type","text/html; charset=utf-8"),a(c?200:i,r,l,async u=>{try{const h=await n({stream:c?je:u,envData:De(d,t,e.locale,e.mode),...o});c?u.write(JSON.stringify(await F(t,h,s))):(typeof h).html==="string"&&u.write(h.html),typeof u.clientData=="function"&&u.clientData(await F(t,h,s))}catch(h){const p=Q(500,h);u.write(p)}})}async function F(e,t,n){const o=Be(t,n),s=t.isStatic;return{body:e.pendingBody?await e.pendingBody:e.resolvedBody,status:e.status!==200?e.status:void 0,redirect:e.status>=301&&e.status<=308&&e.headers.get("location")||void 0,isStatic:s,prefetch:o.length>0?o:void 0}}function Be(e,t){const n=[],o=l=>{l&&!n.includes(l)&&n.push(l)},s=l=>{if(Array.isArray(l))for(const a of l){const c=a.url.split("/").pop();c&&!n.includes(c)&&(o(c),s(a.imports))}};s(e.prefetchResources);const i=e.manifest||e._manifest,r=e._symbols;if(i&&r)for(const l of r){const a=i.symbols[l];a&&a.ctxName==="component$"&&o(i.mapping[l])}if(t)for(const l of t)o(l);return n}function De(e,t,n,o){const{url:s,params:i,pendingBody:r,resolvedBody:l,status:a}=t;return{url:s.href,requestHeaders:e,locale:n,qwikcity:{mode:o,params:{...i},response:{body:r||l,status:a}}}}var je={write:()=>{}};async function _e(e,t){try{const{render:n,qwikCityPlan:o}=t,{routes:s,menus:i,cacheModules:r,trailingSlash:l,basePathname:a}=o,c=Te(e.url.pathname,l),d=await Ce(s,i,r,c);if(d){const[u,h,p,w]=d,f=await Ee(e,u,h,l,a);return f.aborted?null:f.type==="endpoint"?await ve(e,f):await $e(e,f,n,t,w)}}catch(n){return n instanceof R?ke(e,n):n instanceof O?ge(e,n):V(e,n)}return null}function J(e){const t=e.socket.encrypted||e.connection.encrypted?"https":"http";return new URL(e.url||"/",`${t}://${e.headers.host}`)}function Ie(e,t,n,o){const s=A(),i=t.headers;for(const a in i){const c=i[a];if(typeof c=="string")s.set(a,c);else if(Array.isArray(c))for(const d of c)s.append(a,d)}const r=async()=>{const a=[];for await(const c of t)a.push(c);return Buffer.concat(a).toString()};return{mode:o,request:{headers:s,formData:async()=>new URLSearchParams(await r()),json:async()=>JSON.parse(await r()),method:t.method||"GET",text:r,url:e.href},response:async(a,c,d,u)=>{n.statusCode=a,c.forEach((p,w)=>n.setHeader(w,p));const h=d.headers();return h.length>0&&n.setHeader("Set-Cookie",h),u({write:p=>{n.write(p)}}).finally(()=>{n.end()}),n},url:e,platform:{ssr:!0,node:process.versions.node},locale:void 0}}function Le(){typeof global<"u"&&typeof globalThis.fetch!="function"&&typeof process<"u"&&process.versions.node&&(globalThis.fetch||(globalThis.fetch=oe,globalThis.Headers=se,globalThis.Request=re,globalThis.Response=ie))}function Ue(e){return Le(),{router:async(o,s,i)=>{try{const r=Ie(J(o),o,s,"server");try{await _e(r,e)||i()}catch(l){await V(r,l)}}catch(r){console.error(r),i(r)}},notFound:async(o,s,i)=>{try{const r=J(o),l=ae(r.pathname);s.writeHead(404,{"Content-Type":"text/html; charset=utf-8","X-Not-Found":r.pathname}),s.end(l)}catch(r){console.error(r),i(r)}}}}const Y=z(fe(import.meta.url),"..","..","dist"),qe=z(Y,"build"),W=process.env.PORT??3e3,{router:Me,notFound:Fe}=Ue({render:le,qwikCityPlan:ce}),k=B();k.use(de());k.use("/build",B.static(qe,{immutable:!0,maxAge:"1y"}));k.use(B.static(Y,{redirect:!1}));k.use(Me);k.use(Fe);k.listen(W,()=>{console.log(`Server starter: http://localhost:${W}/`)});
21 |
--------------------------------------------------------------------------------
/frontend/server/entry.ssr.js:
--------------------------------------------------------------------------------
1 | export * from "./entry.ssr.mjs";
--------------------------------------------------------------------------------
/frontend/server/entry.ssr.mjs:
--------------------------------------------------------------------------------
1 | import{jsx as e}from"@builder.io/qwik/jsx-runtime";import{renderToStream as o}from"@builder.io/qwik/server";import{R as i}from"./assets/root-7ec1d247.mjs";import"@builder.io/qwik";const a={symbols:{s_kzjavhDI3L0:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"Link_component_a_onClick",canonicalFilename:"s_kzjavhdi3l0",hash:"kzjavhDI3L0",ctxKind:"event",ctxName:"onClick$",captures:!0,parent:"s_8gdLBszqbaM"},s_yiXwCC0m3jY:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"Link_component_a_onMouseOver",canonicalFilename:"s_yixwcc0m3jy",hash:"yiXwCC0m3jY",ctxKind:"event",ctxName:"onMouseOver$",captures:!1,parent:"s_8gdLBszqbaM"},s_EpaZ5qQ4Lg4:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"Link_component_a_onQVisible",canonicalFilename:"s_epaz5qq4lg4",hash:"EpaZ5qQ4Lg4",ctxKind:"event",ctxName:"onQVisible$",captures:!1,parent:"s_8gdLBszqbaM"},s_04qKAmMDQjI:{origin:"routes/members/dashboard/index.tsx",displayName:"dashboard_component_useClientEffect",canonicalFilename:"s_04qkammdqji",hash:"04qKAmMDQjI",ctxKind:"function",ctxName:"useClientEffect$",captures:!0,parent:"s_7w7YYyGS1d0"},s_1VIjpu9TdEc:{origin:"root.tsx",displayName:"root_component_useClientEffect_1",canonicalFilename:"s_1vijpu9tdec",hash:"1VIjpu9TdEc",ctxKind:"function",ctxName:"useClientEffect$",captures:!0,parent:"s_3sccYCDd1Z0"},s_3LSBotgjcd4:{origin:"components/site/navigation/navigation.tsx",displayName:"Navigation_component_useClientEffect",canonicalFilename:"s_3lsbotgjcd4",hash:"3LSBotgjcd4",ctxKind:"function",ctxName:"useClientEffect$",captures:!0,parent:"s_D6gnpqBvIxc"},s_T9y0TUh8CDA:{origin:"root.tsx",displayName:"root_component_useClientEffect",canonicalFilename:"s_t9y0tuh8cda",hash:"T9y0TUh8CDA",ctxKind:"function",ctxName:"useClientEffect$",captures:!0,parent:"s_3sccYCDd1Z0"},s_j0ikt72I750:{origin:"routes/login/staging/index.tsx",displayName:"staging_component_useClientEffect",canonicalFilename:"s_j0ikt72i750",hash:"j0ikt72I750",ctxKind:"function",ctxName:"useClientEffect$",captures:!0,parent:"s_DWH5H0sHpx8"},s_1s5dhyML68g:{origin:"routes/disclaimer/index.tsx",displayName:"disclaimer_component",canonicalFilename:"s_1s5dhyml68g",hash:"1s5dhyML68g",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_2gZ5kKqe2wY:{origin:"routes/login/index.tsx",displayName:"login_component",canonicalFilename:"s_2gz5kkqe2wy",hash:"2gZ5kKqe2wY",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_3sccYCDd1Z0:{origin:"root.tsx",displayName:"root_component",canonicalFilename:"s_3sccycdd1z0",hash:"3sccYCDd1Z0",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_4uBaEu4a7Ac:{origin:"routes/index@site.tsx",displayName:"index_site_component",canonicalFilename:"s_4ubaeu4a7ac",hash:"4uBaEu4a7Ac",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_5aZSva0X07s:{origin:"routes/signup/index.tsx",displayName:"signup_component",canonicalFilename:"s_5azsva0x07s",hash:"5aZSva0X07s",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_7w7YYyGS1d0:{origin:"routes/members/dashboard/index.tsx",displayName:"dashboard_component",canonicalFilename:"s_7w7yyygs1d0",hash:"7w7YYyGS1d0",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_8gdLBszqbaM:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"Link_component",canonicalFilename:"s_8gdlbszqbam",hash:"8gdLBszqbaM",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_AFVtdLQxhqM:{origin:"routes/layout-site.tsx",displayName:"layout_site_component",canonicalFilename:"s_afvtdlqxhqm",hash:"AFVtdLQxhqM",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_AKetNByE5TM:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"RouterOutlet_component",canonicalFilename:"s_aketnbye5tm",hash:"AKetNByE5TM",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_D6gnpqBvIxc:{origin:"components/site/navigation/navigation.tsx",displayName:"Navigation_component",canonicalFilename:"s_d6gnpqbvixc",hash:"D6gnpqBvIxc",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_DWH5H0sHpx8:{origin:"routes/login/staging/index.tsx",displayName:"staging_component",canonicalFilename:"s_dwh5h0shpx8",hash:"DWH5H0sHpx8",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_GE1BvJV0HFk:{origin:"routes/shop/index@site.tsx",displayName:"index_site_component",canonicalFilename:"s_ge1bvjv0hfk",hash:"GE1BvJV0HFk",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_GG4uQ3LbNIU:{origin:"components/site/footer/footer.tsx",displayName:"Footer_component",canonicalFilename:"s_gg4uq3lbniu",hash:"GG4uQ3LbNIU",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_M0MhZOWBKK8:{origin:"routes/contact/index.tsx",displayName:"contact_component",canonicalFilename:"s_m0mhzowbkk8",hash:"M0MhZOWBKK8",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_Pr2nqhxZcRI:{origin:"components/site/logo/logo.tsx",displayName:"Logo_component",canonicalFilename:"s_pr2nqhxzcri",hash:"Pr2nqhxZcRI",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_ReBlX6NH9R0:{origin:"routes/about/index@site.tsx",displayName:"index_site_component",canonicalFilename:"s_reblx6nh9r0",hash:"ReBlX6NH9R0",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_TxCFOy819ag:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"QwikCityProvider_component",canonicalFilename:"s_txcfoy819ag",hash:"TxCFOy819ag",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_WmYC5H00wtI:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"QwikCityMockProvider_component",canonicalFilename:"s_wmyc5h00wti",hash:"WmYC5H00wtI",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_cTGLZV12wIY:{origin:"routes/terms/index.tsx",displayName:"terms_component",canonicalFilename:"s_ctglzv12wiy",hash:"cTGLZV12wIY",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_htFOus9HPNo:{origin:"components/ui/button-std.tsx",displayName:"ButtonStd_component",canonicalFilename:"s_htfous9hpno",hash:"htFOus9HPNo",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_iM00hJibi0U:{origin:"components/site/hero/hero.tsx",displayName:"Hero_component",canonicalFilename:"s_im00hjibi0u",hash:"iM00hJibi0U",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_mmJHJQmfzpQ:{origin:"routes/privacy/index.tsx",displayName:"privacy_component",canonicalFilename:"s_mmjhjqmfzpq",hash:"mmJHJQmfzpQ",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_qVqzm1QnNRM:{origin:"components/ui/message.tsx",displayName:"Message_component",canonicalFilename:"s_qvqzm1qnnrm",hash:"qVqzm1QnNRM",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_xz0IpC0v0Fc:{origin:"routes/services/index@site.tsx",displayName:"index_site_component",canonicalFilename:"s_xz0ipc0v0fc",hash:"xz0IpC0v0Fc",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_zrbrqoaqXSY:{origin:"components/router-head/router-head.tsx",displayName:"RouterHead_component",canonicalFilename:"s_zrbrqoaqxsy",hash:"zrbrqoaqXSY",ctxKind:"function",ctxName:"component$",captures:!1,parent:null},s_hO3b5j0m2ZI:{origin:"root.tsx",displayName:"root_component_useStyles",canonicalFilename:"s_ho3b5j0m2zi",hash:"hO3b5j0m2ZI",ctxKind:"function",ctxName:"useStyles$",captures:!1,parent:"s_3sccYCDd1Z0"},s_Nha0bvvmMwE:{origin:"components/site/logo/logo.tsx",displayName:"Logo_component_useStylesScoped",canonicalFilename:"s_nha0bvvmmwe",hash:"Nha0bvvmMwE",ctxKind:"function",ctxName:"useStylesScoped$",captures:!1,parent:"s_Pr2nqhxZcRI"},s_00bFc4tHmxA:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"useEndpoint_useResource",canonicalFilename:"s_00bfc4thmxa",hash:"00bFc4tHmxA",ctxKind:"function",ctxName:"useResource$",captures:!0,parent:null},s_2Eo7WCpaqI8:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"QwikCityProvider_component_useWatch",canonicalFilename:"s_2eo7wcpaqi8",hash:"2Eo7WCpaqI8",ctxKind:"function",ctxName:"useWatch$",captures:!0,parent:"s_TxCFOy819ag"},s_4lI93x0px88:{origin:"components/site/navigation/navigation.tsx",displayName:"Navigation_component_handleLogout",canonicalFilename:"s_4li93x0px88",hash:"4lI93x0px88",ctxKind:"function",ctxName:"$",captures:!0,parent:"s_D6gnpqBvIxc"},s_BA88xGcEQY8:{origin:"routes/signup/index.tsx",displayName:"signup_component_handleGitHubSignUp",canonicalFilename:"s_ba88xgceqy8",hash:"BA88xGcEQY8",ctxKind:"function",ctxName:"$",captures:!1,parent:"s_5aZSva0X07s"},s_RZswcvlb56s:{origin:"routes/login/index.tsx",displayName:"login_component_handleGitHubLogin",canonicalFilename:"s_rzswcvlb56s",hash:"RZswcvlb56s",ctxKind:"function",ctxName:"$",captures:!1,parent:"s_2gZ5kKqe2wY"},s_eKGt4z6xr5M:{origin:"routes/login/index.tsx",displayName:"login_component_handleEmailLogin",canonicalFilename:"s_ekgt4z6xr5m",hash:"eKGt4z6xr5M",ctxKind:"function",ctxName:"$",captures:!0,parent:"s_2gZ5kKqe2wY"},s_rJ6GlGrY00o:{origin:"routes/signup/index.tsx",displayName:"signup_component_handleEmailSignup",canonicalFilename:"s_rj6glgry00o",hash:"rJ6GlGrY00o",ctxKind:"function",ctxName:"$",captures:!0,parent:"s_5aZSva0X07s"},s_u0YVoxt2aTY:{origin:"../node_modules/@builder.io/qwik-city/index.qwik.mjs",displayName:"Link_component_useOnDocument",canonicalFilename:"s_u0yvoxt2aty",hash:"u0YVoxt2aTY",ctxKind:"function",ctxName:"useOnDocument",captures:!1,parent:"s_8gdLBszqbaM"}},mapping:{s_kzjavhDI3L0:"q-68e4676f.js",s_yiXwCC0m3jY:"q-68e4676f.js",s_EpaZ5qQ4Lg4:"q-68e4676f.js",s_04qKAmMDQjI:"q-e530f8a3.js",s_1VIjpu9TdEc:"q-15fc8530.js",s_3LSBotgjcd4:"q-ff658550.js",s_T9y0TUh8CDA:"q-15fc8530.js",s_j0ikt72I750:"q-3c23504d.js",s_1s5dhyML68g:"q-2cfb7f0a.js",s_2gZ5kKqe2wY:"q-2950d8ee.js",s_3sccYCDd1Z0:"q-15fc8530.js",s_4uBaEu4a7Ac:"q-e5be407a.js",s_5aZSva0X07s:"q-fa62a59c.js",s_7w7YYyGS1d0:"q-e530f8a3.js",s_8gdLBszqbaM:"q-68e4676f.js",s_AFVtdLQxhqM:"q-81515f3b.js",s_AKetNByE5TM:"q-578ca8c9.js",s_D6gnpqBvIxc:"q-ff658550.js",s_DWH5H0sHpx8:"q-3c23504d.js",s_GE1BvJV0HFk:"q-e5be407a.js",s_GG4uQ3LbNIU:"q-70aef0a7.js",s_M0MhZOWBKK8:"q-167c00f9.js",s_Pr2nqhxZcRI:"q-4ef2340b.js",s_ReBlX6NH9R0:"q-e5be407a.js",s_TxCFOy819ag:"q-69b15b53.js",s_WmYC5H00wtI:"q-a5b055a8.js",s_cTGLZV12wIY:"q-ab8b19ba.js",s_htFOus9HPNo:"q-4c75cd99.js",s_iM00hJibi0U:"q-e595db96.js",s_mmJHJQmfzpQ:"q-81230502.js",s_qVqzm1QnNRM:"q-a48c23ce.js",s_xz0IpC0v0Fc:"q-e5be407a.js",s_zrbrqoaqXSY:"q-17393e93.js",s_hO3b5j0m2ZI:"q-15fc8530.js",s_Nha0bvvmMwE:"q-4ef2340b.js",s_00bFc4tHmxA:"q-8c2a269b.js",s_2Eo7WCpaqI8:"q-69b15b53.js",s_4lI93x0px88:"q-ff658550.js",s_BA88xGcEQY8:"q-fa62a59c.js",s_RZswcvlb56s:"q-2950d8ee.js",s_eKGt4z6xr5M:"q-2950d8ee.js",s_rJ6GlGrY00o:"q-fa62a59c.js",s_u0YVoxt2aTY:"q-68e4676f.js"},bundles:{"q-0c7da9fc.js":{size:4451,imports:["q-ab9df92b.js"],dynamicImports:["q-578ca8c9.js","q-68e4676f.js","q-69b15b53.js","q-8c2a269b.js","q-a5b055a8.js"],origins:["@qwik-city-sw-register","node_modules/@builder.io/qwik-city/index.qwik.mjs"]},"q-15fc8530.js":{size:17853,imports:["q-0c7da9fc.js","q-1cffbadd.js","q-67252f11.js","q-9e1e3d3a.js","q-ab9df92b.js","q-b86c99a4.js"],dynamicImports:["q-17393e93.js"],origins:["src/components/router-head/router-head.tsx","src/entry_root.js","src/global.css?used&inline","src/s_1vijpu9tdec.js","src/s_3sccycdd1z0.js","src/s_ho3b5j0m2zi.js","src/s_t9y0tuh8cda.js"],symbols:["s_1VIjpu9TdEc","s_3sccYCDd1Z0","s_hO3b5j0m2ZI","s_T9y0TUh8CDA"]},"q-167c00f9.js":{size:106,imports:["q-ab9df92b.js"],origins:["src/entry_contact.js","src/s_m0mhzowbkk8.js"],symbols:["s_M0MhZOWBKK8"]},"q-17393e93.js":{size:639,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_RouterHead.js","src/s_zrbrqoaqxsy.js"],symbols:["s_zrbrqoaqXSY"]},"q-1cffbadd.js":{size:77614,imports:["q-ab9df92b.js","q-b86c99a4.js"],dynamicImports:["q-b86c99a4.js","q-b86c99a4.js","q-b86c99a4.js","q-b86c99a4.js"],origins:["node_modules/@supabase/functions-js/dist/module/FunctionsClient.js","node_modules/@supabase/functions-js/dist/module/helper.js","node_modules/@supabase/functions-js/dist/module/types.js","node_modules/@supabase/gotrue-js/dist/module/GoTrueAdminApi.js","node_modules/@supabase/gotrue-js/dist/module/GoTrueClient.js","node_modules/@supabase/gotrue-js/dist/module/lib/constants.js","node_modules/@supabase/gotrue-js/dist/module/lib/errors.js","node_modules/@supabase/gotrue-js/dist/module/lib/fetch.js","node_modules/@supabase/gotrue-js/dist/module/lib/helpers.js","node_modules/@supabase/gotrue-js/dist/module/lib/local-storage.js","node_modules/@supabase/gotrue-js/dist/module/lib/polyfills.js","node_modules/@supabase/gotrue-js/dist/module/lib/version.js","node_modules/@supabase/postgrest-js/dist/module/PostgrestBuilder.js","node_modules/@supabase/postgrest-js/dist/module/PostgrestClient.js","node_modules/@supabase/postgrest-js/dist/module/PostgrestFilterBuilder.js","node_modules/@supabase/postgrest-js/dist/module/PostgrestQueryBuilder.js","node_modules/@supabase/postgrest-js/dist/module/PostgrestTransformBuilder.js","node_modules/@supabase/postgrest-js/dist/module/constants.js","node_modules/@supabase/postgrest-js/dist/module/version.js","node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js","node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js","node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js","node_modules/@supabase/realtime-js/dist/module/lib/constants.js","node_modules/@supabase/realtime-js/dist/module/lib/push.js","node_modules/@supabase/realtime-js/dist/module/lib/serializer.js","node_modules/@supabase/realtime-js/dist/module/lib/timer.js","node_modules/@supabase/realtime-js/dist/module/lib/transformers.js","node_modules/@supabase/realtime-js/dist/module/lib/version.js","node_modules/@supabase/storage-js/dist/module/StorageClient.js","node_modules/@supabase/storage-js/dist/module/lib/constants.js","node_modules/@supabase/storage-js/dist/module/lib/errors.js","node_modules/@supabase/storage-js/dist/module/lib/fetch.js","node_modules/@supabase/storage-js/dist/module/lib/helpers.js","node_modules/@supabase/storage-js/dist/module/lib/version.js","node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js","node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js","node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js","node_modules/@supabase/supabase-js/dist/module/index.js","node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js","node_modules/@supabase/supabase-js/dist/module/lib/constants.js","node_modules/@supabase/supabase-js/dist/module/lib/fetch.js","node_modules/@supabase/supabase-js/dist/module/lib/helpers.js","node_modules/@supabase/supabase-js/dist/module/lib/version.js","node_modules/es5-ext/global.js","node_modules/websocket/lib/browser.js","node_modules/websocket/lib/version.js","node_modules/websocket/package.json","src/utils/supabase.ts"]},"q-1d1ea278.js":{size:307,imports:["q-ab9df92b.js"],dynamicImports:["q-e5be407a.js"],origins:["src/routes/shop/index@site.tsx"]},"q-2950d8ee.js":{size:5615,imports:["q-0c7da9fc.js","q-1cffbadd.js","q-ab9df92b.js","q-b86c99a4.js","q-dfa393e6.js","q-e6d839bc.js"],origins:["src/entry_login.js","src/s_2gz5kkqe2wy.js","src/s_ekgt4z6xr5m.js","src/s_rzswcvlb56s.js"],symbols:["s_2gZ5kKqe2wY","s_eKGt4z6xr5M","s_RZswcvlb56s"]},"q-2cfb7f0a.js":{size:109,imports:["q-ab9df92b.js"],origins:["src/entry_disclaimer.js","src/s_1s5dhyml68g.js"],symbols:["s_1s5dhyML68g"]},"q-337576b2.js":{size:169,imports:["q-ab9df92b.js"],dynamicImports:["q-4c75cd99.js"],origins:["src/components/ui/button-std.tsx"]},"q-3983ace9.js":{size:1664,imports:["q-ab9df92b.js"],dynamicImports:["q-1d1ea278.js","q-462a0958.js","q-4ad21a03.js","q-7c0f50e7.js","q-8766c9f1.js","q-933655d4.js","q-9de791b0.js","q-b4a1d39e.js","q-d9b32b7d.js","q-da8a015d.js","q-e6d839bc.js","q-f8953492.js","q-fb8e0cd7.js","q-ffa06541.js"],origins:["@qwik-city-plan"]},"q-3c23504d.js":{size:1572,imports:["q-0c7da9fc.js","q-1cffbadd.js","q-67252f11.js","q-9e1e3d3a.js","q-ab9df92b.js","q-b86c99a4.js"],origins:["src/entry_staging.js","src/s_dwh5h0shpx8.js","src/s_j0ikt72i750.js"],symbols:["s_DWH5H0sHpx8","s_j0ikt72I750"]},"q-45aab3b6.js":{size:2536,origins:["node_modules/@builder.io/qwik-city/service-worker.mjs","src/routes/service-worker.ts"]},"q-462a0958.js":{size:290,imports:["q-ab9df92b.js"],dynamicImports:["q-fa62a59c.js"],origins:["src/routes/signup/index.tsx"]},"q-4ad21a03.js":{size:296,imports:["q-ab9df92b.js"],dynamicImports:["q-e5be407a.js"],origins:["src/routes/services/index@site.tsx"]},"q-4c75cd99.js":{size:235,imports:["q-ab9df92b.js"],origins:["src/entry_ButtonStd.js","src/s_htfous9hpno.js"],symbols:["s_htFOus9HPNo"]},"q-4ef2340b.js":{size:775,imports:["q-ab9df92b.js"],origins:["src/components/site/logo/logo.css?used&inline","src/entry_Logo.js","src/s_nha0bvvmmwe.js","src/s_pr2nqhxzcri.js"],symbols:["s_Nha0bvvmMwE","s_Pr2nqhxZcRI"]},"q-578ca8c9.js":{size:269,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_RouterOutlet.js","src/s_aketnbye5tm.js"],symbols:["s_AKetNByE5TM"]},"q-67252f11.js":{size:28356,origins:["node_modules/axios/lib/adapters/adapters.js","node_modules/axios/lib/adapters/xhr.js","node_modules/axios/lib/axios.js","node_modules/axios/lib/cancel/CancelToken.js","node_modules/axios/lib/cancel/CanceledError.js","node_modules/axios/lib/cancel/isCancel.js","node_modules/axios/lib/core/Axios.js","node_modules/axios/lib/core/AxiosError.js","node_modules/axios/lib/core/AxiosHeaders.js","node_modules/axios/lib/core/InterceptorManager.js","node_modules/axios/lib/core/buildFullPath.js","node_modules/axios/lib/core/dispatchRequest.js","node_modules/axios/lib/core/mergeConfig.js","node_modules/axios/lib/core/settle.js","node_modules/axios/lib/core/transformData.js","node_modules/axios/lib/defaults/index.js","node_modules/axios/lib/defaults/transitional.js","node_modules/axios/lib/env/data.js","node_modules/axios/lib/helpers/AxiosURLSearchParams.js","node_modules/axios/lib/helpers/HttpStatusCode.js","node_modules/axios/lib/helpers/bind.js","node_modules/axios/lib/helpers/buildURL.js","node_modules/axios/lib/helpers/combineURLs.js","node_modules/axios/lib/helpers/cookies.js","node_modules/axios/lib/helpers/formDataToJSON.js","node_modules/axios/lib/helpers/isAbsoluteURL.js","node_modules/axios/lib/helpers/isAxiosError.js","node_modules/axios/lib/helpers/isURLSameOrigin.js","node_modules/axios/lib/helpers/null.js","node_modules/axios/lib/helpers/parseHeaders.js","node_modules/axios/lib/helpers/parseProtocol.js","node_modules/axios/lib/helpers/speedometer.js","node_modules/axios/lib/helpers/spread.js","node_modules/axios/lib/helpers/toFormData.js","node_modules/axios/lib/helpers/toURLEncodedForm.js","node_modules/axios/lib/helpers/validator.js","node_modules/axios/lib/platform/browser/classes/FormData.js","node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","node_modules/axios/lib/platform/browser/index.js","node_modules/axios/lib/utils.js","node_modules/axios/node_modules/form-data/lib/browser.js"]},"q-68e4676f.js":{size:1121,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_Link.js","src/s_8gdlbszqbam.js","src/s_epaz5qq4lg4.js","src/s_kzjavhdi3l0.js","src/s_u0yvoxt2aty.js","src/s_yixwcc0m3jy.js"],symbols:["s_8gdLBszqbaM","s_EpaZ5qQ4Lg4","s_kzjavhDI3L0","s_u0YVoxt2aTY","s_yiXwCC0m3jY"]},"q-69b15b53.js":{size:1657,imports:["q-0c7da9fc.js","q-ab9df92b.js"],dynamicImports:["q-3983ace9.js"],origins:["@builder.io/qwik/build","src/entry_QwikCityProvider.js","src/s_2eo7wcpaqi8.js","src/s_txcfoy819ag.js"],symbols:["s_2Eo7WCpaqI8","s_TxCFOy819ag"]},"q-70aef0a7.js":{size:698,imports:["q-0c7da9fc.js","q-81515f3b.js","q-ab9df92b.js"],origins:["src/entry_Footer.js","src/s_gg4uq3lbniu.js"],symbols:["s_GG4uQ3LbNIU"]},"q-7c0f50e7.js":{size:295,imports:["q-ab9df92b.js"],dynamicImports:["q-e5be407a.js"],origins:["src/routes/about/index@site.tsx"]},"q-81230502.js":{size:106,imports:["q-ab9df92b.js"],origins:["src/entry_privacy.js","src/s_mmjhjqmfzpq.js"],symbols:["s_mmJHJQmfzpQ"]},"q-81515f3b.js":{size:912,imports:["q-ab9df92b.js"],dynamicImports:["q-70aef0a7.js","q-ff658550.js"],origins:["src/components/site/footer/footer.tsx","src/components/site/navigation/navigation.tsx","src/entry_layout_site.js","src/s_afvtdlqxhqm.js"],symbols:["s_AFVtdLQxhqM"]},"q-8766c9f1.js":{size:400,imports:["q-ab9df92b.js"],dynamicImports:["q-3c23504d.js"],origins:["src/routes/login/staging/index.tsx"]},"q-8c2a269b.js":{size:200,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_useEndpoint.js","src/s_00bfc4thmxa.js"],symbols:["s_00bFc4tHmxA"]},"q-933655d4.js":{size:291,imports:["q-ab9df92b.js"],dynamicImports:["q-167c00f9.js"],origins:["src/routes/contact/index.tsx"]},"q-9de791b0.js":{size:112,imports:["q-ab9df92b.js"],dynamicImports:["q-45aab3b6.js"],origins:["@qwik-city-entries"]},"q-9e1e3d3a.js":{size:319,imports:["q-ab9df92b.js"],dynamicImports:["q-15fc8530.js"],origins:["src/root.tsx"]},"q-a48c23ce.js":{size:563,imports:["q-ab9df92b.js"],origins:["src/entry_Message.js","src/s_qvqzm1qnnrm.js"],symbols:["s_qVqzm1QnNRM"]},"q-a5b055a8.js":{size:468,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_QwikCityMockProvider.js","src/s_wmyc5h00wti.js"],symbols:["s_WmYC5H00wtI"]},"q-ab8b19ba.js":{size:104,imports:["q-ab9df92b.js"],origins:["src/entry_terms.js","src/s_ctglzv12wiy.js"],symbols:["s_cTGLZV12wIY"]},"q-ab9df92b.js":{size:43727,origins:["\0vite/preload-helper","node_modules/@builder.io/qwik/core.min.mjs"]},"q-b4a1d39e.js":{size:322,imports:["q-ab9df92b.js"],dynamicImports:["q-e5be407a.js"],origins:["src/routes/index@site.tsx"]},"q-b86c99a4.js":{size:9457,origins:["\0/Users/shaun/Code/TUTORIALS/CODERAIDERS/frontend/node_modules/cross-fetch/dist/browser-ponyfill.js?commonjs-module","\0commonjsHelpers.js","node_modules/cross-fetch/dist/browser-ponyfill.js"]},"q-d9b32b7d.js":{size:264,imports:["q-ab9df92b.js"],dynamicImports:["q-ab8b19ba.js"],origins:["src/routes/terms/index.tsx"]},"q-da8a015d.js":{size:193,imports:["q-ab9df92b.js"],dynamicImports:["q-81515f3b.js"],origins:["src/routes/layout-site.tsx"]},"q-dfa393e6.js":{size:2921,imports:["q-ab9df92b.js","q-b86c99a4.js"],dynamicImports:["q-a48c23ce.js"],origins:["\0/Users/shaun/Code/TUTORIALS/CODERAIDERS/frontend/node_modules/dotenv/lib/main.js?commonjs-module","\0__vite-browser-external?commonjs-proxy","__vite-browser-external","node_modules/dotenv/lib/main.js","node_modules/dotenv/package.json","src/components/ui/message.tsx","src/utils/helpers.ts"]},"q-e530f8a3.js":{size:841,imports:["q-0c7da9fc.js","q-ab9df92b.js"],origins:["src/entry_dashboard.js","src/s_04qkammdqji.js","src/s_7w7yyygs1d0.js"],symbols:["s_04qKAmMDQjI","s_7w7YYyGS1d0"]},"q-e595db96.js":{size:1068,imports:["q-0c7da9fc.js","q-337576b2.js","q-ab9df92b.js"],origins:["src/entry_Hero.js","src/s_im00hjibi0u.js"],symbols:["s_iM00hJibi0U"]},"q-e5be407a.js":{size:636,imports:["q-ab9df92b.js"],dynamicImports:["q-e595db96.js"],origins:["src/components/site/hero/hero.tsx","src/entry_index_site.js","src/s_4ubaeu4a7ac.js","src/s_ge1bvjv0hfk.js","src/s_reblx6nh9r0.js","src/s_xz0ipc0v0fc.js"],symbols:["s_4uBaEu4a7Ac","s_GE1BvJV0HFk","s_ReBlX6NH9R0","s_xz0IpC0v0Fc"]},"q-e6d839bc.js":{size:319,imports:["q-ab9df92b.js"],dynamicImports:["q-2950d8ee.js"],origins:["src/routes/login/index.tsx"]},"q-f8953492.js":{size:410,imports:["q-ab9df92b.js"],dynamicImports:["q-e530f8a3.js"],origins:["src/routes/members/dashboard/index.tsx"]},"q-fa62a59c.js":{size:6346,imports:["q-0c7da9fc.js","q-1cffbadd.js","q-ab9df92b.js","q-b86c99a4.js","q-dfa393e6.js","q-e6d839bc.js"],origins:["src/entry_signup.js","src/s_5azsva0x07s.js","src/s_ba88xgceqy8.js","src/s_rj6glgry00o.js"],symbols:["s_5aZSva0X07s","s_BA88xGcEQY8","s_rJ6GlGrY00o"]},"q-fb8e0cd7.js":{size:267,imports:["q-ab9df92b.js"],dynamicImports:["q-2cfb7f0a.js"],origins:["src/routes/disclaimer/index.tsx"]},"q-ff658550.js":{size:2305,imports:["q-0c7da9fc.js","q-1cffbadd.js","q-337576b2.js","q-9e1e3d3a.js","q-ab9df92b.js","q-b86c99a4.js"],dynamicImports:["q-4ef2340b.js"],origins:["src/components/site/logo/logo.tsx","src/entry_Navigation.js","src/s_3lsbotgjcd4.js","src/s_4li93x0px88.js","src/s_d6gnpqbvixc.js"],symbols:["s_3LSBotgjcd4","s_4lI93x0px88","s_D6gnpqBvIxc"]},"q-ffa06541.js":{size:270,imports:["q-ab9df92b.js"],dynamicImports:["q-81230502.js"],origins:["src/routes/privacy/index.tsx"]}},injections:[],version:"1",options:{target:"client",buildMode:"production",forceFullBuild:!0,entryStrategy:{type:"smart"}},platform:{qwik:"0.16.1",vite:"",rollup:"3.8.1",env:"node",os:"darwin",node:"18.11.0"}};function d(s){return o(e(i,{},"pY_0"),{manifest:a,...s,containerAttributes:{lang:"en-us",...s.containerAttributes}})}export{d as default};
2 |
--------------------------------------------------------------------------------
/frontend/server/package.json:
--------------------------------------------------------------------------------
1 | {"type":"module"}
--------------------------------------------------------------------------------
/frontend/src/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/src/.DS_Store
--------------------------------------------------------------------------------
/frontend/src/components/router-head/router-head.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import { useDocumentHead, useLocation } from '@builder.io/qwik-city';
3 |
4 | /**
5 | * The RouterHead component is placed inside of the document `` element.
6 | */
7 | export const RouterHead = component$(() => {
8 | const head = useDocumentHead();
9 | const loc = useLocation();
10 |
11 | return (
12 | <>
13 | {head.title}
14 |
15 |
16 |
17 |
18 |
19 | {head.meta.map((m) => (
20 |
21 | ))}
22 |
23 | {head.links.map((l) => (
24 |
25 | ))}
26 |
27 | {head.styles.map((s) => (
28 |
29 | ))}
30 | >
31 | );
32 | });
33 |
--------------------------------------------------------------------------------
/frontend/src/components/site/footer/footer.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 | import { Link } from "@builder.io/qwik-city";
3 |
4 | export const links = [
5 | { label: "About", link: "/about" },
6 | { label: "Shop", link: "/shop" },
7 | { label: "Services", link: "/services" },
8 | { label: "Privacy", link: "/privacy" },
9 | { label: "Terms", link: "/terms" },
10 | { label: "Disclaimer", link: "/disclaimer" },
11 | { label: "Contact", link: "/contact" },
12 | ];
13 |
14 | export const Footer = component$(() => {
15 | return (
16 |
41 | );
42 | });
43 |
--------------------------------------------------------------------------------
/frontend/src/components/site/hero/hero.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 | import { ButtonStd } from "~/components/ui/button-std";
3 | import { Link } from "@builder.io/qwik-city";
4 |
5 | export const Hero = component$(() => {
6 | return (
7 |
8 |
9 |
12 |
15 |
16 | ~ Picasso ~
17 |
18 |
19 | Get the Developer Resources Your Need
20 |
21 |
22 |
26 |
27 |
28 |
29 | );
30 | });
31 |
--------------------------------------------------------------------------------
/frontend/src/components/site/logo/logo.css:
--------------------------------------------------------------------------------
1 | .logo-title {
2 | font-weight: 350;
3 | font-stretch: 125%;
4 | }
5 |
6 | .logo-subtitle {
7 | font-weight: 400;
8 | font-stretch: 95%;
9 | }
10 |
--------------------------------------------------------------------------------
/frontend/src/components/site/logo/logo.tsx:
--------------------------------------------------------------------------------
1 | import { component$, useStylesScoped$ } from "@builder.io/qwik";
2 | import styles from './logo.css?inline';
3 |
4 |
5 | export const Logo = component$(() => {
6 | useStylesScoped$(styles);
7 |
8 | return (
9 |
10 |
11 |

12 |
13 |
14 |
Code Raiders
15 |
Shut up and code
16 |
17 |
18 | );
19 | });
20 |
--------------------------------------------------------------------------------
/frontend/src/components/site/navigation/navigation.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | component$,
3 | useSignal,
4 | useClientEffect$,
5 | useContext,
6 | $
7 | } from "@builder.io/qwik";
8 | import { Logo } from "../logo/logo";
9 | import { ButtonStd } from "~/components/ui/button-std";
10 | import { Link, useNavigate } from "@builder.io/qwik-city";
11 | import { UserSessionContext } from "~/root";
12 | import { supabase } from "~/utils/supabase";
13 |
14 | export const Navigation = component$(() => {
15 | const userSession: any = useContext(UserSessionContext)
16 | const isSession = useSignal(false);
17 | const nav = useNavigate()
18 |
19 | // Handle Logout
20 | const handleLogout = $(async () => {
21 | // !!! Handle serverside logout !!!
22 |
23 |
24 | // Handle client side
25 | await supabase.auth.signOut();
26 | nav.path = "/"
27 | })
28 |
29 | useClientEffect$(({ track }) => {
30 | track(userSession)
31 | if (userSession?.isLoggedIn) {
32 | isSession.value = true;
33 | } else {
34 | isSession.value = false;
35 | }
36 | })
37 |
38 | return (
39 |
92 | );
93 | });
94 |
--------------------------------------------------------------------------------
/frontend/src/components/svgs/grid.tsx:
--------------------------------------------------------------------------------
1 | // https://samherbert.net/svg-loaders/
2 | import { component$ } from "@builder.io/qwik";
3 |
4 | export const Grid = component$(() => {
5 | return (
6 |
104 | );
105 | });
106 |
--------------------------------------------------------------------------------
/frontend/src/components/ui/button-action.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 | import { Grid } from "../svgs/grid";
3 |
4 | interface ItemProps {
5 | isDisabled?: boolean;
6 | isLoading?: boolean;
7 | isLoadingLabel?: string;
8 | handleFunction?: any;
9 | label: string;
10 | }
11 |
12 | export const ButtonAction = component$((props: ItemProps) => {
13 | return (
14 |
30 | );
31 | });
32 |
--------------------------------------------------------------------------------
/frontend/src/components/ui/button-std.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 |
3 | interface ItemProps {
4 | title: string;
5 | classText?: string;
6 | handleFunction?: any;
7 | noBackground?: boolean;
8 | }
9 |
10 | export const ButtonStd = component$((props: ItemProps) => {
11 |
12 | return (
13 |
22 | );
23 | });
24 |
--------------------------------------------------------------------------------
/frontend/src/components/ui/message.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 |
3 | interface Message {
4 | message: string | undefined;
5 | status: string;
6 | }
7 |
8 | type Props = {
9 | message: Message;
10 | classText?: string;
11 | };
12 |
13 | export const Message = component$(({ message, classText }: Props) => {
14 | return (
15 | <>
16 | {message.message && (
17 |
31 | {message.message}
32 |
33 | )}
34 | >
35 | );
36 | });
37 |
--------------------------------------------------------------------------------
/frontend/src/entry.dev.tsx:
--------------------------------------------------------------------------------
1 | /*
2 | * WHAT IS THIS FILE?
3 | *
4 | * Development entry point using only client-side modules:
5 | * - Do not use this mode in production!
6 | * - No SSR
7 | * - No portion of the application is pre-rendered on the server.
8 | * - All of the application is running eagerly in the browser.
9 | * - More code is transferred to the browser than in SSR mode.
10 | * - Optimizer/Serialization/Deserialization code is not exercised!
11 | */
12 | import { render, RenderOptions } from '@builder.io/qwik';
13 | import Root from './root';
14 |
15 | export default function (opts: RenderOptions) {
16 | return render(document, , opts);
17 | }
18 |
--------------------------------------------------------------------------------
/frontend/src/entry.express.tsx:
--------------------------------------------------------------------------------
1 | /*
2 | * WHAT IS THIS FILE?
3 | *
4 | * It's the entry point for the express server when building for production.
5 | *
6 | * Learn more about the cloudflare integration here:
7 | * - https://qwik.builder.io/qwikcity/adaptors/node/
8 | *
9 | */
10 | import { createQwikCity } from '@builder.io/qwik-city/middleware/node';
11 | import qwikCityPlan from '@qwik-city-plan';
12 | import render from './entry.ssr';
13 | import express from 'express';
14 | import { fileURLToPath } from 'node:url';
15 | import { join } from 'node:path';
16 | import compression from 'compression';
17 |
18 | // Directories where the static assets are located
19 | const distDir = join(fileURLToPath(import.meta.url), '..', '..', 'dist');
20 | const buildDir = join(distDir, 'build');
21 |
22 | // Allow for dynamic port
23 | const PORT = process.env.PORT ?? 3000;
24 |
25 | // Create the Qwik City express middleware
26 | const { router, notFound } = createQwikCity({ render, qwikCityPlan });
27 |
28 | // Create the express server
29 | // https://expressjs.com/
30 | const app = express();
31 |
32 | // Enable gzip compression
33 | app.use(compression());
34 |
35 | // Static asset handlers
36 | // https://expressjs.com/en/starter/static-files.html
37 | app.use(`/build`, express.static(buildDir, { immutable: true, maxAge: '1y' }));
38 | app.use(express.static(distDir, { redirect: false }));
39 |
40 | // Use Qwik City's page and endpoint request handler
41 | app.use(router);
42 |
43 | // Use Qwik City's 404 handler
44 | app.use(notFound);
45 |
46 | // Start the express server
47 | app.listen(PORT, () => {
48 | /* eslint-disable */
49 | console.log(`Server starter: http://localhost:${PORT}/`);
50 | });
51 |
--------------------------------------------------------------------------------
/frontend/src/entry.preview.tsx:
--------------------------------------------------------------------------------
1 | /*
2 | * WHAT IS THIS FILE?
3 | *
4 | * It's the bundle entry point for `npm run preview`.
5 | * That is, serving your app built in production mode.
6 | *
7 | * Feel free to modify this file, but don't remove it!
8 | *
9 | * Learn more about Vite's preview command:
10 | * - https://vitejs.dev/config/preview-options.html#preview-options
11 | *
12 | */
13 | import { createQwikCity } from '@builder.io/qwik-city/middleware/node';
14 | import render from './entry.ssr';
15 | import qwikCityPlan from '@qwik-city-plan';
16 |
17 | /**
18 | * The default export is the QwikCity adaptor used by Vite preview.
19 | */
20 | export default createQwikCity({ render, qwikCityPlan });
21 |
--------------------------------------------------------------------------------
/frontend/src/entry.ssr.tsx:
--------------------------------------------------------------------------------
1 | /**
2 | * WHAT IS THIS FILE?
3 | *
4 | * SSR entry point, in all cases the application is render outside the browser, this
5 | * entry point will be the common one.
6 | *
7 | * - Server (express, cloudflare...)
8 | * - npm run start
9 | * - npm run preview
10 | * - npm run build
11 | *
12 | */
13 | import { renderToStream, RenderToStreamOptions } from '@builder.io/qwik/server';
14 | import { manifest } from '@qwik-client-manifest';
15 | import Root from './root';
16 |
17 | export default function (opts: RenderToStreamOptions) {
18 | return renderToStream(, {
19 | manifest,
20 | ...opts,
21 | // Use container attributes to set attributes on the html tag.
22 | containerAttributes: {
23 | lang: 'en-us',
24 | ...opts.containerAttributes,
25 | },
26 | });
27 | }
28 |
--------------------------------------------------------------------------------
/frontend/src/global.css:
--------------------------------------------------------------------------------
1 | /* */
2 |
3 | @tailwind base;
4 | @tailwind components;
5 | @tailwind utilities;
6 |
7 | @keyframes fadeIn {
8 | 0% { opacity: 0; }
9 | 100% { opacity: 1; }
10 | }
11 |
12 | body {
13 | margin: 0px;
14 | font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
15 | background-color: rgb(242, 242, 242);
16 | }
17 |
18 | a {
19 | appearance: none;
20 | }
21 |
22 | .fade-in {
23 | animation: fadeIn 0.5s;
24 | -webkit-animation: fadeIn 0.5s;
25 | -moz-animation: fadeIn 0.5s;
26 | -o-animation: fadeIn 0.5s;
27 | -ms-animation: fadeIn 0.5s;
28 | }
29 |
--------------------------------------------------------------------------------
/frontend/src/root.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | component$,
3 | useStyles$,
4 | useClientEffect$,
5 | useStore,
6 | useContextProvider,
7 | createContext,
8 | } from "@builder.io/qwik";
9 | import {
10 | QwikCityProvider,
11 | RouterOutlet,
12 | ServiceWorkerRegister,
13 | } from "@builder.io/qwik-city";
14 | import { RouterHead } from "./components/router-head/router-head";
15 | import { supabase } from "./utils/supabase";
16 | import axios from "axios";
17 |
18 | import globalStyles from "./global.css?inline";
19 |
20 | export const UserSessionContext = createContext("user-session");
21 |
22 | export default component$(() => {
23 | const userSession: any = useStore({ userId: "", isLoggedIn: false });
24 |
25 | useStyles$(globalStyles);
26 |
27 | useClientEffect$(async () => {
28 | const { data } = await supabase.auth.getUser();
29 | if (data && data?.user?.id) {
30 | console.log(data)
31 | // Set Auth State Context
32 | userSession.userId = data.user.id;
33 | userSession.isLoggedIn = true;
34 | } else {
35 | // Set Auth State Context
36 | userSession.userId = "";
37 | userSession.isLoggedIn = false;
38 | }
39 | });
40 |
41 | useClientEffect$(async () => {
42 | const { data: authListener } = supabase.auth.onAuthStateChange(
43 | async (event: string, session: any) => {
44 | console.log(event);
45 |
46 | if (
47 | event === "SIGNED_IN" &&
48 | session?.access_token &&
49 | session?.refresh_token
50 | ) {
51 | // Send cookies to server
52 | const body = {
53 | accessToken: session.access_token,
54 | refreshToken: session.refresh_token,
55 | };
56 |
57 | // Send request to server
58 | await axios
59 | .post("/api_v1/store-auth", body, {
60 | withCredentials: true,
61 | })
62 | .then((res) => {
63 | console.log(res.data);
64 |
65 | // Set Auth State Context
66 | userSession.userId = session?.user?.id;
67 | userSession.isLoggedIn = true;
68 | })
69 | .catch((err) => {
70 | console.log(err);
71 | });
72 | }
73 |
74 | if (event === "SIGNED_OUT") {
75 | // Sign out user on server
76 | await axios
77 | .get("/api_v1/logout")
78 | .then((res) => {
79 | console.log(res.data);
80 |
81 | // Set Auth State Context
82 | userSession.userId = "";
83 | userSession.isLoggedIn = false;
84 | })
85 | .catch((err) => {
86 | console.log(err);
87 | });
88 | }
89 | }
90 | );
91 |
92 | // Cleanup event listener
93 | return () => {
94 | authListener?.subscription?.unsubscribe();
95 | };
96 | });
97 |
98 | // Pass state to children via context
99 | useContextProvider(UserSessionContext, userSession);
100 | return (
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 | );
113 | });
114 |
--------------------------------------------------------------------------------
/frontend/src/routes/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/src/routes/.DS_Store
--------------------------------------------------------------------------------
/frontend/src/routes/about/index@site.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from '@builder.io/qwik-city';
3 |
4 | export default component$(() => {
5 | return (
6 |
7 | About Page
8 |
9 | );
10 | });
11 |
12 | export const head: DocumentHead = {
13 | title: 'About',
14 | meta: [
15 | {
16 | name: 'description',
17 | content: 'Learn all about the Code Raiders initialive',
18 | },
19 | ],
20 | };
--------------------------------------------------------------------------------
/frontend/src/routes/contact/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from "@builder.io/qwik-city";
3 |
4 | export default component$(() => {
5 | return Contact
6 | });
7 |
8 | export const head: DocumentHead = {
9 | title: "Contact us",
10 | meta: [
11 | {
12 | name: "description",
13 | content:
14 | "Contact admin team at Code Raiders",
15 | },
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/frontend/src/routes/disclaimer/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from "@builder.io/qwik-city";
3 |
4 | export default component$(() => {
5 | return Disclaimer
6 | });
7 |
8 | export const head: DocumentHead = {
9 | title: "Disclaimer",
10 | meta: [
11 | {
12 | name: "description",
13 | content:
14 | "Disclaimer",
15 | },
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/frontend/src/routes/index@site.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from "@builder.io/qwik";
2 | import type { DocumentHead } from "@builder.io/qwik-city";
3 | // import { Link } from "@builder.io/qwik-city";
4 | import { Hero } from "~/components/site/hero/hero";
5 | // import { ButtonAction } from "~/components/ui/button-action";
6 |
7 | export default component$(() => {
8 | return (
9 | <>
10 |
11 |
12 | {/*
13 |
14 |
15 | */}
16 |
17 |
DASHBOARD
18 |
19 | >
20 | );
21 | });
22 |
23 | export const head: DocumentHead = {
24 | title: "Code Raiders",
25 | meta: [
26 | {
27 | name: "description",
28 | content:
29 | "Code, training and applications for making development exciting",
30 | },
31 | ],
32 | };
33 |
--------------------------------------------------------------------------------
/frontend/src/routes/layout-site.tsx:
--------------------------------------------------------------------------------
1 | import { component$, Slot } from '@builder.io/qwik';
2 | import { Navigation } from '~/components/site/navigation/navigation';
3 | import { Footer } from '~/components/site/footer/footer';
4 |
5 | export default component$(() => {
6 | return (
7 | <>
8 |
9 |
10 |
13 |
14 |
15 | >
16 | );
17 | });
18 |
--------------------------------------------------------------------------------
/frontend/src/routes/login/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/10085b6e9cb3815109e7e7b495f03f241ef90d84/frontend/src/routes/login/.DS_Store
--------------------------------------------------------------------------------
/frontend/src/routes/login/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$, useStore, useSignal, $ } from "@builder.io/qwik";
2 | import { Link } from "@builder.io/qwik-city";
3 | import { validateEmail } from "~/utils/helpers";
4 | import { supabase } from "~/utils/supabase";
5 | import { Message } from "~/components/ui/message";
6 |
7 | export const REDIRECT_URL = "http://localhost:80/login/staging"
8 |
9 | export default component$(() => {
10 | const message: any = useStore({ message: undefined, status: "error" });
11 | const isLoading = useSignal(false);
12 | // const loc = useLocation();
13 |
14 | // Handle GitHub Login
15 | const handleGitHubLogin = $(async () => {
16 | const { data, error } = await supabase.auth.signInWithOAuth({
17 | provider: "github",
18 | options: {
19 | redirectTo: REDIRECT_URL,
20 | },
21 | });
22 | console.log(data);
23 | console.log("Error: ", error);
24 | });
25 |
26 | // Handle email signup
27 | const handleEmailLogin = $(async (event: any) => {
28 | // Initialize resets
29 | message.message = undefined;
30 | message.status = "error";
31 | isLoading.value = true;
32 |
33 | // Value extraction
34 | const email = event.target.email.value;
35 | const isEmailValid = validateEmail(email);
36 |
37 | // Email validation
38 | if (!isEmailValid) {
39 | message.message = "You must have a valid email";
40 | isLoading.value = false;
41 | return;
42 | }
43 |
44 | // Create user in supabase
45 | const { data, error } = await supabase.auth.signInWithOtp({
46 | email: email,
47 | options: {
48 | emailRedirectTo: REDIRECT_URL,
49 | },
50 | });
51 |
52 | // Confirm login
53 | if (data && !error) {
54 | message.message = "Success. Please check your email/spam folder";
55 | message.status = "success";
56 | isLoading.value = false;
57 | return;
58 | } else {
59 | message.message =
60 | "There was a problem creating a user. " + error?.message;
61 | isLoading.value = false;
62 | return;
63 | }
64 | });
65 |
66 | return (
67 |
68 |
69 |
70 |

71 |
72 |
73 | Log in
74 |
75 |
76 | Or{" "}
77 |
81 | create an account
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
107 |
108 |
109 |
127 |
128 |
129 |
130 |
133 |
134 |
135 | Or log in with email
136 |
137 |
138 |
139 |
140 |
202 |
203 |
204 |
205 |
206 | );
207 | });
208 |
--------------------------------------------------------------------------------
/frontend/src/routes/login/staging/index.tsx:
--------------------------------------------------------------------------------
1 | import {
2 | component$,
3 | useClientEffect$,
4 | useSignal,
5 | useContext,
6 | } from "@builder.io/qwik";
7 | import type { DocumentHead } from "@builder.io/qwik-city";
8 | import { useNavigate } from "@builder.io/qwik-city";
9 | import { Link } from "@builder.io/qwik-city";
10 | import { supabase } from "~/utils/supabase";
11 | import { UserSessionContext } from "~/root";
12 | import axios from "axios";
13 |
14 | export default component$(() => {
15 | const userSession: any = useContext(UserSessionContext);
16 | const isProtectedOk = useSignal(false);
17 | const nav = useNavigate();
18 |
19 | useClientEffect$(async () => {
20 | const timeout = setTimeout(async () => {
21 | const { data, error } = await supabase.auth.getUser();
22 |
23 | const {
24 | data: { session },
25 | } = await supabase.auth.getSession();
26 |
27 | if (session) {
28 | // Send cookies to server
29 | const body = {
30 | accessToken: session.access_token,
31 | refreshToken: session.refresh_token,
32 | };
33 |
34 | // Send request to server
35 | await axios
36 | .post("/api_v1/store-auth", body, {
37 | withCredentials: true,
38 | })
39 | .then((res) => {
40 | console.log(res.data);
41 |
42 | // Set Auth State Context
43 | userSession.userId = session?.user?.id;
44 | userSession.isLoggedIn = true;
45 | })
46 | .catch((err) => {
47 | console.log(err);
48 | });
49 | }
50 |
51 | if (data?.user?.id && !error) {
52 | isProtectedOk.value = true;
53 | userSession.userId = data?.user?.id;
54 | userSession.isLoggedIn = true;
55 | nav.path = "/members/dashboard";
56 | } else {
57 | console.error(error);
58 | userSession.userId = "";
59 | userSession.isLoggedIn = false;
60 | nav.path = "/login";
61 | }
62 | }, 500);
63 |
64 | return () => {
65 | clearTimeout(timeout);
66 | };
67 | });
68 |
69 | return (
70 | <>
71 |
72 | {isProtectedOk && (
73 | <>
74 | Redirecting to
75 |
76 |
77 |
78 | >
79 | )}
80 | {!isProtectedOk && <>Please log in>}
81 |
82 | >
83 | );
84 | });
85 |
86 | export const head: DocumentHead = {
87 | title: "Staging",
88 | meta: [
89 | {
90 | name: "description",
91 | content: "Authorization check for Code Raiders",
92 | },
93 | ],
94 | };
95 |
--------------------------------------------------------------------------------
/frontend/src/routes/members/dashboard/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$, useSignal, useClientEffect$ } from "@builder.io/qwik";
2 | import { useEndpoint, useNavigate } from "@builder.io/qwik-city";
3 | import { Link } from "@builder.io/qwik-city";
4 | import type { DocumentHead } from "@builder.io/qwik-city";
5 | import type { RequestHandler } from "@builder.io/qwik-city";
6 | import { getUserProfile } from "~/utils/helpers";
7 |
8 | interface SessionData {
9 | isSession: boolean;
10 | user: any;
11 | role: string;
12 | }
13 |
14 | // Server Side Get Session
15 | export const onGet: RequestHandler = async ({
16 | response,
17 | cookie,
18 | }) => {
19 | const profile = await getUserProfile(cookie);
20 |
21 | if (profile?.role !== "free") {
22 | throw response.redirect("/login", 300);
23 | }
24 |
25 | // Return profile
26 | return profile;
27 | };
28 |
29 | // Client Side Component
30 | export default component$(() => {
31 | const sessionData = useEndpoint();
32 | const isShow = useSignal(false);
33 | const nav = useNavigate();
34 |
35 | useClientEffect$(async () => {
36 | const session = await sessionData?.value;
37 | if (!session?.isSession) {
38 | nav.path = "/login";
39 | } else {
40 | isShow.value = true;
41 | }
42 | });
43 |
44 | return (
45 |
46 | {isShow.value && (
47 |
48 |
Welcome to the Dashboard Page
49 |
50 |
53 |
54 |
55 | )}
56 |
57 | );
58 | });
59 |
60 | export const head: DocumentHead = {
61 | title: "Dashboard",
62 | meta: [
63 | {
64 | name: "description",
65 | content: "Members dashboard for Code Raiders",
66 | },
67 | ],
68 | };
69 |
--------------------------------------------------------------------------------
/frontend/src/routes/privacy/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from "@builder.io/qwik-city";
3 |
4 | export default component$(() => {
5 | return Privacy
6 | });
7 |
8 | export const head: DocumentHead = {
9 | title: "Privacy Policy",
10 | meta: [
11 | {
12 | name: "description",
13 | content:
14 | "Privacy Policy",
15 | },
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/frontend/src/routes/service-worker.ts:
--------------------------------------------------------------------------------
1 | /*
2 | * WHAT IS THIS FILE?
3 | *
4 | * The service-worker.ts file is used to have state of the art prefetching.
5 | * https://qwik.builder.io/qwikcity/prefetching/overview/
6 | *
7 | * Qwik uses a service worker to speed up your site and reduce latency, ie, not used in the traditional way of offline.
8 | * You can also use this file to add more functionality that runs in the service worker.
9 | */
10 | import { setupServiceWorker } from '@builder.io/qwik-city/service-worker';
11 |
12 | setupServiceWorker();
13 |
14 | addEventListener('install', () => self.skipWaiting());
15 |
16 | addEventListener('activate', () => self.clients.claim());
17 |
18 | declare const self: ServiceWorkerGlobalScope;
19 |
--------------------------------------------------------------------------------
/frontend/src/routes/services/index@site.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from '@builder.io/qwik-city';
3 |
4 | export default component$(() => {
5 | return (
6 |
7 | Services Page
8 |
9 | );
10 | });
11 |
12 | export const head: DocumentHead = {
13 | title: 'Services',
14 | meta: [
15 | {
16 | name: 'description',
17 | content: 'Code downloads, consulting, apps and more',
18 | },
19 | ],
20 | };
--------------------------------------------------------------------------------
/frontend/src/routes/shop/index@site.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from '@builder.io/qwik-city';
3 |
4 | export default component$(() => {
5 | return (
6 |
7 | Shop Page
8 |
9 | );
10 | });
11 |
12 | export const head: DocumentHead = {
13 | title: 'Shop',
14 | meta: [
15 | {
16 | name: 'description',
17 | content: 'Purchase one off code downloads to make your life easier',
18 | },
19 | ],
20 | };
--------------------------------------------------------------------------------
/frontend/src/routes/signup/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$, useStore, useSignal, $ } from "@builder.io/qwik";
2 | import { Link } from "@builder.io/qwik-city";
3 | import { Message } from "~/components/ui/message";
4 | import { validateEmail } from "~/utils/helpers";
5 | import { supabase } from "~/utils/supabase";
6 | import { REDIRECT_URL } from "../login";
7 |
8 | export default component$(() => {
9 | const message: any = useStore({ message: undefined, status: "error" });
10 | const isLoading = useSignal(false);
11 | // const loc = useLocation();
12 |
13 | // Handle GitHub Login
14 | const handleGitHubSignUp= $(async () => {
15 | const { data, error } = await supabase.auth.signInWithOAuth({
16 | provider: "github",
17 | options: {
18 | redirectTo: REDIRECT_URL,
19 | },
20 | });
21 | console.log(data);
22 | console.log("Error: ", error);
23 | });
24 |
25 | // Handle email signup
26 | const handleEmailSignup = $(async (event: any) => {
27 | // Initialize resets
28 | message.message = undefined;
29 | message.status = "error";
30 | isLoading.value = true;
31 |
32 | // Value extraction
33 | const email = event.target.email.value;
34 | const isTerms = event.target.terms.checked;
35 | const isEmailValid = validateEmail(email);
36 |
37 | // Email validation
38 | if (!isEmailValid) {
39 | message.message = "You must have a valid email";
40 | isLoading.value = false;
41 | return;
42 | }
43 |
44 | // Terms validation
45 | if (!isTerms) {
46 | message.message =
47 | "You must agree to our terms, privacy and disclaimer before signing up";
48 | isLoading.value = false;
49 | return;
50 | }
51 |
52 | // Set password
53 | const timestamp = Date.now();
54 | const pwd = Math.floor(Math.random() * 1000000) + email + timestamp;
55 |
56 | // Create user in supabase
57 | const { data, error } = await supabase.auth.signUp({
58 | email: email,
59 | password: pwd,
60 | });
61 |
62 | // Confirm signup
63 | if (data?.user?.id) {
64 | message.message = "Success. Please check your email/spam folder";
65 | message.status = "success";
66 | isLoading.value = false;
67 | return;
68 | } else {
69 | message.message =
70 | "There was a problem creating a user. " + error?.message;
71 | isLoading.value = false;
72 | return;
73 | }
74 | });
75 |
76 | return (
77 |
78 |
79 |
80 |

81 |
82 |
83 | Sign up
84 |
85 |
86 | Or{" "}
87 |
91 | log in to my account
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
117 |
118 |
119 |
137 |
138 |
139 |
140 |
143 |
144 |
145 | Or sign up with email
146 |
147 |
148 |
149 |
150 |
151 |
230 |
231 |
232 |
233 | );
234 | });
235 |
--------------------------------------------------------------------------------
/frontend/src/routes/terms/index.tsx:
--------------------------------------------------------------------------------
1 | import { component$ } from '@builder.io/qwik';
2 | import type { DocumentHead } from "@builder.io/qwik-city";
3 |
4 | export default component$(() => {
5 | return Terms
6 | });
7 |
8 | export const head: DocumentHead = {
9 | title: "Terms",
10 | meta: [
11 | {
12 | name: "description",
13 | content:
14 | "Terms of use",
15 | },
16 | ],
17 | };
18 |
--------------------------------------------------------------------------------
/frontend/src/utils/helpers.ts:
--------------------------------------------------------------------------------
1 | import { createClient } from "@supabase/supabase-js";
2 | import dotenv from "dotenv";
3 |
4 | // Check email is valid
5 | export const validateEmail = (email: string) => {
6 | const regex = new RegExp(/^\w+([.-]?\w+)*@\w+([.-]?\w+)*(.\w{2,3})+$/);
7 | if (regex.test(email)) {
8 | return true;
9 | }
10 | return false;
11 | };
12 |
13 | // Check user auth and role via server
14 | // ONLY CALL VIA SERVER SIDE
15 | export const getUserProfile = async (cookie: any) => {
16 | dotenv.config();
17 |
18 | // Initialize output
19 | const ret = {
20 | isSession: false,
21 | user: {},
22 | role: "",
23 | };
24 |
25 | // Extract env for supabase
26 | const supabaseUrl = process.env.SUPABASE_URL;
27 | const supabaseSecretKey = process.env.SUPABASE_SECRET_KEY;
28 |
29 | // Run Code
30 | if (supabaseUrl && supabaseSecretKey) {
31 | const supabaseServer = createClient(supabaseUrl, supabaseSecretKey);
32 |
33 | // Get JWT
34 | const jwt = cookie.get("server-access-token")?.value;
35 |
36 | // Authenticate with Supabase
37 | const { data } = await supabaseServer.auth.getUser(jwt);
38 |
39 | // Structure result and get user profile
40 | if (data?.user?.id) {
41 | ret.isSession = true;
42 | ret.user = data.user;
43 |
44 | const { data: profile } = await supabaseServer
45 | .from("profiles")
46 | .select("id, role")
47 | .eq("id", data.user.id)
48 | .limit(1)
49 |
50 | if (profile && profile?.[0].role) {
51 | ret.role = profile[0].role
52 | }
53 | }
54 | }
55 |
56 | // Return result
57 | return ret
58 | };
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 | // // Get user profile !!!!!!
91 | // export const getUserProfile = async (cookie: any) => {
92 | // dotenv.config();
93 |
94 | // // Initialize output
95 | // const userObj: any = {};
96 | // const ret = {
97 | // isSession: false,
98 | // user: userObj,
99 | // role: "",
100 | // };
101 |
102 | // // Connect to supabase
103 | // const supabaseUrl = process.env.SUPABASE_URL;
104 | // const supabaseSecret = process.env.SUPABASE_SECRET_KEY;
105 | // if (supabaseUrl && supabaseSecret) {
106 | // const supabaseServer = createClient(supabaseUrl, supabaseSecret);
107 |
108 | // // Get JWT
109 | // const jwt = cookie.get("server-access-token")?.value;
110 |
111 | // // Get user
112 | // const { data } = await supabaseServer.auth.getUser(jwt);
113 |
114 | // // Construct
115 | // if (data?.user?.id) {
116 | // ret.isSession = true;
117 | // ret.user = data.user;
118 |
119 | // // Get role information for user
120 | // const { data: userData } = await supabaseServer
121 | // .from("profiles")
122 | // .select("*")
123 | // .eq("id", data.user.id)
124 | // .limit(1);
125 |
126 | // if (userData && userData?.length > 0) {
127 | // ret.role = userData[0]?.role;
128 | // }
129 | // }
130 | // }
131 |
132 | // // Return result
133 | // return ret;
134 | // };
135 |
136 | // interface SessionData {
137 | // isSession: boolean;
138 | // user: any;
139 | // role: string;
140 | // }
141 |
142 | // // Protect route server side
143 | // export const onGet: RequestHandler = async ({
144 | // response,
145 | // cookie,
146 | // }) => {
147 | // const profile = await getUserProfile(cookie);
148 | // if (!profile?.isSession) {
149 | // throw response.redirect(rootDomain + "/login");
150 | // } else {
151 | // return profile;
152 | // }
153 | // };
154 |
155 | // export default component$(() => {
156 | // const sessionData = useEndpoint();
157 | // const isShow = useSignal(false);
158 | // const nav = useNavigate();
159 |
160 | // // Protect Route
161 | // useClientEffect$(async () => {
162 | // const dataSession = await sessionData.value;
163 | // const isSession = dataSession?.isSession;
164 | // if (isSession) {
165 | // isShow.value = true;
166 | // } else {
167 | // nav.path = "/login";
168 | // }
169 | // });
170 |
171 | // return (
172 | //
173 | // {isShow.value && (
174 | //
175 | //
176 | //
177 | // )}
178 | //
179 | // );
180 | // });
181 |
182 | // export const head: DocumentHead = {
183 | // title: "Dashboard",
184 | // meta: [
185 | // {
186 | // name: "description",
187 | // content: "Members dashboard for Code Raiders",
188 | // },
189 | // ],
190 | // };
191 |
--------------------------------------------------------------------------------
/frontend/src/utils/supabase.ts:
--------------------------------------------------------------------------------
1 | import { createClient } from "@supabase/supabase-js";
2 |
3 | const supabaseUrl = "https://somgwzxrlvjonciazklm.supabase.co";
4 | const supabaseAnonPublic = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InNvbWd3enhybHZqb25jaWF6a2xtIiwicm9sZSI6ImFub24iLCJpYXQiOjE2NzMxNzQzMDMsImV4cCI6MTk4ODc1MDMwM30.FV5Gh4bG09RtPImVBdZgcVD3MtDC-taSoo4hOyVTePo"
5 |
6 | export const supabase = createClient(supabaseUrl, supabaseAnonPublic);
7 |
--------------------------------------------------------------------------------
/frontend/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": true,
4 | "target": "ES2017",
5 | "module": "ES2020",
6 | "lib": ["es2020", "DOM", "WebWorker", "DOM.Iterable"],
7 | "jsx": "react-jsx",
8 | "jsxImportSource": "@builder.io/qwik",
9 | "strict": true,
10 | "forceConsistentCasingInFileNames": true,
11 | "resolveJsonModule": true,
12 | "moduleResolution": "node",
13 | "esModuleInterop": true,
14 | "skipLibCheck": true,
15 | "incremental": true,
16 | "isolatedModules": true,
17 | "outDir": "tmp",
18 | "noEmit": true,
19 | "types": ["node", "vite/client"],
20 | "paths": {
21 | "~/*": ["./src/*"]
22 | }
23 | },
24 | "files": ["./.eslintrc.cjs"],
25 | "include": ["src"]
26 | }
27 |
--------------------------------------------------------------------------------
/frontend/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import { qwikVite } from '@builder.io/qwik/optimizer';
3 | import { qwikCity } from '@builder.io/qwik-city/vite';
4 | import tsconfigPaths from 'vite-tsconfig-paths';
5 |
6 | export default defineConfig(() => {
7 | return {
8 | plugins: [qwikCity(), qwikVite(), tsconfigPaths()],
9 | preview: {
10 | headers: {
11 | 'Cache-Control': 'public, max-age=600',
12 | },
13 | },
14 | server: {
15 | host: true,
16 | port: 3000,
17 | },
18 | };
19 | });
20 |
--------------------------------------------------------------------------------
/proxy/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM nginx:latest
2 |
3 | COPY nginx.conf /etc/nginx/nginx.conf
4 |
5 | EXPOSE 80/tcp
6 |
7 | CMD ["/usr/sbin/nginx", "-g", "daemon off;"]
8 |
--------------------------------------------------------------------------------
/proxy/nginx.conf:
--------------------------------------------------------------------------------
1 | http {
2 |
3 | include mime.types;
4 |
5 | set_real_ip_from 0.0.0.0/0;
6 | real_ip_recursive on;
7 | real_ip_header X-Forward-For;
8 | limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
9 |
10 | upstream frontendserver {
11 | server host.docker.internal:3000;
12 | }
13 |
14 | upstream backendserver {
15 | server host.docker.internal:3005;
16 | }
17 |
18 | server {
19 | listen 80;
20 | server_name localhost;
21 | root /proxy;
22 | limit_req zone=mylimit burst=70 nodelay;
23 |
24 | location / {
25 | proxy_pass http://frontendserver;
26 | proxy_http_version 1.1;
27 | proxy_set_header Upgrade $http_upgrade;
28 | proxy_set_header Connection 'upgrade';
29 | proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;
30 | proxy_pass_request_headers on;
31 | }
32 |
33 | location /api_v1 {
34 | proxy_pass http://backendserver;
35 | proxy_http_version 1.1;
36 | proxy_set_header Upgrade $http_upgrade;
37 | proxy_set_header Connection 'upgrade';
38 | proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;
39 | proxy_pass_request_headers on;
40 | }
41 | }
42 | }
43 |
44 | events {}
45 |
--------------------------------------------------------------------------------