@opentabs-dev/opentabs-plugin-ynab 0.0.74

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 (77) hide show
  1. package/README.md +159 -0
  2. package/dist/adapter.iife.js +15312 -0
  3. package/dist/adapter.iife.js.map +7 -0
  4. package/dist/index.d.ts +14 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +62 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/tools/create-transaction.d.ts +46 -0
  9. package/dist/tools/create-transaction.d.ts.map +1 -0
  10. package/dist/tools/create-transaction.js +57 -0
  11. package/dist/tools/create-transaction.js.map +1 -0
  12. package/dist/tools/delete-transaction.d.ts +8 -0
  13. package/dist/tools/delete-transaction.d.ts.map +1 -0
  14. package/dist/tools/delete-transaction.js +32 -0
  15. package/dist/tools/delete-transaction.js.map +1 -0
  16. package/dist/tools/get-account.d.ts +18 -0
  17. package/dist/tools/get-account.d.ts.map +1 -0
  18. package/dist/tools/get-account.js +34 -0
  19. package/dist/tools/get-account.js.map +1 -0
  20. package/dist/tools/get-current-user.d.ts +9 -0
  21. package/dist/tools/get-current-user.d.ts.map +1 -0
  22. package/dist/tools/get-current-user.js +19 -0
  23. package/dist/tools/get-current-user.js.map +1 -0
  24. package/dist/tools/get-month.d.ts +33 -0
  25. package/dist/tools/get-month.d.ts.map +1 -0
  26. package/dist/tools/get-month.js +70 -0
  27. package/dist/tools/get-month.js.map +1 -0
  28. package/dist/tools/get-plan.d.ts +12 -0
  29. package/dist/tools/get-plan.d.ts.map +1 -0
  30. package/dist/tools/get-plan.js +22 -0
  31. package/dist/tools/get-plan.js.map +1 -0
  32. package/dist/tools/get-transaction.d.ts +39 -0
  33. package/dist/tools/get-transaction.d.ts.map +1 -0
  34. package/dist/tools/get-transaction.js +43 -0
  35. package/dist/tools/get-transaction.js.map +1 -0
  36. package/dist/tools/list-accounts.d.ts +18 -0
  37. package/dist/tools/list-accounts.d.ts.map +1 -0
  38. package/dist/tools/list-accounts.js +34 -0
  39. package/dist/tools/list-accounts.js.map +1 -0
  40. package/dist/tools/list-categories.d.ts +26 -0
  41. package/dist/tools/list-categories.d.ts.map +1 -0
  42. package/dist/tools/list-categories.js +62 -0
  43. package/dist/tools/list-categories.js.map +1 -0
  44. package/dist/tools/list-months.d.ts +16 -0
  45. package/dist/tools/list-months.d.ts.map +1 -0
  46. package/dist/tools/list-months.js +43 -0
  47. package/dist/tools/list-months.js.map +1 -0
  48. package/dist/tools/list-payees.d.ts +9 -0
  49. package/dist/tools/list-payees.d.ts.map +1 -0
  50. package/dist/tools/list-payees.js +29 -0
  51. package/dist/tools/list-payees.js.map +1 -0
  52. package/dist/tools/list-scheduled-transactions.d.ts +21 -0
  53. package/dist/tools/list-scheduled-transactions.d.ts.map +1 -0
  54. package/dist/tools/list-scheduled-transactions.js +32 -0
  55. package/dist/tools/list-scheduled-transactions.js.map +1 -0
  56. package/dist/tools/list-transactions.d.ts +27 -0
  57. package/dist/tools/list-transactions.d.ts.map +1 -0
  58. package/dist/tools/list-transactions.js +44 -0
  59. package/dist/tools/list-transactions.js.map +1 -0
  60. package/dist/tools/schemas.d.ts +347 -0
  61. package/dist/tools/schemas.d.ts.map +1 -0
  62. package/dist/tools/schemas.js +266 -0
  63. package/dist/tools/schemas.js.map +1 -0
  64. package/dist/tools/update-category-budget.d.ts +23 -0
  65. package/dist/tools/update-category-budget.d.ts.map +1 -0
  66. package/dist/tools/update-category-budget.js +50 -0
  67. package/dist/tools/update-category-budget.js.map +1 -0
  68. package/dist/tools/update-transaction.d.ts +47 -0
  69. package/dist/tools/update-transaction.d.ts.map +1 -0
  70. package/dist/tools/update-transaction.js +62 -0
  71. package/dist/tools/update-transaction.js.map +1 -0
  72. package/dist/tools.json +1684 -0
  73. package/dist/ynab-api.d.ts +19 -0
  74. package/dist/ynab-api.d.ts.map +1 -0
  75. package/dist/ynab-api.js +168 -0
  76. package/dist/ynab-api.js.map +1 -0
  77. package/package.json +55 -0
@@ -0,0 +1,50 @@
1
+ import { defineTool } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { getPlanId, syncWrite } from '../ynab-api.js';
4
+ import { categorySchema, mapCategory } from './schemas.js';
5
+ export const updateCategoryBudget = defineTool({
6
+ name: 'update_category_budget',
7
+ displayName: 'Update Category Budget',
8
+ description: 'Set the budgeted amount for a category in a specific month. Amount is in currency units (e.g. 500 to budget $500). The month should be in YYYY-MM format (e.g. 2026-03 for March 2026).',
9
+ summary: 'Set budgeted amount for a category',
10
+ icon: 'pencil',
11
+ group: 'Categories',
12
+ input: z.object({
13
+ category_id: z.string().min(1).describe('Category ID to budget'),
14
+ month: z.string().min(1).describe('Month in YYYY-MM format (e.g. 2026-03)'),
15
+ budgeted: z.number().describe('Amount to budget in currency units (e.g. 500 for $500)'),
16
+ }),
17
+ output: z.object({
18
+ category: categorySchema,
19
+ }),
20
+ handle: async (params) => {
21
+ const planId = getPlanId();
22
+ const milliunits = Math.round(params.budgeted * 1000);
23
+ // Month in budget IDs uses YYYY-MM format
24
+ const monthKey = params.month.substring(0, 7);
25
+ const budgetId = `mcb/${monthKey}/${params.category_id}`;
26
+ const monthlyBudgetId = `mb/${monthKey}/${planId}`;
27
+ const result = await syncWrite(planId, {
28
+ be_monthly_subcategory_budgets: [
29
+ {
30
+ id: budgetId,
31
+ entities_monthly_budget_id: monthlyBudgetId,
32
+ entities_subcategory_id: params.category_id,
33
+ budgeted: milliunits,
34
+ overspending_handling: 'AffectsBuffer',
35
+ is_tombstone: false,
36
+ },
37
+ ],
38
+ });
39
+ // The sync write returns the updated budget entity
40
+ const budgets = result.changed_entities?.be_monthly_subcategory_budgets;
41
+ const updatedBudget = budgets?.[0]?.budgeted ?? milliunits;
42
+ return {
43
+ category: mapCategory({
44
+ id: params.category_id,
45
+ budgeted: updatedBudget,
46
+ }),
47
+ };
48
+ },
49
+ });
50
+ //# sourceMappingURL=update-category-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-category-budget.js","sourceRoot":"","sources":["../../src/tools/update-category-budget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EACT,yLAAyL;IAC3L,OAAO,EAAE,oCAAoC;IAC7C,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,YAAY;IACnB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAChE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;QAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;KACxF,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,cAAc;KACzB,CAAC;IACF,MAAM,EAAE,KAAK,EAAC,MAAM,EAAC,EAAE;QACrB,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;QAEtD,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,MAAM,QAAQ,GAAG,OAAO,QAAQ,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACzD,MAAM,eAAe,GAAG,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE;YACrC,8BAA8B,EAAE;gBAC9B;oBACE,EAAE,EAAE,QAAQ;oBACZ,0BAA0B,EAAE,eAAe;oBAC3C,uBAAuB,EAAE,MAAM,CAAC,WAAW;oBAC3C,QAAQ,EAAE,UAAU;oBACpB,qBAAqB,EAAE,eAAe;oBACtC,YAAY,EAAE,KAAK;iBACpB;aACF;SACF,CAAC,CAAC;QAEH,mDAAmD;QACnD,MAAM,OAAO,GACX,MAOD,CAAC,gBAAgB,EAAE,8BAA8B,CAAC;QAEnD,MAAM,aAAa,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,UAAU,CAAC;QAE3D,OAAO;YACL,QAAQ,EAAE,WAAW,CAAC;gBACpB,EAAE,EAAE,MAAM,CAAC,WAAW;gBACtB,QAAQ,EAAE,aAAa;aACxB,CAAC;SACH,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { z } from 'zod';
2
+ export declare const updateTransaction: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
3
+ transaction_id: z.ZodString;
4
+ account_id: z.ZodString;
5
+ date: z.ZodOptional<z.ZodString>;
6
+ amount: z.ZodOptional<z.ZodNumber>;
7
+ payee_name: z.ZodOptional<z.ZodString>;
8
+ payee_id: z.ZodOptional<z.ZodString>;
9
+ category_id: z.ZodOptional<z.ZodString>;
10
+ memo: z.ZodOptional<z.ZodString>;
11
+ cleared: z.ZodOptional<z.ZodEnum<{
12
+ cleared: "cleared";
13
+ uncleared: "uncleared";
14
+ reconciled: "reconciled";
15
+ }>>;
16
+ approved: z.ZodOptional<z.ZodBoolean>;
17
+ flag_color: z.ZodOptional<z.ZodEnum<{
18
+ red: "red";
19
+ orange: "orange";
20
+ yellow: "yellow";
21
+ green: "green";
22
+ blue: "blue";
23
+ purple: "purple";
24
+ }>>;
25
+ }, z.core.$strip>, z.ZodObject<{
26
+ transaction: z.ZodObject<{
27
+ id: z.ZodString;
28
+ date: z.ZodString;
29
+ amount: z.ZodString;
30
+ amount_milliunits: z.ZodNumber;
31
+ memo: z.ZodString;
32
+ cleared: z.ZodString;
33
+ approved: z.ZodBoolean;
34
+ flag_color: z.ZodString;
35
+ flag_name: z.ZodString;
36
+ account_id: z.ZodString;
37
+ account_name: z.ZodString;
38
+ payee_id: z.ZodString;
39
+ payee_name: z.ZodString;
40
+ category_id: z.ZodString;
41
+ category_name: z.ZodString;
42
+ transfer_account_id: z.ZodString;
43
+ import_id: z.ZodString;
44
+ deleted: z.ZodBoolean;
45
+ }, z.core.$strip>;
46
+ }, z.core.$strip>>;
47
+ //# sourceMappingURL=update-transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-transaction.d.ts","sourceRoot":"","sources":["../../src/tools/update-transaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqD5B,CAAC"}
@@ -0,0 +1,62 @@
1
+ import { defineTool, ToolError } from '@opentabs-dev/plugin-sdk';
2
+ import { z } from 'zod';
3
+ import { getPlanId, syncWrite } from '../ynab-api.js';
4
+ import { mapTransaction, transactionSchema } from './schemas.js';
5
+ export const updateTransaction = defineTool({
6
+ name: 'update_transaction',
7
+ displayName: 'Update Transaction',
8
+ description: 'Update an existing transaction in the active YNAB plan. Only specified fields are changed; omitted fields remain unchanged. Amount is in currency units (negative for expenses, positive for income).',
9
+ summary: 'Update a transaction',
10
+ icon: 'pencil',
11
+ group: 'Transactions',
12
+ input: z.object({
13
+ transaction_id: z.string().min(1).describe('Transaction ID to update'),
14
+ account_id: z.string().min(1).describe('Account ID the transaction belongs to'),
15
+ date: z.string().optional().describe('New transaction date in YYYY-MM-DD format'),
16
+ amount: z.number().optional().describe('New amount in currency units (negative for expenses, positive for income)'),
17
+ payee_name: z.string().optional().describe('New payee name'),
18
+ payee_id: z.string().optional().describe('New payee ID'),
19
+ category_id: z.string().optional().describe('New category ID'),
20
+ memo: z.string().optional().describe('New transaction memo'),
21
+ cleared: z.enum(['cleared', 'uncleared', 'reconciled']).optional().describe('New cleared status'),
22
+ approved: z.boolean().optional().describe('New approval status'),
23
+ flag_color: z.enum(['red', 'orange', 'yellow', 'green', 'blue', 'purple']).optional().describe('New flag color'),
24
+ }),
25
+ output: z.object({
26
+ transaction: transactionSchema,
27
+ }),
28
+ handle: async (params) => {
29
+ const planId = getPlanId();
30
+ const transaction = {
31
+ id: params.transaction_id,
32
+ entities_account_id: params.account_id,
33
+ };
34
+ if (params.date !== undefined)
35
+ transaction.date = params.date;
36
+ if (params.amount !== undefined)
37
+ transaction.amount = Math.round(params.amount * 1000);
38
+ if (params.payee_name !== undefined)
39
+ transaction.payee_name = params.payee_name;
40
+ if (params.payee_id !== undefined)
41
+ transaction.entities_payee_id = params.payee_id;
42
+ if (params.category_id !== undefined)
43
+ transaction.entities_subcategory_id = params.category_id;
44
+ if (params.memo !== undefined)
45
+ transaction.memo = params.memo;
46
+ if (params.cleared !== undefined)
47
+ transaction.cleared = params.cleared;
48
+ if (params.approved !== undefined)
49
+ transaction.approved = params.approved;
50
+ if (params.flag_color !== undefined)
51
+ transaction.flag_color = params.flag_color;
52
+ const result = await syncWrite(planId, {
53
+ be_transactions: [transaction],
54
+ });
55
+ const saved = result.changed_entities?.be_transactions?.[0];
56
+ if (!saved) {
57
+ throw ToolError.internal('Transaction was updated but no data was returned');
58
+ }
59
+ return { transaction: mapTransaction(saved) };
60
+ },
61
+ });
62
+ //# sourceMappingURL=update-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-transaction.js","sourceRoot":"","sources":["../../src/tools/update-transaction.ts"],"names":[],"mappings":"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"}