@firela/api-types 0.0.0-canary.e1146c01 → 0.0.0-canary.ebb51de2

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.
@@ -202,6 +202,10 @@ import type {
202
202
  ProviderSyncControllerIsProviderSupportedResponse,
203
203
  TelemetryControllerReportTelemetryData,
204
204
  TelemetryControllerReportTelemetryResponse,
205
+ TelemetryControllerReportCoverageMissData,
206
+ TelemetryControllerReportCoverageMissResponse,
207
+ TelemetryControllerGetCoverageMetricsData,
208
+ TelemetryControllerGetCoverageMetricsResponse,
205
209
  NlpControllerProcessNaturalLanguageData,
206
210
  NlpControllerProcessNaturalLanguageResponse,
207
211
  NlpControllerClearSessionData,
@@ -214,6 +218,20 @@ import type {
214
218
  DashboardControllerGetAccountsResponse,
215
219
  DashboardControllerGetCashFlowData,
216
220
  DashboardControllerGetCashFlowResponse,
221
+ HoldingPnlControllerGetHoldingPnlData,
222
+ HoldingPnlControllerGetHoldingPnlResponse,
223
+ PriceControllerCreateData,
224
+ PriceControllerCreateResponse,
225
+ PriceControllerFindAllData,
226
+ PriceControllerFindAllResponse,
227
+ PriceControllerFindOneData,
228
+ PriceControllerFindOneResponse,
229
+ PriceControllerUpdateData,
230
+ PriceControllerUpdateResponse,
231
+ PriceControllerDeleteData,
232
+ PriceControllerDeleteResponse,
233
+ PriceControllerBulkCreateData,
234
+ PriceControllerBulkCreateResponse,
217
235
  ReportingControllerGetPortfolioTrendsData,
218
236
  ReportingControllerGetPortfolioTrendsResponse,
219
237
  ReportingControllerGenerateSnapshotData,
@@ -239,12 +257,10 @@ import type {
239
257
 
240
258
  export class BeanAccountsService {
241
259
  /**
242
- * Create a new account
243
- * Creates a new account (Beancount Open directive)
244
260
  * @param data The data for the request.
245
261
  * @param data.region Region code for tenant context
246
262
  * @param data.requestBody
247
- * @returns AccountResponseDto Account created successfully
263
+ * @returns unknown
248
264
  * @throws ApiError
249
265
  */
250
266
  public static accountControllerCreate(
@@ -257,10 +273,7 @@ export class BeanAccountsService {
257
273
  region: data.region
258
274
  },
259
275
  body: data.requestBody,
260
- mediaType: 'application/json',
261
- errors: {
262
- 409: 'Account already exists'
263
- }
276
+ mediaType: 'application/json'
264
277
  });
265
278
  }
266
279
 
@@ -324,13 +337,11 @@ export class BeanAccountsService {
324
337
  }
325
338
 
326
339
  /**
327
- * Update account
328
- * Updates account metadata (path cannot be changed)
329
340
  * @param data The data for the request.
330
- * @param data.id Account UUID
341
+ * @param data.id
331
342
  * @param data.region Region code for tenant context
332
343
  * @param data.requestBody
333
- * @returns AccountResponseDto Account updated successfully
344
+ * @returns unknown
334
345
  * @throws ApiError
335
346
  */
336
347
  public static accountControllerUpdate(
@@ -344,20 +355,15 @@ export class BeanAccountsService {
344
355
  region: data.region
345
356
  },
346
357
  body: data.requestBody,
347
- mediaType: 'application/json',
348
- errors: {
349
- 404: 'Account not found'
350
- }
358
+ mediaType: 'application/json'
351
359
  });
352
360
  }
353
361
 
354
362
  /**
355
- * Delete account
356
- * Deletes an account (only if no transactions)
357
363
  * @param data The data for the request.
358
- * @param data.id Account UUID
364
+ * @param data.id
359
365
  * @param data.region Region code for tenant context
360
- * @returns void Account deleted successfully
366
+ * @returns unknown
361
367
  * @throws ApiError
362
368
  */
363
369
  public static accountControllerDelete(
@@ -369,22 +375,16 @@ export class BeanAccountsService {
369
375
  path: {
370
376
  id: data.id,
371
377
  region: data.region
372
- },
373
- errors: {
374
- 404: 'Account not found',
375
- 409: 'Account has transactions and cannot be deleted'
376
378
  }
377
379
  });
378
380
  }
379
381
 
380
382
  /**
381
- * Close account
382
- * Closes an account (Beancount Close directive)
383
383
  * @param data The data for the request.
384
- * @param data.id Account UUID
384
+ * @param data.id
385
385
  * @param data.region Region code for tenant context
386
386
  * @param data.requestBody
387
- * @returns AccountResponseDto Account closed successfully
387
+ * @returns unknown
388
388
  * @throws ApiError
389
389
  */
390
390
  public static accountControllerClose(
@@ -398,22 +398,16 @@ export class BeanAccountsService {
398
398
  region: data.region
399
399
  },
400
400
  body: data.requestBody,
401
- mediaType: 'application/json',
402
- errors: {
403
- 400: 'Account is already closed',
404
- 404: 'Account not found'
405
- }
401
+ mediaType: 'application/json'
406
402
  });
407
403
  }
408
404
 
409
405
  /**
410
- * Reopen account
411
- * Reopens a previously closed account
412
406
  * @param data The data for the request.
413
- * @param data.id Account UUID
407
+ * @param data.id
414
408
  * @param data.region Region code for tenant context
415
409
  * @param data.requestBody
416
- * @returns AccountResponseDto Account reopened successfully
410
+ * @returns unknown
417
411
  * @throws ApiError
418
412
  */
419
413
  public static accountControllerReopen(
@@ -427,11 +421,7 @@ export class BeanAccountsService {
427
421
  region: data.region
428
422
  },
429
423
  body: data.requestBody,
430
- mediaType: 'application/json',
431
- errors: {
432
- 400: 'Account is not closed',
433
- 404: 'Account not found'
434
- }
424
+ mediaType: 'application/json'
435
425
  });
436
426
  }
437
427
  }
@@ -2514,12 +2504,9 @@ export class BeanImportService {
2514
2504
  }
2515
2505
 
2516
2506
  /**
2517
- * Import a Beancount file in community format
2518
- * Upload a .beancount file to import. The system parses community-format paths, converts to internal format using category metadata, auto-creates accounts, and imports transactions with deduplication. Maximum file size: 50MB. Only 1 import per user at a time.
2519
2507
  * @param data The data for the request.
2520
2508
  * @param data.region Region code for tenant context
2521
- * @param data.formData Beancount file to import
2522
- * @returns unknown Beancount file imported successfully
2509
+ * @returns unknown
2523
2510
  * @throws ApiError
2524
2511
  */
2525
2512
  public static fileImportControllerImportBeancount(
@@ -2530,11 +2517,6 @@ export class BeanImportService {
2530
2517
  url: '/api/v1/{region}/bean/import/beancount',
2531
2518
  path: {
2532
2519
  region: data.region
2533
- },
2534
- formData: data.formData,
2535
- mediaType: 'multipart/form-data',
2536
- errors: {
2537
- 400: 'Bad request - invalid file or no file uploaded'
2538
2520
  }
2539
2521
  });
2540
2522
  }
@@ -2737,33 +2719,11 @@ export class BeanPlatformsService {
2737
2719
 
2738
2720
  export class ProviderSyncService {
2739
2721
  /**
2740
- * Sync transactions from financial data provider
2741
- *
2742
- * Accepts raw transactions from external financial data providers, transforms them to Beancount format, and processes them through the ingestion pipeline.
2743
- *
2744
- * **Supported Providers:**
2745
- * - **plaid**: Plaid API (US, Canada, Europe)
2746
- * - **teller**: Teller API (US)
2747
- * - **truelayer**: TrueLayer Open Banking (UK, Europe)
2748
- * - **gocardless**: GoCardless Bank Account Data (Europe)
2749
- * - **simplefin**: SimpleFIN (Self-hosted)
2750
- * - **yodlee**: Yodlee (Global)
2751
- * - **beancount-direct**: Beancount format transactions
2752
- * - **parsed-bill**: Client-side parsed bill transactions
2753
- *
2754
- * **Processing Flow:**
2755
- * 1. Transform raw data via provider adapter
2756
- * 2. Validate transaction format
2757
- * 3. Deduplicate using originalId
2758
- * 4. Classify using rule engine
2759
- * 5. Route low-confidence to Review Center
2760
- * 6. Persist validated transactions
2761
- *
2762
2722
  * @param data The data for the request.
2763
- * @param data.providerName Provider name
2764
- * @param data.region Region code
2723
+ * @param data.providerName
2724
+ * @param data.region Region code for tenant context
2765
2725
  * @param data.requestBody
2766
- * @returns ProviderSyncResponseDto Sync completed successfully
2726
+ * @returns unknown
2767
2727
  * @throws ApiError
2768
2728
  */
2769
2729
  public static providerSyncControllerSync(
@@ -2777,12 +2737,7 @@ export class ProviderSyncService {
2777
2737
  region: data.region
2778
2738
  },
2779
2739
  body: data.requestBody,
2780
- mediaType: 'application/json',
2781
- errors: {
2782
- 400: 'Invalid request data',
2783
- 401: 'Missing or invalid authentication',
2784
- 404: 'Provider not supported'
2785
- }
2740
+ mediaType: 'application/json'
2786
2741
  });
2787
2742
  }
2788
2743
 
@@ -2860,16 +2815,62 @@ export class ImportTelemetryService {
2860
2815
  }
2861
2816
  });
2862
2817
  }
2818
+
2819
+ /**
2820
+ * Receive anonymous zero-hit coverage miss report
2821
+ * @param data The data for the request.
2822
+ * @param data.region Region code for tenant context
2823
+ * @param data.requestBody
2824
+ * @returns unknown Coverage miss report received
2825
+ * @throws ApiError
2826
+ */
2827
+ public static telemetryControllerReportCoverageMiss(
2828
+ data: TelemetryControllerReportCoverageMissData
2829
+ ): CancelablePromise<TelemetryControllerReportCoverageMissResponse> {
2830
+ return __request(OpenAPI, {
2831
+ method: 'POST',
2832
+ url: '/api/v1/{region}/bean/import/parser-coverage-miss',
2833
+ path: {
2834
+ region: data.region
2835
+ },
2836
+ body: data.requestBody,
2837
+ mediaType: 'application/json',
2838
+ errors: {
2839
+ 401: 'Unauthorized'
2840
+ }
2841
+ });
2842
+ }
2843
+
2844
+ /**
2845
+ * Coverage metrics (uncovered format aggregation)
2846
+ * @param data The data for the request.
2847
+ * @param data.region Region code for tenant context
2848
+ * @param data.topN Top-N uncovered formats (default 10)
2849
+ * @returns unknown Coverage metrics
2850
+ * @throws ApiError
2851
+ */
2852
+ public static telemetryControllerGetCoverageMetrics(
2853
+ data: TelemetryControllerGetCoverageMetricsData
2854
+ ): CancelablePromise<TelemetryControllerGetCoverageMetricsResponse> {
2855
+ return __request(OpenAPI, {
2856
+ method: 'GET',
2857
+ url: '/api/v1/{region}/bean/import/parser-coverage-metrics',
2858
+ path: {
2859
+ region: data.region
2860
+ },
2861
+ query: {
2862
+ topN: data.topN
2863
+ }
2864
+ });
2865
+ }
2863
2866
  }
2864
2867
 
2865
2868
  export class BeanNlpService {
2866
2869
  /**
2867
- * Process natural language input
2868
- * Parse natural language text (Chinese/English) describing a transaction. Supports multi-turn dialogue for collecting missing information. When confidence < 0.75, returns "confirm" action requiring user verification. User can reply with confirmation words (确认/yes/ok) or provide corrections. Examples: "yesterday Starbucks spent 35 yuan", "today lunch 28 yuan", "spent $50 at Walmart"
2869
2870
  * @param data The data for the request.
2870
2871
  * @param data.region Region code for tenant context
2871
- * @param data.requestBody Natural language transaction input with optional session ID
2872
- * @returns NlpResponseDto NLP processing result - either created transaction or asking for more info
2872
+ * @param data.requestBody
2873
+ * @returns unknown
2873
2874
  * @throws ApiError
2874
2875
  */
2875
2876
  public static nlpControllerProcessNaturalLanguage(
@@ -2882,11 +2883,7 @@ export class BeanNlpService {
2882
2883
  region: data.region
2883
2884
  },
2884
2885
  body: data.requestBody,
2885
- mediaType: 'application/json',
2886
- errors: {
2887
- 400: 'Invalid input',
2888
- 401: 'Unauthorized'
2889
- }
2886
+ mediaType: 'application/json'
2890
2887
  });
2891
2888
  }
2892
2889
 
@@ -2980,6 +2977,7 @@ export class DashboardService {
2980
2977
  * @param data.region Region code for tenant context
2981
2978
  * @param data.groupBy Grouping strategy
2982
2979
  * @param data.date Date for balance calculation (ISO 8601 format)
2980
+ * @param data.accountId Scope to a single account (only valid with groupBy=holdingAssetClass, ADR-0105 §6)
2983
2981
  * @returns unknown Accounts retrieved successfully. Response type depends on groupBy parameter.
2984
2982
  * @throws ApiError
2985
2983
  */
@@ -2994,7 +2992,8 @@ export class DashboardService {
2994
2992
  },
2995
2993
  query: {
2996
2994
  groupBy: data.groupBy,
2997
- date: data.date
2995
+ date: data.date,
2996
+ accountId: data.accountId
2998
2997
  },
2999
2998
  errors: {
3000
2999
  401: 'User not authenticated'
@@ -3031,6 +3030,207 @@ export class DashboardService {
3031
3030
  }
3032
3031
  }
3033
3032
 
3033
+ export class InvestmentService {
3034
+ /**
3035
+ * Get per-holding unrealized + realized P&L
3036
+ * Average-cost unrealized P&L per account × commodity, plus cumulative realized P&L on sold lots (method = FIFO | average, default average).
3037
+ * @param data The data for the request.
3038
+ * @param data.region Region code for tenant context
3039
+ * @param data.asOf As-of date (ISO 8601), defaults to today
3040
+ * @param data.accountId Scope to a single account
3041
+ * @param data.method Realized-P&L lot-matching method (default average). Does not affect the average-cost unrealized basis.
3042
+ * @returns HoldingPnlResponseDto Holding P&L retrieved successfully
3043
+ * @throws ApiError
3044
+ */
3045
+ public static holdingPnlControllerGetHoldingPnl(
3046
+ data: HoldingPnlControllerGetHoldingPnlData
3047
+ ): CancelablePromise<HoldingPnlControllerGetHoldingPnlResponse> {
3048
+ return __request(OpenAPI, {
3049
+ method: 'GET',
3050
+ url: '/api/v1/{region}/investment/holdings/pnl',
3051
+ path: {
3052
+ region: data.region
3053
+ },
3054
+ query: {
3055
+ asOf: data.asOf,
3056
+ accountId: data.accountId,
3057
+ method: data.method
3058
+ },
3059
+ errors: {
3060
+ 400: 'Invalid asOf format/value/future date, invalid accountId format, or unsupported method',
3061
+ 401: 'User not authenticated'
3062
+ }
3063
+ });
3064
+ }
3065
+ }
3066
+
3067
+ export class BeanPricesService {
3068
+ /**
3069
+ * Create a new price
3070
+ * Creates a new price entry for the authenticated user
3071
+ * @param data The data for the request.
3072
+ * @param data.region Region code for tenant context
3073
+ * @param data.requestBody
3074
+ * @returns PriceResponseDto Price created successfully
3075
+ * @throws ApiError
3076
+ */
3077
+ public static priceControllerCreate(
3078
+ data: PriceControllerCreateData
3079
+ ): CancelablePromise<PriceControllerCreateResponse> {
3080
+ return __request(OpenAPI, {
3081
+ method: 'POST',
3082
+ url: '/api/v1/{region}/bean/prices',
3083
+ path: {
3084
+ region: data.region
3085
+ },
3086
+ body: data.requestBody,
3087
+ mediaType: 'application/json',
3088
+ errors: {
3089
+ 404: 'Currency or quoteCurrency commodity not found',
3090
+ 409: 'Price already exists for this currency pair and date'
3091
+ }
3092
+ });
3093
+ }
3094
+
3095
+ /**
3096
+ * List user prices
3097
+ * Returns all price entries for the authenticated user with optional filtering
3098
+ * @param data The data for the request.
3099
+ * @param data.region Region code for tenant context
3100
+ * @param data.currency Filter by currency (e.g., BTC, AAPL, USD)
3101
+ * @param data.quoteCurrency Filter by quote currency (pricing currency, e.g., USD, CNY)
3102
+ * @param data.dateFrom Filter prices from this date (ISO 8601 format)
3103
+ * @param data.dateTo Filter prices to this date (ISO 8601 format)
3104
+ * @param data.search Search term for currency or quoteCurrency (case-insensitive partial match)
3105
+ * @param data.page Page number for pagination (default: 1)
3106
+ * @param data.limit Number of items per page (default: 20, max: 100)
3107
+ * @returns PriceListResponseDto Prices retrieved successfully
3108
+ * @throws ApiError
3109
+ */
3110
+ public static priceControllerFindAll(
3111
+ data: PriceControllerFindAllData
3112
+ ): CancelablePromise<PriceControllerFindAllResponse> {
3113
+ return __request(OpenAPI, {
3114
+ method: 'GET',
3115
+ url: '/api/v1/{region}/bean/prices',
3116
+ path: {
3117
+ region: data.region
3118
+ },
3119
+ query: {
3120
+ currency: data.currency,
3121
+ quoteCurrency: data.quoteCurrency,
3122
+ dateFrom: data.dateFrom,
3123
+ dateTo: data.dateTo,
3124
+ search: data.search,
3125
+ page: data.page,
3126
+ limit: data.limit
3127
+ }
3128
+ });
3129
+ }
3130
+
3131
+ /**
3132
+ * Get price by ID
3133
+ * Returns a single price entry by its ID
3134
+ * @param data The data for the request.
3135
+ * @param data.id Price ID
3136
+ * @param data.region Region code for tenant context
3137
+ * @returns PriceResponseDto Price retrieved successfully
3138
+ * @throws ApiError
3139
+ */
3140
+ public static priceControllerFindOne(
3141
+ data: PriceControllerFindOneData
3142
+ ): CancelablePromise<PriceControllerFindOneResponse> {
3143
+ return __request(OpenAPI, {
3144
+ method: 'GET',
3145
+ url: '/api/v1/{region}/bean/prices/{id}',
3146
+ path: {
3147
+ id: data.id,
3148
+ region: data.region
3149
+ },
3150
+ errors: {
3151
+ 404: 'Price not found'
3152
+ }
3153
+ });
3154
+ }
3155
+
3156
+ /**
3157
+ * Update a price
3158
+ * Updates an existing price entry
3159
+ * @param data The data for the request.
3160
+ * @param data.id Price ID
3161
+ * @param data.region Region code for tenant context
3162
+ * @param data.requestBody
3163
+ * @returns PriceResponseDto Price updated successfully
3164
+ * @throws ApiError
3165
+ */
3166
+ public static priceControllerUpdate(
3167
+ data: PriceControllerUpdateData
3168
+ ): CancelablePromise<PriceControllerUpdateResponse> {
3169
+ return __request(OpenAPI, {
3170
+ method: 'PUT',
3171
+ url: '/api/v1/{region}/bean/prices/{id}',
3172
+ path: {
3173
+ id: data.id,
3174
+ region: data.region
3175
+ },
3176
+ body: data.requestBody,
3177
+ mediaType: 'application/json',
3178
+ errors: {
3179
+ 404: 'Price not found',
3180
+ 409: 'Updated price conflicts with existing price'
3181
+ }
3182
+ });
3183
+ }
3184
+
3185
+ /**
3186
+ * Delete a price
3187
+ * Deletes a price entry (hard delete)
3188
+ * @param data The data for the request.
3189
+ * @param data.id Price ID
3190
+ * @param data.region Region code for tenant context
3191
+ * @returns void Price deleted successfully
3192
+ * @throws ApiError
3193
+ */
3194
+ public static priceControllerDelete(
3195
+ data: PriceControllerDeleteData
3196
+ ): CancelablePromise<PriceControllerDeleteResponse> {
3197
+ return __request(OpenAPI, {
3198
+ method: 'DELETE',
3199
+ url: '/api/v1/{region}/bean/prices/{id}',
3200
+ path: {
3201
+ id: data.id,
3202
+ region: data.region
3203
+ },
3204
+ errors: {
3205
+ 404: 'Price not found'
3206
+ }
3207
+ });
3208
+ }
3209
+
3210
+ /**
3211
+ * Bulk create prices
3212
+ * Creates multiple price entries at once (skips duplicates)
3213
+ * @param data The data for the request.
3214
+ * @param data.region Region code for tenant context
3215
+ * @param data.requestBody
3216
+ * @returns PriceResponseDto Prices created successfully
3217
+ * @throws ApiError
3218
+ */
3219
+ public static priceControllerBulkCreate(
3220
+ data: PriceControllerBulkCreateData
3221
+ ): CancelablePromise<PriceControllerBulkCreateResponse> {
3222
+ return __request(OpenAPI, {
3223
+ method: 'POST',
3224
+ url: '/api/v1/{region}/bean/prices/bulk',
3225
+ path: {
3226
+ region: data.region
3227
+ },
3228
+ body: data.requestBody,
3229
+ mediaType: 'application/json'
3230
+ });
3231
+ }
3232
+ }
3233
+
3034
3234
  export class ReportingService {
3035
3235
  /**
3036
3236
  * Get portfolio value trends