pakstr 0.0.1 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +33 -0
  2. package/android-template/app/build.gradle.kts +2 -2
  3. package/android-template/app/src/androidTest/java/com/{nostrappshell → pakstr}/app/ExampleInstrumentedTest.kt +1 -1
  4. package/android-template/app/src/main/AndroidManifest.xml +2 -1
  5. package/android-template/app/src/main/assets/www/.gitkeep +0 -0
  6. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/ApplicationClass.kt +2 -2
  7. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/Config.kt +1 -1
  8. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/LocalServer.kt +3 -3
  9. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/MainActivity.kt +68 -20
  10. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/ShellRuntime.kt +7 -4
  11. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/WebViewController.kt +17 -8
  12. package/android-template/app/src/main/java/com/pakstr/app/permissions/PermissionManager.kt +78 -0
  13. package/android-template/app/src/main/java/com/pakstr/app/permissions/interfaces/PermissionHandler.kt +7 -0
  14. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/AmberSigner.kt +2 -2
  15. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/BunkerSigner.kt +2 -2
  16. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/FakeSigner.kt +2 -2
  17. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/NostrBridge.kt +1 -2
  18. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/SignerManager.kt +2 -9
  19. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/SignerType.kt +1 -1
  20. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/signer/interfaces/NostrSigner.kt +1 -1
  21. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/ui/theme/Color.kt +1 -1
  22. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/ui/theme/Theme.kt +1 -1
  23. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/ui/theme/Type.kt +1 -1
  24. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/utils/AppPreferences.kt +1 -1
  25. package/android-template/app/src/main/java/com/{nostrappshell → pakstr}/app/utils/SignerPickerBottomSheet.kt +3 -3
  26. package/android-template/app/src/test/java/com/{nostrappshell → pakstr}/app/ExampleUnitTest.kt +1 -1
  27. package/bin/cli.js +5 -2
  28. package/dist/android/branding.js +23 -0
  29. package/dist/android/gradle.js +17 -0
  30. package/dist/android/icon.js +105 -0
  31. package/dist/android/permissions.js +33 -0
  32. package/dist/android/splash.js +62 -0
  33. package/dist/android/template.js +142 -0
  34. package/dist/android/version.js +16 -0
  35. package/dist/cli.js +56 -0
  36. package/dist/commands/build.js +159 -0
  37. package/dist/config.js +4 -0
  38. package/dist/core/buildContext.js +100 -0
  39. package/dist/core/config.js +24 -0
  40. package/dist/core/copyFile.js +17 -0
  41. package/dist/core/manifest.js +28 -0
  42. package/dist/core/resolveProjectInputs.js +20 -0
  43. package/dist/core/validateProject.js +21 -0
  44. package/dist/core/zeroConfig.js +97 -0
  45. package/dist/index.js +5 -0
  46. package/dist/runners/BuildRunner.js +2 -0
  47. package/dist/runners/DockerGradleRunner.js +60 -0
  48. package/dist/runners/LocalGradleRunner.js +40 -0
  49. package/dist/runners/createRunner.js +15 -0
  50. package/package.json +28 -20
  51. package/android-template/app/src/main/assets/www/assets/hero-CLDdwZDr.png +0 -0
  52. package/android-template/app/src/main/assets/www/assets/index-CsUDhMuy.css +0 -1
  53. package/android-template/app/src/main/assets/www/assets/index-D-e3tQW5.js +0 -56
  54. package/android-template/app/src/main/assets/www/assets/vite-BF8QNONU.svg +0 -1
  55. package/android-template/app/src/main/assets/www/favicon.svg +0 -1
  56. package/android-template/app/src/main/assets/www/icons.svg +0 -24
  57. package/android-template/app/src/main/assets/www/index.html +0 -14
  58. package/android-template/app/src/main/assets/www/test.html +0 -17
  59. package/bin/cli.ts +0 -5
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadConfig = loadConfig;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function loadConfig(cwd) {
10
+ const configPath = path_1.default.join(cwd, "nostr.config.json");
11
+ if (!fs_1.default.existsSync(configPath)) {
12
+ return {
13
+ builder: "local"
14
+ };
15
+ }
16
+ const json = JSON.parse(fs_1.default.readFileSync(configPath, "utf-8"));
17
+ const builder = json.builder === "docker"
18
+ ? "docker"
19
+ : "local";
20
+ return {
21
+ builder,
22
+ dockerImage: json.dockerImage
23
+ };
24
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.copyFile = copyFile;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function copyFile(source, destination) {
10
+ const dir = path_1.default.dirname(destination);
11
+ if (!fs_1.default.existsSync(dir)) {
12
+ fs_1.default.mkdirSync(dir, {
13
+ recursive: true
14
+ });
15
+ }
16
+ fs_1.default.copyFileSync(source, destination);
17
+ }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loadManifest = loadManifest;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ function loadManifest(path) {
9
+ if (!fs_1.default.existsSync(path)) {
10
+ throw new Error(`❌ Manifest not found: ${path}`);
11
+ }
12
+ const manifest = JSON.parse(fs_1.default.readFileSync(path, "utf-8"));
13
+ validateManifest(manifest);
14
+ return manifest;
15
+ }
16
+ function validateManifest(m) {
17
+ if (!m.appId)
18
+ throw new Error("❌ appId is required");
19
+ if (!m.appName)
20
+ throw new Error("❌ appName is required");
21
+ if (!m.versionName)
22
+ throw new Error("❌ versionName is required");
23
+ if (m.versionCode === undefined)
24
+ throw new Error("❌ versionCode is required");
25
+ if (m.ui?.splash && !m.ui.splash.image) {
26
+ throw new Error("❌ splash.image is required");
27
+ }
28
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveProjectInputs = resolveProjectInputs;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function resolveProjectInputs() {
10
+ const cwd = process.cwd();
11
+ const dist = path_1.default.join(cwd, "dist");
12
+ const manifest = path_1.default.join(cwd, "app.manifest.json");
13
+ if (!fs_1.default.existsSync(dist)) {
14
+ throw new Error("❌ Missing dist folder. Expected: ./dist");
15
+ }
16
+ if (!fs_1.default.existsSync(manifest)) {
17
+ throw new Error("❌ Missing app.manifest.json");
18
+ }
19
+ return { dist, manifest };
20
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.validateProject = validateProject;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ function validateProject(dist, manifest) {
10
+ const index = path_1.default.join(dist, "index.html");
11
+ if (!fs_1.default.existsSync(dist)) {
12
+ throw new Error("❌ dist folder not found");
13
+ }
14
+ if (!fs_1.default.existsSync(index)) {
15
+ throw new Error("❌ dist/index.html missing (not a web build)");
16
+ }
17
+ if (!manifest.appId || !manifest.appName) {
18
+ throw new Error("❌ Invalid manifest (missing appId/appName)");
19
+ }
20
+ console.log("✔ Project validation OK");
21
+ }
@@ -0,0 +1,97 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.resolveZeroConfig = resolveZeroConfig;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ /**
10
+ * MAIN ENTRY
11
+ * Tries to auto-detect web build + manifest
12
+ */
13
+ function resolveZeroConfig() {
14
+ const cwd = process.cwd();
15
+ const dist = findWebDist(cwd);
16
+ const manifest = findManifest(cwd);
17
+ if (!dist) {
18
+ throw new Error("❌ No valid web dist found (index.html missing)");
19
+ }
20
+ if (!manifest) {
21
+ throw new Error("❌ No manifest found (app.manifest.json or manifest.json)");
22
+ }
23
+ return {
24
+ dist,
25
+ manifest,
26
+ };
27
+ }
28
+ /**
29
+ * -----------------------------
30
+ * WEB DIST DETECTION
31
+ * -----------------------------
32
+ */
33
+ function findWebDist(cwd) {
34
+ const candidates = ["dist", "build", "www"];
35
+ // 1. local folder scan
36
+ for (const c of candidates) {
37
+ const p = path_1.default.join(cwd, c);
38
+ if (isValidWebDist(p)) {
39
+ return p;
40
+ }
41
+ }
42
+ // 2. parent folder scan (IMPORTANT for monorepos)
43
+ const parent = findInParentDirs(cwd);
44
+ if (parent)
45
+ return parent;
46
+ return null;
47
+ }
48
+ /**
49
+ * Valid web app check
50
+ */
51
+ function isValidWebDist(dir) {
52
+ return fs_1.default.existsSync(path_1.default.join(dir, "index.html"));
53
+ }
54
+ /**
55
+ * Scan upward in directory tree
56
+ */
57
+ function findInParentDirs(startDir) {
58
+ let dir = startDir;
59
+ while (dir !== path_1.default.parse(dir).root) {
60
+ const candidates = ["dist", "build", "www"];
61
+ for (const c of candidates) {
62
+ const p = path_1.default.join(dir, c);
63
+ if (isValidWebDist(p)) {
64
+ return p;
65
+ }
66
+ }
67
+ dir = path_1.default.dirname(dir);
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * -----------------------------
73
+ * MANIFEST DETECTION
74
+ * -----------------------------
75
+ */
76
+ function findManifest(cwd) {
77
+ const candidates = ["app.manifest.json", "manifest.json"];
78
+ // local scan
79
+ for (const c of candidates) {
80
+ const p = path_1.default.join(cwd, c);
81
+ if (fs_1.default.existsSync(p)) {
82
+ return p;
83
+ }
84
+ }
85
+ // parent scan (monorepo support)
86
+ let dir = cwd;
87
+ while (dir !== path_1.default.parse(dir).root) {
88
+ for (const c of candidates) {
89
+ const p = path_1.default.join(dir, c);
90
+ if (fs_1.default.existsSync(p)) {
91
+ return p;
92
+ }
93
+ }
94
+ dir = path_1.default.dirname(dir);
95
+ }
96
+ return null;
97
+ }
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const cli_1 = require("./cli");
5
+ (0, cli_1.runCLI)(process.argv.slice(2));
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.DockerGradleRunner = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ class DockerGradleRunner {
11
+ image;
12
+ constructor(image = process.env.PAKSTR_DOCKER_IMAGE ??
13
+ "git.nostrdev.com/stuff/pakstr/android-builder:latest") {
14
+ this.image = image;
15
+ }
16
+ async build(androidRoot, mode) {
17
+ console.log("🐳 Using Docker Gradle");
18
+ checkDockerAvailable();
19
+ ensureDockerImage(this.image);
20
+ const task = mode === "release" ? "assembleRelease" : "assembleDebug";
21
+ (0, child_process_1.execSync)(`docker run --rm \
22
+ --platform linux/amd64 \
23
+ -v "${androidRoot}:/workspace" \
24
+ ${this.image} \
25
+ ./gradlew ${task} -Dorg.gradle.vfs.watch=false`, {
26
+ stdio: "inherit",
27
+ });
28
+ const apkPath = path_1.default.join(androidRoot, "app", "build", "outputs", "apk", mode, mode === "debug" ? "app-debug.apk" : "app-release.apk");
29
+ if (!fs_1.default.existsSync(apkPath)) {
30
+ throw new Error(`APK not found: ${apkPath}`);
31
+ }
32
+ return apkPath;
33
+ }
34
+ }
35
+ exports.DockerGradleRunner = DockerGradleRunner;
36
+ function checkDockerAvailable() {
37
+ try {
38
+ (0, child_process_1.execSync)("docker --version", {
39
+ stdio: "ignore",
40
+ });
41
+ }
42
+ catch (err) {
43
+ throw new Error("🐳 Docker is not installed or not running. Please install Docker Desktop first.");
44
+ }
45
+ }
46
+ function ensureDockerImage(image) {
47
+ try {
48
+ (0, child_process_1.execSync)(`docker image inspect ${image}`, {
49
+ stdio: "ignore",
50
+ });
51
+ console.log(`🐳 Docker image ready: ${image}`);
52
+ }
53
+ catch {
54
+ console.log(`📦 Docker image missing: ${image}`);
55
+ console.log(`⬇️ Pulling ${image}...`);
56
+ (0, child_process_1.execSync)(`docker pull ${image}`, {
57
+ stdio: "inherit",
58
+ });
59
+ }
60
+ }
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.LocalGradleRunner = void 0;
7
+ const child_process_1 = require("child_process");
8
+ const path_1 = __importDefault(require("path"));
9
+ class LocalGradleRunner {
10
+ async build(androidRoot, mode) {
11
+ const gradleTask = mode === "release" ? "assembleRelease" : "assembleDebug";
12
+ console.log("⚙️ Local Gradle build");
13
+ console.log("📂 Android:", androidRoot);
14
+ const gradlewFile = path_1.default.join(androidRoot, "gradlew");
15
+ if (!fsExists(gradlewFile)) {
16
+ throw new Error("❌ gradlew not found in Android project root");
17
+ }
18
+ const gradlewPath = "./gradlew";
19
+ console.log("📍 Using:", gradlewPath);
20
+ (0, child_process_1.execSync)(`bash "${gradlewPath}" ${gradleTask}`, {
21
+ cwd: androidRoot,
22
+ stdio: "inherit",
23
+ });
24
+ const apkPath = findApk(androidRoot, mode);
25
+ if (!apkPath) {
26
+ throw new Error("❌ APK not found after Gradle build");
27
+ }
28
+ console.log("✅ APK created:", apkPath);
29
+ return apkPath;
30
+ }
31
+ }
32
+ exports.LocalGradleRunner = LocalGradleRunner;
33
+ function findApk(androidRoot, mode) {
34
+ const apkPath = path_1.default.join(androidRoot, "app", "build", "outputs", "apk", mode, mode === "debug" ? "app-debug.apk" : "app-release.apk");
35
+ return fsExists(apkPath) ? apkPath : null;
36
+ }
37
+ function fsExists(file) {
38
+ const fs = require("fs");
39
+ return fs.existsSync(file);
40
+ }
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createRunner = createRunner;
4
+ const LocalGradleRunner_1 = require("./LocalGradleRunner");
5
+ const DockerGradleRunner_1 = require("./DockerGradleRunner");
6
+ function createRunner(config) {
7
+ switch (config.builder) {
8
+ case "docker":
9
+ return new DockerGradleRunner_1.DockerGradleRunner(config.dockerImage);
10
+ case "local":
11
+ return new LocalGradleRunner_1.LocalGradleRunner();
12
+ default:
13
+ throw new Error(`Unknown runner type: ${config.builder}`);
14
+ }
15
+ }
package/package.json CHANGED
@@ -1,26 +1,21 @@
1
1
  {
2
2
  "name": "pakstr",
3
- "version": "0.0.1",
4
- "description": "CLI for packaging nostr web apps into an apk (with NIP-07 signer)",
5
- "keywords": [
6
- "nostr",
7
- "android",
8
- "cli"
9
- ],
10
- "repository": {
11
- "type": "git",
12
- "url": "https://git.nostrdev.com/stuff/pakstr"
13
- },
14
- "license": "ISC",
15
- "author": "https://nostrdev.com",
3
+ "version": "0.0.3",
4
+ "description": "CLI for packaging Nostr web apps into Android APKs",
16
5
  "type": "commonjs",
17
6
  "main": "dist/index.js",
18
7
  "bin": {
19
- "pakstr": "bin/cli.js"
8
+ "pakstr": "./bin/cli.js"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "engines": {
14
+ "node": ">=22"
20
15
  },
21
16
  "files": [
22
17
  "dist",
23
- "bin",
18
+ "bin/cli.js",
24
19
  "android-template/app",
25
20
  "android-template/gradle",
26
21
  "android-template/gradlew",
@@ -28,7 +23,7 @@
28
23
  "android-template/build.gradle.kts",
29
24
  "android-template/settings.gradle.kts",
30
25
  "android-template/gradle.properties",
31
- "android-template/template.json"
26
+ "README.md"
32
27
  ],
33
28
  "scripts": {
34
29
  "build": "tsc",
@@ -36,14 +31,27 @@
36
31
  "dev": "ts-node src/index.ts",
37
32
  "pack:test": "npm pack"
38
33
  },
34
+ "keywords": [
35
+ "nostr",
36
+ "android",
37
+ "cli",
38
+ "apk",
39
+ "nostr-app"
40
+ ],
41
+ "license": "ISC",
42
+ "devDependencies": {
43
+ "@types/node": "^26.1.0",
44
+ "@types/unzipper": "^0.10.11",
45
+ "typescript": "^6.0.3"
46
+ },
39
47
  "dependencies": {
40
48
  "fs-extra": "^11.3.6",
41
49
  "node-fetch": "^3.3.2",
50
+ "sharp": "^0.35.3",
42
51
  "unzipper": "^0.12.5"
43
52
  },
44
- "devDependencies": {
45
- "@types/node": "^26.1.0",
46
- "@types/unzipper": "^0.10.11",
47
- "typescript": "^6.0.3"
53
+ "repository": {
54
+ "type": "git",
55
+ "url": "https://git.nostrdev.com/stuff/pakstr.git"
48
56
  }
49
57
  }
@@ -1 +0,0 @@
1
- :root{--text:#6b6375;--text-h:#08060d;--bg:#fff;--border:#e5e4e7;--code-bg:#f4f3ec;--accent:#aa3bff;--accent-bg:#aa3bff1a;--accent-border:#aa3bff80;--social-bg:#f4f3ec80;--shadow:#0000001a 0 10px 15px -3px, #0000000d 0 4px 6px -2px;--sans:system-ui, "Segoe UI", Roboto, sans-serif;--heading:system-ui, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, Consolas, monospace;font:18px/145% var(--sans);letter-spacing:.18px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}@media (width<=1024px){:root{font-size:16px}}@media (prefers-color-scheme:dark){:root{--text:#9ca3af;--text-h:#f3f4f6;--bg:#16171d;--border:#2e303a;--code-bg:#1f2028;--accent:#c084fc;--accent-bg:#c084fc26;--accent-border:#c084fc80;--social-bg:#2f303a80;--shadow:#0006 0 10px 15px -3px, #00000040 0 4px 6px -2px}#social .button-icon{filter:invert()brightness(2)}}body{margin:0}h1,h2{font-family:var(--heading);color:var(--text-h);font-weight:500}h1{letter-spacing:-1.68px;margin:32px 0;font-size:56px}@media (width<=1024px){h1{margin:20px 0;font-size:36px}}h2{letter-spacing:-.24px;margin:0 0 8px;font-size:24px;line-height:118%}@media (width<=1024px){h2{font-size:20px}}p{margin:0}code,.counter{font-family:var(--mono);color:var(--text-h);border-radius:4px;display:inline-flex}code{background:var(--code-bg);padding:4px 8px;font-size:15px;line-height:135%}.counter{color:var(--accent);background:var(--accent-bg);border:2px solid #0000;border-radius:5px;margin-bottom:24px;padding:5px 10px;font-size:16px;transition:border-color .3s}.counter:hover{border-color:var(--accent-border)}.counter:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.hero{position:relative}.hero .base,.hero .framework,.hero .vite{margin:0 auto;inset-inline:0}.hero .base{z-index:0;width:170px;position:relative}.hero .framework,.hero .vite{position:absolute}.hero .framework{z-index:1;height:28px;top:34px;transform:perspective(2000px)rotate(300deg)rotateX(44deg)rotateY(39deg)scale(1.4)}.hero .vite{z-index:0;width:auto;height:26px;top:107px;transform:perspective(2000px)rotate(300deg)rotateX(40deg)rotateY(39deg)scale(.8)}#app{text-align:center;border-inline:1px solid var(--border);box-sizing:border-box;flex-direction:column;width:1126px;max-width:100%;min-height:100svh;margin:0 auto;display:flex}#center{flex-direction:column;flex-grow:1;place-content:center;place-items:center;gap:25px;display:flex}@media (width<=1024px){#center{gap:18px;padding:32px 20px 24px}}#next-steps{border-top:1px solid var(--border);text-align:left;display:flex}#next-steps>div{flex:1 1 0;padding:32px}@media (width<=1024px){#next-steps>div{padding:24px 20px}}#next-steps .icon{width:22px;height:22px;margin-bottom:16px}@media (width<=1024px){#next-steps{text-align:center;flex-direction:column}}#docs{border-right:1px solid var(--border)}@media (width<=1024px){#docs{border-right:none;border-bottom:1px solid var(--border)}}#next-steps ul{gap:8px;margin:32px 0 0;padding:0;list-style:none;display:flex}#next-steps ul .logo{height:18px}#next-steps ul a{color:var(--text-h);background:var(--social-bg);border-radius:6px;align-items:center;gap:8px;padding:6px 12px;font-size:16px;text-decoration:none;transition:box-shadow .3s;display:flex}#next-steps ul a:hover{box-shadow:var(--shadow)}#next-steps ul a .button-icon{width:18px;height:18px}@media (width<=1024px){#next-steps ul{flex-wrap:wrap;justify-content:center;margin-top:20px}#next-steps ul li{flex:calc(50% - 8px)}#next-steps ul a{box-sizing:border-box;justify-content:center;width:100%}}#spacer{border-top:1px solid var(--border);height:88px}@media (width<=1024px){#spacer{height:48px}}.ticks{width:100%;position:relative}.ticks:before,.ticks:after{content:"";border:5px solid #0000;position:absolute;top:-4.5px}.ticks:before{border-left-color:var(--border);left:0}.ticks:after{border-right-color:var(--border);right:0}
@@ -1,56 +0,0 @@
1
- (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20aria-hidden='true'%20width='32'%20height='32'%20viewBox='0%200%20256%20256'%3e%3cpath%20fill='%23007ACC'%20d='M0%20128v128h256V0H0z'/%3e%3cpath%20fill='%23FFF'%20d='m56.612%20128.85l-.081%2010.483h33.32v94.68h23.568v-94.68h33.321v-10.28c0-5.69-.122-10.444-.284-10.566c-.122-.162-20.4-.244-44.983-.203l-44.74.122l-.121%2010.443Zm149.955-10.742c6.501%201.625%2011.459%204.51%2016.01%209.224c2.357%202.52%205.851%207.111%206.136%208.208c.08.325-11.053%207.802-17.798%2011.988c-.244.162-1.22-.894-2.317-2.52c-3.291-4.795-6.745-6.867-12.028-7.233c-7.76-.528-12.759%203.535-12.718%2010.321c0%201.992.284%203.17%201.097%204.795c1.707%203.536%204.876%205.649%2014.832%209.956c18.326%207.883%2026.168%2013.084%2031.045%2020.48c5.445%208.249%206.664%2021.415%202.966%2031.208c-4.063%2010.646-14.14%2017.879-28.323%2020.276c-4.388.772-14.79.65-19.504-.203c-10.28-1.828-20.033-6.908-26.047-13.572c-2.357-2.6-6.949-9.387-6.664-9.874c.122-.163%201.178-.813%202.356-1.504c1.138-.65%205.446-3.129%209.509-5.485l7.355-4.267l1.544%202.276c2.154%203.29%206.867%207.801%209.712%209.305c8.167%204.307%2019.383%203.698%2024.909-1.26c2.357-2.153%203.332-4.388%203.332-7.68c0-2.966-.366-4.266-1.91-6.501c-1.99-2.845-6.054-5.242-17.595-10.24c-13.206-5.69-18.895-9.224-24.096-14.832c-3.007-3.25-5.852-8.452-7.03-12.8c-.975-3.617-1.22-12.678-.447-16.335c2.723-12.76%2012.353-21.659%2026.25-24.3c4.51-.853%2014.994-.528%2019.424.569Z'/%3e%3c/svg%3e`,t=`/assets/vite-BF8QNONU.svg`,n=`/assets/hero-CLDdwZDr.png`;function r(e){let t=0,n=n=>{t=n,e.innerHTML=`Count is ${t}`};e.addEventListener(`click`,()=>n(t+1)),n(0)}console.log(`🔥 NostrAppShell ENTRY LOADED`),document.body.insertAdjacentHTML(`afterbegin`,`
2
- <div style="
3
- background:#ff1744;
4
- color:white;
5
- padding:12px;
6
- font-size:18px;
7
- font-weight:bold;
8
- text-align:center;
9
- position:sticky;
10
- top:0;
11
- z-index:9999;
12
- ">
13
- 🚀 CLI TEST ACTIVE (WEB UPDATED SUCCESSFULLY)
14
- </div>
15
- `),document.querySelector(`#app`).innerHTML=`
16
- <section id="center">
17
- <div class="hero">
18
- <img src="${n}" class="base" width="170" height="179">
19
- <img src="${e}" class="framework" alt="TypeScript logo"/>
20
- <img src="${t}" class="vite" alt="Vite logo" />
21
- </div>
22
-
23
- <div>
24
- <h1>NostrAppShell Test</h1>
25
- <p>If you see this banner, CLI → APK pipeline is working.</p>
26
- </div>
27
-
28
- <button id="counter" type="button" class="counter"></button>
29
- </section>
30
-
31
- <div class="ticks"></div>
32
-
33
- <section id="next-steps">
34
- <div id="docs">
35
- <h2>Documentation</h2>
36
- <p>Build pipeline verification</p>
37
- <ul>
38
- <li><a href="https://vite.dev/" target="_blank">Vite</a></li>
39
- <li><a href="https://www.typescriptlang.org" target="_blank">TypeScript</a></li>
40
- </ul>
41
- </div>
42
-
43
- <div id="social">
44
- <h2>Network</h2>
45
- <ul>
46
- <li><a href="https://github.com/vitejs/vite" target="_blank">GitHub</a></li>
47
- <li><a href="https://chat.vite.dev/" target="_blank">Discord</a></li>
48
- <li><a href="https://x.com/vite_js" target="_blank">X</a></li>
49
- <li><a href="https://bsky.app/profile/vite.dev" target="_blank">Bluesky</a></li>
50
- </ul>
51
- </div>
52
- </section>
53
-
54
- <div class="ticks"></div>
55
- <section id="spacer"></section>
56
- `,r(document.querySelector(`#counter`));
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="77" height="47" fill="none" aria-labelledby="vite-logo-title" viewBox="0 0 77 47"><title id="vite-logo-title">Vite</title><style>.parenthesis{fill:#000}@media (prefers-color-scheme:dark){.parenthesis{fill:#fff}}</style><path fill="#9135ff" d="M40.151 45.71c-.663.844-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.493c-.92 0-1.457-1.04-.92-1.788l7.479-10.471c1.07-1.498 0-3.578-1.842-3.578H15.443c-.92 0-1.456-1.04-.92-1.788l9.696-13.576c.213-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.472c-1.07 1.497 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.087.89 1.83L40.153 45.712z"/><mask id="a" width="48" height="47" x="14" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M40.047 45.71c-.663.843-2.02.374-2.02-.699V34.708a2.26 2.26 0 0 0-2.262-2.262H24.389c-.92 0-1.457-1.04-.92-1.788l7.479-10.472c1.07-1.497 0-3.578-1.842-3.578H15.34c-.92 0-1.456-1.04-.92-1.788l9.696-13.575c.213-.297.556-.474.92-.474H53.93c.92 0 1.456 1.04.92 1.788L47.37 13.03c-1.07 1.498 0 3.578 1.842 3.578h11.376c.944 0 1.474 1.088.89 1.831L40.049 45.712z"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#eee6ff" rx="5.508" ry="14.704" transform="rotate(269.814 20.96 11.29)scale(-1 1)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#eee6ff" rx="10.399" ry="29.851" transform="rotate(89.814 -16.902 -8.275)scale(1 -1)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#8900ff" rx="5.508" ry="30.487" transform="rotate(89.814 -19.197 -7.127)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.928 4.177)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#8900ff" rx="5.508" ry="30.599" transform="rotate(89.814 -25.738 5.52)scale(1 -1)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#eee6ff" rx="14.072" ry="22.078" transform="rotate(93.35 31.245 55.578)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#8900ff" rx="3.47" ry="21.501" transform="rotate(89.009 35.419 55.202)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx="14.592" cy="9.743" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(39.51 14.592 9.743)"/></g><g filter="url(#k)"><ellipse cx="61.728" cy="-5.321" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 61.728 -5.32)"/></g><g filter="url(#l)"><ellipse cx="55.618" cy="7.104" fill="#00c2ff" rx="5.971" ry="9.665" transform="rotate(37.892 55.618 7.104)"/></g><g filter="url(#m)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#n)"><ellipse cx="12.326" cy="39.103" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 12.326 39.103)"/></g><g filter="url(#o)"><ellipse cx="49.857" cy="30.678" fill="#8900ff" rx="4.407" ry="29.108" transform="rotate(37.892 49.857 30.678)"/></g><g filter="url(#p)"><ellipse cx="52.623" cy="33.171" fill="#00c2ff" rx="5.971" ry="15.297" transform="rotate(37.892 52.623 33.17)"/></g></g><path d="M6.919 0c-9.198 13.166-9.252 33.575 0 46.789h6.215c-9.25-13.214-9.196-33.623 0-46.789zm62.424 0h-6.215c9.198 13.166 9.252 33.575 0 46.789h6.215c9.25-13.214 9.196-33.623 0-46.789" class="parenthesis"/><defs><filter id="b" width="60.045" height="41.654" x="-5.564" y="16.92" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-40.407" y="-6.762" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-35.435" y="2.801" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-30.84" y="20.8" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-29.307" y="21.949" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="29.961" y="-17.13" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="37.754" y="3.055" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-13.43" y="-22.082" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="34.321" y="-37.644" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="38.847" y="-10.552" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-15.081" y="6.78" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="22.45" y="-1.645" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="32.919" y="11.36" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17286" stdDeviation="4.596"/></filter></defs></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="48" height="46" fill="none" viewBox="0 0 48 46"><path fill="#863bff" d="M25.946 44.938c-.664.845-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.287c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.497 0-3.578-1.842-3.578H1.237c-.92 0-1.456-1.04-.92-1.788L10.013.474c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.579 1.842 3.579h11.377c.943 0 1.473 1.088.89 1.83L25.947 44.94z" style="fill:#863bff;fill:color(display-p3 .5252 .23 1);fill-opacity:1"/><mask id="a" width="48" height="46" x="0" y="0" maskUnits="userSpaceOnUse" style="mask-type:alpha"><path fill="#000" d="M25.842 44.938c-.664.844-2.021.375-2.021-.698V33.937a2.26 2.26 0 0 0-2.262-2.262H10.183c-.92 0-1.456-1.04-.92-1.788l7.48-10.471c1.07-1.498 0-3.579-1.842-3.579H1.133c-.92 0-1.456-1.04-.92-1.787L9.91.473c.214-.297.556-.474.92-.474h28.894c.92 0 1.456 1.04.92 1.788l-7.48 10.471c-1.07 1.498 0 3.578 1.842 3.578h11.377c.943 0 1.473 1.088.89 1.832L25.843 44.94z" style="fill:#000;fill-opacity:1"/></mask><g mask="url(#a)"><g filter="url(#b)"><ellipse cx="5.508" cy="14.704" fill="#ede6ff" rx="5.508" ry="14.704" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -4.47 31.516)"/></g><g filter="url(#c)"><ellipse cx="10.399" cy="29.851" fill="#ede6ff" rx="10.399" ry="29.851" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -39.328 7.883)"/></g><g filter="url(#d)"><ellipse cx="5.508" cy="30.487" fill="#7e14ff" rx="5.508" ry="30.487" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -25.913 -14.639)scale(1 -1)"/></g><g filter="url(#e)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.814 -32.644 -3.334)scale(1 -1)"/></g><g filter="url(#f)"><ellipse cx="5.508" cy="30.599" fill="#7e14ff" rx="5.508" ry="30.599" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="matrix(.00324 1 1 -.00324 -34.34 30.47)"/></g><g filter="url(#g)"><ellipse cx="14.072" cy="22.078" fill="#ede6ff" rx="14.072" ry="22.078" style="fill:#ede6ff;fill:color(display-p3 .9275 .9033 1);fill-opacity:1" transform="rotate(93.35 24.506 48.493)scale(-1 1)"/></g><g filter="url(#h)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#i)"><ellipse cx="3.47" cy="21.501" fill="#7e14ff" rx="3.47" ry="21.501" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(89.009 28.708 47.59)scale(-1 1)"/></g><g filter="url(#j)"><ellipse cx=".387" cy="8.972" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(39.51 .387 8.972)"/></g><g filter="url(#k)"><ellipse cx="47.523" cy="-6.092" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 47.523 -6.092)"/></g><g filter="url(#l)"><ellipse cx="41.412" cy="6.333" fill="#47bfff" rx="5.971" ry="9.665" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 41.412 6.333)"/></g><g filter="url(#m)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#n)"><ellipse cx="-1.879" cy="38.332" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 -1.88 38.332)"/></g><g filter="url(#o)"><ellipse cx="35.651" cy="29.907" fill="#7e14ff" rx="4.407" ry="29.108" style="fill:#7e14ff;fill:color(display-p3 .4922 .0767 1);fill-opacity:1" transform="rotate(37.892 35.651 29.907)"/></g><g filter="url(#p)"><ellipse cx="38.418" cy="32.4" fill="#47bfff" rx="5.971" ry="15.297" style="fill:#47bfff;fill:color(display-p3 .2799 .748 1);fill-opacity:1" transform="rotate(37.892 38.418 32.4)"/></g></g><defs><filter id="b" width="60.045" height="41.654" x="-19.77" y="16.149" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="c" width="90.34" height="51.437" x="-54.613" y="-7.533" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="d" width="79.355" height="29.4" x="-49.64" y="2.03" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="e" width="79.579" height="29.4" x="-45.045" y="20.029" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="f" width="79.579" height="29.4" x="-43.513" y="21.178" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="g" width="74.749" height="58.852" x="15.756" y="-17.901" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="7.659"/></filter><filter id="h" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="i" width="61.377" height="25.362" x="23.548" y="2.284" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="j" width="56.045" height="63.649" x="-27.636" y="-22.853" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="k" width="54.814" height="64.646" x="20.116" y="-38.415" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="l" width="33.541" height="35.313" x="24.641" y="-11.323" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="m" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="n" width="54.814" height="64.646" x="-29.286" y="6.009" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="o" width="54.814" height="64.646" x="8.244" y="-2.416" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter><filter id="p" width="39.409" height="43.623" x="18.713" y="10.588" color-interpolation-filters="sRGB" filterUnits="userSpaceOnUse"><feFlood flood-opacity="0" result="BackgroundImageFix"/><feBlend in="SourceGraphic" in2="BackgroundImageFix" result="shape"/><feGaussianBlur result="effect1_foregroundBlur_2002_17158" stdDeviation="4.596"/></filter></defs></svg>
@@ -1,24 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg">
2
- <symbol id="bluesky-icon" viewBox="0 0 16 17">
3
- <g clip-path="url(#bluesky-clip)"><path fill="#08060d" d="M7.75 7.735c-.693-1.348-2.58-3.86-4.334-5.097-1.68-1.187-2.32-.981-2.74-.79C.188 2.065.1 2.812.1 3.251s.241 3.602.398 4.13c.52 1.744 2.367 2.333 4.07 2.145-2.495.37-4.71 1.278-1.805 4.512 3.196 3.309 4.38-.71 4.987-2.746.608 2.036 1.307 5.91 4.93 2.746 2.72-2.746.747-4.143-1.747-4.512 1.702.189 3.55-.4 4.07-2.145.156-.528.397-3.691.397-4.13s-.088-1.186-.575-1.406c-.42-.19-1.06-.395-2.741.79-1.755 1.24-3.64 3.752-4.334 5.099"/></g>
4
- <defs><clipPath id="bluesky-clip"><path fill="#fff" d="M.1.85h15.3v15.3H.1z"/></clipPath></defs>
5
- </symbol>
6
- <symbol id="discord-icon" viewBox="0 0 20 19">
7
- <path fill="#08060d" d="M16.224 3.768a14.5 14.5 0 0 0-3.67-1.153c-.158.286-.343.67-.47.976a13.5 13.5 0 0 0-4.067 0c-.128-.306-.317-.69-.476-.976A14.4 14.4 0 0 0 3.868 3.77C1.546 7.28.916 10.703 1.231 14.077a14.7 14.7 0 0 0 4.5 2.306q.545-.748.965-1.587a9.5 9.5 0 0 1-1.518-.74q.191-.14.372-.293c2.927 1.369 6.107 1.369 8.999 0q.183.152.372.294-.723.437-1.52.74.418.838.963 1.588a14.6 14.6 0 0 0 4.504-2.308c.37-3.911-.63-7.302-2.644-10.309m-9.13 8.234c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.894 0 1.614.82 1.599 1.82.001 1-.705 1.82-1.6 1.82m5.91 0c-.878 0-1.599-.82-1.599-1.82 0-.998.705-1.82 1.6-1.82.893 0 1.614.82 1.599 1.82 0 1-.706 1.82-1.6 1.82"/>
8
- </symbol>
9
- <symbol id="documentation-icon" viewBox="0 0 21 20">
10
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="m15.5 13.333 1.533 1.322c.645.555.967.833.967 1.178s-.322.623-.967 1.179L15.5 18.333m-3.333-5-1.534 1.322c-.644.555-.966.833-.966 1.178s.322.623.966 1.179l1.534 1.321"/>
11
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M17.167 10.836v-4.32c0-1.41 0-2.117-.224-2.68-.359-.906-1.118-1.621-2.08-1.96-.599-.21-1.349-.21-2.848-.21-2.623 0-3.935 0-4.983.369-1.684.591-3.013 1.842-3.641 3.428C3 6.449 3 7.684 3 10.154v2.122c0 2.558 0 3.838.706 4.726q.306.383.713.671c.76.536 1.79.64 3.581.66"/>
12
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M3 10a2.78 2.78 0 0 1 2.778-2.778c.555 0 1.209.097 1.748-.047.48-.129.854-.503.982-.982.145-.54.048-1.194.048-1.749a2.78 2.78 0 0 1 2.777-2.777"/>
13
- </symbol>
14
- <symbol id="github-icon" viewBox="0 0 19 19">
15
- <path fill="#08060d" fill-rule="evenodd" d="M9.356 1.85C5.05 1.85 1.57 5.356 1.57 9.694a7.84 7.84 0 0 0 5.324 7.44c.387.079.528-.168.528-.376 0-.182-.013-.805-.013-1.454-2.165.467-2.616-.935-2.616-.935-.349-.91-.864-1.143-.864-1.143-.71-.48.051-.48.051-.48.787.051 1.2.805 1.2.805.695 1.194 1.817.857 2.268.649.064-.507.27-.857.49-1.052-1.728-.182-3.545-.857-3.545-3.87 0-.857.31-1.558.8-2.104-.078-.195-.349-1 .077-2.078 0 0 .657-.208 2.14.805a7.5 7.5 0 0 1 1.946-.26c.657 0 1.328.092 1.946.26 1.483-1.013 2.14-.805 2.14-.805.426 1.078.155 1.883.078 2.078.502.546.799 1.247.799 2.104 0 3.013-1.818 3.675-3.558 3.87.284.247.528.714.528 1.454 0 1.052-.012 1.896-.012 2.156 0 .208.142.455.528.377a7.84 7.84 0 0 0 5.324-7.441c.013-4.338-3.48-7.844-7.773-7.844" clip-rule="evenodd"/>
16
- </symbol>
17
- <symbol id="social-icon" viewBox="0 0 20 20">
18
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M12.5 6.667a4.167 4.167 0 1 0-8.334 0 4.167 4.167 0 0 0 8.334 0"/>
19
- <path fill="none" stroke="#aa3bff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.35" d="M2.5 16.667a5.833 5.833 0 0 1 8.75-5.053m3.837.474.513 1.035c.07.144.257.282.414.309l.93.155c.596.1.736.536.307.965l-.723.73a.64.64 0 0 0-.152.531l.207.903c.164.715-.213.991-.84.618l-.872-.52a.63.63 0 0 0-.577 0l-.872.52c-.624.373-1.003.094-.84-.618l.207-.903a.64.64 0 0 0-.152-.532l-.723-.729c-.426-.43-.289-.864.306-.964l.93-.156a.64.64 0 0 0 .412-.31l.513-1.034c.28-.562.735-.562 1.012 0"/>
20
- </symbol>
21
- <symbol id="x-icon" viewBox="0 0 19 19">
22
- <path fill="#08060d" fill-rule="evenodd" d="M1.893 1.98c.052.072 1.245 1.769 2.653 3.77l2.892 4.114c.183.261.333.48.333.486s-.068.089-.152.183l-.522.593-.765.867-3.597 4.087c-.375.426-.734.834-.798.905a1 1 0 0 0-.118.148c0 .01.236.017.664.017h.663l.729-.83c.4-.457.796-.906.879-.999a692 692 0 0 0 1.794-2.038c.034-.037.301-.34.594-.675l.551-.624.345-.392a7 7 0 0 1 .34-.374c.006 0 .93 1.306 2.052 2.903l2.084 2.965.045.063h2.275c1.87 0 2.273-.003 2.266-.021-.008-.02-1.098-1.572-3.894-5.547-2.013-2.862-2.28-3.246-2.273-3.266.008-.019.282-.332 2.085-2.38l2-2.274 1.567-1.782c.022-.028-.016-.03-.65-.03h-.674l-.3.342a871 871 0 0 1-1.782 2.025c-.067.075-.405.458-.75.852a100 100 0 0 1-.803.91c-.148.172-.299.344-.99 1.127-.304.343-.32.358-.345.327-.015-.019-.904-1.282-1.976-2.808L6.365 1.85H1.8zm1.782.91 8.078 11.294c.772 1.08 1.413 1.973 1.425 1.984.016.017.241.02 1.05.017l1.03-.004-2.694-3.766L7.796 5.75 5.722 2.852l-1.039-.004-1.039-.004z" clip-rule="evenodd"/>
23
- </symbol>
24
- </svg>
@@ -1,14 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
- <title>vanilla-test</title>
8
- <script type="module" crossorigin src="/assets/index-D-e3tQW5.js"></script>
9
- <link rel="stylesheet" crossorigin href="/assets/index-CsUDhMuy.css">
10
- </head>
11
- <body>
12
- <div id="app"></div>
13
- </body>
14
- </html>
@@ -1,17 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <body>
4
-
5
- <button onclick="test()">Test Nostr</button>
6
-
7
- <pre id="out"></pre>
8
-
9
- <script>
10
- async function test() {
11
- const pk = await window.nostr.getPublicKey();
12
- document.getElementById("out").innerText = pk;
13
- }
14
- </script>
15
-
16
- </body>
17
- </html>
package/bin/cli.ts DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env node
2
-
3
- import { runCLI } from "../src/cli";
4
-
5
- runCLI(process.argv.slice(2));