clearbank-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +295 -0
  4. package/dist/cjs/core/config.js +25 -0
  5. package/dist/cjs/core/config.js.map +1 -0
  6. package/dist/cjs/core/crypto.js +110 -0
  7. package/dist/cjs/core/crypto.js.map +1 -0
  8. package/dist/cjs/core/http.js +191 -0
  9. package/dist/cjs/core/http.js.map +1 -0
  10. package/dist/cjs/core/index.js +14 -0
  11. package/dist/cjs/core/index.js.map +1 -0
  12. package/dist/cjs/core/retry.js +42 -0
  13. package/dist/cjs/core/retry.js.map +1 -0
  14. package/dist/cjs/domains/accounts/index.js +6 -0
  15. package/dist/cjs/domains/accounts/index.js.map +1 -0
  16. package/dist/cjs/domains/accounts/service.js +216 -0
  17. package/dist/cjs/domains/accounts/service.js.map +1 -0
  18. package/dist/cjs/domains/accounts/types.js +3 -0
  19. package/dist/cjs/domains/accounts/types.js.map +1 -0
  20. package/dist/cjs/domains/embedded/index.js +6 -0
  21. package/dist/cjs/domains/embedded/index.js.map +1 -0
  22. package/dist/cjs/domains/embedded/service.js +215 -0
  23. package/dist/cjs/domains/embedded/service.js.map +1 -0
  24. package/dist/cjs/domains/embedded/types.js +3 -0
  25. package/dist/cjs/domains/embedded/types.js.map +1 -0
  26. package/dist/cjs/domains/multicurrency/index.js +6 -0
  27. package/dist/cjs/domains/multicurrency/index.js.map +1 -0
  28. package/dist/cjs/domains/multicurrency/service.js +202 -0
  29. package/dist/cjs/domains/multicurrency/service.js.map +1 -0
  30. package/dist/cjs/domains/multicurrency/types.js +3 -0
  31. package/dist/cjs/domains/multicurrency/types.js.map +1 -0
  32. package/dist/cjs/domains/payments/index.js +6 -0
  33. package/dist/cjs/domains/payments/index.js.map +1 -0
  34. package/dist/cjs/domains/payments/service.js +255 -0
  35. package/dist/cjs/domains/payments/service.js.map +1 -0
  36. package/dist/cjs/domains/payments/types.js +3 -0
  37. package/dist/cjs/domains/payments/types.js.map +1 -0
  38. package/dist/cjs/domains/webhooks/index.js +7 -0
  39. package/dist/cjs/domains/webhooks/index.js.map +1 -0
  40. package/dist/cjs/domains/webhooks/service.js +173 -0
  41. package/dist/cjs/domains/webhooks/service.js.map +1 -0
  42. package/dist/cjs/domains/webhooks/types.js +8 -0
  43. package/dist/cjs/domains/webhooks/types.js.map +1 -0
  44. package/dist/cjs/index.js +73 -0
  45. package/dist/cjs/index.js.map +1 -0
  46. package/dist/cjs/types/index.js +45 -0
  47. package/dist/cjs/types/index.js.map +1 -0
  48. package/dist/cjs/utils/index.js +46 -0
  49. package/dist/cjs/utils/index.js.map +1 -0
  50. package/dist/esm/core/config.js +22 -0
  51. package/dist/esm/core/config.js.map +1 -0
  52. package/dist/esm/core/crypto.js +105 -0
  53. package/dist/esm/core/crypto.js.map +1 -0
  54. package/dist/esm/core/http.js +187 -0
  55. package/dist/esm/core/http.js.map +1 -0
  56. package/dist/esm/core/index.js +5 -0
  57. package/dist/esm/core/index.js.map +1 -0
  58. package/dist/esm/core/retry.js +39 -0
  59. package/dist/esm/core/retry.js.map +1 -0
  60. package/dist/esm/domains/accounts/index.js +2 -0
  61. package/dist/esm/domains/accounts/index.js.map +1 -0
  62. package/dist/esm/domains/accounts/service.js +212 -0
  63. package/dist/esm/domains/accounts/service.js.map +1 -0
  64. package/dist/esm/domains/accounts/types.js +2 -0
  65. package/dist/esm/domains/accounts/types.js.map +1 -0
  66. package/dist/esm/domains/embedded/index.js +2 -0
  67. package/dist/esm/domains/embedded/index.js.map +1 -0
  68. package/dist/esm/domains/embedded/service.js +211 -0
  69. package/dist/esm/domains/embedded/service.js.map +1 -0
  70. package/dist/esm/domains/embedded/types.js +2 -0
  71. package/dist/esm/domains/embedded/types.js.map +1 -0
  72. package/dist/esm/domains/multicurrency/index.js +2 -0
  73. package/dist/esm/domains/multicurrency/index.js.map +1 -0
  74. package/dist/esm/domains/multicurrency/service.js +198 -0
  75. package/dist/esm/domains/multicurrency/service.js.map +1 -0
  76. package/dist/esm/domains/multicurrency/types.js +2 -0
  77. package/dist/esm/domains/multicurrency/types.js.map +1 -0
  78. package/dist/esm/domains/payments/index.js +2 -0
  79. package/dist/esm/domains/payments/index.js.map +1 -0
  80. package/dist/esm/domains/payments/service.js +251 -0
  81. package/dist/esm/domains/payments/service.js.map +1 -0
  82. package/dist/esm/domains/payments/types.js +2 -0
  83. package/dist/esm/domains/payments/types.js.map +1 -0
  84. package/dist/esm/domains/webhooks/index.js +2 -0
  85. package/dist/esm/domains/webhooks/index.js.map +1 -0
  86. package/dist/esm/domains/webhooks/service.js +168 -0
  87. package/dist/esm/domains/webhooks/service.js.map +1 -0
  88. package/dist/esm/domains/webhooks/types.js +5 -0
  89. package/dist/esm/domains/webhooks/types.js.map +1 -0
  90. package/dist/esm/index.js +56 -0
  91. package/dist/esm/index.js.map +1 -0
  92. package/dist/esm/types/index.js +41 -0
  93. package/dist/esm/types/index.js.map +1 -0
  94. package/dist/esm/utils/index.js +35 -0
  95. package/dist/esm/utils/index.js.map +1 -0
  96. package/dist/types/core/config.d.ts +34 -0
  97. package/dist/types/core/config.d.ts.map +1 -0
  98. package/dist/types/core/crypto.d.ts +20 -0
  99. package/dist/types/core/crypto.d.ts.map +1 -0
  100. package/dist/types/core/http.d.ts +34 -0
  101. package/dist/types/core/http.d.ts.map +1 -0
  102. package/dist/types/core/index.d.ts +7 -0
  103. package/dist/types/core/index.d.ts.map +1 -0
  104. package/dist/types/core/retry.d.ts +14 -0
  105. package/dist/types/core/retry.d.ts.map +1 -0
  106. package/dist/types/domains/accounts/index.d.ts +3 -0
  107. package/dist/types/domains/accounts/index.d.ts.map +1 -0
  108. package/dist/types/domains/accounts/service.d.ts +61 -0
  109. package/dist/types/domains/accounts/service.d.ts.map +1 -0
  110. package/dist/types/domains/accounts/types.d.ts +90 -0
  111. package/dist/types/domains/accounts/types.d.ts.map +1 -0
  112. package/dist/types/domains/embedded/index.d.ts +3 -0
  113. package/dist/types/domains/embedded/index.d.ts.map +1 -0
  114. package/dist/types/domains/embedded/service.d.ts +63 -0
  115. package/dist/types/domains/embedded/service.d.ts.map +1 -0
  116. package/dist/types/domains/embedded/types.d.ts +148 -0
  117. package/dist/types/domains/embedded/types.d.ts.map +1 -0
  118. package/dist/types/domains/multicurrency/index.d.ts +3 -0
  119. package/dist/types/domains/multicurrency/index.d.ts.map +1 -0
  120. package/dist/types/domains/multicurrency/service.d.ts +50 -0
  121. package/dist/types/domains/multicurrency/service.d.ts.map +1 -0
  122. package/dist/types/domains/multicurrency/types.d.ts +84 -0
  123. package/dist/types/domains/multicurrency/types.d.ts.map +1 -0
  124. package/dist/types/domains/payments/index.d.ts +3 -0
  125. package/dist/types/domains/payments/index.d.ts.map +1 -0
  126. package/dist/types/domains/payments/service.d.ts +65 -0
  127. package/dist/types/domains/payments/service.d.ts.map +1 -0
  128. package/dist/types/domains/payments/types.d.ts +107 -0
  129. package/dist/types/domains/payments/types.d.ts.map +1 -0
  130. package/dist/types/domains/webhooks/index.d.ts +3 -0
  131. package/dist/types/domains/webhooks/index.d.ts.map +1 -0
  132. package/dist/types/domains/webhooks/service.d.ts +66 -0
  133. package/dist/types/domains/webhooks/service.d.ts.map +1 -0
  134. package/dist/types/domains/webhooks/types.d.ts +215 -0
  135. package/dist/types/domains/webhooks/types.d.ts.map +1 -0
  136. package/dist/types/index.d.ts +54 -0
  137. package/dist/types/index.d.ts.map +1 -0
  138. package/dist/types/types/index.d.ts +77 -0
  139. package/dist/types/types/index.d.ts.map +1 -0
  140. package/dist/types/utils/index.d.ts +22 -0
  141. package/dist/types/utils/index.d.ts.map +1 -0
  142. package/package.json +96 -0
@@ -0,0 +1,187 @@
1
+ import { ClearBankError } from '../types/index.js';
2
+ import { generateUUID, signRequestBody } from './crypto.js';
3
+ import { withRetry } from './retry.js';
4
+ const MUTATING_METHODS = new Set(['POST', 'PUT', 'PATCH']);
5
+ /**
6
+ * Core HTTP client. All domain services use this.
7
+ */
8
+ export class HttpClient {
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ async get(path, params, opts) {
13
+ const url = buildUrl(this.config.baseUrl, path, params);
14
+ return this.request('GET', url, undefined, opts);
15
+ }
16
+ async post(path, body, opts) {
17
+ return this.request('POST', buildUrl(this.config.baseUrl, path), body, opts);
18
+ }
19
+ async put(path, body, opts) {
20
+ return this.request('PUT', buildUrl(this.config.baseUrl, path), body, opts);
21
+ }
22
+ async patch(path, body, opts) {
23
+ return this.request('PATCH', buildUrl(this.config.baseUrl, path), body, opts);
24
+ }
25
+ async delete(path, opts) {
26
+ return this.request('DELETE', buildUrl(this.config.baseUrl, path), undefined, opts);
27
+ }
28
+ static generateRequestId() {
29
+ return generateUUID();
30
+ }
31
+ // ---------------------------------------------------------------------------
32
+ // Private
33
+ // ---------------------------------------------------------------------------
34
+ async request(method, url, body, opts) {
35
+ const requestId = opts?.requestId ?? generateUUID();
36
+ const maxRetries = opts?.maxRetries ?? this.config.maxRetries;
37
+ const execute = () => this.executeOnce(method, url, body, requestId, opts?.headers);
38
+ return withRetry(execute, { ...this.config, maxRetries }, (e) => e instanceof ClearBankError);
39
+ }
40
+ async executeOnce(method, url, body, requestId, extraHeaders) {
41
+ const bodyStr = body !== undefined ? JSON.stringify(body) : null;
42
+ const headers = await this.buildHeaders(method, bodyStr, requestId, extraHeaders);
43
+ const startMs = Date.now();
44
+ let response;
45
+ try {
46
+ const controller = new AbortController();
47
+ const timeoutId = setTimeout(() => controller.abort(), this.config.timeoutMs);
48
+ try {
49
+ const init = {
50
+ method,
51
+ headers,
52
+ signal: controller.signal,
53
+ };
54
+ if (bodyStr !== null) {
55
+ init.body = bodyStr;
56
+ }
57
+ response = await fetch(url, init);
58
+ }
59
+ finally {
60
+ clearTimeout(timeoutId);
61
+ }
62
+ }
63
+ catch (err) {
64
+ const durationMs = Date.now() - startMs;
65
+ const error = new ClearBankError({
66
+ message: err instanceof Error ? err.message : 'Network request failed',
67
+ requestId,
68
+ details: { cause: String(err) },
69
+ });
70
+ this.emitTelemetry({ method, url, statusCode: null, durationMs, requestId, error });
71
+ throw error;
72
+ }
73
+ const durationMs = Date.now() - startMs;
74
+ const correlationId = response.headers.get('x-correlation-id');
75
+ this.emitTelemetry({
76
+ method,
77
+ url,
78
+ statusCode: response.status,
79
+ durationMs,
80
+ requestId,
81
+ correlationId,
82
+ error: null,
83
+ });
84
+ return this.handleResponse(response, requestId, correlationId);
85
+ }
86
+ async buildHeaders(method, bodyStr, requestId, extraHeaders) {
87
+ const headers = {
88
+ Authorization: `Bearer ${this.config.apiToken}`,
89
+ 'X-Request-Id': requestId,
90
+ Accept: 'application/json',
91
+ };
92
+ if (bodyStr !== null) {
93
+ headers['Content-Type'] = 'application/json';
94
+ }
95
+ if (MUTATING_METHODS.has(method) && bodyStr !== null && this.config.privateKey) {
96
+ headers['DigitalSignature'] = await signRequestBody(bodyStr, this.config.privateKey);
97
+ }
98
+ if (extraHeaders) {
99
+ Object.assign(headers, extraHeaders);
100
+ }
101
+ return headers;
102
+ }
103
+ async handleResponse(response, requestId, correlationId) {
104
+ if (response.status >= 200 && response.status < 300) {
105
+ const data = response.status === 204 ? undefined : (await parseJsonBody(response));
106
+ return { data, requestId, correlationId };
107
+ }
108
+ const rawBody = await parseJsonBody(response);
109
+ const retryAfter = parseRetryAfter(response.headers.get('retry-after'));
110
+ throw buildApiError(response.status, rawBody, requestId, correlationId, retryAfter);
111
+ }
112
+ emitTelemetry(event) {
113
+ if (this.config.telemetryHook) {
114
+ this.config.telemetryHook({
115
+ method: event.method,
116
+ url: event.url,
117
+ statusCode: event.statusCode,
118
+ durationMs: event.durationMs,
119
+ requestId: event.requestId,
120
+ correlationId: event.correlationId ?? null,
121
+ error: event.error,
122
+ });
123
+ }
124
+ }
125
+ }
126
+ // ---------------------------------------------------------------------------
127
+ // Helpers
128
+ // ---------------------------------------------------------------------------
129
+ function buildUrl(base, path, params) {
130
+ const url = base + path;
131
+ if (!params)
132
+ return url;
133
+ const qs = Object.entries(params)
134
+ .filter(([, v]) => v !== undefined && v !== null)
135
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`)
136
+ .join('&');
137
+ return qs ? `${url}?${qs}` : url;
138
+ }
139
+ async function parseJsonBody(response) {
140
+ const text = await response.text();
141
+ if (!text)
142
+ return null;
143
+ try {
144
+ return JSON.parse(text);
145
+ }
146
+ catch {
147
+ return text;
148
+ }
149
+ }
150
+ function parseRetryAfter(value) {
151
+ if (!value)
152
+ return null;
153
+ const n = parseInt(value, 10);
154
+ return isNaN(n) ? null : n;
155
+ }
156
+ function buildApiError(status, body, requestId, correlationId, retryAfterSeconds) {
157
+ let message = `HTTP ${status}`;
158
+ let code = null;
159
+ let details = null;
160
+ if (body && typeof body === 'object') {
161
+ const b = body;
162
+ if (typeof b['title'] === 'string' && typeof b['detail'] === 'string') {
163
+ message = `${b['title']}: ${b['detail']}`;
164
+ }
165
+ else if (typeof b['title'] === 'string') {
166
+ message = b['title'];
167
+ }
168
+ else if (typeof b['message'] === 'string') {
169
+ message = b['message'];
170
+ }
171
+ else if (typeof b['error'] === 'string') {
172
+ message = b['error'];
173
+ code = b['error'];
174
+ }
175
+ details = b;
176
+ }
177
+ return new ClearBankError({
178
+ message,
179
+ statusCode: status,
180
+ code,
181
+ correlationId,
182
+ requestId,
183
+ details,
184
+ retryAfterSeconds,
185
+ });
186
+ }
187
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../../src/core/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { HttpClient } from './http.js';
2
+ export { resolveConfig } from './config.js';
3
+ export { generateUUID, signRequestBody, verifySignature } from './crypto.js';
4
+ export { withRetry } from './retry.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Executes fn with exponential backoff retries on retryable ClearBank errors.
3
+ *
4
+ * ClearBank's idempotency contract:
5
+ * - 5XX retries MUST use the same X-Request-Id and body.
6
+ * - 429 (rate limited): back off and retry.
7
+ * - 409 (duplicate X-Request-Id): do NOT retry.
8
+ *
9
+ * Jitter strategy: full-jitter (random between 0 and min(cap, base * 2^attempt)).
10
+ */
11
+ export async function withRetry(fn, config, isClearBankError) {
12
+ let lastError;
13
+ for (let attempt = 0; attempt < config.maxRetries; attempt++) {
14
+ if (attempt > 0) {
15
+ const delay = computeDelay(attempt - 1, config.retryBaseDelayMs, config.retryMaxDelayMs);
16
+ await sleep(delay);
17
+ }
18
+ try {
19
+ return await fn();
20
+ }
21
+ catch (err) {
22
+ lastError = err;
23
+ if (!isClearBankError(err) || !err.isRetryable() || attempt === config.maxRetries - 1) {
24
+ throw err;
25
+ }
26
+ // Log retry attempt (SDK-level debug; consumers control observability via telemetryHook)
27
+ }
28
+ }
29
+ throw lastError;
30
+ }
31
+ /** Full-jitter exponential backoff: random(0, min(maxDelay, base * 2^attempt)) */
32
+ function computeDelay(attempt, baseMs, maxMs) {
33
+ const exponential = Math.min(maxMs, baseMs * Math.pow(2, attempt));
34
+ return Math.floor(Math.random() * (exponential + 1));
35
+ }
36
+ function sleep(ms) {
37
+ return new Promise((resolve) => setTimeout(resolve, ms));
38
+ }
39
+ //# sourceMappingURL=retry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/core/retry.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,MAAmF,EACnF,gBAAqD;IAErD,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QAC7D,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YACzF,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAChB,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,OAAO,KAAK,MAAM,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;gBACtF,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,yFAAyF;QAC3F,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC;AAClB,CAAC;AAED,kFAAkF;AAClF,SAAS,YAAY,CAAC,OAAe,EAAE,MAAc,EAAE,KAAa;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { AccountsService } from './service.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/domains/accounts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,212 @@
1
+ /**
2
+ * GBP Account Management service.
3
+ *
4
+ * Covers real accounts, virtual accounts, transactions, Bacs DDIs, and camt.053 reporting.
5
+ */
6
+ export class AccountsService {
7
+ constructor(http) {
8
+ this.http = http;
9
+ }
10
+ // ---------------------------------------------------------------------------
11
+ // Real Accounts
12
+ // ---------------------------------------------------------------------------
13
+ /** Returns all real GBP accounts for your institution. */
14
+ async list(params, opts) {
15
+ const res = await this.http.get('/v3/Accounts', buildPagination(params), opts);
16
+ return buildPage(res.data?.accounts, res.data?.totalCount, params);
17
+ }
18
+ /** Returns a single real GBP account by ID. */
19
+ async get(accountId, opts) {
20
+ const res = await this.http.get(`/v3/Accounts/${accountId}`, undefined, opts);
21
+ return res.data;
22
+ }
23
+ /** Creates a new real GBP account. */
24
+ async create(params, opts) {
25
+ const body = {
26
+ accountName: params.accountName,
27
+ accountType: params.accountType,
28
+ ...(params.owner ? { owner: params.owner } : {}),
29
+ ...(params.sortCode ? { sortCode: params.sortCode } : {}),
30
+ };
31
+ const res = await this.http.post('/v3/Accounts', body, opts);
32
+ return res.data;
33
+ }
34
+ /** Amends a real GBP account (rename, toggle CoP). */
35
+ async update(accountId, params, opts) {
36
+ const body = omitUndefined({
37
+ accountName: params.accountName,
38
+ copEnabled: params.copEnabled,
39
+ });
40
+ await this.http.patch(`/v1/Accounts/${accountId}`, body, opts);
41
+ }
42
+ // ---------------------------------------------------------------------------
43
+ // Virtual Accounts
44
+ // ---------------------------------------------------------------------------
45
+ /** Returns all virtual accounts under a real account. */
46
+ async listVirtual(accountId, params, opts) {
47
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Virtual`, buildPagination(params), opts);
48
+ return buildPage(res.data?.virtualAccounts, res.data?.totalCount, params);
49
+ }
50
+ /** Returns a specific virtual account. */
51
+ async getVirtual(accountId, virtualAccountId, opts) {
52
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Virtual/${virtualAccountId}`, undefined, opts);
53
+ return res.data;
54
+ }
55
+ /** Creates a virtual account under a real account. */
56
+ async createVirtual(accountId, params, opts) {
57
+ const body = omitUndefined({ accountName: params.accountName, owner: params.owner });
58
+ const res = await this.http.post(`/v2/Accounts/${accountId}/Virtual`, body, opts);
59
+ return res.data;
60
+ }
61
+ /** Amends a virtual account. */
62
+ async updateVirtual(accountId, virtualAccountId, params, opts) {
63
+ const body = omitUndefined({ accountName: params.accountName, copEnabled: params.copEnabled });
64
+ await this.http.patch(`/v1/Accounts/${accountId}/Virtual/${virtualAccountId}`, body, opts);
65
+ }
66
+ // ---------------------------------------------------------------------------
67
+ // Transactions
68
+ // ---------------------------------------------------------------------------
69
+ /** Returns all transactions across the institution. */
70
+ async listAllTransactions(params, opts) {
71
+ const res = await this.http.get('/v2/Transactions', buildDateRange(params), opts);
72
+ return buildPage(res.data?.transactions, res.data?.totalCount, params);
73
+ }
74
+ /** Returns transactions for a specific real account. */
75
+ async listTransactions(accountId, params, opts) {
76
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Transactions`, buildDateRange(params), opts);
77
+ return buildPage(res.data?.transactions, res.data?.totalCount, params);
78
+ }
79
+ /** Returns a specific transaction on a real account. */
80
+ async getTransaction(accountId, transactionId, opts) {
81
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Transactions/${transactionId}`, undefined, opts);
82
+ return res.data;
83
+ }
84
+ /** Returns transactions for a virtual account. */
85
+ async listVirtualTransactions(accountId, virtualAccountId, params, opts) {
86
+ const res = await this.http.get(`/v1/Accounts/${accountId}/Virtual/${virtualAccountId}/Transactions`, buildDateRange(params), opts);
87
+ return buildPage(res.data?.transactions, res.data?.totalCount, params);
88
+ }
89
+ // ---------------------------------------------------------------------------
90
+ // Bacs Payment Data
91
+ // ---------------------------------------------------------------------------
92
+ /** Returns collected Direct Debit payments for a mandate. */
93
+ async listBacsCollections(accountId, mandateId, params, opts) {
94
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Mandates/${mandateId}/Collections`, buildPagination(params), opts);
95
+ return buildPage(res.data?.transactions, res.data?.totalCount, params);
96
+ }
97
+ /** Returns returned Bacs payments for a mandate. */
98
+ async listBacsReturns(accountId, mandateId, params, opts) {
99
+ const res = await this.http.get(`/v1/Accounts/${accountId}/Mandates/${mandateId}/Returns`, buildPagination(params), opts);
100
+ return buildPage(res.data?.transactions, res.data?.totalCount, params);
101
+ }
102
+ // ---------------------------------------------------------------------------
103
+ // Direct Debit Instructions (Mandates)
104
+ // ---------------------------------------------------------------------------
105
+ /** Creates a Bacs Direct Debit Instruction on a real account. */
106
+ async createDDI(accountId, params, opts) {
107
+ const body = buildDDIBody(params);
108
+ const res = await this.http.post(`/v1/Accounts/${accountId}/Mandates`, body, opts);
109
+ return res.data;
110
+ }
111
+ /** Returns all DDIs for a real account. */
112
+ async listDDIs(accountId, params, opts) {
113
+ const res = await this.http.get(`/v2/Accounts/${accountId}/Mandates`, buildPagination(params), opts);
114
+ return buildPage(res.data?.mandates, res.data?.totalCount, params);
115
+ }
116
+ /** Returns a specific DDI. */
117
+ async getDDI(accountId, mandateId, opts) {
118
+ const res = await this.http.get(`/v1/Accounts/${accountId}/Mandates/${mandateId}`, undefined, opts);
119
+ return res.data;
120
+ }
121
+ /** Cancels a DDI on a real account. */
122
+ async cancelDDI(accountId, mandateId, opts) {
123
+ await this.http.delete(`/v1/Accounts/${accountId}/Mandates/${mandateId}`, opts);
124
+ }
125
+ /** Creates a DDI on a virtual account. */
126
+ async createVirtualDDI(accountId, virtualAccountId, params, opts) {
127
+ const body = buildDDIBody(params);
128
+ const res = await this.http.post(`/v1/Accounts/${accountId}/Virtual/${virtualAccountId}/Mandates`, body, opts);
129
+ return res.data;
130
+ }
131
+ /** Returns all DDIs for a virtual account. */
132
+ async listVirtualDDIs(accountId, virtualAccountId, params, opts) {
133
+ const res = await this.http.get(`/v1/Accounts/${accountId}/Virtual/${virtualAccountId}/Mandates`, buildPagination(params), opts);
134
+ return buildPage(res.data?.mandates, res.data?.totalCount, params);
135
+ }
136
+ /** Cancels a DDI on a virtual account. */
137
+ async cancelVirtualDDI(accountId, virtualAccountId, mandateId, opts) {
138
+ await this.http.delete(`/v1/Accounts/${accountId}/Virtual/${virtualAccountId}/Mandates/${mandateId}`, opts);
139
+ }
140
+ // ---------------------------------------------------------------------------
141
+ // camt.053 Statements
142
+ // ---------------------------------------------------------------------------
143
+ /** Requests generation of a camt.053 statement. Returns the message ID. */
144
+ async requestStatement(params, opts) {
145
+ const body = {
146
+ accountId: params.accountId,
147
+ startDate: params.startDate,
148
+ endDate: params.endDate,
149
+ currency: params.currency ?? 'GBP',
150
+ includeVirtualAccounts: params.includeVirtualAccounts ?? false,
151
+ };
152
+ const res = await this.http.post('/v1/statementrequests', body, opts);
153
+ return res.data.messageId;
154
+ }
155
+ /** Downloads a single page of a generated statement. */
156
+ async getStatementPage(messageId, pageNumber, opts) {
157
+ const res = await this.http.get(`/v1/statementrequests/${messageId}/pages/${pageNumber}`, undefined, opts);
158
+ return res.data;
159
+ }
160
+ /** Fetches all pages of a statement sequentially. */
161
+ async getAllStatementPages(messageId, opts) {
162
+ const first = await this.getStatementPage(messageId, 1, opts);
163
+ const totalPages = typeof first['totalPages'] === 'number' ? first['totalPages'] : 1;
164
+ const pages = [first];
165
+ for (let page = 2; page <= totalPages; page++) {
166
+ pages.push(await this.getStatementPage(messageId, page, opts));
167
+ }
168
+ return pages;
169
+ }
170
+ }
171
+ // ---------------------------------------------------------------------------
172
+ // Helpers
173
+ // ---------------------------------------------------------------------------
174
+ function buildPagination(p) {
175
+ if (!p)
176
+ return undefined;
177
+ return omitUndefined({ pageNumber: p.pageNumber, pageSize: p.pageSize });
178
+ }
179
+ function buildDateRange(p) {
180
+ if (!p)
181
+ return undefined;
182
+ return omitUndefined({
183
+ pageNumber: p.pageNumber,
184
+ pageSize: p.pageSize,
185
+ startDate: p.startDate,
186
+ endDate: p.endDate,
187
+ });
188
+ }
189
+ function buildPage(items, totalCount, params) {
190
+ return {
191
+ data: items ?? [],
192
+ totalCount: totalCount ?? items?.length ?? 0,
193
+ pageNumber: params?.pageNumber ?? 1,
194
+ pageSize: params?.pageSize ?? 50,
195
+ };
196
+ }
197
+ function buildDDIBody(p) {
198
+ return {
199
+ serviceUserNumber: p.serviceUserNumber,
200
+ reference: p.reference,
201
+ payerDetails: {
202
+ name: p.payerName,
203
+ sortCode: p.payerSortCode,
204
+ accountNumber: p.payerAccountNumber,
205
+ accountType: p.payerAccountType ?? 'Personal',
206
+ },
207
+ };
208
+ }
209
+ function omitUndefined(obj) {
210
+ return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
211
+ }
212
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/domains/accounts/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/domains/accounts/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export { EmbeddedBankingService } from './service.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/domains/embedded/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}