@goodsamsoftware/freshbooks-mcp 1.0.0
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/LICENSE +21 -0
- package/README.md +357 -0
- package/dist/auth/config.d.ts +57 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +118 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/index.d.ts +47 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +46 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth.d.ts +93 -0
- package/dist/auth/oauth.d.ts.map +1 -0
- package/dist/auth/oauth.js +279 -0
- package/dist/auth/oauth.js.map +1 -0
- package/dist/auth/token-store.d.ts +80 -0
- package/dist/auth/token-store.d.ts.map +1 -0
- package/dist/auth/token-store.js +204 -0
- package/dist/auth/token-store.js.map +1 -0
- package/dist/auth/types.d.ts +76 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +20 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/client/freshbooks-client.d.ts +99 -0
- package/dist/client/freshbooks-client.d.ts.map +1 -0
- package/dist/client/freshbooks-client.js +283 -0
- package/dist/client/freshbooks-client.js.map +1 -0
- package/dist/client/index.d.ts +5 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +5 -0
- package/dist/client/index.js.map +1 -0
- package/dist/config/index.d.ts +17 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +81 -0
- package/dist/config/index.js.map +1 -0
- package/dist/errors/documentation.d.ts +57 -0
- package/dist/errors/documentation.d.ts.map +1 -0
- package/dist/errors/documentation.js +390 -0
- package/dist/errors/documentation.js.map +1 -0
- package/dist/errors/error-codes.d.ts +45 -0
- package/dist/errors/error-codes.d.ts.map +1 -0
- package/dist/errors/error-codes.js +94 -0
- package/dist/errors/error-codes.js.map +1 -0
- package/dist/errors/error-handler.d.ts +127 -0
- package/dist/errors/error-handler.d.ts.map +1 -0
- package/dist/errors/error-handler.js +283 -0
- package/dist/errors/error-handler.js.map +1 -0
- package/dist/errors/error-mapper.d.ts +68 -0
- package/dist/errors/error-mapper.d.ts.map +1 -0
- package/dist/errors/error-mapper.js +449 -0
- package/dist/errors/error-mapper.js.map +1 -0
- package/dist/errors/index.d.ts +37 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +41 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/response-formatter.d.ts +109 -0
- package/dist/errors/response-formatter.d.ts.map +1 -0
- package/dist/errors/response-formatter.js +232 -0
- package/dist/errors/response-formatter.js.map +1 -0
- package/dist/errors/types.d.ts +194 -0
- package/dist/errors/types.d.ts.map +1 -0
- package/dist/errors/types.js +134 -0
- package/dist/errors/types.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +263 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/base-tool.d.ts +146 -0
- package/dist/tools/base-tool.d.ts.map +1 -0
- package/dist/tools/base-tool.js +161 -0
- package/dist/tools/base-tool.js.map +1 -0
- package/dist/tools/bill/bill-archive.d.ts +40 -0
- package/dist/tools/bill/bill-archive.d.ts.map +1 -0
- package/dist/tools/bill/bill-archive.js +68 -0
- package/dist/tools/bill/bill-archive.js.map +1 -0
- package/dist/tools/bill/bill-create.d.ts +178 -0
- package/dist/tools/bill/bill-create.d.ts.map +1 -0
- package/dist/tools/bill/bill-create.js +70 -0
- package/dist/tools/bill/bill-create.js.map +1 -0
- package/dist/tools/bill/bill-delete.d.ts +40 -0
- package/dist/tools/bill/bill-delete.d.ts.map +1 -0
- package/dist/tools/bill/bill-delete.js +67 -0
- package/dist/tools/bill/bill-delete.js.map +1 -0
- package/dist/tools/bill/bill-list.d.ts +249 -0
- package/dist/tools/bill/bill-list.d.ts.map +1 -0
- package/dist/tools/bill/bill-list.js +114 -0
- package/dist/tools/bill/bill-list.js.map +1 -0
- package/dist/tools/bill/bill-single.d.ts +142 -0
- package/dist/tools/bill/bill-single.d.ts.map +1 -0
- package/dist/tools/bill/bill-single.js +62 -0
- package/dist/tools/bill/bill-single.js.map +1 -0
- package/dist/tools/bill/index.d.ts +11 -0
- package/dist/tools/bill/index.d.ts.map +1 -0
- package/dist/tools/bill/index.js +13 -0
- package/dist/tools/bill/index.js.map +1 -0
- package/dist/tools/bill/schemas.d.ts +609 -0
- package/dist/tools/bill/schemas.d.ts.map +1 -0
- package/dist/tools/bill/schemas.js +124 -0
- package/dist/tools/bill/schemas.js.map +1 -0
- package/dist/tools/bill-payment/billpayment-create.d.ts +103 -0
- package/dist/tools/bill-payment/billpayment-create.d.ts.map +1 -0
- package/dist/tools/bill-payment/billpayment-create.js +67 -0
- package/dist/tools/bill-payment/billpayment-create.js.map +1 -0
- package/dist/tools/bill-payment/billpayment-delete.d.ts +40 -0
- package/dist/tools/bill-payment/billpayment-delete.d.ts.map +1 -0
- package/dist/tools/bill-payment/billpayment-delete.js +67 -0
- package/dist/tools/bill-payment/billpayment-delete.js.map +1 -0
- package/dist/tools/bill-payment/billpayment-list.d.ts +148 -0
- package/dist/tools/bill-payment/billpayment-list.d.ts.map +1 -0
- package/dist/tools/bill-payment/billpayment-list.js +111 -0
- package/dist/tools/bill-payment/billpayment-list.js.map +1 -0
- package/dist/tools/bill-payment/billpayment-single.d.ts +76 -0
- package/dist/tools/bill-payment/billpayment-single.d.ts.map +1 -0
- package/dist/tools/bill-payment/billpayment-single.js +62 -0
- package/dist/tools/bill-payment/billpayment-single.js.map +1 -0
- package/dist/tools/bill-payment/billpayment-update.d.ts +103 -0
- package/dist/tools/bill-payment/billpayment-update.d.ts.map +1 -0
- package/dist/tools/bill-payment/billpayment-update.js +67 -0
- package/dist/tools/bill-payment/billpayment-update.js.map +1 -0
- package/dist/tools/bill-payment/index.d.ts +11 -0
- package/dist/tools/bill-payment/index.d.ts.map +1 -0
- package/dist/tools/bill-payment/index.js +13 -0
- package/dist/tools/bill-payment/index.js.map +1 -0
- package/dist/tools/bill-payment/schemas.d.ts +381 -0
- package/dist/tools/bill-payment/schemas.d.ts.map +1 -0
- package/dist/tools/bill-payment/schemas.js +113 -0
- package/dist/tools/bill-payment/schemas.js.map +1 -0
- package/dist/tools/bill-vendor/billvendor-create.d.ts +139 -0
- package/dist/tools/bill-vendor/billvendor-create.d.ts.map +1 -0
- package/dist/tools/bill-vendor/billvendor-create.js +72 -0
- package/dist/tools/bill-vendor/billvendor-create.js.map +1 -0
- package/dist/tools/bill-vendor/billvendor-delete.d.ts +40 -0
- package/dist/tools/bill-vendor/billvendor-delete.d.ts.map +1 -0
- package/dist/tools/bill-vendor/billvendor-delete.js +67 -0
- package/dist/tools/bill-vendor/billvendor-delete.js.map +1 -0
- package/dist/tools/bill-vendor/billvendor-list.d.ts +179 -0
- package/dist/tools/bill-vendor/billvendor-list.d.ts.map +1 -0
- package/dist/tools/bill-vendor/billvendor-list.js +109 -0
- package/dist/tools/bill-vendor/billvendor-list.js.map +1 -0
- package/dist/tools/bill-vendor/billvendor-single.d.ts +94 -0
- package/dist/tools/bill-vendor/billvendor-single.d.ts.map +1 -0
- package/dist/tools/bill-vendor/billvendor-single.js +62 -0
- package/dist/tools/bill-vendor/billvendor-single.js.map +1 -0
- package/dist/tools/bill-vendor/billvendor-update.d.ts +142 -0
- package/dist/tools/bill-vendor/billvendor-update.d.ts.map +1 -0
- package/dist/tools/bill-vendor/billvendor-update.js +72 -0
- package/dist/tools/bill-vendor/billvendor-update.js.map +1 -0
- package/dist/tools/bill-vendor/index.d.ts +11 -0
- package/dist/tools/bill-vendor/index.d.ts.map +1 -0
- package/dist/tools/bill-vendor/index.js +13 -0
- package/dist/tools/bill-vendor/index.js.map +1 -0
- package/dist/tools/bill-vendor/schemas.d.ts +483 -0
- package/dist/tools/bill-vendor/schemas.d.ts.map +1 -0
- package/dist/tools/bill-vendor/schemas.js +136 -0
- package/dist/tools/bill-vendor/schemas.js.map +1 -0
- package/dist/tools/callback/callback-create.d.ts +52 -0
- package/dist/tools/callback/callback-create.d.ts.map +1 -0
- package/dist/tools/callback/callback-create.js +73 -0
- package/dist/tools/callback/callback-create.js.map +1 -0
- package/dist/tools/callback/callback-delete.d.ts +37 -0
- package/dist/tools/callback/callback-delete.d.ts.map +1 -0
- package/dist/tools/callback/callback-delete.js +57 -0
- package/dist/tools/callback/callback-delete.js.map +1 -0
- package/dist/tools/callback/callback-list.d.ts +100 -0
- package/dist/tools/callback/callback-list.d.ts.map +1 -0
- package/dist/tools/callback/callback-list.js +84 -0
- package/dist/tools/callback/callback-list.js.map +1 -0
- package/dist/tools/callback/callback-resend-verification.d.ts +49 -0
- package/dist/tools/callback/callback-resend-verification.d.ts.map +1 -0
- package/dist/tools/callback/callback-resend-verification.js +63 -0
- package/dist/tools/callback/callback-resend-verification.js.map +1 -0
- package/dist/tools/callback/callback-single.d.ts +49 -0
- package/dist/tools/callback/callback-single.d.ts.map +1 -0
- package/dist/tools/callback/callback-single.js +53 -0
- package/dist/tools/callback/callback-single.js.map +1 -0
- package/dist/tools/callback/callback-update.d.ts +55 -0
- package/dist/tools/callback/callback-update.d.ts.map +1 -0
- package/dist/tools/callback/callback-update.js +62 -0
- package/dist/tools/callback/callback-update.js.map +1 -0
- package/dist/tools/callback/callback-verify.d.ts +43 -0
- package/dist/tools/callback/callback-verify.d.ts.map +1 -0
- package/dist/tools/callback/callback-verify.js +69 -0
- package/dist/tools/callback/callback-verify.js.map +1 -0
- package/dist/tools/callback/index.d.ts +13 -0
- package/dist/tools/callback/index.d.ts.map +1 -0
- package/dist/tools/callback/index.js +15 -0
- package/dist/tools/callback/index.js.map +1 -0
- package/dist/tools/callback/schemas.d.ts +284 -0
- package/dist/tools/callback/schemas.d.ts.map +1 -0
- package/dist/tools/callback/schemas.js +114 -0
- package/dist/tools/callback/schemas.js.map +1 -0
- package/dist/tools/client/client-create.d.ts +211 -0
- package/dist/tools/client/client-create.d.ts.map +1 -0
- package/dist/tools/client/client-create.js +147 -0
- package/dist/tools/client/client-create.js.map +1 -0
- package/dist/tools/client/client-delete.d.ts +40 -0
- package/dist/tools/client/client-delete.d.ts.map +1 -0
- package/dist/tools/client/client-delete.js +73 -0
- package/dist/tools/client/client-delete.js.map +1 -0
- package/dist/tools/client/client-list.d.ts +264 -0
- package/dist/tools/client/client-list.d.ts.map +1 -0
- package/dist/tools/client/client-list.js +131 -0
- package/dist/tools/client/client-list.js.map +1 -0
- package/dist/tools/client/client-single.d.ts +133 -0
- package/dist/tools/client/client-single.d.ts.map +1 -0
- package/dist/tools/client/client-single.js +67 -0
- package/dist/tools/client/client-single.js.map +1 -0
- package/dist/tools/client/client-update.d.ts +217 -0
- package/dist/tools/client/client-update.d.ts.map +1 -0
- package/dist/tools/client/client-update.js +146 -0
- package/dist/tools/client/client-update.js.map +1 -0
- package/dist/tools/client/index.d.ts +11 -0
- package/dist/tools/client/index.d.ts.map +1 -0
- package/dist/tools/client/index.js +13 -0
- package/dist/tools/client/index.js.map +1 -0
- package/dist/tools/client/schemas.d.ts +759 -0
- package/dist/tools/client/schemas.d.ts.map +1 -0
- package/dist/tools/client/schemas.js +241 -0
- package/dist/tools/client/schemas.js.map +1 -0
- package/dist/tools/credit-note/creditnote-create.d.ts +448 -0
- package/dist/tools/credit-note/creditnote-create.d.ts.map +1 -0
- package/dist/tools/credit-note/creditnote-create.js +88 -0
- package/dist/tools/credit-note/creditnote-create.js.map +1 -0
- package/dist/tools/credit-note/creditnote-delete.d.ts +37 -0
- package/dist/tools/credit-note/creditnote-delete.d.ts.map +1 -0
- package/dist/tools/credit-note/creditnote-delete.js +57 -0
- package/dist/tools/credit-note/creditnote-delete.js.map +1 -0
- package/dist/tools/credit-note/creditnote-list.d.ts +627 -0
- package/dist/tools/credit-note/creditnote-list.d.ts.map +1 -0
- package/dist/tools/credit-note/creditnote-list.js +106 -0
- package/dist/tools/credit-note/creditnote-list.js.map +1 -0
- package/dist/tools/credit-note/creditnote-single.d.ts +358 -0
- package/dist/tools/credit-note/creditnote-single.d.ts.map +1 -0
- package/dist/tools/credit-note/creditnote-single.js +60 -0
- package/dist/tools/credit-note/creditnote-single.js.map +1 -0
- package/dist/tools/credit-note/creditnote-update.d.ts +442 -0
- package/dist/tools/credit-note/creditnote-update.d.ts.map +1 -0
- package/dist/tools/credit-note/creditnote-update.js +82 -0
- package/dist/tools/credit-note/creditnote-update.js.map +1 -0
- package/dist/tools/credit-note/index.d.ts +11 -0
- package/dist/tools/credit-note/index.d.ts.map +1 -0
- package/dist/tools/credit-note/index.js +13 -0
- package/dist/tools/credit-note/index.js.map +1 -0
- package/dist/tools/credit-note/schemas.d.ts +1599 -0
- package/dist/tools/credit-note/schemas.d.ts.map +1 -0
- package/dist/tools/credit-note/schemas.js +196 -0
- package/dist/tools/credit-note/schemas.js.map +1 -0
- package/dist/tools/expense/expense-create.d.ts +196 -0
- package/dist/tools/expense/expense-create.d.ts.map +1 -0
- package/dist/tools/expense/expense-create.js +103 -0
- package/dist/tools/expense/expense-create.js.map +1 -0
- package/dist/tools/expense/expense-delete.d.ts +40 -0
- package/dist/tools/expense/expense-delete.d.ts.map +1 -0
- package/dist/tools/expense/expense-delete.js +73 -0
- package/dist/tools/expense/expense-delete.js.map +1 -0
- package/dist/tools/expense/expense-list.d.ts +264 -0
- package/dist/tools/expense/expense-list.d.ts.map +1 -0
- package/dist/tools/expense/expense-list.js +126 -0
- package/dist/tools/expense/expense-list.js.map +1 -0
- package/dist/tools/expense/expense-single.d.ts +145 -0
- package/dist/tools/expense/expense-single.d.ts.map +1 -0
- package/dist/tools/expense/expense-single.js +63 -0
- package/dist/tools/expense/expense-single.js.map +1 -0
- package/dist/tools/expense/expense-update.d.ts +199 -0
- package/dist/tools/expense/expense-update.d.ts.map +1 -0
- package/dist/tools/expense/expense-update.js +108 -0
- package/dist/tools/expense/expense-update.js.map +1 -0
- package/dist/tools/expense/index.d.ts +11 -0
- package/dist/tools/expense/index.d.ts.map +1 -0
- package/dist/tools/expense/index.js +13 -0
- package/dist/tools/expense/index.js.map +1 -0
- package/dist/tools/expense/schemas.d.ts +667 -0
- package/dist/tools/expense/schemas.d.ts.map +1 -0
- package/dist/tools/expense/schemas.js +142 -0
- package/dist/tools/expense/schemas.js.map +1 -0
- package/dist/tools/expense-category/expensecategory-list.d.ts +113 -0
- package/dist/tools/expense-category/expensecategory-list.d.ts.map +1 -0
- package/dist/tools/expense-category/expensecategory-list.js +113 -0
- package/dist/tools/expense-category/expensecategory-list.js.map +1 -0
- package/dist/tools/expense-category/expensecategory-single.d.ts +58 -0
- package/dist/tools/expense-category/expensecategory-single.d.ts.map +1 -0
- package/dist/tools/expense-category/expensecategory-single.js +66 -0
- package/dist/tools/expense-category/expensecategory-single.js.map +1 -0
- package/dist/tools/expense-category/index.d.ts +9 -0
- package/dist/tools/expense-category/index.d.ts.map +1 -0
- package/dist/tools/expense-category/index.js +11 -0
- package/dist/tools/expense-category/index.js.map +1 -0
- package/dist/tools/expense-category/schemas.d.ts +184 -0
- package/dist/tools/expense-category/schemas.d.ts.map +1 -0
- package/dist/tools/expense-category/schemas.js +58 -0
- package/dist/tools/expense-category/schemas.js.map +1 -0
- package/dist/tools/index.d.ts +53 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +98 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/invoice/index.d.ts +12 -0
- package/dist/tools/invoice/index.d.ts.map +1 -0
- package/dist/tools/invoice/index.js +14 -0
- package/dist/tools/invoice/index.js.map +1 -0
- package/dist/tools/invoice/invoice-create.d.ts +367 -0
- package/dist/tools/invoice/invoice-create.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-create.js +115 -0
- package/dist/tools/invoice/invoice-create.js.map +1 -0
- package/dist/tools/invoice/invoice-delete.d.ts +40 -0
- package/dist/tools/invoice/invoice-delete.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-delete.js +75 -0
- package/dist/tools/invoice/invoice-delete.js.map +1 -0
- package/dist/tools/invoice/invoice-list.d.ts +439 -0
- package/dist/tools/invoice/invoice-list.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-list.js +126 -0
- package/dist/tools/invoice/invoice-list.js.map +1 -0
- package/dist/tools/invoice/invoice-share-link.d.ts +40 -0
- package/dist/tools/invoice/invoice-share-link.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-share-link.js +89 -0
- package/dist/tools/invoice/invoice-share-link.js.map +1 -0
- package/dist/tools/invoice/invoice-single.d.ts +265 -0
- package/dist/tools/invoice/invoice-single.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-single.js +66 -0
- package/dist/tools/invoice/invoice-single.js.map +1 -0
- package/dist/tools/invoice/invoice-update.d.ts +373 -0
- package/dist/tools/invoice/invoice-update.d.ts.map +1 -0
- package/dist/tools/invoice/invoice-update.js +122 -0
- package/dist/tools/invoice/invoice-update.js.map +1 -0
- package/dist/tools/invoice/schemas.d.ts +1414 -0
- package/dist/tools/invoice/schemas.d.ts.map +1 -0
- package/dist/tools/invoice/schemas.js +269 -0
- package/dist/tools/invoice/schemas.js.map +1 -0
- package/dist/tools/item/index.d.ts +10 -0
- package/dist/tools/item/index.d.ts.map +1 -0
- package/dist/tools/item/index.js +12 -0
- package/dist/tools/item/index.js.map +1 -0
- package/dist/tools/item/item-create.d.ts +136 -0
- package/dist/tools/item/item-create.d.ts.map +1 -0
- package/dist/tools/item/item-create.js +71 -0
- package/dist/tools/item/item-create.js.map +1 -0
- package/dist/tools/item/item-list.d.ts +178 -0
- package/dist/tools/item/item-list.d.ts.map +1 -0
- package/dist/tools/item/item-list.js +112 -0
- package/dist/tools/item/item-list.js.map +1 -0
- package/dist/tools/item/item-single.d.ts +94 -0
- package/dist/tools/item/item-single.d.ts.map +1 -0
- package/dist/tools/item/item-single.js +62 -0
- package/dist/tools/item/item-single.js.map +1 -0
- package/dist/tools/item/item-update.d.ts +139 -0
- package/dist/tools/item/item-update.d.ts.map +1 -0
- package/dist/tools/item/item-update.js +74 -0
- package/dist/tools/item/item-update.js.map +1 -0
- package/dist/tools/item/schemas.d.ts +454 -0
- package/dist/tools/item/schemas.d.ts.map +1 -0
- package/dist/tools/item/schemas.js +116 -0
- package/dist/tools/item/schemas.js.map +1 -0
- package/dist/tools/journal-entry/index.d.ts +7 -0
- package/dist/tools/journal-entry/index.d.ts.map +1 -0
- package/dist/tools/journal-entry/index.js +9 -0
- package/dist/tools/journal-entry/index.js.map +1 -0
- package/dist/tools/journal-entry/journalentry-create.d.ts +114 -0
- package/dist/tools/journal-entry/journalentry-create.d.ts.map +1 -0
- package/dist/tools/journal-entry/journalentry-create.js +98 -0
- package/dist/tools/journal-entry/journalentry-create.js.map +1 -0
- package/dist/tools/journal-entry/schemas.d.ts +182 -0
- package/dist/tools/journal-entry/schemas.d.ts.map +1 -0
- package/dist/tools/journal-entry/schemas.js +43 -0
- package/dist/tools/journal-entry/schemas.js.map +1 -0
- package/dist/tools/journal-entry-account/index.d.ts +7 -0
- package/dist/tools/journal-entry-account/index.d.ts.map +1 -0
- package/dist/tools/journal-entry-account/index.js +9 -0
- package/dist/tools/journal-entry-account/index.js.map +1 -0
- package/dist/tools/journal-entry-account/journalentryaccount-list.d.ts +190 -0
- package/dist/tools/journal-entry-account/journalentryaccount-list.d.ts.map +1 -0
- package/dist/tools/journal-entry-account/journalentryaccount-list.js +102 -0
- package/dist/tools/journal-entry-account/journalentryaccount-list.js.map +1 -0
- package/dist/tools/journal-entry-account/schemas.d.ts +344 -0
- package/dist/tools/journal-entry-account/schemas.d.ts.map +1 -0
- package/dist/tools/journal-entry-account/schemas.js +65 -0
- package/dist/tools/journal-entry-account/schemas.js.map +1 -0
- package/dist/tools/metadata.d.ts +49 -0
- package/dist/tools/metadata.d.ts.map +1 -0
- package/dist/tools/metadata.js +317 -0
- package/dist/tools/metadata.js.map +1 -0
- package/dist/tools/other-income/index.d.ts +11 -0
- package/dist/tools/other-income/index.d.ts.map +1 -0
- package/dist/tools/other-income/index.js +13 -0
- package/dist/tools/other-income/index.js.map +1 -0
- package/dist/tools/other-income/otherincome-create.d.ts +152 -0
- package/dist/tools/other-income/otherincome-create.d.ts.map +1 -0
- package/dist/tools/other-income/otherincome-create.js +89 -0
- package/dist/tools/other-income/otherincome-create.js.map +1 -0
- package/dist/tools/other-income/otherincome-delete.d.ts +37 -0
- package/dist/tools/other-income/otherincome-delete.d.ts.map +1 -0
- package/dist/tools/other-income/otherincome-delete.js +57 -0
- package/dist/tools/other-income/otherincome-delete.js.map +1 -0
- package/dist/tools/other-income/otherincome-list.d.ts +186 -0
- package/dist/tools/other-income/otherincome-list.d.ts.map +1 -0
- package/dist/tools/other-income/otherincome-list.js +107 -0
- package/dist/tools/other-income/otherincome-list.js.map +1 -0
- package/dist/tools/other-income/otherincome-single.d.ts +99 -0
- package/dist/tools/other-income/otherincome-single.d.ts.map +1 -0
- package/dist/tools/other-income/otherincome-single.js +53 -0
- package/dist/tools/other-income/otherincome-single.js.map +1 -0
- package/dist/tools/other-income/otherincome-update.d.ts +155 -0
- package/dist/tools/other-income/otherincome-update.d.ts.map +1 -0
- package/dist/tools/other-income/otherincome-update.js +84 -0
- package/dist/tools/other-income/otherincome-update.js.map +1 -0
- package/dist/tools/other-income/schemas.d.ts +510 -0
- package/dist/tools/other-income/schemas.d.ts.map +1 -0
- package/dist/tools/other-income/schemas.js +141 -0
- package/dist/tools/other-income/schemas.js.map +1 -0
- package/dist/tools/payment/index.d.ts +11 -0
- package/dist/tools/payment/index.d.ts.map +1 -0
- package/dist/tools/payment/index.js +13 -0
- package/dist/tools/payment/index.js.map +1 -0
- package/dist/tools/payment/payment-create.d.ts +127 -0
- package/dist/tools/payment/payment-create.d.ts.map +1 -0
- package/dist/tools/payment/payment-create.js +84 -0
- package/dist/tools/payment/payment-create.js.map +1 -0
- package/dist/tools/payment/payment-delete.d.ts +40 -0
- package/dist/tools/payment/payment-delete.d.ts.map +1 -0
- package/dist/tools/payment/payment-delete.js +67 -0
- package/dist/tools/payment/payment-delete.js.map +1 -0
- package/dist/tools/payment/payment-list.d.ts +186 -0
- package/dist/tools/payment/payment-list.d.ts.map +1 -0
- package/dist/tools/payment/payment-list.js +113 -0
- package/dist/tools/payment/payment-list.js.map +1 -0
- package/dist/tools/payment/payment-single.d.ts +97 -0
- package/dist/tools/payment/payment-single.d.ts.map +1 -0
- package/dist/tools/payment/payment-single.js +62 -0
- package/dist/tools/payment/payment-single.js.map +1 -0
- package/dist/tools/payment/payment-update.d.ts +124 -0
- package/dist/tools/payment/payment-update.d.ts.map +1 -0
- package/dist/tools/payment/payment-update.js +79 -0
- package/dist/tools/payment/payment-update.js.map +1 -0
- package/dist/tools/payment/schemas.d.ts +445 -0
- package/dist/tools/payment/schemas.d.ts.map +1 -0
- package/dist/tools/payment/schemas.js +126 -0
- package/dist/tools/payment/schemas.js.map +1 -0
- package/dist/tools/payment-options/index.d.ts +9 -0
- package/dist/tools/payment-options/index.d.ts.map +1 -0
- package/dist/tools/payment-options/index.js +11 -0
- package/dist/tools/payment-options/index.js.map +1 -0
- package/dist/tools/payment-options/paymentoptions-create.d.ts +91 -0
- package/dist/tools/payment-options/paymentoptions-create.d.ts.map +1 -0
- package/dist/tools/payment-options/paymentoptions-create.js +71 -0
- package/dist/tools/payment-options/paymentoptions-create.js.map +1 -0
- package/dist/tools/payment-options/paymentoptions-default.d.ts +43 -0
- package/dist/tools/payment-options/paymentoptions-default.d.ts.map +1 -0
- package/dist/tools/payment-options/paymentoptions-default.js +64 -0
- package/dist/tools/payment-options/paymentoptions-default.js.map +1 -0
- package/dist/tools/payment-options/paymentoptions-single.d.ts +76 -0
- package/dist/tools/payment-options/paymentoptions-single.d.ts.map +1 -0
- package/dist/tools/payment-options/paymentoptions-single.js +58 -0
- package/dist/tools/payment-options/paymentoptions-single.js.map +1 -0
- package/dist/tools/payment-options/schemas.d.ts +197 -0
- package/dist/tools/payment-options/schemas.d.ts.map +1 -0
- package/dist/tools/payment-options/schemas.js +69 -0
- package/dist/tools/payment-options/schemas.js.map +1 -0
- package/dist/tools/project/index.d.ts +11 -0
- package/dist/tools/project/index.d.ts.map +1 -0
- package/dist/tools/project/index.js +13 -0
- package/dist/tools/project/index.js.map +1 -0
- package/dist/tools/project/project-create.d.ts +142 -0
- package/dist/tools/project/project-create.d.ts.map +1 -0
- package/dist/tools/project/project-create.js +100 -0
- package/dist/tools/project/project-create.js.map +1 -0
- package/dist/tools/project/project-delete.d.ts +44 -0
- package/dist/tools/project/project-delete.d.ts.map +1 -0
- package/dist/tools/project/project-delete.js +80 -0
- package/dist/tools/project/project-delete.js.map +1 -0
- package/dist/tools/project/project-list.d.ts +227 -0
- package/dist/tools/project/project-list.d.ts.map +1 -0
- package/dist/tools/project/project-list.js +118 -0
- package/dist/tools/project/project-list.js.map +1 -0
- package/dist/tools/project/project-single.d.ts +115 -0
- package/dist/tools/project/project-single.d.ts.map +1 -0
- package/dist/tools/project/project-single.js +63 -0
- package/dist/tools/project/project-single.js.map +1 -0
- package/dist/tools/project/project-update.d.ts +151 -0
- package/dist/tools/project/project-update.d.ts.map +1 -0
- package/dist/tools/project/project-update.js +106 -0
- package/dist/tools/project/project-update.js.map +1 -0
- package/dist/tools/project/schemas.d.ts +588 -0
- package/dist/tools/project/schemas.d.ts.map +1 -0
- package/dist/tools/project/schemas.js +196 -0
- package/dist/tools/project/schemas.js.map +1 -0
- package/dist/tools/report/index.d.ts +9 -0
- package/dist/tools/report/index.d.ts.map +1 -0
- package/dist/tools/report/index.js +11 -0
- package/dist/tools/report/index.js.map +1 -0
- package/dist/tools/report/report-payments-collected.d.ts +118 -0
- package/dist/tools/report/report-payments-collected.d.ts.map +1 -0
- package/dist/tools/report/report-payments-collected.js +89 -0
- package/dist/tools/report/report-payments-collected.js.map +1 -0
- package/dist/tools/report/report-profit-loss.d.ts +139 -0
- package/dist/tools/report/report-profit-loss.d.ts.map +1 -0
- package/dist/tools/report/report-profit-loss.js +98 -0
- package/dist/tools/report/report-profit-loss.js.map +1 -0
- package/dist/tools/report/report-tax-summary.d.ts +155 -0
- package/dist/tools/report/report-tax-summary.d.ts.map +1 -0
- package/dist/tools/report/report-tax-summary.js +100 -0
- package/dist/tools/report/report-tax-summary.js.map +1 -0
- package/dist/tools/report/schemas.d.ts +859 -0
- package/dist/tools/report/schemas.d.ts.map +1 -0
- package/dist/tools/report/schemas.js +126 -0
- package/dist/tools/report/schemas.js.map +1 -0
- package/dist/tools/service/index.d.ts +12 -0
- package/dist/tools/service/index.d.ts.map +1 -0
- package/dist/tools/service/index.js +14 -0
- package/dist/tools/service/index.js.map +1 -0
- package/dist/tools/service/schemas.d.ts +159 -0
- package/dist/tools/service/schemas.d.ts.map +1 -0
- package/dist/tools/service/schemas.js +62 -0
- package/dist/tools/service/schemas.js.map +1 -0
- package/dist/tools/service/service-create.d.ts +52 -0
- package/dist/tools/service/service-create.d.ts.map +1 -0
- package/dist/tools/service/service-create.js +82 -0
- package/dist/tools/service/service-create.js.map +1 -0
- package/dist/tools/service/service-list.d.ts +119 -0
- package/dist/tools/service/service-list.d.ts.map +1 -0
- package/dist/tools/service/service-list.js +99 -0
- package/dist/tools/service/service-list.js.map +1 -0
- package/dist/tools/service/service-rate-get.d.ts +63 -0
- package/dist/tools/service/service-rate-get.d.ts.map +1 -0
- package/dist/tools/service/service-rate-get.js +66 -0
- package/dist/tools/service/service-rate-get.js.map +1 -0
- package/dist/tools/service/service-rate-set.d.ts +76 -0
- package/dist/tools/service/service-rate-set.d.ts.map +1 -0
- package/dist/tools/service/service-rate-set.js +91 -0
- package/dist/tools/service/service-rate-set.js.map +1 -0
- package/dist/tools/service/service-single.d.ts +45 -0
- package/dist/tools/service/service-single.d.ts.map +1 -0
- package/dist/tools/service/service-single.js +63 -0
- package/dist/tools/service/service-single.js.map +1 -0
- package/dist/tools/task/index.d.ts +12 -0
- package/dist/tools/task/index.d.ts.map +1 -0
- package/dist/tools/task/index.js +14 -0
- package/dist/tools/task/index.js.map +1 -0
- package/dist/tools/task/schemas.d.ts +299 -0
- package/dist/tools/task/schemas.d.ts.map +1 -0
- package/dist/tools/task/schemas.js +89 -0
- package/dist/tools/task/schemas.js.map +1 -0
- package/dist/tools/task/task-create.d.ts +101 -0
- package/dist/tools/task/task-create.d.ts.map +1 -0
- package/dist/tools/task/task-create.js +77 -0
- package/dist/tools/task/task-create.js.map +1 -0
- package/dist/tools/task/task-delete.d.ts +39 -0
- package/dist/tools/task/task-delete.d.ts.map +1 -0
- package/dist/tools/task/task-delete.js +70 -0
- package/dist/tools/task/task-delete.js.map +1 -0
- package/dist/tools/task/task-list.d.ts +157 -0
- package/dist/tools/task/task-list.d.ts.map +1 -0
- package/dist/tools/task/task-list.js +78 -0
- package/dist/tools/task/task-list.js.map +1 -0
- package/dist/tools/task/task-single.d.ts +77 -0
- package/dist/tools/task/task-single.d.ts.map +1 -0
- package/dist/tools/task/task-single.js +56 -0
- package/dist/tools/task/task-single.js.map +1 -0
- package/dist/tools/task/task-update.d.ts +107 -0
- package/dist/tools/task/task-update.d.ts.map +1 -0
- package/dist/tools/task/task-update.js +87 -0
- package/dist/tools/task/task-update.js.map +1 -0
- package/dist/tools/time-entry/index.d.ts +11 -0
- package/dist/tools/time-entry/index.d.ts.map +1 -0
- package/dist/tools/time-entry/index.js +11 -0
- package/dist/tools/time-entry/index.js.map +1 -0
- package/dist/tools/time-entry/schemas.d.ts +598 -0
- package/dist/tools/time-entry/schemas.d.ts.map +1 -0
- package/dist/tools/time-entry/schemas.js +217 -0
- package/dist/tools/time-entry/schemas.js.map +1 -0
- package/dist/tools/time-entry/timeentry-create.d.ts +142 -0
- package/dist/tools/time-entry/timeentry-create.d.ts.map +1 -0
- package/dist/tools/time-entry/timeentry-create.js +137 -0
- package/dist/tools/time-entry/timeentry-create.js.map +1 -0
- package/dist/tools/time-entry/timeentry-delete.d.ts +43 -0
- package/dist/tools/time-entry/timeentry-delete.d.ts.map +1 -0
- package/dist/tools/time-entry/timeentry-delete.js +93 -0
- package/dist/tools/time-entry/timeentry-delete.js.map +1 -0
- package/dist/tools/time-entry/timeentry-list.d.ts +232 -0
- package/dist/tools/time-entry/timeentry-list.d.ts.map +1 -0
- package/dist/tools/time-entry/timeentry-list.js +154 -0
- package/dist/tools/time-entry/timeentry-list.js.map +1 -0
- package/dist/tools/time-entry/timeentry-single.d.ts +109 -0
- package/dist/tools/time-entry/timeentry-single.d.ts.map +1 -0
- package/dist/tools/time-entry/timeentry-single.js +75 -0
- package/dist/tools/time-entry/timeentry-single.js.map +1 -0
- package/dist/tools/time-entry/timeentry-update.d.ts +145 -0
- package/dist/tools/time-entry/timeentry-update.d.ts.map +1 -0
- package/dist/tools/time-entry/timeentry-update.js +174 -0
- package/dist/tools/time-entry/timeentry-update.js.map +1 -0
- package/dist/tools/timer/index.d.ts +16 -0
- package/dist/tools/timer/index.d.ts.map +1 -0
- package/dist/tools/timer/index.js +19 -0
- package/dist/tools/timer/index.js.map +1 -0
- package/dist/tools/timer/schemas.d.ts +520 -0
- package/dist/tools/timer/schemas.d.ts.map +1 -0
- package/dist/tools/timer/schemas.js +109 -0
- package/dist/tools/timer/schemas.js.map +1 -0
- package/dist/tools/timer/timer-current.d.ts +170 -0
- package/dist/tools/timer/timer-current.d.ts.map +1 -0
- package/dist/tools/timer/timer-current.js +134 -0
- package/dist/tools/timer/timer-current.js.map +1 -0
- package/dist/tools/timer/timer-discard.d.ts +54 -0
- package/dist/tools/timer/timer-discard.d.ts.map +1 -0
- package/dist/tools/timer/timer-discard.js +115 -0
- package/dist/tools/timer/timer-discard.js.map +1 -0
- package/dist/tools/timer/timer-start.d.ts +135 -0
- package/dist/tools/timer/timer-start.d.ts.map +1 -0
- package/dist/tools/timer/timer-start.js +129 -0
- package/dist/tools/timer/timer-start.js.map +1 -0
- package/dist/tools/timer/timer-stop.d.ts +123 -0
- package/dist/tools/timer/timer-stop.d.ts.map +1 -0
- package/dist/tools/timer/timer-stop.js +165 -0
- package/dist/tools/timer/timer-stop.js.map +1 -0
- package/dist/tools/types.d.ts +49 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +61 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/user/index.d.ts +7 -0
- package/dist/tools/user/index.d.ts.map +1 -0
- package/dist/tools/user/index.js +9 -0
- package/dist/tools/user/index.js.map +1 -0
- package/dist/tools/user/schemas.d.ts +258 -0
- package/dist/tools/user/schemas.d.ts.map +1 -0
- package/dist/tools/user/schemas.js +51 -0
- package/dist/tools/user/schemas.js.map +1 -0
- package/dist/tools/user/user-me.d.ts +129 -0
- package/dist/tools/user/user-me.d.ts.map +1 -0
- package/dist/tools/user/user-me.js +63 -0
- package/dist/tools/user/user-me.js.map +1 -0
- package/dist/types/freshbooks.d.ts +276 -0
- package/dist/types/freshbooks.d.ts.map +1 -0
- package/dist/types/freshbooks.js +6 -0
- package/dist/types/freshbooks.js.map +1 -0
- package/dist/types/index.d.ts +92 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +6 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +54 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +133 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pagination.d.ts +39 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +62 -0
- package/dist/utils/pagination.js.map +1 -0
- package/package.json +88 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timer Start Tool
|
|
3
|
+
*
|
|
4
|
+
* Starts a new timer using the /comments/business/.../time_entries endpoint.
|
|
5
|
+
* This endpoint is not supported by the SDK, so we use raw HTTP.
|
|
6
|
+
*
|
|
7
|
+
* Note: The SDK uses /timetracking/business/... but timer operations require /comments/business/...
|
|
8
|
+
*/
|
|
9
|
+
import { TimerStartInputSchema, TimerStartOutputSchema } from "./schemas.js";
|
|
10
|
+
import { ErrorHandler } from "../../errors/error-handler.js";
|
|
11
|
+
/**
|
|
12
|
+
* Tool definition for timer_start
|
|
13
|
+
*/
|
|
14
|
+
export const timerStartTool = {
|
|
15
|
+
name: "timer_start",
|
|
16
|
+
description: `Start a new timer for time tracking in FreshBooks.
|
|
17
|
+
|
|
18
|
+
WHEN TO USE:
|
|
19
|
+
- User says "start timer", "begin tracking time", "clock in"
|
|
20
|
+
- User wants to track time on a task or project
|
|
21
|
+
- Starting work on billable hours
|
|
22
|
+
|
|
23
|
+
HOW IT WORKS:
|
|
24
|
+
Creates a new time entry with:
|
|
25
|
+
- active=true (timer is running)
|
|
26
|
+
- duration=0 (will auto-calculate when stopped)
|
|
27
|
+
- startedAt=now (start time)
|
|
28
|
+
- isLogged=false (not yet logged as completed time)
|
|
29
|
+
|
|
30
|
+
IMPORTANT NOTES:
|
|
31
|
+
- FreshBooks typically allows only ONE active timer per user
|
|
32
|
+
- If a timer is already running, you may need to stop it first
|
|
33
|
+
- The timer will continue running until explicitly stopped
|
|
34
|
+
- Duration is auto-calculated from startedAt when stopped
|
|
35
|
+
|
|
36
|
+
REQUIRED:
|
|
37
|
+
- businessId: FreshBooks business ID (get from user_me -> businessMemberships[].business.id)
|
|
38
|
+
|
|
39
|
+
OPTIONAL BUT HELPFUL:
|
|
40
|
+
- projectId: Associate timer with a specific project (recommended for billing)
|
|
41
|
+
- clientId: Associate timer with a client
|
|
42
|
+
- serviceId: Type of service/work being performed
|
|
43
|
+
- taskId: Specific task within a project
|
|
44
|
+
- note: Description of work being performed (can be updated when stopping)
|
|
45
|
+
- billable: Whether time is billable (default: true)
|
|
46
|
+
- internal: Whether this is internal work (default: false)
|
|
47
|
+
|
|
48
|
+
EXAMPLE USAGE:
|
|
49
|
+
- "Start a timer for Project Alpha"
|
|
50
|
+
- "Begin tracking time on bug fixes"
|
|
51
|
+
- "Clock in for client meeting"
|
|
52
|
+
|
|
53
|
+
RETURNS:
|
|
54
|
+
Created time entry with:
|
|
55
|
+
- id: Use this ID to stop or discard the timer later
|
|
56
|
+
- active: true (timer is running)
|
|
57
|
+
- duration: 0 (will be calculated when stopped)
|
|
58
|
+
- startedAt: When timer started
|
|
59
|
+
- timer: Active timer object with isRunning=true`,
|
|
60
|
+
inputSchema: TimerStartInputSchema,
|
|
61
|
+
outputSchema: TimerStartOutputSchema,
|
|
62
|
+
async execute(input, client) {
|
|
63
|
+
const handler = ErrorHandler.wrapHandler('timer_start', async (input, _context) => {
|
|
64
|
+
const { businessId, projectId, clientId, serviceId, taskId, note, billable, internal } = input;
|
|
65
|
+
// Build the time entry payload using snake_case (raw API format)
|
|
66
|
+
// This matches the format used by the FreshBooks website
|
|
67
|
+
const timeEntryPayload = {
|
|
68
|
+
time_entry: {
|
|
69
|
+
is_logged: false,
|
|
70
|
+
duration: null, // null for active timer
|
|
71
|
+
note: note ?? null,
|
|
72
|
+
internal: internal ?? false,
|
|
73
|
+
retainer_id: null,
|
|
74
|
+
pending_client: null,
|
|
75
|
+
pending_project: null,
|
|
76
|
+
pending_task: null,
|
|
77
|
+
source: null,
|
|
78
|
+
started_at: new Date().toISOString(),
|
|
79
|
+
local_started_at: null,
|
|
80
|
+
local_timezone: null,
|
|
81
|
+
billable: billable ?? false,
|
|
82
|
+
billed: false,
|
|
83
|
+
timer: {}, // Empty object for new timer
|
|
84
|
+
identity_id: null,
|
|
85
|
+
client_id: clientId ?? null,
|
|
86
|
+
project_id: projectId ?? null,
|
|
87
|
+
service_id: serviceId ?? null,
|
|
88
|
+
task_id: taskId ?? null,
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
// Use raw HTTP to POST to /comments/business/.../time_entries
|
|
92
|
+
const result = await client.executeRawWithRetry('POST', `/comments/business/${businessId}/time_entries`, timeEntryPayload, 'timer_start');
|
|
93
|
+
if (!result.ok || !result.data) {
|
|
94
|
+
throw result.error || new Error('Failed to start timer');
|
|
95
|
+
}
|
|
96
|
+
const te = result.data.time_entry;
|
|
97
|
+
// Transform to camelCase output format
|
|
98
|
+
return {
|
|
99
|
+
id: te.id,
|
|
100
|
+
identityId: te.identity_id,
|
|
101
|
+
isLogged: te.is_logged,
|
|
102
|
+
startedAt: te.started_at,
|
|
103
|
+
createdAt: te.created_at,
|
|
104
|
+
clientId: te.client_id,
|
|
105
|
+
projectId: te.project_id,
|
|
106
|
+
taskId: te.task_id,
|
|
107
|
+
serviceId: te.service_id,
|
|
108
|
+
note: te.note,
|
|
109
|
+
active: te.active,
|
|
110
|
+
billable: te.billable,
|
|
111
|
+
billed: te.billed,
|
|
112
|
+
internal: te.internal,
|
|
113
|
+
duration: te.duration ?? 0,
|
|
114
|
+
timer: te.timer ? {
|
|
115
|
+
id: te.timer.id,
|
|
116
|
+
isRunning: te.timer.is_running ?? true,
|
|
117
|
+
} : null,
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
return handler(input, { businessId: input.businessId });
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
/**
|
|
124
|
+
* Wrapped handler for backward compatibility with tests
|
|
125
|
+
*/
|
|
126
|
+
export async function timerStartHandler(input, context) {
|
|
127
|
+
return timerStartTool.execute(input, context.client);
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=timer-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-start.js","sourceRoot":"","sources":["../../../src/tools/timer/timer-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timer Stop Tool
|
|
3
|
+
*
|
|
4
|
+
* Stops a running timer and logs the time using the /comments/business/.../timers endpoint.
|
|
5
|
+
* This endpoint is not supported by the SDK, so we use raw HTTP.
|
|
6
|
+
*
|
|
7
|
+
* Note: The SDK uses /timetracking/business/... but timer operations require /comments/business/...
|
|
8
|
+
*/
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
import { TimerStopInputSchema, TimerStopOutputSchema } from "./schemas.js";
|
|
11
|
+
import { ToolContext } from "../../errors/types.js";
|
|
12
|
+
import { FreshBooksClientWrapper } from "../../client/freshbooks-client.js";
|
|
13
|
+
/**
|
|
14
|
+
* Tool definition for timer_stop
|
|
15
|
+
*/
|
|
16
|
+
export declare const timerStopTool: {
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
inputSchema: z.ZodObject<{
|
|
20
|
+
businessId: z.ZodNumber;
|
|
21
|
+
} & {
|
|
22
|
+
timerId: z.ZodOptional<z.ZodNumber>;
|
|
23
|
+
timeEntryId: z.ZodOptional<z.ZodNumber>;
|
|
24
|
+
note: z.ZodOptional<z.ZodString>;
|
|
25
|
+
}, "strip", z.ZodTypeAny, {
|
|
26
|
+
businessId: number;
|
|
27
|
+
note?: string | undefined;
|
|
28
|
+
timeEntryId?: number | undefined;
|
|
29
|
+
timerId?: number | undefined;
|
|
30
|
+
}, {
|
|
31
|
+
businessId: number;
|
|
32
|
+
note?: string | undefined;
|
|
33
|
+
timeEntryId?: number | undefined;
|
|
34
|
+
timerId?: number | undefined;
|
|
35
|
+
}>;
|
|
36
|
+
outputSchema: z.ZodObject<{
|
|
37
|
+
id: z.ZodNumber;
|
|
38
|
+
identityId: z.ZodOptional<z.ZodNumber>;
|
|
39
|
+
isLogged: z.ZodBoolean;
|
|
40
|
+
startedAt: z.ZodString;
|
|
41
|
+
createdAt: z.ZodOptional<z.ZodString>;
|
|
42
|
+
clientId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
43
|
+
projectId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
44
|
+
taskId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
45
|
+
serviceId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
46
|
+
note: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
47
|
+
active: z.ZodBoolean;
|
|
48
|
+
billable: z.ZodOptional<z.ZodBoolean>;
|
|
49
|
+
billed: z.ZodOptional<z.ZodBoolean>;
|
|
50
|
+
internal: z.ZodOptional<z.ZodBoolean>;
|
|
51
|
+
duration: z.ZodNumber;
|
|
52
|
+
timer: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
53
|
+
id: z.ZodNumber;
|
|
54
|
+
isRunning: z.ZodNullable<z.ZodBoolean>;
|
|
55
|
+
}, "strip", z.ZodTypeAny, {
|
|
56
|
+
id: number;
|
|
57
|
+
isRunning: boolean | null;
|
|
58
|
+
}, {
|
|
59
|
+
id: number;
|
|
60
|
+
isRunning: boolean | null;
|
|
61
|
+
}>>>;
|
|
62
|
+
pendingClient: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
63
|
+
pendingProject: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
64
|
+
pendingTask: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
65
|
+
retainerId: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
66
|
+
}, "strip", z.ZodTypeAny, {
|
|
67
|
+
duration: number;
|
|
68
|
+
id: number;
|
|
69
|
+
isLogged: boolean;
|
|
70
|
+
startedAt: string;
|
|
71
|
+
active: boolean;
|
|
72
|
+
billed?: boolean | undefined;
|
|
73
|
+
taskId?: number | null | undefined;
|
|
74
|
+
createdAt?: string | undefined;
|
|
75
|
+
identityId?: number | undefined;
|
|
76
|
+
clientId?: number | null | undefined;
|
|
77
|
+
projectId?: number | null | undefined;
|
|
78
|
+
pendingClient?: string | null | undefined;
|
|
79
|
+
pendingProject?: string | null | undefined;
|
|
80
|
+
pendingTask?: string | null | undefined;
|
|
81
|
+
serviceId?: number | null | undefined;
|
|
82
|
+
note?: string | null | undefined;
|
|
83
|
+
billable?: boolean | undefined;
|
|
84
|
+
internal?: boolean | undefined;
|
|
85
|
+
retainerId?: number | null | undefined;
|
|
86
|
+
timer?: {
|
|
87
|
+
id: number;
|
|
88
|
+
isRunning: boolean | null;
|
|
89
|
+
} | null | undefined;
|
|
90
|
+
}, {
|
|
91
|
+
duration: number;
|
|
92
|
+
id: number;
|
|
93
|
+
isLogged: boolean;
|
|
94
|
+
startedAt: string;
|
|
95
|
+
active: boolean;
|
|
96
|
+
billed?: boolean | undefined;
|
|
97
|
+
taskId?: number | null | undefined;
|
|
98
|
+
createdAt?: string | undefined;
|
|
99
|
+
identityId?: number | undefined;
|
|
100
|
+
clientId?: number | null | undefined;
|
|
101
|
+
projectId?: number | null | undefined;
|
|
102
|
+
pendingClient?: string | null | undefined;
|
|
103
|
+
pendingProject?: string | null | undefined;
|
|
104
|
+
pendingTask?: string | null | undefined;
|
|
105
|
+
serviceId?: number | null | undefined;
|
|
106
|
+
note?: string | null | undefined;
|
|
107
|
+
billable?: boolean | undefined;
|
|
108
|
+
internal?: boolean | undefined;
|
|
109
|
+
retainerId?: number | null | undefined;
|
|
110
|
+
timer?: {
|
|
111
|
+
id: number;
|
|
112
|
+
isRunning: boolean | null;
|
|
113
|
+
} | null | undefined;
|
|
114
|
+
}>;
|
|
115
|
+
execute(input: z.infer<typeof TimerStopInputSchema>, client: FreshBooksClientWrapper): Promise<z.infer<typeof TimerStopOutputSchema>>;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Wrapped handler for backward compatibility with tests
|
|
119
|
+
*/
|
|
120
|
+
export declare function timerStopHandler(input: z.infer<typeof TimerStopInputSchema>, context: ToolContext & {
|
|
121
|
+
client: FreshBooksClientWrapper;
|
|
122
|
+
}): Promise<z.infer<typeof TimerStopOutputSchema>>;
|
|
123
|
+
//# sourceMappingURL=timer-stop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-stop.d.ts","sourceRoot":"","sources":["../../../src/tools/timer/timer-stop.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAE3E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AA4B5E;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAyCf,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,UACnC,uBAAuB,GAC9B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;CA0IlD,CAAC;AAEF;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,EAC3C,OAAO,EAAE,WAAW,GAAG;IAAE,MAAM,EAAE,uBAAuB,CAAA;CAAE,GACzD,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAEhD"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timer Stop Tool
|
|
3
|
+
*
|
|
4
|
+
* Stops a running timer and logs the time using the /comments/business/.../timers endpoint.
|
|
5
|
+
* This endpoint is not supported by the SDK, so we use raw HTTP.
|
|
6
|
+
*
|
|
7
|
+
* Note: The SDK uses /timetracking/business/... but timer operations require /comments/business/...
|
|
8
|
+
*/
|
|
9
|
+
import { TimerStopInputSchema, TimerStopOutputSchema } from "./schemas.js";
|
|
10
|
+
import { ErrorHandler } from "../../errors/error-handler.js";
|
|
11
|
+
/**
|
|
12
|
+
* Tool definition for timer_stop
|
|
13
|
+
*/
|
|
14
|
+
export const timerStopTool = {
|
|
15
|
+
name: "timer_stop",
|
|
16
|
+
description: `Stop a running timer and log the time in FreshBooks.
|
|
17
|
+
|
|
18
|
+
WHEN TO USE:
|
|
19
|
+
- User says "stop timer", "stop tracking", "clock out"
|
|
20
|
+
- User finishes work on a task/project and wants to log the time
|
|
21
|
+
- User wants to save and log the time entry
|
|
22
|
+
|
|
23
|
+
HOW IT WORKS:
|
|
24
|
+
1. Gets the current timer to calculate total duration
|
|
25
|
+
2. Aggregates duration across all time entry segments
|
|
26
|
+
3. Updates the timer to mark time as logged and billable
|
|
27
|
+
|
|
28
|
+
REQUIRED:
|
|
29
|
+
- businessId: FreshBooks business ID (get from user_me -> businessMemberships[].business.id)
|
|
30
|
+
|
|
31
|
+
OPTIONAL:
|
|
32
|
+
- timerId: ID of the timer to stop (from timer_current). If not provided, stops the current running timer.
|
|
33
|
+
- note: Update the description before stopping
|
|
34
|
+
|
|
35
|
+
WHAT IF NO TIMER IS RUNNING:
|
|
36
|
+
- Returns error if no active timer found
|
|
37
|
+
|
|
38
|
+
EXAMPLE USAGE:
|
|
39
|
+
- "Stop my timer" (auto-detects current timer)
|
|
40
|
+
- "Stop timer and add note: completed bug fixes"
|
|
41
|
+
|
|
42
|
+
RETURNS:
|
|
43
|
+
Stopped time entry with:
|
|
44
|
+
- id: The time entry ID
|
|
45
|
+
- timerId: The timer ID
|
|
46
|
+
- active: false (timer has stopped)
|
|
47
|
+
- duration: Total calculated time in seconds
|
|
48
|
+
- isLogged: true (time is now logged)
|
|
49
|
+
- billable: true (time is marked billable)`,
|
|
50
|
+
inputSchema: TimerStopInputSchema,
|
|
51
|
+
outputSchema: TimerStopOutputSchema,
|
|
52
|
+
async execute(input, client) {
|
|
53
|
+
const handler = ErrorHandler.wrapHandler('timer_stop', async (input, _context) => {
|
|
54
|
+
const { businessId, timerId, timeEntryId, note } = input;
|
|
55
|
+
// First, get current timers to find the one to stop
|
|
56
|
+
const timersResult = await client.executeRawWithRetry('GET', `/comments/business/${businessId}/timers`, undefined, 'timer_stop_get_timers');
|
|
57
|
+
if (!timersResult.ok || !timersResult.data) {
|
|
58
|
+
throw timersResult.error || new Error('Failed to fetch timers');
|
|
59
|
+
}
|
|
60
|
+
const timers = timersResult.data.timers || [];
|
|
61
|
+
if (timers.length === 0) {
|
|
62
|
+
throw new Error('No timer found to stop');
|
|
63
|
+
}
|
|
64
|
+
// Find the timer to stop
|
|
65
|
+
let targetTimer = timers[0]; // Default to first timer
|
|
66
|
+
if (timerId) {
|
|
67
|
+
const found = timers.find(t => t.id === timerId);
|
|
68
|
+
if (!found) {
|
|
69
|
+
throw new Error(`Timer with ID ${timerId} not found`);
|
|
70
|
+
}
|
|
71
|
+
targetTimer = found;
|
|
72
|
+
}
|
|
73
|
+
else if (timeEntryId) {
|
|
74
|
+
// Legacy: find timer containing this time entry
|
|
75
|
+
const found = timers.find(t => t.time_entries?.some(te => te.id === timeEntryId));
|
|
76
|
+
if (found) {
|
|
77
|
+
targetTimer = found;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!targetTimer) {
|
|
81
|
+
throw new Error('No timer found to stop');
|
|
82
|
+
}
|
|
83
|
+
const timeEntries = targetTimer.time_entries || [];
|
|
84
|
+
if (timeEntries.length === 0) {
|
|
85
|
+
throw new Error('Timer has no time entries');
|
|
86
|
+
}
|
|
87
|
+
// Calculate total duration across all time entry segments
|
|
88
|
+
let totalDuration = timeEntries.reduce((total, entry) => {
|
|
89
|
+
return entry.duration ? total + Math.floor(entry.duration) : total;
|
|
90
|
+
}, 0);
|
|
91
|
+
// Add duration for currently running segment (duration === null)
|
|
92
|
+
if (targetTimer.is_running) {
|
|
93
|
+
const runningEntry = timeEntries.find(te => te.duration === null);
|
|
94
|
+
if (runningEntry) {
|
|
95
|
+
const startTime = new Date(runningEntry.started_at).getTime();
|
|
96
|
+
const now = Date.now();
|
|
97
|
+
const runningDuration = Math.floor((now - startTime) / 1000);
|
|
98
|
+
totalDuration += runningDuration;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (totalDuration === 0) {
|
|
102
|
+
throw new Error('No time to log, timer has no duration');
|
|
103
|
+
}
|
|
104
|
+
// Get the first time entry as the base for the update
|
|
105
|
+
const sourceEntry = timeEntries[0];
|
|
106
|
+
// Build the payload to stop and log the timer
|
|
107
|
+
// This matches the FreshBooks website behavior
|
|
108
|
+
const updatePayload = {
|
|
109
|
+
timer: {
|
|
110
|
+
time_entries: [{
|
|
111
|
+
id: sourceEntry.id,
|
|
112
|
+
is_logged: sourceEntry.is_logged,
|
|
113
|
+
started_at: sourceEntry.started_at,
|
|
114
|
+
client_id: sourceEntry.client_id,
|
|
115
|
+
project_id: sourceEntry.project_id,
|
|
116
|
+
task_id: sourceEntry.task_id,
|
|
117
|
+
service_id: sourceEntry.service_id,
|
|
118
|
+
note: note ?? sourceEntry.note,
|
|
119
|
+
active: false,
|
|
120
|
+
billable: true, // Mark as billable when stopping
|
|
121
|
+
billed: sourceEntry.billed ?? false,
|
|
122
|
+
internal: sourceEntry.internal ?? false,
|
|
123
|
+
duration: totalDuration,
|
|
124
|
+
}],
|
|
125
|
+
},
|
|
126
|
+
};
|
|
127
|
+
// PUT to /timers/{id} to stop and log
|
|
128
|
+
const result = await client.executeRawWithRetry('PUT', `/comments/business/${businessId}/timers/${targetTimer.id}`, updatePayload, 'timer_stop');
|
|
129
|
+
if (!result.ok) {
|
|
130
|
+
throw result.error || new Error('Failed to stop timer');
|
|
131
|
+
}
|
|
132
|
+
// Return the stopped time entry info
|
|
133
|
+
return {
|
|
134
|
+
id: sourceEntry.id,
|
|
135
|
+
timerId: targetTimer.id,
|
|
136
|
+
identityId: undefined,
|
|
137
|
+
isLogged: true,
|
|
138
|
+
startedAt: sourceEntry.started_at,
|
|
139
|
+
createdAt: sourceEntry.created_at,
|
|
140
|
+
clientId: sourceEntry.client_id,
|
|
141
|
+
projectId: sourceEntry.project_id,
|
|
142
|
+
taskId: sourceEntry.task_id,
|
|
143
|
+
serviceId: sourceEntry.service_id,
|
|
144
|
+
note: note ?? sourceEntry.note,
|
|
145
|
+
active: false,
|
|
146
|
+
billable: true,
|
|
147
|
+
billed: sourceEntry.billed,
|
|
148
|
+
internal: sourceEntry.internal,
|
|
149
|
+
duration: totalDuration,
|
|
150
|
+
timer: {
|
|
151
|
+
id: targetTimer.id,
|
|
152
|
+
isRunning: false,
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
});
|
|
156
|
+
return handler(input, { businessId: input.businessId });
|
|
157
|
+
},
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* Wrapped handler for backward compatibility with tests
|
|
161
|
+
*/
|
|
162
|
+
export async function timerStopHandler(input, context) {
|
|
163
|
+
return timerStopTool.execute(input, context.client);
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=timer-stop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timer-stop.js","sourceRoot":"","sources":["../../../src/tools/timer/timer-stop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Metadata Types
|
|
3
|
+
*
|
|
4
|
+
* Defines types for tool metadata used by the hosted server
|
|
5
|
+
* to categorize and filter tools based on user permissions.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Tool categories matching FreshBooks resource types
|
|
9
|
+
*/
|
|
10
|
+
export type ToolCategory = 'Invoice' | 'Client' | 'Project' | 'TimeEntry' | 'Timer' | 'Expense' | 'ExpenseCategory' | 'Payment' | 'Item' | 'Bill' | 'BillPayment' | 'BillVendor' | 'CreditNote' | 'OtherIncome' | 'JournalEntry' | 'JournalEntryAccount' | 'Service' | 'Task' | 'User' | 'Report' | 'PaymentOptions' | 'Callback';
|
|
11
|
+
/**
|
|
12
|
+
* Metadata for a single tool
|
|
13
|
+
*/
|
|
14
|
+
export interface ToolMetadata {
|
|
15
|
+
/** Tool name (e.g., 'invoice_list') */
|
|
16
|
+
name: string;
|
|
17
|
+
/** Category the tool belongs to */
|
|
18
|
+
category: ToolCategory;
|
|
19
|
+
/** Whether this tool only reads data (no mutations) */
|
|
20
|
+
isReadOnly: boolean;
|
|
21
|
+
/** Human-readable display name for the tool */
|
|
22
|
+
displayName: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Category metadata for UI display
|
|
26
|
+
*/
|
|
27
|
+
export interface CategoryMetadata {
|
|
28
|
+
/** Category identifier */
|
|
29
|
+
id: ToolCategory;
|
|
30
|
+
/** Human-readable display name */
|
|
31
|
+
displayName: string;
|
|
32
|
+
/** Brief description of what this category covers */
|
|
33
|
+
description: string;
|
|
34
|
+
/** Number of read-only tools in this category */
|
|
35
|
+
readOnlyCount: number;
|
|
36
|
+
/** Number of write tools in this category */
|
|
37
|
+
writeCount: number;
|
|
38
|
+
/** All tools in this category */
|
|
39
|
+
tools: ToolMetadata[];
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Display names for each category
|
|
43
|
+
*/
|
|
44
|
+
export declare const categoryDisplayNames: Record<ToolCategory, string>;
|
|
45
|
+
/**
|
|
46
|
+
* Descriptions for each category
|
|
47
|
+
*/
|
|
48
|
+
export declare const categoryDescriptions: Record<ToolCategory, string>;
|
|
49
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,QAAQ,GACR,SAAS,GACT,WAAW,GACX,OAAO,GACP,SAAS,GACT,iBAAiB,GACjB,SAAS,GACT,MAAM,GACN,MAAM,GACN,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,aAAa,GACb,cAAc,GACd,qBAAqB,GACrB,SAAS,GACT,MAAM,GACN,MAAM,GACN,QAAQ,GACR,gBAAgB,GAChB,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,YAAY,CAAC;IACvB,uDAAuD;IACvD,UAAU,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0BAA0B;IAC1B,EAAE,EAAE,YAAY,CAAC;IACjB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;IACnB,iCAAiC;IACjC,KAAK,EAAE,YAAY,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAuB7D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAuB7D,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool Metadata Types
|
|
3
|
+
*
|
|
4
|
+
* Defines types for tool metadata used by the hosted server
|
|
5
|
+
* to categorize and filter tools based on user permissions.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Display names for each category
|
|
9
|
+
*/
|
|
10
|
+
export const categoryDisplayNames = {
|
|
11
|
+
Invoice: 'Invoices',
|
|
12
|
+
Client: 'Clients',
|
|
13
|
+
Project: 'Projects',
|
|
14
|
+
TimeEntry: 'Time Entries',
|
|
15
|
+
Timer: 'Timers',
|
|
16
|
+
Expense: 'Expenses',
|
|
17
|
+
ExpenseCategory: 'Expense Categories',
|
|
18
|
+
Payment: 'Payments',
|
|
19
|
+
Item: 'Items',
|
|
20
|
+
Bill: 'Bills',
|
|
21
|
+
BillPayment: 'Bill Payments',
|
|
22
|
+
BillVendor: 'Vendors',
|
|
23
|
+
CreditNote: 'Credit Notes',
|
|
24
|
+
OtherIncome: 'Other Income',
|
|
25
|
+
JournalEntry: 'Journal Entries',
|
|
26
|
+
JournalEntryAccount: 'Chart of Accounts',
|
|
27
|
+
Service: 'Services',
|
|
28
|
+
Task: 'Tasks',
|
|
29
|
+
User: 'User Info',
|
|
30
|
+
Report: 'Reports',
|
|
31
|
+
PaymentOptions: 'Payment Options',
|
|
32
|
+
Callback: 'Webhooks',
|
|
33
|
+
};
|
|
34
|
+
/**
|
|
35
|
+
* Descriptions for each category
|
|
36
|
+
*/
|
|
37
|
+
export const categoryDescriptions = {
|
|
38
|
+
Invoice: 'Create, send, and manage client invoices',
|
|
39
|
+
Client: 'Manage customers and their contact information',
|
|
40
|
+
Project: 'Track projects and their details',
|
|
41
|
+
TimeEntry: 'Log and manage time entries for billing',
|
|
42
|
+
Timer: 'Start, stop, and manage active timers',
|
|
43
|
+
Expense: 'Track business expenses and receipts',
|
|
44
|
+
ExpenseCategory: 'View expense category definitions',
|
|
45
|
+
Payment: 'Record and track invoice payments',
|
|
46
|
+
Item: 'Manage reusable invoice line items',
|
|
47
|
+
Bill: 'Track bills from vendors and suppliers',
|
|
48
|
+
BillPayment: 'Record payments made to vendors',
|
|
49
|
+
BillVendor: 'Manage vendors and suppliers',
|
|
50
|
+
CreditNote: 'Create and manage credit notes',
|
|
51
|
+
OtherIncome: 'Track income not tied to invoices',
|
|
52
|
+
JournalEntry: 'Create manual accounting entries',
|
|
53
|
+
JournalEntryAccount: 'View chart of accounts',
|
|
54
|
+
Service: 'Manage billable services and rates',
|
|
55
|
+
Task: 'Manage project tasks',
|
|
56
|
+
User: 'View current user information',
|
|
57
|
+
Report: 'Generate financial reports',
|
|
58
|
+
PaymentOptions: 'Configure payment gateway settings',
|
|
59
|
+
Callback: 'Manage webhook subscriptions',
|
|
60
|
+
};
|
|
61
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tools/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA6DH;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiC;IAChE,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,cAAc;IACzB,KAAK,EAAE,QAAQ;IACf,OAAO,EAAE,UAAU;IACnB,eAAe,EAAE,oBAAoB;IACrC,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE,cAAc;IAC1B,WAAW,EAAE,cAAc;IAC3B,YAAY,EAAE,iBAAiB;IAC/B,mBAAmB,EAAE,mBAAmB;IACxC,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,SAAS;IACjB,cAAc,EAAE,iBAAiB;IACjC,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAiC;IAChE,OAAO,EAAE,0CAA0C;IACnD,MAAM,EAAE,gDAAgD;IACxD,OAAO,EAAE,kCAAkC;IAC3C,SAAS,EAAE,yCAAyC;IACpD,KAAK,EAAE,uCAAuC;IAC9C,OAAO,EAAE,sCAAsC;IAC/C,eAAe,EAAE,mCAAmC;IACpD,OAAO,EAAE,mCAAmC;IAC5C,IAAI,EAAE,oCAAoC;IAC1C,IAAI,EAAE,wCAAwC;IAC9C,WAAW,EAAE,iCAAiC;IAC9C,UAAU,EAAE,8BAA8B;IAC1C,UAAU,EAAE,gCAAgC;IAC5C,WAAW,EAAE,mCAAmC;IAChD,YAAY,EAAE,kCAAkC;IAChD,mBAAmB,EAAE,wBAAwB;IAC7C,OAAO,EAAE,oCAAoC;IAC7C,IAAI,EAAE,sBAAsB;IAC5B,IAAI,EAAE,+BAA+B;IACrC,MAAM,EAAE,4BAA4B;IACpC,cAAc,EAAE,oCAAoC;IACpD,QAAQ,EAAE,8BAA8B;CACzC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/user/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/user/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iBAAiB;AAEjB,0BAA0B;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|