Firefox WebExtension that lets you share the current tab to frontpage.fyi with minimal effort.

Compare changes

Choose any two refs to compare.

+24
.devcontainer/Dockerfile
··· 1 + FROM fedora:40 2 + 3 + # Install system packages required for Rust builds and Node-based Codex CLI 4 + RUN dnf install -y \ 5 + curl \ 6 + ca-certificates \ 7 + make \ 8 + gcc \ 9 + pkg-config \ 10 + openssl-devel \ 11 + git \ 12 + nodejs \ 13 + npm \ 14 + && dnf clean all 15 + 16 + # Install OpenAI Codex CLI from npm registry 17 + RUN npm install -g @openai/codex 18 + 19 + # Create a non-root user to run the CLI by default 20 + RUN useradd --create-home --shell /bin/bash app 21 + USER app 22 + WORKDIR /home/app 23 + 24 + CMD ["codex", "--help"]
+16
.devcontainer/devcontainer.json
··· 1 + { 2 + "name": "Frontpage Firefox Plugin", 3 + "build": { 4 + "dockerfile": "Dockerfile", 5 + "context": ".." 6 + }, 7 + "remoteUser": "app", 8 + "customizations": { 9 + "vscode": { 10 + "extensions": [ 11 + "ms-vsliveshare.vsliveshare", 12 + "dbaeumer.vscode-eslint" 13 + ] 14 + } 15 + } 16 + }
+37
.github/workflows/mirror-to-tangled.yml
··· 1 + name: mirror-to-tangled 2 + 3 + on: 4 + push: 5 + branches: 6 + - main 7 + 8 + jobs: 9 + mirror: 10 + runs-on: ubuntu-latest 11 + environment: "Default" 12 + steps: 13 + - name: Checkout repository 14 + uses: actions/checkout@v4 15 + with: 16 + fetch-depth: 0 17 + 18 + - name: Configure SSH 19 + uses: webfactory/ssh-agent@v0.9.1 20 + with: 21 + ssh-private-key: ${{ secrets.TANGLED_DEPLOY_KEY }} 22 + 23 + - name: Add Tangled host key 24 + run: | 25 + mkdir -p ~/.ssh 26 + ssh-keyscan -H tangled.sh >> ~/.ssh/known_hosts 27 + 28 + - name: Push to Tangled 29 + env: 30 + TARGET_REMOTE: git@tangled.sh:galiglobal.com/frontpage_firefox_plugin 31 + run: | 32 + if git remote | grep -q '^tangled$'; then 33 + git remote set-url tangled "${TARGET_REMOTE}" 34 + else 35 + git remote add tangled "${TARGET_REMOTE}" 36 + fi 37 + git push tangled HEAD:main
+56 -12
.github/workflows/package-extension.yml
··· 2 2 3 3 on: 4 4 workflow_dispatch: 5 - push: 6 - branches: 7 - - main 8 - paths: 9 - - "extension/**" 10 - - ".github/workflows/package-extension.yml" 11 5 12 6 jobs: 13 7 build: 14 8 name: Build unsigned bundle 15 9 runs-on: ubuntu-latest 16 10 environment: "Default" 11 + permissions: 12 + contents: write 13 + env: 14 + AMO_JWT_ISSUER: ${{ secrets.AMO_JWT_ISSUER }} 15 + AMO_JWT_SECRET: ${{ secrets.AMO_JWT_SECRET }} 17 16 18 17 steps: 19 18 - name: Checkout repository ··· 30 29 - name: Build unsigned archive 31 30 run: web-ext build --source-dir ./extension --artifacts-dir ./web-ext-artifacts 32 31 32 + - name: Determine version 33 + run: | 34 + VERSION=$(node -pe "require('./extension/manifest.json').version") 35 + echo "VERSION=${VERSION}" >> $GITHUB_ENV 36 + echo "TAG=v${VERSION}-${GITHUB_RUN_ID}" >> $GITHUB_ENV 37 + 38 + - name: Rename unsigned archive 39 + run: | 40 + ZIP_PATH=$(ls web-ext-artifacts/*.zip) 41 + mv "$ZIP_PATH" "web-ext-artifacts/frontpage-submitter-${VERSION}.zip" 42 + 33 43 - name: Upload unsigned artifact 34 44 uses: actions/upload-artifact@v4 35 45 with: 36 46 name: frontpage-extension-unsigned 37 - path: web-ext-artifacts/** 47 + path: web-ext-artifacts/frontpage-submitter-${{ env.VERSION }}.zip 38 48 39 49 - name: Sign using AMO (optional) 40 - if: ${{ secrets.AMO_JWT_ISSUER && secrets.AMO_JWT_SECRET }} 41 50 env: 42 - WEB_EXT_API_KEY: ${{ secrets.AMO_JWT_ISSUER }} 43 - WEB_EXT_API_SECRET: ${{ secrets.AMO_JWT_SECRET }} 51 + WEB_EXT_API_KEY: ${{ env.AMO_JWT_ISSUER }} 52 + WEB_EXT_API_SECRET: ${{ env.AMO_JWT_SECRET }} 44 53 WEB_EXT_ID: frontpage-submitter@example.com 45 54 run: | 55 + if [ -z "${WEB_EXT_API_KEY}" ] || [ -z "${WEB_EXT_API_SECRET}" ]; then 56 + echo "AMO credentials not provided. Skipping signing step." 57 + exit 0 58 + fi 59 + set +e 46 60 web-ext sign \ 47 61 --channel=unlisted \ 48 62 --source-dir ./extension \ 49 - --artifacts-dir ./web-ext-artifacts 63 + --artifacts-dir ./web-ext-artifacts 2>&1 | tee ./sign.log 64 + rc=${PIPESTATUS[0]} 65 + set -e 66 + if [ $rc -ne 0 ]; then 67 + if grep -q "Version ${VERSION} already exists" ./sign.log; then 68 + echo "AMO already has version ${VERSION}; skipping signing." 69 + exit 0 70 + fi 71 + echo "Signing failed:" 72 + cat ./sign.log 73 + exit $rc 74 + fi 75 + 76 + - name: Rename signed archive (optional) 77 + if: ${{ hashFiles('web-ext-artifacts/*.xpi') != '' }} 78 + run: | 79 + XPI_PATH=$(ls web-ext-artifacts/*.xpi) 80 + mv "$XPI_PATH" "web-ext-artifacts/frontpage-submitter-${VERSION}.xpi" 50 81 51 82 - name: Upload signed artifact (optional) 52 - if: ${{ secrets.AMO_JWT_ISSUER && secrets.AMO_JWT_SECRET }} 83 + if: ${{ hashFiles('web-ext-artifacts/*.xpi') != '' }} 53 84 uses: actions/upload-artifact@v4 54 85 with: 55 86 name: frontpage-extension-signed 56 87 path: web-ext-artifacts/*.xpi 88 + 89 + - name: Create GitHub release 90 + uses: softprops/action-gh-release@v2 91 + with: 92 + tag_name: ${{ env.TAG }} 93 + name: Frontpage Submitter ${{ env.VERSION }} (build ${{ github.run_number }}) 94 + draft: false 95 + prerelease: true 96 + generate_release_notes: false 97 + files: | 98 + web-ext-artifacts/*.zip 99 + web-ext-artifacts/*.xpi 100 + fail_on_unmatched_files: false
+6
AGENTS.md
··· 1 + # Agent Notes 2 + 3 + - Relocated the project Dockerfile into `.devcontainer/Dockerfile` so GitHub Codespaces can pick it up automatically. 4 + - Added `.devcontainer/devcontainer.json` pointing to the Dockerfile, sets remote user `app`, and recommends necessary VS Code extensions. 5 + - Dropped the Rust Analyzer recommendation per project requirements; keep the list lean to essentials. 6 + - Remember to mirror any environment dependency updates in both the Dockerfile and devcontainer definition.
-24
Dockerfile
··· 1 - FROM fedora:40 2 - 3 - # Install system packages required for Rust builds and Node-based Codex CLI 4 - RUN dnf install -y \ 5 - curl \ 6 - ca-certificates \ 7 - make \ 8 - gcc \ 9 - pkg-config \ 10 - openssl-devel \ 11 - git \ 12 - nodejs \ 13 - npm \ 14 - && dnf clean all 15 - 16 - # Install OpenAI Codex CLI from npm registry 17 - RUN npm install -g @openai/codex 18 - 19 - # Create a non-root user to run the CLI by default 20 - RUN useradd --create-home --shell /bin/bash app 21 - USER app 22 - WORKDIR /home/app 23 - 24 - CMD ["codex", "--help"]
+201
LICENSE
··· 1 + Apache License 2 + Version 2.0, January 2004 3 + http://www.apache.org/licenses/ 4 + 5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 + 7 + 1. Definitions. 8 + 9 + "License" shall mean the terms and conditions for use, reproduction, 10 + and distribution as defined by Sections 1 through 9 of this document. 11 + 12 + "Licensor" shall mean the copyright owner or entity authorized by 13 + the copyright owner that is granting the License. 14 + 15 + "Legal Entity" shall mean the union of the acting entity and all 16 + other entities that control, are controlled by, or are under common 17 + control with that entity. For the purposes of this definition, 18 + "control" means (i) the power, direct or indirect, to cause the 19 + direction or management of such entity, whether by contract or 20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 + outstanding shares, or (iii) beneficial ownership of such entity. 22 + 23 + "You" (or "Your") shall mean an individual or Legal Entity 24 + exercising permissions granted by this License. 25 + 26 + "Source" form shall mean the preferred form for making modifications, 27 + including but not limited to software source code, documentation 28 + source, and configuration files. 29 + 30 + "Object" form shall mean any form resulting from mechanical 31 + transformation or translation of a Source form, including but 32 + not limited to compiled object code, generated documentation, 33 + and conversions to other media types. 34 + 35 + "Work" shall mean the work of authorship, whether in Source or 36 + Object form, made available under the License, as indicated by a 37 + copyright notice that is included in or attached to the work 38 + (an example is provided in the Appendix below). 39 + 40 + "Derivative Works" shall mean any work, whether in Source or Object 41 + form, that is based on (or derived from) the Work and for which the 42 + editorial revisions, annotations, elaborations, or other modifications 43 + represent, as a whole, an original work of authorship. For the purposes 44 + of this License, Derivative Works shall not include works that remain 45 + separable from, or merely link (or bind by name) to the interfaces of, 46 + the Work and Derivative Works thereof. 47 + 48 + "Contribution" shall mean any work of authorship, including 49 + the original version of the Work and any modifications or additions 50 + to that Work or Derivative Works thereof, that is intentionally 51 + submitted to Licensor for inclusion in the Work by the copyright owner 52 + or by an individual or Legal Entity authorized to submit on behalf of 53 + the copyright owner. For the purposes of this definition, "submitted" 54 + means any form of electronic, verbal, or written communication sent 55 + to the Licensor or its representatives, including but not limited to 56 + communication on electronic mailing lists, source code control systems, 57 + and issue tracking systems that are managed by, or on behalf of, the 58 + Licensor for the purpose of discussing and improving the Work, but 59 + excluding communication that is conspicuously marked or otherwise 60 + designated in writing by the copyright owner as "Not a Contribution." 61 + 62 + "Contributor" shall mean Licensor and any individual or Legal Entity 63 + on behalf of whom a Contribution has been received by Licensor and 64 + subsequently incorporated within the Work. 65 + 66 + 2. Grant of Copyright License. Subject to the terms and conditions of 67 + this License, each Contributor hereby grants to You a perpetual, 68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 + copyright license to reproduce, prepare Derivative Works of, 70 + publicly display, publicly perform, sublicense, and distribute the 71 + Work and such Derivative Works in Source or Object form. 72 + 73 + 3. Grant of Patent License. Subject to the terms and conditions of 74 + this License, each Contributor hereby grants to You a perpetual, 75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 + (except as stated in this section) patent license to make, have made, 77 + use, offer to sell, sell, import, and otherwise transfer the Work, 78 + where such license applies only to those patent claims licensable 79 + by such Contributor that are necessarily infringed by their 80 + Contribution(s) alone or by combination of their Contribution(s) 81 + with the Work to which such Contribution(s) was submitted. If You 82 + institute patent litigation against any entity (including a 83 + cross-claim or counterclaim in a lawsuit) alleging that the Work 84 + or a Contribution incorporated within the Work constitutes direct 85 + or contributory patent infringement, then any patent licenses 86 + granted to You under this License for that Work shall terminate 87 + as of the date such litigation is filed. 88 + 89 + 4. Redistribution. You may reproduce and distribute copies of the 90 + Work or Derivative Works thereof in any medium, with or without 91 + modifications, and in Source or Object form, provided that You 92 + meet the following conditions: 93 + 94 + (a) You must give any other recipients of the Work or 95 + Derivative Works a copy of this License; and 96 + 97 + (b) You must cause any modified files to carry prominent notices 98 + stating that You changed the files; and 99 + 100 + (c) You must retain, in the Source form of any Derivative Works 101 + that You distribute, all copyright, patent, trademark, and 102 + attribution notices from the Source form of the Work, 103 + excluding those notices that do not pertain to any part of 104 + the Derivative Works; and 105 + 106 + (d) If the Work includes a "NOTICE" text file as part of its 107 + distribution, then any Derivative Works that You distribute must 108 + include a readable copy of the attribution notices contained 109 + within such NOTICE file, excluding those notices that do not 110 + pertain to any part of the Derivative Works, in at least one 111 + of the following places: within a NOTICE text file distributed 112 + as part of the Derivative Works; within the Source form or 113 + documentation, if provided along with the Derivative Works; or, 114 + within a display generated by the Derivative Works, if and 115 + wherever such third-party notices normally appear. The contents 116 + of the NOTICE file are for informational purposes only and 117 + do not modify the License. You may add Your own attribution 118 + notices within Derivative Works that You distribute, alongside 119 + or as an addendum to the NOTICE text from the Work, provided 120 + that such additional attribution notices cannot be construed 121 + as modifying the License. 122 + 123 + You may add Your own copyright statement to Your modifications and 124 + may provide additional or different license terms and conditions 125 + for use, reproduction, or distribution of Your modifications, or 126 + for any such Derivative Works as a whole, provided Your use, 127 + reproduction, and distribution of the Work otherwise complies with 128 + the conditions stated in this License. 129 + 130 + 5. Submission of Contributions. Unless You explicitly state otherwise, 131 + any Contribution intentionally submitted for inclusion in the Work 132 + by You to the Licensor shall be under the terms and conditions of 133 + this License, without any additional terms or conditions. 134 + Notwithstanding the above, nothing herein shall supersede or modify 135 + the terms of any separate license agreement you may have executed 136 + with Licensor regarding such Contributions. 137 + 138 + 6. Trademarks. This License does not grant permission to use the trade 139 + names, trademarks, service marks, or product names of the Licensor, 140 + except as required for reasonable and customary use in describing the 141 + origin of the Work and reproducing the content of the NOTICE file. 142 + 143 + 7. Disclaimer of Warranty. Unless required by applicable law or 144 + agreed to in writing, Licensor provides the Work (and each 145 + Contributor provides its Contributions) on an "AS IS" BASIS, 146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 + implied, including, without limitation, any warranties or conditions 148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 + PARTICULAR PURPOSE. You are solely responsible for determining the 150 + appropriateness of using or redistributing the Work and assume any 151 + risks associated with Your exercise of permissions under this License. 152 + 153 + 8. Limitation of Liability. In no event and under no legal theory, 154 + whether in tort (including negligence), contract, or otherwise, 155 + unless required by applicable law (such as deliberate and grossly 156 + negligent acts) or agreed to in writing, shall any Contributor be 157 + liable to You for damages, including any direct, indirect, special, 158 + incidental, or consequential damages of any character arising as a 159 + result of this License or out of the use or inability to use the 160 + Work (including but not limited to damages for loss of goodwill, 161 + work stoppage, computer failure or malfunction, or any and all 162 + other commercial damages or losses), even if such Contributor 163 + has been advised of the possibility of such damages. 164 + 165 + 9. Accepting Warranty or Additional Liability. While redistributing 166 + the Work or Derivative Works thereof, You may choose to offer, 167 + and charge a fee for, acceptance of support, warranty, indemnity, 168 + or other liability obligations and/or rights consistent with this 169 + License. However, in accepting such obligations, You may act only 170 + on Your own behalf and on Your sole responsibility, not on behalf 171 + of any other Contributor, and only if You agree to indemnify, 172 + defend, and hold each Contributor harmless for any liability 173 + incurred by, or claims asserted against, such Contributor by reason 174 + of your accepting any such warranty or additional liability. 175 + 176 + END OF TERMS AND CONDITIONS 177 + 178 + APPENDIX: How to apply the Apache License to your work. 179 + 180 + To apply the Apache License to your work, attach the following 181 + boilerplate notice, with the fields enclosed by brackets "[]" 182 + replaced with your own identifying information. (Don't include 183 + the brackets!) The text should be enclosed in the appropriate 184 + comment syntax for the file format. We also recommend that a 185 + file or class name and description of purpose be included on the 186 + same "printed page" as the copyright notice for easier 187 + identification within third-party archives. 188 + 189 + Copyright [yyyy] [name of copyright owner] 190 + 191 + Licensed under the Apache License, Version 2.0 (the "License"); 192 + you may not use this file except in compliance with the License. 193 + You may obtain a copy of the License at 194 + 195 + http://www.apache.org/licenses/LICENSE-2.0 196 + 197 + Unless required by applicable law or agreed to in writing, software 198 + distributed under the License is distributed on an "AS IS" BASIS, 199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 + See the License for the specific language governing permissions and 201 + limitations under the License.
+21 -35
README.md
··· 1 1 ## frontpage.fyi Firefox extension 2 2 3 3 This repository provides a Firefox WebExtension that lets you share the current tab to [frontpage.fyi](https://frontpage.fyi) with minimal effort. 4 - Links are submitted by creating `fyi.unravel.frontpage.post` records on your ATProto account, the same mechanism the official Frontpage site uses. 4 + Links are submitted by creating `fyi.frontpage.feed.post` records on your ATProto account, the same mechanism the official Frontpage site uses. 5 5 6 - > โ„น๏ธ The Frontpage source code lives at <https://tangled.org/did:plc:klmr76mpewpv7rtm3xgpzd7x/frontpage>. 6 + > โ„น๏ธ This repository is hosted on [tangled](https://tangled.org/@galiglobal.com/frontpage_firefox_plugin) (PRs, issues) and [GitHub](https://github.com/antonmry/frontpage_firefox_plugin) (CI/CD, releases). 7 7 8 8 ### Features 9 9 ··· 13 13 - Options page for storing your handle, app password, and optional PDS override. 14 14 - Convenience links to open frontpage.fyi or the options page from the pop-up. 15 15 16 - ### Repository layout 17 - 18 - ``` 19 - extension/ 20 - โ”œโ”€โ”€ background.js # Service worker for auth + ATProto requests 21 - โ”œโ”€โ”€ manifest.json # Manifest V3 definition 22 - โ”œโ”€โ”€ options.html/js # Credential management UI 23 - โ”œโ”€โ”€ popup.html/js # Submission UI 24 - โ””โ”€โ”€ styles.css # Shared styling for popup and options 25 - ``` 26 - 27 16 ### Prerequisites 28 17 29 18 - An ATProto account that Frontpage can read. 30 19 - An app password for that account (create one at <https://bsky.app/settings/app-passwords> or via your own PDS). 31 20 32 - ### Development install (temporary) 33 - 34 - 1. Open `about:debugging#/runtime/this-firefox`. 35 - 2. Click **Load Temporary Add-onโ€ฆ** and choose `manifest.json` inside the `extension/` directory. 36 - 3. Pin the โ€œFrontpageโ€ toolbar button if you want quick access. 37 - 38 - > This method is ideal while iterating; Firefox forgets the add-on on restart. 39 - 40 21 ### Install a packaged build 41 22 42 - After the GitHub Action finishes: 43 - 44 - 1. Download the `frontpage-extension-unsigned` (or `frontpage-extension-signed` if signing is enabled) artifact from the workflow run. 45 - 2. If unsigned, extract the ZIP that `web-ext` produced and re-zip it as needed, or use the ZIP as-is for self-hosting. 46 - 3. In Firefox, open `about:addons` โ†’ click the gear icon โ†’ **Install Add-on From Fileโ€ฆ**, then select the `.zip` or `.xpi`. 47 - 4. Firefox will install the add-on; confirm the permissions dialog to finish. 48 - 49 - For ongoing self-distribution, host the resulting `.zip`/`.xpi` on your own site and point Firefox users there, following Mozillaโ€™s [self-distribution guide](https://extensionworkshop.com/documentation/publish/self-distribution/). 23 + 1. Visit the [Releases](https://github.com/antonmry/frontpage_firefox_plugin/releases) page and download the latest `frontpage-submitter-<version>.xpi` (signed) or `.zip` (unsigned) asset. 24 + 2. In Firefox, open `about:addons`, click the gear icon, and choose **Install Add-on From Fileโ€ฆ**. 25 + 3. Select the downloaded `.xpi` (preferred) or `.zip` to complete the installation and approve the permissions prompt. 50 26 51 27 ### Configure credentials 52 28 ··· 74 50 - Inspect background/service-worker logs from `about:debugging` โ†’ **Inspect**. 75 51 - The UI scripts (`popup.js` and `options.js`) log to the DevTools console attached to their respective documents. 76 52 - When packaging for distribution, zip the contents of the `extension/` directory (see workflow below). 53 + - Licensed under the [Apache License 2.0](./LICENSE). 77 54 78 - ### Ship it on AMO 55 + ### Development install (temporary) 79 56 80 - - Provide the bundled icons from `extension/icons/` (16, 32, 48 and 128 px SVGs). 81 - - Zip the `extension/` directory (e.g. `cd extension && zip -r ../frontpage-submitter.zip .`). 82 - - Upload the archive to <https://addons.mozilla.org/developers/> and fill in the listing copy/screenshots. 83 - - AMO reviewers expect a concise summary; you can adapt the โ€œFeaturesโ€ bullets above. 57 + 1. Open `about:debugging#/runtime/this-firefox`. 58 + 2. Click **Load Temporary Add-onโ€ฆ** and choose `manifest.json` inside the `extension/` directory. 59 + 3. Pin the โ€œFrontpageโ€ toolbar button if you want quick access. 60 + 61 + > This method is ideal while iterating; Firefox forgets the add-on on restart. 84 62 85 63 ### Self-distribution pipeline 86 64 ··· 88 66 89 67 1. Configure `AMO_JWT_ISSUER` and `AMO_JWT_SECRET` repository secrets with your AMO API credentials if you want automatic signing. 90 68 Without the secrets, the workflow still produces an unsigned ZIP you can download. 91 - 2. Trigger the workflow manually (`Actions` โ†’ **package-extension** โ†’ **Run workflow**) or push changes to `main`. 69 + 2. Trigger the workflow manually (`Actions` โ†’ **package-extension** โ†’ **Run workflow**). 92 70 3. Download the artifacts: 93 71 - `frontpage-extension-unsigned` contains the ZIP that `web-ext build` generates. 94 72 - `frontpage-extension-signed` (only when secrets are present) contains the signed `.xpi` from AMO for self-hosting. 73 + 4. Each run also publishes a GitHub Release (tagged `v<version>-<run-id>`) that ships the same ZIP/XPI assets, so you can share a permanent download link. 74 + - Mozilla requires every signed upload to have a unique version number. Bump `version` in `extension/manifest.json` before rerunning the workflow if you need a new signed package. 95 75 96 76 These artifacts can be hosted directly for self-distribution as described in the [Mozilla documentation](https://extensionworkshop.com/documentation/publish/self-distribution/). 77 + 78 + ### Tangled mirror 79 + 80 + The `mirror-to-tangled.yml` workflow pushes every commit on `main` to Tangled, a federated Git hosting platform built on ATProto. 81 + Browse the mirror at <https://tangled.org/@galiglobal.com/frontpage_firefox_plugin>. 82 + Add a deploy key with write access as the `TANGLED_DEPLOY_KEY` repository secret so the mirror stays up to date.
+3 -3
extension/background.js
··· 1 1 const browser = globalThis.browser ?? globalThis.chrome; 2 2 const STORAGE_KEY = "frontpageAuth"; 3 - const FRONTPAGE_COLLECTION = "fyi.unravel.frontpage.post"; 4 - const RECORD_TYPE = "fyi.unravel.frontpage.post"; 3 + const FRONTPAGE_COLLECTION = "fyi.frontpage.feed.post"; 4 + const RECORD_TYPE = "fyi.frontpage.feed.post"; 5 5 const DEFAULT_MAX_TITLE = 120; 6 6 const DEFAULT_MAX_URL = 2048; 7 7 ··· 132 132 record: { 133 133 $type: RECORD_TYPE, 134 134 title: trimmedTitle, 135 - url: trimmedUrl, 135 + subject: { $type: "fyi.frontpage.feed.post#urlSubject", url: trimmedUrl }, 136 136 createdAt: new Date().toISOString() 137 137 } 138 138 };
+1 -1
extension/manifest.json
··· 2 2 "manifest_version": 3, 3 3 "name": "Frontpage Submitter", 4 4 "description": "Quickly share the current tab to frontpage.fyi via ATProto.", 5 - "version": "0.1.0", 5 + "version": "0.1.1", 6 6 "author": "Frontpage Submitter Contributors", 7 7 "homepage_url": "https://frontpage.fyi", 8 8 "icons": {
+1 -1
extension/options.html
··· 42 42 <h2>How it works</h2> 43 43 <ul class="tips"> 44 44 <li>The add-on stores your tokens locally using Firefox storage.</li> 45 - <li>Links are published as <code>fyi.unravel.frontpage.post</code> records on your ATProto account.</li> 45 + <li>Links are published as <code>fyi.frontpage.feed.post</code> records on your ATProto account.</li> 46 46 <li>Your PDS is discovered from your handle automatically unless you provide a custom URL.</li> 47 47 </ul> 48 48 </section>