Conversation
The API is no longer maintained See https://developers.buymeacoffee.com/
Reviewer's GuideDisables the deprecated BMAC/supporters functionality across frontend, backend, and fetcher, updates the Google Maps loader integration to the v2 API, bumps various dependencies (including ESLint, Workbox, ArcGIS, Google APIs, Ionic, SWC, etc.), and switches the GAE runtime to Node.js 24. Sequence diagram for updated Google Maps loader integrationsequenceDiagram
participant MapElement
participant Store
participant GMapLoader
participant GMapsAPI as GoogleMapsAPI
MapElement->>Store: getState()
Store-->>MapElement: track.domain
MapElement->>MapElement: getApiKeyAndHost(GMAPS, domain)
MapElement->>GMapLoader: setOptions(key, channel, libraries)
Note right of GMapLoader: channel set to weekly
MapElement->>GMapLoader: importLibrary(maps)
GMapLoader-->>GMapsAPI: load maps library
GMapsAPI-->>GMapLoader: maps library loaded
GMapLoader-->>MapElement: importLibrary resolved
MapElement-->>MapElement: gMapsApiLoading resolved
Class diagram for updated supporters and state structuresclassDiagram
class SupporterModal {
+connectedCallback() Promise~void~
+render() TemplateResult
}
class Keys {
<<enum>>
elevationNumRetrieved
proxyInreach
proxySpot
proxySkylines
proxyGlobe
proxyInreachAlt
}
class FetcherState {
+number lastTickSec
+number nextFullSyncSec
+number nextExportSec
+number nextArchiveExportSec
+number nextSupporterSyncSec
+number memRssMb
+number memHeapMb
}
class StateInit {
+createInitState() FetcherState
}
class ExpressApp {
+use(path, router) ExpressApp
}
class MeshBirRouter {
}
class SupportersRouter {
}
SupporterModal ..> ExpressApp : previously fetched /api/supporters.json
ExpressApp --> MeshBirRouter : route /api/bircom
ExpressApp ..x SupportersRouter : removed /api/supporters
StateInit --> FetcherState : initializes
%% Removed enum members (now disabled)
%% Keys .. supporterNames
%% Keys .. supporterNum
%% Keys .. supporterAmount
%% Keys .. supporterLast3MonthsAmount
File-Level Changes
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughThe PR removes the supporters tracking feature end-to-end, updates Google Maps loader usage in a frontend component, and bumps Node/runtime and many dependencies across the repo. Changes
Sequence Diagram(s)sequenceDiagram
autonumber
rect rgba(0,128,0,0.06)
Note left of Fetcher: Previous periodic supporter sync (removed)
end
Fetcher->>BuyMeAPI: Paginated fetch supporters (Authorization)
BuyMeAPI-->>Fetcher: supporter pages
Fetcher->>Redis: write supporter keys (names, num, amount, amount3m)
Redis-->>Server: stored keys read via pipeline
Server->>Client(UI): GET /api/supporters.json → JSON
Client(UI)->>User: render supporter list
rect rgba(128,0,0,0.06)
Note left of Fetcher: New state — all supporter sync & route removed
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
Pre-merge checks and finishing touches❌ Failed checks (1 inconclusive)
✅ Passed checks (2 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Repository UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (2)
💤 Files with no reviewable changes (1)
🚧 Files skipped from review as they are similar to previous changes (1)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Deploying flyxc with
|
| Latest commit: |
402face
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://55bc7f23.flyxc.pages.dev |
| Branch Preview URL: | https://vicb-misc.flyxc.pages.dev |
There was a problem hiding this comment.
Hey - I've found 2 issues, and left some high level feedback:
- In
map-element.ts, the new@googlemaps/js-api-loaderv2 usage only callsimportLibrary('maps')while previouslygeometryandmarkerlibraries were explicitly requested; if any code still relies on those libraries, consider importing them explicitly with additionalimportLibrarycalls to avoid runtime errors. - Now that the BMAC supporter API is fully disabled, there are still remnants like
nextSupporterSyncSecin the fetcher state (set to 0 but never used); consider a follow-up cleanup to remove unused supporter-related state, types, and configuration to keep the codebase lean.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- In `map-element.ts`, the new `@googlemaps/js-api-loader` v2 usage only calls `importLibrary('maps')` while previously `geometry` and `marker` libraries were explicitly requested; if any code still relies on those libraries, consider importing them explicitly with additional `importLibrary` calls to avoid runtime errors.
- Now that the BMAC supporter API is fully disabled, there are still remnants like `nextSupporterSyncSec` in the fetcher state (set to 0 but never used); consider a follow-up cleanup to remove unused supporter-related state, types, and configuration to keep the codebase lean.
## Individual Comments
### Comment 1
<location> `apps/fxc-front/src/app/components/2d/map-element.ts:52-53` </location>
<code_context>
if (!gMapsApiLoading) {
const load = (resolve: () => void) => {
const { key } = getApiKeyAndHost('GMAPS', store.getState().track.domain);
- new Loader({
- apiKey: key,
- version: 'weekly',
+ gMapLoader.setOptions({
+ key,
+ channel: 'weekly',
</code_context>
<issue_to_address>
**issue (bug_risk):** `setOptions` is using `key` and `channel` instead of the loader’s expected `apiKey` and `version` fields.
The previous instantiation used `{ apiKey: key, version: 'weekly', libraries: [...] }`, which matches the documented `@googlemaps/js-api-loader` v2 API. The new `setOptions({ key, channel: 'weekly', libraries: [...] })` omits `apiKey` and `version`, so the loader likely won’t receive the API key or version. Please use `apiKey` and `version` here, e.g.:
```ts
gMapLoader.setOptions({
apiKey: key,
version: 'weekly',
libraries: ['geometry', 'marker'],
});
```
If you need `channel`, add it alongside `version`, not instead of it.
</issue_to_address>
### Comment 2
<location> `apps/fxc-front/src/app/components/ui/supporter-modal.ts:8-9` </location>
<code_context>
export class SupporterModal extends LitElement {
- private supporters = { names: [], amount: 0, number: 0, amountLast3Months: 0 };
-
async connectedCallback(): Promise<void> {
super.connectedCallback();
- try {
- const response = await fetchResponse(`${import.meta.env.VITE_API_SERVER}/api/supporters.json`);
</code_context>
<issue_to_address>
**suggestion:** `connectedCallback` no longer needs to be `async` or return a `Promise`.
With the async logic removed, this method now only delegates to `super.connectedCallback()`, so it no longer needs to be `async` or return `Promise<void>`. Updating it to a plain `void`-returning method keeps the lifecycle signature accurate and avoids suggesting asynchronous work:
```ts
connectedCallback(): void {
super.connectedCallback();
}
```
</issue_to_address>Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (11)
apps/fetcher/src/app/misc/buy-coffee.tsapps/fetcher/src/app/state/state.tsapps/fetcher/src/fetcher.tsapps/fxc-front/src/app/components/2d/map-element.tsapps/fxc-front/src/app/components/ui/supporter-modal.tsapps/fxc-server/src/app.yamlapps/fxc-server/src/app/routes/supporters.tsapps/fxc-server/src/main.tslibs/common/src/lib/redis-keys.tslibs/optimizer/package.jsonpackage.json
💤 Files with no reviewable changes (5)
- apps/fetcher/src/app/misc/buy-coffee.ts
- libs/common/src/lib/redis-keys.ts
- apps/fxc-front/src/app/components/ui/supporter-modal.ts
- apps/fxc-server/src/app/routes/supporters.ts
- apps/fetcher/src/fetcher.ts
🧰 Additional context used
🧬 Code graph analysis (1)
apps/fxc-server/src/main.ts (1)
apps/fxc-server/src/app/routes/meshbir.ts (1)
getMeshBirRouter(10-42)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: Sourcery review
- GitHub Check: build (22.x)
- GitHub Check: Analyze (javascript)
- GitHub Check: Cloudflare Pages
🔇 Additional comments (8)
apps/fetcher/src/app/state/state.ts (1)
45-46: LGTM! Supporters sync correctly disabled.The change appropriately disables the BMAC supporters synchronization by setting
nextSupporterSyncSecto 0, with a clear comment explaining the reasoning.apps/fxc-server/src/main.ts (1)
94-94: Supporters router has been completely removed.Verification confirms no remaining references to
getSupportersRouter, imports, route mounting, or thesupporters.tsfile.apps/fxc-server/src/app.yaml (1)
1-1: Node.js 24 is officially supported and production-ready on Google App Engine. The nodejs24 runtime achieved GA status on November 20, 2025, and is on LTS (stable). No concerns with this specification.libs/optimizer/package.json (1)
8-8: No action needed. Version 9.39.2 is valid and contains no breaking changes—it is a patch release that adds a warning for/* eslint-env */comments and includes bugfixes.package.json (4)
18-18: Good practice keeping dependencies current.The routine minor and patch version updates across ESLint tooling, ArcGIS, Google Cloud libraries, SWC, Ionic, Redux Toolkit, Lit, and other packages are appropriate for maintaining compatibility and receiving bug fixes.
Also applies to: 20-20, 36-37, 40-40, 59-59, 89-91, 95-95, 97-98, 101-101, 103-103, 108-111, 138-138
118-118: No critical vulnerabilities in these specific packages.The four security-sensitive packages (compression@1.8.1, express@4.22.1, ioredis@5.8.2, validator@13.15.26) all exist on npm and have no known vulnerabilities in their respective versions. However, the npm audit output reveals HIGH severity vulnerabilities in transitive dependencies (axios 1.0.0-1.11.0 for DoS and SSRF attacks, and MODERATE severity in esbuild ≤0.24.2). These should be addressed separately with dependency updates.
Likely an incorrect or invalid review comment.
102-102: No action required. The codebase is already correctly using the @googlemaps/js-api-loader v2 API:setOptions()andimportLibrary()are implemented in map-element.ts (lines 53–58), and no deprecated v1 patterns (new Loader(),loader.load()) remain.
60-60: Review rule compatibility with ESLint v9 behavior changes.The codebase already uses ESLint's flat config format (
eslint.config.js), so the main v9 migration is complete. However, ESLint v9 introduced breaking changes to several rule behaviors (e.g., stricter parsing forno-unused-vars,camelcase,no-implicit-coercion, etc.). Verify that existing rules and their options are compatible with v9's stricter semantics.Likely an incorrect or invalid review comment.
Disabled BMAC API (no longer supported)
Bump dependencies
Use Node24 on GAE
Summary by Sourcery
Disable supporter-related BMAC integrations and update platform/runtime dependencies.
Enhancements:
Build:
Deployment:
Summary by CodeRabbit
Removed Features
Refactor
Chores
✏️ Tip: You can customize this high-level summary in your review settings.