@countfinancial/cli 0.2.1 → 0.2.3

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 (50) hide show
  1. package/LICENSE +15 -0
  2. package/dist/__tests__/credentialStore.test.js +9 -0
  3. package/dist/__tests__/credentialStore.test.js.map +1 -1
  4. package/dist/cli.js +14 -0
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands/testTools.command.d.ts +7 -0
  7. package/dist/commands/testTools.command.js +42 -0
  8. package/dist/commands/testTools.command.js.map +1 -0
  9. package/dist/constants.d.ts +2 -2
  10. package/dist/constants.js +2 -2
  11. package/dist/constants.js.map +1 -1
  12. package/dist/helpers/toolSmokeTestFixtures.helper.d.ts +16 -0
  13. package/dist/helpers/toolSmokeTestFixtures.helper.js +491 -0
  14. package/dist/helpers/toolSmokeTestFixtures.helper.js.map +1 -0
  15. package/dist/partner-mcp/helpers/mcpKnowledge.helper.js +114 -4
  16. package/dist/partner-mcp/helpers/mcpKnowledge.helper.js.map +1 -1
  17. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.d.ts +1 -1
  18. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js +61 -84
  19. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js.map +1 -1
  20. package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js +181 -2
  21. package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js.map +1 -1
  22. package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js +79 -0
  23. package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js.map +1 -1
  24. package/dist/partner-mcp/schemas/bodies.d.ts +584 -0
  25. package/dist/partner-mcp/schemas/bodies.js +440 -0
  26. package/dist/partner-mcp/schemas/bodies.js.map +1 -0
  27. package/dist/partner-mcp/schemas/builders.d.ts +36 -0
  28. package/dist/partner-mcp/schemas/builders.js +106 -0
  29. package/dist/partner-mcp/schemas/builders.js.map +1 -0
  30. package/dist/partner-mcp/schemas/index.d.ts +5 -0
  31. package/dist/partner-mcp/schemas/index.js +6 -0
  32. package/dist/partner-mcp/schemas/index.js.map +1 -0
  33. package/dist/partner-mcp/schemas/primitives.d.ts +39 -0
  34. package/dist/partner-mcp/schemas/primitives.js +107 -0
  35. package/dist/partner-mcp/schemas/primitives.js.map +1 -0
  36. package/dist/partner-mcp/schemas/queries.d.ts +311 -0
  37. package/dist/partner-mcp/schemas/queries.js +175 -0
  38. package/dist/partner-mcp/schemas/queries.js.map +1 -0
  39. package/dist/partner-mcp/schemas/toolInputSchemas.d.ts +23 -0
  40. package/dist/partner-mcp/schemas/toolInputSchemas.js +263 -0
  41. package/dist/partner-mcp/schemas/toolInputSchemas.js.map +1 -0
  42. package/dist/partner-mcp/tools/definitions.js +106 -135
  43. package/dist/partner-mcp/tools/definitions.js.map +1 -1
  44. package/dist/partner-mcp/tools/registerTools.d.ts +8 -0
  45. package/dist/partner-mcp/tools/registerTools.js +8 -3
  46. package/dist/partner-mcp/tools/registerTools.js.map +1 -1
  47. package/dist/services/toolSmokeTest.service.d.ts +38 -0
  48. package/dist/services/toolSmokeTest.service.js +495 -0
  49. package/dist/services/toolSmokeTest.service.js.map +1 -0
  50. package/package.json +4 -3
@@ -0,0 +1,491 @@
1
+ import { executeCountPartnerTool } from '../partner-mcp/tools/registerTools.js';
2
+ import { getToolDefinition, toolDefinitions } from '../partner-mcp/tools/definitions.js';
3
+ const SMOKE_TEST_RECORD_LABEL = 'CLI Smoke Test Fixture';
4
+ function sleep(params) {
5
+ return new Promise((_resolve) => {
6
+ setTimeout(_resolve, params.milliseconds);
7
+ });
8
+ }
9
+ function listPathToFixtureResourcePath(pathTemplate) {
10
+ return pathTemplate.replace(/^\/partners\//, '');
11
+ }
12
+ function buildSmokeTestIsoDate() {
13
+ return new Date().toISOString().slice(0, 10);
14
+ }
15
+ function extractIdentifierFromRecordObject(recordObject) {
16
+ if (typeof recordObject.id === 'string' && recordObject.id.trim() !== '') {
17
+ return recordObject.id;
18
+ }
19
+ if (typeof recordObject.uuid === 'string' && recordObject.uuid.trim() !== '') {
20
+ return recordObject.uuid;
21
+ }
22
+ if (typeof recordObject.accUuid === 'string' && recordObject.accUuid.trim() !== '') {
23
+ return recordObject.accUuid;
24
+ }
25
+ return undefined;
26
+ }
27
+ function extractIdentifierFromFirstRecordInArray(recordArray) {
28
+ for (const recordEntry of recordArray) {
29
+ if (!recordEntry || typeof recordEntry !== 'object' || Array.isArray(recordEntry)) {
30
+ continue;
31
+ }
32
+ const recordIdentifier = extractIdentifierFromRecordObject(recordEntry);
33
+ if (recordIdentifier) {
34
+ return recordIdentifier;
35
+ }
36
+ }
37
+ return undefined;
38
+ }
39
+ function extractIdentifierFromKnownResponseCollections(responseObject) {
40
+ const knownCollectionKeys = [
41
+ 'records',
42
+ 'customers',
43
+ 'vendors',
44
+ 'bills',
45
+ 'invoices',
46
+ 'products',
47
+ 'tags',
48
+ 'projects',
49
+ 'tasks',
50
+ 'transactions',
51
+ 'journalEntries',
52
+ 'people',
53
+ 'timeEntries',
54
+ 'expenseReceipts',
55
+ 'budgets',
56
+ 'recurringInvoiceTemplates',
57
+ ];
58
+ for (const collectionKey of knownCollectionKeys) {
59
+ const collectionValue = responseObject[collectionKey];
60
+ if (Array.isArray(collectionValue)) {
61
+ const recordIdentifier = extractIdentifierFromFirstRecordInArray(collectionValue);
62
+ if (recordIdentifier) {
63
+ return recordIdentifier;
64
+ }
65
+ }
66
+ }
67
+ const nestedMessage = responseObject.message && typeof responseObject.message === 'object' && !Array.isArray(responseObject.message)
68
+ ? responseObject.message
69
+ : undefined;
70
+ if (nestedMessage && Array.isArray(nestedMessage.products)) {
71
+ return extractIdentifierFromFirstRecordInArray(nestedMessage.products);
72
+ }
73
+ return undefined;
74
+ }
75
+ export function extractRecordIdentifierFromApiResponse(apiResponse) {
76
+ if (Array.isArray(apiResponse)) {
77
+ return extractIdentifierFromFirstRecordInArray(apiResponse);
78
+ }
79
+ if (!apiResponse || typeof apiResponse !== 'object') {
80
+ return undefined;
81
+ }
82
+ const responseObject = apiResponse;
83
+ const directRecordIdentifier = extractIdentifierFromRecordObject(responseObject);
84
+ if (directRecordIdentifier) {
85
+ return directRecordIdentifier;
86
+ }
87
+ const knownCollectionIdentifier = extractIdentifierFromKnownResponseCollections(responseObject);
88
+ if (knownCollectionIdentifier) {
89
+ return knownCollectionIdentifier;
90
+ }
91
+ const nestedData = responseObject.data && typeof responseObject.data === 'object' && !Array.isArray(responseObject.data)
92
+ ? responseObject.data
93
+ : undefined;
94
+ if (nestedData) {
95
+ const nestedDirectRecordIdentifier = extractIdentifierFromRecordObject(nestedData);
96
+ if (nestedDirectRecordIdentifier) {
97
+ return nestedDirectRecordIdentifier;
98
+ }
99
+ const nestedCollectionIdentifier = extractIdentifierFromKnownResponseCollections(nestedData);
100
+ if (nestedCollectionIdentifier) {
101
+ return nestedCollectionIdentifier;
102
+ }
103
+ const nestedArrayScanIdentifier = extractIdentifierFromAnyArrayInObject(nestedData);
104
+ if (nestedArrayScanIdentifier) {
105
+ return nestedArrayScanIdentifier;
106
+ }
107
+ }
108
+ return extractIdentifierFromAnyArrayInObject(responseObject);
109
+ }
110
+ function extractIdentifierFromAnyArrayInObject(responseObject) {
111
+ for (const objectValue of Object.values(responseObject)) {
112
+ if (!Array.isArray(objectValue)) {
113
+ continue;
114
+ }
115
+ const recordIdentifier = extractIdentifierFromFirstRecordInArray(objectValue);
116
+ if (recordIdentifier) {
117
+ return recordIdentifier;
118
+ }
119
+ }
120
+ return undefined;
121
+ }
122
+ function updateFixtureCacheFromListToolResponse(params) {
123
+ if (params.toolResult.isError || params.listTool.pathTemplate.includes('{')) {
124
+ return;
125
+ }
126
+ const recordIdentifier = extractRecordIdentifierFromApiResponse(params.toolResult.structuredContent?.result);
127
+ if (!recordIdentifier) {
128
+ return;
129
+ }
130
+ const fixtureResourcePath = listPathToFixtureResourcePath(params.listTool.pathTemplate);
131
+ params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath[fixtureResourcePath] = recordIdentifier;
132
+ }
133
+ function isListToolEligibleForFixtureSeeding(tool) {
134
+ if (!tool.readOnly || tool.method !== 'GET' || tool.pathTemplate.startsWith('/__local')) {
135
+ return false;
136
+ }
137
+ if (tool.pathTemplate.startsWith('/partners/reports/')) {
138
+ return false;
139
+ }
140
+ if (tool.pathTemplate.endsWith('/overall') || tool.name === 'COUNT_get_workspace_stats') {
141
+ return false;
142
+ }
143
+ return tool.name.startsWith('COUNT_list_');
144
+ }
145
+ async function executeListToolForFixtureSeeding(params) {
146
+ const listToolInput = params.listTool.name === 'COUNT_list_project_tasks'
147
+ ? params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.projects
148
+ ? {
149
+ id: params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.projects,
150
+ query: { limit: 1 },
151
+ }
152
+ : null
153
+ : { query: { limit: 1 } };
154
+ if (listToolInput === null) {
155
+ return;
156
+ }
157
+ const toolResult = await executeCountPartnerTool({
158
+ tool: params.listTool,
159
+ input: listToolInput,
160
+ client: params.client,
161
+ });
162
+ updateFixtureCacheFromListToolResponse({
163
+ listTool: params.listTool,
164
+ toolResult,
165
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
166
+ });
167
+ }
168
+ async function createSmokeTestRecord(params) {
169
+ const createTool = getToolDefinition({ toolName: params.createToolName });
170
+ if (!createTool) {
171
+ return false;
172
+ }
173
+ const toolResult = await executeCountPartnerTool({
174
+ tool: createTool,
175
+ input: params.createToolInput,
176
+ client: params.client,
177
+ });
178
+ if (toolResult.isError) {
179
+ return false;
180
+ }
181
+ const recordIdentifier = extractRecordIdentifierFromApiResponse(toolResult.structuredContent?.result);
182
+ if (!recordIdentifier) {
183
+ return false;
184
+ }
185
+ params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath[params.fixtureResourcePath] = recordIdentifier;
186
+ return true;
187
+ }
188
+ async function populateSupportingAccountIdentifiers(params) {
189
+ const listAccountsTool = getToolDefinition({ toolName: 'COUNT_list_accounts' });
190
+ if (!listAccountsTool) {
191
+ return;
192
+ }
193
+ const expenseAccountsResult = await executeCountPartnerTool({
194
+ tool: listAccountsTool,
195
+ input: { query: { type: 'Expenses', limit: 1 } },
196
+ client: params.client,
197
+ });
198
+ if (!expenseAccountsResult.isError) {
199
+ const expenseAccountIdentifier = extractRecordIdentifierFromApiResponse(expenseAccountsResult.structuredContent?.result);
200
+ if (expenseAccountIdentifier) {
201
+ params.fixtureIdentifierCache.supportingAccountIdentifiers.expenseCategoryAccountIdentifier =
202
+ expenseAccountIdentifier;
203
+ params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath['chart-of-accounts'] =
204
+ expenseAccountIdentifier;
205
+ }
206
+ }
207
+ await sleep({ milliseconds: params.delayBetweenCallsMilliseconds });
208
+ const bankAccountsResult = await executeCountPartnerTool({
209
+ tool: listAccountsTool,
210
+ input: { query: { type: 'Assets', limit: 1 } },
211
+ client: params.client,
212
+ });
213
+ if (!bankAccountsResult.isError) {
214
+ const bankAccountIdentifier = extractRecordIdentifierFromApiResponse(bankAccountsResult.structuredContent?.result);
215
+ if (bankAccountIdentifier) {
216
+ params.fixtureIdentifierCache.supportingAccountIdentifiers.bankAccountIdentifier = bankAccountIdentifier;
217
+ }
218
+ }
219
+ }
220
+ async function ensureSmokeTestRecordExists(params) {
221
+ if (params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath[params.fixtureResourcePath]) {
222
+ return;
223
+ }
224
+ const listTool = getToolDefinition({ toolName: params.listToolName });
225
+ if (listTool) {
226
+ await executeListToolForFixtureSeeding({
227
+ listTool,
228
+ client: params.client,
229
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
230
+ });
231
+ await sleep({ milliseconds: params.delayBetweenCallsMilliseconds });
232
+ }
233
+ if (params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath[params.fixtureResourcePath]) {
234
+ return;
235
+ }
236
+ const createToolInput = params.buildCreateToolInput({ fixtureIdentifierCache: params.fixtureIdentifierCache });
237
+ if (!createToolInput) {
238
+ return;
239
+ }
240
+ await createSmokeTestRecord({
241
+ createToolName: params.createToolName,
242
+ createToolInput,
243
+ client: params.client,
244
+ fixtureResourcePath: params.fixtureResourcePath,
245
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
246
+ });
247
+ await sleep({ milliseconds: params.delayBetweenCallsMilliseconds });
248
+ }
249
+ export async function seedSmokeTestFixtures(params) {
250
+ const listToolsForFixtureSeeding = toolDefinitions
251
+ .filter(isListToolEligibleForFixtureSeeding)
252
+ .sort((_leftTool, _rightTool) => {
253
+ const leftHasPathParameter = _leftTool.pathTemplate.includes('{') ? 1 : 0;
254
+ const rightHasPathParameter = _rightTool.pathTemplate.includes('{') ? 1 : 0;
255
+ if (leftHasPathParameter !== rightHasPathParameter) {
256
+ return leftHasPathParameter - rightHasPathParameter;
257
+ }
258
+ return _leftTool.name.localeCompare(_rightTool.name);
259
+ });
260
+ for (const listTool of listToolsForFixtureSeeding) {
261
+ await executeListToolForFixtureSeeding({
262
+ listTool,
263
+ client: params.client,
264
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
265
+ });
266
+ await sleep({ milliseconds: params.delayBetweenCallsMilliseconds });
267
+ }
268
+ await populateSupportingAccountIdentifiers({
269
+ client: params.client,
270
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
271
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
272
+ });
273
+ const smokeTestIsoDate = buildSmokeTestIsoDate();
274
+ await ensureSmokeTestRecordExists({
275
+ fixtureResourcePath: 'customers',
276
+ listToolName: 'COUNT_list_customers',
277
+ createToolName: 'COUNT_create_customer',
278
+ buildCreateToolInput: () => ({
279
+ body: {
280
+ customer: `${SMOKE_TEST_RECORD_LABEL} Customer`,
281
+ email: 'cli-smoke-test-fixture@example.com',
282
+ },
283
+ }),
284
+ client: params.client,
285
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
286
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
287
+ });
288
+ await ensureSmokeTestRecordExists({
289
+ fixtureResourcePath: 'vendors',
290
+ listToolName: 'COUNT_list_vendors',
291
+ createToolName: 'COUNT_create_vendor',
292
+ buildCreateToolInput: () => ({
293
+ body: {
294
+ vendor: `${SMOKE_TEST_RECORD_LABEL} Vendor`,
295
+ },
296
+ }),
297
+ client: params.client,
298
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
299
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
300
+ });
301
+ await ensureSmokeTestRecordExists({
302
+ fixtureResourcePath: 'products',
303
+ listToolName: 'COUNT_list_products',
304
+ createToolName: 'COUNT_create_product',
305
+ buildCreateToolInput: () => ({
306
+ body: {
307
+ name: `${SMOKE_TEST_RECORD_LABEL} Product`,
308
+ },
309
+ }),
310
+ client: params.client,
311
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
312
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
313
+ });
314
+ await ensureSmokeTestRecordExists({
315
+ fixtureResourcePath: 'tags',
316
+ listToolName: 'COUNT_list_tags',
317
+ createToolName: 'COUNT_create_tag',
318
+ buildCreateToolInput: () => ({
319
+ body: {
320
+ name: `${SMOKE_TEST_RECORD_LABEL} Tag`,
321
+ },
322
+ }),
323
+ client: params.client,
324
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
325
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
326
+ });
327
+ await ensureSmokeTestRecordExists({
328
+ fixtureResourcePath: 'tags/groups',
329
+ listToolName: 'COUNT_list_tag_groups',
330
+ createToolName: 'COUNT_create_tag_group',
331
+ buildCreateToolInput: () => ({
332
+ body: {
333
+ name: `${SMOKE_TEST_RECORD_LABEL} Tag Group`,
334
+ },
335
+ }),
336
+ client: params.client,
337
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
338
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
339
+ });
340
+ await ensureSmokeTestRecordExists({
341
+ fixtureResourcePath: 'projects',
342
+ listToolName: 'COUNT_list_projects',
343
+ createToolName: 'COUNT_create_project',
344
+ buildCreateToolInput: (buildParams) => ({
345
+ body: {
346
+ name: `${SMOKE_TEST_RECORD_LABEL} Project`,
347
+ customerUuid: buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.customers ?? null,
348
+ },
349
+ }),
350
+ client: params.client,
351
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
352
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
353
+ });
354
+ await ensureSmokeTestRecordExists({
355
+ fixtureResourcePath: 'tasks',
356
+ listToolName: 'COUNT_list_tasks',
357
+ createToolName: 'COUNT_create_task',
358
+ buildCreateToolInput: () => ({
359
+ body: {
360
+ type: 'general',
361
+ name: `${SMOKE_TEST_RECORD_LABEL} Task`,
362
+ },
363
+ }),
364
+ client: params.client,
365
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
366
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
367
+ });
368
+ await ensureSmokeTestRecordExists({
369
+ fixtureResourcePath: 'bills',
370
+ listToolName: 'COUNT_list_bills',
371
+ createToolName: 'COUNT_create_bill',
372
+ buildCreateToolInput: (buildParams) => {
373
+ const vendorIdentifier = buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.vendors;
374
+ const expenseCategoryAccountIdentifier = buildParams.fixtureIdentifierCache.supportingAccountIdentifiers.expenseCategoryAccountIdentifier;
375
+ if (!vendorIdentifier || !expenseCategoryAccountIdentifier) {
376
+ return null;
377
+ }
378
+ return {
379
+ body: {
380
+ vendorUuid: vendorIdentifier,
381
+ date: smokeTestIsoDate,
382
+ dueDate: smokeTestIsoDate,
383
+ lineItems: [
384
+ {
385
+ categoryAccountUuid: expenseCategoryAccountIdentifier,
386
+ description: `${SMOKE_TEST_RECORD_LABEL} Bill Line`,
387
+ quantity: 1,
388
+ price: 1,
389
+ },
390
+ ],
391
+ },
392
+ };
393
+ },
394
+ client: params.client,
395
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
396
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
397
+ });
398
+ await ensureSmokeTestRecordExists({
399
+ fixtureResourcePath: 'invoices',
400
+ listToolName: 'COUNT_list_invoices',
401
+ createToolName: 'COUNT_create_invoice',
402
+ buildCreateToolInput: (buildParams) => {
403
+ const customerIdentifier = buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.customers;
404
+ const productIdentifier = buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.products;
405
+ if (!customerIdentifier || !productIdentifier) {
406
+ return null;
407
+ }
408
+ return {
409
+ body: {
410
+ customerUuid: customerIdentifier,
411
+ date: smokeTestIsoDate,
412
+ dueDate: smokeTestIsoDate,
413
+ isDraft: true,
414
+ products: [
415
+ {
416
+ productUuid: productIdentifier,
417
+ quantity: 1,
418
+ unitPrice: 1,
419
+ },
420
+ ],
421
+ },
422
+ };
423
+ },
424
+ client: params.client,
425
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
426
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
427
+ });
428
+ await ensureSmokeTestRecordExists({
429
+ fixtureResourcePath: 'recurring-invoice-templates',
430
+ listToolName: 'COUNT_list_recurring_invoice_templates',
431
+ createToolName: 'COUNT_create_recurring_invoice_template',
432
+ buildCreateToolInput: (buildParams) => {
433
+ const customerIdentifier = buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.customers;
434
+ const productIdentifier = buildParams.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.products;
435
+ if (!customerIdentifier || !productIdentifier) {
436
+ return null;
437
+ }
438
+ return {
439
+ body: {
440
+ customerUuid: customerIdentifier,
441
+ date: smokeTestIsoDate,
442
+ recurrencePattern: 'monthly',
443
+ products: [
444
+ {
445
+ productUuid: productIdentifier,
446
+ quantity: 1,
447
+ unitPrice: 1,
448
+ },
449
+ ],
450
+ },
451
+ };
452
+ },
453
+ client: params.client,
454
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
455
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
456
+ });
457
+ await ensureSmokeTestRecordExists({
458
+ fixtureResourcePath: 'transactions',
459
+ listToolName: 'COUNT_list_transactions',
460
+ createToolName: 'COUNT_create_transaction',
461
+ buildCreateToolInput: (buildParams) => {
462
+ const bankAccountIdentifier = buildParams.fixtureIdentifierCache.supportingAccountIdentifiers.bankAccountIdentifier;
463
+ const expenseCategoryAccountIdentifier = buildParams.fixtureIdentifierCache.supportingAccountIdentifiers.expenseCategoryAccountIdentifier;
464
+ if (!bankAccountIdentifier || !expenseCategoryAccountIdentifier) {
465
+ return null;
466
+ }
467
+ return {
468
+ body: {
469
+ accUuid: bankAccountIdentifier,
470
+ amount: '1.00',
471
+ postedDate: smokeTestIsoDate,
472
+ type: 'Expense',
473
+ description: `${SMOKE_TEST_RECORD_LABEL} Transaction`,
474
+ categoryAccountUuid: expenseCategoryAccountIdentifier,
475
+ },
476
+ };
477
+ },
478
+ client: params.client,
479
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
480
+ delayBetweenCallsMilliseconds: params.delayBetweenCallsMilliseconds,
481
+ });
482
+ const listProjectTasksTool = getToolDefinition({ toolName: 'COUNT_list_project_tasks' });
483
+ if (listProjectTasksTool && params.fixtureIdentifierCache.fixtureIdentifiersByResourcePath.projects) {
484
+ await executeListToolForFixtureSeeding({
485
+ listTool: listProjectTasksTool,
486
+ client: params.client,
487
+ fixtureIdentifierCache: params.fixtureIdentifierCache,
488
+ });
489
+ }
490
+ }
491
+ //# sourceMappingURL=toolSmokeTestFixtures.helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolSmokeTestFixtures.helper.js","sourceRoot":"","sources":["../../src/helpers/toolSmokeTestFixtures.helper.ts"],"names":[],"mappings":"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"}