# ptnusasatuintiartha-doku/doku-nodejs-library architecture

> Architecture diagram of the GitHub repository ptnusasatuintiartha-doku/doku-nodejs-library, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ptnusasatuintiartha-doku/doku-nodejs-library
- Repository: https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library

## Overview

DOKU Node.js SDK: an application initializes `Snap`, which obtains and refreshes access tokens before dispatching virtual-account or direct-debit operations to controllers and API services. The SDK also exposes inbound signature/token validation and notification-response helpers, plus legacy inquiry/notification mapping. DTOs define the request and response shapes. The README documents additional status, refund, balance, binding, and card operations. Some subsystem details are unsampled, so links to those capabilities are limited to documented or indexed relationships.

Main entry points: [`_controllers/vaController.js`](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/vaController.js) (VA controller), [`_modules/snap.js`](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_modules/snap.js) (Snap facade), [`_controllers/directDebitController.js`](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/directDebitController.js) (Direct debit controller), [`_controllers/tokenController.js`](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/tokenController.js) (Token controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["SDK entry"]
  node_snap["Snap facade<br/>[snap.js]"]
end

subgraph group_auth["Auth and signing"]
  node_token_controller["Token controller<br/>[tokenController.js]"]
  node_token_service["Token and signatures<br/>[tokenService.js]"]
  node_signature_service["Signature helper"]
  node_config["API configuration<br/>[config.js]"]
  node_common["Request identifiers<br/>[commonFunction.js]"]
  node_header_validation["Header validation<br/>[validateHeader.js]"]
end

subgraph group_va["Virtual accounts"]
  node_va_controller["VA controller<br/>[vaController.js]"]
  node_va_service["VA API and mapping<br/>[vaService.js]"]
  node_va_models["VA request/response DTOs"]
  node_legacy_mapping["Inquiry/notify mapping<br/>[vaService.js]"]
  node_notify_controller["Notification controller"]
  node_notify_service["Notification responses"]
end

subgraph group_debit["Direct debit"]
  node_dd_controller["Direct debit controller"]
  node_dd_service["Direct debit API"]
  node_dd_models["Debit operation DTOs"]
  node_dd_channels["Debit channel values<br/>[ddChannelEnum.js]"]
end

node_merchant(("Merchant app"))
node_doku(("DOKU API"))

node_merchant -->|"initializes and calls"| node_snap
node_snap -->|"obtains tokens"| node_token_controller
node_snap -->|"dispatches VA operations"| node_va_controller
node_snap -->|"dispatches debit operations"| node_dd_controller
node_snap -->|"dispatches notifications"| node_notify_controller
node_snap -->|"validates headers"| node_header_validation
node_va_controller -->|"calls VA operations"| node_va_service
node_va_controller -->|"signs requests"| node_token_service
node_va_controller -->|"generates request IDs"| node_common
node_va_controller -->|"selects endpoints"| node_config
node_va_service -->|"sends API requests"| node_doku
node_va_controller -->|"delegates mappings"| node_legacy_mapping
node_notify_controller -->|"builds responses"| node_notify_service
node_dd_controller -->|"calls debit operations"| node_dd_service
node_dd_controller -->|"signs requests"| node_token_service
node_dd_controller -->|"selects endpoints"| node_config
node_dd_service -->|"sends API requests"| node_doku
node_token_controller -->|"creates and validates tokens"| node_token_service
node_token_controller -->|"creates signatures"| node_signature_service
node_token_controller -->|"builds request headers"| node_va_service
node_token_service -->|"requests access tokens"| node_doku
node_va_controller -.->|"accepts operation DTOs"| node_va_models
node_dd_controller -.->|"accepts operation DTOs"| node_dd_models

click node_snap "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_modules/snap.js"
click node_va_controller "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/vaController.js"
click node_va_service "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/vaService.js"
click node_va_models "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/tree/main/_models"
click node_legacy_mapping "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/vaService.js"
click node_dd_controller "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/directDebitController.js"
click node_dd_service "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/directDebitService.js"
click node_dd_models "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/tree/main/_models"
click node_notify_controller "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/notificationController.js"
click node_notify_service "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/notificationService.js"
click node_token_controller "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/tokenController.js"
click node_token_service "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/tokenService.js"
click node_signature_service "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/signatureService.js"
click node_config "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/config.js"
click node_common "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/commonFunction.js"
click node_header_validation "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/validateHeader.js"
click node_dd_channels "https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/ddChannelEnum.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_snap toneBlue
class node_token_controller,node_token_service,node_signature_service,node_config,node_common,node_header_validation toneAmber
class node_va_controller,node_va_service,node_va_models,node_legacy_mapping,node_notify_controller,node_notify_service,node_doku toneMint
class node_dd_controller,node_dd_service,node_dd_models,node_dd_channels toneRose
class node_merchant toneIndigo
```

## Components

### SDK entry

- [Snap facade](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_modules/snap.js): `_modules/snap.js`

### Auth and signing

- [Token controller](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/tokenController.js): `_controllers/tokenController.js`
- [Token and signatures](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/tokenService.js): `_services/tokenService.js`
- [Signature helper](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/signatureService.js): `_services/signatureService.js`
- [API configuration](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/config.js): `_commons/config.js`
- [Request identifiers](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/commonFunction.js): `_commons/commonFunction.js`
- [Header validation](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/validateHeader.js): `_commons/validateHeader.js`

### Virtual accounts

- [VA controller](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/vaController.js): `_controllers/vaController.js`
- [VA API and mapping](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/vaService.js): `_services/vaService.js`
- [VA request/response DTOs](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/tree/main/_models): `_models`
- [Inquiry/notify mapping](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/vaService.js): `_services/vaService.js`
- [Notification controller](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/notificationController.js): `_controllers/notificationController.js`
- [Notification responses](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/notificationService.js): `_services/notificationService.js`

### Direct debit

- [Direct debit controller](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_controllers/directDebitController.js): `_controllers/directDebitController.js`
- [Direct debit API](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_services/directDebitService.js): `_services/directDebitService.js`
- [Debit operation DTOs](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/tree/main/_models): `_models`
- [Debit channel values](https://github.com/ptnusasatuintiartha-doku/doku-nodejs-library/blob/main/_commons/ddChannelEnum.js): `_commons/ddChannelEnum.js`

### Other components

- **Merchant app**
- **DOKU API**

## Connections

- Merchant app → Snap facade: initializes and calls
- Snap facade → Token controller: obtains tokens (evidence: `_modules/snap.js`)
- Snap facade → VA controller: dispatches VA operations (evidence: `_modules/snap.js`)
- Snap facade → Direct debit controller: dispatches debit operations (evidence: `_modules/snap.js`)
- Snap facade → Notification controller: dispatches notifications (evidence: `_modules/snap.js`)
- Snap facade → Header validation: validates headers (evidence: `_modules/snap.js`)
- VA controller → VA API and mapping: calls VA operations (evidence: `_controllers/vaController.js`)
- VA controller → Token and signatures: signs requests (evidence: `_controllers/vaController.js`)
- VA controller → Request identifiers: generates request IDs (evidence: `_controllers/vaController.js`)
- VA controller → API configuration: selects endpoints (evidence: `_controllers/vaController.js`)
- VA API and mapping → DOKU API: sends API requests (evidence: `_services/vaService.js`)
- VA controller → Inquiry/notify mapping: delegates mappings (evidence: `_controllers/vaController.js`)
- Notification controller → Notification responses: builds responses (evidence: `_controllers/notificationController.js`)
- Direct debit controller → Direct debit API: calls debit operations (evidence: `_controllers/directDebitController.js`)
- Direct debit controller → Token and signatures: signs requests (evidence: `_controllers/directDebitController.js`)
- Direct debit controller → API configuration: selects endpoints (evidence: `_controllers/directDebitController.js`)
- Direct debit API → DOKU API: sends API requests (evidence: `_services/directDebitService.js`)
- Token controller → Token and signatures: creates and validates tokens (evidence: `_controllers/tokenController.js`)
- Token controller → Signature helper: creates signatures (evidence: `_controllers/tokenController.js`)
- Token controller → VA API and mapping: builds request headers (evidence: `_controllers/tokenController.js`)
- Token and signatures → DOKU API: requests access tokens (evidence: `_services/tokenService.js`)
- VA controller → VA request/response DTOs: accepts operation DTOs
- Direct debit controller → Debit operation DTOs: accepts operation DTOs (evidence: `_controllers/directDebitController.js`)
