@bubblelab/bubble-core 0.1.214 → 0.1.215

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 (85) hide show
  1. package/dist/bubble-bundle.d.ts +160 -121
  2. package/dist/bubble-factory.d.ts.map +1 -1
  3. package/dist/bubble-factory.js +3 -0
  4. package/dist/bubble-factory.js.map +1 -1
  5. package/dist/bubbles/service-bubble/agi-inc.d.ts +20 -20
  6. package/dist/bubbles/service-bubble/ai-agent.d.ts +74 -74
  7. package/dist/bubbles/service-bubble/airtable.d.ts +76 -76
  8. package/dist/bubbles/service-bubble/apify/actors/instagram-hashtag-scraper.d.ts +2 -2
  9. package/dist/bubbles/service-bubble/apify/actors/instagram-scraper.d.ts +8 -8
  10. package/dist/bubbles/service-bubble/apify/actors/linkedin-jobs-scraper.d.ts +2 -2
  11. package/dist/bubbles/service-bubble/apify/actors/linkedin-posts-search.d.ts +22 -22
  12. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-detail.d.ts +38 -38
  13. package/dist/bubbles/service-bubble/apify/actors/linkedin-profile-posts.d.ts +52 -52
  14. package/dist/bubbles/service-bubble/apify/actors/tiktok-scraper.d.ts +6 -6
  15. package/dist/bubbles/service-bubble/apify/actors/twitter-scraper.d.ts +12 -12
  16. package/dist/bubbles/service-bubble/apify/actors/youtube-scraper.d.ts +12 -12
  17. package/dist/bubbles/service-bubble/apify/apify-scraper.schema.d.ts +126 -126
  18. package/dist/bubbles/service-bubble/apify/apify.d.ts +18 -18
  19. package/dist/bubbles/service-bubble/ashby/ashby.d.ts +2 -2
  20. package/dist/bubbles/service-bubble/ashby/ashby.schema.d.ts +2 -2
  21. package/dist/bubbles/service-bubble/assembled/assembled.d.ts +6 -6
  22. package/dist/bubbles/service-bubble/assembled/assembled.schema.d.ts +6 -6
  23. package/dist/bubbles/service-bubble/attio/attio.d.ts +6 -6
  24. package/dist/bubbles/service-bubble/attio/attio.schema.d.ts +6 -6
  25. package/dist/bubbles/service-bubble/browserbase/browserbase.d.ts +1 -1
  26. package/dist/bubbles/service-bubble/browserbase/browserbase.schema.d.ts +1 -1
  27. package/dist/bubbles/service-bubble/capability-pipeline.d.ts.map +1 -1
  28. package/dist/bubbles/service-bubble/capability-pipeline.js +2 -1
  29. package/dist/bubbles/service-bubble/capability-pipeline.js.map +1 -1
  30. package/dist/bubbles/service-bubble/crustdata/crustdata.d.ts +4 -4
  31. package/dist/bubbles/service-bubble/crustdata/crustdata.schema.d.ts +8 -8
  32. package/dist/bubbles/service-bubble/firecrawl.d.ts +334 -334
  33. package/dist/bubbles/service-bubble/followupboss.d.ts +4 -4
  34. package/dist/bubbles/service-bubble/github.d.ts +60 -60
  35. package/dist/bubbles/service-bubble/gmail.d.ts +164 -164
  36. package/dist/bubbles/service-bubble/google-calendar.d.ts +6 -6
  37. package/dist/bubbles/service-bubble/google-drive.d.ts +8 -8
  38. package/dist/bubbles/service-bubble/http.d.ts +2 -2
  39. package/dist/bubbles/service-bubble/insforge-db.d.ts +8 -8
  40. package/dist/bubbles/service-bubble/jira/jira.d.ts +30 -30
  41. package/dist/bubbles/service-bubble/jira/jira.schema.d.ts +36 -36
  42. package/dist/bubbles/service-bubble/notion/notion.d.ts +168 -168
  43. package/dist/bubbles/service-bubble/notion/property-schemas.d.ts +8 -8
  44. package/dist/bubbles/service-bubble/postgresql.d.ts +8 -8
  45. package/dist/bubbles/service-bubble/posthog/posthog.d.ts +10 -10
  46. package/dist/bubbles/service-bubble/posthog/posthog.schema.d.ts +14 -14
  47. package/dist/bubbles/service-bubble/resend.d.ts +4 -4
  48. package/dist/bubbles/service-bubble/slack/slack.d.ts +388 -388
  49. package/dist/bubbles/service-bubble/stripe/stripe.d.ts +28 -28
  50. package/dist/bubbles/service-bubble/stripe/stripe.schema.d.ts +34 -34
  51. package/dist/bubbles/service-bubble/xero/index.d.ts +3 -0
  52. package/dist/bubbles/service-bubble/xero/index.d.ts.map +1 -0
  53. package/dist/bubbles/service-bubble/xero/index.js +3 -0
  54. package/dist/bubbles/service-bubble/xero/index.js.map +1 -0
  55. package/dist/bubbles/service-bubble/xero/xero.d.ts +975 -0
  56. package/dist/bubbles/service-bubble/xero/xero.d.ts.map +1 -0
  57. package/dist/bubbles/service-bubble/xero/xero.js +477 -0
  58. package/dist/bubbles/service-bubble/xero/xero.js.map +1 -0
  59. package/dist/bubbles/service-bubble/xero/xero.schema.d.ts +924 -0
  60. package/dist/bubbles/service-bubble/xero/xero.schema.d.ts.map +1 -0
  61. package/dist/bubbles/service-bubble/xero/xero.schema.js +366 -0
  62. package/dist/bubbles/service-bubble/xero/xero.schema.js.map +1 -0
  63. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.d.ts +6 -6
  64. package/dist/bubbles/tool-bubble/amazon-shopping-tool/amazon-shopping-tool.schema.d.ts +8 -8
  65. package/dist/bubbles/tool-bubble/bubbleflow-validation-tool.d.ts +4 -4
  66. package/dist/bubbles/tool-bubble/company-enrichment-tool.d.ts +20 -20
  67. package/dist/bubbles/tool-bubble/linkedin-tool.d.ts +380 -380
  68. package/dist/bubbles/tool-bubble/people-search-tool.d.ts +44 -44
  69. package/dist/bubbles/tool-bubble/reddit-scrape-tool.d.ts +10 -10
  70. package/dist/bubbles/tool-bubble/research-agent-tool.d.ts +4 -4
  71. package/dist/bubbles/tool-bubble/sql-query-tool.d.ts +4 -4
  72. package/dist/bubbles/tool-bubble/tiktok-tool.d.ts +60 -60
  73. package/dist/bubbles/tool-bubble/twitter-tool.d.ts +134 -134
  74. package/dist/bubbles/tool-bubble/yc-scraper-tool.d.ts +8 -8
  75. package/dist/bubbles/tool-bubble/youtube-tool.d.ts +20 -20
  76. package/dist/bubbles/workflow-bubble/generate-document.workflow.d.ts +12 -12
  77. package/dist/bubbles/workflow-bubble/pdf-form-operations.workflow.d.ts +8 -8
  78. package/dist/bubbles/workflow-bubble/slack-data-assistant.workflow.d.ts +2 -2
  79. package/dist/bubbles/workflow-bubble/slack-formatter-agent.d.ts +26 -26
  80. package/dist/bubbles.json +1189 -2
  81. package/dist/index.d.ts +2 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +1 -0
  84. package/dist/index.js.map +1 -1
  85. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xero.d.ts","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/xero/xero.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,477 @@
1
+ import { ServiceBubble } from '../../../types/service-bubble-class.js';
2
+ import { CredentialType, decodeCredentialPayload, } from '@bubblelab/shared-schemas';
3
+ import { XeroParamsSchema, XeroResultSchema, } from './xero.schema.js';
4
+ /**
5
+ * Xero Accounting Service Bubble
6
+ *
7
+ * Xero accounting integration for managing invoices, contacts, and accounts.
8
+ *
9
+ * Features:
10
+ * - Create, retrieve, and list invoices (sales and purchase)
11
+ * - Create, retrieve, and list contacts (customers and suppliers)
12
+ * - List chart of accounts
13
+ *
14
+ * Use cases:
15
+ * - Invoice creation and management
16
+ * - Customer and supplier contact management
17
+ * - Financial reporting and account tracking
18
+ *
19
+ * Security Features:
20
+ * - OAuth 2.0 authentication with Xero
21
+ * - Scoped access permissions
22
+ * - Secure credential handling with tenant isolation
23
+ */
24
+ export class XeroBubble extends ServiceBubble {
25
+ static type = 'service';
26
+ static service = 'xero';
27
+ static authType = 'oauth';
28
+ static bubbleName = 'xero';
29
+ static schema = XeroParamsSchema;
30
+ static resultSchema = XeroResultSchema;
31
+ static shortDescription = 'Xero accounting integration for invoices, contacts, and accounts';
32
+ static longDescription = `
33
+ Xero accounting service integration for financial management.
34
+
35
+ Features:
36
+ - Create, retrieve, and list invoices (accounts receivable and payable)
37
+ - Create, retrieve, and list contacts (customers and suppliers)
38
+ - List chart of accounts with filtering
39
+ - Multi-tenant support for managing multiple Xero organizations
40
+
41
+ Use cases:
42
+ - Automated invoice creation and tracking
43
+ - Customer and supplier contact management
44
+ - Financial data synchronization and reporting
45
+ - Accounts payable and receivable automation
46
+
47
+ Security Features:
48
+ - OAuth 2.0 authentication with Xero
49
+ - Scoped access permissions for accounting operations
50
+ - Tenant-isolated API access
51
+ - Secure credential handling and validation
52
+ `;
53
+ static alias = 'accounting';
54
+ constructor(params = {
55
+ operation: 'list_invoices',
56
+ }, context) {
57
+ super(params, context);
58
+ }
59
+ async testCredential() {
60
+ const creds = this.parseCredentials();
61
+ if (!creds) {
62
+ throw new Error('Xero credentials are required');
63
+ }
64
+ const response = await fetch('https://api.xero.com/api.xro/2.0/Organisation', {
65
+ headers: {
66
+ Authorization: `Bearer ${creds.accessToken}`,
67
+ 'Xero-Tenant-Id': creds.tenantId,
68
+ Accept: 'application/json',
69
+ },
70
+ });
71
+ if (!response.ok) {
72
+ const text = await response.text();
73
+ throw new Error(`Xero API error (${response.status}): ${text}`);
74
+ }
75
+ return true;
76
+ }
77
+ /**
78
+ * Xero credential format:
79
+ * Base64-encoded JSON: { accessToken, tenantId }
80
+ * The tenantId identifies which Xero organization to access.
81
+ */
82
+ parseCredentials() {
83
+ const { credentials } = this.params;
84
+ if (!credentials || typeof credentials !== 'object') {
85
+ return null;
86
+ }
87
+ const xeroCredRaw = credentials[CredentialType.XERO_CRED];
88
+ if (!xeroCredRaw) {
89
+ return null;
90
+ }
91
+ try {
92
+ const parsed = decodeCredentialPayload(xeroCredRaw);
93
+ if (parsed.accessToken && parsed.tenantId) {
94
+ return {
95
+ accessToken: parsed.accessToken,
96
+ tenantId: parsed.tenantId,
97
+ };
98
+ }
99
+ }
100
+ catch {
101
+ // If decoding fails, treat the raw value as an access token (validator path)
102
+ // In this case, we can't make API calls without tenantId
103
+ }
104
+ return null;
105
+ }
106
+ chooseCredential() {
107
+ const creds = this.parseCredentials();
108
+ return creds?.accessToken;
109
+ }
110
+ async makeXeroApiRequest(endpoint, method = 'GET', body) {
111
+ const creds = this.parseCredentials();
112
+ if (!creds) {
113
+ throw new Error('Invalid Xero credentials. Expected base64-encoded JSON with { accessToken, tenantId }.');
114
+ }
115
+ const url = endpoint.startsWith('https://')
116
+ ? endpoint
117
+ : `https://api.xero.com/api.xro/2.0${endpoint}`;
118
+ const requestInit = {
119
+ method,
120
+ headers: {
121
+ Authorization: `Bearer ${creds.accessToken}`,
122
+ 'Xero-Tenant-Id': creds.tenantId,
123
+ 'Content-Type': 'application/json',
124
+ Accept: 'application/json',
125
+ },
126
+ };
127
+ if (body && method !== 'GET') {
128
+ requestInit.body = JSON.stringify(body);
129
+ }
130
+ const response = await fetch(url, requestInit);
131
+ if (!response.ok) {
132
+ const errorText = await response.text();
133
+ throw new Error(`Xero API error (${response.status}): ${errorText}`);
134
+ }
135
+ const contentType = response.headers.get('content-type');
136
+ if (contentType && contentType.includes('application/json')) {
137
+ return await response.json();
138
+ }
139
+ return await response.text();
140
+ }
141
+ async performAction(context) {
142
+ void context;
143
+ const { operation } = this.params;
144
+ try {
145
+ const result = await (async () => {
146
+ const parsedParams = this.params;
147
+ switch (operation) {
148
+ case 'create_invoice':
149
+ return await this.createInvoice(parsedParams);
150
+ case 'get_invoice':
151
+ return await this.getInvoice(parsedParams);
152
+ case 'list_invoices':
153
+ return await this.listInvoices(parsedParams);
154
+ case 'create_contact':
155
+ return await this.createContact(parsedParams);
156
+ case 'get_contact':
157
+ return await this.getContact(parsedParams);
158
+ case 'list_contacts':
159
+ return await this.listContacts(parsedParams);
160
+ case 'list_accounts':
161
+ return await this.listAccounts(parsedParams);
162
+ case 'get_report':
163
+ return await this.getReport(parsedParams);
164
+ default:
165
+ throw new Error(`Unsupported operation: ${operation}`);
166
+ }
167
+ })();
168
+ return result;
169
+ }
170
+ catch (error) {
171
+ return {
172
+ operation,
173
+ success: false,
174
+ error: error instanceof Error ? error.message : 'Unknown error occurred',
175
+ };
176
+ }
177
+ }
178
+ async createInvoice(params) {
179
+ const invoiceBody = {
180
+ Type: params.type,
181
+ Contact: { ContactID: params.contact_id },
182
+ LineItems: params.line_items,
183
+ Status: params.status || 'DRAFT',
184
+ };
185
+ if (params.date)
186
+ invoiceBody.Date = params.date;
187
+ if (params.due_date)
188
+ invoiceBody.DueDate = params.due_date;
189
+ if (params.reference)
190
+ invoiceBody.Reference = params.reference;
191
+ if (params.currency_code)
192
+ invoiceBody.CurrencyCode = params.currency_code;
193
+ const response = await this.makeXeroApiRequest('/Invoices', 'POST', invoiceBody);
194
+ const invoice = response.Invoices?.[0];
195
+ return {
196
+ operation: 'create_invoice',
197
+ success: true,
198
+ invoice: invoice
199
+ ? {
200
+ InvoiceID: invoice.InvoiceID,
201
+ InvoiceNumber: invoice.InvoiceNumber,
202
+ Type: invoice.Type,
203
+ Status: invoice.Status,
204
+ Contact: invoice.Contact,
205
+ Date: invoice.Date,
206
+ DueDate: invoice.DueDate,
207
+ Total: invoice.Total,
208
+ AmountDue: invoice.AmountDue,
209
+ AmountPaid: invoice.AmountPaid,
210
+ CurrencyCode: invoice.CurrencyCode,
211
+ Reference: invoice.Reference,
212
+ LineItems: invoice.LineItems,
213
+ }
214
+ : undefined,
215
+ error: '',
216
+ };
217
+ }
218
+ async getInvoice(params) {
219
+ const response = await this.makeXeroApiRequest(`/Invoices/${params.invoice_id}`);
220
+ const invoice = response.Invoices?.[0];
221
+ return {
222
+ operation: 'get_invoice',
223
+ success: true,
224
+ invoice: invoice
225
+ ? {
226
+ InvoiceID: invoice.InvoiceID,
227
+ InvoiceNumber: invoice.InvoiceNumber,
228
+ Type: invoice.Type,
229
+ Status: invoice.Status,
230
+ Contact: invoice.Contact,
231
+ Date: invoice.Date,
232
+ DueDate: invoice.DueDate,
233
+ Total: invoice.Total,
234
+ AmountDue: invoice.AmountDue,
235
+ AmountPaid: invoice.AmountPaid,
236
+ CurrencyCode: invoice.CurrencyCode,
237
+ Reference: invoice.Reference,
238
+ LineItems: invoice.LineItems,
239
+ }
240
+ : undefined,
241
+ error: '',
242
+ };
243
+ }
244
+ async listInvoices(params) {
245
+ const queryParams = new URLSearchParams();
246
+ if (params.page)
247
+ queryParams.set('page', String(params.page));
248
+ if (params.where)
249
+ queryParams.set('where', params.where);
250
+ if (params.status) {
251
+ const existingWhere = queryParams.get('where');
252
+ const statusFilter = `Status=="${params.status}"`;
253
+ queryParams.set('where', existingWhere ? `${existingWhere} AND ${statusFilter}` : statusFilter);
254
+ }
255
+ const queryString = queryParams.toString();
256
+ const endpoint = `/Invoices${queryString ? `?${queryString}` : ''}`;
257
+ const response = await this.makeXeroApiRequest(endpoint);
258
+ return {
259
+ operation: 'list_invoices',
260
+ success: true,
261
+ invoices: (response.Invoices || []).map((inv) => ({
262
+ InvoiceID: inv.InvoiceID,
263
+ InvoiceNumber: inv.InvoiceNumber,
264
+ Type: inv.Type,
265
+ Status: inv.Status,
266
+ Contact: inv.Contact,
267
+ Date: inv.Date,
268
+ DueDate: inv.DueDate,
269
+ Total: inv.Total,
270
+ AmountDue: inv.AmountDue,
271
+ AmountPaid: inv.AmountPaid,
272
+ CurrencyCode: inv.CurrencyCode,
273
+ Reference: inv.Reference,
274
+ })),
275
+ error: '',
276
+ };
277
+ }
278
+ async createContact(params) {
279
+ const contactBody = {
280
+ Name: params.name,
281
+ };
282
+ if (params.email)
283
+ contactBody.EmailAddress = params.email;
284
+ if (params.first_name)
285
+ contactBody.FirstName = params.first_name;
286
+ if (params.last_name)
287
+ contactBody.LastName = params.last_name;
288
+ if (params.account_number)
289
+ contactBody.AccountNumber = params.account_number;
290
+ if (params.tax_number)
291
+ contactBody.TaxNumber = params.tax_number;
292
+ if (params.phone) {
293
+ contactBody.Phones = [
294
+ { PhoneType: 'DEFAULT', PhoneNumber: params.phone },
295
+ ];
296
+ }
297
+ const response = await this.makeXeroApiRequest('/Contacts', 'POST', contactBody);
298
+ const contact = response.Contacts?.[0];
299
+ return {
300
+ operation: 'create_contact',
301
+ success: true,
302
+ contact: contact
303
+ ? {
304
+ ContactID: contact.ContactID,
305
+ Name: contact.Name,
306
+ FirstName: contact.FirstName,
307
+ LastName: contact.LastName,
308
+ EmailAddress: contact.EmailAddress,
309
+ AccountNumber: contact.AccountNumber,
310
+ TaxNumber: contact.TaxNumber,
311
+ ContactStatus: contact.ContactStatus,
312
+ Phones: contact.Phones,
313
+ Addresses: contact.Addresses,
314
+ }
315
+ : undefined,
316
+ error: '',
317
+ };
318
+ }
319
+ async getContact(params) {
320
+ const response = await this.makeXeroApiRequest(`/Contacts/${params.contact_id}`);
321
+ const contact = response.Contacts?.[0];
322
+ return {
323
+ operation: 'get_contact',
324
+ success: true,
325
+ contact: contact
326
+ ? {
327
+ ContactID: contact.ContactID,
328
+ Name: contact.Name,
329
+ FirstName: contact.FirstName,
330
+ LastName: contact.LastName,
331
+ EmailAddress: contact.EmailAddress,
332
+ AccountNumber: contact.AccountNumber,
333
+ TaxNumber: contact.TaxNumber,
334
+ ContactStatus: contact.ContactStatus,
335
+ Phones: contact.Phones,
336
+ Addresses: contact.Addresses,
337
+ }
338
+ : undefined,
339
+ error: '',
340
+ };
341
+ }
342
+ async listContacts(params) {
343
+ const queryParams = new URLSearchParams();
344
+ if (params.page)
345
+ queryParams.set('page', String(params.page));
346
+ if (params.where)
347
+ queryParams.set('where', params.where);
348
+ const queryString = queryParams.toString();
349
+ const endpoint = `/Contacts${queryString ? `?${queryString}` : ''}`;
350
+ const response = await this.makeXeroApiRequest(endpoint);
351
+ return {
352
+ operation: 'list_contacts',
353
+ success: true,
354
+ contacts: (response.Contacts || []).map((c) => ({
355
+ ContactID: c.ContactID,
356
+ Name: c.Name,
357
+ FirstName: c.FirstName,
358
+ LastName: c.LastName,
359
+ EmailAddress: c.EmailAddress,
360
+ AccountNumber: c.AccountNumber,
361
+ TaxNumber: c.TaxNumber,
362
+ ContactStatus: c.ContactStatus,
363
+ Phones: c.Phones,
364
+ Addresses: c.Addresses,
365
+ })),
366
+ error: '',
367
+ };
368
+ }
369
+ async listAccounts(params) {
370
+ const queryParams = new URLSearchParams();
371
+ if (params.type)
372
+ queryParams.set('where', `Type=="${params.type}"`);
373
+ const queryString = queryParams.toString();
374
+ const endpoint = `/Accounts${queryString ? `?${queryString}` : ''}`;
375
+ const response = await this.makeXeroApiRequest(endpoint);
376
+ return {
377
+ operation: 'list_accounts',
378
+ success: true,
379
+ accounts: (response.Accounts || []).map((a) => ({
380
+ AccountID: a.AccountID,
381
+ Code: a.Code,
382
+ Name: a.Name,
383
+ Type: a.Type,
384
+ Status: a.Status,
385
+ Description: a.Description,
386
+ Class: a.Class,
387
+ TaxType: a.TaxType,
388
+ })),
389
+ error: '',
390
+ };
391
+ }
392
+ async getReport(params) {
393
+ // Validate aged reports require contact_id
394
+ if ((params.report_type === 'AgedReceivablesByContact' ||
395
+ params.report_type === 'AgedPayablesByContact') &&
396
+ !params.contact_id) {
397
+ return {
398
+ operation: 'get_report',
399
+ success: false,
400
+ error: `contact_id is required for ${params.report_type}`,
401
+ };
402
+ }
403
+ const queryParams = new URLSearchParams();
404
+ if (params.date)
405
+ queryParams.set('date', params.date);
406
+ if (params.from_date)
407
+ queryParams.set('fromDate', params.from_date);
408
+ if (params.to_date)
409
+ queryParams.set('toDate', params.to_date);
410
+ if (params.contact_id)
411
+ queryParams.set('contactID', params.contact_id);
412
+ if (params.payments_only)
413
+ queryParams.set('paymentsOnly', 'true');
414
+ if (params.periods)
415
+ queryParams.set('periods', String(params.periods));
416
+ // BudgetSummary uses numeric timeframe (1=month, 3=quarter, 12=year)
417
+ if (params.timeframe) {
418
+ if (params.report_type === 'BudgetSummary') {
419
+ const numericTimeframe = params.timeframe === 'MONTH'
420
+ ? '1'
421
+ : params.timeframe === 'QUARTER'
422
+ ? '3'
423
+ : '12';
424
+ queryParams.set('timeframe', numericTimeframe);
425
+ }
426
+ else {
427
+ queryParams.set('timeframe', params.timeframe);
428
+ }
429
+ }
430
+ if (params.tracking_category_id)
431
+ queryParams.set('trackingCategoryID', params.tracking_category_id);
432
+ if (params.tracking_option_id)
433
+ queryParams.set('trackingOptionID', params.tracking_option_id);
434
+ const queryString = queryParams.toString();
435
+ const endpoint = `/Reports/${params.report_type}${queryString ? `?${queryString}` : ''}`;
436
+ const response = await this.makeXeroApiRequest(endpoint);
437
+ const report = response.Reports?.[0];
438
+ if (!report) {
439
+ return {
440
+ operation: 'get_report',
441
+ success: false,
442
+ error: 'No report data returned from Xero',
443
+ };
444
+ }
445
+ // Parse the abstract rows/cells structure into a cleaner format
446
+ const parseRows = (rows) => (rows || []).map((row) => ({
447
+ rowType: row.RowType,
448
+ ...(row.Title ? { title: row.Title } : {}),
449
+ ...(row.Cells
450
+ ? {
451
+ cells: row.Cells.map((cell) => ({
452
+ value: cell.Value ?? '',
453
+ ...(cell.Attributes?.find((a) => a.Id === 'account')?.Value
454
+ ? {
455
+ accountId: cell.Attributes.find((a) => a.Id === 'account').Value,
456
+ }
457
+ : {}),
458
+ })),
459
+ }
460
+ : {}),
461
+ ...(row.Rows ? { rows: parseRows(row.Rows) } : {}),
462
+ }));
463
+ return {
464
+ operation: 'get_report',
465
+ success: true,
466
+ report: {
467
+ reportName: report.ReportName,
468
+ reportType: report.ReportType,
469
+ reportDate: report.ReportDate,
470
+ reportTitles: report.ReportTitles,
471
+ rows: parseRows(report.Rows),
472
+ },
473
+ error: '',
474
+ };
475
+ }
476
+ }
477
+ //# sourceMappingURL=xero.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xero.js","sourceRoot":"","sources":["../../../../src/bubbles/service-bubble/xero/xero.ts"],"names":[],"mappings":"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"}