Highly ambitious ATProtocol AppView service and sdks
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

use template embeds for cli

+239 -29
+1 -1
deno.json
··· 27 27 "@std/fmt": "jsr:@std/fmt@^1.0.2" 28 28 }, 29 29 "exclude": [ 30 - "packages/cli/src/templates/" 30 + "packages/cli/src/templates/deno-ssr/" 31 31 ], 32 32 "nodeModulesDir": "auto" 33 33 }
+12
deno.lock
··· 2 2 "version": "5", 3 3 "specifiers": { 4 4 "jsr:@shikijs/shiki@*": "3.7.0", 5 + "jsr:@slices/client@~0.1.0-alpha.3": "0.1.0-alpha.3", 6 + "jsr:@std/assert@^1.0.14": "1.0.14", 5 7 "jsr:@std/cli@^1.0.21": "1.0.22", 6 8 "jsr:@std/cli@^1.0.22": "1.0.22", 7 9 "jsr:@std/encoding@^1.0.10": "1.0.10", ··· 41 43 "npm:@shikijs/core", 42 44 "npm:@shikijs/engine-oniguruma", 43 45 "npm:shiki" 46 + ] 47 + }, 48 + "@slices/client@0.1.0-alpha.3": { 49 + "integrity": "c18d6ad2dbe1043bbeb7da7c5a11724fa0fa388c3e6e96089bb033f518c4b23c" 50 + }, 51 + "@std/assert@1.0.14": { 52 + "integrity": "68d0d4a43b365abc927f45a9b85c639ea18a9fab96ad92281e493e4ed84abaa4", 53 + "dependencies": [ 54 + "jsr:@std/internal@^1.0.10" 44 55 ] 45 56 }, 46 57 "@std/cli@1.0.22": { ··· 663 674 "packages/cli": { 664 675 "dependencies": [ 665 676 "jsr:@std/cli@^1.0.22", 677 + "jsr:@std/encoding@^1.0.10", 666 678 "jsr:@std/fmt@^1.0.2", 667 679 "jsr:@std/fs@^1.0.4", 668 680 "jsr:@std/path@^1.0.6"
+20
packages/cli/LICENSE
··· 1 + MIT License 2 + 3 + Copyright (c) 2025 Slices Network 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy of 6 + this software and associated documentation files (the "Software"), to deal in 7 + the Software without restriction, including without limitation the rights to 8 + use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 + the Software, and to permit persons to whom the Software is furnished to do so, 10 + subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 + FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 + COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 + IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 + CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+4 -8
packages/cli/deno.json
··· 1 1 { 2 2 "name": "@slices/cli", 3 - "version": "0.1.0", 3 + "version": "0.1.0-alpha.3", 4 4 "exports": "./src/mod.ts", 5 5 "tasks": { 6 6 "dev": "deno run --allow-all src/mod.ts", 7 - "build": "deno compile --allow-all --output bin/slices src/mod.ts", 7 + "embed": "deno run --allow-read --allow-write scripts/embed-templates.ts", 8 8 "test": "deno test --allow-all" 9 9 }, 10 10 "imports": { 11 - "@slices/client": "../client/src/mod.ts", 12 - "@slices/oauth": "../oauth/mod.ts", 13 - "@slices/lexicon": "../lexicon/mod.ts", 14 - "@slices/codegen": "../codegen/src/mod.ts", 15 11 "@std/cli": "jsr:@std/cli@^1.0.22", 12 + "@std/encoding": "jsr:@std/encoding@^1.0.10", 16 13 "@std/path": "jsr:@std/path@^1.0.6", 17 14 "@std/fs": "jsr:@std/fs@^1.0.4", 18 15 "@std/fmt": "jsr:@std/fmt@^1.0.2" 19 - }, 20 - "exclude": ["bin/"] 16 + } 21 17 }
+78
packages/cli/scripts/embed-templates.ts
··· 1 + #!/usr/bin/env -S deno run --allow-read --allow-write 2 + 3 + import { walk } from "@std/fs"; 4 + import { relative, join } from "@std/path"; 5 + import { encodeBase64 } from "@std/encoding/base64"; 6 + 7 + const TEMPLATE_DIR = join(import.meta.dirname!, "..", "src", "templates", "deno-ssr"); 8 + const OUTPUT_FILE = join(import.meta.dirname!, "..", "src", "templates", "embedded.ts"); 9 + 10 + interface TemplateFile { 11 + path: string; 12 + content: string; 13 + } 14 + 15 + async function embedTemplates() { 16 + console.log("Embedding templates from:", TEMPLATE_DIR); 17 + 18 + const templates: TemplateFile[] = []; 19 + 20 + // Walk through all files in the template directory 21 + for await (const entry of walk(TEMPLATE_DIR, { includeFiles: true, includeDirs: false })) { 22 + const relativePath = relative(TEMPLATE_DIR, entry.path); 23 + const content = await Deno.readFile(entry.path); 24 + const base64Content = encodeBase64(content); 25 + 26 + templates.push({ 27 + path: relativePath, 28 + content: base64Content, 29 + }); 30 + 31 + console.log(` Embedded: ${relativePath}`); 32 + } 33 + 34 + // Generate TypeScript file with embedded templates 35 + const output = `// Auto-generated file - DO NOT EDIT 36 + // Generated by scripts/embed-templates.ts 37 + 38 + export interface EmbeddedTemplate { 39 + path: string; 40 + content: string; // Base64 encoded 41 + } 42 + 43 + export const EMBEDDED_TEMPLATES: EmbeddedTemplate[] = ${JSON.stringify(templates, null, 2)}; 44 + 45 + export function getTemplateContent(path: string): Uint8Array | undefined { 46 + const template = EMBEDDED_TEMPLATES.find(t => t.path === path); 47 + if (!template) return undefined; 48 + 49 + const binaryString = atob(template.content); 50 + const bytes = new Uint8Array(binaryString.length); 51 + for (let i = 0; i < binaryString.length; i++) { 52 + bytes[i] = binaryString.charCodeAt(i); 53 + } 54 + return bytes; 55 + } 56 + 57 + export function getAllTemplates(): Map<string, Uint8Array> { 58 + const result = new Map<string, Uint8Array>(); 59 + for (const template of EMBEDDED_TEMPLATES) { 60 + const binaryString = atob(template.content); 61 + const bytes = new Uint8Array(binaryString.length); 62 + for (let i = 0; i < binaryString.length; i++) { 63 + bytes[i] = binaryString.charCodeAt(i); 64 + } 65 + result.set(template.path, bytes); 66 + } 67 + return result; 68 + } 69 + `; 70 + 71 + await Deno.writeTextFile(OUTPUT_FILE, output); 72 + console.log(`\nGenerated: ${OUTPUT_FILE}`); 73 + console.log(`Total templates embedded: ${templates.length}`); 74 + } 75 + 76 + if (import.meta.main) { 77 + await embedTemplates(); 78 + }
+24 -18
packages/cli/src/commands/init.ts
··· 1 1 import { parseArgs } from "@std/cli/parse-args"; 2 - import { copy } from "@std/fs"; 3 2 import { join, dirname } from "@std/path"; 3 + import { ensureDir } from "@std/fs"; 4 4 import { logger } from "../utils/logger.ts"; 5 + import { getAllTemplates } from "../templates/embedded.ts"; 5 6 6 7 export async function initCommand(args: string[], _globalArgs: any) { 7 8 const parsed = parseArgs(args, { ··· 48 49 logger.info(`Creating new Deno SSR project: ${projectName}`); 49 50 50 51 try { 51 - // Get template directory path (relative to this file) 52 - const currentDir = dirname(new URL(import.meta.url).pathname); 53 - const templateDir = join(currentDir, "..", "templates", "deno-ssr"); 52 + // Create target directory 53 + await ensureDir(targetDir); 54 54 55 - // Copy template files (this will create the target directory) 56 - await copyTemplate(templateDir, targetDir, projectName); 55 + // Extract embedded templates 56 + await extractEmbeddedTemplates(targetDir, projectName); 57 57 58 58 logger.info("✅ Project created successfully!"); 59 59 console.log(` ··· 82 82 } 83 83 } 84 84 85 - async function copyTemplate(templateDir: string, targetDir: string, projectName: string) { 85 + async function extractEmbeddedTemplates(targetDir: string, projectName: string) { 86 86 try { 87 - // Check if template directory exists 88 - await Deno.stat(templateDir); 87 + const templates = getAllTemplates(); 89 88 90 - // Copy template directory 91 - await copy(templateDir, targetDir); 89 + if (templates.size === 0) { 90 + throw new Error("No embedded templates found"); 91 + } 92 + 93 + for (const [relativePath, content] of templates.entries()) { 94 + const fullPath = join(targetDir, relativePath); 95 + const dir = dirname(fullPath); 96 + 97 + // Ensure directory exists 98 + await ensureDir(dir); 99 + 100 + // Write file 101 + await Deno.writeFile(fullPath, content); 102 + } 92 103 93 104 // Process template files for variable replacement 94 105 await processTemplateFiles(targetDir, projectName); 95 106 96 - logger.info("Template files copied and processed"); 107 + logger.info("Template files extracted and processed"); 97 108 } catch (error) { 98 109 const err = error as Error; 99 - if (err.name === "NotFound") { 100 - logger.error(`Template directory not found: ${templateDir}`); 101 - logger.error("Please ensure the CLI package includes template files"); 102 - } else { 103 - logger.error("Failed to copy template:", err.message); 104 - } 110 + logger.error("Failed to extract templates:", err.message); 105 111 throw error; 106 112 } 107 113 }
+99
packages/cli/src/templates/embedded.ts
··· 1 + // Auto-generated file - DO NOT EDIT 2 + // Generated by scripts/embed-templates.ts 3 + 4 + export interface EmbeddedTemplate { 5 + path: string; 6 + content: string; // Base64 encoded 7 + } 8 + 9 + export const EMBEDDED_TEMPLATES: EmbeddedTemplate[] = [ 10 + { 11 + "path": "deno.json", 12 + "content": "ewogICJ0YXNrcyI6IHsKICAgICJzdGFydCI6ICJkZW5vIHJ1biAtQSAtLWVudi1maWxlPS5lbnYgc3JjL21haW4udHMiLAogICAgImRldiI6ICJkZW5vIHJ1biAtQSAtLWVudi1maWxlPS5lbnYgLS13YXRjaCBzcmMvbWFpbi50cyIKICB9LAogICJjb21waWxlck9wdGlvbnMiOiB7CiAgICAianN4IjogInByZWNvbXBpbGUiLAogICAgImpzeEltcG9ydFNvdXJjZSI6ICJwcmVhY3QiCiAgfSwKICAiaW1wb3J0cyI6IHsKICAgICJAc2xpY2VzL2NsaWVudCI6ICJqc3I6QHNsaWNlcy9jbGllbnRAXjAuMS4wLWFscGhhLjMiLAogICAgIkBzbGljZXMvb2F1dGgiOiAianNyOkBzbGljZXMvb2F1dGhAXjAuNC4xIiwKICAgICJAc2xpY2VzL3Nlc3Npb24iOiAianNyOkBzbGljZXMvc2Vzc2lvbkBeMC4yLjEiLAogICAgIkBzdGQvYXNzZXJ0IjogImpzcjpAc3RkL2Fzc2VydEBeMS4wLjE0IiwKICAgICJwcmVhY3QiOiAibnBtOnByZWFjdEBeMTAuMjcuMSIsCiAgICAicHJlYWN0LXJlbmRlci10by1zdHJpbmciOiAibnBtOnByZWFjdC1yZW5kZXItdG8tc3RyaW5nQF42LjUuMTMiLAogICAgInR5cGVkLWh0bXgiOiAibnBtOnR5cGVkLWh0bXhAXjAuMy4xIiwKICAgICJAc3RkL2h0dHAiOiAianNyOkBzdGQvaHR0cEBeMS4wLjIwIiwKICAgICJjbHN4IjogIm5wbTpjbHN4QF4yLjEuMSIsCiAgICAidGFpbHdpbmQtbWVyZ2UiOiAibnBtOnRhaWx3aW5kLW1lcmdlQF4yLjUuNSIsCiAgICAibHVjaWRlLXByZWFjdCI6ICJucG06bHVjaWRlLXByZWFjdEBeMC41NDQuMCIKICB9LAogICJub2RlTW9kdWxlc0RpciI6ICJhdXRvIgp9" 13 + }, 14 + { 15 + "path": "README.md", 16 + "content": "IyB7e1BST0pFQ1RfTkFNRX19CgpBIERlbm8gU1NSIHdlYiBhcHBsaWNhdGlvbiB3aXRoIEFUIFByb3RvY29sIGludGVncmF0aW9uLCBidWlsdCB3aXRoIFByZWFjdCwKSFRNWCwgYW5kIE9BdXRoIGF1dGhlbnRpY2F0aW9uLgoKIyMgUXVpY2sgU3RhcnQKCjEuICoqQ29weSBlbnZpcm9ubWVudCBmaWxlOioqCiAgIGBgYGJhc2gKICAgY3AgLmVudi5leGFtcGxlIC5lbnYKICAgYGBgCgoyLiAqKkNvbmZpZ3VyZSBPQXV0aDoqKiBFZGl0IGAuZW52YCB3aXRoIHlvdXIgT0F1dGggY2xpZW50IGNyZWRlbnRpYWxzIGZyb20KICAgU2xpY2VzCgozLiAqKlN0YXJ0IGRldmVsb3BtZW50IHNlcnZlcjoqKgogICBgYGBiYXNoCiAgIGRlbm8gdGFzayBkZXYKICAgYGBgCgo0LiAqKlZpc2l0IHlvdXIgYXBwOioqIE9wZW4gaHR0cDovL2xvY2FsaG9zdDo4MDgwCgojIyBGZWF0dXJlcwoKLSDwn5SQICoqT0F1dGggQXV0aGVudGljYXRpb24qKiB3aXRoIFBLQ0UgZmxvdwotIOKaoSAqKlNlcnZlci1TaWRlIFJlbmRlcmluZyoqIHdpdGggUHJlYWN0Ci0g8J+OryAqKkludGVyYWN0aXZlIFVJKiogd2l0aCBIVE1YCi0g8J+OqCAqKlN0eWxpbmcqKiB3aXRoIFRhaWx3aW5kIENTUwotIPCfl4TvuI8gKipTZXNzaW9uIE1hbmFnZW1lbnQqKiB3aXRoIFNRTGl0ZQotIPCflIQgKipBdXRvIFRva2VuIFJlZnJlc2gqKgotIPCfj5fvuI8gKipGZWF0dXJlLUJhc2VkIEFyY2hpdGVjdHVyZSoqCgojIyBEZXZlbG9wbWVudAoKYGBgYmFzaAojIFN0YXJ0IGRldmVsb3BtZW50IHNlcnZlciB3aXRoIGhvdCByZWxvYWQKZGVubyB0YXNrIGRldgoKIyBTdGFydCBwcm9kdWN0aW9uIHNlcnZlcgpkZW5vIHRhc2sgc3RhcnQKCiMgRm9ybWF0IGNvZGUKZGVubyBmbXQKCiMgQ2hlY2sgdHlwZXMKZGVubyBjaGVjayBzcmMvKiovKi50cyBzcmMvKiovKi50c3gKYGBgCgojIyBQcm9qZWN0IFN0cnVjdHVyZQoKYGBgCnNyYy8K4pSc4pSA4pSAIG1haW4udHMgICAgICAgICAgICAgICMgU2VydmVyIGVudHJ5IHBvaW50CuKUnOKUgOKUgCBjb25maWcudHMgICAgICAgICAgICAjIE9BdXRoICYgc2Vzc2lvbiBjb25maWd1cmF0aW9uCuKUnOKUgOKUgCByb3V0ZXMvICAgICAgICAgICAgICAjIFJvdXRlIGRlZmluaXRpb25zCuKUnOKUgOKUgCBmZWF0dXJlcy8gICAgICAgICAgICAjIEZlYXR1cmUgbW9kdWxlcwrilIIgICDilJTilIDilIAgYXV0aC8gICAgICAgICAgICMgQXV0aGVudGljYXRpb24K4pSc4pSA4pSAIHNoYXJlZC9mcmFnbWVudHMvICAgICMgUmV1c2FibGUgVUkgY29tcG9uZW50cwrilJTilIDilIAgdXRpbHMvICAgICAgICAgICAgICAjIFV0aWxpdHkgZnVuY3Rpb25zCmBgYAoKIyMgT0F1dGggU2V0dXAKCjEuIFJlZ2lzdGVyIHlvdXIgYXBwbGljYXRpb24gYXQKICAgW1NsaWNlcyBEZXZlbG9wZXIgUG9ydGFsXShodHRwczovL3NsaWNlcy5uZXR3b3JrKQoyLiBBZGQgeW91ciBPQXV0aCBjcmVkZW50aWFscyB0byBgLmVudmAKMy4gQ29uZmlndXJlIHJlZGlyZWN0IFVSSTogYGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC9vYXV0aC9jYWxsYmFja2AKCiMjIERvY3VtZW50YXRpb24KCi0gYENMQVVERS5tZGAgLSBBcmNoaXRlY3R1cmUgZ3VpZGUgZm9yIEFJIGFzc2lzdGFuY2UKLSBGZWF0dXJlIGRpcmVjdG9yaWVzIGNvbnRhaW4gaGFuZGxlcnMgYW5kIHRlbXBsYXRlcwotIENvbXBvbmVudHMgdXNlIFByZWFjdCB3aXRoIHNlcnZlci1zaWRlIHJlbmRlcmluZwotIEhUTVggcHJvdmlkZXMgaW50ZXJhY3RpdmUgYmVoYXZpb3Igd2l0aG91dCBwYWdlIHJlbG9hZHMKCiMjIExpY2Vuc2UKCk1JVAo=" 17 + }, 18 + { 19 + "path": ".gitignore", 20 + "content": "IyBFbnZpcm9ubWVudCB2YXJpYWJsZXMKLmVudgoKIyBEYXRhYmFzZQoqLmRiCiouZGItam91cm5hbAoqLmRiLXdhbAoqLmRiLXNobQoKIyBEZW5vCmRlbm8ubG9jawoKIyBPUyBnZW5lcmF0ZWQgZmlsZXMKLkRTX1N0b3JlClRodW1icy5kYgoKIyBJREUKLnZzY29kZS8KLmlkZWEvCiouc3dwCiouc3dvCgojIExvZ3MKKi5sb2cKbG9ncy8KCiMgQ292ZXJhZ2UKY292ZXJhZ2Uv" 21 + }, 22 + { 23 + "path": ".env.example", 24 + "content": "IyBPQXV0aCBDb25maWd1cmF0aW9uIChyZXF1aXJlZCkKT0FVVEhfQ0xJRU5UX0lEPXlvdXJfb2F1dGhfY2xpZW50X2lkCk9BVVRIX0NMSUVOVF9TRUNSRVQ9eW91cl9vYXV0aF9jbGllbnRfc2VjcmV0Ck9BVVRIX1JFRElSRUNUX1VSST1odHRwOi8vbG9jYWxob3N0OjgwODAvb2F1dGgvY2FsbGJhY2sKT0FVVEhfQUlQX0JBU0VfVVJMPWh0dHBzOi8vYXV0aC5zbGljZXMubmV0d29yawoKIyBBUEkgQ29uZmlndXJhdGlvbiAocmVxdWlyZWQpCkFQSV9VUkw9aHR0cHM6Ly9hcGkuc2xpY2VzLm5ldHdvcmsKU0xJQ0VfVVJJPWF0Oi8vZGlkOnBsYzpleGFtcGxlL25ldHdvcmsuc2xpY2VzLnNsaWNlL2V4YW1wbGUKCiMgRGF0YWJhc2UgKG9wdGlvbmFsLCBkZWZhdWx0cyB0byBzbGljZXMuZGIpCkRBVEFCQVNFX1VSTD1zbGljZXMuZGIKCiMgRW52aXJvbm1lbnQgKG9wdGlvbmFsLCBhZmZlY3RzIGNvb2tpZSBzZWN1cml0eSkKREVOT19FTlY9ZGV2ZWxvcG1lbnQKCiMgU2VydmVyIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gODA4MCkKUE9SVD04MDgw" 25 + }, 26 + { 27 + "path": "CLAUDE.md", 28 + "content": "IyBDTEFVREUubWQKClRoaXMgZmlsZSBwcm92aWRlcyBndWlkYW5jZSB0byBDbGF1ZGUgQ29kZSAoY2xhdWRlLmFpL2NvZGUpIHdoZW4gd29ya2luZyB3aXRoCmNvZGUgaW4gdGhpcyByZXBvc2l0b3J5LgoKIyMgRGV2ZWxvcG1lbnQgQ29tbWFuZHMKCmBgYGJhc2gKIyBTdGFydCBkZXZlbG9wbWVudCBzZXJ2ZXIgd2l0aCBob3QgcmVsb2FkCmRlbm8gdGFzayBkZXYKCiMgU3RhcnQgcHJvZHVjdGlvbiBzZXJ2ZXIKZGVubyB0YXNrIHN0YXJ0CgojIEZvcm1hdCBjb2RlCmRlbm8gZm10CgojIENoZWNrIHR5cGVzCmRlbm8gY2hlY2sgc3JjLyoqLyoudHMgc3JjLyoqLyoudHN4CmBgYAoKIyMgQXJjaGl0ZWN0dXJlIE92ZXJ2aWV3CgpUaGlzIGlzIGEgRGVuby1iYXNlZCB3ZWIgYXBwbGljYXRpb24gYnVpbHQgd2l0aCB0aGUgU2xpY2VzIENMSS4gSXQgcHJvdmlkZXMKc2VydmVyLXNpZGUgcmVuZGVyaW5nIHdpdGggUHJlYWN0LCBPQXV0aCBhdXRoZW50aWNhdGlvbiwgYW5kIEFUIFByb3RvY29sCmludGVncmF0aW9uIGZvciBidWlsZGluZyBhcHBsaWNhdGlvbnMgb24gdGhlIGRlY2VudHJhbGl6ZWQgd2ViLgoKIyMjIFRlY2hub2xvZ3kgU3RhY2sKCi0gKipSdW50aW1lKio6IERlbm8gd2l0aCBUeXBlU2NyaXB0Ci0gKipGcm9udGVuZCoqOiBQcmVhY3Qgd2l0aCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcKLSAqKlN0eWxpbmcqKjogVGFpbHdpbmQgQ1NTICh2aWEgQ0ROKQotICoqSW50ZXJhY3Rpdml0eSoqOiBIVE1YICsgSHlwZXJzY3JpcHQKLSAqKlJvdXRpbmcqKjogRGVubydzIHN0YW5kYXJkIEhUVFAgcm91dGluZwotICoqQXV0aGVudGljYXRpb24qKjogT0F1dGggd2l0aCBQS0NFIGZsb3cgdXNpbmcgYEBzbGljZXMvb2F1dGhgCi0gKipTZXNzaW9ucyoqOiBTUUxpdGUtYmFzZWQgd2l0aCBgQHNsaWNlcy9zZXNzaW9uYAotICoqRGF0YWJhc2UqKjogU1FMaXRlIHZpYSBPQXV0aCBhbmQgc2Vzc2lvbiBsaWJyYXJpZXMKCiMjIyBDb3JlIEFyY2hpdGVjdHVyZSBQYXR0ZXJucwoKIyMjIyBGZWF0dXJlLUJhc2VkIE9yZ2FuaXphdGlvbgoKVGhlIGNvZGViYXNlIGlzIG9yZ2FuaXplZCBieSBmZWF0dXJlcyByYXRoZXIgdGhhbiB0ZWNobmljYWwgbGF5ZXJzOgoKYGBgCnNyYy8K4pSc4pSA4pSAIGZlYXR1cmVzLyAgICAgICAgICAgIyBGZWF0dXJlIG1vZHVsZXMK4pSCICAg4pSU4pSA4pSAIGF1dGgvICAgICAgICAgICMgQXV0aGVudGljYXRpb24gKGxvZ2luL2xvZ291dCkK4pSc4pSA4pSAIHNoYXJlZC8gICAgICAgICAgICAjIFNoYXJlZCBVSSBjb21wb25lbnRzCuKUnOKUgOKUgCByb3V0ZXMvICAgICAgICAgICAgIyBSb3V0ZSBkZWZpbml0aW9ucyBhbmQgbWlkZGxld2FyZQrilJzilIDilIAgdXRpbHMvICAgICAgICAgICAgICMgVXRpbGl0eSBmdW5jdGlvbnMK4pSU4pSA4pSAIGNvbmZpZy50cyAgICAgICAgICAjIENvcmUgY29uZmlndXJhdGlvbgpgYGAKCiMjIyMgSGFuZGxlciBQYXR0ZXJuCgpFYWNoIGZlYXR1cmUgZm9sbG93cyBhIGNvbnNpc3RlbnQgcGF0dGVybjoKCi0gYGhhbmRsZXJzLnRzeGAgLSBSb3V0ZSBoYW5kbGVycyB0aGF0IHJldHVybiBSZXNwb25zZSBvYmplY3RzCi0gYHRlbXBsYXRlcy9gIC0gUHJlYWN0IGNvbXBvbmVudHMgZm9yIHJlbmRlcmluZwotIGB0ZW1wbGF0ZXMvZnJhZ21lbnRzL2AgLSBSZXVzYWJsZSBVSSBjb21wb25lbnRzCgojIyMjIEF1dGhlbnRpY2F0aW9uICYgU2Vzc2lvbnMKCi0gT0F1dGggaW50ZWdyYXRpb24gd2l0aCBBVCBQcm90b2NvbCB1c2luZyBgQHNsaWNlcy9vYXV0aGAKLSBQS0NFIGZsb3cgZm9yIHNlY3VyZSBhdXRoZW50aWNhdGlvbgotIFNlc3Npb24gbWFuYWdlbWVudCB3aXRoIGBAc2xpY2VzL3Nlc3Npb25gCi0gU1FMaXRlIHN0b3JhZ2UgZm9yIE9BdXRoIHN0YXRlIGFuZCBzZXNzaW9ucwotIEF1dG9tYXRpYyB0b2tlbiByZWZyZXNoIGNhcGFiaWxpdGllcwoKIyMjIEtleSBDb21wb25lbnRzCgojIyMjIFJvdXRlIFN5c3RlbQoKLSBBbGwgcm91dGVzIGRlZmluZWQgaW4gYHNyYy9yb3V0ZXMvbW9kLnRzYAotIEZlYXR1cmUgcm91dGVzIGV4cG9ydGVkIGZyb20gYHNyYy9mZWF0dXJlcy8qL2hhbmRsZXJzLnRzeGAKLSBNaWRkbGV3YXJlIGluIGBzcmMvcm91dGVzL21pZGRsZXdhcmUudHNgIGhhbmRsZXMgYXV0aCBzdGF0ZQoKIyMjIyBPQXV0aCBJbnRlZ3JhdGlvbgoKLSBgc3JjL2NvbmZpZy50c2AgLSBPQXV0aCBjbGllbnQgYW5kIHNlc3Npb24gc3RvcmUgc2V0dXAKLSBFbnZpcm9ubWVudCB2YXJpYWJsZXMgcmVxdWlyZWQ6IGBPQVVUSF9DTElFTlRfSURgLCBgT0FVVEhfQ0xJRU5UX1NFQ1JFVGAsCiAgYE9BVVRIX1JFRElSRUNUX1VSSWAsIGBPQVVUSF9BSVBfQkFTRV9VUkxgLCBgQVBJX1VSTGAsIGBTTElDRV9VUklgCi0gUEtDRSBmbG93IGltcGxlbWVudGF0aW9uIGluIGF1dGggaGFuZGxlcnMKLSBTUUxpdGUgc3RvcmFnZSBmb3IgT0F1dGggc3RhdGUgYW5kIHRva2VucwoKIyMjIyBSZW5kZXJpbmcgU3lzdGVtCgotIGBzcmMvdXRpbHMvcmVuZGVyLnRzeGAgLSBVbmlmaWVkIEhUTUwgcmVuZGVyaW5nIHdpdGggcHJvcGVyIGhlYWRlcnMKLSBTZXJ2ZXItc2lkZSByZW5kZXJpbmcgd2l0aCBQcmVhY3QKLSBIVE1YIGZvciBkeW5hbWljIGludGVyYWN0aW9ucyB3aXRob3V0IHBhZ2UgcmVsb2FkcwotIFNoYXJlZCBgTGF5b3V0YCBjb21wb25lbnQgaW4gYHNyYy9zaGFyZWQvZnJhZ21lbnRzL0xheW91dC50c3hgCgojIyMgRGV2ZWxvcG1lbnQgR3VpZGVsaW5lcwoKIyMjIyBDb21wb25lbnQgQ29udmVudGlvbnMKCi0gVXNlIGAudHN4YCBleHRlbnNpb24gZm9yIGNvbXBvbmVudHMgd2l0aCBKU1gKLSBQcmVhY3QgY29tcG9uZW50cyBmb3IgYWxsIFVJIHJlbmRlcmluZwotIEhUTVggYXR0cmlidXRlcyBmb3IgaW50ZXJhY3RpdmUgYmVoYXZpb3IKLSBUYWlsd2luZCBjbGFzc2VzIGZvciBzdHlsaW5nCgojIyMjIEZlYXR1cmUgRGV2ZWxvcG1lbnQKCldoZW4gYWRkaW5nIG5ldyBmZWF0dXJlczoKCjEuIENyZWF0ZSBmZWF0dXJlIGRpcmVjdG9yeSB1bmRlciBgc3JjL2ZlYXR1cmVzL2AKMi4gQWRkIGBoYW5kbGVycy50c3hgIHdpdGggcm91dGUgZGVmaW5pdGlvbnMKMy4gQ3JlYXRlIGB0ZW1wbGF0ZXMvYCBkaXJlY3Rvcnkgd2l0aCBQcmVhY3QgY29tcG9uZW50cwo0LiBFeHBvcnQgcm91dGVzIGZyb20gZmVhdHVyZSBhbmQgYWRkIHRvIGBzcmMvcm91dGVzL21vZC50c2AKNS4gRm9sbG93IGV4aXN0aW5nIGF1dGhlbnRpY2F0aW9uIHBhdHRlcm5zIHVzaW5nIGF1dGggbWlkZGxld2FyZQoKIyMjIyBFbnZpcm9ubWVudCBTZXR1cAoKVGhlIGFwcGxpY2F0aW9uIHJlcXVpcmVzIGEgYC5lbnZgIGZpbGUgd2l0aCBPQXV0aCBhbmQgQVBJIGNvbmZpZ3VyYXRpb24uCkNvcHkgYC5lbnYuZXhhbXBsZWAgYW5kIGZpbGwgaW4geW91ciB2YWx1ZXMuIE1pc3NpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzCndpbGwgY2F1c2Ugc3RhcnR1cCBmYWlsdXJlcyB3aXRoIGRlc2NyaXB0aXZlIGVycm9yIG1lc3NhZ2VzLgoKIyMjIFJlcXVlc3QvUmVzcG9uc2UgRmxvdwoKMS4gUmVxdWVzdCBoaXRzIG1haW4gc2VydmVyIGluIGBzcmMvbWFpbi50c2AKMi4gUm91dGVzIHByb2Nlc3NlZCB0aHJvdWdoIGBzcmMvcm91dGVzL21vZC50c2AKMy4gQXV0aGVudGljYXRpb24gbWlkZGxld2FyZSBhcHBsaWVzIHNlc3Npb24gc3RhdGUKNC4gRmVhdHVyZSBoYW5kbGVycyBwcm9jZXNzIHJlcXVlc3RzIGFuZCByZXR1cm4gcmVuZGVyZWQgSFRNTAo1LiBIVE1YIGhhbmRsZXMgcGFydGlhbCBwYWdlIHVwZGF0ZXMgb24gY2xpZW50LXNpZGUgaW50ZXJhY3Rpb25zCgojIyMgT0F1dGggRmxvdwoKMS4gVXNlciBpbml0aWF0ZXMgbG9naW4gd2l0aCBoYW5kbGUvaWRlbnRpZmllcgoyLiBPQXV0aCBjbGllbnQgZ2VuZXJhdGVzIFBLQ0UgY2hhbGxlbmdlIGFuZCByZWRpcmVjdHMgdG8gYXV0aCBzZXJ2ZXIKMy4gVXNlciBhdXRoZW50aWNhdGVzIGFuZCBpcyByZWRpcmVjdGVkIGJhY2sgd2l0aCBhdXRob3JpemF0aW9uIGNvZGUKNC4gQ2xpZW50IGV4Y2hhbmdlcyBjb2RlIGZvciB0b2tlbnMgdXNpbmcgUEtDRSB2ZXJpZmllcgo1LiBTZXNzaW9uIGNyZWF0ZWQgd2l0aCBhdXRvbWF0aWMgdG9rZW4gcmVmcmVzaAo2LiBQcm90ZWN0ZWQgcm91dGVzIGFjY2VzcyB1c2VyIGRhdGEgdGhyb3VnaCBhdXRoZW50aWNhdGVkIGNsaWVudAoKIyMjIEFkZGluZyBOZXcgRmVhdHVyZXMKClRvIGFkZCBhIG5ldyBmZWF0dXJlOgoKMS4gQ3JlYXRlIGBzcmMvZmVhdHVyZXMvZmVhdHVyZS1uYW1lL2AKMi4gQWRkIGBoYW5kbGVycy50c3hgIHdpdGggcm91dGUgaGFuZGxlcnMKMy4gQ3JlYXRlIGB0ZW1wbGF0ZXMvYCBkaXJlY3RvcnkgZm9yIFVJIGNvbXBvbmVudHMKNC4gRXhwb3J0IHJvdXRlcyBhbmQgYWRkIHRvIG1haW4gcm91dGVyCjUuIFVzZSBleGlzdGluZyBwYXR0ZXJucyBmb3IgYXV0aGVudGljYXRpb24gYW5kIHJlbmRlcmluZw==" 29 + }, 30 + { 31 + "path": "src/main.ts", 32 + "content": "aW1wb3J0IHsgcm91dGUgfSBmcm9tICJAc3RkL2h0dHAvdW5zdGFibGUtcm91dGUiOwppbXBvcnQgeyBhbGxSb3V0ZXMgfSBmcm9tICIuL3JvdXRlcy9tb2QudHMiOwppbXBvcnQgeyBjcmVhdGVMb2dnaW5nSGFuZGxlciB9IGZyb20gIi4vdXRpbHMvbG9nZ2luZy50cyI7CgpmdW5jdGlvbiBkZWZhdWx0SGFuZGxlcihyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShSZXNwb25zZS5yZWRpcmVjdChuZXcgVVJMKCIvIiwgcmVxLnVybCksIDMwMikpOwp9Cgpjb25zdCBoYW5kbGVyID0gY3JlYXRlTG9nZ2luZ0hhbmRsZXIocm91dGUoYWxsUm91dGVzLCBkZWZhdWx0SGFuZGxlcikpOwoKRGVuby5zZXJ2ZSgKICB7CiAgICBwb3J0OiBwYXJzZUludChEZW5vLmVudi5nZXQoIlBPUlQiKSB8fCAiODA4MCIpLAogICAgaG9zdG5hbWU6ICIwLjAuMC4wIiwKICAgIG9uTGlzdGVuOiAoeyBwb3J0LCBob3N0bmFtZSB9KSA9PgogICAgICBjb25zb2xlLmxvZyhg8J+agCBTZXJ2ZXIgcnVubmluZyBvbiBodHRwOi8vJHtob3N0bmFtZX06JHtwb3J0fWApLAogIH0sCiAgaGFuZGxlciwKKTs=" 33 + }, 34 + { 35 + "path": "src/features/auth/templates/LoginPage.tsx", 36 + "content": "aW1wb3J0IHsgTGF5b3V0IH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9MYXlvdXQudHN4IjsKaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSAiLi4vLi4vLi4vc2hhcmVkL2ZyYWdtZW50cy9CdXR0b24udHN4IjsKaW1wb3J0IHsgSW5wdXQgfSBmcm9tICIuLi8uLi8uLi9zaGFyZWQvZnJhZ21lbnRzL0lucHV0LnRzeCI7CgppbnRlcmZhY2UgTG9naW5QYWdlUHJvcHMgewogIGVycm9yPzogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gTG9naW5QYWdlKHsgZXJyb3IgfTogTG9naW5QYWdlUHJvcHMpIHsKICByZXR1cm4gKAogICAgPExheW91dCB0aXRsZT0iTG9naW4iPgogICAgICA8ZGl2IGNsYXNzTmFtZT0ibWluLWgtc2NyZWVuIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWdyYXktNTAiPgogICAgICAgIDxkaXYgY2xhc3NOYW1lPSJtYXgtdy1tZCB3LWZ1bGwgc3BhY2UteS04Ij4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxoMiBjbGFzc05hbWU9Im10LTYgdGV4dC1jZW50ZXIgdGV4dC0zeGwgZm9udC1leHRyYWJvbGQgdGV4dC1ncmF5LTkwMCI+CiAgICAgICAgICAgICAgU2lnbiBpbiB0byB5b3VyIGFjY291bnQKICAgICAgICAgICAgPC9oMj4KICAgICAgICAgICAgPHAgY2xhc3NOYW1lPSJtdC0yIHRleHQtY2VudGVyIHRleHQtc20gdGV4dC1ncmF5LTYwMCI+CiAgICAgICAgICAgICAgVXNlIHlvdXIgQVQgUHJvdG9jb2wgaGFuZGxlIG9yIERJRAogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICB7ZXJyb3IgJiYgKAogICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0iYmctcmVkLTUwIGJvcmRlciBib3JkZXItcmVkLTIwMCB0ZXh0LXJlZC03MDAgcHgtNCBweS0zIHJvdW5kZWQiPgogICAgICAgICAgICAgIHtlcnJvciA9PT0gIk9BdXRoIGluaXRpYWxpemF0aW9uIGZhaWxlZCIgJiYgIkZhaWxlZCB0byBzdGFydCBhdXRoZW50aWNhdGlvbiJ9CiAgICAgICAgICAgICAge2Vycm9yID09PSAiSW52YWxpZCBPQXV0aCBjYWxsYmFjayIgJiYgIkF1dGhlbnRpY2F0aW9uIGNhbGxiYWNrIGZhaWxlZCJ9CiAgICAgICAgICAgICAge2Vycm9yID09PSAiQXV0aGVudGljYXRpb24gZmFpbGVkIiAmJiAiQXV0aGVudGljYXRpb24gZmFpbGVkIn0KICAgICAgICAgICAgICB7ZXJyb3IgPT09ICJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24iICYmICJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb24ifQogICAgICAgICAgICAgIHshWyJPQXV0aCBpbml0aWFsaXphdGlvbiBmYWlsZWQiLCAiSW52YWxpZCBPQXV0aCBjYWxsYmFjayIsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzZXNzaW9uIl0uaW5jbHVkZXMoZXJyb3IpICYmIGVycm9yfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICl9CgogICAgICAgICAgPGZvcm0gY2xhc3NOYW1lPSJtdC04IHNwYWNlLXktNiIgYWN0aW9uPSIvb2F1dGgvYXV0aG9yaXplIiBtZXRob2Q9InBvc3QiPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgIDxsYWJlbCBodG1sRm9yPSJsb2dpbkhpbnQiIGNsYXNzTmFtZT0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIj4KICAgICAgICAgICAgICAgIEhhbmRsZSBvciBESUQKICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgIDxJbnB1dAogICAgICAgICAgICAgICAgaWQ9ImxvZ2luSGludCIKICAgICAgICAgICAgICAgIG5hbWU9ImxvZ2luSGludCIKICAgICAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9ImFsaWNlLmJza3kuc29jaWFsIG9yIGRpZDpwbGM6Li4uIgogICAgICAgICAgICAgICAgY2xhc3NOYW1lPSJtdC0xIgogICAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPEJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzTmFtZT0idy1mdWxsIj4KICAgICAgICAgICAgICBTaWduIGluCiAgICAgICAgICAgIDwvQnV0dG9uPgogICAgICAgICAgPC9mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvTGF5b3V0PgogICk7Cn0=" 37 + }, 38 + { 39 + "path": "src/features/auth/handlers.tsx", 40 + "content": "aW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gIkBzdGQvaHR0cC91bnN0YWJsZS1yb3V0ZSI7CmltcG9ydCB7IHdpdGhBdXRoIH0gZnJvbSAiLi4vLi4vcm91dGVzL21pZGRsZXdhcmUudHMiOwppbXBvcnQgeyBvYXV0aENsaWVudCwgb2F1dGhTZXNzaW9ucywgc2Vzc2lvblN0b3JlIH0gZnJvbSAiLi4vLi4vY29uZmlnLnRzIjsKaW1wb3J0IHsgcmVuZGVySFRNTCB9IGZyb20gIi4uLy4uL3V0aWxzL3JlbmRlci50c3giOwppbXBvcnQgeyBMb2dpblBhZ2UgfSBmcm9tICIuL3RlbXBsYXRlcy9Mb2dpblBhZ2UudHN4IjsKCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxvZ2luUGFnZShyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgY29uc3QgY29udGV4dCA9IGF3YWl0IHdpdGhBdXRoKHJlcSk7CiAgY29uc3QgdXJsID0gbmV3IFVSTChyZXEudXJsKTsKCiAgLy8gUmVkaXJlY3QgaWYgYWxyZWFkeSBsb2dnZWQgaW4KICBpZiAoY29udGV4dC5jdXJyZW50VXNlcikgewogICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KG5ldyBVUkwoIi9kYXNoYm9hcmQiLCByZXEudXJsKSwgMzAyKTsKICB9CgogIGNvbnN0IGVycm9yID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoImVycm9yIik7CiAgcmV0dXJuIHJlbmRlckhUTUwoCiAgICA8TG9naW5QYWdlIGVycm9yPXtlcnJvciB8fCB1bmRlZmluZWR9IC8+CiAgKTsKfQoKYXN5bmMgZnVuY3Rpb24gaGFuZGxlT0F1dGhBdXRob3JpemUocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxSZXNwb25zZT4gewogIHRyeSB7CiAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IHJlcS5mb3JtRGF0YSgpOwogICAgY29uc3QgbG9naW5IaW50ID0gZm9ybURhdGEuZ2V0KCJsb2dpbkhpbnQiKSBhcyBzdHJpbmc7CgogICAgaWYgKCFsb2dpbkhpbnQpIHsKICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSgiTWlzc2luZyBsb2dpbiBoaW50IiwgeyBzdGF0dXM6IDQwMCB9KTsKICAgIH0KCiAgICBjb25zdCBhdXRoUmVzdWx0ID0gYXdhaXQgb2F1dGhDbGllbnQuYXV0aG9yaXplKHsKICAgICAgbG9naW5IaW50LAogICAgfSk7CgogICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KGF1dGhSZXN1bHQuYXV0aG9yaXphdGlvblVybCwgMzAyKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgY29uc29sZS5lcnJvcigiT0F1dGggYXV0aG9yaXplIGVycm9yOiIsIGVycm9yKTsKICAgIHJldHVybiBSZXNwb25zZS5yZWRpcmVjdCgKICAgICAgbmV3IFVSTCgKICAgICAgICAiL2xvZ2luP2Vycm9yPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIk9BdXRoIGluaXRpYWxpemF0aW9uIGZhaWxlZCIpLAogICAgICAgIHJlcS51cmwKICAgICAgKSwKICAgICAgMzAyCiAgICApOwogIH0KfQoKYXN5bmMgZnVuY3Rpb24gaGFuZGxlT0F1dGhDYWxsYmFjayhyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgdHJ5IHsKICAgIGNvbnN0IHVybCA9IG5ldyBVUkwocmVxLnVybCk7CiAgICBjb25zdCBjb2RlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoImNvZGUiKTsKICAgIGNvbnN0IHN0YXRlID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoInN0YXRlIik7CgogICAgaWYgKCFjb2RlIHx8ICFzdGF0ZSkgewogICAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QoCiAgICAgICAgbmV3IFVSTCgKICAgICAgICAgICIvbG9naW4/ZXJyb3I9IiArIGVuY29kZVVSSUNvbXBvbmVudCgiSW52YWxpZCBPQXV0aCBjYWxsYmFjayIpLAogICAgICAgICAgcmVxLnVybAogICAgICAgICksCiAgICAgICAgMzAyCiAgICAgICk7CiAgICB9CgogICAgYXdhaXQgb2F1dGhDbGllbnQuaGFuZGxlQ2FsbGJhY2soeyBjb2RlLCBzdGF0ZSB9KTsKICAgIGNvbnN0IHNlc3Npb25JZCA9IGF3YWl0IG9hdXRoU2Vzc2lvbnMuY3JlYXRlT0F1dGhTZXNzaW9uKCk7CgogICAgaWYgKCFzZXNzaW9uSWQpIHsKICAgICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KAogICAgICAgIG5ldyBVUkwoCiAgICAgICAgICAiL2xvZ2luP2Vycm9yPSIgKyBlbmNvZGVVUklDb21wb25lbnQoIkZhaWxlZCB0byBjcmVhdGUgc2Vzc2lvbiIpLAogICAgICAgICAgcmVxLnVybAogICAgICAgICksCiAgICAgICAgMzAyCiAgICAgICk7CiAgICB9CgogICAgY29uc3Qgc2Vzc2lvbkNvb2tpZSA9IHNlc3Npb25TdG9yZS5jcmVhdGVTZXNzaW9uQ29va2llKHNlc3Npb25JZCk7CgogICAgcmV0dXJuIG5ldyBSZXNwb25zZShudWxsLCB7CiAgICAgIHN0YXR1czogMzAyLAogICAgICBoZWFkZXJzOiB7CiAgICAgICAgTG9jYXRpb246IG5ldyBVUkwoIi9kYXNoYm9hcmQiLCByZXEudXJsKS50b1N0cmluZygpLAogICAgICAgICJTZXQtQ29va2llIjogc2Vzc2lvbkNvb2tpZSwKICAgICAgfSwKICAgIH0pOwogIH0gY2F0Y2ggKGVycm9yKSB7CiAgICBjb25zb2xlLmVycm9yKCJPQXV0aCBjYWxsYmFjayBlcnJvcjoiLCBlcnJvcik7CiAgICByZXR1cm4gUmVzcG9uc2UucmVkaXJlY3QoCiAgICAgIG5ldyBVUkwoCiAgICAgICAgIi9sb2dpbj9lcnJvcj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCJBdXRoZW50aWNhdGlvbiBmYWlsZWQiKSwKICAgICAgICByZXEudXJsCiAgICAgICksCiAgICAgIDMwMgogICAgKTsKICB9Cn0KCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUxvZ291dChyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgY29uc3Qgc2Vzc2lvbiA9IGF3YWl0IHNlc3Npb25TdG9yZS5nZXRTZXNzaW9uRnJvbVJlcXVlc3QocmVxKTsKCiAgaWYgKHNlc3Npb24pIHsKICAgIGF3YWl0IG9hdXRoU2Vzc2lvbnMubG9nb3V0KHNlc3Npb24uc2Vzc2lvbklkKTsKICB9CgogIGNvbnN0IGNsZWFyQ29va2llID0gc2Vzc2lvblN0b3JlLmNyZWF0ZUxvZ291dENvb2tpZSgpOwoKICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHsKICAgIHN0YXR1czogMzAyLAogICAgaGVhZGVyczogewogICAgICBMb2NhdGlvbjogbmV3IFVSTCgiL2xvZ2luIiwgcmVxLnVybCkudG9TdHJpbmcoKSwKICAgICAgIlNldC1Db29raWUiOiBjbGVhckNvb2tpZSwKICAgIH0sCiAgfSk7Cn0KCmFzeW5jIGZ1bmN0aW9uIGhhbmRsZURhc2hib2FyZChyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiB7CiAgY29uc3QgY29udGV4dCA9IGF3YWl0IHdpdGhBdXRoKHJlcSk7CgogIGlmICghY29udGV4dC5jdXJyZW50VXNlcikgewogICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KG5ldyBVUkwoIi9sb2dpbiIsIHJlcS51cmwpLCAzMDIpOwogIH0KCiAgcmV0dXJuIHJlbmRlckhUTUwoCiAgICA8ZGl2PgogICAgICA8aDE+RGFzaGJvYXJkPC9oMT4KICAgICAgPHA+V2VsY29tZSwge2NvbnRleHQuY3VycmVudFVzZXIubmFtZSB8fCBjb250ZXh0LmN1cnJlbnRVc2VyLnN1Yn0hPC9wPgogICAgICA8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iL2xvZ291dCI+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkxvZ291dDwvYnV0dG9uPgogICAgICA8L2Zvcm0+CiAgICA8L2Rpdj4KICApOwp9CgpleHBvcnQgY29uc3QgYXV0aFJvdXRlczogUm91dGVbXSA9IFsKICB7CiAgICBtZXRob2Q6ICJHRVQiLAogICAgcGF0dGVybjogbmV3IFVSTFBhdHRlcm4oeyBwYXRobmFtZTogIi9sb2dpbiIgfSksCiAgICBoYW5kbGVyOiBoYW5kbGVMb2dpblBhZ2UsCiAgfSwKICB7CiAgICBtZXRob2Q6ICJQT1NUIiwKICAgIHBhdHRlcm46IG5ldyBVUkxQYXR0ZXJuKHsgcGF0aG5hbWU6ICIvb2F1dGgvYXV0aG9yaXplIiB9KSwKICAgIGhhbmRsZXI6IGhhbmRsZU9BdXRoQXV0aG9yaXplLAogIH0sCiAgewogICAgbWV0aG9kOiAiR0VUIiwKICAgIHBhdHRlcm46IG5ldyBVUkxQYXR0ZXJuKHsgcGF0aG5hbWU6ICIvb2F1dGgvY2FsbGJhY2siIH0pLAogICAgaGFuZGxlcjogaGFuZGxlT0F1dGhDYWxsYmFjaywKICB9LAogIHsKICAgIG1ldGhvZDogIlBPU1QiLAogICAgcGF0dGVybjogbmV3IFVSTFBhdHRlcm4oeyBwYXRobmFtZTogIi9sb2dvdXQiIH0pLAogICAgaGFuZGxlcjogaGFuZGxlTG9nb3V0LAogIH0sCiAgewogICAgbWV0aG9kOiAiR0VUIiwKICAgIHBhdHRlcm46IG5ldyBVUkxQYXR0ZXJuKHsgcGF0aG5hbWU6ICIvZGFzaGJvYXJkIiB9KSwKICAgIGhhbmRsZXI6IGhhbmRsZURhc2hib2FyZCwKICB9LApdOw==" 41 + }, 42 + { 43 + "path": "src/utils/logging.ts", 44 + "content": "ZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUxvZ2dpbmdIYW5kbGVyKGhhbmRsZXI6IChyZXE6IFJlcXVlc3QpID0+IFJlc3BvbnNlIHwgUHJvbWlzZTxSZXNwb25zZT4pIHsKICByZXR1cm4gYXN5bmMgKHJlcTogUmVxdWVzdCk6IFByb21pc2U8UmVzcG9uc2U+ID0+IHsKICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTsKICAgIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q7CiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcS51cmwpOwoKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGhhbmRsZXIocmVxKSk7CiAgICAgIGNvbnN0IGR1cmF0aW9uID0gRGF0ZS5ub3coKSAtIHN0YXJ0OwogICAgICBjb25zb2xlLmxvZyhgJHttZXRob2R9ICR7dXJsLnBhdGhuYW1lfSAtICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtkdXJhdGlvbn1tcylgKTsKICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gc3RhcnQ7CiAgICAgIGNvbnNvbGUuZXJyb3IoYCR7bWV0aG9kfSAke3VybC5wYXRobmFtZX0gLSBFUlJPUiAoJHtkdXJhdGlvbn1tcyk6YCwgZXJyb3IpOwogICAgICB0aHJvdyBlcnJvcjsKICAgIH0KICB9Owp9" 45 + }, 46 + { 47 + "path": "src/utils/render.tsx", 48 + "content": "aW1wb3J0IHsgcmVuZGVyVG9TdHJpbmcgfSBmcm9tICJwcmVhY3QtcmVuZGVyLXRvLXN0cmluZyI7CgpleHBvcnQgZnVuY3Rpb24gcmVuZGVySFRNTChlbGVtZW50OiBhbnkpOiBSZXNwb25zZSB7CiAgY29uc3QgaHRtbCA9IHJlbmRlclRvU3RyaW5nKGVsZW1lbnQpOwoKICByZXR1cm4gbmV3IFJlc3BvbnNlKGh0bWwsIHsKICAgIGhlYWRlcnM6IHsKICAgICAgIkNvbnRlbnQtVHlwZSI6ICJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLAogICAgfSwKICB9KTsKfQ==" 49 + }, 50 + { 51 + "path": "src/shared/fragments/Layout.tsx", 52 + "content": "aW50ZXJmYWNlIExheW91dFByb3BzIHsKICB0aXRsZT86IHN0cmluZzsKICBjaGlsZHJlbjogYW55Owp9CgpleHBvcnQgZnVuY3Rpb24gTGF5b3V0KHsgdGl0bGUgPSAiQXBwIiwgY2hpbGRyZW4gfTogTGF5b3V0UHJvcHMpIHsKICByZXR1cm4gKAogICAgPGh0bWwgbGFuZz0iZW4iPgogICAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCIgLz4KICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCIgLz4KICAgICAgICA8dGl0bGU+e3RpdGxlfTwvdGl0bGU+CiAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnRhaWx3aW5kY3NzLmNvbSI+PC9zY3JpcHQ+CiAgICAgICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vdW5wa2cuY29tL2h0bXgub3JnQDEuOS4xMCI+PC9zY3JpcHQ+CiAgICAgIDwvaGVhZD4KICAgICAgPGJvZHk+CiAgICAgICAge2NoaWxkcmVufQogICAgICA8L2JvZHk+CiAgICA8L2h0bWw+CiAgKTsKfQ==" 53 + }, 54 + { 55 + "path": "src/shared/fragments/Button.tsx", 56 + "content": "aW1wb3J0IHsgY2xzeCB9IGZyb20gImNsc3giOwoKaW50ZXJmYWNlIEJ1dHRvblByb3BzIHsKICBjaGlsZHJlbjogYW55OwogIHR5cGU/OiAiYnV0dG9uIiB8ICJzdWJtaXQiIHwgInJlc2V0IjsKICB2YXJpYW50PzogInByaW1hcnkiIHwgInNlY29uZGFyeSIgfCAiZGFuZ2VyIjsKICBzaXplPzogInNtIiB8ICJtZCIgfCAibGciOwogIGNsYXNzTmFtZT86IHN0cmluZzsKICBkaXNhYmxlZD86IGJvb2xlYW47CiAgW2tleTogc3RyaW5nXTogYW55Owp9CgpleHBvcnQgZnVuY3Rpb24gQnV0dG9uKHsKICBjaGlsZHJlbiwKICB0eXBlID0gImJ1dHRvbiIsCiAgdmFyaWFudCA9ICJwcmltYXJ5IiwKICBzaXplID0gIm1kIiwKICBjbGFzc05hbWUsCiAgZGlzYWJsZWQsCiAgLi4ucHJvcHMKfTogQnV0dG9uUHJvcHMpIHsKICBjb25zdCBiYXNlQ2xhc3NlcyA9ICJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZm9udC1tZWRpdW0gcm91bmRlZC1tZCBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy0yIGZvY3VzOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6b3BhY2l0eS01MCBkaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQiOwoKICBjb25zdCB2YXJpYW50Q2xhc3NlcyA9IHsKICAgIHByaW1hcnk6ICJiZy1ibHVlLTYwMCBob3ZlcjpiZy1ibHVlLTcwMCB0ZXh0LXdoaXRlIGZvY3VzOnJpbmctYmx1ZS01MDAiLAogICAgc2Vjb25kYXJ5OiAiYmctZ3JheS0yMDAgaG92ZXI6YmctZ3JheS0zMDAgdGV4dC1ncmF5LTkwMCBmb2N1czpyaW5nLWdyYXktNTAwIiwKICAgIGRhbmdlcjogImJnLXJlZC02MDAgaG92ZXI6YmctcmVkLTcwMCB0ZXh0LXdoaXRlIGZvY3VzOnJpbmctcmVkLTUwMCIsCiAgfTsKCiAgY29uc3Qgc2l6ZUNsYXNzZXMgPSB7CiAgICBzbTogInB4LTMgcHktMS41IHRleHQtc20iLAogICAgbWQ6ICJweC00IHB5LTIgdGV4dC1zbSIsCiAgICBsZzogInB4LTYgcHktMyB0ZXh0LWJhc2UiLAogIH07CgogIHJldHVybiAoCiAgICA8YnV0dG9uCiAgICAgIHR5cGU9e3R5cGV9CiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH0KICAgICAgY2xhc3NOYW1lPXtjbHN4KAogICAgICAgIGJhc2VDbGFzc2VzLAogICAgICAgIHZhcmlhbnRDbGFzc2VzW3ZhcmlhbnRdLAogICAgICAgIHNpemVDbGFzc2VzW3NpemVdLAogICAgICAgIGNsYXNzTmFtZQogICAgICApfQogICAgICB7Li4ucHJvcHN9CiAgICA+CiAgICAgIHtjaGlsZHJlbn0KICAgIDwvYnV0dG9uPgogICk7Cn0=" 57 + }, 58 + { 59 + "path": "src/shared/fragments/Input.tsx", 60 + "content": "aW1wb3J0IHsgY2xzeCB9IGZyb20gImNsc3giOwoKaW50ZXJmYWNlIElucHV0UHJvcHMgewogIHR5cGU/OiBzdHJpbmc7CiAgbmFtZT86IHN0cmluZzsKICBpZD86IHN0cmluZzsKICBwbGFjZWhvbGRlcj86IHN0cmluZzsKICByZXF1aXJlZD86IGJvb2xlYW47CiAgZGlzYWJsZWQ/OiBib29sZWFuOwogIGNsYXNzTmFtZT86IHN0cmluZzsKICB2YWx1ZT86IHN0cmluZzsKICBba2V5OiBzdHJpbmddOiBhbnk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBJbnB1dCh7CiAgdHlwZSA9ICJ0ZXh0IiwKICBjbGFzc05hbWUsCiAgLi4ucHJvcHMKfTogSW5wdXRQcm9wcykgewogIHJldHVybiAoCiAgICA8aW5wdXQKICAgICAgdHlwZT17dHlwZX0KICAgICAgY2xhc3NOYW1lPXtjbHN4KAogICAgICAgICJibG9jayB3LWZ1bGwgcHgtMyBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBzaGFkb3ctc20iLAogICAgICAgICJmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDAiLAogICAgICAgICJkaXNhYmxlZDpiZy1ncmF5LTUwIGRpc2FibGVkOnRleHQtZ3JheS01MDAiLAogICAgICAgIGNsYXNzTmFtZQogICAgICApfQogICAgICB7Li4ucHJvcHN9CiAgICAvPgogICk7Cn0=" 61 + }, 62 + { 63 + "path": "src/config.ts", 64 + "content": "aW1wb3J0IHsgT0F1dGhDbGllbnQsIFNRTGl0ZU9BdXRoU3RvcmFnZSB9IGZyb20gIkBzbGljZXMvb2F1dGgiOwppbXBvcnQgeyBTZXNzaW9uU3RvcmUsIFNRTGl0ZUFkYXB0ZXIsIHdpdGhPQXV0aFNlc3Npb24gfSBmcm9tICJAc2xpY2VzL3Nlc3Npb24iOwoKY29uc3QgT0FVVEhfQ0xJRU5UX0lEID0gRGVuby5lbnYuZ2V0KCJPQVVUSF9DTElFTlRfSUQiKTsKY29uc3QgT0FVVEhfQ0xJRU5UX1NFQ1JFVCA9IERlbm8uZW52LmdldCgiT0FVVEhfQ0xJRU5UX1NFQ1JFVCIpOwpjb25zdCBPQVVUSF9SRURJUkVDVF9VUkkgPSBEZW5vLmVudi5nZXQoIk9BVVRIX1JFRElSRUNUX1VSSSIpOwpjb25zdCBPQVVUSF9BSVBfQkFTRV9VUkwgPSBEZW5vLmVudi5nZXQoIk9BVVRIX0FJUF9CQVNFX1VSTCIpOwpjb25zdCBBUElfVVJMID0gRGVuby5lbnYuZ2V0KCJBUElfVVJMIik7CmV4cG9ydCBjb25zdCBTTElDRV9VUkkgPSBEZW5vLmVudi5nZXQoIlNMSUNFX1VSSSIpOwoKaWYgKAogICFPQVVUSF9DTElFTlRfSUQgfHwKICAhT0FVVEhfQ0xJRU5UX1NFQ1JFVCB8fAogICFPQVVUSF9SRURJUkVDVF9VUkkgfHwKICAhT0FVVEhfQUlQX0JBU0VfVVJMIHx8CiAgIUFQSV9VUkwgfHwKICAhU0xJQ0VfVVJJCikgewogIHRocm93IG5ldyBFcnJvcigKICAgICJNaXNzaW5nIE9BdXRoIGNvbmZpZ3VyYXRpb24uIFBsZWFzZSBlbnN1cmUgLmVudiBmaWxlIGNvbnRhaW5zOlxuIiArCiAgICAgICJPQVVUSF9DTElFTlRfSUQsIE9BVVRIX0NMSUVOVF9TRUNSRVQsIE9BVVRIX1JFRElSRUNUX1VSSSwgT0FVVEhfQUlQX0JBU0VfVVJMLCBBUElfVVJMLCBTTElDRV9VUkkiCiAgKTsKfQoKY29uc3QgREFUQUJBU0VfVVJMID0gRGVuby5lbnYuZ2V0KCJEQVRBQkFTRV9VUkwiKSB8fCAic2xpY2VzLmRiIjsKCi8vIE9BdXRoIHNldHVwCmNvbnN0IG9hdXRoU3RvcmFnZSA9IG5ldyBTUUxpdGVPQXV0aFN0b3JhZ2UoREFUQUJBU0VfVVJMKTsKY29uc3Qgb2F1dGhDbGllbnQgPSBuZXcgT0F1dGhDbGllbnQoCiAgewogICAgY2xpZW50SWQ6IE9BVVRIX0NMSUVOVF9JRCwKICAgIGNsaWVudFNlY3JldDogT0FVVEhfQ0xJRU5UX1NFQ1JFVCwKICAgIGF1dGhCYXNlVXJsOiBPQVVUSF9BSVBfQkFTRV9VUkwsCiAgICByZWRpcmVjdFVyaTogT0FVVEhfUkVESVJFQ1RfVVJJLAogICAgc2NvcGVzOiBbCiAgICAgICJvcGVuaWQiLAogICAgICAiZW1haWwiLAogICAgICAicHJvZmlsZSIsCiAgICAgICJhdHByb3RvIiwKICAgICAgInRyYW5zaXRpb246Z2VuZXJpYyIsCiAgICBdLAogIH0sCiAgb2F1dGhTdG9yYWdlCik7CgovLyBTZXNzaW9uIHNldHVwIChzaGFyZWQgZGF0YWJhc2UpCmV4cG9ydCBjb25zdCBzZXNzaW9uU3RvcmUgPSBuZXcgU2Vzc2lvblN0b3JlKHsKICBhZGFwdGVyOiBuZXcgU1FMaXRlQWRhcHRlcihEQVRBQkFTRV9VUkwpLAogIGNvb2tpZU9wdGlvbnM6IHsKICAgIGh0dHBPbmx5OiB0cnVlLAogICAgc2VjdXJlOiBEZW5vLmVudi5nZXQoIkRFTk9fRU5WIikgPT09ICJwcm9kdWN0aW9uIiwKICAgIHNhbWVTaXRlOiAibGF4IiwKICAgIHBhdGg6ICIvIiwKICB9LAp9KTsKCi8vIE9BdXRoICsgU2Vzc2lvbiBpbnRlZ3JhdGlvbgpleHBvcnQgY29uc3Qgb2F1dGhTZXNzaW9ucyA9IHdpdGhPQXV0aFNlc3Npb24oc2Vzc2lvblN0b3JlLCBvYXV0aENsaWVudCwgewogIGF1dG9SZWZyZXNoOiB0cnVlLAp9KTsKCmV4cG9ydCB7IG9hdXRoQ2xpZW50IH07" 65 + }, 66 + { 67 + "path": "src/routes/middleware.ts", 68 + "content": "aW1wb3J0IHsgc2Vzc2lvblN0b3JlLCBvYXV0aFNlc3Npb25zLCBvYXV0aENsaWVudCB9IGZyb20gIi4uL2NvbmZpZy50cyI7CgpleHBvcnQgaW50ZXJmYWNlIEF1dGhDb250ZXh0IHsKICBjdXJyZW50VXNlcjogewogICAgc3ViOiBzdHJpbmc7CiAgICBuYW1lPzogc3RyaW5nOwogICAgZW1haWw/OiBzdHJpbmc7CiAgfSB8IG51bGw7CiAgc2Vzc2lvbklkOiBzdHJpbmcgfCBudWxsOwp9CgpleHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aEF1dGgocmVxOiBSZXF1ZXN0KTogUHJvbWlzZTxBdXRoQ29udGV4dD4gewogIGNvbnN0IHNlc3Npb24gPSBhd2FpdCBzZXNzaW9uU3RvcmUuZ2V0U2Vzc2lvbkZyb21SZXF1ZXN0KHJlcSk7CgogIGlmICghc2Vzc2lvbikgewogICAgcmV0dXJuIHsgY3VycmVudFVzZXI6IG51bGwsIHNlc3Npb25JZDogbnVsbCB9OwogIH0KCiAgdHJ5IHsKICAgIC8vIEdldCB1c2VyIGluZm8gZnJvbSBPQXV0aCBjbGllbnQKICAgIGNvbnN0IHVzZXJJbmZvID0gYXdhaXQgb2F1dGhDbGllbnQuZ2V0VXNlckluZm8oKTsKICAgIHJldHVybiB7CiAgICAgIGN1cnJlbnRVc2VyOiB1c2VySW5mbyB8fCBudWxsLAogICAgICBzZXNzaW9uSWQ6IHNlc3Npb24uc2Vzc2lvbklkLAogICAgfTsKICB9IGNhdGNoIHsKICAgIHJldHVybiB7IGN1cnJlbnRVc2VyOiBudWxsLCBzZXNzaW9uSWQ6IHNlc3Npb24uc2Vzc2lvbklkIH07CiAgfQp9CgpleHBvcnQgZnVuY3Rpb24gcmVxdWlyZUF1dGgoaGFuZGxlcjogKHJlcTogUmVxdWVzdCwgY29udGV4dDogQXV0aENvbnRleHQpID0+IFByb21pc2U8UmVzcG9uc2U+KSB7CiAgcmV0dXJuIGFzeW5jIChyZXE6IFJlcXVlc3QpOiBQcm9taXNlPFJlc3BvbnNlPiA9PiB7CiAgICBjb25zdCBjb250ZXh0ID0gYXdhaXQgd2l0aEF1dGgocmVxKTsKCiAgICBpZiAoIWNvbnRleHQuY3VycmVudFVzZXIpIHsKICAgICAgcmV0dXJuIFJlc3BvbnNlLnJlZGlyZWN0KG5ldyBVUkwoIi9sb2dpbiIsIHJlcS51cmwpLCAzMDIpOwogICAgfQoKICAgIHJldHVybiBoYW5kbGVyKHJlcSwgY29udGV4dCk7CiAgfTsKfQ==" 69 + }, 70 + { 71 + "path": "src/routes/mod.ts", 72 + "content": "aW1wb3J0IHR5cGUgeyBSb3V0ZSB9IGZyb20gIkBzdGQvaHR0cC91bnN0YWJsZS1yb3V0ZSI7CmltcG9ydCB7IGF1dGhSb3V0ZXMgfSBmcm9tICIuLi9mZWF0dXJlcy9hdXRoL2hhbmRsZXJzLnRzeCI7CgpleHBvcnQgY29uc3QgYWxsUm91dGVzOiBSb3V0ZVtdID0gWwogIC8vIFJvb3QgcmVkaXJlY3QgdG8gbG9naW4gZm9yIG5vdwogIHsKICAgIG1ldGhvZDogIkdFVCIsCiAgICBwYXR0ZXJuOiBuZXcgVVJMUGF0dGVybih7IHBhdGhuYW1lOiAiLyIgfSksCiAgICBoYW5kbGVyOiAocmVxKSA9PiBSZXNwb25zZS5yZWRpcmVjdChuZXcgVVJMKCIvbG9naW4iLCByZXEudXJsKSwgMzAyKSwKICB9LAoKICAvLyBBdXRoIHJvdXRlcwogIC4uLmF1dGhSb3V0ZXMsCl07" 73 + } 74 + ]; 75 + 76 + export function getTemplateContent(path: string): Uint8Array | undefined { 77 + const template = EMBEDDED_TEMPLATES.find(t => t.path === path); 78 + if (!template) return undefined; 79 + 80 + const binaryString = atob(template.content); 81 + const bytes = new Uint8Array(binaryString.length); 82 + for (let i = 0; i < binaryString.length; i++) { 83 + bytes[i] = binaryString.charCodeAt(i); 84 + } 85 + return bytes; 86 + } 87 + 88 + export function getAllTemplates(): Map<string, Uint8Array> { 89 + const result = new Map<string, Uint8Array>(); 90 + for (const template of EMBEDDED_TEMPLATES) { 91 + const binaryString = atob(template.content); 92 + const bytes = new Uint8Array(binaryString.length); 93 + for (let i = 0; i < binaryString.length; i++) { 94 + bytes[i] = binaryString.charCodeAt(i); 95 + } 96 + result.set(template.path, bytes); 97 + } 98 + return result; 99 + }
+1 -1
packages/oauth/deno.json
··· 1 1 { 2 2 "name": "@slices/oauth", 3 - "version": "0.4.1", 3 + "version": "0.5.0", 4 4 "exports": "./mod.ts", 5 5 "tasks": { 6 6 "test": "deno test"
-1
packages/session/deno.json
··· 7 7 "check": "deno check mod.ts" 8 8 }, 9 9 "imports": { 10 - "@slices/oauth": "../oauth/mod.ts", 11 10 "pg": "npm:pg@^8.16.3" 12 11 } 13 12 }