Files
binect-js/TechnicalSpecificationDocument.md
tegwick 5c1d26afba Add project documentation and configure for JavaScript/TypeScript
- Add PRD and TSD defining SDK and Explorer architecture
- Add CLAUDE.md with project guidance for Claude Code
- Update README with project description
- Replace Python .gitignore with JS/TS configuration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-14 16:47:25 +01:00

354 lines
7.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
TechnicalSpecificationDocument
*Implementation strategy for binect-js*
# Technical Specification (TSD)
## Binect-JS API Wrapper & Explorer
**PRD-aligned / Pre-Implementation Version**
---
## 0. Positioning and Authority
This Technical Specification derives its authority **exclusively from the PRD** and serves as a **design-orientation document**, not a binding implementation plan.
It:
* refines **how the product intent may be realized**
* makes **explicit what is optional, configurable, or deferred**
* avoids encoding decisions that would normally belong in ADRs
Where uncertainty exists, the TSD **preserves option space**.
---
## 1. Product Composition
### 1.1 Product Boundary
The product **Binect-JS** consists of two coordinated but separable artifacts:
1. **Binect-JS SDK**
A JavaScript / TypeScript wrapper around the Binect REST API.
2. **Binect Explorer**
A browser-based interactive tool that uses the SDK to support:
* learning
* experimentation
* evaluation
* integration understanding
Together they form **one developer-facing product**, but neither depends on the other for correctness.
---
## 2. Design Guardrails (Derived from PRD)
The following constraints are **non-negotiable** and shape all downstream decisions:
1. **No backend dependency**
The product must function entirely in browser and JavaScript runtime environments.
2. **No semantic reinterpretation of the Binect API**
The wrapper must not alter business meaning, rules, or outcomes.
3. **Transparency over abstraction**
Developers must be able to reason about what API calls occur and why.
4. **Learning-first, not operations-first**
Especially for the Explorer: this is *not* a production operations console.
5. **Optionality over prescription**
Features that imply policy (retries, persistence, automation) must be opt-in.
---
## 3. SDK Technical Orientation (`@binect/js`)
### 3.1 Role of the SDK
The SDKs role is to:
* provide a **stable adaptation layer**
* reduce accidental misuse of the API
* improve readability and discoverability
* centralize API evolution handling
It is **not** intended to:
* orchestrate workflows
* enforce sending policies
* optimize delivery behavior
---
### 3.2 API Surface Structure
The SDK exposes **domain-aligned sub-clients** that mirror the API vocabulary:
* `documents`
* `attachments`
* `sendings`
* `accounts`
* `invoices`
This structure is **intentional**:
* it preserves traceability to API documentation
* it avoids hiding capabilities behind synthetic abstractions
---
### 3.3 Core vs Convenience Layers (Explicit Separation)
The SDK is conceptually divided into two layers:
#### A) Core API Layer (authoritative)
* 1:1 semantic mapping to REST endpoints
* minimal transformation
* predictable behavior
* no embedded policy
Examples:
* `documents.uploadPdf`
* `documents.getStatus`
* `sendings.announce`
* `sendings.cancel`
This layer is **the reference layer**.
#### B) Optional Convenience Layer (non-authoritative)
* purely additive helpers
* must be clearly labeled as such
* must not be required for correct usage
Examples (illustrative, not mandatory):
* status predicates (`isShippable`)
* error extraction helpers
* polling helpers
> **Important:**
> Convenience helpers may exist, but **must never be the only way** to perform an action.
---
### 3.4 Authentication Handling
* Authentication uses **HTTP Basic Auth**, passed transparently.
* The SDK:
* does not store credentials
* does not cache auth headers beyond request scope
* does not log sensitive values
Credential lifecycle management is **explicitly out of scope** for the SDK.
---
### 3.5 Upload & Payload Handling
* The SDK supports base64-encoded PDF uploads as required by the API.
* It may provide:
* size estimation helpers
* early warnings when payloads approach known limits
These helpers:
* are advisory only
* do not block execution unless explicitly configured
---
### 3.6 Error Handling Model
* All non-success responses are surfaced as structured errors.
* Errors preserve:
* HTTP status
* endpoint identity
* parsed response payload where available
The SDK **does not reinterpret business errors**, but may:
* expose helpers to *extract* or *summarize* validation issues.
---
### 3.7 Retries, Timeouts, and Network Behavior (Revised)
**Change from previous TSD:**
All default retry semantics have been **removed**.
Current stance:
* The SDK **does not imply any retry behavior**
* Network behavior is:
* explicit
* configurable
* opt-in
If retry helpers are provided:
* they must be **disabled by default**
* they must be **clearly documented as potentially unsafe** for send operations
Timeouts, retries, and backoff strategies are **configuration concerns**, not product guarantees.
---
## 4. Explorer Technical Orientation (`@binect/explorer`)
### 4.1 Role of the Explorer
The Explorer exists to:
* reduce onboarding friction
* make the API *legible*
* allow safe experimentation
* support pre-integration evaluation
It is **not** intended to:
* replace backend integrations
* act as an operations dashboard
* support long-running or automated workflows
---
### 4.2 Functional Scope
The Explorer supports:
* credential input
* document upload and inspection
* previewing normalized output
* triggering send/cancel actions
* inspecting raw and summarized responses
* storing named **use case profiles**
All actions are **user-initiated**.
---
### 4.3 Use Case Profiles (Conceptual)
Profiles represent:
* a reusable *parameter constellation*
* not a workflow definition
* not a business rule
Profiles may include:
* document options
* attributes
* cover page parameters
* attachment references
* sending mode (upload vs send)
Profiles:
* are stored locally
* can be exported/imported
* have no implicit execution semantics
---
### 4.4 Credential Handling (Reframed)
**Change from previous TSD:**
Credential persistence is no longer a default design feature.
Current stance:
* Credentials are **ephemeral by default**
* Optional persistence may exist as a **user-initiated UX enhancement**
* No persistence is required to meet product intent
Cryptographic details and storage mechanisms are **explicitly design-time decisions**, deferred until implementation.
---
### 4.5 Safety and Trust
The Explorer must:
* clearly distinguish between *preview* and *send*
* require explicit confirmation for destructive actions
* surface consequences before execution
Safety is achieved through **interaction design**, not enforcement logic.
---
## 5. Non-Functional Orientation
### 5.1 Usability
* API capabilities must be discoverable through interaction.
* Raw API responses must remain accessible.
### 5.2 Reliability
* Failures must be visible and explainable.
* Silent retries or hidden corrections are disallowed.
### 5.3 Maintainability
* The SDK must tolerate API evolution without breaking product intent.
* The Explorer must remain usable even as API features expand.
---
## 6. Out-of-Scope Reinforcement (Explicit)
The following are **explicitly excluded** from this TSD:
* scheduling
* batching
* automation
* background job execution
* business rule enforcement
* policy encoding
Any future inclusion of these concerns requires:
* PRD revision **or**
* explicit ADRs
---
## 7. Traceability Note
This TSD is intentionally **non-binding** with respect to:
* architectural patterns
* libraries
* UI frameworks
* storage mechanisms
Its sole purpose is to ensure that **implementation choices remain aligned with product intent as defined in the PRD**.
---
## 8. Status
* **TSD** is **PRD-aligned**
* Safe to use as:
* implementation briefing
* review baseline
* pre-ADR reference
xxx