@artu-ai/compliance-sdk 0.5.4 → 0.6.1

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 (73) hide show
  1. package/dist/errors/validation.d.ts.map +1 -1
  2. package/dist/errors/validation.js +19 -1
  3. package/dist/resources/addresses.d.ts +29 -2
  4. package/dist/resources/addresses.d.ts.map +1 -1
  5. package/dist/resources/addresses.js +65 -4
  6. package/dist/resources/bank-accounts.d.ts +29 -2
  7. package/dist/resources/bank-accounts.d.ts.map +1 -1
  8. package/dist/resources/bank-accounts.js +65 -4
  9. package/dist/resources/clients.d.ts +59 -4
  10. package/dist/resources/clients.d.ts.map +1 -1
  11. package/dist/resources/clients.js +85 -8
  12. package/dist/resources/contact-methods.d.ts +29 -2
  13. package/dist/resources/contact-methods.d.ts.map +1 -1
  14. package/dist/resources/contact-methods.js +65 -4
  15. package/dist/resources/documents.d.ts +24 -19
  16. package/dist/resources/documents.d.ts.map +1 -1
  17. package/dist/resources/documents.js +51 -1
  18. package/dist/resources/mex/actividad-vulnerable/avi/clients.d.ts +31 -5
  19. package/dist/resources/mex/actividad-vulnerable/avi/clients.d.ts.map +1 -1
  20. package/dist/resources/mex/actividad-vulnerable/avi/clients.js +65 -9
  21. package/dist/resources/mex/actividad-vulnerable/avi/reports.d.ts +26 -2
  22. package/dist/resources/mex/actividad-vulnerable/avi/reports.d.ts.map +1 -1
  23. package/dist/resources/mex/actividad-vulnerable/avi/reports.js +58 -4
  24. package/dist/resources/mex/actividad-vulnerable/avi/transactions.d.ts +26 -2
  25. package/dist/resources/mex/actividad-vulnerable/avi/transactions.d.ts.map +1 -1
  26. package/dist/resources/mex/actividad-vulnerable/avi/transactions.js +58 -4
  27. package/dist/resources/mex/actividad-vulnerable/jys/clients.d.ts +26 -2
  28. package/dist/resources/mex/actividad-vulnerable/jys/clients.d.ts.map +1 -1
  29. package/dist/resources/mex/actividad-vulnerable/jys/clients.js +58 -4
  30. package/dist/resources/mex/actividad-vulnerable/jys/reports.d.ts +26 -2
  31. package/dist/resources/mex/actividad-vulnerable/jys/reports.d.ts.map +1 -1
  32. package/dist/resources/mex/actividad-vulnerable/jys/reports.js +58 -4
  33. package/dist/resources/mex/actividad-vulnerable/jys/transactions.d.ts +26 -2
  34. package/dist/resources/mex/actividad-vulnerable/jys/transactions.d.ts.map +1 -1
  35. package/dist/resources/mex/actividad-vulnerable/jys/transactions.js +58 -4
  36. package/dist/resources/mex/actividad-vulnerable/tsc/clients.d.ts +26 -2
  37. package/dist/resources/mex/actividad-vulnerable/tsc/clients.d.ts.map +1 -1
  38. package/dist/resources/mex/actividad-vulnerable/tsc/clients.js +58 -4
  39. package/dist/resources/mex/actividad-vulnerable/tsc/reports.d.ts +26 -2
  40. package/dist/resources/mex/actividad-vulnerable/tsc/reports.d.ts.map +1 -1
  41. package/dist/resources/mex/actividad-vulnerable/tsc/reports.js +58 -4
  42. package/dist/resources/mex/actividad-vulnerable/tsc/transactions.d.ts +26 -2
  43. package/dist/resources/mex/actividad-vulnerable/tsc/transactions.d.ts.map +1 -1
  44. package/dist/resources/mex/actividad-vulnerable/tsc/transactions.js +58 -4
  45. package/dist/resources/mex/addresses.d.ts +26 -2
  46. package/dist/resources/mex/addresses.d.ts.map +1 -1
  47. package/dist/resources/mex/addresses.js +66 -5
  48. package/dist/resources/mex/bank-accounts.d.ts +13 -2
  49. package/dist/resources/mex/bank-accounts.d.ts.map +1 -1
  50. package/dist/resources/mex/bank-accounts.js +17 -3
  51. package/dist/resources/mex/clients.d.ts +39 -11
  52. package/dist/resources/mex/clients.d.ts.map +1 -1
  53. package/dist/resources/mex/clients.js +82 -20
  54. package/dist/resources/mex/reports.d.ts +37 -12
  55. package/dist/resources/mex/reports.d.ts.map +1 -1
  56. package/dist/resources/mex/reports.js +71 -21
  57. package/dist/resources/mex/transactions.d.ts +38 -10
  58. package/dist/resources/mex/transactions.d.ts.map +1 -1
  59. package/dist/resources/mex/transactions.js +73 -20
  60. package/dist/resources/reports.d.ts +29 -2
  61. package/dist/resources/reports.d.ts.map +1 -1
  62. package/dist/resources/reports.js +57 -3
  63. package/dist/resources/transactions.d.ts +29 -2
  64. package/dist/resources/transactions.d.ts.map +1 -1
  65. package/dist/resources/transactions.js +57 -3
  66. package/dist/sdk/ComplianceSDK.d.ts.map +1 -1
  67. package/dist/sdk/ComplianceSDK.js +2 -0
  68. package/dist/utils/trpc-client.d.ts +1 -19879
  69. package/dist/utils/trpc-client.d.ts.map +1 -1
  70. package/dist/utils/upload.d.ts +6 -0
  71. package/dist/utils/upload.d.ts.map +1 -1
  72. package/dist/utils/upload.js +2 -1
  73. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAMzC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,WAAW,EAAE,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAClD;;OAEG;IACH,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAC;gBAE9B,MAAM,EAAE,eAAe,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM;IAUzD;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe;IASzE;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAUtC;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;;;;;;;;;;OAWG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAa7B"}
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/errors/validation.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAMzC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,IAAI,EAAE,WAAW,EAAE,CAAC;IAEpB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,eAAgB,SAAQ,eAAe;IAClD;;OAEG;IACH,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAC;gBAE9B,MAAM,EAAE,eAAe,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM;IAUzD;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,eAAe;IASzE;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAUtC;;;;;OAKG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC;;;;;;;;;;;OAWG;IACH,aAAa,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAYvC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;CAmC7B"}
@@ -123,7 +123,25 @@ export class ValidationError extends ComplianceError {
123
123
  const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
124
124
  return `Validation failed: ${path}${issue.message}`;
125
125
  }
126
+ // Handle undefined element edge case
127
+ return "Validation failed: undefined";
126
128
  }
127
- return `Validation failed with ${issues.length} errors`;
129
+ const formatIssue = (issue) => {
130
+ if (!issue)
131
+ return " - undefined";
132
+ const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
133
+ return ` - ${path}${issue.message}`;
134
+ };
135
+ if (issues.length <= 5) {
136
+ // Show all errors in a formatted list
137
+ const errorList = issues.map(formatIssue).join("\n");
138
+ return `Validation failed with ${issues.length} errors:\n${errorList}`;
139
+ }
140
+ // More than 5 errors: show first 4, hidden count, and last error
141
+ const firstFour = issues.slice(0, 4).map(formatIssue).join("\n");
142
+ const hiddenCount = issues.length - 5;
143
+ const lastIssue = issues[issues.length - 1];
144
+ const lastError = lastIssue ? formatIssue(lastIssue) : "";
145
+ return `Validation failed with ${issues.length} errors:\n${firstFour}\n ... ${hiddenCount} more error${hiddenCount === 1 ? "" : "s"}\n${lastError}`;
128
146
  }
129
147
  }
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Manages physical and mailing addresses for clients.
5
5
  */
6
- import type { CreateAddressInput, UpdateAddressInput, AddressFilter, AddressSort, AddressType, ListOptions, PaginatedResponse, AtomicBatchResult, PartialBatchResult, SyncItem, SyncResult } from "@artu-ai/shared";
6
+ import type { CreateAddressInput, UpdateAddressInput, UpsertAddressInput, AddressFilter, AddressSort, AddressType, ListOptions, PaginatedResponse, AtomicBatchResult, PartialBatchResult, SyncItem, SyncResult, UpsertResult } from "@artu-ai/shared";
7
7
  import { BaseResource } from "./base";
8
8
  import { Address, type AddressData } from "../models/Address";
9
9
  /**
@@ -85,7 +85,11 @@ export declare class AddressesResource<TSort = AddressSort> extends BaseResource
85
85
  /**
86
86
  * Returns an async iterator over all addresses matching the filter.
87
87
  */
88
- iterate(filter?: AddressFilter): AsyncGenerator<Address, void, undefined>;
88
+ iterate(options?: {
89
+ filter?: AddressFilter;
90
+ sort?: TSort;
91
+ pageSize?: number;
92
+ }): AsyncGenerator<Address, void, undefined>;
89
93
  /**
90
94
  * Creates multiple addresses in a single request.
91
95
  *
@@ -158,6 +162,29 @@ export declare class AddressesResource<TSort = AddressSort> extends BaseResource
158
162
  sync(clientId: string, items: SyncItem<UpdateAddressInput>[], options?: {
159
163
  replaceMode?: boolean;
160
164
  }): Promise<SyncResult<Address>>;
165
+ /**
166
+ * Creates or updates an address by externalId.
167
+ *
168
+ * If an address with the given externalId exists, it will be updated.
169
+ * Otherwise, a new address will be created.
170
+ *
171
+ * @param data - Address upsert data (must include externalId and clientId)
172
+ * @returns The created or updated address with action indicator
173
+ */
174
+ upsertByExternalId(data: UpsertAddressInput): Promise<UpsertResult<Address>>;
175
+ /**
176
+ * Creates or updates multiple addresses by externalId in a single request.
177
+ *
178
+ * @param addresses - Array of address upsert data (each must include externalId and clientId)
179
+ * @param options - Batch options (atomic: true by default)
180
+ * @returns Atomic result with data array, or partial result with succeeded/failed
181
+ */
182
+ upsertManyByExternalId(addresses: UpsertAddressInput[], options?: {
183
+ atomic?: true;
184
+ }): Promise<AtomicBatchResult<UpsertResult<Address>>>;
185
+ upsertManyByExternalId(addresses: UpsertAddressInput[], options: {
186
+ atomic: false;
187
+ }): Promise<PartialBatchResult<UpsertResult<Address>>>;
161
188
  /**
162
189
  * Gets the primary address for a client
163
190
  *
@@ -1 +1 @@
1
- {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../src/resources/addresses.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"addresses.d.ts","sourceRoot":"","sources":["../../src/resources/addresses.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Manages physical and mailing addresses for clients.
5
5
  */
6
6
  import { z } from "zod";
7
- import { createAddressInputSchema, updateAddressInputSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
7
+ import { createAddressInputSchema, updateAddressInputSchema, upsertAddressInputSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
8
8
  import { BaseResource } from "./base";
9
9
  import { Address } from "../models/Address";
10
10
  // ===========================
@@ -123,8 +123,12 @@ export class AddressesResource extends BaseResource {
123
123
  /**
124
124
  * Returns an async iterator over all addresses matching the filter.
125
125
  */
126
- iterate(filter) {
127
- return this.createIterator({ filter });
126
+ iterate(options) {
127
+ return this.createIterator({
128
+ filter: options?.filter,
129
+ sort: options?.sort,
130
+ pageSize: options?.pageSize,
131
+ });
128
132
  }
129
133
  async createMany(addresses, options = {}) {
130
134
  const atomic = options.atomic ?? true;
@@ -173,7 +177,14 @@ export class AddressesResource extends BaseResource {
173
177
  }
174
178
  }
175
179
  async sync(clientId, items, options) {
176
- const validated = this.validate(z.array(replaceSyncItemSchema(createAddressInputSchema, updateAddressInputSchema)), items);
180
+ // Inject clientId into create items (items without id) before validation
181
+ const itemsWithClientId = items.map((item) => {
182
+ if (!("id" in item) || !item.id) {
183
+ return { ...item, clientId };
184
+ }
185
+ return item;
186
+ });
187
+ const validated = this.validate(z.array(replaceSyncItemSchema(createAddressInputSchema, updateAddressInputSchema)), itemsWithClientId);
177
188
  const response = await this.execute(() => this.trpc.addresses.sync.mutate({
178
189
  clientId,
179
190
  items: validated,
@@ -186,6 +197,56 @@ export class AddressesResource extends BaseResource {
186
197
  };
187
198
  }
188
199
  // ─────────────────────────────────────────────────────────────────
200
+ // Upsert Operations
201
+ // ─────────────────────────────────────────────────────────────────
202
+ /**
203
+ * Creates or updates an address by externalId.
204
+ *
205
+ * If an address with the given externalId exists, it will be updated.
206
+ * Otherwise, a new address will be created.
207
+ *
208
+ * @param data - Address upsert data (must include externalId and clientId)
209
+ * @returns The created or updated address with action indicator
210
+ */
211
+ async upsertByExternalId(data) {
212
+ const validated = this.validate(upsertAddressInputSchema, data);
213
+ const response = await this.execute(() => this.trpc.addresses.upsertByExternalId.mutate(validated));
214
+ return {
215
+ data: this.instantiate(response.data),
216
+ action: response.action,
217
+ };
218
+ }
219
+ async upsertManyByExternalId(addresses, options = {}) {
220
+ const atomic = options.atomic ?? true;
221
+ const validated = this.validate(z.array(upsertAddressInputSchema), addresses);
222
+ const response = await this.execute(() => this.trpc.addresses.upsertManyByExternalId.mutate({
223
+ items: validated,
224
+ atomic,
225
+ }));
226
+ if (response.atomic) {
227
+ return {
228
+ atomic: true,
229
+ data: response.data.map((item) => ({
230
+ data: this.instantiate(item.data),
231
+ action: item.action,
232
+ })),
233
+ };
234
+ }
235
+ else {
236
+ return {
237
+ atomic: false,
238
+ succeeded: response.succeeded.map((item) => ({
239
+ index: item.index,
240
+ data: {
241
+ data: this.instantiate(item.data.data),
242
+ action: item.data.action,
243
+ },
244
+ })),
245
+ failed: response.failed,
246
+ };
247
+ }
248
+ }
249
+ // ─────────────────────────────────────────────────────────────────
189
250
  // Helper Methods
190
251
  // ─────────────────────────────────────────────────────────────────
191
252
  /**
@@ -6,7 +6,7 @@
6
6
  * This is the base (unscoped) resource. For jurisdiction-scoped SDKs, use:
7
7
  * - MexBankAccountsResource - Mexico-scoped with flattened CLABE fields
8
8
  */
9
- import type { CreateBankAccountInput, UpdateBankAccountInput, BankAccountFilter, BankAccountSort, PaginatedResponse, ListOptions, AtomicBatchResult, PartialBatchResult, SyncItem, SyncResult } from "@artu-ai/shared";
9
+ import type { CreateBankAccountInput, UpdateBankAccountInput, UpsertBankAccountInput, BankAccountFilter, BankAccountSort, PaginatedResponse, ListOptions, AtomicBatchResult, PartialBatchResult, SyncItem, SyncResult, UpsertResult } from "@artu-ai/shared";
10
10
  import { BaseResource } from "./base";
11
11
  import { BankAccount, type BankAccountData } from "../models/BankAccount";
12
12
  /**
@@ -73,7 +73,11 @@ export declare class BankAccountsResource<TSort = BankAccountSort> extends BaseR
73
73
  /**
74
74
  * Returns an async iterator over all bank accounts matching the filter.
75
75
  */
76
- iterate(filter?: BankAccountFilter): AsyncGenerator<BankAccount, void, undefined>;
76
+ iterate(options?: {
77
+ filter?: BankAccountFilter;
78
+ sort?: TSort;
79
+ pageSize?: number;
80
+ }): AsyncGenerator<BankAccount, void, undefined>;
77
81
  /**
78
82
  * Gets the primary bank account for a client.
79
83
  *
@@ -125,6 +129,29 @@ export declare class BankAccountsResource<TSort = BankAccountSort> extends BaseR
125
129
  }[], options: {
126
130
  atomic: false;
127
131
  }): Promise<PartialBatchResult<BankAccount>>;
132
+ /**
133
+ * Creates or updates a bank account by externalId.
134
+ *
135
+ * If a bank account with the given externalId exists, it will be updated.
136
+ * Otherwise, a new bank account will be created.
137
+ *
138
+ * @param data - Bank account upsert data (must include externalId and clientId)
139
+ * @returns The created or updated bank account with action indicator
140
+ */
141
+ upsertByExternalId(data: UpsertBankAccountInput): Promise<UpsertResult<BankAccount>>;
142
+ /**
143
+ * Creates or updates multiple bank accounts by externalId in a single request.
144
+ *
145
+ * @param accounts - Array of bank account upsert data (each must include externalId and clientId)
146
+ * @param options - Batch options (atomic: true by default)
147
+ * @returns Atomic result with data array, or partial result with succeeded/failed
148
+ */
149
+ upsertManyByExternalId(accounts: UpsertBankAccountInput[], options?: {
150
+ atomic?: true;
151
+ }): Promise<AtomicBatchResult<UpsertResult<BankAccount>>>;
152
+ upsertManyByExternalId(accounts: UpsertBankAccountInput[], options: {
153
+ atomic: false;
154
+ }): Promise<PartialBatchResult<UpsertResult<BankAccount>>>;
128
155
  /**
129
156
  * Syncs bank accounts for a client - handles create, update, and delete in bulk.
130
157
  *
@@ -1 +1 @@
1
- {"version":3,"file":"bank-accounts.d.ts","sourceRoot":"","sources":["../../src/resources/bank-accounts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bank-accounts.d.ts","sourceRoot":"","sources":["../../src/resources/bank-accounts.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * - MexBankAccountsResource - Mexico-scoped with flattened CLABE fields
8
8
  */
9
9
  import { z } from "zod";
10
- import { createBankAccountInputSchema, updateBankAccountInputSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
10
+ import { createBankAccountInputSchema, updateBankAccountInputSchema, upsertBankAccountInputSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
11
11
  import { BaseResource } from "./base";
12
12
  import { BankAccount } from "../models/BankAccount";
13
13
  // ===========================
@@ -111,8 +111,12 @@ export class BankAccountsResource extends BaseResource {
111
111
  /**
112
112
  * Returns an async iterator over all bank accounts matching the filter.
113
113
  */
114
- iterate(filter) {
115
- return this.createIterator({ filter });
114
+ iterate(options) {
115
+ return this.createIterator({
116
+ filter: options?.filter,
117
+ sort: options?.sort,
118
+ pageSize: options?.pageSize,
119
+ });
116
120
  }
117
121
  // ─────────────────────────────────────────────────────────────────
118
122
  // Convenience Methods
@@ -194,8 +198,65 @@ export class BankAccountsResource extends BaseResource {
194
198
  };
195
199
  }
196
200
  }
201
+ // ─────────────────────────────────────────────────────────────────
202
+ // Upsert Operations
203
+ // ─────────────────────────────────────────────────────────────────
204
+ /**
205
+ * Creates or updates a bank account by externalId.
206
+ *
207
+ * If a bank account with the given externalId exists, it will be updated.
208
+ * Otherwise, a new bank account will be created.
209
+ *
210
+ * @param data - Bank account upsert data (must include externalId and clientId)
211
+ * @returns The created or updated bank account with action indicator
212
+ */
213
+ async upsertByExternalId(data) {
214
+ const validated = this.validate(upsertBankAccountInputSchema, data);
215
+ const response = await this.execute(() => this.trpc.bankAccounts.upsertByExternalId.mutate(validated));
216
+ return {
217
+ data: this.instantiate(response.data),
218
+ action: response.action,
219
+ };
220
+ }
221
+ async upsertManyByExternalId(accounts, options = {}) {
222
+ const atomic = options.atomic ?? true;
223
+ const validated = this.validate(z.array(upsertBankAccountInputSchema), accounts);
224
+ const response = await this.execute(() => this.trpc.bankAccounts.upsertManyByExternalId.mutate({
225
+ items: validated,
226
+ atomic,
227
+ }));
228
+ if (response.atomic) {
229
+ return {
230
+ atomic: true,
231
+ data: response.data.map((item) => ({
232
+ data: this.instantiate(item.data),
233
+ action: item.action,
234
+ })),
235
+ };
236
+ }
237
+ else {
238
+ return {
239
+ atomic: false,
240
+ succeeded: response.succeeded.map((item) => ({
241
+ index: item.index,
242
+ data: {
243
+ data: this.instantiate(item.data.data),
244
+ action: item.data.action,
245
+ },
246
+ })),
247
+ failed: response.failed,
248
+ };
249
+ }
250
+ }
197
251
  async sync(clientId, items, options) {
198
- const validated = this.validate(z.array(replaceSyncItemSchema(createBankAccountInputSchema, updateBankAccountInputSchema)), items);
252
+ // Inject clientId into create items (items without id) before validation
253
+ const itemsWithClientId = items.map((item) => {
254
+ if (!("id" in item) || !item.id) {
255
+ return { ...item, clientId };
256
+ }
257
+ return item;
258
+ });
259
+ const validated = this.validate(z.array(replaceSyncItemSchema(createBankAccountInputSchema, updateBankAccountInputSchema)), itemsWithClientId);
199
260
  const response = await this.execute(() => this.trpc.bankAccounts.sync.mutate({
200
261
  clientId,
201
262
  items: validated,
@@ -9,7 +9,7 @@
9
9
  * - JYSClientsResource - Mexico JYS-scoped with flattened JYS fields
10
10
  * - TSCClientsResource - Mexico TSC-scoped with flattened TSC fields
11
11
  */
12
- import type { CreateClientInput, UpdateClientInput, CreateAddressInput, UpdateAddressInput, CreateContactMethodInput, UpdateContactMethodInput, CreateBankAccountInput, UpdateBankAccountInput, ClientFilter, ClientSort, ListOptions, PaginatedResponse, AtomicBatchResult, PartialBatchResult, ClientRelationshipType, LinkedClient as LinkedClientInput, SyncItem, SyncResult } from "@artu-ai/shared";
12
+ import type { CreateClientInput, UpdateClientInput, UpsertClientInput, CreateAddressInput, UpdateAddressInput, CreateContactMethodInput, UpdateContactMethodInput, CreateBankAccountInput, UpdateBankAccountInput, ClientFilter, ClientSort, ListOptions, PaginatedResponse, AtomicBatchResult, PartialBatchResult, ClientRelationshipType, LinkedClient as LinkedClientInput, SyncItem, SyncResult, UpsertResult } from "@artu-ai/shared";
13
13
  import { BaseResource } from "./base";
14
14
  import { Client, type ClientData, Address, ContactMethod, BankAccount, LinkedClient } from "../models";
15
15
  /**
@@ -161,17 +161,21 @@ export declare class ClientsResource<TSort = ClientSort> extends BaseResource<Cl
161
161
  * Returns an async iterator over all clients matching the filter.
162
162
  * Automatically fetches subsequent pages as you iterate.
163
163
  *
164
- * @param filter - Optional filter criteria
164
+ * @param options - Optional iteration options (filter, sort, pageSize)
165
165
  * @returns Async generator yielding client models
166
166
  *
167
167
  * @example
168
168
  * ```typescript
169
- * for await (const client of sdk.clients.iterate({ type: "individual" })) {
169
+ * for await (const client of sdk.clients.iterate({ filter: { type: "individual" } })) {
170
170
  * console.log(client.name);
171
171
  * }
172
172
  * ```
173
173
  */
174
- iterate(filter?: ClientFilter): AsyncGenerator<Client, void, undefined>;
174
+ iterate(options?: {
175
+ filter?: ClientFilter;
176
+ sort?: TSort;
177
+ pageSize?: number;
178
+ }): AsyncGenerator<Client, void, undefined>;
175
179
  /**
176
180
  * Creates multiple clients in a single request.
177
181
  *
@@ -236,6 +240,57 @@ export declare class ClientsResource<TSort = ClientSort> extends BaseResource<Cl
236
240
  }[], options: {
237
241
  atomic: false;
238
242
  }): Promise<PartialBatchResult<Client>>;
243
+ /**
244
+ * Creates or updates a client by externalId.
245
+ *
246
+ * If a client with the given externalId exists, it will be updated.
247
+ * Otherwise, a new client will be created.
248
+ *
249
+ * @param data - Client data with required externalId
250
+ * @returns Result containing the client and action taken (created/updated)
251
+ *
252
+ * @example
253
+ * ```typescript
254
+ * const result = await sdk.clients.upsertByExternalId({
255
+ * externalId: "crm-123",
256
+ * type: ClientType.Individual,
257
+ * name: "Juan García",
258
+ * primaryJurisdiction: "MX",
259
+ * });
260
+ *
261
+ * if (result.action === "created") {
262
+ * console.log("New client created:", result.data.id);
263
+ * } else {
264
+ * console.log("Existing client updated:", result.data.id);
265
+ * }
266
+ * ```
267
+ */
268
+ upsertByExternalId(data: UpsertClientInput): Promise<UpsertResult<Client>>;
269
+ /**
270
+ * Creates or updates multiple clients by externalId in a single request.
271
+ *
272
+ * @param clients - Array of client data with required externalId
273
+ * @param options - Batch options (atomic: true by default)
274
+ * @returns Atomic result with data array, or partial result with succeeded/failed
275
+ *
276
+ * @example
277
+ * ```typescript
278
+ * // Atomic mode (default) - all or nothing
279
+ * const result = await sdk.clients.upsertManyByExternalId([
280
+ * { externalId: "crm-1", type: "individual", name: "Client 1", ... },
281
+ * { externalId: "crm-2", type: "company", name: "Client 2", ... },
282
+ * ]);
283
+ *
284
+ * // Non-atomic mode - partial success allowed
285
+ * const result = await sdk.clients.upsertManyByExternalId([...], { atomic: false });
286
+ * ```
287
+ */
288
+ upsertManyByExternalId(clients: UpsertClientInput[], options?: {
289
+ atomic?: true;
290
+ }): Promise<AtomicBatchResult<UpsertResult<Client>>>;
291
+ upsertManyByExternalId(clients: UpsertClientInput[], options: {
292
+ atomic: false;
293
+ }): Promise<PartialBatchResult<UpsertResult<Client>>>;
239
294
  /**
240
295
  * Links a client to another client with a relationship type.
241
296
  *
@@ -1 +1 @@
1
- {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/resources/clients.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,IAAI,iBAAiB,EACjC,QAAQ,EACR,UAAU,EACX,MAAM,iBAAiB,CAAC;AAazB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,MAAM,EACN,KAAK,UAAU,EACf,OAAO,EACP,aAAa,EACb,WAAW,EACX,YAAY,EACb,MAAM,WAAW,CAAC;AAMnB;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAMD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,qBAAa,eAAe,CAAC,KAAK,GAAG,UAAU,CAAE,SAAQ,YAAY,CACnE,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,KAAK,CACN;IAKC;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IAUtD;;;;;;OAMG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAOvE;;OAEG;IACG,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAOrE;;;;;;;;;;;OAWG;IACG,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAO/D;;;;;;;;;;;;;OAaG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC;IASlE;;;;;;;;;OASG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,IAAI,CACR,OAAO,CAAC,EAAE,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG;QAC3C,sBAAsB,CAAC,EAAE,OAAO,CAAC;KAClC,GACA,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAerC;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS,CAAC;IAQvE;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,UAAU,CACd,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,GAC1B,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,CACd,OAAO,EAAE,iBAAiB,EAAE,EAC5B,OAAO,EAAE;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,GACzB,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IA6BtC;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,UAAU,CACd,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,EAAE,EAClD,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,IAAI,CAAA;KAAE,GAC1B,OAAO,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC/B,UAAU,CACd,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,iBAAiB,CAAA;KAAE,EAAE,EAClD,OAAO,EAAE;QAAE,MAAM,EAAE,KAAK,CAAA;KAAE,GACzB,OAAO,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAsCtC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,UAAU,CACd,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,sBAAsB,EACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;IAYlB;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAChB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,EACrB,gBAAgB,EAAE,sBAAsB,GACvC,OAAO,CAAC,MAAM,CAAC;IAWlB;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACG,iBAAiB,CACrB,cAAc,EAAE,MAAM,EACtB,gBAAgB,CAAC,EAAE,sBAAsB,GACxC,OAAO,CAAC,YAAY,EAAE,CAAC;IAW1B;;;;;;;;;;;OAWG;IACG,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAO7D;;;;;;;;;;;;;;OAcG;IACG,kBAAkB,CACtB,EAAE,EAAE,MAAM,EACV,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,YAAY,CAAC;IAOxB;;;;;;;;;;;;;;;OAeG;IACG,gBAAgB,CACpB,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,iBAAiB,EAAE,GACjC,OAAO,CAAC,MAAM,CAAC;IAgBlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsDG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAC3B,SAAS,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3C,cAAc,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACtD,YAAY,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAClD,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;KACrC,EACD,OAAO,EAAE;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,GAC7B,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1C,YAAY,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACvC,CAAC;IACI,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAC3B,SAAS,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC3C,cAAc,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;QACtD,YAAY,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAClD,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC;KACrC,EACD,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAClC,OAAO,CAAC;QACT,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,cAAc,EAAE,UAAU,CAAC,aAAa,CAAC,CAAC;QAC1C,YAAY,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;KACvC,CAAC;IAsGF;;;OAGG;IACH,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM;CAGhD"}
1
+ {"version":3,"file":"clients.d.ts","sourceRoot":"","sources":["../../src/resources/clients.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@
10
10
  * - TSCClientsResource - Mexico TSC-scoped with flattened TSC fields
11
11
  */
12
12
  import { z } from "zod";
13
- import { createClientInputSchema, updateClientInputSchema, createAddressInputSchema, updateAddressInputSchema, createContactMethodInputSchema, updateContactMethodInputSchema, createBankAccountInputSchema, updateBankAccountInputSchema, linkedClientSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
13
+ import { createClientInputSchema, updateClientInputSchema, upsertClientInputSchema, createAddressInputSchema, updateAddressInputSchema, createContactMethodInputSchema, updateContactMethodInputSchema, createBankAccountInputSchema, updateBankAccountInputSchema, linkedClientSchema, replaceSyncItemSchema, } from "@artu-ai/shared";
14
14
  import { BaseResource } from "./base";
15
15
  import { Client, Address, ContactMethod, BankAccount, LinkedClient, } from "../models";
16
16
  // ===========================
@@ -176,18 +176,22 @@ export class ClientsResource extends BaseResource {
176
176
  * Returns an async iterator over all clients matching the filter.
177
177
  * Automatically fetches subsequent pages as you iterate.
178
178
  *
179
- * @param filter - Optional filter criteria
179
+ * @param options - Optional iteration options (filter, sort, pageSize)
180
180
  * @returns Async generator yielding client models
181
181
  *
182
182
  * @example
183
183
  * ```typescript
184
- * for await (const client of sdk.clients.iterate({ type: "individual" })) {
184
+ * for await (const client of sdk.clients.iterate({ filter: { type: "individual" } })) {
185
185
  * console.log(client.name);
186
186
  * }
187
187
  * ```
188
188
  */
189
- iterate(filter) {
190
- return this.createIterator({ filter });
189
+ iterate(options) {
190
+ return this.createIterator({
191
+ filter: options?.filter,
192
+ sort: options?.sort,
193
+ pageSize: options?.pageSize,
194
+ });
191
195
  }
192
196
  async createMany(clients, options = {}) {
193
197
  const atomic = options.atomic ?? true;
@@ -236,6 +240,72 @@ export class ClientsResource extends BaseResource {
236
240
  }
237
241
  }
238
242
  // ─────────────────────────────────────────────────────────────────
243
+ // Upsert Operations
244
+ // ─────────────────────────────────────────────────────────────────
245
+ /**
246
+ * Creates or updates a client by externalId.
247
+ *
248
+ * If a client with the given externalId exists, it will be updated.
249
+ * Otherwise, a new client will be created.
250
+ *
251
+ * @param data - Client data with required externalId
252
+ * @returns Result containing the client and action taken (created/updated)
253
+ *
254
+ * @example
255
+ * ```typescript
256
+ * const result = await sdk.clients.upsertByExternalId({
257
+ * externalId: "crm-123",
258
+ * type: ClientType.Individual,
259
+ * name: "Juan García",
260
+ * primaryJurisdiction: "MX",
261
+ * });
262
+ *
263
+ * if (result.action === "created") {
264
+ * console.log("New client created:", result.data.id);
265
+ * } else {
266
+ * console.log("Existing client updated:", result.data.id);
267
+ * }
268
+ * ```
269
+ */
270
+ async upsertByExternalId(data) {
271
+ const validated = this.validate(upsertClientInputSchema, data);
272
+ const response = await this.execute(() => this.trpc.clients.upsertByExternalId.mutate(validated));
273
+ return {
274
+ data: this.instantiate(response.data),
275
+ action: response.action,
276
+ };
277
+ }
278
+ async upsertManyByExternalId(clients, options = {}) {
279
+ const atomic = options.atomic ?? true;
280
+ const validated = this.validate(z.array(upsertClientInputSchema), clients);
281
+ const response = await this.execute(() => this.trpc.clients.upsertManyByExternalId.mutate({
282
+ items: validated,
283
+ atomic,
284
+ }));
285
+ if (response.atomic) {
286
+ return {
287
+ atomic: true,
288
+ data: response.data.map((item) => ({
289
+ data: this.instantiate(item.data),
290
+ action: item.action,
291
+ })),
292
+ };
293
+ }
294
+ else {
295
+ return {
296
+ atomic: false,
297
+ succeeded: response.succeeded.map((item) => ({
298
+ index: item.index,
299
+ data: {
300
+ data: this.instantiate(item.data.data),
301
+ action: item.data.action,
302
+ },
303
+ })),
304
+ failed: response.failed,
305
+ };
306
+ }
307
+ }
308
+ // ─────────────────────────────────────────────────────────────────
239
309
  // Client-to-Client Relationship Management
240
310
  // ─────────────────────────────────────────────────────────────────
241
311
  /**
@@ -391,18 +461,25 @@ export class ClientsResource extends BaseResource {
391
461
  return this.instantiate(response);
392
462
  }
393
463
  async syncAll(clientId, data, options) {
464
+ // Helper to inject clientId into create items (items without id)
465
+ const injectClientId = (items) => items.map((item) => {
466
+ if (!("id" in item) || !item.id) {
467
+ return { ...item, clientId };
468
+ }
469
+ return item;
470
+ });
394
471
  // Validate inputs - use replaceSyncItemSchema which validates create vs update based on id presence
395
472
  const validatedClient = data.client
396
473
  ? this.validate(updateClientInputSchema, data.client)
397
474
  : undefined;
398
475
  const validatedAddresses = data.addresses
399
- ? this.validate(z.array(replaceSyncItemSchema(createAddressInputSchema, updateAddressInputSchema)), data.addresses)
476
+ ? this.validate(z.array(replaceSyncItemSchema(createAddressInputSchema, updateAddressInputSchema)), injectClientId(data.addresses))
400
477
  : undefined;
401
478
  const validatedContactMethods = data.contactMethods
402
- ? this.validate(z.array(replaceSyncItemSchema(createContactMethodInputSchema, updateContactMethodInputSchema)), data.contactMethods)
479
+ ? this.validate(z.array(replaceSyncItemSchema(createContactMethodInputSchema, updateContactMethodInputSchema)), injectClientId(data.contactMethods))
403
480
  : undefined;
404
481
  const validatedBankAccounts = data.bankAccounts
405
- ? this.validate(z.array(replaceSyncItemSchema(createBankAccountInputSchema, updateBankAccountInputSchema)), data.bankAccounts)
482
+ ? this.validate(z.array(replaceSyncItemSchema(createBankAccountInputSchema, updateBankAccountInputSchema)), injectClientId(data.bankAccounts))
406
483
  : undefined;
407
484
  const validatedLinkedClients = data.linkedClients
408
485
  ? this.validate(z.array(linkedClientSchema), data.linkedClients)