Web clipper powered by the AT Protocol

getting started

Tynan Purdy eb5f0109

+2
.gitignore
··· 1 + node_modules/ 2 + .env
+13
manifest.json
··· 1 + { 2 + "manifest_version": 3, 3 + 4 + "name": "Contrail", 5 + "description": "Clip links with the AT Protocol", 6 + "version": "0.0.1", 7 + 8 + "action": { 9 + "default_popup": "public/popup.html" 10 + }, 11 + 12 + "permissions": ["activeTab"] 13 + }
+98
package-lock.json
··· 1 + { 2 + "name": "contrail", 3 + "lockfileVersion": 3, 4 + "requires": true, 5 + "packages": { 6 + "": { 7 + "dependencies": { 8 + "@lexicon-community/types": "^1.0.0" 9 + } 10 + }, 11 + "node_modules/@atproto/common-web": { 12 + "version": "0.4.2", 13 + "resolved": "https://registry.npmjs.org/@atproto/common-web/-/common-web-0.4.2.tgz", 14 + "integrity": "sha512-vrXwGNoFGogodjQvJDxAeP3QbGtawgZute2ed1XdRO0wMixLk3qewtikZm06H259QDJVu6voKC5mubml+WgQUw==", 15 + "license": "MIT", 16 + "dependencies": { 17 + "graphemer": "^1.4.0", 18 + "multiformats": "^9.9.0", 19 + "uint8arrays": "3.0.0", 20 + "zod": "^3.23.8" 21 + } 22 + }, 23 + "node_modules/@atproto/lexicon": { 24 + "version": "0.4.14", 25 + "resolved": "https://registry.npmjs.org/@atproto/lexicon/-/lexicon-0.4.14.tgz", 26 + "integrity": "sha512-jiKpmH1QER3Gvc7JVY5brwrfo+etFoe57tKPQX/SmPwjvUsFnJAow5xLIryuBaJgFAhnTZViXKs41t//pahGHQ==", 27 + "license": "MIT", 28 + "dependencies": { 29 + "@atproto/common-web": "^0.4.2", 30 + "@atproto/syntax": "^0.4.0", 31 + "iso-datestring-validator": "^2.2.2", 32 + "multiformats": "^9.9.0", 33 + "zod": "^3.23.8" 34 + } 35 + }, 36 + "node_modules/@atproto/syntax": { 37 + "version": "0.4.1", 38 + "resolved": "https://registry.npmjs.org/@atproto/syntax/-/syntax-0.4.1.tgz", 39 + "integrity": "sha512-CJdImtLAiFO+0z3BWTtxwk6aY5w4t8orHTMVJgkf++QRJWTxPbIFko/0hrkADB7n2EruDxDSeAgfUGehpH6ngw==", 40 + "license": "MIT" 41 + }, 42 + "node_modules/@atproto/xrpc": { 43 + "version": "0.6.12", 44 + "resolved": "https://registry.npmjs.org/@atproto/xrpc/-/xrpc-0.6.12.tgz", 45 + "integrity": "sha512-Ut3iISNLujlmY9Gu8sNU+SPDJDvqlVzWddU8qUr0Yae5oD4SguaUFjjhireMGhQ3M5E0KljQgDbTmnBo1kIZ3w==", 46 + "license": "MIT", 47 + "dependencies": { 48 + "@atproto/lexicon": "^0.4.10", 49 + "zod": "^3.23.8" 50 + } 51 + }, 52 + "node_modules/@lexicon-community/types": { 53 + "version": "1.0.0", 54 + "resolved": "https://registry.npmjs.org/@lexicon-community/types/-/types-1.0.0.tgz", 55 + "integrity": "sha512-y7zNrgjzgeKfhoG9K5DfN+mFG7G/vBUHus1OKe4pj4rc/XKO/15cI+slfzzNRYEZ3b9+9BE1Jl6/HVH/odARsg==", 56 + "license": "MIT", 57 + "dependencies": { 58 + "@atproto/xrpc": "^0.6.5" 59 + } 60 + }, 61 + "node_modules/graphemer": { 62 + "version": "1.4.0", 63 + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 64 + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 65 + "license": "MIT" 66 + }, 67 + "node_modules/iso-datestring-validator": { 68 + "version": "2.2.2", 69 + "resolved": "https://registry.npmjs.org/iso-datestring-validator/-/iso-datestring-validator-2.2.2.tgz", 70 + "integrity": "sha512-yLEMkBbLZTlVQqOnQ4FiMujR6T4DEcCb1xizmvXS+OxuhwcbtynoosRzdMA69zZCShCNAbi+gJ71FxZBBXx1SA==", 71 + "license": "MIT" 72 + }, 73 + "node_modules/multiformats": { 74 + "version": "9.9.0", 75 + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-9.9.0.tgz", 76 + "integrity": "sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==", 77 + "license": "(Apache-2.0 AND MIT)" 78 + }, 79 + "node_modules/uint8arrays": { 80 + "version": "3.0.0", 81 + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-3.0.0.tgz", 82 + "integrity": "sha512-HRCx0q6O9Bfbp+HHSfQQKD7wU70+lydKVt4EghkdOvlK/NlrF90z+eXV34mUd48rNvVJXwkrMSPpCATkct8fJA==", 83 + "license": "MIT", 84 + "dependencies": { 85 + "multiformats": "^9.4.2" 86 + } 87 + }, 88 + "node_modules/zod": { 89 + "version": "3.25.76", 90 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", 91 + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", 92 + "license": "MIT", 93 + "funding": { 94 + "url": "https://github.com/sponsors/colinhacks" 95 + } 96 + } 97 + } 98 + }
+5
package.json
··· 1 + { 2 + "dependencies": { 3 + "@lexicon-community/types": "^1.0.0" 4 + } 5 + }
+1
popup.ts
··· 1 + import { CommunityLexiconBookmarksBookmark } from "@lexicon-community/types";
+7
public/popup.html
··· 1 + <html> 2 + <body> 3 + <h1>Contrail</h1> 4 + <button id="Save">Save</button> 5 + <button id="Cancel">Cancel</button> 6 + </body> 7 + </html>