├── frontend ├── public │ ├── robots.txt │ ├── img │ │ └── icon.png │ ├── manifest.json │ └── favicon.svg ├── server │ ├── package.json │ ├── entry.ssr.js │ ├── entry.express.js │ ├── @qwik-city-static-paths.js │ ├── @qwik-city-not-found-paths.js │ ├── entry.express.mjs │ ├── @qwik-city-plan.mjs │ ├── assets │ │ └── root-7ec1d247.mjs │ └── entry.ssr.mjs ├── .DS_Store ├── src │ ├── .DS_Store │ ├── routes │ │ ├── .DS_Store │ │ ├── login │ │ │ ├── .DS_Store │ │ │ ├── staging │ │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── terms │ │ │ └── index.tsx │ │ ├── disclaimer │ │ │ └── index.tsx │ │ ├── privacy │ │ │ └── index.tsx │ │ ├── contact │ │ │ └── index.tsx │ │ ├── layout-site.tsx │ │ ├── about │ │ │ └── index@site.tsx │ │ ├── services │ │ │ └── index@site.tsx │ │ ├── shop │ │ │ └── index@site.tsx │ │ ├── service-worker.ts │ │ ├── index@site.tsx │ │ ├── members │ │ │ └── dashboard │ │ │ │ └── index.tsx │ │ └── signup │ │ │ └── index.tsx │ ├── components │ │ ├── site │ │ │ ├── logo │ │ │ │ ├── logo.css │ │ │ │ └── logo.tsx │ │ │ ├── hero │ │ │ │ └── hero.tsx │ │ │ ├── footer │ │ │ │ └── footer.tsx │ │ │ └── navigation │ │ │ │ └── navigation.tsx │ │ ├── ui │ │ │ ├── button-std.tsx │ │ │ ├── button-action.tsx │ │ │ └── message.tsx │ │ ├── router-head │ │ │ └── router-head.tsx │ │ └── svgs │ │ │ └── grid.tsx │ ├── utils │ │ ├── supabase.ts │ │ └── helpers.ts │ ├── global.css │ ├── entry.dev.tsx │ ├── entry.preview.tsx │ ├── entry.ssr.tsx │ ├── entry.express.tsx │ └── root.tsx ├── .prettierignore ├── postcss.config.js ├── tailwind.config.js ├── .eslintignore ├── vite.config.ts ├── adaptors │ └── express │ │ └── vite.config.ts ├── tsconfig.json ├── README.md ├── .eslintrc.cjs └── package.json ├── .gitignore ├── .DS_Store ├── proxy ├── Dockerfile └── nginx.conf └── backend ├── package.json ├── server.ts └── yarn.lock /frontend/public/robots.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/server/package.json: -------------------------------------------------------------------------------- 1 | {"type":"module"} -------------------------------------------------------------------------------- /frontend/server/entry.ssr.js: -------------------------------------------------------------------------------- 1 | export * from "./entry.ssr.mjs"; -------------------------------------------------------------------------------- /frontend/server/entry.express.js: -------------------------------------------------------------------------------- 1 | export * from "./entry.express.mjs"; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /frontend/node_modules 2 | /backend/node_modules 3 | /frontend/dist 4 | *.env -------------------------------------------------------------------------------- /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/.DS_Store -------------------------------------------------------------------------------- /frontend/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/frontend/.DS_Store -------------------------------------------------------------------------------- /frontend/src/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/frontend/src/.DS_Store -------------------------------------------------------------------------------- /frontend/.prettierignore: -------------------------------------------------------------------------------- 1 | # Files Prettier should not format 2 | **/*.log 3 | **/.DS_Store 4 | *. 5 | dist 6 | node_modules 7 | -------------------------------------------------------------------------------- /frontend/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /frontend/public/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/frontend/public/img/icon.png -------------------------------------------------------------------------------- /frontend/src/routes/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/frontend/src/routes/.DS_Store -------------------------------------------------------------------------------- /frontend/src/routes/login/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/coderaidershaun/qwik-supabase-nginx-project/HEAD/frontend/src/routes/login/.DS_Store -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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/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/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/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/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/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/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/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/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 |
11 | 12 |
13 |
15 | 16 | ); 17 | }); 18 | -------------------------------------------------------------------------------- /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/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/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/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 | -------------------------------------------------------------------------------- /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/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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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 | Code Raiders Logo 12 |
13 |
14 |
Code Raiders
15 |
Shut up and code
16 |
17 |
18 | ); 19 | }); 20 | -------------------------------------------------------------------------------- /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/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/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/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/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/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/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 | \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/.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/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 |
10 | Good People Borrow 11 |
12 |
13 |
Great People Steal
14 |
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/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 |
17 |
18 | 35 | 36 |

37 | © 2023 CodeRaiders.com - XCHAIN ANALYTICS LTD 38 |

39 |
40 |
41 | ); 42 | }); 43 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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/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 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /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/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 | 13 | 14 | 22 | 23 | 24 | 32 | 33 | 34 | 42 | 43 | 44 | 52 | 53 | 54 | 62 | 63 | 64 | 72 | 73 | 74 | 82 | 83 | 84 | 92 | 93 | 94 | 102 | 103 | 104 | ); 105 | }); 106 | -------------------------------------------------------------------------------- /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/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/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 |
131 |
132 |
133 |
134 | 135 | Or log in with email 136 | 137 |
138 |
139 |
140 |
147 |
148 | 151 |
152 | 160 |
161 |
162 | 163 | {/*
164 | 167 |
168 | 176 |
177 |
*/} 178 | 179 |
180 |
181 | 185 | Problems signing in? 186 | 187 |
188 |
189 | 190 |
191 | 197 |

198 | No password required. Authorize via email. 199 |

200 |
201 |
202 | 203 |
204 |
205 |
206 | ); 207 | }); 208 | -------------------------------------------------------------------------------- /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 |
141 |
142 |
143 |
144 | 145 | Or sign up with email 146 | 147 |
148 |
149 |
150 | 151 |
156 |
157 | 160 |
161 | 169 |
170 |
171 | 172 |
173 | {/*
174 | 181 | 184 |
*/} 185 | 186 |
187 | 193 | 213 |
214 |
215 | 216 |
217 | 224 |

225 | No password required. Authorize via email. 226 |

227 |
228 | 229 | 230 |
231 |
232 |
233 | ); 234 | }); 235 | -------------------------------------------------------------------------------- /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/public/favicon.svg: -------------------------------------------------------------------------------- 1 | 19 | 40 | 41 | 42 | 47 | 52 | 53 | 54 | 59 | 64 | 65 | 76 | 87 | 98 | 109 | 120 | 131 | 142 | 153 | 164 | 175 | 176 | 177 | 182 | 190 | 197 | 202 | 207 | 212 | 217 | 222 | 227 | 232 | 237 | 242 | 243 | 244 | 245 | -------------------------------------------------------------------------------- /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/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.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 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------