diff --git a/README.md b/README.md index c090a57..981b4d2 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Omni Connector Hub One hub for AI providers, email, hosting panels, VPS clouds, chat, GitHub, and -server operations — 21 providers, 278 operations, behind one type-safe +server operations — 24 providers, 301 operations, behind one type-safe interface with a hash-chained audit ledger. ## Providers @@ -18,6 +18,9 @@ interface with a hash-chained audit ledger. | `github` | 25 | 2 | `GITHUB_TOKEN` | hand-written | | `gmail` | 79 | 15 | `GOOGLE_CLIENT_ID/SECRET` + refresh tokens | Google Discovery | | `hetzner` | 72 | 11 | `HETZNER_API_TOKEN` | OpenAPI 3.0.3 | +| `iherb_apify` | 7 | 0 | `IHERB_APIFY_TOKEN` | hand-written | +| `iherb_impact` | 8 | 0 | `IHERB_IMPACT_ACCOUNT_SID` + `IHERB_IMPACT_AUTH_TOKEN` | hand-written | +| `iherb_partnerize` | 8 | 0 | `IHERB_PARTNERIZE_APP_KEY` + `IHERB_PARTNERIZE_USER_KEY` | hand-written | | `kimi` | 2 | 0 | `MOONSHOT_API_KEY` | hand-written | | `linode` | 9 | 1 | `LINODE_API_TOKEN` | hand-written | | `oneprovider` | 6 | 0 | `ONEPROVIDER_API_KEY` | hand-written | @@ -32,7 +35,7 @@ interface with a hash-chained audit ledger. | `whm` | 9 | 1 | `WHM_HOST` + root token | hand-written | | `whmcs` | 9 | 0 | `WHMCS_URL` + API identifier/secret | hand-written | -**Total: 278 operations (32 destructive)** +**Total: 301 operations (32 destructive)** ## Quick start diff --git a/crates/hub-auth/src/store.rs b/crates/hub-auth/src/store.rs index 461fa0d..0593910 100644 --- a/crates/hub-auth/src/store.rs +++ b/crates/hub-auth/src/store.rs @@ -572,6 +572,48 @@ impl AuthStore { }); } + // iHerb Partnerize (affiliate network) + if let (Ok(app_key), Ok(user_key)) = ( + std::env::var("IHERB_PARTNERIZE_APP_KEY"), + std::env::var("IHERB_PARTNERIZE_USER_KEY"), + ) { + store.add(Credential { + provider: "iherb_partnerize".into(), + account_id: "default".into(), + base_url: Some("https://api.partnerize.com/v3".into()), + auth: AuthMethod::Basic { + username: app_key, + password: user_key, + }, + }); + } + + // iHerb Impact (affiliate network) + if let (Ok(account_sid), Ok(auth_token)) = ( + std::env::var("IHERB_IMPACT_ACCOUNT_SID"), + std::env::var("IHERB_IMPACT_AUTH_TOKEN"), + ) { + store.add(Credential { + provider: "iherb_impact".into(), + account_id: "default".into(), + base_url: Some("https://api.impact.com".into()), + auth: AuthMethod::Basic { + username: account_sid, + password: auth_token, + }, + }); + } + + // iHerb Apify scraper + if let Ok(token) = std::env::var("IHERB_APIFY_TOKEN") { + store.add(Credential { + provider: "iherb_apify".into(), + account_id: "default".into(), + base_url: Some("https://api.apify.com/v2".into()), + auth: AuthMethod::Bearer { token }, + }); + } + // SMTP email accounts: EMAIL_SMTP_HOST, EMAIL_SMTP_PORT, EMAIL_SMTP_USER, // EMAIL_SMTP_PASS, EMAIL_SMTP_FROM, EMAIL_SMTP_TLS for default account. // EMAIL_SMTP_HOST_