@scopieflows/app-quickbooks 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +7 -0
  2. package/package.json +29 -0
  3. package/src/actions/create-expense.d.ts +8 -0
  4. package/src/actions/create-expense.js +192 -0
  5. package/src/actions/create-expense.js.map +1 -0
  6. package/src/actions/create-invoice.d.ts +11 -0
  7. package/src/actions/create-invoice.js +188 -0
  8. package/src/actions/create-invoice.js.map +1 -0
  9. package/src/actions/find-customer.d.ts +3 -0
  10. package/src/actions/find-customer.js +60 -0
  11. package/src/actions/find-customer.js.map +1 -0
  12. package/src/actions/find-invoice.d.ts +3 -0
  13. package/src/actions/find-invoice.js +60 -0
  14. package/src/actions/find-invoice.js.map +1 -0
  15. package/src/actions/find-payment.d.ts +3 -0
  16. package/src/actions/find-payment.js +53 -0
  17. package/src/actions/find-payment.js.map +1 -0
  18. package/src/index.d.ts +2 -0
  19. package/src/index.js +69 -0
  20. package/src/index.js.map +1 -0
  21. package/src/lib/common.d.ts +21 -0
  22. package/src/lib/common.js +12 -0
  23. package/src/lib/common.js.map +1 -0
  24. package/src/lib/types.d.ts +280 -0
  25. package/src/lib/types.js +3 -0
  26. package/src/lib/types.js.map +1 -0
  27. package/src/triggers/new-customer.d.ts +2 -0
  28. package/src/triggers/new-customer.js +78 -0
  29. package/src/triggers/new-customer.js.map +1 -0
  30. package/src/triggers/new-deposit.d.ts +2 -0
  31. package/src/triggers/new-deposit.js +78 -0
  32. package/src/triggers/new-deposit.js.map +1 -0
  33. package/src/triggers/new-expense.d.ts +2 -0
  34. package/src/triggers/new-expense.js +78 -0
  35. package/src/triggers/new-expense.js.map +1 -0
  36. package/src/triggers/new-invoice.d.ts +2 -0
  37. package/src/triggers/new-invoice.js +78 -0
  38. package/src/triggers/new-invoice.js.map +1 -0
  39. package/src/triggers/new-transfer.d.ts +2 -0
  40. package/src/triggers/new-transfer.js +78 -0
  41. package/src/triggers/new-transfer.js.map +1 -0
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # pieces-quickbooks
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build pieces-quickbooks` to build the library.
package/package.json ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "@scopieflows/app-quickbooks",
3
+ "version": "0.1.1",
4
+ "dependencies": {
5
+ "@sinclair/typebox": "0.34.11",
6
+ "ai": "^6.0.0",
7
+ "axios": "1.13.1",
8
+ "axios-retry": "4.4.1",
9
+ "dayjs": "1.11.9",
10
+ "deepmerge-ts": "7.1.0",
11
+ "form-data": "4.0.4",
12
+ "i18next": "23.13.0",
13
+ "mime-types": "2.1.35",
14
+ "nanoid": "3.3.8",
15
+ "semver": "7.6.0",
16
+ "socket.io-client": "4.8.1",
17
+ "zod": "4.1.13",
18
+ "@scopieflows/pieces-common": "0.11.2",
19
+ "@scopieflows/pieces-framework": "0.25.0",
20
+ "@scopieflows/shared": "0.33.0",
21
+ "tslib": "2.6.2"
22
+ },
23
+ "resolutions": {
24
+ "rollup": "npm:@rollup/wasm-node"
25
+ },
26
+ "types": "./src/index.d.ts",
27
+ "main": "./src/index.js",
28
+ "type": "commonjs"
29
+ }
@@ -0,0 +1,8 @@
1
+ export declare const createExpenseAction: import("@scopieflows/pieces-framework").IAction<import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>, {
2
+ accountRef: import("@scopieflows/pieces-framework").DropdownProperty<string, true, import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>>;
3
+ paymentType: import("@scopieflows/pieces-framework").StaticDropdownProperty<string, true>;
4
+ entityRef: import("@scopieflows/pieces-framework").DropdownProperty<string, false, import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>>;
5
+ txnDate: import("@scopieflows/pieces-framework").DateTimeProperty<false>;
6
+ lineItems: import("@scopieflows/pieces-framework").ArrayProperty<true> | import("@scopieflows/pieces-framework").ArrayProperty<false>;
7
+ privateNote: import("@scopieflows/pieces-framework").LongTextProperty<false>;
8
+ }>;
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createExpenseAction = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@scopieflows/pieces-framework");
6
+ const pieces_common_1 = require("@scopieflows/pieces-common");
7
+ const index_1 = require("../index");
8
+ const common_1 = require("../lib/common");
9
+ exports.createExpenseAction = (0, pieces_framework_1.createAction)({
10
+ auth: index_1.quickbooksAuth,
11
+ name: 'create_expense',
12
+ displayName: 'Create Expense',
13
+ description: 'Creates an expense transaction (purchase) in QuickBooks.',
14
+ props: {
15
+ accountRef: pieces_framework_1.Property.Dropdown({
16
+ auth: index_1.quickbooksAuth,
17
+ displayName: 'Bank/Credit Card Account',
18
+ description: 'The account from which the expense was paid.',
19
+ required: true,
20
+ refreshers: [],
21
+ options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
22
+ var _b, _c;
23
+ if (!auth) {
24
+ return { disabled: true, placeholder: 'Connect account', options: [] };
25
+ }
26
+ const { access_token, props } = auth;
27
+ const companyId = props === null || props === void 0 ? void 0 : props['companyId'];
28
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
29
+ const query = `SELECT Id, Name, AccountType FROM Account STARTPOSITION 1 MAXRESULTS 1000`;
30
+ const response = yield pieces_common_1.httpClient.sendRequest({
31
+ method: pieces_common_1.HttpMethod.GET,
32
+ url: `${apiUrl}/query`,
33
+ queryParams: { query: query, minorversion: '70' },
34
+ headers: {
35
+ Authorization: `Bearer ${access_token}`,
36
+ Accept: 'application/json',
37
+ },
38
+ });
39
+ if (response.body.Fault) {
40
+ throw new Error(`QuickBooks API Error fetching accounts: ${response.body.Fault.Error.map((e) => e.Message).join(', ')}`);
41
+ }
42
+ const accounts = (_c = (_b = response.body.QueryResponse) === null || _b === void 0 ? void 0 : _b['Account']) !== null && _c !== void 0 ? _c : [];
43
+ return {
44
+ disabled: false,
45
+ options: accounts.map((account) => ({
46
+ label: `${account.Name} (${account.AccountType})`,
47
+ value: account.Id,
48
+ })),
49
+ };
50
+ }),
51
+ }),
52
+ paymentType: pieces_framework_1.Property.StaticDropdown({
53
+ displayName: 'Payment Type',
54
+ required: true,
55
+ options: {
56
+ options: [
57
+ { label: 'Cash', value: 'Cash' },
58
+ { label: 'Check', value: 'Check' },
59
+ { label: 'Credit Card', value: 'CreditCard' },
60
+ ],
61
+ },
62
+ defaultValue: 'Cash',
63
+ }),
64
+ entityRef: pieces_framework_1.Property.Dropdown({
65
+ auth: index_1.quickbooksAuth,
66
+ displayName: 'Payee (Vendor)',
67
+ description: 'Optional - The vendor the expense was paid to.',
68
+ required: false,
69
+ refreshers: [],
70
+ options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
71
+ var _b, _c;
72
+ if (!auth) {
73
+ return { disabled: true, placeholder: 'Connect account', options: [] };
74
+ }
75
+ const { access_token, props } = auth;
76
+ const companyId = props === null || props === void 0 ? void 0 : props['companyId'];
77
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
78
+ const query = `SELECT Id, DisplayName FROM Vendor STARTPOSITION 1 MAXRESULTS 1000`;
79
+ const response = yield pieces_common_1.httpClient.sendRequest({
80
+ method: pieces_common_1.HttpMethod.GET,
81
+ url: `${apiUrl}/query`,
82
+ queryParams: { query: query, minorversion: '70' },
83
+ headers: {
84
+ Authorization: `Bearer ${access_token}`,
85
+ Accept: 'application/json',
86
+ },
87
+ });
88
+ if (response.body.Fault) {
89
+ throw new Error(`QuickBooks API Error fetching vendors: ${response.body.Fault.Error.map((e) => e.Message).join(', ')}`);
90
+ }
91
+ const vendors = (_c = (_b = response.body.QueryResponse) === null || _b === void 0 ? void 0 : _b['Vendor']) !== null && _c !== void 0 ? _c : [];
92
+ return {
93
+ disabled: false,
94
+ options: vendors.map((vendor) => ({
95
+ label: vendor.DisplayName,
96
+ value: vendor.Id,
97
+ })),
98
+ };
99
+ }),
100
+ }),
101
+ txnDate: pieces_framework_1.Property.DateTime({
102
+ displayName: 'Payment Date',
103
+ description: 'The date the expense occurred.',
104
+ required: false, // Defaults to today if empty
105
+ }),
106
+ // Line items for the expense details
107
+ lineItems: pieces_framework_1.Property.Array({
108
+ displayName: 'Line Items',
109
+ description: 'Details of the expense (e.g., categories or items purchased). At least one line is required.',
110
+ required: true,
111
+ properties: {
112
+ amount: pieces_framework_1.Property.Number({
113
+ displayName: 'Amount',
114
+ required: true,
115
+ }),
116
+ description: pieces_framework_1.Property.ShortText({
117
+ displayName: 'Description',
118
+ required: false,
119
+ }),
120
+ detailType: pieces_framework_1.Property.StaticDropdown({
121
+ displayName: 'Detail Type',
122
+ required: true,
123
+ options: {
124
+ options: [
125
+ {
126
+ label: 'Account Based Expense Line Detail',
127
+ value: 'AccountBasedExpenseLineDetail',
128
+ },
129
+ ],
130
+ },
131
+ defaultValue: 'AccountBasedExpenseLineDetail',
132
+ }),
133
+ expenseAccountId: pieces_framework_1.Property.ShortText({
134
+ displayName: 'Expense Category/Account ID',
135
+ description: 'Enter the ID of the Expense Account. Required for AccountBasedExpenseLineDetail.',
136
+ required: true,
137
+ }),
138
+ },
139
+ }),
140
+ privateNote: pieces_framework_1.Property.LongText({
141
+ displayName: 'Memo (Private Note)',
142
+ description: 'Internal note about the expense.',
143
+ required: false,
144
+ }),
145
+ },
146
+ run(context) {
147
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
148
+ var _a;
149
+ const { access_token } = context.auth;
150
+ const companyId = (_a = context.auth.props) === null || _a === void 0 ? void 0 : _a['companyId'];
151
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
152
+ const props = context.propsValue;
153
+ const lines = props['lineItems'].map((line) => {
154
+ const detail = {
155
+ Amount: line['amount'],
156
+ Description: line['description'],
157
+ DetailType: line['detailType'],
158
+ };
159
+ if (line['detailType'] === 'AccountBasedExpenseLineDetail') {
160
+ if (!line['expenseAccountId']) {
161
+ throw new Error('Expense Category/Account ID is required for Account Based Expense Line Detail.');
162
+ }
163
+ detail.AccountBasedExpenseLineDetail = {
164
+ AccountRef: { value: line['expenseAccountId'] },
165
+ };
166
+ }
167
+ return detail;
168
+ });
169
+ if (lines.length === 0) {
170
+ throw new Error('At least one line item is required.');
171
+ }
172
+ const expensePayload = Object.assign(Object.assign(Object.assign({ AccountRef: { value: props['accountRef'] }, PaymentType: props['paymentType'], Line: lines }, (props['entityRef'] && { EntityRef: { value: props['entityRef'] } })), (props['txnDate'] && { TxnDate: props['txnDate'].split('T')[0] })), (props['privateNote'] && { PrivateNote: props['privateNote'] }));
173
+ const endpoint = 'purchase';
174
+ const response = yield pieces_common_1.httpClient.sendRequest({
175
+ method: pieces_common_1.HttpMethod.POST,
176
+ url: `${apiUrl}/${endpoint}`,
177
+ queryParams: { minorversion: '70' },
178
+ headers: {
179
+ Authorization: `Bearer ${access_token}`,
180
+ Accept: 'application/json',
181
+ 'Content-Type': 'application/json',
182
+ },
183
+ body: expensePayload,
184
+ });
185
+ if (response.body.Fault) {
186
+ throw new Error(`QuickBooks API Error creating expense: ${response.body.Fault.Error.map((e) => e.Message).join(', ')} - Detail: ${response.body.Fault.Error.map((e) => e.Detail).join(', ')}`);
187
+ }
188
+ return response.body.Purchase;
189
+ });
190
+ },
191
+ });
192
+ //# sourceMappingURL=create-expense.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-expense.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/quickbooks/src/actions/create-expense.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare const createInvoiceAction: import("@scopieflows/pieces-framework").IAction<import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>, {
2
+ customerRef: import("@scopieflows/pieces-framework").DropdownProperty<string, true, import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>>;
3
+ lineItems: import("@scopieflows/pieces-framework").ArrayProperty<true> | import("@scopieflows/pieces-framework").ArrayProperty<false>;
4
+ emailStatus: import("@scopieflows/pieces-framework").StaticDropdownProperty<string, false>;
5
+ billEmail: import("@scopieflows/pieces-framework").ShortTextProperty<false>;
6
+ dueDate: import("@scopieflows/pieces-framework").DateTimeProperty<false>;
7
+ docNumber: import("@scopieflows/pieces-framework").ShortTextProperty<false>;
8
+ txnDate: import("@scopieflows/pieces-framework").DateTimeProperty<false>;
9
+ privateNote: import("@scopieflows/pieces-framework").LongTextProperty<false>;
10
+ customerMemo: import("@scopieflows/pieces-framework").LongTextProperty<false>;
11
+ }>;
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createInvoiceAction = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@scopieflows/pieces-framework");
6
+ const pieces_common_1 = require("@scopieflows/pieces-common");
7
+ const index_1 = require("../index");
8
+ const common_1 = require("../lib/common");
9
+ exports.createInvoiceAction = (0, pieces_framework_1.createAction)({
10
+ auth: index_1.quickbooksAuth,
11
+ name: 'create_invoice',
12
+ displayName: 'Create Invoice',
13
+ description: 'Creates an invoice in QuickBooks.',
14
+ props: {
15
+ customerRef: pieces_framework_1.Property.Dropdown({
16
+ auth: index_1.quickbooksAuth,
17
+ displayName: 'Customer',
18
+ required: true,
19
+ refreshers: [],
20
+ options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
21
+ var _b, _c;
22
+ if (!auth) {
23
+ return {
24
+ disabled: true,
25
+ placeholder: 'Connect your account first',
26
+ options: [],
27
+ };
28
+ }
29
+ const { access_token, props } = auth;
30
+ const companyId = props === null || props === void 0 ? void 0 : props['companyId'];
31
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
32
+ const query = `SELECT Id, DisplayName FROM Customer STARTPOSITION 1 MAXRESULTS 1000`;
33
+ const response = yield pieces_common_1.httpClient.sendRequest({
34
+ method: pieces_common_1.HttpMethod.GET,
35
+ url: `${apiUrl}/query`,
36
+ queryParams: { query: query, minorversion: '70' },
37
+ headers: {
38
+ Authorization: `Bearer ${access_token}`,
39
+ Accept: 'application/json',
40
+ },
41
+ });
42
+ if (response.body.Fault) {
43
+ throw new Error(`QuickBooks API Error: ${response.body.Fault.Error.map((e) => e.Message).join(', ')}`);
44
+ }
45
+ const customers = (_c = (_b = response.body.QueryResponse) === null || _b === void 0 ? void 0 : _b['Customer']) !== null && _c !== void 0 ? _c : [];
46
+ return {
47
+ disabled: false,
48
+ options: customers.map((customer) => ({
49
+ label: customer.DisplayName,
50
+ value: customer.Id,
51
+ })),
52
+ };
53
+ }),
54
+ }),
55
+ lineItems: pieces_framework_1.Property.Array({
56
+ displayName: 'Line Items',
57
+ description: 'Line items for the invoice',
58
+ required: true,
59
+ properties: {
60
+ description: pieces_framework_1.Property.ShortText({
61
+ displayName: 'Description',
62
+ required: false,
63
+ }),
64
+ amount: pieces_framework_1.Property.Number({
65
+ displayName: 'Amount',
66
+ description: 'Total amount for this line (Exclusive of tax). Required.',
67
+ required: true,
68
+ }),
69
+ detailType: pieces_framework_1.Property.StaticDropdown({
70
+ displayName: 'Detail Type',
71
+ required: true,
72
+ options: {
73
+ options: [{ label: 'Sales Item Line Detail', value: 'SalesItemLineDetail' }],
74
+ },
75
+ defaultValue: 'SalesItemLineDetail',
76
+ }),
77
+ itemId: pieces_framework_1.Property.ShortText({
78
+ displayName: 'Item ID (Product/Service)',
79
+ description: 'Enter the ID of the Item (Product/Service). Required for SalesItemLineDetail.',
80
+ required: true,
81
+ }),
82
+ quantity: pieces_framework_1.Property.Number({
83
+ displayName: 'Quantity',
84
+ required: false,
85
+ }),
86
+ unitPrice: pieces_framework_1.Property.Number({
87
+ displayName: 'Unit Price',
88
+ description: 'If specified, Amount will be Qty * UnitPrice. If Amount is also specified, Amount overrides calculation.',
89
+ required: false,
90
+ }),
91
+ },
92
+ }),
93
+ emailStatus: pieces_framework_1.Property.StaticDropdown({
94
+ displayName: 'Email Status',
95
+ description: 'Specify whether the invoice should be emailed after creation.',
96
+ required: false,
97
+ options: {
98
+ options: [
99
+ { label: 'Not Set (Default - No Email)', value: 'NotSet' },
100
+ { label: 'Needs To Be Sent', value: 'NeedToSend' },
101
+ ],
102
+ },
103
+ defaultValue: 'NotSet',
104
+ }),
105
+ billEmail: pieces_framework_1.Property.ShortText({
106
+ displayName: 'Billing Email Address',
107
+ description: 'Email address to send the invoice to. Required if Email Status is "Needs To Be Sent". Overrides customer default.',
108
+ required: false,
109
+ }),
110
+ dueDate: pieces_framework_1.Property.DateTime({
111
+ displayName: 'Due Date',
112
+ description: 'The date when the payment for the invoice is due. If not provided, default term from customer or company is used.',
113
+ required: false,
114
+ }),
115
+ docNumber: pieces_framework_1.Property.ShortText({
116
+ displayName: 'Invoice Number',
117
+ description: 'Optional reference number for the invoice. If not provided, QuickBooks assigns the next sequential number.',
118
+ required: false,
119
+ }),
120
+ txnDate: pieces_framework_1.Property.DateTime({
121
+ displayName: 'Transaction Date',
122
+ description: 'The date entered on the transaction. Defaults to the current date if not specified.',
123
+ required: false,
124
+ }),
125
+ privateNote: pieces_framework_1.Property.LongText({
126
+ displayName: 'Private Note (Memo)',
127
+ description: 'Note to self. Does not appear on the invoice sent to the customer.',
128
+ required: false,
129
+ }),
130
+ customerMemo: pieces_framework_1.Property.LongText({
131
+ displayName: 'Customer Memo (Statement Memo)',
132
+ description: 'Memo to be displayed on the invoice sent to the customer (appears on statement).',
133
+ required: false,
134
+ }),
135
+ },
136
+ run(context) {
137
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
138
+ var _a;
139
+ const { access_token } = context.auth;
140
+ const companyId = (_a = context.auth.props) === null || _a === void 0 ? void 0 : _a['companyId'];
141
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
142
+ const props = context.propsValue;
143
+ if (props['emailStatus'] === 'NeedToSend' && !props['billEmail']) {
144
+ throw new Error('Billing Email Address is required when Email Status is "Needs To Be Sent".');
145
+ }
146
+ const lineItems = props['lineItems'].map((item) => {
147
+ if (item['detailType'] === 'SalesItemLineDetail') {
148
+ if (!item['itemId']) {
149
+ throw new Error('Item ID is required for Sales Item Line Detail.');
150
+ }
151
+ return {
152
+ Amount: item['amount'],
153
+ DetailType: item['detailType'],
154
+ Description: item['description'],
155
+ SalesItemLineDetail: Object.assign(Object.assign({ ItemRef: { value: item['itemId'] } }, (item['quantity'] != null && { Qty: item['quantity'] })), (item['unitPrice'] != null && { UnitPrice: item['unitPrice'] })),
156
+ };
157
+ }
158
+ else {
159
+ return {
160
+ Amount: item['amount'],
161
+ DetailType: item['detailType'],
162
+ Description: item['description'],
163
+ };
164
+ }
165
+ });
166
+ if (lineItems.length === 0) {
167
+ throw new Error('At least one line item is required to create an invoice.');
168
+ }
169
+ const invoicePayload = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({ Line: lineItems, CustomerRef: { value: props['customerRef'] } }, (props['emailStatus'] && { EmailStatus: props['emailStatus'] })), (props['billEmail'] && { BillEmail: { Address: props['billEmail'] } })), (props['dueDate'] && { DueDate: props['dueDate'].split('T')[0] })), (props['docNumber'] && { DocNumber: props['docNumber'] })), (props['txnDate'] && { TxnDate: props['txnDate'].split('T')[0] })), (props['privateNote'] && { PrivateNote: props['privateNote'] })), (props['customerMemo'] && { CustomerMemo: { value: props['customerMemo'] } }));
170
+ const response = yield pieces_common_1.httpClient.sendRequest({
171
+ method: pieces_common_1.HttpMethod.POST,
172
+ url: `${apiUrl}/invoice`,
173
+ queryParams: { minorversion: '70' },
174
+ headers: {
175
+ Authorization: `Bearer ${access_token}`,
176
+ Accept: 'application/json',
177
+ 'Content-Type': 'application/json',
178
+ },
179
+ body: invoicePayload,
180
+ });
181
+ if (response.body.Fault) {
182
+ throw new Error(`QuickBooks API Error: ${response.body.Fault.Error.map((e) => e.Message).join(', ')} - ${response.body.Fault.Error.map((e) => e.Detail).join(', ')}`);
183
+ }
184
+ return response.body.Invoice;
185
+ });
186
+ },
187
+ });
188
+ //# sourceMappingURL=create-invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-invoice.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/quickbooks/src/actions/create-invoice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const findCustomerAction: import("@scopieflows/pieces-framework").IAction<import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>, {
2
+ search_term: import("@scopieflows/pieces-framework").ShortTextProperty<true>;
3
+ }>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findCustomerAction = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@scopieflows/pieces-framework");
6
+ const pieces_common_1 = require("@scopieflows/pieces-common");
7
+ const index_1 = require("../index");
8
+ const common_1 = require("../lib/common");
9
+ exports.findCustomerAction = (0, pieces_framework_1.createAction)({
10
+ auth: index_1.quickbooksAuth,
11
+ name: 'find_customer',
12
+ displayName: 'Find Customer',
13
+ description: 'Search for a customer by display name in QuickBooks.',
14
+ props: {
15
+ search_term: pieces_framework_1.Property.ShortText({
16
+ displayName: 'Customer Name',
17
+ description: 'The display name of the customer to search for.',
18
+ required: true,
19
+ }),
20
+ },
21
+ run(context) {
22
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
+ var _a, _b, _c;
24
+ const { search_term } = context.propsValue;
25
+ const companyId = (_a = context.auth.props) === null || _a === void 0 ? void 0 : _a['companyId'];
26
+ if (!companyId) {
27
+ throw new Error('Realm ID not found in authentication data. Please reconnect your account.');
28
+ }
29
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
30
+ const query = `SELECT * FROM Customer WHERE DisplayName = '${search_term.replace(/'/g, "\\'")}' MAXRESULTS 1`;
31
+ const response = yield pieces_common_1.httpClient.sendRequest({
32
+ method: pieces_common_1.HttpMethod.GET,
33
+ url: `${apiUrl}/query`,
34
+ queryParams: {
35
+ query: query,
36
+ minorversion: '70',
37
+ },
38
+ authentication: {
39
+ type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
40
+ token: context.auth.access_token,
41
+ },
42
+ headers: {
43
+ Accept: 'application/json',
44
+ },
45
+ });
46
+ if (((_c = (_b = response.body) === null || _b === void 0 ? void 0 : _b.QueryResponse) === null || _c === void 0 ? void 0 : _c['Customer']) &&
47
+ response.body.QueryResponse['Customer'].length > 0) {
48
+ return {
49
+ found: true,
50
+ result: response.body.QueryResponse['Customer'][0],
51
+ };
52
+ }
53
+ return {
54
+ found: false,
55
+ result: {},
56
+ };
57
+ });
58
+ },
59
+ });
60
+ //# sourceMappingURL=find-customer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-customer.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/quickbooks/src/actions/find-customer.ts"],"names":[],"mappings":";;;;AAAA,oEAAuE;AACvE,8DAAwF;AACxF,oCAA0C;AAC1C,0CAA2E;AAE9D,QAAA,kBAAkB,GAAG,IAAA,+BAAY,EAAC;IAC9C,IAAI,EAAE,sBAAc;IACpB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,eAAe;IAC5B,WAAW,EAAE,sDAAsD;IACnE,KAAK,EAAE;QACN,WAAW,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,eAAe;YAC5B,WAAW,EAAE,iDAAiD;YAC9D,QAAQ,EAAE,IAAI;SACd,CAAC;KACF;IACK,GAAG,CAAC,OAAO;;;YAChB,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAC3C,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,KAAK,0CAAG,WAAW,CAAC,CAAC;YAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,MAAM,GAAG,yBAAgB,CAAC,SAAS,CAAC,SAAmB,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,+CAA+C,WAAW,CAAC,OAAO,CAC/E,IAAI,EACJ,KAAK,CACL,gBAAgB,CAAC;YAElB,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAA+C;gBAC3F,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,MAAM,QAAQ;gBACtB,WAAW,EAAE;oBACZ,KAAK,EAAE,KAAK;oBACZ,YAAY,EAAE,IAAI;iBAClB;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,kCAAkB,CAAC,YAAY;oBACrC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;iBAChC;gBACD,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;iBAC1B;aACD,CAAC,CAAC;YAEH,IACC,CAAA,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,aAAa,0CAAG,UAAU,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,MAAM,GAAG,CAAC,EACjD,CAAC;gBACF,OAAO;oBACN,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;iBAClD,CAAC;YACH,CAAC;YAED,OAAO;gBACN,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,EAAE;aACV,CAAC;QACH,CAAC;KAAA;CACD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const findInvoiceAction: import("@scopieflows/pieces-framework").IAction<import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>, {
2
+ invoice_number: import("@scopieflows/pieces-framework").ShortTextProperty<true>;
3
+ }>;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findInvoiceAction = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@scopieflows/pieces-framework");
6
+ const pieces_common_1 = require("@scopieflows/pieces-common");
7
+ const index_1 = require("../index");
8
+ const common_1 = require("../lib/common");
9
+ exports.findInvoiceAction = (0, pieces_framework_1.createAction)({
10
+ auth: index_1.quickbooksAuth,
11
+ name: 'find_invoice',
12
+ displayName: 'Find Invoice',
13
+ description: 'Search for an invoice by its number in QuickBooks.',
14
+ props: {
15
+ invoice_number: pieces_framework_1.Property.ShortText({
16
+ displayName: 'Invoice Number',
17
+ description: 'The document number (DocNumber) of the invoice to search for.',
18
+ required: true,
19
+ }),
20
+ },
21
+ run(context) {
22
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
23
+ var _a, _b, _c;
24
+ const { invoice_number } = context.propsValue;
25
+ const companyId = (_a = context.auth.props) === null || _a === void 0 ? void 0 : _a['companyId'];
26
+ if (!companyId) {
27
+ throw new Error('Realm ID not found in authentication data. Please reconnect your account.');
28
+ }
29
+ const apiUrl = common_1.quickbooksCommon.getApiUrl(companyId);
30
+ const query = `SELECT * FROM Invoice WHERE DocNumber = '${invoice_number.replace(/'/g, "\\'")}' MAXRESULTS 1`;
31
+ const response = yield pieces_common_1.httpClient.sendRequest({
32
+ method: pieces_common_1.HttpMethod.GET,
33
+ url: `${apiUrl}/query`,
34
+ queryParams: {
35
+ query: query,
36
+ minorversion: '70',
37
+ },
38
+ authentication: {
39
+ type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
40
+ token: context.auth.access_token,
41
+ },
42
+ headers: {
43
+ Accept: 'application/json',
44
+ },
45
+ });
46
+ if (((_c = (_b = response.body) === null || _b === void 0 ? void 0 : _b.QueryResponse) === null || _c === void 0 ? void 0 : _c['Invoice']) &&
47
+ response.body.QueryResponse['Invoice'].length > 0) {
48
+ return {
49
+ found: true,
50
+ result: response.body.QueryResponse['Invoice'][0],
51
+ };
52
+ }
53
+ return {
54
+ found: false,
55
+ result: {},
56
+ };
57
+ });
58
+ },
59
+ });
60
+ //# sourceMappingURL=find-invoice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-invoice.js","sourceRoot":"","sources":["../../../../../../../packages/pieces/community/quickbooks/src/actions/find-invoice.ts"],"names":[],"mappings":";;;;AAAA,oEAAuE;AACvE,8DAAwF;AACxF,oCAA0C;AAC1C,0CAA2E;AAwG9D,QAAA,iBAAiB,GAAG,IAAA,+BAAY,EAAC;IAC7C,IAAI,EAAE,sBAAc;IACpB,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,cAAc;IAC3B,WAAW,EAAE,oDAAoD;IACjE,KAAK,EAAE;QACN,cAAc,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAClC,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,+DAA+D;YAC5E,QAAQ,EAAE,IAAI;SACd,CAAC;KACF;IACK,GAAG,CAAC,OAAO;;;YAChB,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAC9C,MAAM,SAAS,GAAG,MAAA,OAAO,CAAC,IAAI,CAAC,KAAK,0CAAG,WAAW,CAAC,CAAC;YAEpD,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,MAAM,GAAG,yBAAgB,CAAC,SAAS,CAAC,SAAmB,CAAC,CAAC;YAC/D,MAAM,KAAK,GAAG,4CAA4C,cAAc,CAAC,OAAO,CAC/E,IAAI,EACJ,KAAK,CACL,gBAAgB,CAAC;YAElB,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAA8C;gBAC1F,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,GAAG,MAAM,QAAQ;gBACtB,WAAW,EAAE;oBACZ,KAAK,EAAE,KAAK;oBACZ,YAAY,EAAE,IAAI;iBAClB;gBACD,cAAc,EAAE;oBACf,IAAI,EAAE,kCAAkB,CAAC,YAAY;oBACrC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY;iBAChC;gBACD,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;iBAC1B;aACD,CAAC,CAAC;YAEH,IACC,CAAA,MAAA,MAAA,QAAQ,CAAC,IAAI,0CAAE,aAAa,0CAAG,SAAS,CAAC;gBACzC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAChD,CAAC;gBACF,OAAO;oBACN,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;iBACjD,CAAC;YACH,CAAC;YAED,OAAO;gBACN,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,EAAE;aACV,CAAC;QACH,CAAC;KAAA;CACD,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const findPaymentAction: import("@scopieflows/pieces-framework").IAction<import("@scopieflows/pieces-framework").OAuth2Property<import("@scopieflows/pieces-framework").OAuth2Props>, {
2
+ customerId: import("@scopieflows/pieces-framework").ShortTextProperty<true>;
3
+ }>;