squarefi-bff-api-module 1.36.78 → 1.36.80

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.
@@ -70,6 +70,12 @@ export declare const frontend: {
70
70
  getAll: ({ wallet_id, ...params }: API.Frontend.VirtualAccounts.Programs.List.Request) => Promise<API.Frontend.VirtualAccounts.Programs.List.Response>;
71
71
  };
72
72
  };
73
+ kycRails: {
74
+ getAll: ({ wallet_id }: API.Frontend.KycRails.List.Request) => Promise<API.Frontend.KycRails.List.Response>;
75
+ getById: ({ wallet_id, rail_id }: API.Frontend.KycRails.Get.Request) => Promise<API.Frontend.KycRails.Get.Response>;
76
+ submit: ({ wallet_id, rail_id, }: API.Frontend.KycRails.Submit.Request) => Promise<API.Frontend.KycRails.Submit.Response>;
77
+ confirmTerms: ({ wallet_id, rail_id, }: API.Frontend.KycRails.ConfirmTerms.Request) => Promise<API.Frontend.KycRails.ConfirmTerms.Response>;
78
+ };
73
79
  reference: {
74
80
  exchangeRates: {
75
81
  list: (params?: API.Frontend.Reference.ExchangeRates.List.Request) => Promise<API.Frontend.Reference.ExchangeRates.List.Response>;
@@ -144,6 +144,14 @@ export const frontend = {
144
144
  getAll: ({ wallet_id, ...params }) => apiClientV1Frontend.getRequest(`/frontend/virtual-accounts/programs/wallet/${wallet_id}`, { params }),
145
145
  },
146
146
  },
147
+ // Frontend twin of `kyc.rails.*` (BFF `/kyc/{wallet_id}/rails`). Reads take any wallet member; `submit` and
148
+ // `confirmTerms` take the wallet admin or owner, and only they get the rail's `extra_actions`.
149
+ kycRails: {
150
+ getAll: ({ wallet_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails`),
151
+ getById: ({ wallet_id, rail_id }) => apiClientV1Frontend.getRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
152
+ submit: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}`),
153
+ confirmTerms: ({ wallet_id, rail_id, }) => apiClientV1Frontend.postRequest(`/frontend/wallets/${wallet_id}/kyc-rails/${rail_id}/terms-and-conditions`),
154
+ },
147
155
  reference: {
148
156
  // Frontend twin of `exchange.byOrderType.*` (legacy `GET /exchange/`): the same tenant pairs, but paged in
149
157
  // memory — 50 per page by default, 500 at most, in no particular order — and behind the bearer session.
package/dist/api/kyc.d.ts CHANGED
@@ -17,6 +17,7 @@ export declare const kyc: {
17
17
  init: ({ kyc_entity_id, ...params }: API.KYC.Entity.Init.Request) => Promise<API.KYC.Entity.Init.Response>;
18
18
  resume: ({ kyc_entity_id, verification_ref, }: API.KYC.Entity.Resume.Request) => Promise<API.KYC.Entity.Resume.Response>;
19
19
  };
20
+ /** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
20
21
  rails: {
21
22
  info: {
22
23
  getAll: ({ wallet_id }: API.KYC.Rails.RailInfo.List.Request) => Promise<API.KYC.Rails.RailInfo.List.Response>;
package/dist/api/kyc.js CHANGED
@@ -17,6 +17,7 @@ export const kyc = {
17
17
  init: ({ kyc_entity_id, ...params }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/init`, { params }),
18
18
  resume: ({ kyc_entity_id, verification_ref, }) => apiClientV2.postRequest(`/kyc/entities/${kyc_entity_id}/resume/${verification_ref}`),
19
19
  },
20
+ /** @deprecated BFF rails are replaced by CORE `/frontend/wallets/{wallet_id}/kyc-rails` (SFI-2614). Use `frontend.kycRails`. */
20
21
  rails: {
21
22
  info: {
22
23
  getAll: ({ wallet_id }) => apiClientV2.getRequest(`/kyc/${wallet_id}/rails`),
@@ -2428,6 +2428,8 @@ export interface paths {
2428
2428
  * Pass `status=FAILED` to get them back.
2429
2429
  * */
2430
2430
  status?: ("ACTIVE" | "INACTIVE" | "SUSPENDED" | "CANCELED")[];
2431
+ /** @description Only cards issued to this cardholder. */
2432
+ cardholder_id?: string;
2431
2433
  /** @description Filter cards by last 4 digits of the card number (partial, case-insensitive match) */
2432
2434
  last4?: string;
2433
2435
  /** @description Number of items to skip */
@@ -4261,7 +4263,10 @@ export interface paths {
4261
4263
  /**
4262
4264
  * Withdraw funds from sub-account
4263
4265
  * @description Withdraws funds from a sub-account back to the associated wallet.
4264
- * Currency is automatically determined from sub-account's account_currency.
4266
+ * The sub-account is debited in its account_currency. The wallet is credited
4267
+ * in the tenant's base currency when the tenant has auto-exchange on (converted
4268
+ * at the tenant's WITHDRAW_CARD_SUBACCOUNT rate inside the same order), otherwise
4269
+ * — or when that pair has no rate — in the sub-account's account_currency.
4265
4270
  *
4266
4271
  * **Authentication**: x-api-key header required
4267
4272
  *
@@ -2903,6 +2903,8 @@ export interface paths {
2903
2903
  * client can act on. Pass `status=FAILED` to get them back.
2904
2904
  * */
2905
2905
  status?: ("ACTIVE" | "INACTIVE" | "FROZEN" | "CANCELED" | "CLOSED" | "BLOCKED" | "FAILED" | "PENDING")[];
2906
+ /** @description Only cards issued to this cardholder. */
2907
+ cardholder_id?: string;
2906
2908
  /** @description Filter cards by last 4 digits of the card number (partial, case-insensitive match) */
2907
2909
  last4?: string;
2908
2910
  /** @description Number of items to skip */
@@ -4764,7 +4766,10 @@ export interface paths {
4764
4766
  /**
4765
4767
  * Withdraw funds from sub-account
4766
4768
  * @description Withdraws funds from a sub-account back to the associated wallet.
4767
- * Currency is automatically determined from sub-account's account_currency.
4769
+ * The sub-account is debited in its account_currency. The wallet is credited
4770
+ * in the tenant's base currency when the tenant has auto-exchange on (converted
4771
+ * at the tenant's WITHDRAW_CARD_SUBACCOUNT rate inside the same order), otherwise
4772
+ * — or when that pair has no rate — in the sub-account's account_currency.
4768
4773
  *
4769
4774
  * **Authentication**: Bearer token with x-tenant-id header required
4770
4775
  *
@@ -9633,6 +9638,13 @@ export interface paths {
9633
9638
  * Besides order columns it accepts `mass_payout_id` (uuid), which narrows the
9634
9639
  * result to the orders of one mass payout batch — the same batch reported by
9635
9640
  * the `mass_payout_id` field of each order. A non-uuid value is rejected with 400.
9641
+ *
9642
+ * It also accepts `rfi_case_id` (uuid), e.g. `[{"rfi_case_id":"<uuid>"}]`: only the
9643
+ * orders a compliance request covers — the same ones as `transactions` of
9644
+ * `GET /frontend/rfi/{wallet_id}/{case_id}`, closed requests included; dust orders
9645
+ * among them show only with `show_low_balance=true`, as everywhere in this list. It
9646
+ * combines with the other filters and the dates. A request of another account, or an
9647
+ * unknown id, gives an empty result; a non-uuid value is rejected with 400.
9636
9648
  * */
9637
9649
  filters?: string;
9638
9650
  date_from?: string;
@@ -9662,6 +9674,15 @@ export interface paths {
9662
9674
  };
9663
9675
  };
9664
9676
  };
9677
+ /** @description `INVALID_REQUEST` — `filters` is not a JSON array, or `mass_payout_id` / `rfi_case_id` is not a uuid */
9678
+ 400: {
9679
+ headers: {
9680
+ [name: string]: unknown;
9681
+ };
9682
+ content: {
9683
+ "application/json": components["schemas"]["ErrorResponse"];
9684
+ };
9685
+ };
9665
9686
  /** @description Access denied to wallet */
9666
9687
  403: {
9667
9688
  headers: {
@@ -9704,6 +9725,13 @@ export interface paths {
9704
9725
  * Besides order columns it accepts `mass_payout_id` (uuid), which narrows the
9705
9726
  * result to the orders of one mass payout batch — the same batch reported by
9706
9727
  * the `mass_payout_id` field of each order. A non-uuid value is rejected with 400.
9728
+ *
9729
+ * It also accepts `rfi_case_id` (uuid), e.g. `[{"rfi_case_id":"<uuid>"}]`: only the
9730
+ * orders a compliance request covers — the same ones as `transactions` of
9731
+ * `GET /frontend/rfi/{wallet_id}/{case_id}`, closed requests included; dust orders
9732
+ * among them show only with `show_low_balance=true`, as everywhere in this list. It
9733
+ * combines with the other filters and the dates. A request of another account, or an
9734
+ * unknown id, gives an empty result; a non-uuid value is rejected with 400.
9707
9735
  * */
9708
9736
  filters?: string;
9709
9737
  /** @description If `true`, includes dust orders (amount below render threshold for either currency). Defaults to `false` — dust orders are hidden. */
@@ -9726,6 +9754,15 @@ export interface paths {
9726
9754
  "text/csv": string;
9727
9755
  };
9728
9756
  };
9757
+ /** @description `INVALID_REQUEST` — `filters` is not a JSON array, or `mass_payout_id` / `rfi_case_id` is not a uuid */
9758
+ 400: {
9759
+ headers: {
9760
+ [name: string]: unknown;
9761
+ };
9762
+ content: {
9763
+ "application/json": components["schemas"]["ErrorResponse"];
9764
+ };
9765
+ };
9729
9766
  /** @description Access denied to wallet */
9730
9767
  403: {
9731
9768
  headers: {
@@ -11299,11 +11336,15 @@ export interface paths {
11299
11336
  };
11300
11337
  /**
11301
11338
  * List compliance requests (RFI) of an account, with the banner counters
11302
- * @description Requests for information compliance sent about this account, newest first. `summary`
11303
- * counts every open request regardless of paging — use it for the home-screen banner:
11304
- * `action_required > 0` shows it, `overdue > 0` turns it red, `next_due_at` is the
11305
- * nearest deadline. Any wallet member except the scoped `user` role may read.
11306
- * Refresh on the realtime `data.changed` hint with entity `WALLET_RFI`.
11339
+ * @description Requests for information compliance sent about this account, newest first. RFI in
11340
+ * the app is being rolled out per workspace: while a workspace still works RFI by
11341
+ * email, the list is empty, `summary` is all zeros and every request answers 404 —
11342
+ * its requests stay in the client's mailbox. `summary` counts every open request regardless of paging — use it for the
11343
+ * home-screen banner: `action_required > 0` shows it, `overdue > 0` turns it red,
11344
+ * `next_due_at` is the nearest deadline. Any wallet member except the scoped `user` role
11345
+ * may read. Refresh on the realtime `data.changed` hint with entity `WALLET_RFI`; a new
11346
+ * question, a new message from compliance and the closing also arrive as the
11347
+ * `RFI_REQUESTED` / `RFI_RESOLVED` notifications (in-app, push, email).
11307
11348
  *
11308
11349
  */
11309
11350
  get: {
@@ -11313,6 +11354,7 @@ export interface paths {
11313
11354
  status?: "open" | "action_required" | "awaiting_compliance" | "closed";
11314
11355
  /** @description Only the requests covering this transaction — what the transaction screen asks by to decide whether to show "compliance has questions". A transaction of another account, or one no request covers, returns an empty page. */
11315
11356
  order_uuid?: string;
11357
+ /** @description Page size, from 1 to 100; 20 when omitted. */
11316
11358
  limit?: number;
11317
11359
  offset?: number;
11318
11360
  };
@@ -11333,24 +11375,41 @@ export interface paths {
11333
11375
  content: {
11334
11376
  "application/json": {
11335
11377
  /** @example true */
11336
- success?: boolean;
11337
- data?: {
11338
- summary?: {
11339
- action_required?: number;
11340
- overdue?: number;
11341
- awaiting_compliance?: number;
11378
+ success: boolean;
11379
+ data: {
11380
+ summary: {
11381
+ action_required: number;
11382
+ overdue: number;
11383
+ awaiting_compliance: number;
11342
11384
  /** Format: date-time */
11343
- next_due_at?: string | null;
11385
+ next_due_at: string | null;
11344
11386
  };
11345
- items?: components["schemas"]["RfiCase"][];
11346
- total?: number;
11347
- limit?: number;
11348
- offset?: number;
11387
+ items: components["schemas"]["RfiCase"][];
11388
+ total: number;
11389
+ limit: number;
11390
+ offset: number;
11349
11391
  };
11350
11392
  };
11351
11393
  };
11352
11394
  };
11353
- 403: components["responses"]["ForbiddenError"];
11395
+ /** @description `VALIDATION_ERROR` — `limit` outside 1–100, a negative `offset`, an unknown `status` */
11396
+ 400: {
11397
+ headers: {
11398
+ [name: string]: unknown;
11399
+ };
11400
+ content: {
11401
+ "application/json": components["schemas"]["ErrorResponse"];
11402
+ };
11403
+ };
11404
+ /** @description `ACCESS_DENIED` — not a member of this account */
11405
+ 403: {
11406
+ headers: {
11407
+ [name: string]: unknown;
11408
+ };
11409
+ content: {
11410
+ "application/json": components["schemas"]["ErrorResponse"];
11411
+ };
11412
+ };
11354
11413
  };
11355
11414
  };
11356
11415
  put?: never;
@@ -11371,7 +11430,8 @@ export interface paths {
11371
11430
  /**
11372
11431
  * Get a compliance request with its conversation and covered transactions
11373
11432
  * @description The conversation holds compliance's questions and the client's answers, oldest first.
11374
- * A request of another account answers 404.
11433
+ * A request of another account answers 404, and so does every request of a workspace
11434
+ * that still works RFI by email.
11375
11435
  *
11376
11436
  */
11377
11437
  get: {
@@ -11395,12 +11455,38 @@ export interface paths {
11395
11455
  content: {
11396
11456
  "application/json": {
11397
11457
  /** @example true */
11398
- success?: boolean;
11399
- data?: components["schemas"]["RfiCaseDetail"];
11458
+ success: boolean;
11459
+ data: components["schemas"]["RfiCaseDetail"];
11400
11460
  };
11401
11461
  };
11402
11462
  };
11403
- 404: components["responses"]["NotFoundError"];
11463
+ /** @description `VALIDATION_ERROR` — `case_id` is not a UUID */
11464
+ 400: {
11465
+ headers: {
11466
+ [name: string]: unknown;
11467
+ };
11468
+ content: {
11469
+ "application/json": components["schemas"]["ErrorResponse"];
11470
+ };
11471
+ };
11472
+ /** @description `ACCESS_DENIED` — not a member of this account */
11473
+ 403: {
11474
+ headers: {
11475
+ [name: string]: unknown;
11476
+ };
11477
+ content: {
11478
+ "application/json": components["schemas"]["ErrorResponse"];
11479
+ };
11480
+ };
11481
+ /** @description `NOT_FOUND` — no such request on this account */
11482
+ 404: {
11483
+ headers: {
11484
+ [name: string]: unknown;
11485
+ };
11486
+ content: {
11487
+ "application/json": components["schemas"]["ErrorResponse"];
11488
+ };
11489
+ };
11404
11490
  };
11405
11491
  };
11406
11492
  put?: never;
@@ -11422,10 +11508,18 @@ export interface paths {
11422
11508
  put?: never;
11423
11509
  /**
11424
11510
  * Answer a compliance request
11425
- * @description `multipart/form-data` with a `body` text field and up to 10 files under `files`
11426
- * (PDF, JPEG, PNG, WebP, TXT, DOCX, XLSX; 20 MB each). At least one of the two is required.
11511
+ * @description `multipart/form-data` with a `body` text field (up to 20 000 characters) and up to 10
11512
+ * files under `files` (PDF, JPEG, PNG, WebP, TXT, DOCX, XLSX; 20 MB each). At least one
11513
+ * of the two is required.
11514
+ *
11515
+ * Each file is checked by its content, not by the `Content-Type` the browser sends: the
11516
+ * content must be one of these formats and the file name must end in its extension
11517
+ * (`.pdf`, `.jpg`/`.jpeg`, `.png`, `.webp`, `.txt`, `.docx`, `.xlsx`). The file is stored
11518
+ * under the type its content proves.
11519
+ *
11427
11520
  * The request moves to `awaiting_compliance`; answering again while compliance reviews is
11428
- * allowed, and compliance may ask further rounds. Requires the `admin` role on the wallet.
11521
+ * allowed, and compliance may ask further rounds. Requires the `owner` or `admin` role on the
11522
+ * wallet — an `auditor` reads only (`can_reply` is false for them).
11429
11523
  * Do not set `Content-Type` manually — the browser adds the multipart boundary.
11430
11524
  *
11431
11525
  */
@@ -11443,6 +11537,7 @@ export interface paths {
11443
11537
  requestBody: {
11444
11538
  content: {
11445
11539
  "multipart/form-data": {
11540
+ /** @description The answer, up to 20 000 characters */
11446
11541
  body?: string;
11447
11542
  files?: string[];
11448
11543
  };
@@ -11457,32 +11552,59 @@ export interface paths {
11457
11552
  content: {
11458
11553
  "application/json": {
11459
11554
  /** @example true */
11460
- success?: boolean;
11461
- data?: components["schemas"]["RfiMessage"];
11555
+ success: boolean;
11556
+ data: components["schemas"]["RfiMessage"];
11462
11557
  };
11463
11558
  };
11464
11559
  };
11465
- /** @description `VALIDATION_ERROR` (empty answer, too many files), `FILE_TOO_LARGE`, `UNSUPPORTED_FILE_TYPE` or `INVALID_REQUEST` (malformed multipart) */
11560
+ /** @description - `VALIDATION_ERROR` — no text and no files, more than 10 files, text over 20 000 characters, an empty file, `case_id` not a UUID
11561
+ * - `FILE_TOO_LARGE` — a file over 20 MB
11562
+ * - `UNSUPPORTED_FILE_TYPE` — a file whose content is not one of the formats, or does not match its name's extension
11563
+ * - `INVALID_REQUEST` — malformed multipart, or files under a field other than `files`
11564
+ * */
11466
11565
  400: {
11467
11566
  headers: {
11468
11567
  [name: string]: unknown;
11469
11568
  };
11470
- content?: never;
11569
+ content: {
11570
+ "application/json": components["schemas"]["ErrorResponse"];
11571
+ };
11572
+ };
11573
+ /** @description `ACCESS_DENIED` — not a member of this account, or a member who only reads (`auditor`); `can_reply` in the detail is false for them */
11574
+ 403: {
11575
+ headers: {
11576
+ [name: string]: unknown;
11577
+ };
11578
+ content: {
11579
+ "application/json": components["schemas"]["ErrorResponse"];
11580
+ };
11581
+ };
11582
+ /** @description `NOT_FOUND` — no such request on this account */
11583
+ 404: {
11584
+ headers: {
11585
+ [name: string]: unknown;
11586
+ };
11587
+ content: {
11588
+ "application/json": components["schemas"]["ErrorResponse"];
11589
+ };
11471
11590
  };
11472
- 404: components["responses"]["NotFoundError"];
11473
11591
  /** @description `RFI_CLOSED` — the request no longer accepts replies */
11474
11592
  409: {
11475
11593
  headers: {
11476
11594
  [name: string]: unknown;
11477
11595
  };
11478
- content?: never;
11596
+ content: {
11597
+ "application/json": components["schemas"]["ErrorResponse"];
11598
+ };
11479
11599
  };
11480
- /** @description Too many replies */
11600
+ /** @description `RATE_LIMIT_EXCEEDED` — more than 20 replies a minute */
11481
11601
  429: {
11482
11602
  headers: {
11483
11603
  [name: string]: unknown;
11484
11604
  };
11485
- content?: never;
11605
+ content: {
11606
+ "application/json": components["schemas"]["ErrorResponse"];
11607
+ };
11486
11608
  };
11487
11609
  };
11488
11610
  };
@@ -11522,16 +11644,42 @@ export interface paths {
11522
11644
  content: {
11523
11645
  "application/json": {
11524
11646
  /** @example true */
11525
- success?: boolean;
11526
- data?: {
11527
- url?: string;
11647
+ success: boolean;
11648
+ data: {
11649
+ url: string;
11528
11650
  /** @example 120 */
11529
- expires_in?: number;
11651
+ expires_in: number;
11530
11652
  };
11531
11653
  };
11532
11654
  };
11533
11655
  };
11534
- 404: components["responses"]["NotFoundError"];
11656
+ /** @description `VALIDATION_ERROR` — `case_id` or `attachment_id` is not a UUID */
11657
+ 400: {
11658
+ headers: {
11659
+ [name: string]: unknown;
11660
+ };
11661
+ content: {
11662
+ "application/json": components["schemas"]["ErrorResponse"];
11663
+ };
11664
+ };
11665
+ /** @description `ACCESS_DENIED` — not a member of this account */
11666
+ 403: {
11667
+ headers: {
11668
+ [name: string]: unknown;
11669
+ };
11670
+ content: {
11671
+ "application/json": components["schemas"]["ErrorResponse"];
11672
+ };
11673
+ };
11674
+ /** @description `NOT_FOUND` — no such request or file on this account */
11675
+ 404: {
11676
+ headers: {
11677
+ [name: string]: unknown;
11678
+ };
11679
+ content: {
11680
+ "application/json": components["schemas"]["ErrorResponse"];
11681
+ };
11682
+ };
11535
11683
  };
11536
11684
  };
11537
11685
  put?: never;
@@ -15127,6 +15275,279 @@ export interface paths {
15127
15275
  patch?: never;
15128
15276
  trace?: never;
15129
15277
  };
15278
+ "/frontend/wallets/{wallet_id}/kyc-rails": {
15279
+ parameters: {
15280
+ query?: never;
15281
+ header?: never;
15282
+ path?: never;
15283
+ cookie?: never;
15284
+ };
15285
+ /**
15286
+ * KYC rails of the wallet
15287
+ * @description The tenant's KYC rails of the wallet's entity type and the universal ones, each with the wallet's
15288
+ * application on it. A rail is listed while it is active; an archived rail stays listed only when the
15289
+ * wallet is approved on it. `can_submit` tells whether `POST …/kyc-rails/{rail_id}` would be accepted now.
15290
+ *
15291
+ * Replaces the BFF `GET /kyc/{wallet_id}/rails`; items have its shape plus `can_submit`.
15292
+ *
15293
+ * **Access Control**: any member of the wallet except the scoped `user` role. No KYC gate.
15294
+ *
15295
+ */
15296
+ get: {
15297
+ parameters: {
15298
+ query?: never;
15299
+ header?: never;
15300
+ path: {
15301
+ wallet_id: components["parameters"]["KycRailsWalletId"];
15302
+ };
15303
+ cookie?: never;
15304
+ };
15305
+ requestBody?: never;
15306
+ responses: {
15307
+ /** @description Rails of the wallet */
15308
+ 200: {
15309
+ headers: {
15310
+ [name: string]: unknown;
15311
+ };
15312
+ content: {
15313
+ "application/json": {
15314
+ /** @example true */
15315
+ success: boolean;
15316
+ data: components["schemas"]["WalletKycRail"][];
15317
+ count: number;
15318
+ };
15319
+ };
15320
+ };
15321
+ 401: components["responses"]["UnauthorizedError"];
15322
+ 403: components["responses"]["ForbiddenError"];
15323
+ /** @description Wallet not found (NOT_FOUND) */
15324
+ 404: {
15325
+ headers: {
15326
+ [name: string]: unknown;
15327
+ };
15328
+ content?: never;
15329
+ };
15330
+ };
15331
+ };
15332
+ put?: never;
15333
+ post?: never;
15334
+ delete?: never;
15335
+ options?: never;
15336
+ head?: never;
15337
+ patch?: never;
15338
+ trace?: never;
15339
+ };
15340
+ "/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}": {
15341
+ parameters: {
15342
+ query?: never;
15343
+ header?: never;
15344
+ path?: never;
15345
+ cookie?: never;
15346
+ };
15347
+ /**
15348
+ * One KYC rail of the wallet
15349
+ * @description One rail with the wallet's application on it, under the visibility rule of the list.
15350
+ *
15351
+ * Replaces the BFF `GET /kyc/{wallet_id}/rails/{rail_id}`.
15352
+ *
15353
+ * **Access Control**: any member of the wallet except the scoped `user` role. No KYC gate.
15354
+ *
15355
+ */
15356
+ get: {
15357
+ parameters: {
15358
+ query?: never;
15359
+ header?: never;
15360
+ path: {
15361
+ wallet_id: components["parameters"]["KycRailsWalletId"];
15362
+ /** @description `kyc_rails.id` of the wallet's tenant */
15363
+ rail_id: components["parameters"]["KycRailId"];
15364
+ };
15365
+ cookie?: never;
15366
+ };
15367
+ requestBody?: never;
15368
+ responses: {
15369
+ /** @description The rail */
15370
+ 200: {
15371
+ headers: {
15372
+ [name: string]: unknown;
15373
+ };
15374
+ content: {
15375
+ "application/json": components["schemas"]["WalletKycRailResponse"];
15376
+ };
15377
+ };
15378
+ /** @description `rail_id` is not a UUID (VALIDATION_ERROR) */
15379
+ 400: {
15380
+ headers: {
15381
+ [name: string]: unknown;
15382
+ };
15383
+ content?: never;
15384
+ };
15385
+ 401: components["responses"]["UnauthorizedError"];
15386
+ 403: components["responses"]["ForbiddenError"];
15387
+ /** @description No such rail on the wallet's tenant, or an archived rail the wallet is not approved on (RAIL_NOT_FOUND) */
15388
+ 404: {
15389
+ headers: {
15390
+ [name: string]: unknown;
15391
+ };
15392
+ content?: never;
15393
+ };
15394
+ };
15395
+ };
15396
+ put?: never;
15397
+ /**
15398
+ * Submit the wallet to a KYC rail
15399
+ * @description Puts the wallet on the rail, the way compliance does from the panel: a rail whose vendor CORE onboards
15400
+ * itself is submitted here, any other goes through the KYC-admin service. A manual rail waits for
15401
+ * compliance (`WAITING_ON_REVIEW`); a universal rail is approved on the spot. An application the vendor
15402
+ * sent back (`HOLD`, `SOFT_REJECT`) is resubmitted. No body.
15403
+ *
15404
+ * Refused unless the rail has an onboarding implementation (Rail.io rails never do), takes submissions,
15405
+ * fits the entity type, and the entity's KYC is `APPROVED` or `WAITING_ON_REVIEW`. On a tenant without KYC
15406
+ * only the tenant's default universal rail can be submitted without it.
15407
+ *
15408
+ * Replaces the BFF `POST /kyc/{wallet_id}/rails/{rail_id}`.
15409
+ *
15410
+ * **Access Control**: wallet `admin` or `owner`. No KYC gate.
15411
+ *
15412
+ */
15413
+ post: {
15414
+ parameters: {
15415
+ query?: never;
15416
+ header?: never;
15417
+ path: {
15418
+ wallet_id: components["parameters"]["KycRailsWalletId"];
15419
+ /** @description `kyc_rails.id` of the wallet's tenant */
15420
+ rail_id: components["parameters"]["KycRailId"];
15421
+ };
15422
+ cookie?: never;
15423
+ };
15424
+ requestBody?: never;
15425
+ responses: {
15426
+ /** @description The rail after the submission */
15427
+ 200: {
15428
+ headers: {
15429
+ [name: string]: unknown;
15430
+ };
15431
+ content: {
15432
+ "application/json": components["schemas"]["WalletKycRailResponse"];
15433
+ };
15434
+ };
15435
+ /** @description `rail_id` is not a UUID (VALIDATION_ERROR); the rail has no onboarding implementation, or is a universal
15436
+ * rail other than the tenant's default on a tenant without KYC (RAIL_NOT_AVAILABLE); the rail takes no
15437
+ * submissions (RAIL_SUBMIT_UNAVAILABLE); the rail is of the other entity type (RAIL_TYPE_MISMATCH); the
15438
+ * onboarding behind the rail refused the submission (RAIL_SUBMISSION_REJECTED — the vendor's reason is
15439
+ * logged, never returned)
15440
+ * */
15441
+ 400: {
15442
+ headers: {
15443
+ [name: string]: unknown;
15444
+ };
15445
+ content?: never;
15446
+ };
15447
+ 401: components["responses"]["UnauthorizedError"];
15448
+ /** @description Not an admin of the wallet (ACCESS_DENIED), or the entity's KYC is not approved or under review (KYC_NOT_APPROVED) */
15449
+ 403: {
15450
+ headers: {
15451
+ [name: string]: unknown;
15452
+ };
15453
+ content?: never;
15454
+ };
15455
+ /** @description No such rail on the wallet's tenant, or an archived one (RAIL_NOT_FOUND) */
15456
+ 404: {
15457
+ headers: {
15458
+ [name: string]: unknown;
15459
+ };
15460
+ content?: never;
15461
+ };
15462
+ /** @description Already approved on the rail (RAIL_ALREADY_APPROVED), an application is with the vendor
15463
+ * (RAIL_SUBMISSION_IN_PROGRESS), or the same submission is being processed (OPERATION_IN_PROGRESS)
15464
+ * */
15465
+ 409: {
15466
+ headers: {
15467
+ [name: string]: unknown;
15468
+ };
15469
+ content?: never;
15470
+ };
15471
+ /** @description The onboarding behind the rail failed or is unreachable (RAIL_SUBMISSION_FAILED), or the lock service is down (SERVICE_UNAVAILABLE) */
15472
+ 503: {
15473
+ headers: {
15474
+ [name: string]: unknown;
15475
+ };
15476
+ content?: never;
15477
+ };
15478
+ };
15479
+ };
15480
+ delete?: never;
15481
+ options?: never;
15482
+ head?: never;
15483
+ patch?: never;
15484
+ trace?: never;
15485
+ };
15486
+ "/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}/terms-and-conditions": {
15487
+ parameters: {
15488
+ query?: never;
15489
+ header?: never;
15490
+ path?: never;
15491
+ cookie?: never;
15492
+ };
15493
+ get?: never;
15494
+ put?: never;
15495
+ /**
15496
+ * Accept the terms of a KYC rail
15497
+ * @description Records that the wallet accepted the rail's terms (`wallet_rail.terms_confirmed`). The wallet must have
15498
+ * submitted to the rail first. No body.
15499
+ *
15500
+ * Replaces the BFF `POST /kyc/{wallet_id}/rails/{rail_id}/terms-and-conditions`.
15501
+ *
15502
+ * **Access Control**: wallet `admin` or `owner`. No KYC gate.
15503
+ *
15504
+ */
15505
+ post: {
15506
+ parameters: {
15507
+ query?: never;
15508
+ header?: never;
15509
+ path: {
15510
+ wallet_id: components["parameters"]["KycRailsWalletId"];
15511
+ /** @description `kyc_rails.id` of the wallet's tenant */
15512
+ rail_id: components["parameters"]["KycRailId"];
15513
+ };
15514
+ cookie?: never;
15515
+ };
15516
+ requestBody?: never;
15517
+ responses: {
15518
+ /** @description The rail with the terms accepted */
15519
+ 200: {
15520
+ headers: {
15521
+ [name: string]: unknown;
15522
+ };
15523
+ content: {
15524
+ "application/json": components["schemas"]["WalletKycRailResponse"];
15525
+ };
15526
+ };
15527
+ /** @description `rail_id` is not a UUID (VALIDATION_ERROR) */
15528
+ 400: {
15529
+ headers: {
15530
+ [name: string]: unknown;
15531
+ };
15532
+ content?: never;
15533
+ };
15534
+ 401: components["responses"]["UnauthorizedError"];
15535
+ 403: components["responses"]["ForbiddenError"];
15536
+ /** @description No such rail (RAIL_NOT_FOUND), or the wallet never submitted to it (RAIL_NOT_SUBMITTED) */
15537
+ 404: {
15538
+ headers: {
15539
+ [name: string]: unknown;
15540
+ };
15541
+ content?: never;
15542
+ };
15543
+ };
15544
+ };
15545
+ delete?: never;
15546
+ options?: never;
15547
+ head?: never;
15548
+ patch?: never;
15549
+ trace?: never;
15550
+ };
15130
15551
  "/frontend/notifications/test": {
15131
15552
  parameters: {
15132
15553
  query?: never;
@@ -17007,6 +17428,50 @@ export interface components {
17007
17428
  email: string | null;
17008
17429
  phone: string | null;
17009
17430
  };
17431
+ /** @description A terms-and-conditions document of a KYC rail. */
17432
+ WalletKycRailTerms: {
17433
+ title: string;
17434
+ description: string | null;
17435
+ link: string | null;
17436
+ };
17437
+ /** @description Something the user has to do with the rail vendor: `verification` — a vendor self-verification link (`type` names it, `full_name` the person it is for); `kyb_onboarding` — the vendor-hosted onboarding link. */
17438
+ WalletKycRailExtraAction: {
17439
+ /** @enum {string} */
17440
+ action: "verification" | "kyb_onboarding";
17441
+ type: string;
17442
+ full_name: string | null;
17443
+ /** Format: uri */
17444
+ url: string;
17445
+ };
17446
+ /** @description The wallet's application on the rail. `null` on the rail while the wallet never submitted to it. */
17447
+ WalletKycRailApplication: {
17448
+ /**
17449
+ * @description `APPROVED` — onboarded. `PROCESSING` / `PENDING` — with the vendor. `HOLD` / `SOFT_REJECT` — the vendor asked for a resubmission. `WAITING_ON_REVIEW` — a manual rail waiting for compliance.
17450
+ * @enum {string}
17451
+ */
17452
+ status: "APPROVED" | "DECLINED" | "PENDING" | "PROCESSING" | "HOLD" | "NEEDS_ATTENTION" | "DOUBLE" | "SOFT_REJECT" | "REJECT" | "UNVERIFIED" | "WAITING_ON_UBOS" | "WAITING_ON_REVIEW";
17453
+ /** @description Neutral text for the status, for display. Never the vendor's or compliance's own words. */
17454
+ message: string | null;
17455
+ terms_confirmed: boolean;
17456
+ /** @description Vendor links to follow. Always empty for a caller below wallet `admin` — the links are one-time capabilities. */
17457
+ extra_actions: components["schemas"]["WalletKycRailExtraAction"][];
17458
+ /** @description The terms the rail had when the wallet first submitted — what the user accepted. */
17459
+ terms_and_conditions: components["schemas"]["WalletKycRailTerms"][];
17460
+ };
17461
+ /** @description A KYC rail of the wallet's tenant with the wallet's application on it. Same shape as the BFF `GET /kyc/{wallet_id}/rails` item, plus `can_submit`. Vendor texts are not returned: `wallet_rail.message` is a neutral text for the status. */
17462
+ WalletKycRail: {
17463
+ /** Format: uuid */
17464
+ id: string;
17465
+ code: string | null;
17466
+ name: string;
17467
+ /** @description The rail takes submissions at all. */
17468
+ is_submit_available: boolean;
17469
+ /** @description The wallet can submit to the rail right now: it has an onboarding implementation, is of the entity's type or universal, the entity's KYC is approved or under review, and no application is approved or with the vendor. */
17470
+ can_submit: boolean;
17471
+ /** @description The rail's active terms, in display order. */
17472
+ terms_and_conditions: components["schemas"]["WalletKycRailTerms"][];
17473
+ wallet_rail: components["schemas"]["WalletKycRailApplication"] | null;
17474
+ };
17010
17475
  /** @description One aggregated crypto balance of the wallet: every balance row sharing the same symbol is merged into a single entry, and `details[]` keeps the per-row breakdown. */
17011
17476
  WalletBalanceEntry: {
17012
17477
  symbol: string;
@@ -17864,87 +18329,97 @@ export interface components {
17864
18329
  };
17865
18330
  RfiCase: {
17866
18331
  /** Format: uuid */
17867
- id?: string;
18332
+ id: string;
17868
18333
  /**
17869
18334
  * @description Human-facing id — quoted in the notification email
17870
18335
  * @example RFI-000042
17871
18336
  */
17872
- reference?: string;
18337
+ reference: string;
17873
18338
  /** @enum {string} */
17874
- type?: "onboarding" | "transaction" | "ongoing";
18339
+ type: "onboarding" | "transaction" | "ongoing";
18340
+ /**
18341
+ * @description What the request is about — the subject compliance wrote when opening it. Show it as is above the conversation; `messages` hold the question itself.
18342
+ * @example Incoming payments of $10,970 and $7,500
18343
+ */
18344
+ subject: string;
17875
18345
  /**
17876
18346
  * @description `action_required` — compliance asked and waits for the client; `awaiting_compliance` — the client answered, compliance is reviewing; `closed` — no longer accepts replies.
17877
18347
  * @enum {string}
17878
18348
  */
17879
- status?: "action_required" | "awaiting_compliance" | "closed";
18349
+ status: "action_required" | "awaiting_compliance" | "closed";
17880
18350
  /**
17881
18351
  * Format: date-time
17882
18352
  * @description When the answer is due
17883
18353
  */
17884
- due_at?: string | null;
18354
+ due_at: string | null;
17885
18355
  /** @description True only while `action_required` and past `due_at` (red banner) */
17886
- overdue?: boolean;
18356
+ overdue: boolean;
17887
18357
  /** @description One of the covered transactions is held until the request closes */
17888
- holds_transaction?: boolean;
18358
+ holds_transaction: boolean;
17889
18359
  /** @description The account is on hold while the request is open */
17890
- holds_account?: boolean;
18360
+ holds_account: boolean;
17891
18361
  /** @description How many transactions the request covers */
17892
- transactions_count?: number;
18362
+ transactions_count: number;
17893
18363
  /** @description The last message of the conversation, for the card — null while nothing is visible yet */
17894
- last_message?: {
18364
+ last_message: {
17895
18365
  /** @enum {string} */
17896
- author?: "compliance" | "client";
18366
+ author: "compliance" | "client";
17897
18367
  /** @description One line of the message, up to 140 characters, cut at a word */
17898
- preview?: string | null;
18368
+ preview: string | null;
17899
18369
  /** Format: date-time */
17900
- created_at?: string;
18370
+ created_at: string;
17901
18371
  } | null;
17902
18372
  /** Format: date-time */
17903
- created_at?: string;
18373
+ created_at: string;
17904
18374
  /** Format: date-time */
17905
- updated_at?: string;
18375
+ updated_at: string;
17906
18376
  /** Format: date-time */
17907
- closed_at?: string | null;
18377
+ closed_at: string | null;
17908
18378
  };
17909
18379
  RfiAttachment: {
17910
18380
  /** Format: uuid */
17911
- id?: string;
17912
- file_name?: string;
17913
- content_type?: string | null;
17914
- size_bytes?: number | null;
18381
+ id: string;
18382
+ file_name: string;
18383
+ /** @description The type the file's content proves (for files sent in the app); null only on some files that came by email */
18384
+ content_type: string | null;
18385
+ size_bytes: number | null;
17915
18386
  /** Format: date-time */
17916
- created_at?: string;
18387
+ created_at: string;
17917
18388
  };
17918
18389
  RfiMessage: {
17919
18390
  /** Format: uuid */
17920
- id?: string;
17921
- /** @enum {string} */
17922
- author?: "compliance" | "client";
18391
+ id: string;
17923
18392
  /**
17924
- * @description The analyst's signature on a compliance message — first name and last initial, from the analyst's current name. Null on the client's own messages (render them as "You") and when no name is on record.
17925
- * @example Polina S
18393
+ * @description Which side wrote the message. The analyst is never named — show a placeholder (e.g. "Compliance team") for `compliance` and "You" for `client`.
18394
+ * @enum {string}
17926
18395
  */
17927
- author_name?: string | null;
17928
- body?: string;
17929
- attachments?: components["schemas"]["RfiAttachment"][];
18396
+ author: "compliance" | "client";
18397
+ body: string;
18398
+ attachments: components["schemas"]["RfiAttachment"][];
17930
18399
  /** Format: date-time */
17931
- created_at?: string;
18400
+ created_at: string;
17932
18401
  };
17933
18402
  RfiTransaction: {
17934
- order_uuid?: string;
17935
- order_type?: string | null;
17936
- status?: string | null;
17937
- amount_from?: number | null;
17938
- amount_to?: number | null;
18403
+ order_uuid: string;
18404
+ order_type: string | null;
18405
+ status: string | null;
18406
+ amount_from: number | null;
18407
+ amount_to: number | null;
17939
18408
  /** Format: date-time */
17940
- created_at?: string | null;
18409
+ created_at: string | null;
17941
18410
  };
17942
18411
  RfiCaseDetail: components["schemas"]["RfiCase"] & {
17943
- can_reply?: boolean;
18412
+ /** @description Whether YOU may answer this request now: it is open (`action_required` or `awaiting_compliance`) and your role on the account writes — `owner` or `admin`. False on a closed request and for an `auditor`, who reads the conversation only: show it read-only, without the answer box. Otherwise `POST …/messages` answers 409 `RFI_CLOSED` or 403 `ACCESS_DENIED` respectively. */
18413
+ can_reply: boolean;
17944
18414
  /** @description The conversation, oldest first */
17945
- messages?: components["schemas"]["RfiMessage"][];
17946
- /** @description Every transaction the request covers, in the order compliance linked them */
17947
- transactions?: components["schemas"]["RfiTransaction"][];
18415
+ messages: components["schemas"]["RfiMessage"][];
18416
+ /** @description Every transaction the request covers, in the order compliance linked them. For the full table (currencies, paging) open the order list with `filters=[{"rfi_case_id":"<id>"}]`. */
18417
+ transactions: components["schemas"]["RfiTransaction"][];
18418
+ };
18419
+ WalletKycRailResponse: {
18420
+ /** @example true */
18421
+ success: boolean;
18422
+ data: components["schemas"]["WalletKycRail"];
17948
18423
  };
17949
18424
  };
17950
18425
  responses: {
@@ -18021,6 +18496,9 @@ export interface components {
18021
18496
  /** @description The account the requests are about. Requests and their conversations are kept per account. */
18022
18497
  RfiWalletId: string;
18023
18498
  RfiCaseId: string;
18499
+ KycRailsWalletId: string;
18500
+ /** @description `kyc_rails.id` of the wallet's tenant */
18501
+ KycRailId: string;
18024
18502
  };
18025
18503
  requestBodies: never;
18026
18504
  headers: never;
@@ -6513,6 +6513,8 @@ export interface paths {
6513
6513
  * Accepts a single value or a comma-separated list, e.g. `status=ACTIVE,CANCELED`.
6514
6514
  * */
6515
6515
  status?: ("ACTIVE" | "INACTIVE" | "SUSPENDED" | "CANCELED")[];
6516
+ /** @description Only cards issued to this cardholder. */
6517
+ cardholder_id?: string;
6516
6518
  sub_account_type?: "balance" | "prepaid";
6517
6519
  offset?: number;
6518
6520
  limit?: number;
@@ -816,6 +816,33 @@ export declare namespace API {
816
816
  }
817
817
  export {};
818
818
  }
819
+ namespace KycRails {
820
+ type ListRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails'];
821
+ type RailRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}'];
822
+ type TermsRoot = pathsV1Frontend['/frontend/wallets/{wallet_id}/kyc-rails/{rail_id}/terms-and-conditions'];
823
+ export type WalletKycRail = componentsV1Frontend['schemas']['WalletKycRail'];
824
+ export type WalletKycRailApplication = componentsV1Frontend['schemas']['WalletKycRailApplication'];
825
+ export type WalletKycRailExtraAction = componentsV1Frontend['schemas']['WalletKycRailExtraAction'];
826
+ export type WalletKycRailTerms = componentsV1Frontend['schemas']['WalletKycRailTerms'];
827
+ export type RailStatus = WalletKycRailApplication['status'];
828
+ export namespace List {
829
+ type Request = ListRoot['get']['parameters']['path'];
830
+ type Response = ListRoot['get']['responses'][200]['content']['application/json'];
831
+ }
832
+ export namespace Get {
833
+ type Request = RailRoot['get']['parameters']['path'];
834
+ type Response = RailRoot['get']['responses'][200]['content']['application/json'];
835
+ }
836
+ export namespace Submit {
837
+ type Request = RailRoot['post']['parameters']['path'];
838
+ type Response = RailRoot['post']['responses'][200]['content']['application/json'];
839
+ }
840
+ export namespace ConfirmTerms {
841
+ type Request = TermsRoot['post']['parameters']['path'];
842
+ type Response = TermsRoot['post']['responses'][200]['content']['application/json'];
843
+ }
844
+ export {};
845
+ }
819
846
  namespace Reference {
820
847
  namespace ExchangeRates {
821
848
  type ExchangeRatesRoot = pathsV1Frontend['/frontend/reference/exchange_rates'];
@@ -1666,8 +1693,7 @@ export declare namespace API {
1666
1693
  * transactions, answered by the account's team with text and files.
1667
1694
  *
1668
1695
  * Every path is scoped by `wallet_id`, so each Request carries it. Responses are the frontend
1669
- * `{ success, data }` envelope as the spec declares it. Every `Rfi*` field is optional for now
1670
- * because the spec declares no `required`; the types tighten on the regeneration that adds it.
1696
+ * `{ success, data }` envelope as the spec declares it.
1671
1697
  */
1672
1698
  namespace Rfi {
1673
1699
  type CasesRoot = pathsV1Frontend['/frontend/rfi/{wallet_id}'];
@@ -1679,12 +1705,17 @@ export declare namespace API {
1679
1705
  export type Message = componentsV1Frontend['schemas']['RfiMessage'];
1680
1706
  export type Attachment = componentsV1Frontend['schemas']['RfiAttachment'];
1681
1707
  export type Transaction = componentsV1Frontend['schemas']['RfiTransaction'];
1682
- export type CaseStatus = NonNullable<Case['status']>;
1683
- export type CaseType = NonNullable<Case['type']>;
1684
- export type MessageAuthor = NonNullable<Message['author']>;
1708
+ /**
1709
+ * The body of every RFI error response (`400`, `403`, `404`, `409`, `429`). The client rejects with
1710
+ * the `AxiosError`, so read it from `response.data`; the RFI code is its `error.code`.
1711
+ */
1712
+ export type ErrorResponse = componentsV1Frontend['schemas']['ErrorResponse'];
1713
+ export type CaseStatus = Case['status'];
1714
+ export type CaseType = Case['type'];
1715
+ export type MessageAuthor = Message['author'];
1685
1716
  /** The list's `status` filter. `open` = `action_required` + `awaiting_compliance`; no case has it. */
1686
1717
  export type ListStatus = NonNullable<List.Request['status']>;
1687
- export type Summary = NonNullable<NonNullable<List.Response['data']>['summary']>;
1718
+ export type Summary = List.Response['data']['summary'];
1688
1719
  export namespace List {
1689
1720
  type Request = CasesRoot['get']['parameters']['path'] & NonNullable<CasesRoot['get']['parameters']['query']>;
1690
1721
  type Response = CasesRoot['get']['responses']['200']['content']['application/json'];
@@ -2395,7 +2426,13 @@ export declare namespace API {
2395
2426
  * is refused with 400.
2396
2427
  */
2397
2428
  type OrderListMassPayoutFilter = Record<'mass_payout_id', string>;
2398
- type OrderListFilter = OrderListStatusFilter | OrderListOrderTypeFilter | OrderListFromUuidFilter | OrderListToUuidFilter | OrderListMassPayoutFilter;
2429
+ /**
2430
+ * Narrows the feed to the orders a compliance request covers — the same ones as
2431
+ * `transactions` in the request's detail, closed requests included. A single uuid only
2432
+ * (not an array); a non-uuid value is refused with 400.
2433
+ */
2434
+ type OrderListRfiCaseFilter = Record<'rfi_case_id', string>;
2435
+ type OrderListFilter = OrderListStatusFilter | OrderListOrderTypeFilter | OrderListFromUuidFilter | OrderListToUuidFilter | OrderListMassPayoutFilter | OrderListRfiCaseFilter;
2399
2436
  interface Request {
2400
2437
  wallet_uuid: string;
2401
2438
  offset?: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "squarefi-bff-api-module",
3
- "version": "1.36.78",
3
+ "version": "1.36.80",
4
4
  "description": "Squarefi BFF API client module",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",