@firela/api-types 0.0.0-canary.a7bda42 → 0.0.0-canary.a90bdd3

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 (47) hide show
  1. package/dist/index.d.mts +10166 -0
  2. package/dist/index.d.ts +10166 -2
  3. package/dist/index.js +1298 -3
  4. package/dist/index.mjs +1265 -0
  5. package/package.json +25 -12
  6. package/src/generated/core/ApiError.ts +25 -0
  7. package/src/generated/core/ApiRequestOptions.ts +20 -0
  8. package/src/generated/core/ApiResult.ts +7 -0
  9. package/src/generated/core/CancelablePromise.ts +126 -0
  10. package/src/generated/core/OpenAPI.ts +56 -0
  11. package/src/generated/core/request.ts +391 -0
  12. package/{dist/generated/index.d.ts → src/generated/index.ts} +1 -1
  13. package/src/generated/schemas.gen.ts +9423 -0
  14. package/src/generated/services.gen.ts +4411 -0
  15. package/src/generated/types.gen.ts +31791 -0
  16. package/src/index.ts +12 -0
  17. package/README.md +0 -40
  18. package/dist/generated/core/ApiError.d.ts +0 -11
  19. package/dist/generated/core/ApiError.d.ts.map +0 -1
  20. package/dist/generated/core/ApiError.js +0 -11
  21. package/dist/generated/core/ApiRequestOptions.d.ts +0 -14
  22. package/dist/generated/core/ApiRequestOptions.d.ts.map +0 -1
  23. package/dist/generated/core/ApiRequestOptions.js +0 -1
  24. package/dist/generated/core/ApiResult.d.ts +0 -8
  25. package/dist/generated/core/ApiResult.d.ts.map +0 -1
  26. package/dist/generated/core/ApiResult.js +0 -1
  27. package/dist/generated/core/CancelablePromise.d.ts +0 -27
  28. package/dist/generated/core/CancelablePromise.d.ts.map +0 -1
  29. package/dist/generated/core/CancelablePromise.js +0 -88
  30. package/dist/generated/core/OpenAPI.d.ts +0 -28
  31. package/dist/generated/core/OpenAPI.d.ts.map +0 -1
  32. package/dist/generated/core/OpenAPI.js +0 -29
  33. package/dist/generated/core/request.d.ts +0 -30
  34. package/dist/generated/core/request.d.ts.map +0 -1
  35. package/dist/generated/core/request.js +0 -297
  36. package/dist/generated/index.d.ts.map +0 -1
  37. package/dist/generated/index.js +0 -7
  38. package/dist/generated/schemas.gen.d.ts +0 -771
  39. package/dist/generated/schemas.gen.d.ts.map +0 -1
  40. package/dist/generated/schemas.gen.js +0 -771
  41. package/dist/generated/services.gen.d.ts +0 -313
  42. package/dist/generated/services.gen.d.ts.map +0 -1
  43. package/dist/generated/services.gen.js +0 -705
  44. package/dist/generated/types.gen.d.ts +0 -1159
  45. package/dist/generated/types.gen.d.ts.map +0 -1
  46. package/dist/generated/types.gen.js +0 -2
  47. package/dist/index.d.ts.map +0 -1
package/dist/index.js CHANGED
@@ -1,3 +1,1298 @@
1
- // Entry point for @firela/api-types
2
- // Generated types will be exported from ./generated
3
- export * from './generated';
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ BeanAccountsService: () => BeanAccountsService,
24
+ BeanBalancesService: () => BeanBalancesService,
25
+ BeanCommoditiesService: () => BeanCommoditiesService,
26
+ BeanTransactionsService: () => BeanTransactionsService,
27
+ HealthService: () => HealthService,
28
+ OpenAPI: () => OpenAPI,
29
+ ProviderSyncService: () => ProviderSyncService
30
+ });
31
+ module.exports = __toCommonJS(index_exports);
32
+
33
+ // src/generated/core/OpenAPI.ts
34
+ var Interceptors = class {
35
+ constructor() {
36
+ this._fns = [];
37
+ }
38
+ eject(fn) {
39
+ const index = this._fns.indexOf(fn);
40
+ if (index !== -1) {
41
+ this._fns = [...this._fns.slice(0, index), ...this._fns.slice(index + 1)];
42
+ }
43
+ }
44
+ use(fn) {
45
+ this._fns = [...this._fns, fn];
46
+ }
47
+ };
48
+ var OpenAPI = {
49
+ BASE: "",
50
+ CREDENTIALS: "include",
51
+ ENCODE_PATH: void 0,
52
+ HEADERS: void 0,
53
+ PASSWORD: void 0,
54
+ TOKEN: void 0,
55
+ USERNAME: void 0,
56
+ VERSION: "dev",
57
+ WITH_CREDENTIALS: false,
58
+ interceptors: {
59
+ request: new Interceptors(),
60
+ response: new Interceptors()
61
+ }
62
+ };
63
+
64
+ // src/generated/core/ApiError.ts
65
+ var ApiError = class extends Error {
66
+ constructor(request2, response, message) {
67
+ super(message);
68
+ this.name = "ApiError";
69
+ this.url = response.url;
70
+ this.status = response.status;
71
+ this.statusText = response.statusText;
72
+ this.body = response.body;
73
+ this.request = request2;
74
+ }
75
+ };
76
+
77
+ // src/generated/core/CancelablePromise.ts
78
+ var CancelError = class extends Error {
79
+ constructor(message) {
80
+ super(message);
81
+ this.name = "CancelError";
82
+ }
83
+ get isCancelled() {
84
+ return true;
85
+ }
86
+ };
87
+ var CancelablePromise = class {
88
+ constructor(executor) {
89
+ this._isResolved = false;
90
+ this._isRejected = false;
91
+ this._isCancelled = false;
92
+ this.cancelHandlers = [];
93
+ this.promise = new Promise((resolve2, reject) => {
94
+ this._resolve = resolve2;
95
+ this._reject = reject;
96
+ const onResolve = (value) => {
97
+ if (this._isResolved || this._isRejected || this._isCancelled) {
98
+ return;
99
+ }
100
+ this._isResolved = true;
101
+ if (this._resolve) this._resolve(value);
102
+ };
103
+ const onReject = (reason) => {
104
+ if (this._isResolved || this._isRejected || this._isCancelled) {
105
+ return;
106
+ }
107
+ this._isRejected = true;
108
+ if (this._reject) this._reject(reason);
109
+ };
110
+ const onCancel = (cancelHandler) => {
111
+ if (this._isResolved || this._isRejected || this._isCancelled) {
112
+ return;
113
+ }
114
+ this.cancelHandlers.push(cancelHandler);
115
+ };
116
+ Object.defineProperty(onCancel, "isResolved", {
117
+ get: () => this._isResolved
118
+ });
119
+ Object.defineProperty(onCancel, "isRejected", {
120
+ get: () => this._isRejected
121
+ });
122
+ Object.defineProperty(onCancel, "isCancelled", {
123
+ get: () => this._isCancelled
124
+ });
125
+ return executor(onResolve, onReject, onCancel);
126
+ });
127
+ }
128
+ get [Symbol.toStringTag]() {
129
+ return "Cancellable Promise";
130
+ }
131
+ then(onFulfilled, onRejected) {
132
+ return this.promise.then(onFulfilled, onRejected);
133
+ }
134
+ catch(onRejected) {
135
+ return this.promise.catch(onRejected);
136
+ }
137
+ finally(onFinally) {
138
+ return this.promise.finally(onFinally);
139
+ }
140
+ cancel() {
141
+ if (this._isResolved || this._isRejected || this._isCancelled) {
142
+ return;
143
+ }
144
+ this._isCancelled = true;
145
+ if (this.cancelHandlers.length) {
146
+ try {
147
+ for (const cancelHandler of this.cancelHandlers) {
148
+ cancelHandler();
149
+ }
150
+ } catch (error) {
151
+ console.warn("Cancellation threw an error", error);
152
+ return;
153
+ }
154
+ }
155
+ this.cancelHandlers.length = 0;
156
+ if (this._reject) this._reject(new CancelError("Request aborted"));
157
+ }
158
+ get isCancelled() {
159
+ return this._isCancelled;
160
+ }
161
+ };
162
+
163
+ // src/generated/core/request.ts
164
+ var isString = (value) => {
165
+ return typeof value === "string";
166
+ };
167
+ var isStringWithValue = (value) => {
168
+ return isString(value) && value !== "";
169
+ };
170
+ var isBlob = (value) => {
171
+ return value instanceof Blob;
172
+ };
173
+ var isFormData = (value) => {
174
+ return value instanceof FormData;
175
+ };
176
+ var base64 = (str) => {
177
+ try {
178
+ return btoa(str);
179
+ } catch (err) {
180
+ return Buffer.from(str).toString("base64");
181
+ }
182
+ };
183
+ var getQueryString = (params) => {
184
+ const qs = [];
185
+ const append = (key, value) => {
186
+ qs.push(`${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`);
187
+ };
188
+ const encodePair = (key, value) => {
189
+ if (value === void 0 || value === null) {
190
+ return;
191
+ }
192
+ if (value instanceof Date) {
193
+ append(key, value.toISOString());
194
+ } else if (Array.isArray(value)) {
195
+ value.forEach((v) => encodePair(key, v));
196
+ } else if (typeof value === "object") {
197
+ Object.entries(value).forEach(([k, v]) => encodePair(`${key}[${k}]`, v));
198
+ } else {
199
+ append(key, value);
200
+ }
201
+ };
202
+ Object.entries(params).forEach(([key, value]) => encodePair(key, value));
203
+ return qs.length ? `?${qs.join("&")}` : "";
204
+ };
205
+ var getUrl = (config, options) => {
206
+ const encoder = config.ENCODE_PATH || encodeURI;
207
+ const path = options.url.replace("{api-version}", config.VERSION).replace(/{(.*?)}/g, (substring, group) => {
208
+ if (options.path?.hasOwnProperty(group)) {
209
+ return encoder(String(options.path[group]));
210
+ }
211
+ return substring;
212
+ });
213
+ const url = config.BASE + path;
214
+ return options.query ? url + getQueryString(options.query) : url;
215
+ };
216
+ var getFormData = (options) => {
217
+ if (options.formData) {
218
+ const formData = new FormData();
219
+ const process = (key, value) => {
220
+ if (isString(value) || isBlob(value)) {
221
+ formData.append(key, value);
222
+ } else {
223
+ formData.append(key, JSON.stringify(value));
224
+ }
225
+ };
226
+ Object.entries(options.formData).filter(([, value]) => value !== void 0 && value !== null).forEach(([key, value]) => {
227
+ if (Array.isArray(value)) {
228
+ value.forEach((v) => process(key, v));
229
+ } else {
230
+ process(key, value);
231
+ }
232
+ });
233
+ return formData;
234
+ }
235
+ return void 0;
236
+ };
237
+ var resolve = async (options, resolver) => {
238
+ if (typeof resolver === "function") {
239
+ return resolver(options);
240
+ }
241
+ return resolver;
242
+ };
243
+ var getHeaders = async (config, options) => {
244
+ const [token, username, password, additionalHeaders] = await Promise.all([
245
+ resolve(options, config.TOKEN),
246
+ resolve(options, config.USERNAME),
247
+ resolve(options, config.PASSWORD),
248
+ resolve(options, config.HEADERS)
249
+ ]);
250
+ const headers = Object.entries({
251
+ Accept: "application/json",
252
+ ...additionalHeaders,
253
+ ...options.headers
254
+ }).filter(([, value]) => value !== void 0 && value !== null).reduce(
255
+ (headers2, [key, value]) => ({
256
+ ...headers2,
257
+ [key]: String(value)
258
+ }),
259
+ {}
260
+ );
261
+ if (isStringWithValue(token)) {
262
+ headers["Authorization"] = `Bearer ${token}`;
263
+ }
264
+ if (isStringWithValue(username) && isStringWithValue(password)) {
265
+ const credentials = base64(`${username}:${password}`);
266
+ headers["Authorization"] = `Basic ${credentials}`;
267
+ }
268
+ if (options.body !== void 0) {
269
+ if (options.mediaType) {
270
+ headers["Content-Type"] = options.mediaType;
271
+ } else if (isBlob(options.body)) {
272
+ headers["Content-Type"] = options.body.type || "application/octet-stream";
273
+ } else if (isString(options.body)) {
274
+ headers["Content-Type"] = "text/plain";
275
+ } else if (!isFormData(options.body)) {
276
+ headers["Content-Type"] = "application/json";
277
+ }
278
+ }
279
+ return new Headers(headers);
280
+ };
281
+ var getRequestBody = (options) => {
282
+ if (options.body !== void 0) {
283
+ if (options.mediaType?.includes("application/json") || options.mediaType?.includes("+json")) {
284
+ return JSON.stringify(options.body);
285
+ } else if (isString(options.body) || isBlob(options.body) || isFormData(options.body)) {
286
+ return options.body;
287
+ } else {
288
+ return JSON.stringify(options.body);
289
+ }
290
+ }
291
+ return void 0;
292
+ };
293
+ var sendRequest = async (config, options, url, body, formData, headers, onCancel) => {
294
+ const controller = new AbortController();
295
+ let request2 = {
296
+ headers,
297
+ body: body ?? formData,
298
+ method: options.method,
299
+ signal: controller.signal
300
+ };
301
+ if (config.WITH_CREDENTIALS) {
302
+ request2.credentials = config.CREDENTIALS;
303
+ }
304
+ for (const fn of config.interceptors.request._fns) {
305
+ request2 = await fn(request2);
306
+ }
307
+ onCancel(() => controller.abort());
308
+ return await fetch(url, request2);
309
+ };
310
+ var getResponseHeader = (response, responseHeader) => {
311
+ if (responseHeader) {
312
+ const content = response.headers.get(responseHeader);
313
+ if (isString(content)) {
314
+ return content;
315
+ }
316
+ }
317
+ return void 0;
318
+ };
319
+ var getResponseBody = async (response) => {
320
+ if (response.status !== 204) {
321
+ try {
322
+ const contentType = response.headers.get("Content-Type");
323
+ if (contentType) {
324
+ const binaryTypes = [
325
+ "application/octet-stream",
326
+ "application/pdf",
327
+ "application/zip",
328
+ "audio/",
329
+ "image/",
330
+ "video/"
331
+ ];
332
+ if (contentType.includes("application/json") || contentType.includes("+json")) {
333
+ return await response.json();
334
+ } else if (binaryTypes.some((type) => contentType.includes(type))) {
335
+ return await response.blob();
336
+ } else if (contentType.includes("multipart/form-data")) {
337
+ return await response.formData();
338
+ } else if (contentType.includes("text/")) {
339
+ return await response.text();
340
+ }
341
+ }
342
+ } catch (error) {
343
+ console.error(error);
344
+ }
345
+ }
346
+ return void 0;
347
+ };
348
+ var catchErrorCodes = (options, result) => {
349
+ const errors = {
350
+ 400: "Bad Request",
351
+ 401: "Unauthorized",
352
+ 402: "Payment Required",
353
+ 403: "Forbidden",
354
+ 404: "Not Found",
355
+ 405: "Method Not Allowed",
356
+ 406: "Not Acceptable",
357
+ 407: "Proxy Authentication Required",
358
+ 408: "Request Timeout",
359
+ 409: "Conflict",
360
+ 410: "Gone",
361
+ 411: "Length Required",
362
+ 412: "Precondition Failed",
363
+ 413: "Payload Too Large",
364
+ 414: "URI Too Long",
365
+ 415: "Unsupported Media Type",
366
+ 416: "Range Not Satisfiable",
367
+ 417: "Expectation Failed",
368
+ 418: "Im a teapot",
369
+ 421: "Misdirected Request",
370
+ 422: "Unprocessable Content",
371
+ 423: "Locked",
372
+ 424: "Failed Dependency",
373
+ 425: "Too Early",
374
+ 426: "Upgrade Required",
375
+ 428: "Precondition Required",
376
+ 429: "Too Many Requests",
377
+ 431: "Request Header Fields Too Large",
378
+ 451: "Unavailable For Legal Reasons",
379
+ 500: "Internal Server Error",
380
+ 501: "Not Implemented",
381
+ 502: "Bad Gateway",
382
+ 503: "Service Unavailable",
383
+ 504: "Gateway Timeout",
384
+ 505: "HTTP Version Not Supported",
385
+ 506: "Variant Also Negotiates",
386
+ 507: "Insufficient Storage",
387
+ 508: "Loop Detected",
388
+ 510: "Not Extended",
389
+ 511: "Network Authentication Required",
390
+ ...options.errors
391
+ };
392
+ const error = errors[result.status];
393
+ if (error) {
394
+ throw new ApiError(options, result, error);
395
+ }
396
+ if (!result.ok) {
397
+ const errorStatus = result.status ?? "unknown";
398
+ const errorStatusText = result.statusText ?? "unknown";
399
+ const errorBody = (() => {
400
+ try {
401
+ return JSON.stringify(result.body, null, 2);
402
+ } catch (e) {
403
+ return void 0;
404
+ }
405
+ })();
406
+ throw new ApiError(
407
+ options,
408
+ result,
409
+ `Generic Error: status: ${errorStatus}; status text: ${errorStatusText}; body: ${errorBody}`
410
+ );
411
+ }
412
+ };
413
+ var request = (config, options) => {
414
+ return new CancelablePromise(async (resolve2, reject, onCancel) => {
415
+ try {
416
+ const url = getUrl(config, options);
417
+ const formData = getFormData(options);
418
+ const body = getRequestBody(options);
419
+ const headers = await getHeaders(config, options);
420
+ if (!onCancel.isCancelled) {
421
+ let response = await sendRequest(
422
+ config,
423
+ options,
424
+ url,
425
+ body,
426
+ formData,
427
+ headers,
428
+ onCancel
429
+ );
430
+ for (const fn of config.interceptors.response._fns) {
431
+ response = await fn(response);
432
+ }
433
+ const responseBody = await getResponseBody(response);
434
+ const responseHeader = getResponseHeader(
435
+ response,
436
+ options.responseHeader
437
+ );
438
+ const result = {
439
+ url,
440
+ ok: response.ok,
441
+ status: response.status,
442
+ statusText: response.statusText,
443
+ body: responseHeader ?? responseBody
444
+ };
445
+ catchErrorCodes(options, result);
446
+ resolve2(result.body);
447
+ }
448
+ } catch (error) {
449
+ reject(error);
450
+ }
451
+ });
452
+ };
453
+
454
+ // src/generated/services.gen.ts
455
+ var BeanAccountsService = class {
456
+ /**
457
+ * Create a new account
458
+ * Creates a new account (Beancount Open directive)
459
+ * @param data The data for the request.
460
+ * @param data.region Region code for tenant context
461
+ * @param data.requestBody
462
+ * @returns AccountResponseDto Account created successfully
463
+ * @throws ApiError
464
+ */
465
+ static accountControllerCreate(data) {
466
+ return request(OpenAPI, {
467
+ method: "POST",
468
+ url: "/api/v1/{region}/bean/accounts",
469
+ path: {
470
+ region: data.region
471
+ },
472
+ body: data.requestBody,
473
+ mediaType: "application/json",
474
+ errors: {
475
+ 409: "Account already exists"
476
+ }
477
+ });
478
+ }
479
+ /**
480
+ * List accounts
481
+ * Returns all accounts with optional filtering
482
+ * @param data The data for the request.
483
+ * @param data.region Region code for tenant context
484
+ * @param data.type Filter by account type
485
+ * @param data.status Filter by status
486
+ * @param data.isCustom Filter by custom (user-created) accounts only
487
+ * @param data.search Search term matched against account path and user-set display name (case-insensitive)
488
+ * @param data.limit Maximum number of results
489
+ * @param data.offset Number of results to skip
490
+ * @returns AccountListResponseDto Accounts retrieved successfully
491
+ * @throws ApiError
492
+ */
493
+ static accountControllerFindAll(data) {
494
+ return request(OpenAPI, {
495
+ method: "GET",
496
+ url: "/api/v1/{region}/bean/accounts",
497
+ path: {
498
+ region: data.region
499
+ },
500
+ query: {
501
+ type: data.type,
502
+ status: data.status,
503
+ isCustom: data.isCustom,
504
+ search: data.search,
505
+ limit: data.limit,
506
+ offset: data.offset
507
+ }
508
+ });
509
+ }
510
+ /**
511
+ * Get account by ID
512
+ * Returns a specific account
513
+ * @param data The data for the request.
514
+ * @param data.id Account UUID
515
+ * @param data.region Region code for tenant context
516
+ * @returns AccountResponseDto Account retrieved successfully
517
+ * @throws ApiError
518
+ */
519
+ static accountControllerFindOne(data) {
520
+ return request(OpenAPI, {
521
+ method: "GET",
522
+ url: "/api/v1/{region}/bean/accounts/{id}",
523
+ path: {
524
+ id: data.id,
525
+ region: data.region
526
+ },
527
+ errors: {
528
+ 404: "Account not found"
529
+ }
530
+ });
531
+ }
532
+ /**
533
+ * Update account
534
+ * Updates account metadata (path cannot be changed)
535
+ * @param data The data for the request.
536
+ * @param data.id Account UUID
537
+ * @param data.region Region code for tenant context
538
+ * @param data.requestBody
539
+ * @returns AccountResponseDto Account updated successfully
540
+ * @throws ApiError
541
+ */
542
+ static accountControllerUpdate(data) {
543
+ return request(OpenAPI, {
544
+ method: "PUT",
545
+ url: "/api/v1/{region}/bean/accounts/{id}",
546
+ path: {
547
+ id: data.id,
548
+ region: data.region
549
+ },
550
+ body: data.requestBody,
551
+ mediaType: "application/json",
552
+ errors: {
553
+ 404: "Account not found"
554
+ }
555
+ });
556
+ }
557
+ /**
558
+ * Delete account
559
+ * Deletes an account (only if no active transactions; voided/superseded residual postings are cleaned up)
560
+ * @param data The data for the request.
561
+ * @param data.id Account UUID
562
+ * @param data.region Region code for tenant context
563
+ * @returns void Account deleted successfully
564
+ * @throws ApiError
565
+ */
566
+ static accountControllerDelete(data) {
567
+ return request(OpenAPI, {
568
+ method: "DELETE",
569
+ url: "/api/v1/{region}/bean/accounts/{id}",
570
+ path: {
571
+ id: data.id,
572
+ region: data.region
573
+ },
574
+ errors: {
575
+ 404: "Account not found",
576
+ 409: "Account has active transactions and cannot be deleted"
577
+ }
578
+ });
579
+ }
580
+ /**
581
+ * Close account
582
+ * Closes an account (Beancount Close directive)
583
+ * @param data The data for the request.
584
+ * @param data.id Account UUID
585
+ * @param data.region Region code for tenant context
586
+ * @param data.requestBody
587
+ * @returns AccountResponseDto Account closed successfully
588
+ * @throws ApiError
589
+ */
590
+ static accountControllerClose(data) {
591
+ return request(OpenAPI, {
592
+ method: "POST",
593
+ url: "/api/v1/{region}/bean/accounts/{id}/close",
594
+ path: {
595
+ id: data.id,
596
+ region: data.region
597
+ },
598
+ body: data.requestBody,
599
+ mediaType: "application/json",
600
+ errors: {
601
+ 400: "Account is already closed",
602
+ 404: "Account not found"
603
+ }
604
+ });
605
+ }
606
+ /**
607
+ * Reopen account
608
+ * Reopens a previously closed account
609
+ * @param data The data for the request.
610
+ * @param data.id Account UUID
611
+ * @param data.region Region code for tenant context
612
+ * @param data.requestBody
613
+ * @returns AccountResponseDto Account reopened successfully
614
+ * @throws ApiError
615
+ */
616
+ static accountControllerReopen(data) {
617
+ return request(OpenAPI, {
618
+ method: "POST",
619
+ url: "/api/v1/{region}/bean/accounts/{id}/reopen",
620
+ path: {
621
+ id: data.id,
622
+ region: data.region
623
+ },
624
+ body: data.requestBody,
625
+ mediaType: "application/json",
626
+ errors: {
627
+ 400: "Account is not closed",
628
+ 404: "Account not found"
629
+ }
630
+ });
631
+ }
632
+ /**
633
+ * Post an opening-balance transaction
634
+ * Posts a double-entry opening-balance transaction against Equity:Opening-Balances for an existing Assets/Liabilities account. At most one active opening balance per account.
635
+ * @param data The data for the request.
636
+ * @param data.id Account UUID
637
+ * @param data.region Region code for tenant context
638
+ * @param data.requestBody
639
+ * @returns OpeningBalanceResultDto Opening-balance transaction created
640
+ * @throws ApiError
641
+ */
642
+ static accountControllerAddOpeningBalance(data) {
643
+ return request(OpenAPI, {
644
+ method: "POST",
645
+ url: "/api/v1/{region}/bean/accounts/{id}/opening-balance",
646
+ path: {
647
+ id: data.id,
648
+ region: data.region
649
+ },
650
+ body: data.requestBody,
651
+ mediaType: "application/json",
652
+ errors: {
653
+ 404: "Account not found",
654
+ 409: "An opening balance already exists for this account"
655
+ }
656
+ });
657
+ }
658
+ };
659
+ var BeanTransactionsService = class {
660
+ /**
661
+ * @deprecated
662
+ * Create transaction (DEPRECATED)
663
+ * DEPRECATED: Use POST /:region/bean/import/provider/:name/sync instead. This endpoint skips dedup, rule matching, and review branching.
664
+ * @param data The data for the request.
665
+ * @param data.region Region code for tenant context
666
+ * @param data.requestBody Transaction data with postings
667
+ * @returns TransactionResponseDto Transaction created successfully
668
+ * @throws ApiError
669
+ */
670
+ static transactionControllerCreate(data) {
671
+ return request(OpenAPI, {
672
+ method: "POST",
673
+ url: "/api/v1/{region}/bean/transactions",
674
+ path: {
675
+ region: data.region
676
+ },
677
+ body: data.requestBody,
678
+ mediaType: "application/json",
679
+ errors: {
680
+ 400: "Validation failed",
681
+ 401: "Authentication required",
682
+ 422: "Semantic validation failed (transaction does not balance, invalid accounts)",
683
+ 500: "Unexpected server error"
684
+ }
685
+ });
686
+ }
687
+ /**
688
+ * List transactions
689
+ * Returns a paginated list of transactions with optional filters
690
+ * @param data The data for the request.
691
+ * @param data.region Region code for tenant context
692
+ * @param data.limit Number of items per page (1-100, default: 20)
693
+ * @param data.offset Number of items to skip (default: 0)
694
+ * @param data.dateFrom Filter by start date (inclusive), format: YYYY-MM-DD
695
+ * @param data.dateTo Filter by end date (inclusive), format: YYYY-MM-DD
696
+ * @param data.status Filter by transaction status: single value, comma-separated multi-value (e.g. VOIDED,SUPERSEDED), or ALL to include audit rows. Defaults to ACTIVE-only (ADR-0128; previously unfiltered — breaking change).
697
+ * @param data.search Search in narration and payee fields (max 200 chars)
698
+ * @param data.accountId Filter by account ID (transactions with postings to this account)
699
+ * @param data.category Filter by ADR-0075 functional category (Group segment); matches any posting to an account whose derived Group segment equals this value. Must be accompanied by flow (ADR-0126).
700
+ * @param data.flow Required when category is present (400 otherwise) and vice versa (ADR-0126). Restricts the category account set to the flow root (income → Income:, expense → Expenses:) and drives the per-leg sign normalization of row viewpointAmount and the summary. OpenAPI cannot express conditional requiredness — the pairing is enforced at runtime.
701
+ * @returns TransactionListResponseDto Transaction list
702
+ * @throws ApiError
703
+ */
704
+ static transactionControllerList(data) {
705
+ return request(OpenAPI, {
706
+ method: "GET",
707
+ url: "/api/v1/{region}/bean/transactions",
708
+ path: {
709
+ region: data.region
710
+ },
711
+ query: {
712
+ limit: data.limit,
713
+ offset: data.offset,
714
+ dateFrom: data.dateFrom,
715
+ dateTo: data.dateTo,
716
+ status: data.status,
717
+ search: data.search,
718
+ accountId: data.accountId,
719
+ category: data.category,
720
+ flow: data.flow
721
+ },
722
+ errors: {
723
+ 400: "Validation failed",
724
+ 401: "Authentication required"
725
+ }
726
+ });
727
+ }
728
+ /**
729
+ * @deprecated
730
+ * Batch create transactions (DEPRECATED)
731
+ * DEPRECATED: Use POST /:region/bean/import/provider/:name/sync instead. This endpoint skips dedup, rule matching, and review branching.
732
+ * @param data The data for the request.
733
+ * @param data.region Region code for tenant context
734
+ * @param data.requestBody
735
+ * @returns BatchTransactionResponseDto Transactions processed
736
+ * @throws ApiError
737
+ */
738
+ static transactionControllerCreateBatch(data) {
739
+ return request(OpenAPI, {
740
+ method: "POST",
741
+ url: "/api/v1/{region}/bean/transactions/batch",
742
+ path: {
743
+ region: data.region
744
+ },
745
+ body: data.requestBody,
746
+ mediaType: "application/json",
747
+ errors: {
748
+ 400: "Invalid input",
749
+ 401: "Authentication required"
750
+ }
751
+ });
752
+ }
753
+ /**
754
+ * Correct (supersede) a transaction
755
+ * Atomically voids the original (SUPERSEDED) and creates a replacement through the full validation pipeline.
756
+ * @param data The data for the request.
757
+ * @param data.id Original transaction ID to correct
758
+ * @param data.region Region code for tenant context
759
+ * @param data.requestBody
760
+ * @returns TransactionDetailDto Corrected transaction created
761
+ * @throws ApiError
762
+ */
763
+ static transactionControllerCorrect(data) {
764
+ return request(OpenAPI, {
765
+ method: "POST",
766
+ url: "/api/v1/{region}/bean/transactions/{id}/correct",
767
+ path: {
768
+ id: data.id,
769
+ region: data.region
770
+ },
771
+ body: data.requestBody,
772
+ mediaType: "application/json",
773
+ errors: {
774
+ 404: "Original transaction not found",
775
+ 409: "Original no longer ACTIVE (concurrent modification)",
776
+ 422: "Pipeline validation failed (does not balance, invalid accounts)"
777
+ }
778
+ });
779
+ }
780
+ /**
781
+ * Suggest transaction tags
782
+ * Returns distinct tags from the user ACTIVE transactions, sorted by usage, for autocomplete. Optional q performs a case-insensitive prefix match.
783
+ * @param data The data for the request.
784
+ * @param data.region Region code for tenant context
785
+ * @param data.q Prefix match, case-insensitive (max 50 chars)
786
+ * @param data.sort usage (default) or name
787
+ * @param data.limit Max suggestions (1-100, default 10)
788
+ * @returns TagSuggestionsResponseDto Tag suggestions
789
+ * @throws ApiError
790
+ */
791
+ static transactionControllerSuggestTags(data) {
792
+ return request(OpenAPI, {
793
+ method: "GET",
794
+ url: "/api/v1/{region}/bean/transactions/tags",
795
+ path: {
796
+ region: data.region
797
+ },
798
+ query: {
799
+ q: data.q,
800
+ sort: data.sort,
801
+ limit: data.limit
802
+ },
803
+ errors: {
804
+ 400: "Validation failed",
805
+ 401: "Authentication required"
806
+ }
807
+ });
808
+ }
809
+ /**
810
+ * Get transaction detail
811
+ * Returns transaction details including all postings
812
+ * @param data The data for the request.
813
+ * @param data.id Transaction ID
814
+ * @param data.region Region code for tenant context
815
+ * @returns TransactionDetailDto Transaction detail
816
+ * @throws ApiError
817
+ */
818
+ static transactionControllerGetDetail(data) {
819
+ return request(OpenAPI, {
820
+ method: "GET",
821
+ url: "/api/v1/{region}/bean/transactions/{id}",
822
+ path: {
823
+ id: data.id,
824
+ region: data.region
825
+ },
826
+ errors: {
827
+ 401: "Authentication required",
828
+ 404: "Transaction not found"
829
+ }
830
+ });
831
+ }
832
+ /**
833
+ * Update transaction metadata
834
+ * Updates transaction metadata (flag, payee, narration, tags, links, meta). Postings cannot be modified.
835
+ * @param data The data for the request.
836
+ * @param data.id Transaction ID
837
+ * @param data.region Region code for tenant context
838
+ * @param data.requestBody Fields to update (all optional)
839
+ * @returns TransactionDetailDto Transaction updated successfully
840
+ * @throws ApiError
841
+ */
842
+ static transactionControllerUpdate(data) {
843
+ return request(OpenAPI, {
844
+ method: "PATCH",
845
+ url: "/api/v1/{region}/bean/transactions/{id}",
846
+ path: {
847
+ id: data.id,
848
+ region: data.region
849
+ },
850
+ body: data.requestBody,
851
+ mediaType: "application/json",
852
+ errors: {
853
+ 400: "Cannot update voided transaction",
854
+ 401: "Authentication required",
855
+ 404: "Transaction not found"
856
+ }
857
+ });
858
+ }
859
+ /**
860
+ * Void transaction
861
+ * Soft-deletes a transaction by marking it as VOIDED
862
+ * @param data The data for the request.
863
+ * @param data.id Transaction ID
864
+ * @param data.region Region code for tenant context
865
+ * @returns void Transaction voided successfully
866
+ * @throws ApiError
867
+ */
868
+ static transactionControllerDelete(data) {
869
+ return request(OpenAPI, {
870
+ method: "DELETE",
871
+ url: "/api/v1/{region}/bean/transactions/{id}",
872
+ path: {
873
+ id: data.id,
874
+ region: data.region
875
+ },
876
+ errors: {
877
+ 400: "Transaction already voided",
878
+ 401: "Authentication required",
879
+ 404: "Transaction not found"
880
+ }
881
+ });
882
+ }
883
+ };
884
+ var BeanBalancesService = class {
885
+ /**
886
+ * Query account balance
887
+ * Calculate account balance at a specific date for a single currency
888
+ * @param data The data for the request.
889
+ * @param data.account Account name (e.g., "Assets:Checking")
890
+ * @param data.region Region code for tenant context
891
+ * @param data.date Date to calculate balance at (ISO 8601 format)
892
+ * @param data.currency Currency to query (e.g., "USD", "CNY")
893
+ * @returns BalanceResponseDto Balance calculated successfully
894
+ * @throws ApiError
895
+ */
896
+ static balanceControllerGetBalance(data) {
897
+ return request(OpenAPI, {
898
+ method: "GET",
899
+ url: "/api/v1/{region}/bean/balances",
900
+ path: {
901
+ region: data.region
902
+ },
903
+ query: {
904
+ account: data.account,
905
+ date: data.date,
906
+ currency: data.currency
907
+ },
908
+ errors: {
909
+ 400: "Invalid query parameters",
910
+ 401: "User not authenticated"
911
+ }
912
+ });
913
+ }
914
+ /**
915
+ * Query multi-currency account balance
916
+ * Calculate account balances for all currencies at a specific date
917
+ * @param data The data for the request.
918
+ * @param data.region Region code for tenant context
919
+ * @returns MultiCurrencyBalanceResponseDto Balances calculated successfully
920
+ * @throws ApiError
921
+ */
922
+ static balanceControllerGetMultiCurrencyBalance(data) {
923
+ return request(OpenAPI, {
924
+ method: "GET",
925
+ url: "/api/v1/{region}/bean/balances/multi-currency",
926
+ path: {
927
+ region: data.region
928
+ },
929
+ errors: {
930
+ 400: "Invalid query parameters",
931
+ 401: "User not authenticated"
932
+ }
933
+ });
934
+ }
935
+ };
936
+ var BeanCommoditiesService = class {
937
+ /**
938
+ * Create a new commodity
939
+ * Creates a new commodity definition for the authenticated user
940
+ * @param data The data for the request.
941
+ * @param data.region Region code for tenant context
942
+ * @param data.requestBody
943
+ * @returns CommodityResponseDto Commodity created successfully
944
+ * @throws ApiError
945
+ */
946
+ static commodityControllerCreate(data) {
947
+ return request(OpenAPI, {
948
+ method: "POST",
949
+ url: "/api/v1/{region}/bean/commodities",
950
+ path: {
951
+ region: data.region
952
+ },
953
+ body: data.requestBody,
954
+ mediaType: "application/json",
955
+ errors: {
956
+ 400: "Invalid input data",
957
+ 409: "Commodity already exists"
958
+ }
959
+ });
960
+ }
961
+ /**
962
+ * List user commodities
963
+ * Returns all commodity definitions for the authenticated user with optional filtering
964
+ * @param data The data for the request.
965
+ * @param data.region Region code for tenant context
966
+ * @param data.search Search term for symbol or metadata fields (partial match). Searches symbol and metadata.name.
967
+ * @param data.symbol Filter by exact symbol match
968
+ * @returns CommodityListResponseDto Commodities retrieved successfully
969
+ * @throws ApiError
970
+ */
971
+ static commodityControllerFindAll(data) {
972
+ return request(OpenAPI, {
973
+ method: "GET",
974
+ url: "/api/v1/{region}/bean/commodities",
975
+ path: {
976
+ region: data.region
977
+ },
978
+ query: {
979
+ search: data.search,
980
+ symbol: data.symbol
981
+ }
982
+ });
983
+ }
984
+ /**
985
+ * Get commodity by symbol
986
+ * Returns a specific commodity definition by its symbol
987
+ * @param data The data for the request.
988
+ * @param data.symbol Commodity symbol
989
+ * @param data.region Region code for tenant context
990
+ * @returns CommodityResponseDto Commodity retrieved successfully
991
+ * @throws ApiError
992
+ */
993
+ static commodityControllerFindOne(data) {
994
+ return request(OpenAPI, {
995
+ method: "GET",
996
+ url: "/api/v1/{region}/bean/commodities/{symbol}",
997
+ path: {
998
+ symbol: data.symbol,
999
+ region: data.region
1000
+ },
1001
+ errors: {
1002
+ 404: "Commodity not found"
1003
+ }
1004
+ });
1005
+ }
1006
+ /**
1007
+ * Update commodity
1008
+ * Updates an existing commodity definition. Symbol cannot be changed.
1009
+ * @param data The data for the request.
1010
+ * @param data.symbol Commodity symbol
1011
+ * @param data.region Region code for tenant context
1012
+ * @param data.requestBody
1013
+ * @returns CommodityResponseDto Commodity updated successfully
1014
+ * @throws ApiError
1015
+ */
1016
+ static commodityControllerUpdate(data) {
1017
+ return request(OpenAPI, {
1018
+ method: "PUT",
1019
+ url: "/api/v1/{region}/bean/commodities/{symbol}",
1020
+ path: {
1021
+ symbol: data.symbol,
1022
+ region: data.region
1023
+ },
1024
+ body: data.requestBody,
1025
+ mediaType: "application/json",
1026
+ errors: {
1027
+ 400: "Invalid input data",
1028
+ 404: "Commodity not found"
1029
+ }
1030
+ });
1031
+ }
1032
+ /**
1033
+ * Delete commodity
1034
+ * Deletes a commodity definition
1035
+ * @param data The data for the request.
1036
+ * @param data.symbol Commodity symbol
1037
+ * @param data.region Region code for tenant context
1038
+ * @returns void Commodity deleted successfully
1039
+ * @throws ApiError
1040
+ */
1041
+ static commodityControllerDelete(data) {
1042
+ return request(OpenAPI, {
1043
+ method: "DELETE",
1044
+ url: "/api/v1/{region}/bean/commodities/{symbol}",
1045
+ path: {
1046
+ symbol: data.symbol,
1047
+ region: data.region
1048
+ },
1049
+ errors: {
1050
+ 404: "Commodity not found"
1051
+ }
1052
+ });
1053
+ }
1054
+ /**
1055
+ * Ensure commodity exists
1056
+ * Gets existing commodity or creates it with automatic initialization from OpenBB
1057
+ * @param data The data for the request.
1058
+ * @param data.symbol Commodity symbol
1059
+ * @param data.region Region code for tenant context
1060
+ * @returns CommodityResponseDto Commodity retrieved or created
1061
+ * @throws ApiError
1062
+ */
1063
+ static commodityControllerGetOrCreate(data) {
1064
+ return request(OpenAPI, {
1065
+ method: "POST",
1066
+ url: "/api/v1/{region}/bean/commodities/{symbol}/ensure",
1067
+ path: {
1068
+ symbol: data.symbol,
1069
+ region: data.region
1070
+ }
1071
+ });
1072
+ }
1073
+ /**
1074
+ * Bulk create commodities
1075
+ * Creates multiple commodities from a list of symbols, useful for initialization
1076
+ * @param data The data for the request.
1077
+ * @param data.region Region code for tenant context
1078
+ * @returns CommodityResponseDto Commodities created successfully
1079
+ * @throws ApiError
1080
+ */
1081
+ static commodityControllerBulkCreate(data) {
1082
+ return request(OpenAPI, {
1083
+ method: "POST",
1084
+ url: "/api/v1/{region}/bean/commodities/bulk",
1085
+ path: {
1086
+ region: data.region
1087
+ }
1088
+ });
1089
+ }
1090
+ };
1091
+ var ProviderSyncService = class {
1092
+ /**
1093
+ * Sync transactions from financial data provider
1094
+ *
1095
+ * Accepts raw transactions from external financial data providers, transforms them to Beancount format, and processes them through the ingestion pipeline.
1096
+ *
1097
+ * **Supported Providers:**
1098
+ * - **plaid**: Plaid API (US, Canada, Europe)
1099
+ * - **teller**: Teller API (US)
1100
+ * - **truelayer**: TrueLayer Open Banking (UK, Europe)
1101
+ * - **gocardless**: GoCardless Bank Account Data (Europe)
1102
+ * - **simplefin**: SimpleFIN (Self-hosted)
1103
+ * - **yodlee**: Yodlee (Global)
1104
+ * - **beancount-direct**: Beancount format transactions
1105
+ * - **parsed-bill**: Client-side parsed bill transactions
1106
+ *
1107
+ * **Processing Flow:**
1108
+ * 1. Transform raw data via provider adapter
1109
+ * 2. Validate transaction format
1110
+ * 3. Deduplicate using originalId
1111
+ * 4. Classify using rule engine
1112
+ * 5. Route low-confidence to Review Center
1113
+ * 6. Persist validated transactions
1114
+ *
1115
+ * @param data The data for the request.
1116
+ * @param data.providerName Provider name
1117
+ * @param data.region Region code for tenant context
1118
+ * @param data.requestBody
1119
+ * @returns ProviderSyncResponseDto Sync completed successfully
1120
+ * @throws ApiError
1121
+ */
1122
+ static providerSyncControllerSync(data) {
1123
+ return request(OpenAPI, {
1124
+ method: "POST",
1125
+ url: "/api/v1/{region}/bean/import/provider/{providerName}/sync",
1126
+ path: {
1127
+ providerName: data.providerName,
1128
+ region: data.region
1129
+ },
1130
+ body: data.requestBody,
1131
+ mediaType: "application/json",
1132
+ errors: {
1133
+ 400: "Invalid request data",
1134
+ 401: "Missing or invalid authentication",
1135
+ 404: "Provider not supported"
1136
+ }
1137
+ });
1138
+ }
1139
+ /**
1140
+ * Get supported providers
1141
+ * Returns a list of all providers supported by the sync endpoint.
1142
+ * @param data The data for the request.
1143
+ * @param data.region Region code for tenant context
1144
+ * @returns SupportedProvidersResponseDto List of supported providers
1145
+ * @throws ApiError
1146
+ */
1147
+ static providerSyncControllerGetSupportedProviders(data) {
1148
+ return request(OpenAPI, {
1149
+ method: "GET",
1150
+ url: "/api/v1/{region}/bean/import/provider/supported",
1151
+ path: {
1152
+ region: data.region
1153
+ },
1154
+ errors: {
1155
+ 401: "Missing or invalid authentication"
1156
+ }
1157
+ });
1158
+ }
1159
+ /**
1160
+ * Check if provider is supported
1161
+ * Returns whether a specific provider is supported.
1162
+ * @param data The data for the request.
1163
+ * @param data.providerName Provider name to check
1164
+ * @param data.region Region code for tenant context
1165
+ * @returns unknown Provider support status
1166
+ * @throws ApiError
1167
+ */
1168
+ static providerSyncControllerIsProviderSupported(data) {
1169
+ return request(OpenAPI, {
1170
+ method: "GET",
1171
+ url: "/api/v1/{region}/bean/import/provider/{providerName}/supported",
1172
+ path: {
1173
+ providerName: data.providerName,
1174
+ region: data.region
1175
+ },
1176
+ errors: {
1177
+ 401: "Missing or invalid authentication"
1178
+ }
1179
+ });
1180
+ }
1181
+ };
1182
+ var HealthService = class {
1183
+ /**
1184
+ * Basic health check for K8s/load balancer probes
1185
+ * @returns unknown Service is healthy
1186
+ * @throws ApiError
1187
+ */
1188
+ static healthControllerGetHealth() {
1189
+ return request(OpenAPI, {
1190
+ method: "GET",
1191
+ url: "/api/v1/health",
1192
+ errors: {
1193
+ 503: "Service unavailable"
1194
+ }
1195
+ });
1196
+ }
1197
+ /**
1198
+ * Check database connection health
1199
+ * @returns unknown Database is healthy
1200
+ * @throws ApiError
1201
+ */
1202
+ static healthControllerCheckDatabase() {
1203
+ return request(OpenAPI, {
1204
+ method: "GET",
1205
+ url: "/api/v1/health/database",
1206
+ errors: {
1207
+ 503: "Database unavailable"
1208
+ }
1209
+ });
1210
+ }
1211
+ /**
1212
+ * Check OpenBB schema status
1213
+ * @returns unknown OpenBB status
1214
+ * @throws ApiError
1215
+ */
1216
+ static healthControllerCheckOpenBb() {
1217
+ return request(OpenAPI, {
1218
+ method: "GET",
1219
+ url: "/api/v1/health/openbb",
1220
+ errors: {
1221
+ 503: "OpenBB unavailable"
1222
+ }
1223
+ });
1224
+ }
1225
+ /**
1226
+ * Check Redis connection health
1227
+ * @returns unknown Redis is healthy
1228
+ * @throws ApiError
1229
+ */
1230
+ static healthControllerCheckRedis() {
1231
+ return request(OpenAPI, {
1232
+ method: "GET",
1233
+ url: "/api/v1/health/redis",
1234
+ errors: {
1235
+ 503: "Redis unavailable"
1236
+ }
1237
+ });
1238
+ }
1239
+ /**
1240
+ * Get status of all circuit breakers
1241
+ * @returns unknown Circuit breaker status
1242
+ * @throws ApiError
1243
+ */
1244
+ static healthControllerGetCircuitBreakersHealth() {
1245
+ return request(OpenAPI, {
1246
+ method: "GET",
1247
+ url: "/api/v1/health/circuit-breakers",
1248
+ errors: {
1249
+ 401: "Unauthorized",
1250
+ 500: "Internal error"
1251
+ }
1252
+ });
1253
+ }
1254
+ /**
1255
+ * Reset a circuit breaker to CLOSED state
1256
+ * @param data The data for the request.
1257
+ * @param data.name Circuit breaker name to reset
1258
+ * @returns unknown Circuit breaker reset successfully
1259
+ * @throws ApiError
1260
+ */
1261
+ static healthControllerResetCircuitBreaker(data) {
1262
+ return request(OpenAPI, {
1263
+ method: "POST",
1264
+ url: "/api/v1/health/circuit-breakers/{name}/reset",
1265
+ path: {
1266
+ name: data.name
1267
+ },
1268
+ errors: {
1269
+ 401: "Unauthorized",
1270
+ 404: "Circuit breaker not found"
1271
+ }
1272
+ });
1273
+ }
1274
+ /**
1275
+ * Get health check metrics and statistics
1276
+ * @returns unknown Health metrics
1277
+ * @throws ApiError
1278
+ */
1279
+ static healthControllerGetMetrics() {
1280
+ return request(OpenAPI, {
1281
+ method: "GET",
1282
+ url: "/api/v1/health/metrics",
1283
+ errors: {
1284
+ 401: "Unauthorized"
1285
+ }
1286
+ });
1287
+ }
1288
+ };
1289
+ // Annotate the CommonJS export names for ESM import in node:
1290
+ 0 && (module.exports = {
1291
+ BeanAccountsService,
1292
+ BeanBalancesService,
1293
+ BeanCommoditiesService,
1294
+ BeanTransactionsService,
1295
+ HealthService,
1296
+ OpenAPI,
1297
+ ProviderSyncService
1298
+ });