Files
accounted/packages/connect-contract/README.md
T
fcfa1ba974 feat(connect): extract the connector wire contract into packages/connect-contract (#2179)
* feat(connect): extract the connector wire contract into packages/connect-contract

The definitions in lib/connect/contract.ts (key prefix, headers, entitlements
path, entitlement and sync-report shapes) move into a standalone MIT package,
packages/connect-contract (published as @accounted/connect-contract), joined
by the error envelope, the stable error codes, and Zod schemas for every
Peppol connector operation (lookup, submit, status, evidence, register,
unregister, inbound list and xml) with an operation table. Shape only: no
behaviour, no provider code. In-repo callers import through the tsconfig and
vitest alias; lib/connect/contract.ts re-exports so nothing else changes.
The point of the package is that either side of the connection can be built
outside this repository: a self-hosted ledger talking to Accounted Connect,
or another connector service talking to the open ledger.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>

* docs(decisions): record the Connect direction, the Peppol proxy shape, and the contract package

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>

---------

Signed-off-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 20:57:47 +02:00

42 lines
1.7 KiB
Markdown

# @accounted/connect-contract
The wire contract between an Accounted ledger installation (the hosted service
or a self-hosted instance) and Accounted Connect, the service that operates
the provider integrations only Accounted can run: bank feeds through its PSD2
credentials, the Skatteverket API client, the Peppol access point, company
lookup, the migration sources.
This package is shape only: constants, Zod schemas and the TypeScript types
inferred from them. There is no behaviour and no provider code in it. Both
sides of the connection validate with the same schemas so they cannot drift
apart, and the package is MIT so that anyone may implement either side.
What is in it:
- key prefix, header names and the entitlements path an installation uses;
- the entitlements and sync-report payloads of the hourly key sync;
- the error envelope and the stable error codes the service answers with;
- the Peppol operations (`/api/connect/peppol/*`): request and response
schemas plus the operation table (method, path, company header required).
Versioning: `CONTRACT_VERSION` is a date. Fields are only ever added; a
breaking change is a new operation or family, never a changed one.
## Use
```ts
import { peppolSubmissionSchema, PEPPOL_OPERATIONS, CONTRACT_VERSION } from '@accounted/connect-contract'
const parsed = peppolSubmissionSchema.safeParse(body)
if (!parsed.success) return badRequest(parsed.error)
```
Inside the Accounted repository the package is consumed from source through a
path alias. To publish, build from the repository root with the root
dependencies installed:
```bash
npx tsc -p packages/connect-contract/tsconfig.json
cd packages/connect-contract && npm publish --access public
```