From 1f20a6c8207e7b839ffd56ae1786d9b58a8fe17e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 21:29:19 +0000 Subject: [PATCH] feat: add iHerb providers (Partnerize, Impact, Apify) Add three new providers for iHerb affiliate and scraper APIs: - iherb_partnerize: 8 operations (campaigns, commissions, conversions, product feeds, tracking links, click/performance reports) - iherb_impact: 8 operations (campaigns, actions, catalogs, tracking links, promo codes) - iherb_apify: 7 operations (product search, details, reviews, price monitoring, run management) Total: 24 providers, 301 operations. Co-Authored-By: Claude Opus 4.6 Claude-Session: https://claude.ai/code/session_0176k7T6i3B197hY6TqPdWqj --- README.md | 7 +- crates/hub-auth/src/store.rs | 42 +++++ specs/iherb_apify.json | 242 ++++++++++++++++++++++++++++ specs/iherb_impact.json | 301 +++++++++++++++++++++++++++++++++++ specs/iherb_partnerize.json | 249 +++++++++++++++++++++++++++++ 5 files changed, 839 insertions(+), 2 deletions(-) create mode 100644 specs/iherb_apify.json create mode 100644 specs/iherb_impact.json create mode 100644 specs/iherb_partnerize.json 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_