@tangle-network/agent-integrations 0.53.35 → 0.53.36

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 (48) hide show
  1. package/dist/catalog.d.ts +2 -2
  2. package/dist/catalog.js +8 -8
  3. package/dist/{chunk-2IU335WP.js → chunk-2E7CMFKX.js} +3 -2
  4. package/dist/{chunk-2IU335WP.js.map → chunk-2E7CMFKX.js.map} +1 -1
  5. package/dist/{chunk-XGL345YX.js → chunk-2F2JVX3Z.js} +2 -2
  6. package/dist/{chunk-JXFPIZ3O.js → chunk-DUWZMKEF.js} +18 -4
  7. package/dist/chunk-DUWZMKEF.js.map +1 -0
  8. package/dist/{chunk-FK4ENHCP.js → chunk-FY7B3I5G.js} +2 -2
  9. package/dist/{chunk-N4KK3J7U.js → chunk-GLOAH446.js} +1273 -1254
  10. package/dist/{chunk-N4KK3J7U.js.map → chunk-GLOAH446.js.map} +1 -1
  11. package/dist/{chunk-ANWNXGVV.js → chunk-NCOHYY6P.js} +2 -2
  12. package/dist/{chunk-BVHX2E5X.js → chunk-X5H5ARIO.js} +47 -11
  13. package/dist/chunk-X5H5ARIO.js.map +1 -0
  14. package/dist/{chunk-GGKD2W6H.js → chunk-ZZUBL7KY.js} +4 -2
  15. package/dist/chunk-ZZUBL7KY.js.map +1 -0
  16. package/dist/connect/index.d.ts +2 -2
  17. package/dist/connect/index.js +2 -2
  18. package/dist/connectors/adapters/index.d.ts +2 -2
  19. package/dist/connectors/adapters/index.js +2 -2
  20. package/dist/connectors/index.d.ts +4 -3
  21. package/dist/connectors/index.js +3 -3
  22. package/dist/{consumer-DV3XEumb.d.ts → consumer-Ctva6_kb.d.ts} +1 -1
  23. package/dist/consumer.d.ts +3 -3
  24. package/dist/consumer.js +2 -2
  25. package/dist/{core-types-qkW_zZDB.d.ts → core-types-BcaDdvFi.d.ts} +1 -1
  26. package/dist/coverage-catalog.d.ts +2 -2
  27. package/dist/{importers-B7sdp2Ke.d.ts → importers-C1N3P60U.d.ts} +1 -1
  28. package/dist/index.d.ts +8 -8
  29. package/dist/index.js +8 -8
  30. package/dist/mcp.d.ts +3 -3
  31. package/dist/mcp.js +8 -8
  32. package/dist/middleware/index.d.ts +2 -2
  33. package/dist/middleware/index.js +2 -2
  34. package/dist/registry.d.ts +2 -2
  35. package/dist/registry.js +8 -8
  36. package/dist/runtime.d.ts +2 -2
  37. package/dist/runtime.js +8 -8
  38. package/dist/specs.d.ts +6 -2
  39. package/dist/specs.js +4 -4
  40. package/dist/{tangle-id-uvHTbgCw.d.ts → tangle-id-r1uPd9QH.d.ts} +1 -1
  41. package/dist/{types-C1rgdXiP.d.ts → types-ooBfkUOy.d.ts} +10 -1
  42. package/package.json +1 -1
  43. package/dist/chunk-BVHX2E5X.js.map +0 -1
  44. package/dist/chunk-GGKD2W6H.js.map +0 -1
  45. package/dist/chunk-JXFPIZ3O.js.map +0 -1
  46. /package/dist/{chunk-XGL345YX.js.map → chunk-2F2JVX3Z.js.map} +0 -0
  47. /package/dist/{chunk-FK4ENHCP.js.map → chunk-FY7B3I5G.js.map} +0 -0
  48. /package/dist/{chunk-ANWNXGVV.js.map → chunk-NCOHYY6P.js.map} +0 -0
@@ -14,7 +14,7 @@ import {
14
14
  TangleIdentityUnreachableError,
15
15
  createTangleIdentityClient,
16
16
  tangleIdentity
17
- } from "./chunk-JXFPIZ3O.js";
17
+ } from "./chunk-DUWZMKEF.js";
18
18
  import {
19
19
  __export
20
20
  } from "./chunk-PZ5AY32C.js";
@@ -21699,6 +21699,354 @@ var dropboxConnector = declarativeRestConnector({
21699
21699
  ]
21700
21700
  });
21701
21701
 
21702
+ // src/connectors/adapters/ebay.ts
21703
+ var ebayConnector = declarativeRestConnector({
21704
+ kind: "ebay",
21705
+ displayName: "eBay",
21706
+ description: "Manage eBay seller inventory items and fulfillment orders, and read the connected user identity.",
21707
+ auth: {
21708
+ kind: "oauth2",
21709
+ authorizationUrl: "https://auth.ebay.com/oauth2/authorize",
21710
+ tokenUrl: "https://api.ebay.com/identity/v1/oauth2/token",
21711
+ scopes: [
21712
+ "https://api.ebay.com/oauth/api_scope",
21713
+ "https://api.ebay.com/oauth/api_scope/sell.inventory",
21714
+ "https://api.ebay.com/oauth/api_scope/sell.fulfillment",
21715
+ "https://api.ebay.com/oauth/api_scope/sell.account",
21716
+ "https://api.ebay.com/oauth/api_scope/sell.marketing",
21717
+ "https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"
21718
+ ],
21719
+ clientIdEnv: "EBAY_OAUTH_CLIENT_ID",
21720
+ clientSecretEnv: "EBAY_OAUTH_CLIENT_SECRET",
21721
+ tokenClientAuthMethod: "client_secret_basic"
21722
+ },
21723
+ category: "commerce",
21724
+ defaultConsistencyModel: "authoritative",
21725
+ // Production by default; consumers persist `metadata.apiBaseUrl =
21726
+ // "https://api.sandbox.ebay.com"` to route a connection at the sandbox.
21727
+ baseUrl: { metadataKey: "apiBaseUrl", fallback: "https://api.ebay.com" },
21728
+ credentialPlacement: { kind: "bearer" },
21729
+ defaultHeaders: { accept: "application/json" },
21730
+ // The privileges endpoint is the canonical liveness check — cheap, always
21731
+ // available for tokens carrying any sell.* scope, returns the seller's
21732
+ // current selling limits.
21733
+ test: { method: "GET", path: "sell/account/v1/privilege" },
21734
+ capabilities: [
21735
+ {
21736
+ name: "inventory_items.search",
21737
+ class: "read",
21738
+ description: "List inventory items for the connected seller with pagination.",
21739
+ parameters: {
21740
+ type: "object",
21741
+ properties: {
21742
+ limit: { type: "integer", minimum: 1, maximum: 200, description: "Page size (eBay default 25, max 200)." },
21743
+ offset: { type: "integer", minimum: 0, description: "Zero-based offset of the first item to return." }
21744
+ }
21745
+ },
21746
+ request: {
21747
+ method: "GET",
21748
+ path: "sell/inventory/v1/inventory_item",
21749
+ query: {
21750
+ limit: "{limit}",
21751
+ offset: "{offset}"
21752
+ }
21753
+ },
21754
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21755
+ },
21756
+ {
21757
+ name: "inventory_items.get",
21758
+ class: "read",
21759
+ description: "Read a single inventory item by SKU.",
21760
+ parameters: {
21761
+ type: "object",
21762
+ properties: {
21763
+ sku: { type: "string", description: "Seller-defined inventory SKU." }
21764
+ },
21765
+ required: ["sku"]
21766
+ },
21767
+ request: {
21768
+ method: "GET",
21769
+ path: "sell/inventory/v1/inventory_item/{sku}"
21770
+ },
21771
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21772
+ },
21773
+ {
21774
+ name: "inventory_items.upsert",
21775
+ class: "mutation",
21776
+ description: "Create or fully replace an inventory item identified by SKU (eBay PUT semantics are upsert).",
21777
+ parameters: {
21778
+ type: "object",
21779
+ properties: {
21780
+ sku: { type: "string", description: "Seller-defined inventory SKU." },
21781
+ marketplaceId: { type: "string", description: "Marketplace id, e.g. EBAY_US. Defaults to Content-Language en-US." },
21782
+ item: {
21783
+ type: "object",
21784
+ description: "Inventory item payload (product, condition, availability, packageWeightAndSize)."
21785
+ }
21786
+ },
21787
+ required: ["sku", "item"]
21788
+ },
21789
+ request: {
21790
+ method: "PUT",
21791
+ path: "sell/inventory/v1/inventory_item/{sku}",
21792
+ headers: {
21793
+ "content-language": "en-US",
21794
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
21795
+ },
21796
+ body: "{item}"
21797
+ },
21798
+ cas: "native-idempotency",
21799
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21800
+ },
21801
+ {
21802
+ name: "inventory_items.delete",
21803
+ class: "mutation",
21804
+ description: "Delete an inventory item and all of its offers by SKU.",
21805
+ parameters: {
21806
+ type: "object",
21807
+ properties: {
21808
+ sku: { type: "string" }
21809
+ },
21810
+ required: ["sku"]
21811
+ },
21812
+ request: {
21813
+ method: "DELETE",
21814
+ path: "sell/inventory/v1/inventory_item/{sku}"
21815
+ },
21816
+ cas: "optimistic-read-verify",
21817
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21818
+ },
21819
+ {
21820
+ name: "offers.search",
21821
+ class: "read",
21822
+ description: "List offers (listings) attached to a given inventory SKU with pagination.",
21823
+ parameters: {
21824
+ type: "object",
21825
+ properties: {
21826
+ sku: { type: "string", description: "Inventory SKU whose offers to list." },
21827
+ marketplace_id: { type: "string", description: "Marketplace filter, e.g. EBAY_US." },
21828
+ format: { type: "string", enum: ["FIXED_PRICE", "AUCTION"] },
21829
+ limit: { type: "integer", minimum: 1, maximum: 200 },
21830
+ offset: { type: "integer", minimum: 0 }
21831
+ },
21832
+ required: ["sku"]
21833
+ },
21834
+ request: {
21835
+ method: "GET",
21836
+ path: "sell/inventory/v1/offer",
21837
+ query: {
21838
+ sku: "{sku}",
21839
+ marketplace_id: "{marketplace_id}",
21840
+ format: "{format}",
21841
+ limit: "{limit}",
21842
+ offset: "{offset}"
21843
+ }
21844
+ },
21845
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21846
+ },
21847
+ {
21848
+ name: "offers.publish",
21849
+ class: "mutation",
21850
+ description: "Publish an offer, converting it into an active eBay listing.",
21851
+ parameters: {
21852
+ type: "object",
21853
+ properties: {
21854
+ offerId: { type: "string", description: "Unique identifier of the offer to publish." }
21855
+ },
21856
+ required: ["offerId"]
21857
+ },
21858
+ request: {
21859
+ method: "POST",
21860
+ path: "sell/inventory/v1/offer/{offerId}/publish"
21861
+ },
21862
+ cas: "native-idempotency",
21863
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21864
+ },
21865
+ {
21866
+ name: "orders.search",
21867
+ class: "read",
21868
+ description: "List fulfillment orders for the connected seller with optional filters and pagination.",
21869
+ parameters: {
21870
+ type: "object",
21871
+ properties: {
21872
+ filter: {
21873
+ type: "string",
21874
+ description: 'eBay fulfillment filter expression, e.g. "creationdate:[2026-01-01T00:00:00.000Z..]" or "orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}".'
21875
+ },
21876
+ orderIds: { type: "string", description: "Comma-separated list of order ids to fetch." },
21877
+ fieldGroups: { type: "string", description: "Optional response projection, e.g. TAX_BREAKDOWN." },
21878
+ marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
21879
+ limit: { type: "integer", minimum: 1, maximum: 1e3 },
21880
+ offset: { type: "integer", minimum: 0 }
21881
+ }
21882
+ },
21883
+ request: {
21884
+ method: "GET",
21885
+ path: "sell/fulfillment/v1/order",
21886
+ headers: {
21887
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
21888
+ },
21889
+ query: {
21890
+ filter: "{filter}",
21891
+ orderIds: "{orderIds}",
21892
+ fieldGroups: "{fieldGroups}",
21893
+ limit: "{limit}",
21894
+ offset: "{offset}"
21895
+ }
21896
+ },
21897
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
21898
+ },
21899
+ {
21900
+ name: "orders.get",
21901
+ class: "read",
21902
+ description: "Read a single fulfillment order by id.",
21903
+ parameters: {
21904
+ type: "object",
21905
+ properties: {
21906
+ orderId: { type: "string" },
21907
+ fieldGroups: { type: "string", description: "Optional response projection, e.g. TAX_BREAKDOWN." },
21908
+ marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." }
21909
+ },
21910
+ required: ["orderId"]
21911
+ },
21912
+ request: {
21913
+ method: "GET",
21914
+ path: "sell/fulfillment/v1/order/{orderId}",
21915
+ headers: {
21916
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
21917
+ },
21918
+ query: {
21919
+ fieldGroups: "{fieldGroups}"
21920
+ }
21921
+ },
21922
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
21923
+ },
21924
+ {
21925
+ name: "orders.ship",
21926
+ class: "mutation",
21927
+ description: "Create a shipping fulfillment for an order \u2014 records carrier, tracking, and the line items shipped.",
21928
+ parameters: {
21929
+ type: "object",
21930
+ properties: {
21931
+ orderId: { type: "string" },
21932
+ marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
21933
+ fulfillment: {
21934
+ type: "object",
21935
+ description: "Shipping fulfillment payload (lineItems, shippedDate, shippingCarrierCode, trackingNumber)."
21936
+ }
21937
+ },
21938
+ required: ["orderId", "fulfillment"]
21939
+ },
21940
+ request: {
21941
+ method: "POST",
21942
+ path: "sell/fulfillment/v1/order/{orderId}/shipping_fulfillment",
21943
+ headers: {
21944
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
21945
+ },
21946
+ body: "{fulfillment}"
21947
+ },
21948
+ cas: "native-idempotency",
21949
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
21950
+ },
21951
+ {
21952
+ name: "identity.get",
21953
+ class: "read",
21954
+ description: "Read the connected eBay user identity (account type, registration marketplace, business / individual flags).",
21955
+ parameters: {
21956
+ type: "object",
21957
+ properties: {}
21958
+ },
21959
+ request: {
21960
+ method: "GET",
21961
+ path: "commerce/identity/v1/user/"
21962
+ },
21963
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"]
21964
+ },
21965
+ {
21966
+ name: "inventory.update",
21967
+ class: "mutation",
21968
+ description: "Bulk-update price and/or available quantity for one or more inventory items / offers.",
21969
+ parameters: {
21970
+ type: "object",
21971
+ properties: {
21972
+ marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
21973
+ requests: {
21974
+ type: "array",
21975
+ description: "eBay PriceQuantity request array. Each entry targets a SKU and/or offerId with new ship-to-locationAvailability / price values.",
21976
+ items: { type: "object" }
21977
+ }
21978
+ },
21979
+ required: ["requests"]
21980
+ },
21981
+ request: {
21982
+ method: "POST",
21983
+ path: "sell/inventory/v1/bulk_update_price_quantity",
21984
+ headers: {
21985
+ "content-language": "en-US",
21986
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
21987
+ },
21988
+ body: { requests: "{requests}" }
21989
+ },
21990
+ cas: "native-idempotency",
21991
+ externalEffect: true,
21992
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
21993
+ },
21994
+ {
21995
+ name: "orders.cancel",
21996
+ class: "mutation",
21997
+ description: "Request order cancellation via the Post-Order Cancellation API. Sellers can request cancellation on unshipped orders.",
21998
+ parameters: {
21999
+ type: "object",
22000
+ properties: {
22001
+ legacyOrderId: {
22002
+ type: "string",
22003
+ description: "eBay legacy (string) order id the cancellation request applies to."
22004
+ },
22005
+ cancelReason: {
22006
+ type: "string",
22007
+ description: "Reason for the cancellation, e.g. OUT_OF_STOCK_OR_CANNOT_FULFILL, BUYER_ASKED_CANCEL, ADDRESS_ISSUES."
22008
+ },
22009
+ marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." }
22010
+ },
22011
+ required: ["legacyOrderId", "cancelReason"]
22012
+ },
22013
+ request: {
22014
+ method: "POST",
22015
+ path: "post-order/v2/cancellation",
22016
+ headers: {
22017
+ "x-ebay-c-marketplace-id": "{marketplaceId}"
22018
+ },
22019
+ body: {
22020
+ legacyOrderId: "{legacyOrderId}",
22021
+ cancelReason: "{cancelReason}"
22022
+ }
22023
+ },
22024
+ cas: "native-idempotency",
22025
+ externalEffect: true,
22026
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
22027
+ },
22028
+ {
22029
+ name: "listing.end",
22030
+ class: "mutation",
22031
+ description: "End an active listing by withdrawing its offer.",
22032
+ parameters: {
22033
+ type: "object",
22034
+ properties: {
22035
+ offerId: { type: "string", description: "Unique identifier of the offer (active listing) to withdraw." }
22036
+ },
22037
+ required: ["offerId"]
22038
+ },
22039
+ request: {
22040
+ method: "POST",
22041
+ path: "sell/inventory/v1/offer/{offerId}/withdraw"
22042
+ },
22043
+ cas: "native-idempotency",
22044
+ externalEffect: true,
22045
+ requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
22046
+ }
22047
+ ]
22048
+ });
22049
+
21702
22050
  // src/connectors/adapters/etsy.ts
21703
22051
  var SCOPES = [
21704
22052
  "listings_r",
@@ -29900,6 +30248,320 @@ var googleMeetConnector = declarativeRestConnector({
29900
30248
  ]
29901
30249
  });
29902
30250
 
30251
+ // src/connectors/adapters/google-my-business.ts
30252
+ var googleMyBusinessConnector = declarativeRestConnector({
30253
+ kind: "google-my-business",
30254
+ displayName: "Google My Business",
30255
+ description: "Manage Google Business Profile (formerly Google My Business): list accounts and locations, read customer reviews, and post owner replies.",
30256
+ auth: {
30257
+ kind: "oauth2",
30258
+ authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
30259
+ tokenUrl: "https://oauth2.googleapis.com/token",
30260
+ scopes: ["https://www.googleapis.com/auth/business.manage"],
30261
+ clientIdEnv: "GOOGLE_MY_BUSINESS_OAUTH_CLIENT_ID",
30262
+ clientSecretEnv: "GOOGLE_MY_BUSINESS_OAUTH_CLIENT_SECRET"
30263
+ },
30264
+ category: "crm",
30265
+ defaultConsistencyModel: "authoritative",
30266
+ baseUrl: "https://mybusinessaccountmanagement.googleapis.com",
30267
+ test: { method: "GET", path: "/v1/accounts" },
30268
+ capabilities: [
30269
+ {
30270
+ name: "accounts.list",
30271
+ class: "read",
30272
+ description: "List Business Profile accounts the authenticated user owns or co-manages.",
30273
+ parameters: {
30274
+ type: "object",
30275
+ properties: {
30276
+ pageSize: { type: "integer", minimum: 1, maximum: 50 },
30277
+ pageToken: { type: "string" },
30278
+ filter: { type: "string" }
30279
+ },
30280
+ required: []
30281
+ },
30282
+ request: {
30283
+ method: "GET",
30284
+ path: "/v1/accounts",
30285
+ query: {
30286
+ pageSize: "{pageSize}",
30287
+ pageToken: "{pageToken}",
30288
+ filter: "{filter}"
30289
+ }
30290
+ },
30291
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30292
+ },
30293
+ {
30294
+ name: "locations.list",
30295
+ class: "read",
30296
+ description: "List locations under a Business Profile account (Business Information API).",
30297
+ parameters: {
30298
+ type: "object",
30299
+ properties: {
30300
+ accountId: {
30301
+ type: "string",
30302
+ description: "Bare account id (the trailing segment of `accounts/{accountId}`)."
30303
+ },
30304
+ pageSize: { type: "integer", minimum: 1, maximum: 100 },
30305
+ pageToken: { type: "string" },
30306
+ filter: { type: "string" },
30307
+ readMask: {
30308
+ type: "string",
30309
+ description: "Field mask selecting which Location fields to return, e.g. `name,title,storefrontAddress`."
30310
+ }
30311
+ },
30312
+ required: ["accountId", "readMask"]
30313
+ },
30314
+ request: {
30315
+ method: "GET",
30316
+ path: "https://mybusinessbusinessinformation.googleapis.com/v1/accounts/{accountId}/locations",
30317
+ query: {
30318
+ pageSize: "{pageSize}",
30319
+ pageToken: "{pageToken}",
30320
+ filter: "{filter}",
30321
+ readMask: "{readMask}"
30322
+ }
30323
+ },
30324
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30325
+ },
30326
+ {
30327
+ name: "reviews.list",
30328
+ class: "read",
30329
+ description: "List customer reviews for a location (legacy v4 endpoint \u2014 Google never migrated reviews onto the v1 split APIs).",
30330
+ parameters: {
30331
+ type: "object",
30332
+ properties: {
30333
+ accountId: { type: "string" },
30334
+ locationId: { type: "string" },
30335
+ pageSize: { type: "integer", minimum: 1, maximum: 50 },
30336
+ pageToken: { type: "string" },
30337
+ orderBy: {
30338
+ type: "string",
30339
+ description: "Sort order, e.g. `updateTime desc` or `rating desc`."
30340
+ }
30341
+ },
30342
+ required: ["accountId", "locationId"]
30343
+ },
30344
+ request: {
30345
+ method: "GET",
30346
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews",
30347
+ query: {
30348
+ pageSize: "{pageSize}",
30349
+ pageToken: "{pageToken}",
30350
+ orderBy: "{orderBy}"
30351
+ }
30352
+ },
30353
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30354
+ },
30355
+ {
30356
+ name: "reviews.get",
30357
+ class: "read",
30358
+ description: "Get a single customer review by id.",
30359
+ parameters: {
30360
+ type: "object",
30361
+ properties: {
30362
+ accountId: { type: "string" },
30363
+ locationId: { type: "string" },
30364
+ reviewId: { type: "string" }
30365
+ },
30366
+ required: ["accountId", "locationId", "reviewId"]
30367
+ },
30368
+ request: {
30369
+ method: "GET",
30370
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}"
30371
+ },
30372
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30373
+ },
30374
+ {
30375
+ // Mirrors the activepieces `create.reply` action (`createReply`).
30376
+ // The legacy v4 endpoint uses PUT for upsert semantics: posting the
30377
+ // same reply twice replaces (not duplicates) the owner response, which
30378
+ // makes this naturally idempotent on (locationId, reviewId).
30379
+ name: "reviews.reply.create",
30380
+ class: "mutation",
30381
+ description: "Create or replace the owner reply on a customer review (idempotent upsert on the review name).",
30382
+ parameters: {
30383
+ type: "object",
30384
+ properties: {
30385
+ accountId: { type: "string" },
30386
+ locationId: { type: "string" },
30387
+ reviewId: { type: "string" },
30388
+ comment: {
30389
+ type: "string",
30390
+ description: "Reply text, up to 4096 characters.",
30391
+ maxLength: 4096
30392
+ }
30393
+ },
30394
+ required: ["accountId", "locationId", "reviewId", "comment"]
30395
+ },
30396
+ request: {
30397
+ method: "PUT",
30398
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply",
30399
+ body: { comment: "{comment}" }
30400
+ },
30401
+ cas: "native-idempotency",
30402
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30403
+ },
30404
+ {
30405
+ name: "reviews.reply.delete",
30406
+ class: "mutation",
30407
+ description: "Delete the owner reply on a customer review.",
30408
+ parameters: {
30409
+ type: "object",
30410
+ properties: {
30411
+ accountId: { type: "string" },
30412
+ locationId: { type: "string" },
30413
+ reviewId: { type: "string" }
30414
+ },
30415
+ required: ["accountId", "locationId", "reviewId"]
30416
+ },
30417
+ request: {
30418
+ method: "DELETE",
30419
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply"
30420
+ },
30421
+ cas: "native-idempotency",
30422
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30423
+ },
30424
+ {
30425
+ // GBP "posts" — short-lived updates that surface on the storefront's
30426
+ // listing. The legacy v4 endpoint is the only published surface; the
30427
+ // Business Posts v1 API was retired in 2022 and Google never produced a
30428
+ // replacement. Repeating a POST produces a duplicate localPost, so the
30429
+ // MutationGuard idempotency-key layer must dedupe above the connector.
30430
+ name: "localPosts.create",
30431
+ class: "mutation",
30432
+ description: "Publish a Google Business Profile local post (status update, offer, event, or call-to-action) on a location.",
30433
+ parameters: {
30434
+ type: "object",
30435
+ properties: {
30436
+ accountId: { type: "string" },
30437
+ locationId: { type: "string" },
30438
+ languageCode: {
30439
+ type: "string",
30440
+ description: 'BCP-47 language code, e.g. "en".'
30441
+ },
30442
+ summary: {
30443
+ type: "string",
30444
+ description: "Post body text (up to 1,500 characters).",
30445
+ maxLength: 1500
30446
+ },
30447
+ topicType: {
30448
+ type: "string",
30449
+ description: "STANDARD | EVENT | OFFER | ALERT."
30450
+ },
30451
+ callToAction: {
30452
+ type: "object",
30453
+ description: 'Optional { actionType, url } block, e.g. { actionType: "LEARN_MORE", url: "https://..." }.'
30454
+ },
30455
+ event: {
30456
+ type: "object",
30457
+ description: "For topicType=EVENT: { title, schedule: { startDate, endDate, ... } }."
30458
+ },
30459
+ offer: {
30460
+ type: "object",
30461
+ description: "For topicType=OFFER: { couponCode, redeemOnlineUrl, termsConditions }."
30462
+ },
30463
+ media: {
30464
+ type: "array",
30465
+ description: "Optional MediaItem list to attach images/video to the post."
30466
+ }
30467
+ },
30468
+ required: ["accountId", "locationId", "languageCode", "summary"]
30469
+ },
30470
+ request: {
30471
+ method: "POST",
30472
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/localPosts",
30473
+ body: {
30474
+ languageCode: "{languageCode}",
30475
+ summary: "{summary}",
30476
+ topicType: "{topicType}",
30477
+ callToAction: "{callToAction}",
30478
+ event: "{event}",
30479
+ offer: "{offer}",
30480
+ media: "{media}"
30481
+ }
30482
+ },
30483
+ // GBP localPosts has no requestId / idempotency-key on POST; consecutive
30484
+ // calls produce duplicate posts. MutationGuard's idempotency-key layer
30485
+ // is the only guard.
30486
+ cas: "none",
30487
+ externalEffect: true,
30488
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30489
+ },
30490
+ {
30491
+ name: "localPosts.delete",
30492
+ class: "mutation",
30493
+ description: "Delete a local post from a location. Repeating the call on an already-deleted post yields 404 but is idempotent in effect.",
30494
+ parameters: {
30495
+ type: "object",
30496
+ properties: {
30497
+ accountId: { type: "string" },
30498
+ locationId: { type: "string" },
30499
+ localPostId: { type: "string" }
30500
+ },
30501
+ required: ["accountId", "locationId", "localPostId"]
30502
+ },
30503
+ request: {
30504
+ method: "DELETE",
30505
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/localPosts/{localPostId}"
30506
+ },
30507
+ cas: "native-idempotency",
30508
+ externalEffect: true,
30509
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30510
+ },
30511
+ {
30512
+ // GBP "media" — photos/videos on a location's profile. The legacy v4
30513
+ // /media endpoint accepts a MediaItem body with either a sourceUrl
30514
+ // (Google fetches it) or a reference from /media:startUpload (multi-step
30515
+ // resumable upload). We expose the sourceUrl path because it's a single
30516
+ // request the declarative-rest engine can model cleanly; bytestream
30517
+ // upload is a separate hand-rolled adapter when needed.
30518
+ name: "media.create",
30519
+ class: "mutation",
30520
+ description: "Upload a photo or video to a Google Business Profile location via the v4 /media endpoint. Pass a sourceUrl Google can fetch (HTTPS, publicly reachable). For bytestream uploads use the /media:startUpload + PUT bytestream flow instead.",
30521
+ parameters: {
30522
+ type: "object",
30523
+ properties: {
30524
+ accountId: { type: "string" },
30525
+ locationId: { type: "string" },
30526
+ mediaFormat: {
30527
+ type: "string",
30528
+ description: "PHOTO | VIDEO."
30529
+ },
30530
+ locationAssociation: {
30531
+ type: "object",
30532
+ description: 'Where the media attaches, e.g. { category: "EXTERIOR" } or { priceListItemId: "..." }.'
30533
+ },
30534
+ sourceUrl: {
30535
+ type: "string",
30536
+ description: "Public HTTPS URL Google should fetch the media from."
30537
+ },
30538
+ description: {
30539
+ type: "string",
30540
+ description: "Optional caption shown alongside the media."
30541
+ }
30542
+ },
30543
+ required: ["accountId", "locationId", "mediaFormat", "sourceUrl"]
30544
+ },
30545
+ request: {
30546
+ method: "POST",
30547
+ path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/media",
30548
+ body: {
30549
+ mediaFormat: "{mediaFormat}",
30550
+ locationAssociation: "{locationAssociation}",
30551
+ sourceUrl: "{sourceUrl}",
30552
+ description: "{description}"
30553
+ }
30554
+ },
30555
+ // GBP media POST has no idempotency token; consecutive calls produce
30556
+ // duplicate media items. MutationGuard's idempotency-key layer is the
30557
+ // only guard.
30558
+ cas: "none",
30559
+ externalEffect: true,
30560
+ requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
30561
+ }
30562
+ ]
30563
+ });
30564
+
29903
30565
  // src/connectors/adapters/google-search-console.ts
29904
30566
  var googleSearchConsoleConnector = declarativeRestConnector({
29905
30567
  kind: "google-search-console",
@@ -31765,6 +32427,344 @@ async function ensureFreshAccessToken7(creds, clientId, clientSecret, inv) {
31765
32427
  return creds.accessToken;
31766
32428
  }
31767
32429
 
32430
+ // src/connectors/adapters/harvest.ts
32431
+ var harvestConnector = declarativeRestConnector({
32432
+ kind: "harvest",
32433
+ displayName: "Harvest",
32434
+ description: "Read Harvest invoices, projects, tasks, clients, estimates, expenses, time entries, roles, users, and run the uninvoiced report.",
32435
+ auth: {
32436
+ kind: "oauth2",
32437
+ authorizationUrl: "https://id.getharvest.com/oauth2/authorize",
32438
+ tokenUrl: "https://id.getharvest.com/api/v2/oauth2/token",
32439
+ scopes: ["harvest:all"],
32440
+ clientIdEnv: "HARVEST_OAUTH_CLIENT_ID",
32441
+ clientSecretEnv: "HARVEST_OAUTH_CLIENT_SECRET"
32442
+ },
32443
+ category: "other",
32444
+ defaultConsistencyModel: "authoritative",
32445
+ baseUrl: "https://api.harvestapp.com/v2",
32446
+ test: {
32447
+ method: "GET",
32448
+ path: "/users/me",
32449
+ headers: { "Harvest-Account-Id": "{accountId}" }
32450
+ },
32451
+ capabilities: [
32452
+ {
32453
+ name: "invoices.get",
32454
+ class: "read",
32455
+ description: "List invoices in a Harvest account, optionally filtered by client/project/state/date window.",
32456
+ parameters: {
32457
+ type: "object",
32458
+ properties: {
32459
+ accountId: { type: "string", description: "Harvest Account ID (sent as the Harvest-Account-Id header)." },
32460
+ client_id: { type: "string" },
32461
+ project_id: { type: "string" },
32462
+ state: { type: "string", enum: ["draft", "open", "paid", "closed"] },
32463
+ updated_since: { type: "string", description: "ISO-8601 timestamp." },
32464
+ from: { type: "string", description: "ISO-8601 date." },
32465
+ to: { type: "string", description: "ISO-8601 date." },
32466
+ page: { type: "integer", minimum: 1 },
32467
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32468
+ },
32469
+ required: ["accountId"]
32470
+ },
32471
+ request: {
32472
+ method: "GET",
32473
+ path: "/invoices",
32474
+ headers: { "Harvest-Account-Id": "{accountId}" },
32475
+ query: {
32476
+ client_id: "{client_id}",
32477
+ project_id: "{project_id}",
32478
+ state: "{state}",
32479
+ updated_since: "{updated_since}",
32480
+ from: "{from}",
32481
+ to: "{to}",
32482
+ page: "{page}",
32483
+ per_page: "{per_page}"
32484
+ }
32485
+ },
32486
+ requiredScopes: ["harvest:all"]
32487
+ },
32488
+ {
32489
+ name: "projects.get",
32490
+ class: "read",
32491
+ description: "List projects, optionally filtered by client or active state.",
32492
+ parameters: {
32493
+ type: "object",
32494
+ properties: {
32495
+ accountId: { type: "string" },
32496
+ is_active: { type: "boolean" },
32497
+ client_id: { type: "string" },
32498
+ updated_since: { type: "string" },
32499
+ page: { type: "integer", minimum: 1 },
32500
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32501
+ },
32502
+ required: ["accountId"]
32503
+ },
32504
+ request: {
32505
+ method: "GET",
32506
+ path: "/projects",
32507
+ headers: { "Harvest-Account-Id": "{accountId}" },
32508
+ query: {
32509
+ is_active: "{is_active}",
32510
+ client_id: "{client_id}",
32511
+ updated_since: "{updated_since}",
32512
+ page: "{page}",
32513
+ per_page: "{per_page}"
32514
+ }
32515
+ },
32516
+ requiredScopes: ["harvest:all"]
32517
+ },
32518
+ {
32519
+ name: "tasks.get",
32520
+ class: "read",
32521
+ description: "List billable/non-billable tasks defined on the Harvest account.",
32522
+ parameters: {
32523
+ type: "object",
32524
+ properties: {
32525
+ accountId: { type: "string" },
32526
+ is_active: { type: "boolean" },
32527
+ updated_since: { type: "string" },
32528
+ page: { type: "integer", minimum: 1 },
32529
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32530
+ },
32531
+ required: ["accountId"]
32532
+ },
32533
+ request: {
32534
+ method: "GET",
32535
+ path: "/tasks",
32536
+ headers: { "Harvest-Account-Id": "{accountId}" },
32537
+ query: {
32538
+ is_active: "{is_active}",
32539
+ updated_since: "{updated_since}",
32540
+ page: "{page}",
32541
+ per_page: "{per_page}"
32542
+ }
32543
+ },
32544
+ requiredScopes: ["harvest:all"]
32545
+ },
32546
+ {
32547
+ name: "clients.get",
32548
+ class: "read",
32549
+ description: "List clients in the Harvest account.",
32550
+ parameters: {
32551
+ type: "object",
32552
+ properties: {
32553
+ accountId: { type: "string" },
32554
+ is_active: { type: "boolean" },
32555
+ updated_since: { type: "string" },
32556
+ page: { type: "integer", minimum: 1 },
32557
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32558
+ },
32559
+ required: ["accountId"]
32560
+ },
32561
+ request: {
32562
+ method: "GET",
32563
+ path: "/clients",
32564
+ headers: { "Harvest-Account-Id": "{accountId}" },
32565
+ query: {
32566
+ is_active: "{is_active}",
32567
+ updated_since: "{updated_since}",
32568
+ page: "{page}",
32569
+ per_page: "{per_page}"
32570
+ }
32571
+ },
32572
+ requiredScopes: ["harvest:all"]
32573
+ },
32574
+ {
32575
+ name: "estimates.get",
32576
+ class: "read",
32577
+ description: "List estimates, optionally filtered by client/state/updated_since.",
32578
+ parameters: {
32579
+ type: "object",
32580
+ properties: {
32581
+ accountId: { type: "string" },
32582
+ client_id: { type: "string" },
32583
+ state: { type: "string", enum: ["draft", "sent", "accepted", "declined"] },
32584
+ updated_since: { type: "string" },
32585
+ from: { type: "string" },
32586
+ to: { type: "string" },
32587
+ page: { type: "integer", minimum: 1 },
32588
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32589
+ },
32590
+ required: ["accountId"]
32591
+ },
32592
+ request: {
32593
+ method: "GET",
32594
+ path: "/estimates",
32595
+ headers: { "Harvest-Account-Id": "{accountId}" },
32596
+ query: {
32597
+ client_id: "{client_id}",
32598
+ state: "{state}",
32599
+ updated_since: "{updated_since}",
32600
+ from: "{from}",
32601
+ to: "{to}",
32602
+ page: "{page}",
32603
+ per_page: "{per_page}"
32604
+ }
32605
+ },
32606
+ requiredScopes: ["harvest:all"]
32607
+ },
32608
+ {
32609
+ name: "expenses.get",
32610
+ class: "read",
32611
+ description: "List expenses in the account, with optional user/client/project/billed/date filters.",
32612
+ parameters: {
32613
+ type: "object",
32614
+ properties: {
32615
+ accountId: { type: "string" },
32616
+ user_id: { type: "string" },
32617
+ client_id: { type: "string" },
32618
+ project_id: { type: "string" },
32619
+ is_billed: { type: "boolean" },
32620
+ updated_since: { type: "string" },
32621
+ from: { type: "string" },
32622
+ to: { type: "string" },
32623
+ page: { type: "integer", minimum: 1 },
32624
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32625
+ },
32626
+ required: ["accountId"]
32627
+ },
32628
+ request: {
32629
+ method: "GET",
32630
+ path: "/expenses",
32631
+ headers: { "Harvest-Account-Id": "{accountId}" },
32632
+ query: {
32633
+ user_id: "{user_id}",
32634
+ client_id: "{client_id}",
32635
+ project_id: "{project_id}",
32636
+ is_billed: "{is_billed}",
32637
+ updated_since: "{updated_since}",
32638
+ from: "{from}",
32639
+ to: "{to}",
32640
+ page: "{page}",
32641
+ per_page: "{per_page}"
32642
+ }
32643
+ },
32644
+ requiredScopes: ["harvest:all"]
32645
+ },
32646
+ {
32647
+ name: "time.entries.get",
32648
+ class: "read",
32649
+ description: "List time entries with optional user/client/project/task/billed/running/date filters.",
32650
+ parameters: {
32651
+ type: "object",
32652
+ properties: {
32653
+ accountId: { type: "string" },
32654
+ user_id: { type: "string" },
32655
+ client_id: { type: "string" },
32656
+ project_id: { type: "string" },
32657
+ task_id: { type: "string" },
32658
+ is_billed: { type: "boolean" },
32659
+ is_running: { type: "boolean" },
32660
+ updated_since: { type: "string" },
32661
+ from: { type: "string" },
32662
+ to: { type: "string" },
32663
+ page: { type: "integer", minimum: 1 },
32664
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32665
+ },
32666
+ required: ["accountId"]
32667
+ },
32668
+ request: {
32669
+ method: "GET",
32670
+ path: "/time_entries",
32671
+ headers: { "Harvest-Account-Id": "{accountId}" },
32672
+ query: {
32673
+ user_id: "{user_id}",
32674
+ client_id: "{client_id}",
32675
+ project_id: "{project_id}",
32676
+ task_id: "{task_id}",
32677
+ is_billed: "{is_billed}",
32678
+ is_running: "{is_running}",
32679
+ updated_since: "{updated_since}",
32680
+ from: "{from}",
32681
+ to: "{to}",
32682
+ page: "{page}",
32683
+ per_page: "{per_page}"
32684
+ }
32685
+ },
32686
+ requiredScopes: ["harvest:all"]
32687
+ },
32688
+ {
32689
+ name: "roles.get",
32690
+ class: "read",
32691
+ description: "List user roles defined in the Harvest account.",
32692
+ parameters: {
32693
+ type: "object",
32694
+ properties: {
32695
+ accountId: { type: "string" },
32696
+ page: { type: "integer", minimum: 1 },
32697
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32698
+ },
32699
+ required: ["accountId"]
32700
+ },
32701
+ request: {
32702
+ method: "GET",
32703
+ path: "/roles",
32704
+ headers: { "Harvest-Account-Id": "{accountId}" },
32705
+ query: { page: "{page}", per_page: "{per_page}" }
32706
+ },
32707
+ requiredScopes: ["harvest:all"]
32708
+ },
32709
+ {
32710
+ name: "users.get",
32711
+ class: "read",
32712
+ description: "List Harvest users in the account.",
32713
+ parameters: {
32714
+ type: "object",
32715
+ properties: {
32716
+ accountId: { type: "string" },
32717
+ is_active: { type: "boolean" },
32718
+ updated_since: { type: "string" },
32719
+ page: { type: "integer", minimum: 1 },
32720
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32721
+ },
32722
+ required: ["accountId"]
32723
+ },
32724
+ request: {
32725
+ method: "GET",
32726
+ path: "/users",
32727
+ headers: { "Harvest-Account-Id": "{accountId}" },
32728
+ query: {
32729
+ is_active: "{is_active}",
32730
+ updated_since: "{updated_since}",
32731
+ page: "{page}",
32732
+ per_page: "{per_page}"
32733
+ }
32734
+ },
32735
+ requiredScopes: ["harvest:all"]
32736
+ },
32737
+ {
32738
+ name: "reports.uninvoiced",
32739
+ class: "read",
32740
+ description: "Pull the uninvoiced report for a date window \u2014 totals of uninvoiced hours/expenses per project.",
32741
+ parameters: {
32742
+ type: "object",
32743
+ properties: {
32744
+ accountId: { type: "string" },
32745
+ from: { type: "string", description: "Window start date (YYYY-MM-DD)." },
32746
+ to: { type: "string", description: "Window end date (YYYY-MM-DD)." },
32747
+ page: { type: "integer", minimum: 1 },
32748
+ per_page: { type: "integer", minimum: 1, maximum: 2e3 }
32749
+ },
32750
+ required: ["accountId", "from", "to"]
32751
+ },
32752
+ request: {
32753
+ method: "GET",
32754
+ path: "/reports/uninvoiced",
32755
+ headers: { "Harvest-Account-Id": "{accountId}" },
32756
+ query: {
32757
+ from: "{from}",
32758
+ to: "{to}",
32759
+ page: "{page}",
32760
+ per_page: "{per_page}"
32761
+ }
32762
+ },
32763
+ requiredScopes: ["harvest:all"]
32764
+ }
32765
+ ]
32766
+ });
32767
+
31768
32768
  // src/connectors/adapters/helpscout.ts
31769
32769
  var conversationParams = {
31770
32770
  type: "object",
@@ -54029,6 +55029,256 @@ var tallyConnector = declarativeRestConnector({
54029
55029
  ]
54030
55030
  });
54031
55031
 
55032
+ // src/connectors/adapters/ticktick.ts
55033
+ var ticktickConnector = declarativeRestConnector({
55034
+ kind: "ticktick",
55035
+ displayName: "TickTick",
55036
+ description: "Create, update, complete, and delete tasks in TickTick.",
55037
+ auth: {
55038
+ kind: "oauth2",
55039
+ authorizationUrl: "https://ticktick.com/oauth/authorize",
55040
+ tokenUrl: "https://ticktick.com/oauth/token",
55041
+ scopes: ["tasks:read", "tasks:write"],
55042
+ clientIdEnv: "TICKTICK_OAUTH_CLIENT_ID",
55043
+ clientSecretEnv: "TICKTICK_OAUTH_CLIENT_SECRET",
55044
+ tokenClientAuthMethod: "client_secret_basic"
55045
+ },
55046
+ category: "other",
55047
+ defaultConsistencyModel: "authoritative",
55048
+ baseUrl: "https://api.ticktick.com/v2",
55049
+ test: { method: "GET", path: "/user" },
55050
+ capabilities: [
55051
+ {
55052
+ name: "tasks.create",
55053
+ class: "mutation",
55054
+ description: "Create a new task in TickTick.",
55055
+ parameters: {
55056
+ type: "object",
55057
+ properties: {
55058
+ title: { type: "string" },
55059
+ projectId: { type: "string" },
55060
+ description: { type: "string" },
55061
+ priority: { type: "integer" },
55062
+ dueDate: { type: "string" }
55063
+ },
55064
+ required: ["title", "projectId"]
55065
+ },
55066
+ request: {
55067
+ method: "POST",
55068
+ path: "/task",
55069
+ body: {
55070
+ title: "{title}",
55071
+ projectId: "{projectId}",
55072
+ description: "{description}",
55073
+ priority: "{priority}",
55074
+ dueDate: "{dueDate}"
55075
+ }
55076
+ },
55077
+ cas: "native-idempotency"
55078
+ },
55079
+ {
55080
+ name: "tasks.update",
55081
+ class: "mutation",
55082
+ description: "Update an existing task in TickTick.",
55083
+ parameters: {
55084
+ type: "object",
55085
+ properties: {
55086
+ taskId: { type: "string" },
55087
+ title: { type: "string" },
55088
+ description: { type: "string" },
55089
+ priority: { type: "integer" },
55090
+ dueDate: { type: "string" }
55091
+ },
55092
+ required: ["taskId"]
55093
+ },
55094
+ request: {
55095
+ method: "POST",
55096
+ path: "/task/{taskId}",
55097
+ body: {
55098
+ title: "{title}",
55099
+ description: "{description}",
55100
+ priority: "{priority}",
55101
+ dueDate: "{dueDate}"
55102
+ }
55103
+ },
55104
+ cas: "optimistic-read-verify"
55105
+ },
55106
+ {
55107
+ name: "tasks.get",
55108
+ class: "read",
55109
+ description: "Retrieve a specific task from TickTick.",
55110
+ parameters: {
55111
+ type: "object",
55112
+ properties: {
55113
+ taskId: { type: "string" }
55114
+ },
55115
+ required: ["taskId"]
55116
+ },
55117
+ request: {
55118
+ method: "GET",
55119
+ path: "/task/{taskId}"
55120
+ }
55121
+ },
55122
+ {
55123
+ name: "tasks.find",
55124
+ class: "read",
55125
+ description: "Find tasks in a TickTick project by query.",
55126
+ parameters: {
55127
+ type: "object",
55128
+ properties: {
55129
+ projectId: { type: "string" },
55130
+ query: { type: "string" },
55131
+ limit: { type: "integer" }
55132
+ },
55133
+ required: ["projectId"]
55134
+ },
55135
+ request: {
55136
+ method: "GET",
55137
+ path: "/project/{projectId}/tasks",
55138
+ query: {
55139
+ q: "{query}",
55140
+ limit: "{limit}"
55141
+ }
55142
+ }
55143
+ },
55144
+ {
55145
+ name: "tasks.complete",
55146
+ class: "mutation",
55147
+ description: "Mark a task as complete in TickTick.",
55148
+ parameters: {
55149
+ type: "object",
55150
+ properties: {
55151
+ taskId: { type: "string" }
55152
+ },
55153
+ required: ["taskId"]
55154
+ },
55155
+ request: {
55156
+ method: "POST",
55157
+ path: "/task/{taskId}/complete"
55158
+ },
55159
+ cas: "optimistic-read-verify"
55160
+ },
55161
+ {
55162
+ name: "tasks.delete",
55163
+ class: "mutation",
55164
+ description: "Delete a task from TickTick.",
55165
+ parameters: {
55166
+ type: "object",
55167
+ properties: {
55168
+ taskId: { type: "string" }
55169
+ },
55170
+ required: ["taskId"]
55171
+ },
55172
+ request: {
55173
+ method: "DELETE",
55174
+ path: "/task/{taskId}"
55175
+ },
55176
+ cas: "optimistic-read-verify"
55177
+ },
55178
+ {
55179
+ name: "projects.get",
55180
+ class: "read",
55181
+ description: "Retrieve a specific project from TickTick.",
55182
+ parameters: {
55183
+ type: "object",
55184
+ properties: {
55185
+ projectId: { type: "string" }
55186
+ },
55187
+ required: ["projectId"]
55188
+ },
55189
+ request: {
55190
+ method: "GET",
55191
+ path: "/project/{projectId}"
55192
+ }
55193
+ },
55194
+ {
55195
+ name: "projects.create",
55196
+ class: "mutation",
55197
+ description: "Create a new project (list) in TickTick.",
55198
+ parameters: {
55199
+ type: "object",
55200
+ properties: {
55201
+ name: { type: "string" },
55202
+ color: { type: "string", description: "Hex color code for the project (optional)." },
55203
+ viewMode: { type: "string", description: "View mode, e.g. 'list', 'kanban', 'timeline' (optional)." },
55204
+ kind: { type: "string", description: "Project kind, e.g. 'TASK' or 'NOTE' (optional)." }
55205
+ },
55206
+ required: ["name"]
55207
+ },
55208
+ request: {
55209
+ method: "POST",
55210
+ path: "/project",
55211
+ body: "args"
55212
+ },
55213
+ cas: "native-idempotency",
55214
+ externalEffect: true
55215
+ },
55216
+ {
55217
+ name: "projects.update",
55218
+ class: "mutation",
55219
+ description: "Update an existing project in TickTick.",
55220
+ parameters: {
55221
+ type: "object",
55222
+ properties: {
55223
+ projectId: { type: "string" },
55224
+ name: { type: "string", description: "New project name (optional)." },
55225
+ color: { type: "string", description: "Hex color code for the project (optional)." },
55226
+ viewMode: { type: "string", description: "View mode (optional)." },
55227
+ kind: { type: "string", description: "Project kind (optional)." }
55228
+ },
55229
+ required: ["projectId"]
55230
+ },
55231
+ request: {
55232
+ method: "POST",
55233
+ path: "/project/{projectId}",
55234
+ body: "args"
55235
+ },
55236
+ cas: "native-idempotency",
55237
+ externalEffect: true
55238
+ },
55239
+ {
55240
+ name: "projects.delete",
55241
+ class: "mutation",
55242
+ description: "Delete a project from TickTick.",
55243
+ parameters: {
55244
+ type: "object",
55245
+ properties: {
55246
+ projectId: { type: "string" }
55247
+ },
55248
+ required: ["projectId"]
55249
+ },
55250
+ request: {
55251
+ method: "DELETE",
55252
+ path: "/project/{projectId}"
55253
+ },
55254
+ cas: "native-idempotency",
55255
+ externalEffect: true
55256
+ },
55257
+ {
55258
+ name: "tasks.move",
55259
+ class: "mutation",
55260
+ description: "Move a task to another project.",
55261
+ parameters: {
55262
+ type: "object",
55263
+ properties: {
55264
+ taskId: { type: "string" },
55265
+ projectId: { type: "string", description: "Destination project ID." }
55266
+ },
55267
+ required: ["taskId", "projectId"]
55268
+ },
55269
+ request: {
55270
+ method: "POST",
55271
+ path: "/task/{taskId}/move",
55272
+ body: {
55273
+ projectId: "{projectId}"
55274
+ }
55275
+ },
55276
+ cas: "native-idempotency",
55277
+ externalEffect: true
55278
+ }
55279
+ ]
55280
+ });
55281
+
54032
55282
  // src/connectors/adapters/tl-dv.ts
54033
55283
  var tlDvConnector = declarativeRestConnector({
54034
55284
  kind: "tl-dv",
@@ -68988,6 +70238,11 @@ var CONNECTOR_ADAPTER_FACTORIES = [
68988
70238
  defineFactoryAdapter(() => googleTasksConnector, googleOAuthEnvMap),
68989
70239
  defineFactoryAdapter(() => googleAnalyticsConnector, googleOAuthEnvMap),
68990
70240
  defineFactoryAdapter(() => googleMeetConnector, googleOAuthEnvMap),
70241
+ // Business Profile uses the existing Google OAuth app. Keeping the
70242
+ // credentials as one pair prevents a partial dedicated configuration from
70243
+ // being combined with a shared secret; enable the Business Profile APIs on
70244
+ // that Google Cloud project before connecting an account.
70245
+ defineFactoryAdapter(() => googleMyBusinessConnector, googleOAuthEnvMap),
68991
70246
  defineFactoryAdapter(() => googleSearchConsoleConnector, googleOAuthEnvMap),
68992
70247
  defineFactoryAdapter(slack, {
68993
70248
  clientId: "SLACK_OAUTH_CLIENT_ID",
@@ -69408,12 +70663,20 @@ var CONNECTOR_ADAPTER_FACTORIES = [
69408
70663
  clientId: "SHOPIFY_OAUTH_CLIENT_ID",
69409
70664
  clientSecret: "SHOPIFY_OAUTH_CLIENT_SECRET"
69410
70665
  }),
70666
+ defineFactoryAdapter(() => ebayConnector, {
70667
+ clientId: "EBAY_OAUTH_CLIENT_ID",
70668
+ clientSecret: "EBAY_OAUTH_CLIENT_SECRET"
70669
+ }),
69411
70670
  defineFactoryAdapter(() => lemonSqueezyConnector, {}),
69412
70671
  defineFactoryAdapter(() => shippoConnector, {}),
69413
70672
  defineFactoryAdapter(() => billplzConnector, {}),
69414
70673
  defineFactoryAdapter(() => voucheryIoConnector, {}),
69415
70674
  defineFactoryAdapter(() => saleorConnector, {}),
69416
70675
  defineFactoryAdapter(() => cashfreePaymentsConnector, {}),
70676
+ defineFactoryAdapter(() => harvestConnector, {
70677
+ clientId: "HARVEST_OAUTH_CLIENT_ID",
70678
+ clientSecret: "HARVEST_OAUTH_CLIENT_SECRET"
70679
+ }),
69417
70680
  defineFactoryAdapter(() => frontConnector, {
69418
70681
  clientId: "FRONT_OAUTH_CLIENT_ID",
69419
70682
  clientSecret: "FRONT_OAUTH_CLIENT_SECRET"
@@ -69463,6 +70726,10 @@ var CONNECTOR_ADAPTER_FACTORIES = [
69463
70726
  defineFactoryAdapter(() => brazeConnector, {}),
69464
70727
  defineFactoryAdapter(() => smartleadConnector, {}),
69465
70728
  defineFactoryAdapter(() => lemlistConnector, {}),
70729
+ defineFactoryAdapter(() => ticktickConnector, {
70730
+ clientId: "TICKTICK_OAUTH_CLIENT_ID",
70731
+ clientSecret: "TICKTICK_OAUTH_CLIENT_SECRET"
70732
+ }),
69466
70733
  defineFactoryAdapter(() => builtwithConnector, {}),
69467
70734
  defineFactoryAdapter(() => fullenrichConnector, {}),
69468
70735
  defineFactoryAdapter(() => hunterConnector, {}),
@@ -72426,353 +73693,6 @@ var bigcommerceConnector = declarativeRestConnector({
72426
73693
  ]
72427
73694
  });
72428
73695
 
72429
- // src/connectors/adapters/ebay.ts
72430
- var ebayConnector = declarativeRestConnector({
72431
- kind: "ebay",
72432
- displayName: "eBay",
72433
- description: "Manage eBay seller inventory items and fulfillment orders, and read the connected user identity.",
72434
- auth: {
72435
- kind: "oauth2",
72436
- authorizationUrl: "https://auth.ebay.com/oauth2/authorize",
72437
- tokenUrl: "https://api.ebay.com/identity/v1/oauth2/token",
72438
- scopes: [
72439
- "https://api.ebay.com/oauth/api_scope",
72440
- "https://api.ebay.com/oauth/api_scope/sell.inventory",
72441
- "https://api.ebay.com/oauth/api_scope/sell.fulfillment",
72442
- "https://api.ebay.com/oauth/api_scope/sell.account",
72443
- "https://api.ebay.com/oauth/api_scope/sell.marketing",
72444
- "https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"
72445
- ],
72446
- clientIdEnv: "EBAY_OAUTH_CLIENT_ID",
72447
- clientSecretEnv: "EBAY_OAUTH_CLIENT_SECRET"
72448
- },
72449
- category: "commerce",
72450
- defaultConsistencyModel: "authoritative",
72451
- // Production by default; consumers persist `metadata.apiBaseUrl =
72452
- // "https://api.sandbox.ebay.com"` to route a connection at the sandbox.
72453
- baseUrl: { metadataKey: "apiBaseUrl", fallback: "https://api.ebay.com" },
72454
- credentialPlacement: { kind: "bearer" },
72455
- defaultHeaders: { accept: "application/json" },
72456
- // The privileges endpoint is the canonical liveness check — cheap, always
72457
- // available for tokens carrying any sell.* scope, returns the seller's
72458
- // current selling limits.
72459
- test: { method: "GET", path: "sell/account/v1/privilege" },
72460
- capabilities: [
72461
- {
72462
- name: "inventory_items.search",
72463
- class: "read",
72464
- description: "List inventory items for the connected seller with pagination.",
72465
- parameters: {
72466
- type: "object",
72467
- properties: {
72468
- limit: { type: "integer", minimum: 1, maximum: 200, description: "Page size (eBay default 25, max 200)." },
72469
- offset: { type: "integer", minimum: 0, description: "Zero-based offset of the first item to return." }
72470
- }
72471
- },
72472
- request: {
72473
- method: "GET",
72474
- path: "sell/inventory/v1/inventory_item",
72475
- query: {
72476
- limit: "{limit}",
72477
- offset: "{offset}"
72478
- }
72479
- },
72480
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72481
- },
72482
- {
72483
- name: "inventory_items.get",
72484
- class: "read",
72485
- description: "Read a single inventory item by SKU.",
72486
- parameters: {
72487
- type: "object",
72488
- properties: {
72489
- sku: { type: "string", description: "Seller-defined inventory SKU." }
72490
- },
72491
- required: ["sku"]
72492
- },
72493
- request: {
72494
- method: "GET",
72495
- path: "sell/inventory/v1/inventory_item/{sku}"
72496
- },
72497
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72498
- },
72499
- {
72500
- name: "inventory_items.upsert",
72501
- class: "mutation",
72502
- description: "Create or fully replace an inventory item identified by SKU (eBay PUT semantics are upsert).",
72503
- parameters: {
72504
- type: "object",
72505
- properties: {
72506
- sku: { type: "string", description: "Seller-defined inventory SKU." },
72507
- marketplaceId: { type: "string", description: "Marketplace id, e.g. EBAY_US. Defaults to Content-Language en-US." },
72508
- item: {
72509
- type: "object",
72510
- description: "Inventory item payload (product, condition, availability, packageWeightAndSize)."
72511
- }
72512
- },
72513
- required: ["sku", "item"]
72514
- },
72515
- request: {
72516
- method: "PUT",
72517
- path: "sell/inventory/v1/inventory_item/{sku}",
72518
- headers: {
72519
- "content-language": "en-US",
72520
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72521
- },
72522
- body: "{item}"
72523
- },
72524
- cas: "native-idempotency",
72525
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72526
- },
72527
- {
72528
- name: "inventory_items.delete",
72529
- class: "mutation",
72530
- description: "Delete an inventory item and all of its offers by SKU.",
72531
- parameters: {
72532
- type: "object",
72533
- properties: {
72534
- sku: { type: "string" }
72535
- },
72536
- required: ["sku"]
72537
- },
72538
- request: {
72539
- method: "DELETE",
72540
- path: "sell/inventory/v1/inventory_item/{sku}"
72541
- },
72542
- cas: "optimistic-read-verify",
72543
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72544
- },
72545
- {
72546
- name: "offers.search",
72547
- class: "read",
72548
- description: "List offers (listings) attached to a given inventory SKU with pagination.",
72549
- parameters: {
72550
- type: "object",
72551
- properties: {
72552
- sku: { type: "string", description: "Inventory SKU whose offers to list." },
72553
- marketplace_id: { type: "string", description: "Marketplace filter, e.g. EBAY_US." },
72554
- format: { type: "string", enum: ["FIXED_PRICE", "AUCTION"] },
72555
- limit: { type: "integer", minimum: 1, maximum: 200 },
72556
- offset: { type: "integer", minimum: 0 }
72557
- },
72558
- required: ["sku"]
72559
- },
72560
- request: {
72561
- method: "GET",
72562
- path: "sell/inventory/v1/offer",
72563
- query: {
72564
- sku: "{sku}",
72565
- marketplace_id: "{marketplace_id}",
72566
- format: "{format}",
72567
- limit: "{limit}",
72568
- offset: "{offset}"
72569
- }
72570
- },
72571
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72572
- },
72573
- {
72574
- name: "offers.publish",
72575
- class: "mutation",
72576
- description: "Publish an offer, converting it into an active eBay listing.",
72577
- parameters: {
72578
- type: "object",
72579
- properties: {
72580
- offerId: { type: "string", description: "Unique identifier of the offer to publish." }
72581
- },
72582
- required: ["offerId"]
72583
- },
72584
- request: {
72585
- method: "POST",
72586
- path: "sell/inventory/v1/offer/{offerId}/publish"
72587
- },
72588
- cas: "native-idempotency",
72589
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72590
- },
72591
- {
72592
- name: "orders.search",
72593
- class: "read",
72594
- description: "List fulfillment orders for the connected seller with optional filters and pagination.",
72595
- parameters: {
72596
- type: "object",
72597
- properties: {
72598
- filter: {
72599
- type: "string",
72600
- description: 'eBay fulfillment filter expression, e.g. "creationdate:[2026-01-01T00:00:00.000Z..]" or "orderfulfillmentstatus:{NOT_STARTED|IN_PROGRESS}".'
72601
- },
72602
- orderIds: { type: "string", description: "Comma-separated list of order ids to fetch." },
72603
- fieldGroups: { type: "string", description: "Optional response projection, e.g. TAX_BREAKDOWN." },
72604
- marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
72605
- limit: { type: "integer", minimum: 1, maximum: 1e3 },
72606
- offset: { type: "integer", minimum: 0 }
72607
- }
72608
- },
72609
- request: {
72610
- method: "GET",
72611
- path: "sell/fulfillment/v1/order",
72612
- headers: {
72613
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72614
- },
72615
- query: {
72616
- filter: "{filter}",
72617
- orderIds: "{orderIds}",
72618
- fieldGroups: "{fieldGroups}",
72619
- limit: "{limit}",
72620
- offset: "{offset}"
72621
- }
72622
- },
72623
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
72624
- },
72625
- {
72626
- name: "orders.get",
72627
- class: "read",
72628
- description: "Read a single fulfillment order by id.",
72629
- parameters: {
72630
- type: "object",
72631
- properties: {
72632
- orderId: { type: "string" },
72633
- fieldGroups: { type: "string", description: "Optional response projection, e.g. TAX_BREAKDOWN." },
72634
- marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." }
72635
- },
72636
- required: ["orderId"]
72637
- },
72638
- request: {
72639
- method: "GET",
72640
- path: "sell/fulfillment/v1/order/{orderId}",
72641
- headers: {
72642
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72643
- },
72644
- query: {
72645
- fieldGroups: "{fieldGroups}"
72646
- }
72647
- },
72648
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
72649
- },
72650
- {
72651
- name: "orders.ship",
72652
- class: "mutation",
72653
- description: "Create a shipping fulfillment for an order \u2014 records carrier, tracking, and the line items shipped.",
72654
- parameters: {
72655
- type: "object",
72656
- properties: {
72657
- orderId: { type: "string" },
72658
- marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
72659
- fulfillment: {
72660
- type: "object",
72661
- description: "Shipping fulfillment payload (lineItems, shippedDate, shippingCarrierCode, trackingNumber)."
72662
- }
72663
- },
72664
- required: ["orderId", "fulfillment"]
72665
- },
72666
- request: {
72667
- method: "POST",
72668
- path: "sell/fulfillment/v1/order/{orderId}/shipping_fulfillment",
72669
- headers: {
72670
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72671
- },
72672
- body: "{fulfillment}"
72673
- },
72674
- cas: "native-idempotency",
72675
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
72676
- },
72677
- {
72678
- name: "identity.get",
72679
- class: "read",
72680
- description: "Read the connected eBay user identity (account type, registration marketplace, business / individual flags).",
72681
- parameters: {
72682
- type: "object",
72683
- properties: {}
72684
- },
72685
- request: {
72686
- method: "GET",
72687
- path: "commerce/identity/v1/user/"
72688
- },
72689
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/commerce.identity.readonly"]
72690
- },
72691
- {
72692
- name: "inventory.update",
72693
- class: "mutation",
72694
- description: "Bulk-update price and/or available quantity for one or more inventory items / offers.",
72695
- parameters: {
72696
- type: "object",
72697
- properties: {
72698
- marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." },
72699
- requests: {
72700
- type: "array",
72701
- description: "eBay PriceQuantity request array. Each entry targets a SKU and/or offerId with new ship-to-locationAvailability / price values.",
72702
- items: { type: "object" }
72703
- }
72704
- },
72705
- required: ["requests"]
72706
- },
72707
- request: {
72708
- method: "POST",
72709
- path: "sell/inventory/v1/bulk_update_price_quantity",
72710
- headers: {
72711
- "content-language": "en-US",
72712
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72713
- },
72714
- body: { requests: "{requests}" }
72715
- },
72716
- cas: "native-idempotency",
72717
- externalEffect: true,
72718
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72719
- },
72720
- {
72721
- name: "orders.cancel",
72722
- class: "mutation",
72723
- description: "Request order cancellation via the Post-Order Cancellation API. Sellers can request cancellation on unshipped orders.",
72724
- parameters: {
72725
- type: "object",
72726
- properties: {
72727
- legacyOrderId: {
72728
- type: "string",
72729
- description: "eBay legacy (string) order id the cancellation request applies to."
72730
- },
72731
- cancelReason: {
72732
- type: "string",
72733
- description: "Reason for the cancellation, e.g. OUT_OF_STOCK_OR_CANNOT_FULFILL, BUYER_ASKED_CANCEL, ADDRESS_ISSUES."
72734
- },
72735
- marketplaceId: { type: "string", description: "Marketplace id header override, e.g. EBAY_US." }
72736
- },
72737
- required: ["legacyOrderId", "cancelReason"]
72738
- },
72739
- request: {
72740
- method: "POST",
72741
- path: "post-order/v2/cancellation",
72742
- headers: {
72743
- "x-ebay-c-marketplace-id": "{marketplaceId}"
72744
- },
72745
- body: {
72746
- legacyOrderId: "{legacyOrderId}",
72747
- cancelReason: "{cancelReason}"
72748
- }
72749
- },
72750
- cas: "native-idempotency",
72751
- externalEffect: true,
72752
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.fulfillment"]
72753
- },
72754
- {
72755
- name: "listing.end",
72756
- class: "mutation",
72757
- description: "End an active listing by withdrawing its offer.",
72758
- parameters: {
72759
- type: "object",
72760
- properties: {
72761
- offerId: { type: "string", description: "Unique identifier of the offer (active listing) to withdraw." }
72762
- },
72763
- required: ["offerId"]
72764
- },
72765
- request: {
72766
- method: "POST",
72767
- path: "sell/inventory/v1/offer/{offerId}/withdraw"
72768
- },
72769
- cas: "native-idempotency",
72770
- externalEffect: true,
72771
- requiredScopes: ["https://api.ebay.com/oauth/api_scope/sell.inventory"]
72772
- }
72773
- ]
72774
- });
72775
-
72776
73696
  // src/connectors/adapters/quickzu.ts
72777
73697
  var quickzuConnector = declarativeRestConnector({
72778
73698
  kind: "quickzu",
@@ -108073,320 +108993,6 @@ var googleSearchConnector = declarativeRestConnector({
108073
108993
  ]
108074
108994
  });
108075
108995
 
108076
- // src/connectors/adapters/google-my-business.ts
108077
- var googleMyBusinessConnector = declarativeRestConnector({
108078
- kind: "google-my-business",
108079
- displayName: "Google My Business",
108080
- description: "Manage Google Business Profile (formerly Google My Business): list accounts and locations, read customer reviews, and post owner replies.",
108081
- auth: {
108082
- kind: "oauth2",
108083
- authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
108084
- tokenUrl: "https://oauth2.googleapis.com/token",
108085
- scopes: ["https://www.googleapis.com/auth/business.manage"],
108086
- clientIdEnv: "GOOGLE_MY_BUSINESS_OAUTH_CLIENT_ID",
108087
- clientSecretEnv: "GOOGLE_MY_BUSINESS_OAUTH_CLIENT_SECRET"
108088
- },
108089
- category: "crm",
108090
- defaultConsistencyModel: "authoritative",
108091
- baseUrl: "https://mybusinessaccountmanagement.googleapis.com",
108092
- test: { method: "GET", path: "/v1/accounts" },
108093
- capabilities: [
108094
- {
108095
- name: "accounts.list",
108096
- class: "read",
108097
- description: "List Business Profile accounts the authenticated user owns or co-manages.",
108098
- parameters: {
108099
- type: "object",
108100
- properties: {
108101
- pageSize: { type: "integer", minimum: 1, maximum: 50 },
108102
- pageToken: { type: "string" },
108103
- filter: { type: "string" }
108104
- },
108105
- required: []
108106
- },
108107
- request: {
108108
- method: "GET",
108109
- path: "/v1/accounts",
108110
- query: {
108111
- pageSize: "{pageSize}",
108112
- pageToken: "{pageToken}",
108113
- filter: "{filter}"
108114
- }
108115
- },
108116
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108117
- },
108118
- {
108119
- name: "locations.list",
108120
- class: "read",
108121
- description: "List locations under a Business Profile account (Business Information API).",
108122
- parameters: {
108123
- type: "object",
108124
- properties: {
108125
- accountId: {
108126
- type: "string",
108127
- description: "Bare account id (the trailing segment of `accounts/{accountId}`)."
108128
- },
108129
- pageSize: { type: "integer", minimum: 1, maximum: 100 },
108130
- pageToken: { type: "string" },
108131
- filter: { type: "string" },
108132
- readMask: {
108133
- type: "string",
108134
- description: "Field mask selecting which Location fields to return, e.g. `name,title,storefrontAddress`."
108135
- }
108136
- },
108137
- required: ["accountId", "readMask"]
108138
- },
108139
- request: {
108140
- method: "GET",
108141
- path: "https://mybusinessbusinessinformation.googleapis.com/v1/accounts/{accountId}/locations",
108142
- query: {
108143
- pageSize: "{pageSize}",
108144
- pageToken: "{pageToken}",
108145
- filter: "{filter}",
108146
- readMask: "{readMask}"
108147
- }
108148
- },
108149
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108150
- },
108151
- {
108152
- name: "reviews.list",
108153
- class: "read",
108154
- description: "List customer reviews for a location (legacy v4 endpoint \u2014 Google never migrated reviews onto the v1 split APIs).",
108155
- parameters: {
108156
- type: "object",
108157
- properties: {
108158
- accountId: { type: "string" },
108159
- locationId: { type: "string" },
108160
- pageSize: { type: "integer", minimum: 1, maximum: 50 },
108161
- pageToken: { type: "string" },
108162
- orderBy: {
108163
- type: "string",
108164
- description: "Sort order, e.g. `updateTime desc` or `rating desc`."
108165
- }
108166
- },
108167
- required: ["accountId", "locationId"]
108168
- },
108169
- request: {
108170
- method: "GET",
108171
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews",
108172
- query: {
108173
- pageSize: "{pageSize}",
108174
- pageToken: "{pageToken}",
108175
- orderBy: "{orderBy}"
108176
- }
108177
- },
108178
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108179
- },
108180
- {
108181
- name: "reviews.get",
108182
- class: "read",
108183
- description: "Get a single customer review by id.",
108184
- parameters: {
108185
- type: "object",
108186
- properties: {
108187
- accountId: { type: "string" },
108188
- locationId: { type: "string" },
108189
- reviewId: { type: "string" }
108190
- },
108191
- required: ["accountId", "locationId", "reviewId"]
108192
- },
108193
- request: {
108194
- method: "GET",
108195
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}"
108196
- },
108197
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108198
- },
108199
- {
108200
- // Mirrors the activepieces `create.reply` action (`createReply`).
108201
- // The legacy v4 endpoint uses PUT for upsert semantics: posting the
108202
- // same reply twice replaces (not duplicates) the owner response, which
108203
- // makes this naturally idempotent on (locationId, reviewId).
108204
- name: "reviews.reply.create",
108205
- class: "mutation",
108206
- description: "Create or replace the owner reply on a customer review (idempotent upsert on the review name).",
108207
- parameters: {
108208
- type: "object",
108209
- properties: {
108210
- accountId: { type: "string" },
108211
- locationId: { type: "string" },
108212
- reviewId: { type: "string" },
108213
- comment: {
108214
- type: "string",
108215
- description: "Reply text, up to 4096 characters.",
108216
- maxLength: 4096
108217
- }
108218
- },
108219
- required: ["accountId", "locationId", "reviewId", "comment"]
108220
- },
108221
- request: {
108222
- method: "PUT",
108223
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply",
108224
- body: { comment: "{comment}" }
108225
- },
108226
- cas: "native-idempotency",
108227
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108228
- },
108229
- {
108230
- name: "reviews.reply.delete",
108231
- class: "mutation",
108232
- description: "Delete the owner reply on a customer review.",
108233
- parameters: {
108234
- type: "object",
108235
- properties: {
108236
- accountId: { type: "string" },
108237
- locationId: { type: "string" },
108238
- reviewId: { type: "string" }
108239
- },
108240
- required: ["accountId", "locationId", "reviewId"]
108241
- },
108242
- request: {
108243
- method: "DELETE",
108244
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/reviews/{reviewId}/reply"
108245
- },
108246
- cas: "native-idempotency",
108247
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108248
- },
108249
- {
108250
- // GBP "posts" — short-lived updates that surface on the storefront's
108251
- // listing. The legacy v4 endpoint is the only published surface; the
108252
- // Business Posts v1 API was retired in 2022 and Google never produced a
108253
- // replacement. Repeating a POST produces a duplicate localPost, so the
108254
- // MutationGuard idempotency-key layer must dedupe above the connector.
108255
- name: "localPosts.create",
108256
- class: "mutation",
108257
- description: "Publish a Google Business Profile local post (status update, offer, event, or call-to-action) on a location.",
108258
- parameters: {
108259
- type: "object",
108260
- properties: {
108261
- accountId: { type: "string" },
108262
- locationId: { type: "string" },
108263
- languageCode: {
108264
- type: "string",
108265
- description: 'BCP-47 language code, e.g. "en".'
108266
- },
108267
- summary: {
108268
- type: "string",
108269
- description: "Post body text (up to 1,500 characters).",
108270
- maxLength: 1500
108271
- },
108272
- topicType: {
108273
- type: "string",
108274
- description: "STANDARD | EVENT | OFFER | ALERT."
108275
- },
108276
- callToAction: {
108277
- type: "object",
108278
- description: 'Optional { actionType, url } block, e.g. { actionType: "LEARN_MORE", url: "https://..." }.'
108279
- },
108280
- event: {
108281
- type: "object",
108282
- description: "For topicType=EVENT: { title, schedule: { startDate, endDate, ... } }."
108283
- },
108284
- offer: {
108285
- type: "object",
108286
- description: "For topicType=OFFER: { couponCode, redeemOnlineUrl, termsConditions }."
108287
- },
108288
- media: {
108289
- type: "array",
108290
- description: "Optional MediaItem list to attach images/video to the post."
108291
- }
108292
- },
108293
- required: ["accountId", "locationId", "languageCode", "summary"]
108294
- },
108295
- request: {
108296
- method: "POST",
108297
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/localPosts",
108298
- body: {
108299
- languageCode: "{languageCode}",
108300
- summary: "{summary}",
108301
- topicType: "{topicType}",
108302
- callToAction: "{callToAction}",
108303
- event: "{event}",
108304
- offer: "{offer}",
108305
- media: "{media}"
108306
- }
108307
- },
108308
- // GBP localPosts has no requestId / idempotency-key on POST; consecutive
108309
- // calls produce duplicate posts. MutationGuard's idempotency-key layer
108310
- // is the only guard.
108311
- cas: "none",
108312
- externalEffect: true,
108313
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108314
- },
108315
- {
108316
- name: "localPosts.delete",
108317
- class: "mutation",
108318
- description: "Delete a local post from a location. Repeating the call on an already-deleted post yields 404 but is idempotent in effect.",
108319
- parameters: {
108320
- type: "object",
108321
- properties: {
108322
- accountId: { type: "string" },
108323
- locationId: { type: "string" },
108324
- localPostId: { type: "string" }
108325
- },
108326
- required: ["accountId", "locationId", "localPostId"]
108327
- },
108328
- request: {
108329
- method: "DELETE",
108330
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/localPosts/{localPostId}"
108331
- },
108332
- cas: "native-idempotency",
108333
- externalEffect: true,
108334
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108335
- },
108336
- {
108337
- // GBP "media" — photos/videos on a location's profile. The legacy v4
108338
- // /media endpoint accepts a MediaItem body with either a sourceUrl
108339
- // (Google fetches it) or a reference from /media:startUpload (multi-step
108340
- // resumable upload). We expose the sourceUrl path because it's a single
108341
- // request the declarative-rest engine can model cleanly; bytestream
108342
- // upload is a separate hand-rolled adapter when needed.
108343
- name: "media.create",
108344
- class: "mutation",
108345
- description: "Upload a photo or video to a Google Business Profile location via the v4 /media endpoint. Pass a sourceUrl Google can fetch (HTTPS, publicly reachable). For bytestream uploads use the /media:startUpload + PUT bytestream flow instead.",
108346
- parameters: {
108347
- type: "object",
108348
- properties: {
108349
- accountId: { type: "string" },
108350
- locationId: { type: "string" },
108351
- mediaFormat: {
108352
- type: "string",
108353
- description: "PHOTO | VIDEO."
108354
- },
108355
- locationAssociation: {
108356
- type: "object",
108357
- description: 'Where the media attaches, e.g. { category: "EXTERIOR" } or { priceListItemId: "..." }.'
108358
- },
108359
- sourceUrl: {
108360
- type: "string",
108361
- description: "Public HTTPS URL Google should fetch the media from."
108362
- },
108363
- description: {
108364
- type: "string",
108365
- description: "Optional caption shown alongside the media."
108366
- }
108367
- },
108368
- required: ["accountId", "locationId", "mediaFormat", "sourceUrl"]
108369
- },
108370
- request: {
108371
- method: "POST",
108372
- path: "https://mybusiness.googleapis.com/v4/accounts/{accountId}/locations/{locationId}/media",
108373
- body: {
108374
- mediaFormat: "{mediaFormat}",
108375
- locationAssociation: "{locationAssociation}",
108376
- sourceUrl: "{sourceUrl}",
108377
- description: "{description}"
108378
- }
108379
- },
108380
- // GBP media POST has no idempotency token; consecutive calls produce
108381
- // duplicate media items. MutationGuard's idempotency-key layer is the
108382
- // only guard.
108383
- cas: "none",
108384
- externalEffect: true,
108385
- requiredScopes: ["https://www.googleapis.com/auth/business.manage"]
108386
- }
108387
- ]
108388
- });
108389
-
108390
108996
  // src/connectors/adapters/greenpt.ts
108391
108997
  var greenptConnector = declarativeRestConnector({
108392
108998
  kind: "greenpt",
@@ -109340,344 +109946,6 @@ var hashiCorpVaultConnector = declarativeRestConnector({
109340
109946
  ]
109341
109947
  });
109342
109948
 
109343
- // src/connectors/adapters/harvest.ts
109344
- var harvestConnector = declarativeRestConnector({
109345
- kind: "harvest",
109346
- displayName: "Harvest",
109347
- description: "Read Harvest invoices, projects, tasks, clients, estimates, expenses, time entries, roles, users, and run the uninvoiced report.",
109348
- auth: {
109349
- kind: "oauth2",
109350
- authorizationUrl: "https://id.getharvest.com/oauth2/authorize",
109351
- tokenUrl: "https://id.getharvest.com/api/v2/oauth2/token",
109352
- scopes: ["harvest:all"],
109353
- clientIdEnv: "HARVEST_OAUTH_CLIENT_ID",
109354
- clientSecretEnv: "HARVEST_OAUTH_CLIENT_SECRET"
109355
- },
109356
- category: "other",
109357
- defaultConsistencyModel: "authoritative",
109358
- baseUrl: "https://api.harvestapp.com/v2",
109359
- test: {
109360
- method: "GET",
109361
- path: "/users/me",
109362
- headers: { "Harvest-Account-Id": "{accountId}" }
109363
- },
109364
- capabilities: [
109365
- {
109366
- name: "invoices.get",
109367
- class: "read",
109368
- description: "List invoices in a Harvest account, optionally filtered by client/project/state/date window.",
109369
- parameters: {
109370
- type: "object",
109371
- properties: {
109372
- accountId: { type: "string", description: "Harvest Account ID (sent as the Harvest-Account-Id header)." },
109373
- client_id: { type: "string" },
109374
- project_id: { type: "string" },
109375
- state: { type: "string", enum: ["draft", "open", "paid", "closed"] },
109376
- updated_since: { type: "string", description: "ISO-8601 timestamp." },
109377
- from: { type: "string", description: "ISO-8601 date." },
109378
- to: { type: "string", description: "ISO-8601 date." },
109379
- page: { type: "integer", minimum: 1 },
109380
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109381
- },
109382
- required: ["accountId"]
109383
- },
109384
- request: {
109385
- method: "GET",
109386
- path: "/invoices",
109387
- headers: { "Harvest-Account-Id": "{accountId}" },
109388
- query: {
109389
- client_id: "{client_id}",
109390
- project_id: "{project_id}",
109391
- state: "{state}",
109392
- updated_since: "{updated_since}",
109393
- from: "{from}",
109394
- to: "{to}",
109395
- page: "{page}",
109396
- per_page: "{per_page}"
109397
- }
109398
- },
109399
- requiredScopes: ["harvest:all"]
109400
- },
109401
- {
109402
- name: "projects.get",
109403
- class: "read",
109404
- description: "List projects, optionally filtered by client or active state.",
109405
- parameters: {
109406
- type: "object",
109407
- properties: {
109408
- accountId: { type: "string" },
109409
- is_active: { type: "boolean" },
109410
- client_id: { type: "string" },
109411
- updated_since: { type: "string" },
109412
- page: { type: "integer", minimum: 1 },
109413
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109414
- },
109415
- required: ["accountId"]
109416
- },
109417
- request: {
109418
- method: "GET",
109419
- path: "/projects",
109420
- headers: { "Harvest-Account-Id": "{accountId}" },
109421
- query: {
109422
- is_active: "{is_active}",
109423
- client_id: "{client_id}",
109424
- updated_since: "{updated_since}",
109425
- page: "{page}",
109426
- per_page: "{per_page}"
109427
- }
109428
- },
109429
- requiredScopes: ["harvest:all"]
109430
- },
109431
- {
109432
- name: "tasks.get",
109433
- class: "read",
109434
- description: "List billable/non-billable tasks defined on the Harvest account.",
109435
- parameters: {
109436
- type: "object",
109437
- properties: {
109438
- accountId: { type: "string" },
109439
- is_active: { type: "boolean" },
109440
- updated_since: { type: "string" },
109441
- page: { type: "integer", minimum: 1 },
109442
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109443
- },
109444
- required: ["accountId"]
109445
- },
109446
- request: {
109447
- method: "GET",
109448
- path: "/tasks",
109449
- headers: { "Harvest-Account-Id": "{accountId}" },
109450
- query: {
109451
- is_active: "{is_active}",
109452
- updated_since: "{updated_since}",
109453
- page: "{page}",
109454
- per_page: "{per_page}"
109455
- }
109456
- },
109457
- requiredScopes: ["harvest:all"]
109458
- },
109459
- {
109460
- name: "clients.get",
109461
- class: "read",
109462
- description: "List clients in the Harvest account.",
109463
- parameters: {
109464
- type: "object",
109465
- properties: {
109466
- accountId: { type: "string" },
109467
- is_active: { type: "boolean" },
109468
- updated_since: { type: "string" },
109469
- page: { type: "integer", minimum: 1 },
109470
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109471
- },
109472
- required: ["accountId"]
109473
- },
109474
- request: {
109475
- method: "GET",
109476
- path: "/clients",
109477
- headers: { "Harvest-Account-Id": "{accountId}" },
109478
- query: {
109479
- is_active: "{is_active}",
109480
- updated_since: "{updated_since}",
109481
- page: "{page}",
109482
- per_page: "{per_page}"
109483
- }
109484
- },
109485
- requiredScopes: ["harvest:all"]
109486
- },
109487
- {
109488
- name: "estimates.get",
109489
- class: "read",
109490
- description: "List estimates, optionally filtered by client/state/updated_since.",
109491
- parameters: {
109492
- type: "object",
109493
- properties: {
109494
- accountId: { type: "string" },
109495
- client_id: { type: "string" },
109496
- state: { type: "string", enum: ["draft", "sent", "accepted", "declined"] },
109497
- updated_since: { type: "string" },
109498
- from: { type: "string" },
109499
- to: { type: "string" },
109500
- page: { type: "integer", minimum: 1 },
109501
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109502
- },
109503
- required: ["accountId"]
109504
- },
109505
- request: {
109506
- method: "GET",
109507
- path: "/estimates",
109508
- headers: { "Harvest-Account-Id": "{accountId}" },
109509
- query: {
109510
- client_id: "{client_id}",
109511
- state: "{state}",
109512
- updated_since: "{updated_since}",
109513
- from: "{from}",
109514
- to: "{to}",
109515
- page: "{page}",
109516
- per_page: "{per_page}"
109517
- }
109518
- },
109519
- requiredScopes: ["harvest:all"]
109520
- },
109521
- {
109522
- name: "expenses.get",
109523
- class: "read",
109524
- description: "List expenses in the account, with optional user/client/project/billed/date filters.",
109525
- parameters: {
109526
- type: "object",
109527
- properties: {
109528
- accountId: { type: "string" },
109529
- user_id: { type: "string" },
109530
- client_id: { type: "string" },
109531
- project_id: { type: "string" },
109532
- is_billed: { type: "boolean" },
109533
- updated_since: { type: "string" },
109534
- from: { type: "string" },
109535
- to: { type: "string" },
109536
- page: { type: "integer", minimum: 1 },
109537
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109538
- },
109539
- required: ["accountId"]
109540
- },
109541
- request: {
109542
- method: "GET",
109543
- path: "/expenses",
109544
- headers: { "Harvest-Account-Id": "{accountId}" },
109545
- query: {
109546
- user_id: "{user_id}",
109547
- client_id: "{client_id}",
109548
- project_id: "{project_id}",
109549
- is_billed: "{is_billed}",
109550
- updated_since: "{updated_since}",
109551
- from: "{from}",
109552
- to: "{to}",
109553
- page: "{page}",
109554
- per_page: "{per_page}"
109555
- }
109556
- },
109557
- requiredScopes: ["harvest:all"]
109558
- },
109559
- {
109560
- name: "time.entries.get",
109561
- class: "read",
109562
- description: "List time entries with optional user/client/project/task/billed/running/date filters.",
109563
- parameters: {
109564
- type: "object",
109565
- properties: {
109566
- accountId: { type: "string" },
109567
- user_id: { type: "string" },
109568
- client_id: { type: "string" },
109569
- project_id: { type: "string" },
109570
- task_id: { type: "string" },
109571
- is_billed: { type: "boolean" },
109572
- is_running: { type: "boolean" },
109573
- updated_since: { type: "string" },
109574
- from: { type: "string" },
109575
- to: { type: "string" },
109576
- page: { type: "integer", minimum: 1 },
109577
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109578
- },
109579
- required: ["accountId"]
109580
- },
109581
- request: {
109582
- method: "GET",
109583
- path: "/time_entries",
109584
- headers: { "Harvest-Account-Id": "{accountId}" },
109585
- query: {
109586
- user_id: "{user_id}",
109587
- client_id: "{client_id}",
109588
- project_id: "{project_id}",
109589
- task_id: "{task_id}",
109590
- is_billed: "{is_billed}",
109591
- is_running: "{is_running}",
109592
- updated_since: "{updated_since}",
109593
- from: "{from}",
109594
- to: "{to}",
109595
- page: "{page}",
109596
- per_page: "{per_page}"
109597
- }
109598
- },
109599
- requiredScopes: ["harvest:all"]
109600
- },
109601
- {
109602
- name: "roles.get",
109603
- class: "read",
109604
- description: "List user roles defined in the Harvest account.",
109605
- parameters: {
109606
- type: "object",
109607
- properties: {
109608
- accountId: { type: "string" },
109609
- page: { type: "integer", minimum: 1 },
109610
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109611
- },
109612
- required: ["accountId"]
109613
- },
109614
- request: {
109615
- method: "GET",
109616
- path: "/roles",
109617
- headers: { "Harvest-Account-Id": "{accountId}" },
109618
- query: { page: "{page}", per_page: "{per_page}" }
109619
- },
109620
- requiredScopes: ["harvest:all"]
109621
- },
109622
- {
109623
- name: "users.get",
109624
- class: "read",
109625
- description: "List Harvest users in the account.",
109626
- parameters: {
109627
- type: "object",
109628
- properties: {
109629
- accountId: { type: "string" },
109630
- is_active: { type: "boolean" },
109631
- updated_since: { type: "string" },
109632
- page: { type: "integer", minimum: 1 },
109633
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109634
- },
109635
- required: ["accountId"]
109636
- },
109637
- request: {
109638
- method: "GET",
109639
- path: "/users",
109640
- headers: { "Harvest-Account-Id": "{accountId}" },
109641
- query: {
109642
- is_active: "{is_active}",
109643
- updated_since: "{updated_since}",
109644
- page: "{page}",
109645
- per_page: "{per_page}"
109646
- }
109647
- },
109648
- requiredScopes: ["harvest:all"]
109649
- },
109650
- {
109651
- name: "reports.uninvoiced",
109652
- class: "read",
109653
- description: "Pull the uninvoiced report for a date window \u2014 totals of uninvoiced hours/expenses per project.",
109654
- parameters: {
109655
- type: "object",
109656
- properties: {
109657
- accountId: { type: "string" },
109658
- from: { type: "string", description: "Window start date (YYYY-MM-DD)." },
109659
- to: { type: "string", description: "Window end date (YYYY-MM-DD)." },
109660
- page: { type: "integer", minimum: 1 },
109661
- per_page: { type: "integer", minimum: 1, maximum: 2e3 }
109662
- },
109663
- required: ["accountId", "from", "to"]
109664
- },
109665
- request: {
109666
- method: "GET",
109667
- path: "/reports/uninvoiced",
109668
- headers: { "Harvest-Account-Id": "{accountId}" },
109669
- query: {
109670
- from: "{from}",
109671
- to: "{to}",
109672
- page: "{page}",
109673
- per_page: "{per_page}"
109674
- }
109675
- },
109676
- requiredScopes: ["harvest:all"]
109677
- }
109678
- ]
109679
- });
109680
-
109681
109949
  // src/connectors/adapters/heymarket-sms.ts
109682
109950
  var heymarketSmsConnector = declarativeRestConnector({
109683
109951
  kind: "heymarket-sms",
@@ -134848,255 +135116,6 @@ var talkableConnector = declarativeRestConnector({
134848
135116
  ]
134849
135117
  });
134850
135118
 
134851
- // src/connectors/adapters/ticktick.ts
134852
- var ticktickConnector = declarativeRestConnector({
134853
- kind: "ticktick",
134854
- displayName: "TickTick",
134855
- description: "Create, update, complete, and delete tasks in TickTick.",
134856
- auth: {
134857
- kind: "oauth2",
134858
- authorizationUrl: "https://ticktick.com/oauth/authorize",
134859
- tokenUrl: "https://ticktick.com/oauth/token",
134860
- scopes: ["tasks:read", "tasks:write"],
134861
- clientIdEnv: "TICKTICK_OAUTH_CLIENT_ID",
134862
- clientSecretEnv: "TICKTICK_OAUTH_CLIENT_SECRET"
134863
- },
134864
- category: "other",
134865
- defaultConsistencyModel: "authoritative",
134866
- baseUrl: "https://api.ticktick.com/v2",
134867
- test: { method: "GET", path: "/user" },
134868
- capabilities: [
134869
- {
134870
- name: "tasks.create",
134871
- class: "mutation",
134872
- description: "Create a new task in TickTick.",
134873
- parameters: {
134874
- type: "object",
134875
- properties: {
134876
- title: { type: "string" },
134877
- projectId: { type: "string" },
134878
- description: { type: "string" },
134879
- priority: { type: "integer" },
134880
- dueDate: { type: "string" }
134881
- },
134882
- required: ["title", "projectId"]
134883
- },
134884
- request: {
134885
- method: "POST",
134886
- path: "/task",
134887
- body: {
134888
- title: "{title}",
134889
- projectId: "{projectId}",
134890
- description: "{description}",
134891
- priority: "{priority}",
134892
- dueDate: "{dueDate}"
134893
- }
134894
- },
134895
- cas: "native-idempotency"
134896
- },
134897
- {
134898
- name: "tasks.update",
134899
- class: "mutation",
134900
- description: "Update an existing task in TickTick.",
134901
- parameters: {
134902
- type: "object",
134903
- properties: {
134904
- taskId: { type: "string" },
134905
- title: { type: "string" },
134906
- description: { type: "string" },
134907
- priority: { type: "integer" },
134908
- dueDate: { type: "string" }
134909
- },
134910
- required: ["taskId"]
134911
- },
134912
- request: {
134913
- method: "POST",
134914
- path: "/task/{taskId}",
134915
- body: {
134916
- title: "{title}",
134917
- description: "{description}",
134918
- priority: "{priority}",
134919
- dueDate: "{dueDate}"
134920
- }
134921
- },
134922
- cas: "optimistic-read-verify"
134923
- },
134924
- {
134925
- name: "tasks.get",
134926
- class: "read",
134927
- description: "Retrieve a specific task from TickTick.",
134928
- parameters: {
134929
- type: "object",
134930
- properties: {
134931
- taskId: { type: "string" }
134932
- },
134933
- required: ["taskId"]
134934
- },
134935
- request: {
134936
- method: "GET",
134937
- path: "/task/{taskId}"
134938
- }
134939
- },
134940
- {
134941
- name: "tasks.find",
134942
- class: "read",
134943
- description: "Find tasks in a TickTick project by query.",
134944
- parameters: {
134945
- type: "object",
134946
- properties: {
134947
- projectId: { type: "string" },
134948
- query: { type: "string" },
134949
- limit: { type: "integer" }
134950
- },
134951
- required: ["projectId"]
134952
- },
134953
- request: {
134954
- method: "GET",
134955
- path: "/project/{projectId}/tasks",
134956
- query: {
134957
- q: "{query}",
134958
- limit: "{limit}"
134959
- }
134960
- }
134961
- },
134962
- {
134963
- name: "tasks.complete",
134964
- class: "mutation",
134965
- description: "Mark a task as complete in TickTick.",
134966
- parameters: {
134967
- type: "object",
134968
- properties: {
134969
- taskId: { type: "string" }
134970
- },
134971
- required: ["taskId"]
134972
- },
134973
- request: {
134974
- method: "POST",
134975
- path: "/task/{taskId}/complete"
134976
- },
134977
- cas: "optimistic-read-verify"
134978
- },
134979
- {
134980
- name: "tasks.delete",
134981
- class: "mutation",
134982
- description: "Delete a task from TickTick.",
134983
- parameters: {
134984
- type: "object",
134985
- properties: {
134986
- taskId: { type: "string" }
134987
- },
134988
- required: ["taskId"]
134989
- },
134990
- request: {
134991
- method: "DELETE",
134992
- path: "/task/{taskId}"
134993
- },
134994
- cas: "optimistic-read-verify"
134995
- },
134996
- {
134997
- name: "projects.get",
134998
- class: "read",
134999
- description: "Retrieve a specific project from TickTick.",
135000
- parameters: {
135001
- type: "object",
135002
- properties: {
135003
- projectId: { type: "string" }
135004
- },
135005
- required: ["projectId"]
135006
- },
135007
- request: {
135008
- method: "GET",
135009
- path: "/project/{projectId}"
135010
- }
135011
- },
135012
- {
135013
- name: "projects.create",
135014
- class: "mutation",
135015
- description: "Create a new project (list) in TickTick.",
135016
- parameters: {
135017
- type: "object",
135018
- properties: {
135019
- name: { type: "string" },
135020
- color: { type: "string", description: "Hex color code for the project (optional)." },
135021
- viewMode: { type: "string", description: "View mode, e.g. 'list', 'kanban', 'timeline' (optional)." },
135022
- kind: { type: "string", description: "Project kind, e.g. 'TASK' or 'NOTE' (optional)." }
135023
- },
135024
- required: ["name"]
135025
- },
135026
- request: {
135027
- method: "POST",
135028
- path: "/project",
135029
- body: "args"
135030
- },
135031
- cas: "native-idempotency",
135032
- externalEffect: true
135033
- },
135034
- {
135035
- name: "projects.update",
135036
- class: "mutation",
135037
- description: "Update an existing project in TickTick.",
135038
- parameters: {
135039
- type: "object",
135040
- properties: {
135041
- projectId: { type: "string" },
135042
- name: { type: "string", description: "New project name (optional)." },
135043
- color: { type: "string", description: "Hex color code for the project (optional)." },
135044
- viewMode: { type: "string", description: "View mode (optional)." },
135045
- kind: { type: "string", description: "Project kind (optional)." }
135046
- },
135047
- required: ["projectId"]
135048
- },
135049
- request: {
135050
- method: "POST",
135051
- path: "/project/{projectId}",
135052
- body: "args"
135053
- },
135054
- cas: "native-idempotency",
135055
- externalEffect: true
135056
- },
135057
- {
135058
- name: "projects.delete",
135059
- class: "mutation",
135060
- description: "Delete a project from TickTick.",
135061
- parameters: {
135062
- type: "object",
135063
- properties: {
135064
- projectId: { type: "string" }
135065
- },
135066
- required: ["projectId"]
135067
- },
135068
- request: {
135069
- method: "DELETE",
135070
- path: "/project/{projectId}"
135071
- },
135072
- cas: "native-idempotency",
135073
- externalEffect: true
135074
- },
135075
- {
135076
- name: "tasks.move",
135077
- class: "mutation",
135078
- description: "Move a task to another project.",
135079
- parameters: {
135080
- type: "object",
135081
- properties: {
135082
- taskId: { type: "string" },
135083
- projectId: { type: "string", description: "Destination project ID." }
135084
- },
135085
- required: ["taskId", "projectId"]
135086
- },
135087
- request: {
135088
- method: "POST",
135089
- path: "/task/{taskId}/move",
135090
- body: {
135091
- projectId: "{projectId}"
135092
- }
135093
- },
135094
- cas: "native-idempotency",
135095
- externalEffect: true
135096
- }
135097
- ]
135098
- });
135099
-
135100
135119
  // src/connectors/adapters/teable.ts
135101
135120
  var teableConnector = declarativeRestConnector({
135102
135121
  kind: "teable",
@@ -146165,6 +146184,7 @@ export {
146165
146184
  docusignConnector,
146166
146185
  dialpadConnector,
146167
146186
  dropboxConnector,
146187
+ ebayConnector,
146168
146188
  etsyConnector,
146169
146189
  fathomConnector,
146170
146190
  fireberryConnector,
@@ -146200,6 +146220,7 @@ export {
146200
146220
  googleDrive,
146201
146221
  googleForms,
146202
146222
  googleMeetConnector,
146223
+ googleMyBusinessConnector,
146203
146224
  googleSearchConsoleConnector,
146204
146225
  googleSheets,
146205
146226
  googleSlidesConnector,
@@ -146207,6 +146228,7 @@ export {
146207
146228
  googlechatConnector,
146208
146229
  granolaConnector,
146209
146230
  hellosign,
146231
+ harvestConnector,
146210
146232
  helpscoutConnector,
146211
146233
  hubspot,
146212
146234
  httpConnector,
@@ -146287,6 +146309,7 @@ export {
146287
146309
  squareConnector,
146288
146310
  stripePackConnector,
146289
146311
  tallyConnector,
146312
+ ticktickConnector,
146290
146313
  tlDvConnector,
146291
146314
  todoistConnector,
146292
146315
  trelloConnector,
@@ -146360,7 +146383,6 @@ export {
146360
146383
  facebookPagesConnector,
146361
146384
  gustoConnector,
146362
146385
  bigcommerceConnector,
146363
- ebayConnector,
146364
146386
  quickzuConnector,
146365
146387
  zagomailConnector,
146366
146388
  zendeskSellConnector,
@@ -146504,14 +146526,12 @@ export {
146504
146526
  ghostcmsConnector,
146505
146527
  gistlyConnector,
146506
146528
  googleSearchConnector,
146507
- googleMyBusinessConnector,
146508
146529
  greenptConnector,
146509
146530
  greipConnector,
146510
146531
  guideliteConnector,
146511
146532
  hastewireConnector,
146512
146533
  heygenConnector,
146513
146534
  hashiCorpVaultConnector,
146514
- harvestConnector,
146515
146535
  heymarketSmsConnector,
146516
146536
  housecallProConnector,
146517
146537
  influencersClubConnector,
@@ -146653,7 +146673,6 @@ export {
146653
146673
  systemeIoConnector,
146654
146674
  tableauConnector,
146655
146675
  talkableConnector,
146656
- ticktickConnector,
146657
146676
  teableConnector,
146658
146677
  telnyxConnector,
146659
146678
  tenzoConnector,
@@ -146722,4 +146741,4 @@ export {
146722
146741
  demandbaseConnector,
146723
146742
  adapters_exports
146724
146743
  };
146725
- //# sourceMappingURL=chunk-N4KK3J7U.js.map
146744
+ //# sourceMappingURL=chunk-GLOAH446.js.map