Metadata-Version: 2.4
Name: alter-sdk-dropbox
Version: 0.1.1
Summary: Typed dropbox operations through Alter
License-Expression: MIT
License-File: LICENSE
Author: Alter Team
Author-email: founders@alterauth.com
Requires-Python: >=3.11,<4.0
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Requires-Dist: alter-sdk (>=0.31.0,<0.32.0)
Requires-Dist: jsonschema (>=4.26,<5)
Description-Content-Type: text/markdown

# alter-sdk-dropbox

Install `pip install alter-sdk-dropbox`. Core `alter-sdk` is installed as a dependency.

Import `DropboxIntegration` from `alter_sdk_dropbox` and construct it with an Alter `App`
and `{"grant_id": grant_id}`. All 216 operations use
immutable contract `2026-11-01`. Await `call.wait()` for immediate or
approved execution, then decode with `result.body_json()`.
Grants come from OAuth connections; this provider has no managed-secret connection.

[Public API reference](https://docs.alterauth.com/reference/managed-dropbox-operations) includes every operation's input/output fields and both SDK examples.


## Resume after a process restart

Persist the pending call's `approvalId` (TypeScript) or `approval_id` (Python)
in your durable job record. After restarting, construct a fresh provider client:

```typescript
const resumed = await provider.resume(savedApprovalId);
const result = await resumed.wait();
const body = result.bodyJson();
```

```python
resumed = await provider.resume(saved_approval_id)
result = await resumed.wait()
body = result.body_json()
```

The backend supplies the stored provider, operation and immutable contract version.
The provider package verifies provider/version and applies that operation's validator
and fault handling. Mismatches raise `ManagedOperationError` with
`managed_approval_contract_mismatch` or `managed_approval_operation_mismatch`.
The ID yields a union of operation outputs; TypeScript callers can narrow the call
by `resumed.operation`. No operation or version is accepted from the caller.

Generic `app.integrations.resume(id)` preserves raw response access and exact-number
decoding; use the provider package for its response validator. Both use the existing
approval poll's `proxy:execute` or `approvals:read` permissions and app/agent isolation.
Resume also works after execution while the result is retained. Denial, expiry,
execution failure and result purging retain the existing approval errors. Resume
never resubmits the request. Raw approvals or missing stored identities fail with
`managed_approval_identity_unavailable`.

