@tangle-network/agent-integrations 0.53.2 → 0.53.4

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.
@@ -9481,6 +9481,437 @@ async function ensureFreshAccessTokenFromCreds(creds, clientId, clientSecret, on
9481
9481
  return creds.accessToken;
9482
9482
  }
9483
9483
 
9484
+ // src/connectors/adapters/quickbooks.ts
9485
+ var quickbooksConnector = declarativeRestConnector({
9486
+ kind: "quickbooks",
9487
+ displayName: "QuickBooks",
9488
+ description: "Query QuickBooks Online entities with SQL-like queries and create or update customers, invoices, and items.",
9489
+ auth: {
9490
+ kind: "oauth2",
9491
+ authorizationUrl: "https://appcenter.intuit.com/connect/oauth2",
9492
+ tokenUrl: "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
9493
+ scopes: ["com.intuit.quickbooks.accounting"],
9494
+ clientIdEnv: "QUICKBOOKS_OAUTH_CLIENT_ID",
9495
+ clientSecretEnv: "QUICKBOOKS_OAUTH_CLIENT_SECRET"
9496
+ },
9497
+ category: "commerce",
9498
+ defaultConsistencyModel: "authoritative",
9499
+ baseUrl: { metadataKey: "apiBaseUrl" },
9500
+ defaultHeaders: {
9501
+ accept: "application/json"
9502
+ },
9503
+ // `realmId` is pinned at connect time, not passed per call, so the health
9504
+ // check reads it from connection metadata. Written as `{realmId}` it resolved
9505
+ // against the (empty) test argument map and threw before any request was
9506
+ // made — the connection test could never pass, for any connection.
9507
+ test: { method: "GET", path: "companyinfo/{connection.realmId}", query: { minorversion: "70" } },
9508
+ capabilities: [
9509
+ {
9510
+ // The reports namespace is NOT reachable through `entities.query` — QBO
9511
+ // exposes the accountant-grade statements only under /reports/{name}.
9512
+ // These four are the tax/bookkeeping read surface; without them a tax
9513
+ // agent can enumerate ledger rows but cannot obtain a P&L or a balance
9514
+ // sheet, which is what a return is actually built from.
9515
+ name: "reports.get",
9516
+ class: "read",
9517
+ description: "Run a QuickBooks Online report. `reportName` is the QBO report id (ProfitAndLoss, BalanceSheet, TrialBalance, GeneralLedger, CashFlow, AgedReceivables, AgedPayables).",
9518
+ parameters: {
9519
+ type: "object",
9520
+ properties: {
9521
+ reportName: {
9522
+ type: "string",
9523
+ enum: [
9524
+ "ProfitAndLoss",
9525
+ "BalanceSheet",
9526
+ "TrialBalance",
9527
+ "GeneralLedger",
9528
+ "CashFlow",
9529
+ "AgedReceivables",
9530
+ "AgedPayables"
9531
+ ]
9532
+ },
9533
+ start_date: { type: "string", description: "YYYY-MM-DD (inclusive)." },
9534
+ end_date: { type: "string", description: "YYYY-MM-DD (inclusive)." },
9535
+ accounting_method: { type: "string", enum: ["Cash", "Accrual"] },
9536
+ date_macro: { type: "string", description: 'e.g. "Last Fiscal Year" \u2014 alternative to start/end dates.' },
9537
+ summarize_column_by: { type: "string", description: "e.g. Month, Quarter, Year, Total." },
9538
+ minorversion: { type: "string" }
9539
+ },
9540
+ required: ["reportName"]
9541
+ },
9542
+ request: {
9543
+ method: "GET",
9544
+ path: "reports/{reportName}",
9545
+ query: {
9546
+ start_date: "{start_date}",
9547
+ end_date: "{end_date}",
9548
+ accounting_method: "{accounting_method}",
9549
+ date_macro: "{date_macro}",
9550
+ summarize_column_by: "{summarize_column_by}",
9551
+ minorversion: "{minorversion}"
9552
+ }
9553
+ },
9554
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9555
+ },
9556
+ {
9557
+ name: "companyinfo.get",
9558
+ class: "read",
9559
+ description: "Read the connected QuickBooks company profile (legal name, EIN/company id, fiscal year start, country) for the realm this connection was authorized against.",
9560
+ parameters: { type: "object", properties: { minorversion: { type: "string" } } },
9561
+ request: {
9562
+ method: "GET",
9563
+ path: "companyinfo/{connection.realmId}",
9564
+ query: { minorversion: "{minorversion}" }
9565
+ },
9566
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9567
+ },
9568
+ {
9569
+ name: "entities.query",
9570
+ class: "read",
9571
+ description: 'Run a QuickBooks Online query (e.g. "SELECT * FROM Customer WHERE Active = true MAXRESULTS 50").',
9572
+ parameters: {
9573
+ type: "object",
9574
+ properties: {
9575
+ query: { type: "string" },
9576
+ minorversion: { type: "string" }
9577
+ },
9578
+ required: ["query"]
9579
+ },
9580
+ request: {
9581
+ method: "GET",
9582
+ path: "query",
9583
+ query: { query: "{query}", minorversion: "{minorversion}" }
9584
+ },
9585
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9586
+ },
9587
+ {
9588
+ name: "customers.get",
9589
+ class: "read",
9590
+ description: "Read a QuickBooks customer by id.",
9591
+ parameters: {
9592
+ type: "object",
9593
+ properties: {
9594
+ customerId: { type: "string" },
9595
+ minorversion: { type: "string" }
9596
+ },
9597
+ required: ["customerId"]
9598
+ },
9599
+ request: {
9600
+ method: "GET",
9601
+ path: "customer/{customerId}",
9602
+ query: { minorversion: "{minorversion}" }
9603
+ },
9604
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9605
+ },
9606
+ {
9607
+ name: "customers.create",
9608
+ class: "mutation",
9609
+ description: "Create a QuickBooks customer.",
9610
+ parameters: {
9611
+ type: "object",
9612
+ properties: {
9613
+ DisplayName: { type: "string" },
9614
+ GivenName: { type: "string" },
9615
+ FamilyName: { type: "string" },
9616
+ CompanyName: { type: "string" },
9617
+ PrimaryEmailAddr: { type: "object" },
9618
+ PrimaryPhone: { type: "object" },
9619
+ BillAddr: { type: "object" },
9620
+ Notes: { type: "string" }
9621
+ },
9622
+ required: ["DisplayName"]
9623
+ },
9624
+ request: {
9625
+ method: "POST",
9626
+ path: "customer",
9627
+ query: { minorversion: "70" },
9628
+ body: "args"
9629
+ },
9630
+ cas: "native-idempotency",
9631
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9632
+ },
9633
+ {
9634
+ name: "customers.update",
9635
+ class: "mutation",
9636
+ description: "Sparse-update a QuickBooks customer. Caller must include Id and SyncToken from the prior read.",
9637
+ parameters: {
9638
+ type: "object",
9639
+ properties: {
9640
+ Id: { type: "string" },
9641
+ SyncToken: { type: "string" },
9642
+ sparse: { type: "boolean", default: true },
9643
+ DisplayName: { type: "string" },
9644
+ GivenName: { type: "string" },
9645
+ FamilyName: { type: "string" },
9646
+ CompanyName: { type: "string" },
9647
+ PrimaryEmailAddr: { type: "object" },
9648
+ PrimaryPhone: { type: "object" },
9649
+ BillAddr: { type: "object" },
9650
+ Notes: { type: "string" },
9651
+ Active: { type: "boolean" }
9652
+ },
9653
+ required: ["Id", "SyncToken"]
9654
+ },
9655
+ request: {
9656
+ method: "POST",
9657
+ path: "customer",
9658
+ query: { minorversion: "70" },
9659
+ body: "args"
9660
+ },
9661
+ cas: "optimistic-read-verify",
9662
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9663
+ },
9664
+ {
9665
+ name: "invoices.get",
9666
+ class: "read",
9667
+ description: "Read a QuickBooks invoice by id.",
9668
+ parameters: {
9669
+ type: "object",
9670
+ properties: {
9671
+ invoiceId: { type: "string" },
9672
+ minorversion: { type: "string" }
9673
+ },
9674
+ required: ["invoiceId"]
9675
+ },
9676
+ request: {
9677
+ method: "GET",
9678
+ path: "invoice/{invoiceId}",
9679
+ query: { minorversion: "{minorversion}" }
9680
+ },
9681
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9682
+ },
9683
+ {
9684
+ name: "invoices.create",
9685
+ class: "mutation",
9686
+ description: "Create a QuickBooks invoice. `Line` and `CustomerRef` are required by the API.",
9687
+ parameters: {
9688
+ type: "object",
9689
+ properties: {
9690
+ CustomerRef: { type: "object" },
9691
+ Line: { type: "array", items: { type: "object" } },
9692
+ TxnDate: { type: "string" },
9693
+ DueDate: { type: "string" },
9694
+ CurrencyRef: { type: "object" },
9695
+ BillEmail: { type: "object" },
9696
+ PrivateNote: { type: "string" },
9697
+ CustomerMemo: { type: "object" }
9698
+ },
9699
+ required: ["CustomerRef", "Line"]
9700
+ },
9701
+ request: {
9702
+ method: "POST",
9703
+ path: "invoice",
9704
+ query: { minorversion: "70" },
9705
+ body: "args"
9706
+ },
9707
+ cas: "native-idempotency",
9708
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9709
+ },
9710
+ {
9711
+ name: "invoices.update",
9712
+ class: "mutation",
9713
+ description: "Sparse-update a QuickBooks invoice. Caller must include Id and SyncToken from the prior read.",
9714
+ parameters: {
9715
+ type: "object",
9716
+ properties: {
9717
+ Id: { type: "string" },
9718
+ SyncToken: { type: "string" },
9719
+ sparse: { type: "boolean", default: true },
9720
+ CustomerRef: { type: "object" },
9721
+ Line: { type: "array", items: { type: "object" } },
9722
+ DueDate: { type: "string" },
9723
+ CustomerMemo: { type: "object" },
9724
+ PrivateNote: { type: "string" }
9725
+ },
9726
+ required: ["Id", "SyncToken"]
9727
+ },
9728
+ request: {
9729
+ method: "POST",
9730
+ path: "invoice",
9731
+ query: { minorversion: "70" },
9732
+ body: "args"
9733
+ },
9734
+ cas: "optimistic-read-verify",
9735
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9736
+ },
9737
+ {
9738
+ name: "items.create",
9739
+ class: "mutation",
9740
+ description: "Create a QuickBooks item (product or service).",
9741
+ parameters: {
9742
+ type: "object",
9743
+ properties: {
9744
+ Name: { type: "string" },
9745
+ Type: { type: "string", enum: ["Service", "Inventory", "NonInventory"] },
9746
+ IncomeAccountRef: { type: "object" },
9747
+ ExpenseAccountRef: { type: "object" },
9748
+ UnitPrice: { type: "number" },
9749
+ Description: { type: "string" },
9750
+ Taxable: { type: "boolean" }
9751
+ },
9752
+ required: ["Name", "Type", "IncomeAccountRef"]
9753
+ },
9754
+ request: {
9755
+ method: "POST",
9756
+ path: "item",
9757
+ query: { minorversion: "70" },
9758
+ body: "args"
9759
+ },
9760
+ cas: "native-idempotency",
9761
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9762
+ },
9763
+ {
9764
+ name: "customers.delete",
9765
+ class: "mutation",
9766
+ description: "Mark a QuickBooks customer inactive. QBO does not support hard deletes \u2014 caller must supply Id and SyncToken from the prior read.",
9767
+ parameters: {
9768
+ type: "object",
9769
+ properties: {
9770
+ Id: { type: "string" },
9771
+ SyncToken: { type: "string" },
9772
+ sparse: { type: "boolean", default: true },
9773
+ Active: { type: "boolean", default: false }
9774
+ },
9775
+ required: ["Id", "SyncToken"]
9776
+ },
9777
+ request: {
9778
+ method: "POST",
9779
+ path: "customer",
9780
+ query: { minorversion: "70" },
9781
+ body: "args"
9782
+ },
9783
+ cas: "native-idempotency",
9784
+ externalEffect: true,
9785
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9786
+ },
9787
+ {
9788
+ name: "invoices.delete",
9789
+ class: "mutation",
9790
+ description: "Void a QuickBooks invoice (QBO does not hard-delete invoices). Caller must supply Id and SyncToken.",
9791
+ parameters: {
9792
+ type: "object",
9793
+ properties: {
9794
+ Id: { type: "string" },
9795
+ SyncToken: { type: "string" }
9796
+ },
9797
+ required: ["Id", "SyncToken"]
9798
+ },
9799
+ request: {
9800
+ method: "POST",
9801
+ path: "invoice",
9802
+ query: { operation: "void", minorversion: "70" },
9803
+ body: "args"
9804
+ },
9805
+ cas: "native-idempotency",
9806
+ externalEffect: true,
9807
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9808
+ },
9809
+ {
9810
+ name: "invoices.send",
9811
+ class: "mutation",
9812
+ description: "Email a QuickBooks invoice to the customer (optionally override the recipient with `sendTo`).",
9813
+ parameters: {
9814
+ type: "object",
9815
+ properties: {
9816
+ invoiceId: { type: "string" },
9817
+ sendTo: { type: "string" }
9818
+ },
9819
+ required: ["invoiceId"]
9820
+ },
9821
+ request: {
9822
+ method: "POST",
9823
+ path: "invoice/{invoiceId}/send",
9824
+ query: { sendTo: "{sendTo}", minorversion: "70" }
9825
+ },
9826
+ cas: "native-idempotency",
9827
+ externalEffect: true,
9828
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9829
+ },
9830
+ {
9831
+ name: "bills.create",
9832
+ class: "mutation",
9833
+ description: "Create a QuickBooks vendor bill. `VendorRef` and `Line` are required by the API.",
9834
+ parameters: {
9835
+ type: "object",
9836
+ properties: {
9837
+ VendorRef: { type: "object" },
9838
+ Line: { type: "array", items: { type: "object" } },
9839
+ TxnDate: { type: "string" },
9840
+ DueDate: { type: "string" },
9841
+ CurrencyRef: { type: "object" },
9842
+ PrivateNote: { type: "string" },
9843
+ APAccountRef: { type: "object" }
9844
+ },
9845
+ required: ["VendorRef", "Line"]
9846
+ },
9847
+ request: {
9848
+ method: "POST",
9849
+ path: "bill",
9850
+ query: { minorversion: "70" },
9851
+ body: "args"
9852
+ },
9853
+ cas: "native-idempotency",
9854
+ externalEffect: true,
9855
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9856
+ },
9857
+ {
9858
+ name: "vendors.create",
9859
+ class: "mutation",
9860
+ description: "Create a QuickBooks vendor.",
9861
+ parameters: {
9862
+ type: "object",
9863
+ properties: {
9864
+ DisplayName: { type: "string" },
9865
+ GivenName: { type: "string" },
9866
+ FamilyName: { type: "string" },
9867
+ CompanyName: { type: "string" },
9868
+ PrimaryEmailAddr: { type: "object" },
9869
+ PrimaryPhone: { type: "object" },
9870
+ BillAddr: { type: "object" },
9871
+ TaxIdentifier: { type: "string" },
9872
+ AcctNum: { type: "string" }
9873
+ },
9874
+ required: ["DisplayName"]
9875
+ },
9876
+ request: {
9877
+ method: "POST",
9878
+ path: "vendor",
9879
+ query: { minorversion: "70" },
9880
+ body: "args"
9881
+ },
9882
+ cas: "native-idempotency",
9883
+ externalEffect: true,
9884
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9885
+ },
9886
+ {
9887
+ name: "payments.create",
9888
+ class: "mutation",
9889
+ description: "Record a QuickBooks payment against a customer (and optionally apply to invoices via `Line[].LinkedTxn`).",
9890
+ parameters: {
9891
+ type: "object",
9892
+ properties: {
9893
+ CustomerRef: { type: "object" },
9894
+ TotalAmt: { type: "number" },
9895
+ TxnDate: { type: "string" },
9896
+ PaymentMethodRef: { type: "object" },
9897
+ DepositToAccountRef: { type: "object" },
9898
+ Line: { type: "array", items: { type: "object" } },
9899
+ PrivateNote: { type: "string" }
9900
+ },
9901
+ required: ["CustomerRef", "TotalAmt"]
9902
+ },
9903
+ request: {
9904
+ method: "POST",
9905
+ path: "payment",
9906
+ query: { minorversion: "70" },
9907
+ body: "args"
9908
+ },
9909
+ cas: "native-idempotency",
9910
+ requiredScopes: ["com.intuit.quickbooks.accounting"]
9911
+ }
9912
+ ]
9913
+ });
9914
+
9484
9915
  // src/connectors/adapters/sharepoint.ts
9485
9916
  var SCOPES11 = [
9486
9917
  "https://graph.microsoft.com/Sites.ReadWrite.All",
@@ -12116,6 +12547,421 @@ async function deleteTemplate(inv, accessToken) {
12116
12547
  };
12117
12548
  }
12118
12549
 
12550
+ // src/connectors/adapters/xero.ts
12551
+ var xeroConnector = declarativeRestConnector({
12552
+ kind: "xero",
12553
+ displayName: "Xero",
12554
+ description: "Search and update Xero contacts, invoices, and chart-of-account records across authorized organizations.",
12555
+ auth: {
12556
+ kind: "oauth2",
12557
+ authorizationUrl: "https://login.xero.com/identity/connect/authorize",
12558
+ tokenUrl: "https://identity.xero.com/connect/token",
12559
+ // `accounting.reports.read` is a distinct Xero scope — the reports
12560
+ // namespace is not covered by settings/transactions and 403s without it.
12561
+ scopes: [
12562
+ "offline_access",
12563
+ "accounting.contacts",
12564
+ "accounting.transactions",
12565
+ "accounting.settings.read",
12566
+ "accounting.reports.read"
12567
+ ],
12568
+ clientIdEnv: "XERO_OAUTH_CLIENT_ID",
12569
+ clientSecretEnv: "XERO_OAUTH_CLIENT_SECRET"
12570
+ },
12571
+ category: "crm",
12572
+ defaultConsistencyModel: "authoritative",
12573
+ baseUrl: "https://api.xero.com",
12574
+ defaultHeaders: { accept: "application/json" },
12575
+ test: { method: "GET", path: "/connections" },
12576
+ capabilities: [
12577
+ {
12578
+ // Every other Xero capability REQUIRES `tenantId`, and a tenant id is an
12579
+ // opaque GUID no caller can know before asking. Without this read the
12580
+ // connector is unusable by an agent: the only place the id appeared was
12581
+ // the health check, which discards its body.
12582
+ name: "tenants.list",
12583
+ class: "read",
12584
+ description: "List the Xero organizations (tenants) this connection is authorized for. Call this FIRST \u2014 every other Xero capability requires the `tenantId` returned here.",
12585
+ parameters: { type: "object", properties: {} },
12586
+ request: { method: "GET", path: "/connections" }
12587
+ },
12588
+ {
12589
+ // Xero's reporting surface, like QBO's, is a separate namespace from the
12590
+ // record endpoints. These are the statements a return or a books review
12591
+ // is actually built from.
12592
+ name: "reports.get",
12593
+ class: "read",
12594
+ description: "Run a Xero accounting report. `reportName` is the Xero report id (ProfitAndLoss, BalanceSheet, TrialBalance, BankSummary, AgedReceivablesByContact, AgedPayablesByContact).",
12595
+ parameters: {
12596
+ type: "object",
12597
+ properties: {
12598
+ tenantId: { type: "string", description: "From tenants.list." },
12599
+ reportName: {
12600
+ type: "string",
12601
+ enum: [
12602
+ "ProfitAndLoss",
12603
+ "BalanceSheet",
12604
+ "TrialBalance",
12605
+ "BankSummary",
12606
+ "AgedReceivablesByContact",
12607
+ "AgedPayablesByContact"
12608
+ ]
12609
+ },
12610
+ fromDate: { type: "string", description: "YYYY-MM-DD." },
12611
+ toDate: { type: "string", description: "YYYY-MM-DD." },
12612
+ date: { type: "string", description: "YYYY-MM-DD \u2014 point-in-time reports (BalanceSheet, TrialBalance)." },
12613
+ contactId: { type: "string", description: "Required by the aged receivables/payables reports." }
12614
+ },
12615
+ required: ["tenantId", "reportName"]
12616
+ },
12617
+ request: {
12618
+ method: "GET",
12619
+ path: "/api.xro/2.0/Reports/{reportName}",
12620
+ query: { fromDate: "{fromDate}", toDate: "{toDate}", date: "{date}", contactID: "{contactId}" },
12621
+ headers: { "xero-tenant-id": "{tenantId}" }
12622
+ },
12623
+ requiredScopes: ["accounting.reports.read"]
12624
+ },
12625
+ {
12626
+ name: "contacts.search",
12627
+ class: "read",
12628
+ description: "Search Xero contacts in a tenant using the Xero where-clause query language.",
12629
+ parameters: {
12630
+ type: "object",
12631
+ properties: {
12632
+ tenantId: { type: "string", description: "Xero tenant (organization) id from /connections." },
12633
+ where: { type: "string", description: `Xero where clause, e.g. 'Name.Contains("Acme")'.` },
12634
+ order: { type: "string", description: 'Sort expression, e.g. "Name ASC".' },
12635
+ page: { type: "integer", minimum: 1 }
12636
+ },
12637
+ required: ["tenantId"]
12638
+ },
12639
+ request: {
12640
+ method: "GET",
12641
+ path: "/api.xro/2.0/Contacts",
12642
+ query: { where: "{where}", order: "{order}", page: "{page}" },
12643
+ headers: { "xero-tenant-id": "{tenantId}" }
12644
+ },
12645
+ requiredScopes: ["accounting.contacts"]
12646
+ },
12647
+ {
12648
+ name: "contacts.get",
12649
+ class: "read",
12650
+ description: "Read a single Xero contact by ContactID.",
12651
+ parameters: {
12652
+ type: "object",
12653
+ properties: {
12654
+ tenantId: { type: "string" },
12655
+ contactId: { type: "string", description: "Xero ContactID (GUID)." }
12656
+ },
12657
+ required: ["tenantId", "contactId"]
12658
+ },
12659
+ request: {
12660
+ method: "GET",
12661
+ path: "/api.xro/2.0/Contacts/{contactId}",
12662
+ headers: { "xero-tenant-id": "{tenantId}" }
12663
+ },
12664
+ requiredScopes: ["accounting.contacts"]
12665
+ },
12666
+ {
12667
+ name: "contacts.create",
12668
+ class: "mutation",
12669
+ description: "Create a Xero contact. Pass a Contacts array per the Xero API contract.",
12670
+ parameters: {
12671
+ type: "object",
12672
+ properties: {
12673
+ tenantId: { type: "string" },
12674
+ Contacts: {
12675
+ type: "array",
12676
+ items: {
12677
+ type: "object",
12678
+ properties: {
12679
+ Name: { type: "string" },
12680
+ EmailAddress: { type: "string" },
12681
+ FirstName: { type: "string" },
12682
+ LastName: { type: "string" }
12683
+ },
12684
+ required: ["Name"]
12685
+ }
12686
+ }
12687
+ },
12688
+ required: ["tenantId", "Contacts"]
12689
+ },
12690
+ request: {
12691
+ method: "POST",
12692
+ path: "/api.xro/2.0/Contacts",
12693
+ body: { Contacts: "{Contacts}" },
12694
+ headers: { "xero-tenant-id": "{tenantId}" }
12695
+ },
12696
+ cas: "native-idempotency",
12697
+ requiredScopes: ["accounting.contacts"]
12698
+ },
12699
+ {
12700
+ name: "contacts.update",
12701
+ class: "mutation",
12702
+ description: "Update a Xero contact by ContactID.",
12703
+ parameters: {
12704
+ type: "object",
12705
+ properties: {
12706
+ tenantId: { type: "string" },
12707
+ contactId: { type: "string" },
12708
+ fields: { type: "object", description: "Partial Xero Contact payload." }
12709
+ },
12710
+ required: ["tenantId", "contactId", "fields"]
12711
+ },
12712
+ request: {
12713
+ method: "POST",
12714
+ path: "/api.xro/2.0/Contacts/{contactId}",
12715
+ body: "{fields}",
12716
+ headers: { "xero-tenant-id": "{tenantId}" }
12717
+ },
12718
+ cas: "optimistic-read-verify",
12719
+ requiredScopes: ["accounting.contacts"]
12720
+ },
12721
+ {
12722
+ name: "invoices.search",
12723
+ class: "read",
12724
+ description: "Search Xero invoices in a tenant.",
12725
+ parameters: {
12726
+ type: "object",
12727
+ properties: {
12728
+ tenantId: { type: "string" },
12729
+ where: { type: "string", description: `Xero where clause, e.g. 'Status=="AUTHORISED"'.` },
12730
+ order: { type: "string", description: 'Sort expression, e.g. "Date DESC".' },
12731
+ page: { type: "integer", minimum: 1 }
12732
+ },
12733
+ required: ["tenantId"]
12734
+ },
12735
+ request: {
12736
+ method: "GET",
12737
+ path: "/api.xro/2.0/Invoices",
12738
+ query: { where: "{where}", order: "{order}", page: "{page}" },
12739
+ headers: { "xero-tenant-id": "{tenantId}" }
12740
+ },
12741
+ requiredScopes: ["accounting.transactions"]
12742
+ },
12743
+ {
12744
+ name: "invoices.get",
12745
+ class: "read",
12746
+ description: "Read a single Xero invoice by InvoiceID or InvoiceNumber.",
12747
+ parameters: {
12748
+ type: "object",
12749
+ properties: {
12750
+ tenantId: { type: "string" },
12751
+ invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." }
12752
+ },
12753
+ required: ["tenantId", "invoiceId"]
12754
+ },
12755
+ request: {
12756
+ method: "GET",
12757
+ path: "/api.xro/2.0/Invoices/{invoiceId}",
12758
+ headers: { "xero-tenant-id": "{tenantId}" }
12759
+ },
12760
+ requiredScopes: ["accounting.transactions"]
12761
+ },
12762
+ {
12763
+ name: "invoices.create",
12764
+ class: "mutation",
12765
+ description: "Create a Xero invoice (AR or AP). Pass an Invoices array per the Xero API contract.",
12766
+ parameters: {
12767
+ type: "object",
12768
+ properties: {
12769
+ tenantId: { type: "string" },
12770
+ Invoices: {
12771
+ type: "array",
12772
+ items: {
12773
+ type: "object",
12774
+ properties: {
12775
+ Type: { type: "string", enum: ["ACCREC", "ACCPAY"] },
12776
+ Contact: { type: "object" },
12777
+ LineItems: { type: "array", items: { type: "object" } },
12778
+ Date: { type: "string", description: "YYYY-MM-DD." },
12779
+ DueDate: { type: "string", description: "YYYY-MM-DD." },
12780
+ Reference: { type: "string" },
12781
+ Status: { type: "string", enum: ["DRAFT", "SUBMITTED", "AUTHORISED"] }
12782
+ },
12783
+ required: ["Type", "Contact", "LineItems"]
12784
+ }
12785
+ }
12786
+ },
12787
+ required: ["tenantId", "Invoices"]
12788
+ },
12789
+ request: {
12790
+ method: "POST",
12791
+ path: "/api.xro/2.0/Invoices",
12792
+ body: { Invoices: "{Invoices}" },
12793
+ headers: { "xero-tenant-id": "{tenantId}" }
12794
+ },
12795
+ cas: "native-idempotency",
12796
+ requiredScopes: ["accounting.transactions"]
12797
+ },
12798
+ {
12799
+ name: "accounts.search",
12800
+ class: "read",
12801
+ description: "List Xero chart-of-account records for a tenant.",
12802
+ parameters: {
12803
+ type: "object",
12804
+ properties: {
12805
+ tenantId: { type: "string" },
12806
+ where: { type: "string", description: `Xero where clause, e.g. 'Type=="REVENUE"'.` },
12807
+ order: { type: "string" }
12808
+ },
12809
+ required: ["tenantId"]
12810
+ },
12811
+ request: {
12812
+ method: "GET",
12813
+ path: "/api.xro/2.0/Accounts",
12814
+ query: { where: "{where}", order: "{order}" },
12815
+ headers: { "xero-tenant-id": "{tenantId}" }
12816
+ },
12817
+ requiredScopes: ["accounting.settings.read"]
12818
+ },
12819
+ {
12820
+ name: "contacts.archive",
12821
+ class: "mutation",
12822
+ description: "Archive a Xero contact (sets ContactStatus to ARCHIVED).",
12823
+ parameters: {
12824
+ type: "object",
12825
+ properties: {
12826
+ tenantId: { type: "string" },
12827
+ contactId: { type: "string", description: "Xero ContactID (GUID)." }
12828
+ },
12829
+ required: ["tenantId", "contactId"]
12830
+ },
12831
+ request: {
12832
+ method: "POST",
12833
+ path: "/api.xro/2.0/Contacts/{contactId}",
12834
+ body: { ContactStatus: "ARCHIVED" },
12835
+ headers: { "xero-tenant-id": "{tenantId}" }
12836
+ },
12837
+ cas: "native-idempotency",
12838
+ externalEffect: true,
12839
+ requiredScopes: ["accounting.contacts"]
12840
+ },
12841
+ {
12842
+ name: "invoices.delete",
12843
+ class: "mutation",
12844
+ description: "Void or delete a Xero invoice. DRAFT/SUBMITTED invoices accept DELETED, AUTHORISED invoices accept VOIDED.",
12845
+ parameters: {
12846
+ type: "object",
12847
+ properties: {
12848
+ tenantId: { type: "string" },
12849
+ invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." },
12850
+ status: {
12851
+ type: "string",
12852
+ enum: ["VOIDED", "DELETED"],
12853
+ description: "Target status. VOIDED for authorised invoices, DELETED for draft/submitted invoices."
12854
+ }
12855
+ },
12856
+ required: ["tenantId", "invoiceId", "status"]
12857
+ },
12858
+ request: {
12859
+ method: "POST",
12860
+ path: "/api.xro/2.0/Invoices/{invoiceId}",
12861
+ body: { Status: "{status}" },
12862
+ headers: { "xero-tenant-id": "{tenantId}" }
12863
+ },
12864
+ cas: "native-idempotency",
12865
+ externalEffect: true,
12866
+ requiredScopes: ["accounting.transactions"]
12867
+ },
12868
+ {
12869
+ name: "invoices.email",
12870
+ class: "mutation",
12871
+ description: "Email a Xero invoice to its contact using the saved template.",
12872
+ parameters: {
12873
+ type: "object",
12874
+ properties: {
12875
+ tenantId: { type: "string" },
12876
+ invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." }
12877
+ },
12878
+ required: ["tenantId", "invoiceId"]
12879
+ },
12880
+ request: {
12881
+ method: "POST",
12882
+ path: "/api.xro/2.0/Invoices/{invoiceId}/Email",
12883
+ body: {},
12884
+ headers: { "xero-tenant-id": "{tenantId}" }
12885
+ },
12886
+ cas: "native-idempotency",
12887
+ externalEffect: true,
12888
+ requiredScopes: ["accounting.transactions"]
12889
+ },
12890
+ {
12891
+ name: "payments.create",
12892
+ class: "mutation",
12893
+ description: "Apply a payment to a Xero invoice or credit note. Pass a Payments array per the Xero API contract.",
12894
+ parameters: {
12895
+ type: "object",
12896
+ properties: {
12897
+ tenantId: { type: "string" },
12898
+ Payments: {
12899
+ type: "array",
12900
+ items: {
12901
+ type: "object",
12902
+ properties: {
12903
+ Invoice: { type: "object", description: 'Invoice reference, e.g. { InvoiceID: "..." }.' },
12904
+ CreditNote: { type: "object", description: 'CreditNote reference, e.g. { CreditNoteID: "..." }.' },
12905
+ Account: { type: "object", description: 'Bank account reference, e.g. { Code: "090" }.' },
12906
+ Date: { type: "string", description: "YYYY-MM-DD." },
12907
+ Amount: { type: "number" },
12908
+ Reference: { type: "string" }
12909
+ },
12910
+ required: ["Account", "Date", "Amount"]
12911
+ }
12912
+ }
12913
+ },
12914
+ required: ["tenantId", "Payments"]
12915
+ },
12916
+ request: {
12917
+ method: "POST",
12918
+ path: "/api.xro/2.0/Payments",
12919
+ body: { Payments: "{Payments}" },
12920
+ headers: { "xero-tenant-id": "{tenantId}" }
12921
+ },
12922
+ cas: "native-idempotency",
12923
+ externalEffect: true,
12924
+ requiredScopes: ["accounting.transactions"]
12925
+ },
12926
+ {
12927
+ name: "credit-notes.create",
12928
+ class: "mutation",
12929
+ description: "Create a Xero credit note (ACCRECCREDIT or ACCPAYCREDIT). Pass a CreditNotes array per the Xero API contract.",
12930
+ parameters: {
12931
+ type: "object",
12932
+ properties: {
12933
+ tenantId: { type: "string" },
12934
+ CreditNotes: {
12935
+ type: "array",
12936
+ items: {
12937
+ type: "object",
12938
+ properties: {
12939
+ Type: { type: "string", enum: ["ACCRECCREDIT", "ACCPAYCREDIT"] },
12940
+ Contact: { type: "object" },
12941
+ LineItems: { type: "array", items: { type: "object" } },
12942
+ Date: { type: "string", description: "YYYY-MM-DD." },
12943
+ Reference: { type: "string" },
12944
+ Status: { type: "string", enum: ["DRAFT", "SUBMITTED", "AUTHORISED"] }
12945
+ },
12946
+ required: ["Type", "Contact", "LineItems"]
12947
+ }
12948
+ }
12949
+ },
12950
+ required: ["tenantId", "CreditNotes"]
12951
+ },
12952
+ request: {
12953
+ method: "POST",
12954
+ path: "/api.xro/2.0/CreditNotes",
12955
+ body: { CreditNotes: "{CreditNotes}" },
12956
+ headers: { "xero-tenant-id": "{tenantId}" }
12957
+ },
12958
+ cas: "native-idempotency",
12959
+ externalEffect: true,
12960
+ requiredScopes: ["accounting.transactions"]
12961
+ }
12962
+ ]
12963
+ });
12964
+
12119
12965
  // src/connectors/adapters/factories.ts
12120
12966
  function defineFactoryAdapter(factory, envMap) {
12121
12967
  const metadataOptions = Object.fromEntries(
@@ -12217,6 +13063,17 @@ var CONNECTOR_ADAPTER_FACTORIES = [
12217
13063
  defineFactoryAdapter(twitter, {
12218
13064
  clientId: "TWITTER_OAUTH_CLIENT_ID",
12219
13065
  clientSecret: "TWITTER_OAUTH_CLIENT_SECRET"
13066
+ }),
13067
+ // Declarative OAuth2 connectors: the manifest already pins clientIdEnv /
13068
+ // clientSecretEnv; the envMap re-pins the same names so registration is
13069
+ // gated on the OAuth app actually being configured (no half-live connector).
13070
+ defineFactoryAdapter(() => quickbooksConnector, {
13071
+ clientId: "QUICKBOOKS_OAUTH_CLIENT_ID",
13072
+ clientSecret: "QUICKBOOKS_OAUTH_CLIENT_SECRET"
13073
+ }),
13074
+ defineFactoryAdapter(() => xeroConnector, {
13075
+ clientId: "XERO_OAUTH_CLIENT_ID",
13076
+ clientSecret: "XERO_OAUTH_CLIENT_SECRET"
12220
13077
  })
12221
13078
  ];
12222
13079
  function resolveConnectorAdapterFactoryOptions(definition, envSource) {
@@ -19315,852 +20172,6 @@ var attioConnector = declarativeRestConnector({
19315
20172
  ]
19316
20173
  });
19317
20174
 
19318
- // src/connectors/adapters/quickbooks.ts
19319
- var quickbooksConnector = declarativeRestConnector({
19320
- kind: "quickbooks",
19321
- displayName: "QuickBooks",
19322
- description: "Query QuickBooks Online entities with SQL-like queries and create or update customers, invoices, and items.",
19323
- auth: {
19324
- kind: "oauth2",
19325
- authorizationUrl: "https://appcenter.intuit.com/connect/oauth2",
19326
- tokenUrl: "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
19327
- scopes: ["com.intuit.quickbooks.accounting"],
19328
- clientIdEnv: "QUICKBOOKS_OAUTH_CLIENT_ID",
19329
- clientSecretEnv: "QUICKBOOKS_OAUTH_CLIENT_SECRET"
19330
- },
19331
- category: "commerce",
19332
- defaultConsistencyModel: "authoritative",
19333
- baseUrl: { metadataKey: "apiBaseUrl" },
19334
- defaultHeaders: {
19335
- accept: "application/json"
19336
- },
19337
- // `realmId` is pinned at connect time, not passed per call, so the health
19338
- // check reads it from connection metadata. Written as `{realmId}` it resolved
19339
- // against the (empty) test argument map and threw before any request was
19340
- // made — the connection test could never pass, for any connection.
19341
- test: { method: "GET", path: "companyinfo/{connection.realmId}", query: { minorversion: "70" } },
19342
- capabilities: [
19343
- {
19344
- // The reports namespace is NOT reachable through `entities.query` — QBO
19345
- // exposes the accountant-grade statements only under /reports/{name}.
19346
- // These four are the tax/bookkeeping read surface; without them a tax
19347
- // agent can enumerate ledger rows but cannot obtain a P&L or a balance
19348
- // sheet, which is what a return is actually built from.
19349
- name: "reports.get",
19350
- class: "read",
19351
- description: "Run a QuickBooks Online report. `reportName` is the QBO report id (ProfitAndLoss, BalanceSheet, TrialBalance, GeneralLedger, CashFlow, AgedReceivables, AgedPayables).",
19352
- parameters: {
19353
- type: "object",
19354
- properties: {
19355
- reportName: {
19356
- type: "string",
19357
- enum: [
19358
- "ProfitAndLoss",
19359
- "BalanceSheet",
19360
- "TrialBalance",
19361
- "GeneralLedger",
19362
- "CashFlow",
19363
- "AgedReceivables",
19364
- "AgedPayables"
19365
- ]
19366
- },
19367
- start_date: { type: "string", description: "YYYY-MM-DD (inclusive)." },
19368
- end_date: { type: "string", description: "YYYY-MM-DD (inclusive)." },
19369
- accounting_method: { type: "string", enum: ["Cash", "Accrual"] },
19370
- date_macro: { type: "string", description: 'e.g. "Last Fiscal Year" \u2014 alternative to start/end dates.' },
19371
- summarize_column_by: { type: "string", description: "e.g. Month, Quarter, Year, Total." },
19372
- minorversion: { type: "string" }
19373
- },
19374
- required: ["reportName"]
19375
- },
19376
- request: {
19377
- method: "GET",
19378
- path: "reports/{reportName}",
19379
- query: {
19380
- start_date: "{start_date}",
19381
- end_date: "{end_date}",
19382
- accounting_method: "{accounting_method}",
19383
- date_macro: "{date_macro}",
19384
- summarize_column_by: "{summarize_column_by}",
19385
- minorversion: "{minorversion}"
19386
- }
19387
- },
19388
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19389
- },
19390
- {
19391
- name: "companyinfo.get",
19392
- class: "read",
19393
- description: "Read the connected QuickBooks company profile (legal name, EIN/company id, fiscal year start, country) for the realm this connection was authorized against.",
19394
- parameters: { type: "object", properties: { minorversion: { type: "string" } } },
19395
- request: {
19396
- method: "GET",
19397
- path: "companyinfo/{connection.realmId}",
19398
- query: { minorversion: "{minorversion}" }
19399
- },
19400
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19401
- },
19402
- {
19403
- name: "entities.query",
19404
- class: "read",
19405
- description: 'Run a QuickBooks Online query (e.g. "SELECT * FROM Customer WHERE Active = true MAXRESULTS 50").',
19406
- parameters: {
19407
- type: "object",
19408
- properties: {
19409
- query: { type: "string" },
19410
- minorversion: { type: "string" }
19411
- },
19412
- required: ["query"]
19413
- },
19414
- request: {
19415
- method: "GET",
19416
- path: "query",
19417
- query: { query: "{query}", minorversion: "{minorversion}" }
19418
- },
19419
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19420
- },
19421
- {
19422
- name: "customers.get",
19423
- class: "read",
19424
- description: "Read a QuickBooks customer by id.",
19425
- parameters: {
19426
- type: "object",
19427
- properties: {
19428
- customerId: { type: "string" },
19429
- minorversion: { type: "string" }
19430
- },
19431
- required: ["customerId"]
19432
- },
19433
- request: {
19434
- method: "GET",
19435
- path: "customer/{customerId}",
19436
- query: { minorversion: "{minorversion}" }
19437
- },
19438
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19439
- },
19440
- {
19441
- name: "customers.create",
19442
- class: "mutation",
19443
- description: "Create a QuickBooks customer.",
19444
- parameters: {
19445
- type: "object",
19446
- properties: {
19447
- DisplayName: { type: "string" },
19448
- GivenName: { type: "string" },
19449
- FamilyName: { type: "string" },
19450
- CompanyName: { type: "string" },
19451
- PrimaryEmailAddr: { type: "object" },
19452
- PrimaryPhone: { type: "object" },
19453
- BillAddr: { type: "object" },
19454
- Notes: { type: "string" }
19455
- },
19456
- required: ["DisplayName"]
19457
- },
19458
- request: {
19459
- method: "POST",
19460
- path: "customer",
19461
- query: { minorversion: "70" },
19462
- body: "args"
19463
- },
19464
- cas: "native-idempotency",
19465
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19466
- },
19467
- {
19468
- name: "customers.update",
19469
- class: "mutation",
19470
- description: "Sparse-update a QuickBooks customer. Caller must include Id and SyncToken from the prior read.",
19471
- parameters: {
19472
- type: "object",
19473
- properties: {
19474
- Id: { type: "string" },
19475
- SyncToken: { type: "string" },
19476
- sparse: { type: "boolean", default: true },
19477
- DisplayName: { type: "string" },
19478
- GivenName: { type: "string" },
19479
- FamilyName: { type: "string" },
19480
- CompanyName: { type: "string" },
19481
- PrimaryEmailAddr: { type: "object" },
19482
- PrimaryPhone: { type: "object" },
19483
- BillAddr: { type: "object" },
19484
- Notes: { type: "string" },
19485
- Active: { type: "boolean" }
19486
- },
19487
- required: ["Id", "SyncToken"]
19488
- },
19489
- request: {
19490
- method: "POST",
19491
- path: "customer",
19492
- query: { minorversion: "70" },
19493
- body: "args"
19494
- },
19495
- cas: "optimistic-read-verify",
19496
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19497
- },
19498
- {
19499
- name: "invoices.get",
19500
- class: "read",
19501
- description: "Read a QuickBooks invoice by id.",
19502
- parameters: {
19503
- type: "object",
19504
- properties: {
19505
- invoiceId: { type: "string" },
19506
- minorversion: { type: "string" }
19507
- },
19508
- required: ["invoiceId"]
19509
- },
19510
- request: {
19511
- method: "GET",
19512
- path: "invoice/{invoiceId}",
19513
- query: { minorversion: "{minorversion}" }
19514
- },
19515
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19516
- },
19517
- {
19518
- name: "invoices.create",
19519
- class: "mutation",
19520
- description: "Create a QuickBooks invoice. `Line` and `CustomerRef` are required by the API.",
19521
- parameters: {
19522
- type: "object",
19523
- properties: {
19524
- CustomerRef: { type: "object" },
19525
- Line: { type: "array", items: { type: "object" } },
19526
- TxnDate: { type: "string" },
19527
- DueDate: { type: "string" },
19528
- CurrencyRef: { type: "object" },
19529
- BillEmail: { type: "object" },
19530
- PrivateNote: { type: "string" },
19531
- CustomerMemo: { type: "object" }
19532
- },
19533
- required: ["CustomerRef", "Line"]
19534
- },
19535
- request: {
19536
- method: "POST",
19537
- path: "invoice",
19538
- query: { minorversion: "70" },
19539
- body: "args"
19540
- },
19541
- cas: "native-idempotency",
19542
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19543
- },
19544
- {
19545
- name: "invoices.update",
19546
- class: "mutation",
19547
- description: "Sparse-update a QuickBooks invoice. Caller must include Id and SyncToken from the prior read.",
19548
- parameters: {
19549
- type: "object",
19550
- properties: {
19551
- Id: { type: "string" },
19552
- SyncToken: { type: "string" },
19553
- sparse: { type: "boolean", default: true },
19554
- CustomerRef: { type: "object" },
19555
- Line: { type: "array", items: { type: "object" } },
19556
- DueDate: { type: "string" },
19557
- CustomerMemo: { type: "object" },
19558
- PrivateNote: { type: "string" }
19559
- },
19560
- required: ["Id", "SyncToken"]
19561
- },
19562
- request: {
19563
- method: "POST",
19564
- path: "invoice",
19565
- query: { minorversion: "70" },
19566
- body: "args"
19567
- },
19568
- cas: "optimistic-read-verify",
19569
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19570
- },
19571
- {
19572
- name: "items.create",
19573
- class: "mutation",
19574
- description: "Create a QuickBooks item (product or service).",
19575
- parameters: {
19576
- type: "object",
19577
- properties: {
19578
- Name: { type: "string" },
19579
- Type: { type: "string", enum: ["Service", "Inventory", "NonInventory"] },
19580
- IncomeAccountRef: { type: "object" },
19581
- ExpenseAccountRef: { type: "object" },
19582
- UnitPrice: { type: "number" },
19583
- Description: { type: "string" },
19584
- Taxable: { type: "boolean" }
19585
- },
19586
- required: ["Name", "Type", "IncomeAccountRef"]
19587
- },
19588
- request: {
19589
- method: "POST",
19590
- path: "item",
19591
- query: { minorversion: "70" },
19592
- body: "args"
19593
- },
19594
- cas: "native-idempotency",
19595
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19596
- },
19597
- {
19598
- name: "customers.delete",
19599
- class: "mutation",
19600
- description: "Mark a QuickBooks customer inactive. QBO does not support hard deletes \u2014 caller must supply Id and SyncToken from the prior read.",
19601
- parameters: {
19602
- type: "object",
19603
- properties: {
19604
- Id: { type: "string" },
19605
- SyncToken: { type: "string" },
19606
- sparse: { type: "boolean", default: true },
19607
- Active: { type: "boolean", default: false }
19608
- },
19609
- required: ["Id", "SyncToken"]
19610
- },
19611
- request: {
19612
- method: "POST",
19613
- path: "customer",
19614
- query: { minorversion: "70" },
19615
- body: "args"
19616
- },
19617
- cas: "native-idempotency",
19618
- externalEffect: true,
19619
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19620
- },
19621
- {
19622
- name: "invoices.delete",
19623
- class: "mutation",
19624
- description: "Void a QuickBooks invoice (QBO does not hard-delete invoices). Caller must supply Id and SyncToken.",
19625
- parameters: {
19626
- type: "object",
19627
- properties: {
19628
- Id: { type: "string" },
19629
- SyncToken: { type: "string" }
19630
- },
19631
- required: ["Id", "SyncToken"]
19632
- },
19633
- request: {
19634
- method: "POST",
19635
- path: "invoice",
19636
- query: { operation: "void", minorversion: "70" },
19637
- body: "args"
19638
- },
19639
- cas: "native-idempotency",
19640
- externalEffect: true,
19641
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19642
- },
19643
- {
19644
- name: "invoices.send",
19645
- class: "mutation",
19646
- description: "Email a QuickBooks invoice to the customer (optionally override the recipient with `sendTo`).",
19647
- parameters: {
19648
- type: "object",
19649
- properties: {
19650
- invoiceId: { type: "string" },
19651
- sendTo: { type: "string" }
19652
- },
19653
- required: ["invoiceId"]
19654
- },
19655
- request: {
19656
- method: "POST",
19657
- path: "invoice/{invoiceId}/send",
19658
- query: { sendTo: "{sendTo}", minorversion: "70" }
19659
- },
19660
- cas: "native-idempotency",
19661
- externalEffect: true,
19662
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19663
- },
19664
- {
19665
- name: "bills.create",
19666
- class: "mutation",
19667
- description: "Create a QuickBooks vendor bill. `VendorRef` and `Line` are required by the API.",
19668
- parameters: {
19669
- type: "object",
19670
- properties: {
19671
- VendorRef: { type: "object" },
19672
- Line: { type: "array", items: { type: "object" } },
19673
- TxnDate: { type: "string" },
19674
- DueDate: { type: "string" },
19675
- CurrencyRef: { type: "object" },
19676
- PrivateNote: { type: "string" },
19677
- APAccountRef: { type: "object" }
19678
- },
19679
- required: ["VendorRef", "Line"]
19680
- },
19681
- request: {
19682
- method: "POST",
19683
- path: "bill",
19684
- query: { minorversion: "70" },
19685
- body: "args"
19686
- },
19687
- cas: "native-idempotency",
19688
- externalEffect: true,
19689
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19690
- },
19691
- {
19692
- name: "vendors.create",
19693
- class: "mutation",
19694
- description: "Create a QuickBooks vendor.",
19695
- parameters: {
19696
- type: "object",
19697
- properties: {
19698
- DisplayName: { type: "string" },
19699
- GivenName: { type: "string" },
19700
- FamilyName: { type: "string" },
19701
- CompanyName: { type: "string" },
19702
- PrimaryEmailAddr: { type: "object" },
19703
- PrimaryPhone: { type: "object" },
19704
- BillAddr: { type: "object" },
19705
- TaxIdentifier: { type: "string" },
19706
- AcctNum: { type: "string" }
19707
- },
19708
- required: ["DisplayName"]
19709
- },
19710
- request: {
19711
- method: "POST",
19712
- path: "vendor",
19713
- query: { minorversion: "70" },
19714
- body: "args"
19715
- },
19716
- cas: "native-idempotency",
19717
- externalEffect: true,
19718
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19719
- },
19720
- {
19721
- name: "payments.create",
19722
- class: "mutation",
19723
- description: "Record a QuickBooks payment against a customer (and optionally apply to invoices via `Line[].LinkedTxn`).",
19724
- parameters: {
19725
- type: "object",
19726
- properties: {
19727
- CustomerRef: { type: "object" },
19728
- TotalAmt: { type: "number" },
19729
- TxnDate: { type: "string" },
19730
- PaymentMethodRef: { type: "object" },
19731
- DepositToAccountRef: { type: "object" },
19732
- Line: { type: "array", items: { type: "object" } },
19733
- PrivateNote: { type: "string" }
19734
- },
19735
- required: ["CustomerRef", "TotalAmt"]
19736
- },
19737
- request: {
19738
- method: "POST",
19739
- path: "payment",
19740
- query: { minorversion: "70" },
19741
- body: "args"
19742
- },
19743
- cas: "native-idempotency",
19744
- requiredScopes: ["com.intuit.quickbooks.accounting"]
19745
- }
19746
- ]
19747
- });
19748
-
19749
- // src/connectors/adapters/xero.ts
19750
- var xeroConnector = declarativeRestConnector({
19751
- kind: "xero",
19752
- displayName: "Xero",
19753
- description: "Search and update Xero contacts, invoices, and chart-of-account records across authorized organizations.",
19754
- auth: {
19755
- kind: "oauth2",
19756
- authorizationUrl: "https://login.xero.com/identity/connect/authorize",
19757
- tokenUrl: "https://identity.xero.com/connect/token",
19758
- // `accounting.reports.read` is a distinct Xero scope — the reports
19759
- // namespace is not covered by settings/transactions and 403s without it.
19760
- scopes: [
19761
- "offline_access",
19762
- "accounting.contacts",
19763
- "accounting.transactions",
19764
- "accounting.settings.read",
19765
- "accounting.reports.read"
19766
- ],
19767
- clientIdEnv: "XERO_OAUTH_CLIENT_ID",
19768
- clientSecretEnv: "XERO_OAUTH_CLIENT_SECRET"
19769
- },
19770
- category: "crm",
19771
- defaultConsistencyModel: "authoritative",
19772
- baseUrl: "https://api.xero.com",
19773
- defaultHeaders: { accept: "application/json" },
19774
- test: { method: "GET", path: "/connections" },
19775
- capabilities: [
19776
- {
19777
- // Every other Xero capability REQUIRES `tenantId`, and a tenant id is an
19778
- // opaque GUID no caller can know before asking. Without this read the
19779
- // connector is unusable by an agent: the only place the id appeared was
19780
- // the health check, which discards its body.
19781
- name: "tenants.list",
19782
- class: "read",
19783
- description: "List the Xero organizations (tenants) this connection is authorized for. Call this FIRST \u2014 every other Xero capability requires the `tenantId` returned here.",
19784
- parameters: { type: "object", properties: {} },
19785
- request: { method: "GET", path: "/connections" }
19786
- },
19787
- {
19788
- // Xero's reporting surface, like QBO's, is a separate namespace from the
19789
- // record endpoints. These are the statements a return or a books review
19790
- // is actually built from.
19791
- name: "reports.get",
19792
- class: "read",
19793
- description: "Run a Xero accounting report. `reportName` is the Xero report id (ProfitAndLoss, BalanceSheet, TrialBalance, BankSummary, AgedReceivablesByContact, AgedPayablesByContact).",
19794
- parameters: {
19795
- type: "object",
19796
- properties: {
19797
- tenantId: { type: "string", description: "From tenants.list." },
19798
- reportName: {
19799
- type: "string",
19800
- enum: [
19801
- "ProfitAndLoss",
19802
- "BalanceSheet",
19803
- "TrialBalance",
19804
- "BankSummary",
19805
- "AgedReceivablesByContact",
19806
- "AgedPayablesByContact"
19807
- ]
19808
- },
19809
- fromDate: { type: "string", description: "YYYY-MM-DD." },
19810
- toDate: { type: "string", description: "YYYY-MM-DD." },
19811
- date: { type: "string", description: "YYYY-MM-DD \u2014 point-in-time reports (BalanceSheet, TrialBalance)." },
19812
- contactId: { type: "string", description: "Required by the aged receivables/payables reports." }
19813
- },
19814
- required: ["tenantId", "reportName"]
19815
- },
19816
- request: {
19817
- method: "GET",
19818
- path: "/api.xro/2.0/Reports/{reportName}",
19819
- query: { fromDate: "{fromDate}", toDate: "{toDate}", date: "{date}", contactID: "{contactId}" },
19820
- headers: { "xero-tenant-id": "{tenantId}" }
19821
- },
19822
- requiredScopes: ["accounting.reports.read"]
19823
- },
19824
- {
19825
- name: "contacts.search",
19826
- class: "read",
19827
- description: "Search Xero contacts in a tenant using the Xero where-clause query language.",
19828
- parameters: {
19829
- type: "object",
19830
- properties: {
19831
- tenantId: { type: "string", description: "Xero tenant (organization) id from /connections." },
19832
- where: { type: "string", description: `Xero where clause, e.g. 'Name.Contains("Acme")'.` },
19833
- order: { type: "string", description: 'Sort expression, e.g. "Name ASC".' },
19834
- page: { type: "integer", minimum: 1 }
19835
- },
19836
- required: ["tenantId"]
19837
- },
19838
- request: {
19839
- method: "GET",
19840
- path: "/api.xro/2.0/Contacts",
19841
- query: { where: "{where}", order: "{order}", page: "{page}" },
19842
- headers: { "xero-tenant-id": "{tenantId}" }
19843
- },
19844
- requiredScopes: ["accounting.contacts"]
19845
- },
19846
- {
19847
- name: "contacts.get",
19848
- class: "read",
19849
- description: "Read a single Xero contact by ContactID.",
19850
- parameters: {
19851
- type: "object",
19852
- properties: {
19853
- tenantId: { type: "string" },
19854
- contactId: { type: "string", description: "Xero ContactID (GUID)." }
19855
- },
19856
- required: ["tenantId", "contactId"]
19857
- },
19858
- request: {
19859
- method: "GET",
19860
- path: "/api.xro/2.0/Contacts/{contactId}",
19861
- headers: { "xero-tenant-id": "{tenantId}" }
19862
- },
19863
- requiredScopes: ["accounting.contacts"]
19864
- },
19865
- {
19866
- name: "contacts.create",
19867
- class: "mutation",
19868
- description: "Create a Xero contact. Pass a Contacts array per the Xero API contract.",
19869
- parameters: {
19870
- type: "object",
19871
- properties: {
19872
- tenantId: { type: "string" },
19873
- Contacts: {
19874
- type: "array",
19875
- items: {
19876
- type: "object",
19877
- properties: {
19878
- Name: { type: "string" },
19879
- EmailAddress: { type: "string" },
19880
- FirstName: { type: "string" },
19881
- LastName: { type: "string" }
19882
- },
19883
- required: ["Name"]
19884
- }
19885
- }
19886
- },
19887
- required: ["tenantId", "Contacts"]
19888
- },
19889
- request: {
19890
- method: "POST",
19891
- path: "/api.xro/2.0/Contacts",
19892
- body: { Contacts: "{Contacts}" },
19893
- headers: { "xero-tenant-id": "{tenantId}" }
19894
- },
19895
- cas: "native-idempotency",
19896
- requiredScopes: ["accounting.contacts"]
19897
- },
19898
- {
19899
- name: "contacts.update",
19900
- class: "mutation",
19901
- description: "Update a Xero contact by ContactID.",
19902
- parameters: {
19903
- type: "object",
19904
- properties: {
19905
- tenantId: { type: "string" },
19906
- contactId: { type: "string" },
19907
- fields: { type: "object", description: "Partial Xero Contact payload." }
19908
- },
19909
- required: ["tenantId", "contactId", "fields"]
19910
- },
19911
- request: {
19912
- method: "POST",
19913
- path: "/api.xro/2.0/Contacts/{contactId}",
19914
- body: "{fields}",
19915
- headers: { "xero-tenant-id": "{tenantId}" }
19916
- },
19917
- cas: "optimistic-read-verify",
19918
- requiredScopes: ["accounting.contacts"]
19919
- },
19920
- {
19921
- name: "invoices.search",
19922
- class: "read",
19923
- description: "Search Xero invoices in a tenant.",
19924
- parameters: {
19925
- type: "object",
19926
- properties: {
19927
- tenantId: { type: "string" },
19928
- where: { type: "string", description: `Xero where clause, e.g. 'Status=="AUTHORISED"'.` },
19929
- order: { type: "string", description: 'Sort expression, e.g. "Date DESC".' },
19930
- page: { type: "integer", minimum: 1 }
19931
- },
19932
- required: ["tenantId"]
19933
- },
19934
- request: {
19935
- method: "GET",
19936
- path: "/api.xro/2.0/Invoices",
19937
- query: { where: "{where}", order: "{order}", page: "{page}" },
19938
- headers: { "xero-tenant-id": "{tenantId}" }
19939
- },
19940
- requiredScopes: ["accounting.transactions"]
19941
- },
19942
- {
19943
- name: "invoices.get",
19944
- class: "read",
19945
- description: "Read a single Xero invoice by InvoiceID or InvoiceNumber.",
19946
- parameters: {
19947
- type: "object",
19948
- properties: {
19949
- tenantId: { type: "string" },
19950
- invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." }
19951
- },
19952
- required: ["tenantId", "invoiceId"]
19953
- },
19954
- request: {
19955
- method: "GET",
19956
- path: "/api.xro/2.0/Invoices/{invoiceId}",
19957
- headers: { "xero-tenant-id": "{tenantId}" }
19958
- },
19959
- requiredScopes: ["accounting.transactions"]
19960
- },
19961
- {
19962
- name: "invoices.create",
19963
- class: "mutation",
19964
- description: "Create a Xero invoice (AR or AP). Pass an Invoices array per the Xero API contract.",
19965
- parameters: {
19966
- type: "object",
19967
- properties: {
19968
- tenantId: { type: "string" },
19969
- Invoices: {
19970
- type: "array",
19971
- items: {
19972
- type: "object",
19973
- properties: {
19974
- Type: { type: "string", enum: ["ACCREC", "ACCPAY"] },
19975
- Contact: { type: "object" },
19976
- LineItems: { type: "array", items: { type: "object" } },
19977
- Date: { type: "string", description: "YYYY-MM-DD." },
19978
- DueDate: { type: "string", description: "YYYY-MM-DD." },
19979
- Reference: { type: "string" },
19980
- Status: { type: "string", enum: ["DRAFT", "SUBMITTED", "AUTHORISED"] }
19981
- },
19982
- required: ["Type", "Contact", "LineItems"]
19983
- }
19984
- }
19985
- },
19986
- required: ["tenantId", "Invoices"]
19987
- },
19988
- request: {
19989
- method: "POST",
19990
- path: "/api.xro/2.0/Invoices",
19991
- body: { Invoices: "{Invoices}" },
19992
- headers: { "xero-tenant-id": "{tenantId}" }
19993
- },
19994
- cas: "native-idempotency",
19995
- requiredScopes: ["accounting.transactions"]
19996
- },
19997
- {
19998
- name: "accounts.search",
19999
- class: "read",
20000
- description: "List Xero chart-of-account records for a tenant.",
20001
- parameters: {
20002
- type: "object",
20003
- properties: {
20004
- tenantId: { type: "string" },
20005
- where: { type: "string", description: `Xero where clause, e.g. 'Type=="REVENUE"'.` },
20006
- order: { type: "string" }
20007
- },
20008
- required: ["tenantId"]
20009
- },
20010
- request: {
20011
- method: "GET",
20012
- path: "/api.xro/2.0/Accounts",
20013
- query: { where: "{where}", order: "{order}" },
20014
- headers: { "xero-tenant-id": "{tenantId}" }
20015
- },
20016
- requiredScopes: ["accounting.settings.read"]
20017
- },
20018
- {
20019
- name: "contacts.archive",
20020
- class: "mutation",
20021
- description: "Archive a Xero contact (sets ContactStatus to ARCHIVED).",
20022
- parameters: {
20023
- type: "object",
20024
- properties: {
20025
- tenantId: { type: "string" },
20026
- contactId: { type: "string", description: "Xero ContactID (GUID)." }
20027
- },
20028
- required: ["tenantId", "contactId"]
20029
- },
20030
- request: {
20031
- method: "POST",
20032
- path: "/api.xro/2.0/Contacts/{contactId}",
20033
- body: { ContactStatus: "ARCHIVED" },
20034
- headers: { "xero-tenant-id": "{tenantId}" }
20035
- },
20036
- cas: "native-idempotency",
20037
- externalEffect: true,
20038
- requiredScopes: ["accounting.contacts"]
20039
- },
20040
- {
20041
- name: "invoices.delete",
20042
- class: "mutation",
20043
- description: "Void or delete a Xero invoice. DRAFT/SUBMITTED invoices accept DELETED, AUTHORISED invoices accept VOIDED.",
20044
- parameters: {
20045
- type: "object",
20046
- properties: {
20047
- tenantId: { type: "string" },
20048
- invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." },
20049
- status: {
20050
- type: "string",
20051
- enum: ["VOIDED", "DELETED"],
20052
- description: "Target status. VOIDED for authorised invoices, DELETED for draft/submitted invoices."
20053
- }
20054
- },
20055
- required: ["tenantId", "invoiceId", "status"]
20056
- },
20057
- request: {
20058
- method: "POST",
20059
- path: "/api.xro/2.0/Invoices/{invoiceId}",
20060
- body: { Status: "{status}" },
20061
- headers: { "xero-tenant-id": "{tenantId}" }
20062
- },
20063
- cas: "native-idempotency",
20064
- externalEffect: true,
20065
- requiredScopes: ["accounting.transactions"]
20066
- },
20067
- {
20068
- name: "invoices.email",
20069
- class: "mutation",
20070
- description: "Email a Xero invoice to its contact using the saved template.",
20071
- parameters: {
20072
- type: "object",
20073
- properties: {
20074
- tenantId: { type: "string" },
20075
- invoiceId: { type: "string", description: "Xero InvoiceID (GUID) or InvoiceNumber." }
20076
- },
20077
- required: ["tenantId", "invoiceId"]
20078
- },
20079
- request: {
20080
- method: "POST",
20081
- path: "/api.xro/2.0/Invoices/{invoiceId}/Email",
20082
- body: {},
20083
- headers: { "xero-tenant-id": "{tenantId}" }
20084
- },
20085
- cas: "native-idempotency",
20086
- externalEffect: true,
20087
- requiredScopes: ["accounting.transactions"]
20088
- },
20089
- {
20090
- name: "payments.create",
20091
- class: "mutation",
20092
- description: "Apply a payment to a Xero invoice or credit note. Pass a Payments array per the Xero API contract.",
20093
- parameters: {
20094
- type: "object",
20095
- properties: {
20096
- tenantId: { type: "string" },
20097
- Payments: {
20098
- type: "array",
20099
- items: {
20100
- type: "object",
20101
- properties: {
20102
- Invoice: { type: "object", description: 'Invoice reference, e.g. { InvoiceID: "..." }.' },
20103
- CreditNote: { type: "object", description: 'CreditNote reference, e.g. { CreditNoteID: "..." }.' },
20104
- Account: { type: "object", description: 'Bank account reference, e.g. { Code: "090" }.' },
20105
- Date: { type: "string", description: "YYYY-MM-DD." },
20106
- Amount: { type: "number" },
20107
- Reference: { type: "string" }
20108
- },
20109
- required: ["Account", "Date", "Amount"]
20110
- }
20111
- }
20112
- },
20113
- required: ["tenantId", "Payments"]
20114
- },
20115
- request: {
20116
- method: "POST",
20117
- path: "/api.xro/2.0/Payments",
20118
- body: { Payments: "{Payments}" },
20119
- headers: { "xero-tenant-id": "{tenantId}" }
20120
- },
20121
- cas: "native-idempotency",
20122
- externalEffect: true,
20123
- requiredScopes: ["accounting.transactions"]
20124
- },
20125
- {
20126
- name: "credit-notes.create",
20127
- class: "mutation",
20128
- description: "Create a Xero credit note (ACCRECCREDIT or ACCPAYCREDIT). Pass a CreditNotes array per the Xero API contract.",
20129
- parameters: {
20130
- type: "object",
20131
- properties: {
20132
- tenantId: { type: "string" },
20133
- CreditNotes: {
20134
- type: "array",
20135
- items: {
20136
- type: "object",
20137
- properties: {
20138
- Type: { type: "string", enum: ["ACCRECCREDIT", "ACCPAYCREDIT"] },
20139
- Contact: { type: "object" },
20140
- LineItems: { type: "array", items: { type: "object" } },
20141
- Date: { type: "string", description: "YYYY-MM-DD." },
20142
- Reference: { type: "string" },
20143
- Status: { type: "string", enum: ["DRAFT", "SUBMITTED", "AUTHORISED"] }
20144
- },
20145
- required: ["Type", "Contact", "LineItems"]
20146
- }
20147
- }
20148
- },
20149
- required: ["tenantId", "CreditNotes"]
20150
- },
20151
- request: {
20152
- method: "POST",
20153
- path: "/api.xro/2.0/CreditNotes",
20154
- body: { CreditNotes: "{CreditNotes}" },
20155
- headers: { "xero-tenant-id": "{tenantId}" }
20156
- },
20157
- cas: "native-idempotency",
20158
- externalEffect: true,
20159
- requiredScopes: ["accounting.transactions"]
20160
- }
20161
- ]
20162
- });
20163
-
20164
20175
  // src/connectors/adapters/gusto.ts
20165
20176
  var gustoConnector = declarativeRestConnector({
20166
20177
  kind: "gusto",
@@ -77932,10 +77943,39 @@ var googleTasksConnector = declarativeRestConnector({
77932
77943
  description: "List tasks in a task list.",
77933
77944
  parameters: {
77934
77945
  type: "object",
77935
- properties: { tasklistId: { type: "string" }, maxResults: { type: "integer" }, showCompleted: { type: "boolean" } },
77946
+ properties: {
77947
+ tasklistId: { type: "string" },
77948
+ maxResults: { type: "integer" },
77949
+ pageToken: { type: "string" },
77950
+ showCompleted: { type: "boolean" },
77951
+ showDeleted: { type: "boolean" },
77952
+ showHidden: { type: "boolean" },
77953
+ showAssigned: { type: "boolean" },
77954
+ updatedMin: { type: "string" },
77955
+ dueMin: { type: "string" },
77956
+ dueMax: { type: "string" },
77957
+ completedMin: { type: "string" },
77958
+ completedMax: { type: "string" }
77959
+ },
77936
77960
  required: ["tasklistId"]
77937
77961
  },
77938
- request: { method: "GET", path: "/users/@me/lists/{tasklistId}/tasks", query: { maxResults: "{maxResults}", showCompleted: "{showCompleted}" } }
77962
+ request: {
77963
+ method: "GET",
77964
+ path: "/lists/{tasklistId}/tasks",
77965
+ query: {
77966
+ maxResults: "{maxResults}",
77967
+ pageToken: "{pageToken}",
77968
+ showCompleted: "{showCompleted}",
77969
+ showDeleted: "{showDeleted}",
77970
+ showHidden: "{showHidden}",
77971
+ showAssigned: "{showAssigned}",
77972
+ updatedMin: "{updatedMin}",
77973
+ dueMin: "{dueMin}",
77974
+ dueMax: "{dueMax}",
77975
+ completedMin: "{completedMin}",
77976
+ completedMax: "{completedMax}"
77977
+ }
77978
+ }
77939
77979
  },
77940
77980
  {
77941
77981
  name: "tasks.get",
@@ -77946,7 +77986,7 @@ var googleTasksConnector = declarativeRestConnector({
77946
77986
  properties: { tasklistId: { type: "string" }, taskId: { type: "string" } },
77947
77987
  required: ["tasklistId", "taskId"]
77948
77988
  },
77949
- request: { method: "GET", path: "/users/@me/lists/{tasklistId}/tasks/{taskId}" }
77989
+ request: { method: "GET", path: "/lists/{tasklistId}/tasks/{taskId}" }
77950
77990
  },
77951
77991
  {
77952
77992
  name: "tasks.create",
@@ -77959,14 +77999,16 @@ var googleTasksConnector = declarativeRestConnector({
77959
77999
  title: { type: "string" },
77960
78000
  notes: { type: "string" },
77961
78001
  dueDate: { type: "string" },
77962
- parent: { type: "string" }
78002
+ parent: { type: "string" },
78003
+ previous: { type: "string" }
77963
78004
  },
77964
78005
  required: ["tasklistId", "title"]
77965
78006
  },
77966
78007
  request: {
77967
78008
  method: "POST",
77968
- path: "/users/@me/lists/{tasklistId}/tasks",
77969
- body: { title: "{title}", notes: "{notes}", dueDate: "{dueDate}", parent: "{parent}" }
78009
+ path: "/lists/{tasklistId}/tasks",
78010
+ query: { parent: "{parent}", previous: "{previous}" },
78011
+ body: { title: "{title}", notes: "{notes}", due: "{dueDate}" }
77970
78012
  },
77971
78013
  cas: "native-idempotency"
77972
78014
  },
@@ -77988,8 +78030,8 @@ var googleTasksConnector = declarativeRestConnector({
77988
78030
  },
77989
78031
  request: {
77990
78032
  method: "PATCH",
77991
- path: "/users/@me/lists/{tasklistId}/tasks/{taskId}",
77992
- body: { title: "{title}", notes: "{notes}", dueDate: "{dueDate}", status: "{status}" }
78033
+ path: "/lists/{tasklistId}/tasks/{taskId}",
78034
+ body: { title: "{title}", notes: "{notes}", due: "{dueDate}", status: "{status}" }
77993
78035
  },
77994
78036
  cas: "etag-if-match"
77995
78037
  },
@@ -78002,7 +78044,7 @@ var googleTasksConnector = declarativeRestConnector({
78002
78044
  properties: { tasklistId: { type: "string" }, taskId: { type: "string" } },
78003
78045
  required: ["tasklistId", "taskId"]
78004
78046
  },
78005
- request: { method: "DELETE", path: "/users/@me/lists/{tasklistId}/tasks/{taskId}" },
78047
+ request: { method: "DELETE", path: "/lists/{tasklistId}/tasks/{taskId}" },
78006
78048
  cas: "native-idempotency",
78007
78049
  externalEffect: true
78008
78050
  },
@@ -78020,7 +78062,7 @@ var googleTasksConnector = declarativeRestConnector({
78020
78062
  },
78021
78063
  request: {
78022
78064
  method: "PATCH",
78023
- path: "/users/@me/lists/{tasklistId}/tasks/{taskId}",
78065
+ path: "/lists/{tasklistId}/tasks/{taskId}",
78024
78066
  body: { status: "completed" }
78025
78067
  },
78026
78068
  cas: "native-idempotency",
@@ -127238,11 +127280,13 @@ export {
127238
127280
  oneDrive,
127239
127281
  outlookMail,
127240
127282
  pandadoc,
127283
+ quickbooksConnector,
127241
127284
  sharepoint,
127242
127285
  slack,
127243
127286
  twitterConnector,
127244
127287
  twitter,
127245
127288
  whatsappBusiness,
127289
+ xeroConnector,
127246
127290
  CONNECTOR_ADAPTER_FACTORIES,
127247
127291
  resolveConnectorAdapterFactoryOptions,
127248
127292
  googleSlidesConnector,
@@ -127273,8 +127317,6 @@ export {
127273
127317
  zohoCrmConnector,
127274
127318
  zohoDeskConnector,
127275
127319
  attioConnector,
127276
- quickbooksConnector,
127277
- xeroConnector,
127278
127320
  gustoConnector,
127279
127321
  bigcommerceConnector,
127280
127322
  shopifyConnector,
@@ -127763,4 +127805,4 @@ export {
127763
127805
  demandbaseConnector,
127764
127806
  adapters_exports
127765
127807
  };
127766
- //# sourceMappingURL=chunk-JOQQ2VYH.js.map
127808
+ //# sourceMappingURL=chunk-4DZR436A.js.map