From adb6adb97d634312b58e7a9b9d15d147075a37ec Mon Sep 17 00:00:00 2001 From: hassan254-prog Date: Wed, 8 Jul 2026 21:35:40 +0300 Subject: [PATCH 1/4] feat(integrations): add support for sage-member --- docs/api-catalog.txt | 3 +- docs/api-integrations/sage-member.mdx | 87 ++++++++++++++++++ docs/api-integrations/sage-member/connect.mdx | 40 ++++++++ .../sage-member/users_tab.png | Bin 0 -> 99905 bytes docs/docs.json | 1 + docs/llms-full.txt | 1 + docs/llms.txt | 2 +- .../sage-member/PreBuiltUseCases.mdx | 3 + packages/providers/providers.yaml | 40 ++++++++ packages/shared/lib/services/proxy/utils.ts | 44 +++++++-- .../lib/services/proxy/utils.unit.test.ts | 85 +++++++++++++++++ packages/types/lib/providers/provider.ts | 2 +- .../images/template-logos/sage-member.svg | 1 + scripts/validation/providers/schema.json | 10 +- 14 files changed, 306 insertions(+), 13 deletions(-) create mode 100644 docs/api-integrations/sage-member.mdx create mode 100644 docs/api-integrations/sage-member/connect.mdx create mode 100644 docs/api-integrations/sage-member/users_tab.png create mode 100644 docs/snippets/generated/sage-member/PreBuiltUseCases.mdx create mode 100644 packages/webapp/public/images/template-logos/sage-member.svg diff --git a/docs/api-catalog.txt b/docs/api-catalog.txt index c338b24363..19b0ef5ae9 100644 --- a/docs/api-catalog.txt +++ b/docs/api-catalog.txt @@ -2,7 +2,7 @@ > Compact provider slug catalog for agents. Use the slug to reconstruct provider-specific docs URLs only when needed. -Provider count: 874 +Provider count: 875 URL patterns: - Main provider page: https://nango.dev/docs/integrations/all/{slug}.md or https://nango.dev/docs/api-integrations/{slug}.md @@ -658,6 +658,7 @@ URL patterns: | `sage-intacct` | Sage Intacct | TWO_STEP | [docs](https://nango.dev/docs/integrations/all/sage-intacct.md) | [connect](https://nango.dev/docs/integrations/all/sage-intacct/connect.md) | | accounting, erp | | `sage-intacct-cc` | Sage Intacct (Client Credentials) | TWO_STEP | [docs](https://nango.dev/docs/api-integrations/sage-intacct-cc.md) | [connect](https://nango.dev/docs/api-integrations/sage-intacct-cc/connect.md) | [setup](https://nango.dev/docs/api-integrations/sage-intacct-cc/connect.md) | accounting, erp | | `sage-intacct-oauth` | Sage Intacct (OAuth) | OAUTH2 | [docs](https://nango.dev/docs/integrations/all/sage-intacct-oauth.md) | | | accounting, erp, popular | +| `sage-member` | SAGE Member | API_KEY | [docs](https://nango.dev/docs/api-integrations/sage-member.md) | [connect](https://nango.dev/docs/api-integrations/sage-member/connect.md) | | marketing, e-commerce | | `sage-people` | Sage People | OAUTH2 | [docs](https://nango.dev/docs/integrations/all/sage-people.md) | [connect](https://nango.dev/docs/integrations/all/sage-people/connect.md) | | hr | | `salesforce` | Salesforce | OAUTH2 | [docs](https://nango.dev/docs/api-integrations/salesforce.md) | [connect](https://nango.dev/docs/api-integrations/salesforce/connect.md) | [setup](https://nango.dev/docs/api-integrations/salesforce/salesforce-api-oauth-app-setup.md) | crm, popular | | `salesforce-cc` | Salesforce (Client Credentials) | OAUTH2_CC | [docs](https://nango.dev/docs/api-integrations/salesforce-cc.md) | [connect](https://nango.dev/docs/api-integrations/salesforce-cc/connect.md) | | crm | diff --git a/docs/api-integrations/sage-member.mdx b/docs/api-integrations/sage-member.mdx new file mode 100644 index 0000000000..08870b815a --- /dev/null +++ b/docs/api-integrations/sage-member.mdx @@ -0,0 +1,87 @@ +--- +title: 'SAGE Member' +sidebarTitle: 'SAGE Member' +description: 'Integrate your application with the SAGE Member API' +--- + +## Quickstart + +Connect to SAGE Member with Nango and see data flow in 2 minutes. + + + + In Nango ([free signup](https://app.nango.dev)), go to [Integrations](https://app.nango.dev/dev/integrations) -> _Configure New Integration_ -> _SAGE Member_. + + + Go to [Connections](https://app.nango.dev/dev/connections) -> _Add Test Connection_ -> _Authorize_, then enter your Account Number, Login ID, and Authentication Key. Later, you'll let your users do the same directly from your app. + + + Let's make your first request to the SAGE Member API. Replace the placeholders below with your [secret key](https://app.nango.dev/dev/environment-settings), [integration ID](https://app.nango.dev/dev/integrations), and [connection ID](https://app.nango.dev/dev/connections): + + + + ```bash + curl -X POST "https://api.nango.dev/proxy/ConnectAPI" \ + -H "Authorization: Bearer " \ + -H "Provider-Config-Key: " \ + -H "Connection-Id: " \ + -H "Content-Type: application/json" \ + -d '{"serviceId": 101, "apiVer": 130}' + ``` + + + + + + Install Nango's backend SDK with `npm i @nangohq/node`. Then run: + + ```typescript + import { Nango } from '@nangohq/node'; + + const nango = new Nango({ secretKey: '' }); + + const res = await nango.post({ + endpoint: '/ConnectAPI', + providerConfigKey: '', + connectionId: '', + data: { + serviceId: 101, + apiVer: 130 + } + }); + + console.log(res.data); + ``` + + + + Nango automatically injects your Account Number, Login ID, and Authentication Key into the `auth` object of every proxied request body — you only need to supply the `serviceId` and other fields for the specific SAGE Member module you're calling. + + Or fetch credentials with the [Node SDK](/reference/sdks/node#get-a-connection-with-credentials) or [API](/reference/api/connection/get). + + You're connected! Check the [Logs](https://app.nango.dev/dev/logs) tab in Nango to inspect requests. + + + + Follow our [Auth implementation guide](/guides/primitives/auth) to integrate Nango in your app. + + To obtain your own production credentials, follow the setup guide linked below. + + + +## SAGE Member Integration Guides + +Nango-maintained guides for common use cases. + +- [How do I link my account?](/api-integrations/sage-member/connect) +Connect your SAGE Member account using the Connect UI + +## Pre-built syncs & actions for SAGE Member + +Enable them in your dashboard. Extend and customize to fit your needs. + +import PreBuiltUseCases from "/snippets/generated/sage-member/PreBuiltUseCases.mdx" + + + +--- diff --git a/docs/api-integrations/sage-member/connect.mdx b/docs/api-integrations/sage-member/connect.mdx new file mode 100644 index 0000000000..cf9cdc7d48 --- /dev/null +++ b/docs/api-integrations/sage-member/connect.mdx @@ -0,0 +1,40 @@ +--- +title: SAGE Member - How do I link my account? +sidebarTitle: SAGE Member +--- + +# Overview + +To authenticate with SAGE Member, you need: +1. **Account Number** — Your SAGE Member account number. +2. **Login ID** — The login ID of the SAGE Member user account making the requests. +3. **Authentication Key** — The key associated with that user's login, used to authenticate every request. + +### Prerequisites + +- An active SAGE Workplace subscription or Supplier Advantage membership. +- A SAGE Member module enabled on your account (enable modules on the Services tab). + +### Step 1: Finding your credentials + +SAGE Member authenticates on a per-user basis, so each set of credentials is tied to one user on your account. + +1. Log in to your SAGE account and go to **Developer APIs** > **SAGE Connect**. +2. Go to the **Users** tab. +3. Click your profile in the top right to find your **Account Number**. +4. Select the user that will be making API requests and note their **Login ID** and **Authentication Key**. + + + + +### Step 2: Enter credentials in the Connect UI + +Once you have your credentials: +1. Open the form where you need to authenticate with SAGE Member. +2. Enter your **Account Number**, **Login ID**, and **Authentication Key** in their designated fields. +3. Submit the form, and you should be successfully authenticated. + + + + +You are now connected to SAGE Member. diff --git a/docs/api-integrations/sage-member/users_tab.png b/docs/api-integrations/sage-member/users_tab.png new file mode 100644 index 0000000000000000000000000000000000000000..5640444b63f7ec84131316e4ee1fbef508df6d46 GIT binary patch literal 99905 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

UHo0}*=8>f*GWs0<^UYLUw*uHAmFzjv)q~Q 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�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 Q7w~i0!1O}NIopT-1A!3T2LJ#7 literal 0 HcmV?d00001 diff --git a/docs/docs.json b/docs/docs.json index dcff00762f..fb28f6b14e 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -1554,6 +1554,7 @@ "integrations/all/sage-intacct", "integrations/all/sage-intacct-oauth", "api-integrations/sage-intacct-cc", + "api-integrations/sage-member", "integrations/all/sage-people", "api-integrations/sap-ariba", "api-integrations/salesforce", diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 1d1f898bb4..34d6e3828b 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -14560,6 +14560,7 @@ Use these slugs to construct provider-specific docs URLs only when needed. | `sage-intacct` | Sage Intacct | TWO_STEP | [docs](https://nango.dev/docs/integrations/all/sage-intacct.md) | [connect](https://nango.dev/docs/integrations/all/sage-intacct/connect.md) | | accounting, erp | | `sage-intacct-cc` | Sage Intacct (Client Credentials) | TWO_STEP | [docs](https://nango.dev/docs/api-integrations/sage-intacct-cc.md) | [connect](https://nango.dev/docs/api-integrations/sage-intacct-cc/connect.md) | [setup](https://nango.dev/docs/api-integrations/sage-intacct-cc/connect.md) | accounting, erp | | `sage-intacct-oauth` | Sage Intacct (OAuth) | OAUTH2 | [docs](https://nango.dev/docs/integrations/all/sage-intacct-oauth.md) | | | accounting, erp, popular | +| `sage-member` | SAGE Member | API_KEY | [docs](https://nango.dev/docs/api-integrations/sage-member.md) | [connect](https://nango.dev/docs/api-integrations/sage-member/connect.md) | | marketing, e-commerce | | `sage-people` | Sage People | OAUTH2 | [docs](https://nango.dev/docs/integrations/all/sage-people.md) | [connect](https://nango.dev/docs/integrations/all/sage-people/connect.md) | | hr | | `salesforce` | Salesforce | OAUTH2 | [docs](https://nango.dev/docs/api-integrations/salesforce.md) | [connect](https://nango.dev/docs/api-integrations/salesforce/connect.md) | [setup](https://nango.dev/docs/api-integrations/salesforce/salesforce-api-oauth-app-setup.md) | crm, popular | | `salesforce-cc` | Salesforce (Client Credentials) | OAUTH2_CC | [docs](https://nango.dev/docs/api-integrations/salesforce-cc.md) | [connect](https://nango.dev/docs/api-integrations/salesforce-cc/connect.md) | | crm | diff --git a/docs/llms.txt b/docs/llms.txt index 2fd101bbd8..46094bce37 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -134,7 +134,7 @@ Use provider URLs by replacing `{slug}` with a slug from the API catalog: ## APIs and integrations -- [API catalog](https://nango.dev/docs/api-catalog.txt): 874 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. +- [API catalog](https://nango.dev/docs/api-catalog.txt): 875 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. - Provider-specific pages are intentionally not expanded here so core Nango guides remain easy for agents to find. ## Resources diff --git a/docs/snippets/generated/sage-member/PreBuiltUseCases.mdx b/docs/snippets/generated/sage-member/PreBuiltUseCases.mdx new file mode 100644 index 0000000000..4c3a8de9e0 --- /dev/null +++ b/docs/snippets/generated/sage-member/PreBuiltUseCases.mdx @@ -0,0 +1,3 @@ +_No pre-built syncs or actions available yet._ + +Not seeing the integration you need? [Build your own](/guides/functions/functions-guide) independently. diff --git a/packages/providers/providers.yaml b/packages/providers/providers.yaml index adb2cab41d..ae16ddcf53 100644 --- a/packages/providers/providers.yaml +++ b/packages/providers/providers.yaml @@ -17633,6 +17633,46 @@ sage-intacct: description: Your Sage Intacct User Password secret: true +sage-member: + display_name: SAGE Member + categories: + - marketing + - e-commerce + auth_mode: API_KEY + proxy: + base_url: https://www.promoplace.com/ws/ws.dll + body: + auth: + acctId: ${connectionConfig.acctId} + loginId: ${connectionConfig.loginId} + key: ${apiKey} + docs: https://nango.dev/docs/api-integrations/sage-member + docs_connect: https://nango.dev/docs/api-integrations/sage-member/connect + credentials: + apiKey: + type: string + title: Authentication Key + example: 56edbbe3********************141a + pattern: '^[a-f0-9]{32}$' + description: The authentication key for your SAGE Member user. + secret: true + doc_section: '#step-1-finding-your-credentials' + connection_config: + acctId: + type: string + title: Account Number + description: Your SAGE Member account number. + pattern: '^[0-9]+$' + example: '4353478' + order: 1 + doc_section: '#step-1-finding-your-credentials' + loginId: + type: string + title: Login ID + description: The login ID for your SAGE Member user. + order: 2 + doc_section: '#step-1-finding-your-credentials' + sage-people: display_name: Sage People categories: diff --git a/packages/shared/lib/services/proxy/utils.ts b/packages/shared/lib/services/proxy/utils.ts index e470754148..b86c1d68ad 100644 --- a/packages/shared/lib/services/proxy/utils.ts +++ b/packages/shared/lib/services/proxy/utils.ts @@ -509,25 +509,47 @@ export function buildProxyBody({ }: { config: ApplicationConstructedProxyConfiguration; connection: ConnectionForProxy; -}): Record | null { +}): Record> | null { if (!config.provider?.proxy?.body) { return null; } - const body: Record = {}; const replacers = { connectionConfig: connection.connection_config, credentials: connection.credentials, ...(connection.credentials as unknown as Record) }; + const interpolateLeaf = (value: string): string | null => { + const interpolated = interpolateIfNeeded(value, replacers); + return interpolated.includes('${') ? null : interpolated; + }; + + const body: Record> = {}; for (const [key, value] of Object.entries(config.provider.proxy.body)) { - if (typeof value !== 'string') { + if (typeof value === 'string') { + const interpolated = interpolateLeaf(value); + if (interpolated !== null) { + body[key] = interpolated; + } continue; } - const interpolated = interpolateIfNeeded(value, replacers); - if (!interpolated.includes('${')) { - body[key] = interpolated; + + if (!isPlainObject(value)) { + continue; + } + const nested: Record = {}; + for (const [nestedKey, nestedValue] of Object.entries(value)) { + if (typeof nestedValue !== 'string') { + continue; + } + const interpolated = interpolateLeaf(nestedValue); + if (interpolated !== null) { + nested[nestedKey] = interpolated; + } + } + if (Object.keys(nested).length > 0) { + body[key] = nested; } } @@ -545,15 +567,19 @@ function isPlainObject(value: unknown): value is Record { ); } -function mergeInjectedBody(existing: unknown, injected: Record): unknown { +function mergeInjectedBody(existing: unknown, injected: Record>): unknown { if (!existing) return injected; if (isPlainObject(existing)) return { ...existing, ...injected }; if (existing instanceof FormData) { - for (const [key, value] of Object.entries(injected)) existing.append(key, value); + for (const [key, value] of Object.entries(injected)) { + if (typeof value === 'string') existing.append(key, value); + } return existing; } if (existing instanceof URLSearchParams) { - for (const [key, value] of Object.entries(injected)) existing.append(key, value); + for (const [key, value] of Object.entries(injected)) { + if (typeof value === 'string') existing.append(key, value); + } return existing; } return existing; diff --git a/packages/shared/lib/services/proxy/utils.unit.test.ts b/packages/shared/lib/services/proxy/utils.unit.test.ts index 1933fd66eb..8f68de3cb6 100644 --- a/packages/shared/lib/services/proxy/utils.unit.test.ts +++ b/packages/shared/lib/services/proxy/utils.unit.test.ts @@ -2183,4 +2183,89 @@ describe('buildProxyBody', () => { const result = buildProxyBody({ config, connection: getTestConnection() }); expect(result).toEqual({ label: 'static' }); }); + + it('builds a nested object from a nested proxy.body map', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + auth: { + acctId: '${connectionConfig.acctId}', + loginId: '${connectionConfig.loginId}', + key: '${apiKey}' + } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ + credentials: { type: 'API_KEY', apiKey: 'my-secret-key' }, + connection_config: { acctId: '26878', loginId: 'TestUser' } + }) + }); + expect(result).toEqual({ auth: { acctId: '26878', loginId: 'TestUser', key: 'my-secret-key' } }); + }); + + it('drops unresolved keys from a nested proxy.body map but keeps the resolved ones', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + auth: { + acctId: '${connectionConfig.acctId}', + key: '${apiKey}' + } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' }, connection_config: {} }) + }); + expect(result).toEqual({ auth: { key: 'my-secret-key' } }); + }); + + it('omits a nested map entirely when none of its keys resolve', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { auth: { acctId: '${connectionConfig.acctId}' } } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ connection_config: {} }) + }); + expect(result).toBeNull(); + }); + + it('mixes flat and nested values in the same proxy.body map', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + serviceId: '101', + auth: { key: '${apiKey}' } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + expect(result).toEqual({ serviceId: '101', auth: { key: 'my-secret-key' } }); + }); }); diff --git a/packages/types/lib/providers/provider.ts b/packages/types/lib/providers/provider.ts index eaebea471e..81c8ec9f72 100644 --- a/packages/types/lib/providers/provider.ts +++ b/packages/types/lib/providers/provider.ts @@ -53,7 +53,7 @@ export interface BaseProvider { headers?: Record; connection_config?: Record; query?: Record; - body?: Record; + body?: Record>; retry?: RetryHeaderConfig; decompress?: boolean; forward_headers_on_redirect?: boolean; diff --git a/packages/webapp/public/images/template-logos/sage-member.svg b/packages/webapp/public/images/template-logos/sage-member.svg new file mode 100644 index 0000000000..42ce2180ea --- /dev/null +++ b/packages/webapp/public/images/template-logos/sage-member.svg @@ -0,0 +1 @@ + diff --git a/scripts/validation/providers/schema.json b/scripts/validation/providers/schema.json index 16f4473930..0ee777d7f4 100644 --- a/scripts/validation/providers/schema.json +++ b/scripts/validation/providers/schema.json @@ -298,7 +298,15 @@ "body": { "type": "object", "additionalProperties": { - "type": "string" + "oneOf": [ + { "type": "string" }, + { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + ] } }, "connection_config": { From b5ee4dc71c39b9c35a1a3d4fc97b9694c8f9306f Mon Sep 17 00:00:00 2001 From: hassan254-prog Date: Thu, 9 Jul 2026 23:10:39 +0300 Subject: [PATCH 2/4] review --- docs/api-integrations/sage-member.mdx | 10 +- docs/api-integrations/sage-member/form.png | Bin 0 -> 88826 bytes packages/shared/lib/services/proxy/utils.ts | 14 ++- .../lib/services/proxy/utils.unit.test.ts | 91 ++++++++++++++++++ 4 files changed, 108 insertions(+), 7 deletions(-) create mode 100644 docs/api-integrations/sage-member/form.png diff --git a/docs/api-integrations/sage-member.mdx b/docs/api-integrations/sage-member.mdx index 08870b815a..6eee37d795 100644 --- a/docs/api-integrations/sage-member.mdx +++ b/docs/api-integrations/sage-member.mdx @@ -9,13 +9,13 @@ description: 'Integrate your application with the SAGE Member API' Connect to SAGE Member with Nango and see data flow in 2 minutes. - + In Nango ([free signup](https://app.nango.dev)), go to [Integrations](https://app.nango.dev/dev/integrations) -> _Configure New Integration_ -> _SAGE Member_. - + Go to [Connections](https://app.nango.dev/dev/connections) -> _Add Test Connection_ -> _Authorize_, then enter your Account Number, Login ID, and Authentication Key. Later, you'll let your users do the same directly from your app. - + Let's make your first request to the SAGE Member API. Replace the placeholders below with your [secret key](https://app.nango.dev/dev/environment-settings), [integration ID](https://app.nango.dev/dev/integrations), and [connection ID](https://app.nango.dev/dev/connections): @@ -62,14 +62,14 @@ Connect to SAGE Member with Nango and see data flow in 2 minutes. You're connected! Check the [Logs](https://app.nango.dev/dev/logs) tab in Nango to inspect requests. - + Follow our [Auth implementation guide](/guides/primitives/auth) to integrate Nango in your app. To obtain your own production credentials, follow the setup guide linked below. -## SAGE Member Integration Guides +## SAGE Member Integration guides Nango-maintained guides for common use cases. diff --git a/docs/api-integrations/sage-member/form.png b/docs/api-integrations/sage-member/form.png new file mode 100644 index 0000000000000000000000000000000000000000..24c9f278858a2c94588e83ebb5f2dc972d160996 GIT binary patch literal 88826 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 { ); } +function appendInjectedEntry(append: (key: string, value: string) => void, key: string, value: string | Record): void { + if (typeof value === 'string') { + append(key, value); + return; + } + for (const [nestedKey, nestedValue] of Object.entries(value)) { + append(`${key}[${nestedKey}]`, nestedValue); + } +} + function mergeInjectedBody(existing: unknown, injected: Record>): unknown { if (!existing) return injected; if (isPlainObject(existing)) return { ...existing, ...injected }; if (existing instanceof FormData) { for (const [key, value] of Object.entries(injected)) { - if (typeof value === 'string') existing.append(key, value); + appendInjectedEntry((k, v) => existing.append(k, v), key, value); } return existing; } if (existing instanceof URLSearchParams) { for (const [key, value] of Object.entries(injected)) { - if (typeof value === 'string') existing.append(key, value); + appendInjectedEntry((k, v) => existing.append(k, v), key, value); } return existing; } diff --git a/packages/shared/lib/services/proxy/utils.unit.test.ts b/packages/shared/lib/services/proxy/utils.unit.test.ts index 8f68de3cb6..da5bfec088 100644 --- a/packages/shared/lib/services/proxy/utils.unit.test.ts +++ b/packages/shared/lib/services/proxy/utils.unit.test.ts @@ -3,6 +3,8 @@ import * as crypto from 'node:crypto'; import FormData from 'form-data'; import { describe, expect, it } from 'vitest'; +import { getProvider } from '@nangohq/providers'; + import { getTestConnection } from '../../seeders/connection.seeder.js'; import { absoluteUrlFromRedirectRequestOptions, @@ -2269,3 +2271,92 @@ describe('buildProxyBody', () => { expect(result).toEqual({ serviceId: '101', auth: { key: 'my-secret-key' } }); }); }); + +describe('sage-member (real provider config)', () => { + const provider = getProvider('sage-member'); + + it('is defined in providers.yaml with the expected nested auth body', () => { + // Guards against providers.yaml drifting out of sync with the nested-body test scenarios below. + expect(provider).toMatchObject({ + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://www.promoplace.com/ws/ws.dll', + body: { + auth: { + acctId: '${connectionConfig.acctId}', + loginId: '${connectionConfig.loginId}', + key: '${apiKey}' + } + } + } + }); + }); + + const connection = getTestConnection({ + provider_config_key: 'sage-member', + credentials: { type: 'API_KEY', apiKey: 'deadbeefdeadbeefdeadbeefdeadbeef' }, + connection_config: { acctId: '4353478', loginId: 'TestUser' } + }); + + it('injects account credentials into the auth object', () => { + const config = getDefaultProxy({ providerConfigKey: 'sage-member', providerName: 'sage-member', provider: provider! }); + + const result = buildProxyBody({ config, connection }); + + expect(result).toEqual({ + auth: { acctId: '4353478', loginId: 'TestUser', key: 'deadbeefdeadbeefdeadbeefdeadbeef' } + }); + }); + + it('drops the injected auth entirely when connectionConfig is missing (no leaked ${...} placeholders)', () => { + const config = getDefaultProxy({ providerConfigKey: 'sage-member', providerName: 'sage-member', provider: provider! }); + + const result = buildProxyBody({ + config, + connection: getTestConnection({ + provider_config_key: 'sage-member', + credentials: { type: 'API_KEY', apiKey: 'deadbeefdeadbeefdeadbeefdeadbeef' }, + connection_config: {} + }) + }); + + expect(result).toEqual({ auth: { key: 'deadbeefdeadbeefdeadbeefdeadbeef' } }); + }); + + it('builds the full axios request: merges caller-supplied JSON body with the injected auth object, no auth header added', () => { + const config = getDefaultProxy({ + providerConfigKey: 'sage-member', + providerName: 'sage-member', + provider: provider!, + endpoint: '/ConnectAPI', + method: 'POST', + data: { serviceId: 101, apiVer: 130 } + }); + + const axiosConfig = getAxiosConfiguration({ proxyConfig: config, connection }); + + expect(axiosConfig.url).toBe('https://www.promoplace.com/ws/ws.dll/ConnectAPI'); + expect(axiosConfig.data).toEqual({ + serviceId: 101, + apiVer: 130, + auth: { acctId: '4353478', loginId: 'TestUser', key: 'deadbeefdeadbeefdeadbeefdeadbeef' } + }); + // API_KEY has no dedicated header template for this provider, so no default authorization header is added — + // the key only ever travels inside the JSON body's `auth` object. + expect(axiosConfig.headers).toEqual({}); + }); + + it('does not inject the body for GET requests (methodDataAllowed excludes GET)', () => { + const config = getDefaultProxy({ + providerConfigKey: 'sage-member', + providerName: 'sage-member', + provider: provider!, + endpoint: '/ConnectAPI', + method: 'GET' + }); + + const axiosConfig = getAxiosConfiguration({ proxyConfig: config, connection }); + + expect(axiosConfig.data).toBeUndefined(); + }); +}); From 2bf5f33415550ae88f55a9e8507c4f842ccfc9ac Mon Sep 17 00:00:00 2001 From: hassan254-prog Date: Mon, 13 Jul 2026 21:01:19 +0300 Subject: [PATCH 3/4] review --- packages/shared/lib/services/proxy/utils.ts | 50 ++-- .../lib/services/proxy/utils.unit.test.ts | 237 ++++++++++++++++++ packages/types/lib/providers/provider.ts | 5 +- 3 files changed, 265 insertions(+), 27 deletions(-) diff --git a/packages/shared/lib/services/proxy/utils.ts b/packages/shared/lib/services/proxy/utils.ts index ebc8ef0931..975385dbef 100644 --- a/packages/shared/lib/services/proxy/utils.ts +++ b/packages/shared/lib/services/proxy/utils.ts @@ -26,6 +26,7 @@ import type { InternalProxyConfiguration, OAuth2ClientCredentials, ProviderOAuth1, + ProxyBodyValue, UserProvidedProxyConfiguration } from '@nangohq/types'; import type { Result } from '@nangohq/utils'; @@ -509,7 +510,7 @@ export function buildProxyBody({ }: { config: ApplicationConstructedProxyConfiguration; connection: ConnectionForProxy; -}): Record> | null { +}): Record | null { if (!config.provider?.proxy?.body) { return null; } @@ -520,36 +521,33 @@ export function buildProxyBody({ ...(connection.credentials as unknown as Record) }; - const interpolateLeaf = (value: string): string | null => { - const interpolated = interpolateIfNeeded(value, replacers); - return interpolated.includes('${') ? null : interpolated; - }; - - const body: Record> = {}; - for (const [key, value] of Object.entries(config.provider.proxy.body)) { + // Recurses through arbitrarily nested proxy.body maps, interpolating string leaves and dropping + // (at any depth) any leaf whose placeholder didn't resolve, and any object left empty as a result. + const buildValue = (value: unknown): ProxyBodyValue | null => { if (typeof value === 'string') { - const interpolated = interpolateLeaf(value); - if (interpolated !== null) { - body[key] = interpolated; - } - continue; + const interpolated = interpolateIfNeeded(value, replacers); + return interpolated.includes('${') ? null : interpolated; } if (!isPlainObject(value)) { - continue; + return null; } - const nested: Record = {}; + + const nested: Record = {}; for (const [nestedKey, nestedValue] of Object.entries(value)) { - if (typeof nestedValue !== 'string') { - continue; - } - const interpolated = interpolateLeaf(nestedValue); - if (interpolated !== null) { - nested[nestedKey] = interpolated; + const built = buildValue(nestedValue); + if (built !== null) { + nested[nestedKey] = built; } } - if (Object.keys(nested).length > 0) { - body[key] = nested; + return Object.keys(nested).length > 0 ? nested : null; + }; + + const body: Record = {}; + for (const [key, value] of Object.entries(config.provider.proxy.body)) { + const built = buildValue(value); + if (built !== null) { + body[key] = built; } } @@ -567,17 +565,17 @@ function isPlainObject(value: unknown): value is Record { ); } -function appendInjectedEntry(append: (key: string, value: string) => void, key: string, value: string | Record): void { +function appendInjectedEntry(append: (key: string, value: string) => void, key: string, value: ProxyBodyValue): void { if (typeof value === 'string') { append(key, value); return; } for (const [nestedKey, nestedValue] of Object.entries(value)) { - append(`${key}[${nestedKey}]`, nestedValue); + appendInjectedEntry(append, `${key}[${nestedKey}]`, nestedValue); } } -function mergeInjectedBody(existing: unknown, injected: Record>): unknown { +function mergeInjectedBody(existing: unknown, injected: Record): unknown { if (!existing) return injected; if (isPlainObject(existing)) return { ...existing, ...injected }; if (existing instanceof FormData) { diff --git a/packages/shared/lib/services/proxy/utils.unit.test.ts b/packages/shared/lib/services/proxy/utils.unit.test.ts index da5bfec088..05d8f2d52a 100644 --- a/packages/shared/lib/services/proxy/utils.unit.test.ts +++ b/packages/shared/lib/services/proxy/utils.unit.test.ts @@ -2270,6 +2270,243 @@ describe('buildProxyBody', () => { }); expect(result).toEqual({ serviceId: '101', auth: { key: 'my-secret-key' } }); }); + + it('builds a value nested more than one level deep', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + request: { + control: { + senderid: '${connectionConfig.senderId}', + password: '${apiKey}' + }, + operation: { + authentication: { + login: { + userid: '${connectionConfig.userId}' + } + } + } + } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ + credentials: { type: 'API_KEY', apiKey: 'my-secret-key' }, + connection_config: { senderId: 'sender-1', userId: 'user-1' } + }) + }); + expect(result).toEqual({ + request: { + control: { senderid: 'sender-1', password: 'my-secret-key' }, + operation: { authentication: { login: { userid: 'user-1' } } } + } + }); + }); + + it('drops an unresolved leaf several levels deep but keeps its siblings', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + a: { + b: { + c: '${connectionConfig.missing}', + d: '${apiKey}' + } + } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' }, connection_config: {} }) + }); + expect(result).toEqual({ a: { b: { d: 'my-secret-key' } } }); + }); + + it('omits a deeply nested map entirely when every leaf under it fails to resolve', () => { + const config = getDefaultProxy({ + provider: { + auth_mode: 'API_KEY', + proxy: { + base_url: 'https://example.com', + body: { + a: { b: { c: '${connectionConfig.missing}' } } + } + } + } + }); + const result = buildProxyBody({ + config, + connection: getTestConnection({ connection_config: {} }) + }); + expect(result).toBeNull(); + }); +}); + +describe('buildProxyBody merged into an existing request body', () => { + const provider = { + auth_mode: 'API_KEY' as const, + proxy: { + base_url: 'https://example.com', + body: { + auth: { + nested: { + key: '${apiKey}' + } + } + } + } + }; + + it('injects a value nested more than one level deep into an existing URLSearchParams body using bracket notation', () => { + const config = getDefaultProxy({ + provider, + method: 'POST', + data: new URLSearchParams({ existing: 'value' }) + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + expect((axiosConfig.data as URLSearchParams).toString()).toBe('existing=value&auth%5Bnested%5D%5Bkey%5D=my-secret-key'); + }); + + it('injects a value nested more than one level deep into an existing FormData body using bracket notation', () => { + const form = new FormData(); + form.append('existing', 'value'); + const config = getDefaultProxy({ + provider, + method: 'POST', + data: form + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + const resultForm = axiosConfig.data as FormData; + expect(resultForm).toBe(form); + const buffer = resultForm.getBuffer().toString('utf8'); + expect(buffer).toContain('name="existing"'); + expect(buffer).toContain('name="auth[nested][key]"'); + expect(buffer).toContain('my-secret-key'); + }); + + const providerDepth1 = { + auth_mode: 'API_KEY' as const, + proxy: { + base_url: 'https://example.com', + body: { + auth: { + key: '${apiKey}' + } + } + } + }; + + it('injects a value nested exactly one level deep into an existing URLSearchParams body using bracket notation', () => { + const config = getDefaultProxy({ + provider: providerDepth1, + method: 'POST', + data: new URLSearchParams({ existing: 'value' }) + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + expect((axiosConfig.data as URLSearchParams).toString()).toBe('existing=value&auth%5Bkey%5D=my-secret-key'); + }); + + it('injects a value nested exactly one level deep into an existing FormData body using bracket notation', () => { + const form = new FormData(); + form.append('existing', 'value'); + const config = getDefaultProxy({ + provider: providerDepth1, + method: 'POST', + data: form + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + const resultForm = axiosConfig.data as FormData; + expect(resultForm).toBe(form); + const buffer = resultForm.getBuffer().toString('utf8'); + expect(buffer).toContain('name="existing"'); + expect(buffer).toContain('name="auth[key]"'); + expect(buffer).toContain('my-secret-key'); + }); + + const providerDepth3 = { + auth_mode: 'API_KEY' as const, + proxy: { + base_url: 'https://example.com', + body: { + auth: { + a: { + b: { + key: '${apiKey}' + } + } + } + } + } + }; + + it('injects a value nested three levels deep into an existing URLSearchParams body using bracket notation', () => { + const config = getDefaultProxy({ + provider: providerDepth3, + method: 'POST', + data: new URLSearchParams({ existing: 'value' }) + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + expect((axiosConfig.data as URLSearchParams).toString()).toBe('existing=value&auth%5Ba%5D%5Bb%5D%5Bkey%5D=my-secret-key'); + }); + + it('injects a value nested three levels deep into an existing FormData body using bracket notation', () => { + const form = new FormData(); + form.append('existing', 'value'); + const config = getDefaultProxy({ + provider: providerDepth3, + method: 'POST', + data: form + }); + + const axiosConfig = getAxiosConfiguration({ + proxyConfig: config, + connection: getTestConnection({ credentials: { type: 'API_KEY', apiKey: 'my-secret-key' } }) + }); + + const resultForm = axiosConfig.data as FormData; + expect(resultForm).toBe(form); + const buffer = resultForm.getBuffer().toString('utf8'); + expect(buffer).toContain('name="existing"'); + expect(buffer).toContain('name="auth[a][b][key]"'); + expect(buffer).toContain('my-secret-key'); + }); }); describe('sage-member (real provider config)', () => { diff --git a/packages/types/lib/providers/provider.ts b/packages/types/lib/providers/provider.ts index 81c8ec9f72..276af6b74c 100644 --- a/packages/types/lib/providers/provider.ts +++ b/packages/types/lib/providers/provider.ts @@ -44,6 +44,9 @@ export interface SimplifiedJSONSchema { visible_when?: { field: string; equals: string }; } +// A `proxy.body` leaf is a string (interpolated) or a nested object of more leaves, to any depth. +export type ProxyBodyValue = string | { [key: string]: ProxyBodyValue }; + export interface BaseProvider { display_name: string; auth_mode: AuthModeType; @@ -53,7 +56,7 @@ export interface BaseProvider { headers?: Record; connection_config?: Record; query?: Record; - body?: Record>; + body?: Record; retry?: RetryHeaderConfig; decompress?: boolean; forward_headers_on_redirect?: boolean; From 431055de8ec5f7aabf31f58f3600e86c820135a8 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 13 Jul 2026 20:06:05 +0000 Subject: [PATCH 4/4] chore(docs): regenerate LLM indexes --- docs/api-catalog.txt | 2 +- docs/llms.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api-catalog.txt b/docs/api-catalog.txt index 6e1d7cc97b..3c354c9f6f 100644 --- a/docs/api-catalog.txt +++ b/docs/api-catalog.txt @@ -2,7 +2,7 @@ > Compact provider slug catalog for agents. Use the slug to reconstruct provider-specific docs URLs only when needed. -Provider count: 884 +Provider count: 885 URL patterns: - Main provider page: https://nango.dev/docs/integrations/all/{slug}.md or https://nango.dev/docs/api-integrations/{slug}.md diff --git a/docs/llms.txt b/docs/llms.txt index 963b87e283..ad3d85d5a1 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -139,7 +139,7 @@ Use provider URLs by replacing `{slug}` with a slug from the API catalog: ## APIs and integrations -- [API catalog](https://nango.dev/docs/api-catalog.txt): 884 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. +- [API catalog](https://nango.dev/docs/api-catalog.txt): 885 provider slugs with canonical docs routes, auth modes, setup guides, and connect guides. - Provider-specific pages are intentionally not expanded here so core Nango guides remain easy for agents to find. ## Resources