Metadata-Version: 2.4
Name: dander-connector-salesforce
Version: 0.2.0
Summary: Salesforce Bulk API 2.0 connector plugin for Dander.
Project-URL: Homepage, https://github.com/harrisonoconnorhover/dander-connector-salesforce
Project-URL: Issues, https://github.com/harrisonoconnorhover/dander-connector-salesforce/issues
Project-URL: Repository, https://github.com/harrisonoconnorhover/dander-connector-salesforce.git
Author: Harrison O'Connor-Hover
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: bulk-api,dander,etl,salesforce
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Information Technology
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Database
Requires-Python: >=3.12
Requires-Dist: dander-platform<0.6,>=0.5.0rc1
Requires-Dist: httpx>=0.27
Provides-Extra: dev
Requires-Dist: mypy>=1.11; extra == 'dev'
Requires-Dist: pytest>=8.3; extra == 'dev'
Requires-Dist: ruff>=0.6; extra == 'dev'
Description-Content-Type: text/markdown

# Dander Salesforce Connector

First-party Salesforce Bulk API 2.0 connector plugin for
[Dander](https://github.com/harrisonoconnorhover/dander).

> **Alpha:** pin both Dander and this plugin exactly. The plugin is read-only and currently
> supports one bounded, server-filtered Accounts `queryAll` pipeline.

## Install

Declare the exact plugin version in `dander.yaml`:

```yaml
plugins:
  salesforce:
    distribution: dander-connector-salesforce
    version: 0.2.0
```

Then install exactly what the manifest declares:

```console
dander plugins install
```

Copy [`salesforce_jwt.example.yaml`](src/dander_connector_salesforce/templates/salesforce_jwt.example.yaml)
into the project's `connectors/` directory, replace the public org settings, and keep the
External Client App ID and RSA private key in Dander's configured secret store.

## Runtime contract

- Engine: `salesforce_bulk2`
- Authentication: Dander core's `oauth2_jwt` strategy
- API: Salesforce Bulk API 2.0 Query
- Publication: Dander's existing SCD1 writer
- Cursor: `SystemModstamp`, applied as a server-side SOQL filter on replay
- Memory: CSV result pages are streamed and bounded by `maxRecords`
- Optional reads: exact aggregate count and one Account lookup by validated Salesforce `Id`
- Connection check: authenticated REST `/limits` probe that returns no business records

With Dander `0.5.0` or newer, inspect and check an installed pipeline without running ingestion:

```console
dander connector inspect PIPELINE_ID
dander connector check PIPELINE_ID
```

Dander retains its deprecated built-in Salesforce fallback for compatibility. When this plugin is
explicitly pinned, the plugin implementation takes precedence.

## Development

```console
uv sync --extra dev
uv run ruff check .
uv run mypy src tests
uv run pytest
```

Apache-2.0 licensed.
