Repository navigation
Search and import repeaters from the RepeaterBook API (#136) - #139
Merged
Merged
Conversation
The app is approved as a RepeaterBook distributed app. Each user pastes their own rbuapp_ token once; it lives in the OS credential store (Keychain / Credential Manager / Secret Service) via the keyring crate, never in SQLite, settings, logs or a backup, and is sent only in the X-RB-App-Token header over HTTPS with redirects refused. Every request goes through one path in commands/rb_api.rs that enforces what the application promised: the exact approved User-Agent, one request in flight, 2 s spacing, 20 an hour, an identical request within 10 minutes answered from memory, 429/5xx backoff honouring Retry-After else 30/60/120 s then stop, and 401/403 stopping at once. - Search one US state, Canadian province or country outside North America, narrowed by multi-select band / mode / emergency service and by county, city, call sign, on-air, open, distance from a library town and "hide ones I already have". More than 1,000 matches shows nothing. - Import at most 500 at a time; after an import the results stay up and "select all" picks the next batch not yet imported. - API records are source 'repeaterbook_api' keyed by RepeaterBook's own State ID + Repeater ID; re-import refreshes, a file-imported copy is taken over rather than duplicated, the source can't be edited. - Single-record Refresh, a 12-month stale prompt, and "Remove RepeaterBook data" deleting every API record and the token together. - API records are left out of the channel export file and refused from a channel backup; CHIRP exports carry "RepeaterBook.com" in the comment. - "Data courtesy of RepeaterBook.com" in the dialog, the import summary, the detail panel, About, and the README. docs/repeaterbook-api-commitments.md records the submitted application, with the 2,000-record library cap removed (agreed with RepeaterBook) and the api.export_row lines corrected to say what the code does. Live search verified against RepeaterBook in the dev build (Michigan). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #136.
CodePlug Magic is approved as a RepeaterBook distributed app. This adds a RepeaterBook button on the Channels page that searches RepeaterBook directly with the user's own token, replacing the export-a-file-then-import step.
Everything is built to the answers in the API application, now committed as
docs/repeaterbook-api-commitments.md(with the 2,000-record library cap removed, as agreed with RepeaterBook, and theapi.export_rowlines corrected).Token
rbuapp_token in Settings → RepeaterBook. It is stored in the OS credential store via thekeyringcrate: Keychain on macOS, Credential Manager on Windows, Secret Service on Linux.X-RB-App-Tokenheader, over HTTPS, and redirects are refused so the header can't be carried to another host.Requests
All in
commands/rb_api.rs:Search
Import
source = 'repeaterbook_api'and RepeaterBook's own State ID + Repeater ID. Re-importing refreshes rather than duplicates.Keeping records
Leaving the app
Attribution
"Data courtesy of RepeaterBook.com", linked to RepeaterBook, appears in:
tauri-plugin-openeris added for these links; its permission is limited tohttps://www.repeaterbook.com/*.Verification
npm run cipasses: 782 Rust tests, clippy, frontend build.ua_mismatch.🤖 Generated with Claude Code