@tangle-network/agent-integrations 0.53.35 → 0.53.37

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 (50) hide show
  1. package/dist/catalog.d.ts +2 -2
  2. package/dist/catalog.js +8 -8
  3. package/dist/{chunk-N4KK3J7U.js → chunk-E3CAVV2V.js} +1280 -1260
  4. package/dist/{chunk-N4KK3J7U.js.map → chunk-E3CAVV2V.js.map} +1 -1
  5. package/dist/{chunk-ANWNXGVV.js → chunk-EKSAOR2I.js} +2 -2
  6. package/dist/{chunk-XGL345YX.js → chunk-JR2RWYQO.js} +2 -2
  7. package/dist/{chunk-BVHX2E5X.js → chunk-LAD6KGK4.js} +53 -22
  8. package/dist/chunk-LAD6KGK4.js.map +1 -0
  9. package/dist/{chunk-FK4ENHCP.js → chunk-TP4MD4PD.js} +2 -2
  10. package/dist/{chunk-JXFPIZ3O.js → chunk-WE7SQ7PB.js} +18 -4
  11. package/dist/chunk-WE7SQ7PB.js.map +1 -0
  12. package/dist/{chunk-2IU335WP.js → chunk-YEZEIQ6U.js} +23 -4
  13. package/dist/chunk-YEZEIQ6U.js.map +1 -0
  14. package/dist/{chunk-GGKD2W6H.js → chunk-Z3GB2P2B.js} +4 -2
  15. package/dist/chunk-Z3GB2P2B.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 +6 -3
  19. package/dist/connectors/adapters/index.js +2 -2
  20. package/dist/connectors/index.d.ts +14 -4
  21. package/dist/connectors/index.js +6 -4
  22. package/dist/{consumer-DV3XEumb.d.ts → consumer-UnsjK9iM.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-Cx53j2Xp.d.ts} +1 -1
  26. package/dist/coverage-catalog.d.ts +2 -2
  27. package/dist/{importers-B7sdp2Ke.d.ts → importers-YLXwPCz_.d.ts} +1 -1
  28. package/dist/index.d.ts +9 -9
  29. package/dist/index.js +11 -9
  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--7mgjNkq.d.ts} +1 -1
  41. package/dist/{types-C1rgdXiP.d.ts → types-qFsboS2G.d.ts} +16 -1
  42. package/docs/adapter-triage.md +6 -4
  43. package/package.json +1 -1
  44. package/dist/chunk-2IU335WP.js.map +0 -1
  45. package/dist/chunk-BVHX2E5X.js.map +0 -1
  46. package/dist/chunk-GGKD2W6H.js.map +0 -1
  47. package/dist/chunk-JXFPIZ3O.js.map +0 -1
  48. /package/dist/{chunk-ANWNXGVV.js.map → chunk-EKSAOR2I.js.map} +0 -0
  49. /package/dist/{chunk-XGL345YX.js.map → chunk-JR2RWYQO.js.map} +0 -0
  50. /package/dist/{chunk-FK4ENHCP.js.map → chunk-TP4MD4PD.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-WE7SQ7PB.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, {}),
@@ -70196,6 +71463,7 @@ function signHeaders(creds, body, idempotencyKey) {
70196
71463
 
70197
71464
  // src/connectors/adapters/stripe-webhook-receiver.ts
70198
71465
  var stripeWebhookReceiverConnector = {
71466
+ inboundOnly: true,
70199
71467
  manifest: {
70200
71468
  kind: "stripe",
70201
71469
  displayName: "Stripe (inbound events)",
@@ -72426,353 +73694,6 @@ var bigcommerceConnector = declarativeRestConnector({
72426
73694
  ]
72427
73695
  });
72428
73696
 
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
73697
  // src/connectors/adapters/quickzu.ts
72777
73698
  var quickzuConnector = declarativeRestConnector({
72778
73699
  kind: "quickzu",
@@ -108073,320 +108994,6 @@ var googleSearchConnector = declarativeRestConnector({
108073
108994
  ]
108074
108995
  });
108075
108996
 
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
108997
  // src/connectors/adapters/greenpt.ts
108391
108998
  var greenptConnector = declarativeRestConnector({
108392
108999
  kind: "greenpt",
@@ -109340,344 +109947,6 @@ var hashiCorpVaultConnector = declarativeRestConnector({
109340
109947
  ]
109341
109948
  });
109342
109949
 
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
109950
  // src/connectors/adapters/heymarket-sms.ts
109682
109951
  var heymarketSmsConnector = declarativeRestConnector({
109683
109952
  kind: "heymarket-sms",
@@ -134848,255 +135117,6 @@ var talkableConnector = declarativeRestConnector({
134848
135117
  ]
134849
135118
  });
134850
135119
 
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
135120
  // src/connectors/adapters/teable.ts
135101
135121
  var teableConnector = declarativeRestConnector({
135102
135122
  kind: "teable",
@@ -146069,6 +146089,12 @@ var demandbaseConnector = declarativeRestConnector({
146069
146089
  });
146070
146090
 
146071
146091
  export {
146092
+ InMemoryOAuthFlowStore,
146093
+ startOAuthFlow,
146094
+ consumePendingFlow,
146095
+ exchangeAuthorizationCode,
146096
+ refreshAccessToken,
146097
+ _resetPendingFlowsForTests,
146072
146098
  declarativeRestConnector,
146073
146099
  oktaConnector,
146074
146100
  clientCredentialsRestConnector,
@@ -146165,6 +146191,7 @@ export {
146165
146191
  docusignConnector,
146166
146192
  dialpadConnector,
146167
146193
  dropboxConnector,
146194
+ ebayConnector,
146168
146195
  etsyConnector,
146169
146196
  fathomConnector,
146170
146197
  fireberryConnector,
@@ -146177,12 +146204,6 @@ export {
146177
146204
  freshdeskConnector,
146178
146205
  freshsalesConnector,
146179
146206
  frontConnector,
146180
- InMemoryOAuthFlowStore,
146181
- startOAuthFlow,
146182
- consumePendingFlow,
146183
- exchangeAuthorizationCode,
146184
- refreshAccessToken,
146185
- _resetPendingFlowsForTests,
146186
146207
  googleErrorReason,
146187
146208
  classifyGoogleReason,
146188
146209
  classifyGoogleError,
@@ -146200,6 +146221,7 @@ export {
146200
146221
  googleDrive,
146201
146222
  googleForms,
146202
146223
  googleMeetConnector,
146224
+ googleMyBusinessConnector,
146203
146225
  googleSearchConsoleConnector,
146204
146226
  googleSheets,
146205
146227
  googleSlidesConnector,
@@ -146207,6 +146229,7 @@ export {
146207
146229
  googlechatConnector,
146208
146230
  granolaConnector,
146209
146231
  hellosign,
146232
+ harvestConnector,
146210
146233
  helpscoutConnector,
146211
146234
  hubspot,
146212
146235
  httpConnector,
@@ -146287,6 +146310,7 @@ export {
146287
146310
  squareConnector,
146288
146311
  stripePackConnector,
146289
146312
  tallyConnector,
146313
+ ticktickConnector,
146290
146314
  tlDvConnector,
146291
146315
  todoistConnector,
146292
146316
  trelloConnector,
@@ -146360,7 +146384,6 @@ export {
146360
146384
  facebookPagesConnector,
146361
146385
  gustoConnector,
146362
146386
  bigcommerceConnector,
146363
- ebayConnector,
146364
146387
  quickzuConnector,
146365
146388
  zagomailConnector,
146366
146389
  zendeskSellConnector,
@@ -146504,14 +146527,12 @@ export {
146504
146527
  ghostcmsConnector,
146505
146528
  gistlyConnector,
146506
146529
  googleSearchConnector,
146507
- googleMyBusinessConnector,
146508
146530
  greenptConnector,
146509
146531
  greipConnector,
146510
146532
  guideliteConnector,
146511
146533
  hastewireConnector,
146512
146534
  heygenConnector,
146513
146535
  hashiCorpVaultConnector,
146514
- harvestConnector,
146515
146536
  heymarketSmsConnector,
146516
146537
  housecallProConnector,
146517
146538
  influencersClubConnector,
@@ -146653,7 +146674,6 @@ export {
146653
146674
  systemeIoConnector,
146654
146675
  tableauConnector,
146655
146676
  talkableConnector,
146656
- ticktickConnector,
146657
146677
  teableConnector,
146658
146678
  telnyxConnector,
146659
146679
  tenzoConnector,
@@ -146722,4 +146742,4 @@ export {
146722
146742
  demandbaseConnector,
146723
146743
  adapters_exports
146724
146744
  };
146725
- //# sourceMappingURL=chunk-N4KK3J7U.js.map
146745
+ //# sourceMappingURL=chunk-E3CAVV2V.js.map