@pulses/quickbooks-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.
Files changed (81) hide show
  1. package/dist/client.d.ts +33 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +327 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/constants.d.ts +12 -0
  6. package/dist/constants.d.ts.map +1 -0
  7. package/dist/constants.js +12 -0
  8. package/dist/constants.js.map +1 -0
  9. package/dist/index.d.ts +3 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +436 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/tools/accounts.d.ts +140 -0
  14. package/dist/tools/accounts.d.ts.map +1 -0
  15. package/dist/tools/accounts.js +115 -0
  16. package/dist/tools/accounts.js.map +1 -0
  17. package/dist/tools/bills.d.ts +386 -0
  18. package/dist/tools/bills.d.ts.map +1 -0
  19. package/dist/tools/bills.js +180 -0
  20. package/dist/tools/bills.js.map +1 -0
  21. package/dist/tools/company.d.ts +20 -0
  22. package/dist/tools/company.d.ts.map +1 -0
  23. package/dist/tools/company.js +37 -0
  24. package/dist/tools/company.js.map +1 -0
  25. package/dist/tools/customers.d.ts +218 -0
  26. package/dist/tools/customers.d.ts.map +1 -0
  27. package/dist/tools/customers.js +154 -0
  28. package/dist/tools/customers.js.map +1 -0
  29. package/dist/tools/employees.d.ts +182 -0
  30. package/dist/tools/employees.d.ts.map +1 -0
  31. package/dist/tools/employees.js +138 -0
  32. package/dist/tools/employees.js.map +1 -0
  33. package/dist/tools/estimates.d.ts +200 -0
  34. package/dist/tools/estimates.d.ts.map +1 -0
  35. package/dist/tools/estimates.js +131 -0
  36. package/dist/tools/estimates.js.map +1 -0
  37. package/dist/tools/invoices.d.ts +402 -0
  38. package/dist/tools/invoices.d.ts.map +1 -0
  39. package/dist/tools/invoices.js +203 -0
  40. package/dist/tools/invoices.js.map +1 -0
  41. package/dist/tools/items.d.ts +212 -0
  42. package/dist/tools/items.d.ts.map +1 -0
  43. package/dist/tools/items.js +153 -0
  44. package/dist/tools/items.js.map +1 -0
  45. package/dist/tools/journal-entries.d.ts +198 -0
  46. package/dist/tools/journal-entries.d.ts.map +1 -0
  47. package/dist/tools/journal-entries.js +135 -0
  48. package/dist/tools/journal-entries.js.map +1 -0
  49. package/dist/tools/payments.d.ts +174 -0
  50. package/dist/tools/payments.d.ts.map +1 -0
  51. package/dist/tools/payments.js +120 -0
  52. package/dist/tools/payments.js.map +1 -0
  53. package/dist/tools/purchases.d.ts +240 -0
  54. package/dist/tools/purchases.d.ts.map +1 -0
  55. package/dist/tools/purchases.js +149 -0
  56. package/dist/tools/purchases.js.map +1 -0
  57. package/dist/tools/query.d.ts +26 -0
  58. package/dist/tools/query.d.ts.map +1 -0
  59. package/dist/tools/query.js +27 -0
  60. package/dist/tools/query.js.map +1 -0
  61. package/dist/tools/reports.d.ts +178 -0
  62. package/dist/tools/reports.d.ts.map +1 -0
  63. package/dist/tools/reports.js +117 -0
  64. package/dist/tools/reports.js.map +1 -0
  65. package/dist/tools/tax.d.ts +116 -0
  66. package/dist/tools/tax.d.ts.map +1 -0
  67. package/dist/tools/tax.js +112 -0
  68. package/dist/tools/tax.js.map +1 -0
  69. package/dist/tools/time-activities.d.ts +228 -0
  70. package/dist/tools/time-activities.d.ts.map +1 -0
  71. package/dist/tools/time-activities.js +164 -0
  72. package/dist/tools/time-activities.js.map +1 -0
  73. package/dist/tools/vendors.d.ts +212 -0
  74. package/dist/tools/vendors.d.ts.map +1 -0
  75. package/dist/tools/vendors.js +152 -0
  76. package/dist/tools/vendors.js.map +1 -0
  77. package/dist/types.d.ts +295 -0
  78. package/dist/types.d.ts.map +1 -0
  79. package/dist/types.js +11 -0
  80. package/dist/types.js.map +1 -0
  81. package/package.json +46 -0
@@ -0,0 +1,33 @@
1
+ export declare class TokenManager {
2
+ private accessToken;
3
+ private refreshToken;
4
+ private clientId;
5
+ private clientSecret;
6
+ private expiresAt;
7
+ private refreshTimer;
8
+ private refreshPromise;
9
+ private static readonly MAX_REFRESH_RETRIES;
10
+ private static readonly REFRESH_RETRY_DELAY;
11
+ constructor();
12
+ getAccessToken(): Promise<string>;
13
+ private scheduleNextRefresh;
14
+ private refreshAccessToken;
15
+ private doRefresh;
16
+ destroy(): void;
17
+ }
18
+ export declare class QBOClient {
19
+ private tokenManager;
20
+ private realmId;
21
+ private baseUrl;
22
+ constructor(tokenManager: TokenManager);
23
+ private getApiUrl;
24
+ private getHeaders;
25
+ get<T>(path: string): Promise<T>;
26
+ post<T>(path: string, body?: Record<string, unknown>): Promise<T>;
27
+ query<T>(queryString: string): Promise<T>;
28
+ delete(entityName: string, entityId: string, syncToken: string): Promise<void>;
29
+ void_(entityName: string, entityId: string, syncToken: string): Promise<void>;
30
+ sendEmail(entityName: string, entityId: string, email?: string): Promise<void>;
31
+ getReport<T>(reportName: string, params?: Record<string, string>): Promise<T>;
32
+ }
33
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAWA,qBAAa,YAAY;IACvB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAK;IAChD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;;IAa7C,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IAqBvC,OAAO,CAAC,mBAAmB;YAkBb,kBAAkB;YAalB,SAAS;IAmEvB,OAAO,IAAI,IAAI;CAMhB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,YAAY,EAAE,YAAY;IAWtC,OAAO,CAAC,SAAS;YAIH,UAAU;IASlB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA0BhC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IA2BjE,KAAK,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IA0BzC,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB9E,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAyB7E,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B9E,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA8BpF"}
package/dist/client.js ADDED
@@ -0,0 +1,327 @@
1
+ import { QBO_API_BASE_PRODUCTION, QBO_API_BASE_SANDBOX, QBO_TOKEN_URL, QBO_API_VERSION, QBO_MINOR_VERSION, REQUEST_TIMEOUT, TOKEN_REFRESH_EARLY, } from "./constants.js";
2
+ import { ApiError } from "./types.js";
3
+ export class TokenManager {
4
+ accessToken = null;
5
+ refreshToken = null;
6
+ clientId = null;
7
+ clientSecret = null;
8
+ expiresAt = null;
9
+ refreshTimer = null;
10
+ refreshPromise = null;
11
+ static MAX_REFRESH_RETRIES = 1;
12
+ static REFRESH_RETRY_DELAY = 5000;
13
+ constructor() {
14
+ this.accessToken = process.env.QBO_ACCESS_TOKEN || null;
15
+ this.refreshToken = process.env.QBO_REFRESH_TOKEN || null;
16
+ this.clientId = process.env.QBO_CLIENT_ID || null;
17
+ this.clientSecret = process.env.QBO_CLIENT_SECRET || null;
18
+ if (this.accessToken) {
19
+ this.expiresAt = Date.now() + 3600000;
20
+ }
21
+ }
22
+ async getAccessToken() {
23
+ if (this.refreshPromise) {
24
+ await this.refreshPromise;
25
+ }
26
+ if (this.accessToken && this.expiresAt && Date.now() + TOKEN_REFRESH_EARLY < this.expiresAt) {
27
+ return this.accessToken;
28
+ }
29
+ if (this.refreshToken) {
30
+ await this.refreshAccessToken();
31
+ if (this.accessToken) {
32
+ return this.accessToken;
33
+ }
34
+ }
35
+ throw new Error("Authentication failed. Set QBO_ACCESS_TOKEN or QBO_REFRESH_TOKEN + QBO_CLIENT_ID + QBO_CLIENT_SECRET environment variables.");
36
+ }
37
+ scheduleNextRefresh() {
38
+ if (this.refreshTimer) {
39
+ clearTimeout(this.refreshTimer);
40
+ this.refreshTimer = null;
41
+ }
42
+ if (!this.refreshToken || !this.expiresAt)
43
+ return;
44
+ const refreshIn = Math.max(0, this.expiresAt - Date.now() - TOKEN_REFRESH_EARLY);
45
+ this.refreshTimer = setTimeout(async () => {
46
+ try {
47
+ await this.refreshAccessToken();
48
+ }
49
+ catch {
50
+ // Next getAccessToken() call will handle it
51
+ }
52
+ }, refreshIn);
53
+ }
54
+ async refreshAccessToken() {
55
+ if (this.refreshPromise) {
56
+ return this.refreshPromise;
57
+ }
58
+ this.refreshPromise = this.doRefresh();
59
+ try {
60
+ await this.refreshPromise;
61
+ }
62
+ finally {
63
+ this.refreshPromise = null;
64
+ }
65
+ }
66
+ async doRefresh() {
67
+ if (!this.refreshToken) {
68
+ throw new Error("No refresh token available.");
69
+ }
70
+ if (!this.clientId || !this.clientSecret) {
71
+ throw new Error("QBO_CLIENT_ID and QBO_CLIENT_SECRET are required for token refresh.");
72
+ }
73
+ let lastError = null;
74
+ for (let attempt = 0; attempt <= TokenManager.MAX_REFRESH_RETRIES; attempt++) {
75
+ try {
76
+ if (attempt > 0) {
77
+ await new Promise(resolve => setTimeout(resolve, TokenManager.REFRESH_RETRY_DELAY * attempt));
78
+ }
79
+ const basicAuth = Buffer.from(`${this.clientId}:${this.clientSecret}`).toString("base64");
80
+ const formData = new URLSearchParams();
81
+ formData.append("grant_type", "refresh_token");
82
+ formData.append("refresh_token", this.refreshToken);
83
+ const response = await fetch(QBO_TOKEN_URL, {
84
+ method: "POST",
85
+ headers: {
86
+ "Content-Type": "application/x-www-form-urlencoded",
87
+ Authorization: `Basic ${basicAuth}`,
88
+ Accept: "application/json",
89
+ },
90
+ body: formData.toString(),
91
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
92
+ });
93
+ if (!response.ok) {
94
+ const body = await response.text().catch(() => "");
95
+ if (response.status === 401 || response.status === 400) {
96
+ throw new Error(`Refresh token is invalid or expired (HTTP ${response.status}). Re-authenticate via OAuth 2.0 to get new tokens. ${body}`);
97
+ }
98
+ throw new Error(`Token refresh failed (HTTP ${response.status}): ${body}`);
99
+ }
100
+ const data = (await response.json());
101
+ this.accessToken = data.access_token;
102
+ this.expiresAt = Date.now() + data.expires_in * 1000;
103
+ if (data.refresh_token) {
104
+ this.refreshToken = data.refresh_token;
105
+ }
106
+ this.scheduleNextRefresh();
107
+ return;
108
+ }
109
+ catch (error) {
110
+ lastError = error instanceof Error ? error : new Error(String(error));
111
+ if (lastError.message.includes("invalid or expired")) {
112
+ throw lastError;
113
+ }
114
+ }
115
+ }
116
+ throw lastError || new Error("Token refresh failed after retries.");
117
+ }
118
+ destroy() {
119
+ if (this.refreshTimer) {
120
+ clearTimeout(this.refreshTimer);
121
+ this.refreshTimer = null;
122
+ }
123
+ }
124
+ }
125
+ export class QBOClient {
126
+ tokenManager;
127
+ realmId;
128
+ baseUrl;
129
+ constructor(tokenManager) {
130
+ this.tokenManager = tokenManager;
131
+ this.realmId = process.env.QBO_REALM_ID || "";
132
+ const useSandbox = process.env.QBO_SANDBOX === "true";
133
+ this.baseUrl = useSandbox ? QBO_API_BASE_SANDBOX : QBO_API_BASE_PRODUCTION;
134
+ if (!this.realmId) {
135
+ console.error("Warning: QBO_REALM_ID not set. API calls will fail.");
136
+ }
137
+ }
138
+ getApiUrl(path) {
139
+ return `${this.baseUrl}/${QBO_API_VERSION}/company/${this.realmId}${path}?minorversion=${QBO_MINOR_VERSION}`;
140
+ }
141
+ async getHeaders() {
142
+ const token = await this.tokenManager.getAccessToken();
143
+ return {
144
+ Authorization: `Bearer ${token}`,
145
+ Accept: "application/json",
146
+ "Content-Type": "application/json",
147
+ };
148
+ }
149
+ async get(path) {
150
+ const headers = await this.getHeaders();
151
+ const url = this.getApiUrl(path);
152
+ try {
153
+ const response = await fetch(url, {
154
+ method: "GET",
155
+ headers,
156
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
157
+ });
158
+ if (!response.ok) {
159
+ const body = await response.text();
160
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
161
+ }
162
+ return (await response.json());
163
+ }
164
+ catch (error) {
165
+ if (error instanceof ApiError)
166
+ throw error;
167
+ if (error instanceof Error && error.message.includes("timed out")) {
168
+ throw new Error("Request timed out after 30 seconds.");
169
+ }
170
+ throw error;
171
+ }
172
+ }
173
+ async post(path, body) {
174
+ const headers = await this.getHeaders();
175
+ const url = this.getApiUrl(path);
176
+ try {
177
+ const response = await fetch(url, {
178
+ method: "POST",
179
+ headers,
180
+ body: body ? JSON.stringify(body) : undefined,
181
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
182
+ });
183
+ if (!response.ok) {
184
+ const bodyText = await response.text();
185
+ throw new ApiError(response.status, `HTTP ${response.status}`, bodyText);
186
+ }
187
+ return (await response.json());
188
+ }
189
+ catch (error) {
190
+ if (error instanceof ApiError)
191
+ throw error;
192
+ if (error instanceof Error && error.message.includes("timed out")) {
193
+ throw new Error("Request timed out after 30 seconds.");
194
+ }
195
+ throw error;
196
+ }
197
+ }
198
+ async query(queryString) {
199
+ const headers = await this.getHeaders();
200
+ const url = `${this.baseUrl}/${QBO_API_VERSION}/company/${this.realmId}/query?minorversion=${QBO_MINOR_VERSION}&query=${encodeURIComponent(queryString)}`;
201
+ try {
202
+ const response = await fetch(url, {
203
+ method: "GET",
204
+ headers,
205
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
206
+ });
207
+ if (!response.ok) {
208
+ const body = await response.text();
209
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
210
+ }
211
+ return (await response.json());
212
+ }
213
+ catch (error) {
214
+ if (error instanceof ApiError)
215
+ throw error;
216
+ if (error instanceof Error && error.message.includes("timed out")) {
217
+ throw new Error("Request timed out after 30 seconds.");
218
+ }
219
+ throw error;
220
+ }
221
+ }
222
+ async delete(entityName, entityId, syncToken) {
223
+ const headers = await this.getHeaders();
224
+ const url = `${this.getApiUrl(`/${entityName.toLowerCase()}`)}&operation=delete`;
225
+ try {
226
+ const response = await fetch(url, {
227
+ method: "POST",
228
+ headers,
229
+ body: JSON.stringify({ Id: entityId, SyncToken: syncToken }),
230
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
231
+ });
232
+ if (!response.ok) {
233
+ const body = await response.text();
234
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
235
+ }
236
+ }
237
+ catch (error) {
238
+ if (error instanceof ApiError)
239
+ throw error;
240
+ if (error instanceof Error && error.message.includes("timed out")) {
241
+ throw new Error("Request timed out after 30 seconds.");
242
+ }
243
+ throw error;
244
+ }
245
+ }
246
+ async void_(entityName, entityId, syncToken) {
247
+ const headers = await this.getHeaders();
248
+ const url = `${this.getApiUrl(`/${entityName.toLowerCase()}`)}&operation=void`;
249
+ try {
250
+ const response = await fetch(url, {
251
+ method: "POST",
252
+ headers,
253
+ body: JSON.stringify({ Id: entityId, SyncToken: syncToken, sparse: true }),
254
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
255
+ });
256
+ if (!response.ok) {
257
+ const body = await response.text();
258
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
259
+ }
260
+ }
261
+ catch (error) {
262
+ if (error instanceof ApiError)
263
+ throw error;
264
+ if (error instanceof Error && error.message.includes("timed out")) {
265
+ throw new Error("Request timed out after 30 seconds.");
266
+ }
267
+ throw error;
268
+ }
269
+ }
270
+ async sendEmail(entityName, entityId, email) {
271
+ const headers = await this.getHeaders();
272
+ let url = this.getApiUrl(`/${entityName.toLowerCase()}/${entityId}/send`);
273
+ if (email) {
274
+ url += `&sendTo=${encodeURIComponent(email)}`;
275
+ }
276
+ try {
277
+ const response = await fetch(url, {
278
+ method: "POST",
279
+ headers,
280
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
281
+ });
282
+ if (!response.ok) {
283
+ const body = await response.text();
284
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
285
+ }
286
+ }
287
+ catch (error) {
288
+ if (error instanceof ApiError)
289
+ throw error;
290
+ if (error instanceof Error && error.message.includes("timed out")) {
291
+ throw new Error("Request timed out after 30 seconds.");
292
+ }
293
+ throw error;
294
+ }
295
+ }
296
+ async getReport(reportName, params) {
297
+ const headers = await this.getHeaders();
298
+ let url = `${this.baseUrl}/${QBO_API_VERSION}/company/${this.realmId}/reports/${reportName}?minorversion=${QBO_MINOR_VERSION}`;
299
+ if (params) {
300
+ for (const [key, value] of Object.entries(params)) {
301
+ if (value)
302
+ url += `&${key}=${encodeURIComponent(value)}`;
303
+ }
304
+ }
305
+ try {
306
+ const response = await fetch(url, {
307
+ method: "GET",
308
+ headers,
309
+ signal: AbortSignal.timeout(REQUEST_TIMEOUT),
310
+ });
311
+ if (!response.ok) {
312
+ const body = await response.text();
313
+ throw new ApiError(response.status, `HTTP ${response.status}`, body);
314
+ }
315
+ return (await response.json());
316
+ }
317
+ catch (error) {
318
+ if (error instanceof ApiError)
319
+ throw error;
320
+ if (error instanceof Error && error.message.includes("timed out")) {
321
+ throw new Error("Request timed out after 30 seconds.");
322
+ }
323
+ throw error;
324
+ }
325
+ }
326
+ }
327
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export declare const QBO_API_BASE_PRODUCTION = "https://quickbooks.api.intuit.com";
2
+ export declare const QBO_API_BASE_SANDBOX = "https://sandbox-quickbooks.api.intuit.com";
3
+ export declare const QBO_AUTH_URL = "https://appcenter.intuit.com/connect/oauth2";
4
+ export declare const QBO_TOKEN_URL = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
5
+ export declare const QBO_REVOKE_URL = "https://developer.api.intuit.com/v2/oauth2/tokens/revoke";
6
+ export declare const QBO_API_VERSION = "v3";
7
+ export declare const QBO_MINOR_VERSION = "75";
8
+ export declare const REQUEST_TIMEOUT = 30000;
9
+ export declare const TOKEN_REFRESH_EARLY = 60000;
10
+ export declare const DEFAULT_PAGE_SIZE = 100;
11
+ export declare const MAX_PAGE_SIZE = 1000;
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB,sCAAsC,CAAC;AAC3E,eAAO,MAAM,oBAAoB,8CAA8C,CAAC;AAChF,eAAO,MAAM,YAAY,gDAAgD,CAAC;AAC1E,eAAO,MAAM,aAAa,8DAA8D,CAAC;AACzF,eAAO,MAAM,cAAc,6DAA6D,CAAC;AAEzF,eAAO,MAAM,eAAe,OAAO,CAAC;AACpC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AAEtC,eAAO,MAAM,eAAe,QAAQ,CAAC;AACrC,eAAO,MAAM,mBAAmB,QAAQ,CAAC;AACzC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AACrC,eAAO,MAAM,aAAa,OAAO,CAAC"}
@@ -0,0 +1,12 @@
1
+ export const QBO_API_BASE_PRODUCTION = "https://quickbooks.api.intuit.com";
2
+ export const QBO_API_BASE_SANDBOX = "https://sandbox-quickbooks.api.intuit.com";
3
+ export const QBO_AUTH_URL = "https://appcenter.intuit.com/connect/oauth2";
4
+ export const QBO_TOKEN_URL = "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer";
5
+ export const QBO_REVOKE_URL = "https://developer.api.intuit.com/v2/oauth2/tokens/revoke";
6
+ export const QBO_API_VERSION = "v3";
7
+ export const QBO_MINOR_VERSION = "75";
8
+ export const REQUEST_TIMEOUT = 30000;
9
+ export const TOKEN_REFRESH_EARLY = 60000;
10
+ export const DEFAULT_PAGE_SIZE = 100;
11
+ export const MAX_PAGE_SIZE = 1000;
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG,mCAAmC,CAAC;AAC3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,2CAA2C,CAAC;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,6CAA6C,CAAC;AAC1E,MAAM,CAAC,MAAM,aAAa,GAAG,2DAA2D,CAAC;AACzF,MAAM,CAAC,MAAM,cAAc,GAAG,0DAA0D,CAAC;AAEzF,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAEtC,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,CAAC;AACrC,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,CAAC;AACrC,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}