@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.
- package/dist/errors/validation.d.ts.map +1 -1
- package/dist/errors/validation.js +19 -1
- package/dist/resources/addresses.d.ts +29 -2
- package/dist/resources/addresses.d.ts.map +1 -1
- package/dist/resources/addresses.js +65 -4
- package/dist/resources/bank-accounts.d.ts +29 -2
- package/dist/resources/bank-accounts.d.ts.map +1 -1
- package/dist/resources/bank-accounts.js +65 -4
- package/dist/resources/clients.d.ts +59 -4
- package/dist/resources/clients.d.ts.map +1 -1
- package/dist/resources/clients.js +85 -8
- package/dist/resources/contact-methods.d.ts +29 -2
- package/dist/resources/contact-methods.d.ts.map +1 -1
- package/dist/resources/contact-methods.js +65 -4
- package/dist/resources/documents.d.ts +24 -19
- package/dist/resources/documents.d.ts.map +1 -1
- package/dist/resources/documents.js +51 -1
- package/dist/resources/mex/actividad-vulnerable/avi/clients.d.ts +31 -5
- package/dist/resources/mex/actividad-vulnerable/avi/clients.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/avi/clients.js +65 -9
- package/dist/resources/mex/actividad-vulnerable/avi/reports.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/avi/reports.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/avi/reports.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/avi/transactions.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/avi/transactions.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/avi/transactions.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/jys/clients.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/jys/clients.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/jys/clients.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/jys/reports.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/jys/reports.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/jys/reports.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/jys/transactions.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/jys/transactions.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/jys/transactions.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/tsc/clients.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/tsc/clients.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/tsc/clients.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/tsc/reports.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/tsc/reports.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/tsc/reports.js +58 -4
- package/dist/resources/mex/actividad-vulnerable/tsc/transactions.d.ts +26 -2
- package/dist/resources/mex/actividad-vulnerable/tsc/transactions.d.ts.map +1 -1
- package/dist/resources/mex/actividad-vulnerable/tsc/transactions.js +58 -4
- package/dist/resources/mex/addresses.d.ts +26 -2
- package/dist/resources/mex/addresses.d.ts.map +1 -1
- package/dist/resources/mex/addresses.js +66 -5
- package/dist/resources/mex/bank-accounts.d.ts +13 -2
- package/dist/resources/mex/bank-accounts.d.ts.map +1 -1
- package/dist/resources/mex/bank-accounts.js +17 -3
- package/dist/resources/mex/clients.d.ts +39 -11
- package/dist/resources/mex/clients.d.ts.map +1 -1
- package/dist/resources/mex/clients.js +82 -20
- package/dist/resources/mex/reports.d.ts +37 -12
- package/dist/resources/mex/reports.d.ts.map +1 -1
- package/dist/resources/mex/reports.js +71 -21
- package/dist/resources/mex/transactions.d.ts +38 -10
- package/dist/resources/mex/transactions.d.ts.map +1 -1
- package/dist/resources/mex/transactions.js +73 -20
- package/dist/resources/reports.d.ts +29 -2
- package/dist/resources/reports.d.ts.map +1 -1
- package/dist/resources/reports.js +57 -3
- package/dist/resources/transactions.d.ts +29 -2
- package/dist/resources/transactions.d.ts.map +1 -1
- package/dist/resources/transactions.js +57 -3
- package/dist/sdk/ComplianceSDK.d.ts.map +1 -1
- package/dist/sdk/ComplianceSDK.js +2 -0
- package/dist/utils/trpc-client.d.ts +1 -19879
- package/dist/utils/trpc-client.d.ts.map +1 -1
- package/dist/utils/upload.d.ts +6 -0
- package/dist/utils/upload.d.ts.map +1 -1
- package/dist/utils/upload.js +2 -1
- 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;
|
|
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
|
-
|
|
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(
|
|
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":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,kBAAkB,EAClB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,UAAU,
|
|
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(
|
|
127
|
-
return this.createIterator({
|
|
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
|
-
|
|
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(
|
|
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":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,sBAAsB,EACtB,sBAAsB,EACtB,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,UAAU,
|
|
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(
|
|
115
|
-
return this.createIterator({
|
|
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
|
-
|
|
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
|
|
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(
|
|
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,
|
|
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
|
|
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(
|
|
190
|
-
return this.createIterator({
|
|
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)
|