{"_id":"@alankyshum/md-share-app","_rev":"2-ad8d600e960e294b4e95be95562491f0","name":"@alankyshum/md-share-app","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.0":{"name":"@alankyshum/md-share-app","version":"1.0.0","keywords":["markdown","share","encryption","sveltekit","cloudflare-pages"],"author":{"name":"Alan Shum"},"license":"MIT","_id":"@alankyshum/md-share-app@1.0.0","maintainers":[{"name":"alankyshum","email":"alan200994@gmail.com"}],"homepage":"https://github.com/alankyshum/md-share#readme","bugs":{"url":"https://github.com/alankyshum/md-share/issues"},"dist":{"shasum":"9c6792740b1ea80c5c6778e8d31890fe197544b4","tarball":"https://registry.npmjs.org/@alankyshum/md-share-app/-/md-share-app-1.0.0.tgz","fileCount":35,"integrity":"sha512-pHs938x98n6n8FJOMRNcb8C/k6lPcASitrUal4VM2Hm55K7THK4DsxgXJ+hJYAHAG9M86xRdKhuA+xJgNX7t0Q==","signatures":[{"sig":"MEYCIQDrdEZ/ZpcV/RTWWr/g4d48R/snJv+FojRQRQhAwLJrcgIhAP453dBw5TSY8EQYzobn4yY74QqVBXQSV93iUGgfMIdZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":109630},"type":"module","gitHead":"83a28361e6f00812e86959de1d44b3d8cabf555e","scripts":{"dev":"vite dev","test":"vitest run","build":"vite build","preview":"vite preview","prebuild":"node ./scripts/write-build-info.mjs"},"_npmUser":{"name":"alankyshum","email":"alan200994@gmail.com"},"repository":{"url":"git+https://github.com/alankyshum/md-share.git","type":"git","directory":"packages/md-share-app"},"_npmVersion":"10.9.2","description":"SvelteKit SPA viewer for encrypted markdown shares with dynamic OG previews","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pako":"^2.1.0","marked":"^15.0.12","tocbot":"^4.36.6","js-yaml":"^4.1.1","mermaid":"^11.4.1","chart.js":"^4.5.1","workers-og":"^0.0.27","maplibre-gl":"^4.7.0","markmap-lib":"^0.18.12","frappe-gantt":"^1.2.2","highlight.js":"^11.11.1","markmap-view":"^0.18.12","markmap-toolbar":"^0.18.12","tabulator-tables":"^6.4.0","github-markdown-css":"^5.6.1","@alankyshum/share-crypto":"workspace:*","chartjs-plugin-annotation":"^3.1.0","@alankyshum/markdown-renderer":"workspace:*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.3","svelte":"^5.28.2","vitest":"^3.0.5","typescript":"^5.8.3","@types/pako":"^2.0.3","tailwindcss":"^4.1.5","@sveltejs/kit":"^2.20.7","@types/js-yaml":"^4.0.9","@tailwindcss/vite":"^4.1.5","@sveltejs/adapter-static":"^3.0.8","@sveltejs/vite-plugin-svelte":"^5.0.3"},"_npmOperationalInternal":{"tmp":"tmp/md-share-app_1.0.0_1779749513734_0.24404883963579138","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@alankyshum/md-share-app","version":"1.0.1","description":"SvelteKit SPA viewer for encrypted markdown shares with dynamic OG previews","license":"MIT","author":{"name":"Alan Shum"},"repository":{"type":"git","url":"git+https://github.com/alankyshum/md-share.git","directory":"packages/md-share-app"},"homepage":"https://github.com/alankyshum/md-share#readme","bugs":{"url":"https://github.com/alankyshum/md-share/issues"},"keywords":["markdown","share","encryption","sveltekit","cloudflare-pages"],"publishConfig":{"access":"public"},"type":"module","scripts":{"prebuild":"node ./scripts/write-build-info.mjs","dev":"vite dev","build":"vite build","preview":"vite preview","test":"vitest run"},"dependencies":{"@alankyshum/markdown-renderer":"^1.0.1","@alankyshum/share-crypto":"^1.0.0","chart.js":"^4.5.1","chartjs-plugin-annotation":"^3.1.0","frappe-gantt":"^1.2.2","github-markdown-css":"^5.6.1","highlight.js":"^11.11.1","js-yaml":"^4.1.1","maplibre-gl":"^4.7.0","marked":"^15.0.12","markmap-lib":"^0.18.12","markmap-toolbar":"^0.18.12","markmap-view":"^0.18.12","mermaid":"^11.4.1","pako":"^2.1.0","tabulator-tables":"^6.4.0","tocbot":"^4.36.6","workers-og":"^0.0.27"},"devDependencies":{"@sveltejs/adapter-static":"^3.0.8","@sveltejs/kit":"^2.20.7","@sveltejs/vite-plugin-svelte":"^5.0.3","@tailwindcss/vite":"^4.1.5","@types/js-yaml":"^4.0.9","@types/pako":"^2.0.3","svelte":"^5.28.2","tailwindcss":"^4.1.5","typescript":"^5.8.3","vite":"^6.3.3","vitest":"^3.0.5"},"_id":"@alankyshum/md-share-app@1.0.1","gitHead":"e5e46ae95d207623ac9fd78dc2ac31362c4068e8","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-UEBoLBG2gp4hWs861Q+bH7863pJCu0x0oFqmK+eDT0i++6HEnyM2QYhmlAEXKIGtRaR17ny2In61ufk78VZbbw==","shasum":"b15aa6f51110d19f5bb5c061ac39b8daa1d3c9c0","tarball":"https://registry.npmjs.org/@alankyshum/md-share-app/-/md-share-app-1.0.1.tgz","fileCount":35,"unpackedSize":109620,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDxUtvMTw42LwfegFaHPkUf5Nir/JOJhiS4FnBegQZubAIhANZrIBy/zWfxHId0ebksIdInxIxDKCzJQHRNQX4+ngIw"}]},"_npmUser":{"name":"alankyshum","email":"alan200994@gmail.com"},"directories":{},"maintainers":[{"name":"alankyshum","email":"alan200994@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/md-share-app_1.0.1_1779751097942_0.36819719188963385"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-25T22:51:53.587Z","modified":"2026-05-25T23:18:18.199Z","1.0.0":"2026-05-25T22:51:53.899Z","1.0.1":"2026-05-25T23:18:18.086Z"},"bugs":{"url":"https://github.com/alankyshum/md-share/issues"},"author":{"name":"Alan Shum"},"license":"MIT","homepage":"https://github.com/alankyshum/md-share#readme","keywords":["markdown","share","encryption","sveltekit","cloudflare-pages"],"repository":{"type":"git","url":"git+https://github.com/alankyshum/md-share.git","directory":"packages/md-share-app"},"description":"SvelteKit SPA viewer for encrypted markdown shares with dynamic OG previews","maintainers":[{"name":"alankyshum","email":"alan200994@gmail.com"}],"readme":"# @alankyshum/md-share-app\n\nA SvelteKit and Cloudflare Pages Single Page Application (SPA) designed to serve and decrypt secure, encrypted markdown files shared via the `md-share` CLI.\n\n---\n\n## What It Is\n\n`@alankyshum/md-share-app` acts as the frontend viewer for the `md-share` decentralized publishing system. Rather than storing your markdown in centralized databases or standard Key-Value (KV) stores, the viewer dynamically pulls AES-256-GCM encrypted payloads from your public GitHub storage repository and decrypts them 100% client-side.\n\n### Key Features\n- **Client-side Decryption**: The decryption key stays inside the `#k=` URL fragment, meaning neither Cloudflare nor GitHub ever receives the plaintext content.\n- **Dynamic OG Social Previews**: Dynamically renders standard Open Graph cards and customized 1200×630 PNG previews on Slack, Telegram, Twitter, or Discord.\n- **Interactive Upgrades**: Leverages `@alankyshum/markdown-renderer` to dynamically convert plain markdown, Tables, Map fences, Chart fences, and Mermaid blocks into rich interactive components.\n\n---\n\n## Routes Summary\n\nThe application exposes the following routes and endpoints:\n\n- `/` — Homepage / landing page.\n- `/u/<owner>/<repo>/s/<key>` — Interactive decrypted markdown viewer.\n- `/u/<owner>/<repo>/og/<key>.png` — Cloudflare worker endpoint generating high-fidelity, dynamic, 1200×630 OG social preview images.\n- `/api/config` — Returns application-specific configuration.\n- `/api/keys` — Referrer-restricted API distributing MapLibre and OpenRouteService integration keys.\n\n---\n\n## How to Self-Host\n\nYou can host your own custom instance of the SPA directly on your Cloudflare account. The deployment is CLI-driven and auto-updates from the canonical repository on every change to master.\n\nFor step-by-step instructions on setting up your own deployment using the `md-share init --self-host` command, refer to the [Root README Self-Hosting section](https://github.com/alankyshum/md-share#readme).\n\n---\n\n## License\n\nDistributed under the MIT License. See [LICENSE](LICENSE) for details.\n","readmeFilename":"README.md"}