max / goingson
- Co-Authored-By
- Claude Opus 4.7 (1M context) <noreply@anthropic.com>
24 files changed,
+25 insertions,
-15 deletions
| @@ -1908,7 +1908,7 @@ | |||
| 1908 | 1908 | ||
| 1909 | 1909 | [[package]] | |
| 1910 | 1910 | name = "goingson-desktop" | |
| 1911 | - | version = "0.3.0" | |
| 1911 | + | version = "0.3.6" | |
| 1912 | 1912 | dependencies = [ | |
| 1913 | 1913 | "async-imap", | |
| 1914 | 1914 | "async-trait", | |
| @@ -4163,6 +4163,8 @@ | |||
| 4163 | 4163 | [[package]] | |
| 4164 | 4164 | name = "pter" | |
| 4165 | 4165 | version = "0.1.0" | |
| 4166 | + | source = "registry+https://github.com/rust-lang/crates.io-index" | |
| 4167 | + | checksum = "ecc3629f628e0e8d975cd206ef331ce598dd457d94cd609c96a6809934732859" | |
| 4166 | 4168 | dependencies = [ | |
| 4167 | 4169 | "scraper", | |
| 4168 | 4170 | ] | |
| @@ -5647,7 +5649,7 @@ | |||
| 5647 | 5649 | ||
| 5648 | 5650 | [[package]] | |
| 5649 | 5651 | name = "synckit-client" | |
| 5650 | - | version = "0.3.1" | |
| 5652 | + | version = "0.4.0" | |
| 5651 | 5653 | dependencies = [ | |
| 5652 | 5654 | "argon2", | |
| 5653 | 5655 | "base64 0.22.1", |
| @@ -1,6 +1,6 @@ | |||
| 1 | 1 | [package] | |
| 2 | 2 | name = "goingson-desktop" | |
| 3 | - | version = "0.3.0" | |
| 3 | + | version = "0.3.6" | |
| 4 | 4 | edition = "2024" | |
| 5 | 5 | ||
| 6 | 6 | [[bin]] | |
| @@ -82,7 +82,7 @@ | |||
| 82 | 82 | keyring = { workspace = true } | |
| 83 | 83 | ||
| 84 | 84 | # HTML email to readable markdown | |
| 85 | - | pter = { path = "../../../pter" } | |
| 85 | + | pter = "0.1" | |
| 86 | 86 | ||
| 87 | 87 | # === Desktop-only dependencies (not available on iOS/Android) === | |
| 88 | 88 |
| @@ -1,7 +1,7 @@ | |||
| 1 | 1 | { | |
| 2 | 2 | "$schema": "https://schema.tauri.app/config/2", | |
| 3 | 3 | "productName": "GoingsOn", | |
| 4 | - | "version": "0.3.3", | |
| 4 | + | "version": "0.3.6", | |
| 5 | 5 | "identifier": "com.goingson.app", | |
| 6 | 6 | "build": { | |
| 7 | 7 | "beforeBuildCommand": "node src-tauri/frontend/build-css.js", |
| @@ -52,8 +52,8 @@ | |||
| 52 | 52 | - UIInterfaceOrientationPortraitUpsideDown | |
| 53 | 53 | - UIInterfaceOrientationLandscapeLeft | |
| 54 | 54 | - UIInterfaceOrientationLandscapeRight | |
| 55 | - | CFBundleShortVersionString: 0.3.3 | |
| 56 | - | CFBundleVersion: "0.3.3" | |
| 55 | + | CFBundleShortVersionString: 0.3.5 | |
| 56 | + | CFBundleVersion: "0.3.5" | |
| 57 | 57 | entitlements: | |
| 58 | 58 | path: goingson-desktop_iOS/goingson-desktop_iOS.entitlements | |
| 59 | 59 | scheme: |
| @@ -81,17 +81,20 @@ | |||
| 81 | 81 | ||
| 82 | 82 | // ============ Commands ============ | |
| 83 | 83 | ||
| 84 | - | /// Fetch available pricing tiers for this app (no auth required, uses API key). | |
| 84 | + | /// Fetch the pricing formula for this app (no auth required, uses API key). | |
| 85 | + | /// GoingsOn doesn't expose a cap slider — it presents a single suggested cap | |
| 86 | + | /// to the user — but the formula is what the server now returns instead of a | |
| 87 | + | /// tier list, so the command still hits the network on app load to populate | |
| 88 | + | /// the subscribe banner with a real number. | |
| 85 | 89 | #[tauri::command] | |
| 86 | 90 | #[instrument(skip_all)] | |
| 87 | 91 | pub async fn sync_get_tiers( | |
| 88 | 92 | state: State<'_, Arc<AppState>>, | |
| 89 | - | ) -> Result<Vec<synckit_client::TierInfo>, ApiError> { | |
| 93 | + | ) -> Result<synckit_client::AppPricing, ApiError> { | |
| 90 | 94 | let client = require_sync_client(&state)?; | |
| 91 | - | let tiers = client.get_available_tiers() | |
| 95 | + | client.get_app_pricing() | |
| 92 | 96 | .await | |
| 93 | - | .map_api_err("Failed to fetch tiers", ApiError::external_service)?; | |
| 94 | - | Ok(tiers) | |
| 97 | + | .map_api_err("Failed to fetch pricing", ApiError::external_service) | |
| 95 | 98 | } | |
| 96 | 99 | ||
| 97 | 100 | /// Returns the current sync configuration, authentication, encryption, and sync state. | |
| @@ -399,8 +402,13 @@ | |||
| 399 | 402 | return Err(ApiError::bad_request("Not authenticated")); | |
| 400 | 403 | } | |
| 401 | 404 | ||
| 405 | + | // GoingsOn syncs metadata only — no blob storage — so the cap is set to | |
| 406 | + | // the formula's minimum (10 GiB) which trips the $2/mo floor. The cap is | |
| 407 | + | // mostly cosmetic for non-blob apps but is required by the new API. | |
| 408 | + | let interval_enum = synckit_client::BillingInterval::from_str(&interval); | |
| 409 | + | const GO_DEFAULT_CAP_BYTES: i64 = 10 * 1024 * 1024 * 1024; | |
| 402 | 410 | let response = match client | |
| 403 | - | .create_subscription_checkout("standard", &interval) | |
| 411 | + | .create_subscription_checkout(GO_DEFAULT_CAP_BYTES, interval_enum) | |
| 404 | 412 | .await | |
| 405 | 413 | { | |
| 406 | 414 | Ok(r) => r, |
| @@ -17,9 +17,9 @@ | |||
| 17 | 17 | <key>ITSAppUsesNonExemptEncryption</key> | |
| 18 | 18 | <false/> | |
| 19 | 19 | <key>CFBundleShortVersionString</key> | |
| 20 | - | <string>0.3.3</string> | |
| 20 | + | <string>0.3.5</string> | |
| 21 | 21 | <key>CFBundleVersion</key> | |
| 22 | - | <string>0.3.3</string> | |
| 22 | + | <string>0.3.5</string> | |
| 23 | 23 | <key>LSRequiresIPhoneOS</key> | |
| 24 | 24 | <true/> | |
| 25 | 25 | <key>UILaunchStoryboardName</key> |