@countfinancial/cli 0.1.8 → 0.2.2

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 (105) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +9 -1
  3. package/dist/__tests__/credentialStore.test.js +9 -0
  4. package/dist/__tests__/credentialStore.test.js.map +1 -1
  5. package/dist/__tests__/doctor.test.d.ts +1 -0
  6. package/dist/__tests__/doctor.test.js +30 -0
  7. package/dist/__tests__/doctor.test.js.map +1 -0
  8. package/dist/__tests__/mcpInstall.test.d.ts +1 -0
  9. package/dist/__tests__/mcpInstall.test.js +25 -0
  10. package/dist/__tests__/mcpInstall.test.js.map +1 -0
  11. package/dist/__tests__/profileStore.test.d.ts +1 -0
  12. package/dist/__tests__/profileStore.test.js +53 -0
  13. package/dist/__tests__/profileStore.test.js.map +1 -0
  14. package/dist/cli.js +122 -9
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/doctor.command.d.ts +6 -0
  17. package/dist/commands/doctor.command.js +12 -0
  18. package/dist/commands/doctor.command.js.map +1 -0
  19. package/dist/commands/init.command.d.ts +1 -0
  20. package/dist/commands/init.command.js +6 -1
  21. package/dist/commands/init.command.js.map +1 -1
  22. package/dist/commands/login.command.d.ts +1 -0
  23. package/dist/commands/login.command.js +3 -3
  24. package/dist/commands/login.command.js.map +1 -1
  25. package/dist/commands/logout.command.d.ts +5 -1
  26. package/dist/commands/logout.command.js +3 -3
  27. package/dist/commands/logout.command.js.map +1 -1
  28. package/dist/commands/mcp.command.d.ts +5 -1
  29. package/dist/commands/mcp.command.js +7 -4
  30. package/dist/commands/mcp.command.js.map +1 -1
  31. package/dist/commands/mcpInstall.command.d.ts +7 -0
  32. package/dist/commands/mcpInstall.command.js +9 -0
  33. package/dist/commands/mcpInstall.command.js.map +1 -0
  34. package/dist/commands/profiles.command.d.ts +17 -0
  35. package/dist/commands/profiles.command.js +48 -0
  36. package/dist/commands/profiles.command.js.map +1 -0
  37. package/dist/commands/setup.command.d.ts +11 -0
  38. package/dist/commands/setup.command.js +85 -0
  39. package/dist/commands/setup.command.js.map +1 -0
  40. package/dist/commands/status.command.d.ts +6 -1
  41. package/dist/commands/status.command.js +7 -4
  42. package/dist/commands/status.command.js.map +1 -1
  43. package/dist/commands/testTools.command.d.ts +7 -0
  44. package/dist/commands/testTools.command.js +42 -0
  45. package/dist/commands/testTools.command.js.map +1 -0
  46. package/dist/constants.d.ts +2 -2
  47. package/dist/constants.js +2 -2
  48. package/dist/constants.js.map +1 -1
  49. package/dist/helpers/toolSmokeTestFixtures.helper.d.ts +16 -0
  50. package/dist/helpers/toolSmokeTestFixtures.helper.js +491 -0
  51. package/dist/helpers/toolSmokeTestFixtures.helper.js.map +1 -0
  52. package/dist/partner-mcp/helpers/mcpKnowledge.helper.js +114 -4
  53. package/dist/partner-mcp/helpers/mcpKnowledge.helper.js.map +1 -1
  54. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.d.ts +1 -1
  55. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js +61 -84
  56. package/dist/partner-mcp/helpers/mcpPayloadValidation.helper.js.map +1 -1
  57. package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js +181 -2
  58. package/dist/partner-mcp/helpers/mcpPlaybooks.helper.js.map +1 -1
  59. package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js +79 -0
  60. package/dist/partner-mcp/helpers/mcpRecoveryHint.helper.js.map +1 -1
  61. package/dist/partner-mcp/schemas/bodies.d.ts +528 -0
  62. package/dist/partner-mcp/schemas/bodies.js +377 -0
  63. package/dist/partner-mcp/schemas/bodies.js.map +1 -0
  64. package/dist/partner-mcp/schemas/builders.d.ts +36 -0
  65. package/dist/partner-mcp/schemas/builders.js +106 -0
  66. package/dist/partner-mcp/schemas/builders.js.map +1 -0
  67. package/dist/partner-mcp/schemas/index.d.ts +5 -0
  68. package/dist/partner-mcp/schemas/index.js +6 -0
  69. package/dist/partner-mcp/schemas/index.js.map +1 -0
  70. package/dist/partner-mcp/schemas/primitives.d.ts +39 -0
  71. package/dist/partner-mcp/schemas/primitives.js +107 -0
  72. package/dist/partner-mcp/schemas/primitives.js.map +1 -0
  73. package/dist/partner-mcp/schemas/queries.d.ts +311 -0
  74. package/dist/partner-mcp/schemas/queries.js +175 -0
  75. package/dist/partner-mcp/schemas/queries.js.map +1 -0
  76. package/dist/partner-mcp/schemas/toolInputSchemas.d.ts +23 -0
  77. package/dist/partner-mcp/schemas/toolInputSchemas.js +248 -0
  78. package/dist/partner-mcp/schemas/toolInputSchemas.js.map +1 -0
  79. package/dist/partner-mcp/tools/definitions.js +26 -135
  80. package/dist/partner-mcp/tools/definitions.js.map +1 -1
  81. package/dist/partner-mcp/tools/registerTools.d.ts +8 -0
  82. package/dist/partner-mcp/tools/registerTools.js +8 -3
  83. package/dist/partner-mcp/tools/registerTools.js.map +1 -1
  84. package/dist/services/credentialStore.service.d.ts +8 -2
  85. package/dist/services/credentialStore.service.js +22 -10
  86. package/dist/services/credentialStore.service.js.map +1 -1
  87. package/dist/services/doctor.service.d.ts +22 -0
  88. package/dist/services/doctor.service.js +186 -0
  89. package/dist/services/doctor.service.js.map +1 -0
  90. package/dist/services/mcpInstall.service.d.ts +43 -0
  91. package/dist/services/mcpInstall.service.js +117 -0
  92. package/dist/services/mcpInstall.service.js.map +1 -0
  93. package/dist/services/mcpLauncher.service.d.ts +2 -0
  94. package/dist/services/mcpLauncher.service.js +6 -3
  95. package/dist/services/mcpLauncher.service.js.map +1 -1
  96. package/dist/services/profileStore.service.d.ts +53 -0
  97. package/dist/services/profileStore.service.js +129 -0
  98. package/dist/services/profileStore.service.js.map +1 -0
  99. package/dist/services/setupPrompt.service.d.ts +25 -0
  100. package/dist/services/setupPrompt.service.js +40 -0
  101. package/dist/services/setupPrompt.service.js.map +1 -0
  102. package/dist/services/toolSmokeTest.service.d.ts +38 -0
  103. package/dist/services/toolSmokeTest.service.js +495 -0
  104. package/dist/services/toolSmokeTest.service.js.map +1 -0
  105. package/package.json +3 -2
@@ -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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"}