@oomol-lab/open-connector 1.6.4 → 1.6.5

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 (95) hide show
  1. package/assets/open-connector/catalog/apps/aisa.json +568 -0
  2. package/assets/open-connector/catalog/apps/bilibili.json +2586 -0
  3. package/assets/open-connector/catalog/apps/bitwarden.json +1423 -0
  4. package/assets/open-connector/catalog/apps/cronfree.json +303 -0
  5. package/assets/open-connector/catalog/apps/cufinder.json +368 -0
  6. package/assets/open-connector/catalog/apps/gmail.json +73 -0
  7. package/assets/open-connector/catalog/apps/investoday_mcp.json +22228 -197
  8. package/assets/open-connector/catalog/apps/ixspy.json +2274 -0
  9. package/assets/open-connector/catalog/apps/osv.json +663 -0
  10. package/assets/open-connector/catalog/apps/pdf_vector.json +329 -0
  11. package/assets/open-connector/catalog/apps/pulsetic.json +406 -0
  12. package/assets/open-connector/catalog/apps/shopee.json +1785 -0
  13. package/assets/open-connector/catalog/apps/slack.json +81 -0
  14. package/assets/open-connector/catalog/apps/slackbot.json +81 -0
  15. package/assets/open-connector/catalog/apps/speak_ai.json +360 -0
  16. package/assets/open-connector/catalog/apps/zyhub.json +1585 -0
  17. package/assets/open-connector/catalog/apps-index.json +1 -1
  18. package/package.json +1 -1
  19. package/src/core/json-schema.d.ts +5 -1
  20. package/src/core/json-schema.js +14 -2
  21. package/src/core/types.d.ts +9 -0
  22. package/src/oauth/oauth-credential-refresh-service.js +3 -1
  23. package/src/oauth/oauth-flow-service.js +17 -2
  24. package/src/oauth/oauth-token.d.ts +13 -0
  25. package/src/providers/action-contracts.generated.d.ts +16 -4
  26. package/src/providers/aisa/executors.d.ts +4 -0
  27. package/src/providers/aisa/executors.js +176 -0
  28. package/src/providers/bilibili/articles.d.ts +3 -0
  29. package/src/providers/bilibili/articles.js +369 -0
  30. package/src/providers/bilibili/executors.d.ts +8 -0
  31. package/src/providers/bilibili/executors.js +262 -0
  32. package/src/providers/bilibili/runtime.d.ts +95 -0
  33. package/src/providers/bilibili/runtime.js +238 -0
  34. package/src/providers/bilibili/upload.d.ts +14 -0
  35. package/src/providers/bilibili/upload.js +105 -0
  36. package/src/providers/bitwarden/executors.d.ts +3 -0
  37. package/src/providers/bitwarden/executors.js +146 -0
  38. package/src/providers/cronfree/executors.d.ts +4 -0
  39. package/src/providers/cronfree/executors.js +89 -0
  40. package/src/providers/cufinder/executors.d.ts +4 -0
  41. package/src/providers/cufinder/executors.js +105 -0
  42. package/src/providers/elevenreader/runtime.js +6 -5
  43. package/src/providers/gmail/attachment-stream.d.ts +2 -0
  44. package/src/providers/gmail/attachment-stream.js +162 -0
  45. package/src/providers/gmail/executors.d.ts +3 -1
  46. package/src/providers/gmail/executors.js +53 -25
  47. package/src/providers/investoday_mcp/official-actions.js +19 -372
  48. package/src/providers/investoday_mcp/official-tool-types.d.ts +10 -0
  49. package/src/providers/investoday_mcp/official-tool-types.js +4 -0
  50. package/src/providers/investoday_mcp/official-tools/charts.d.ts +2 -0
  51. package/src/providers/investoday_mcp/official-tools/charts.js +32 -0
  52. package/src/providers/investoday_mcp/official-tools/fixed-income.d.ts +2 -0
  53. package/src/providers/investoday_mcp/official-tools/fixed-income.js +326 -0
  54. package/src/providers/investoday_mcp/official-tools/funds.d.ts +2 -0
  55. package/src/providers/investoday_mcp/official-tools/funds.js +1085 -0
  56. package/src/providers/investoday_mcp/official-tools/hong-kong.d.ts +2 -0
  57. package/src/providers/investoday_mcp/official-tools/hong-kong.js +275 -0
  58. package/src/providers/investoday_mcp/official-tools/indices-industries.d.ts +2 -0
  59. package/src/providers/investoday_mcp/official-tools/indices-industries.js +642 -0
  60. package/src/providers/investoday_mcp/official-tools/macro-calendar.d.ts +2 -0
  61. package/src/providers/investoday_mcp/official-tools/macro-calendar.js +398 -0
  62. package/src/providers/investoday_mcp/official-tools/other.d.ts +2 -0
  63. package/src/providers/investoday_mcp/official-tools/other.js +131 -0
  64. package/src/providers/investoday_mcp/official-tools/research-news.d.ts +2 -0
  65. package/src/providers/investoday_mcp/official-tools/research-news.js +302 -0
  66. package/src/providers/investoday_mcp/official-tools/stocks.d.ts +2 -0
  67. package/src/providers/investoday_mcp/official-tools/stocks.js +2829 -0
  68. package/src/providers/ixspy/executors.d.ts +3 -0
  69. package/src/providers/ixspy/executors.js +220 -0
  70. package/src/providers/osv/executors.d.ts +2 -0
  71. package/src/providers/osv/executors.js +11 -0
  72. package/src/providers/osv/runtime.d.ts +9 -0
  73. package/src/providers/osv/runtime.js +66 -0
  74. package/src/providers/pdf_vector/executors.d.ts +4 -0
  75. package/src/providers/pdf_vector/executors.js +108 -0
  76. package/src/providers/provider-runtime.d.ts +3 -0
  77. package/src/providers/provider-runtime.js +4 -1
  78. package/src/providers/pulsetic/executors.d.ts +4 -0
  79. package/src/providers/pulsetic/executors.js +126 -0
  80. package/src/providers/registry.generated.js +12 -0
  81. package/src/providers/shopee/actions.d.ts +2 -0
  82. package/src/providers/shopee/actions.js +474 -0
  83. package/src/providers/shopee/executors.d.ts +3 -0
  84. package/src/providers/shopee/executors.js +85 -0
  85. package/src/providers/shopee/runtime.d.ts +79 -0
  86. package/src/providers/shopee/runtime.js +693 -0
  87. package/src/providers/slack/actions.js +17 -0
  88. package/src/providers/slack/runtime.js +60 -2
  89. package/src/providers/speak_ai/executors.d.ts +3 -0
  90. package/src/providers/speak_ai/executors.js +187 -0
  91. package/src/providers/tushare/runtime.js +22 -9
  92. package/src/providers/zyhub/executors.d.ts +3 -0
  93. package/src/providers/zyhub/executors.js +240 -0
  94. package/src/server/files/transit-files.d.ts +3 -2
  95. package/src/server/files/transit-files.js +31 -35
@@ -40,6 +40,7 @@ export const executorModules = {
40
40
  airfocus: () => import("./airfocus/executors.js"),
41
41
  airmeet: () => import("./airmeet/executors.js"),
42
42
  airtable: () => import("./airtable/executors.js"),
43
+ aisa: () => import("./aisa/executors.js"),
43
44
  aitable_ai: () => import("./aitable_ai/executors.js"),
44
45
  aivoov: () => import("./aivoov/executors.js"),
45
46
  alchemy: () => import("./alchemy/executors.js"),
@@ -146,6 +147,7 @@ export const executorModules = {
146
147
  bigmailer: () => import("./bigmailer/executors.js"),
147
148
  bigml: () => import("./bigml/executors.js"),
148
149
  bigpicture_io: () => import("./bigpicture_io/executors.js"),
150
+ bilibili: () => import("./bilibili/executors.js"),
149
151
  bing_webmaster: () => import("./bing_webmaster/executors.js"),
150
152
  biorxiv_medrxiv: () => import("./biorxiv_medrxiv/executors.js"),
151
153
  bird: () => import("./bird/executors.js"),
@@ -153,6 +155,7 @@ export const executorModules = {
153
155
  bitly: () => import("./bitly/executors.js"),
154
156
  bitquery: () => import("./bitquery/executors.js"),
155
157
  bitrise: () => import("./bitrise/executors.js"),
158
+ bitwarden: () => import("./bitwarden/executors.js"),
156
159
  bland_ai: () => import("./bland_ai/executors.js"),
157
160
  blaze_meter_functional: () => import("./blaze_meter_functional/executors.js"),
158
161
  blaze_meter_performance: () => import("./blaze_meter_performance/executors.js"),
@@ -315,6 +318,7 @@ export const executorModules = {
315
318
  cratedb_cloud: () => import("./cratedb_cloud/executors.js"),
316
319
  credit_repair_cloud: () => import("./credit_repair_cloud/executors.js"),
317
320
  crisp: () => import("./crisp/executors.js"),
321
+ cronfree: () => import("./cronfree/executors.js"),
318
322
  cronitor: () => import("./cronitor/executors.js"),
319
323
  cronly: () => import("./cronly/executors.js"),
320
324
  crossref: () => import("./crossref/executors.js"),
@@ -323,6 +327,7 @@ export const executorModules = {
323
327
  crustdata: () => import("./crustdata/executors.js"),
324
328
  crypto_apis: () => import("./crypto_apis/executors.js"),
325
329
  cubox: () => import("./cubox/executors.js"),
330
+ cufinder: () => import("./cufinder/executors.js"),
326
331
  currencyapi: () => import("./currencyapi/executors.js"),
327
332
  currencyscoop: () => import("./currencyscoop/executors.js"),
328
333
  currents_api: () => import("./currents_api/executors.js"),
@@ -680,6 +685,7 @@ export const executorModules = {
680
685
  iqair_airvisual: () => import("./iqair_airvisual/executors.js"),
681
686
  it_glue: () => import("./it_glue/executors.js"),
682
687
  itunes_search: () => import("./itunes_search/executors.js"),
688
+ ixspy: () => import("./ixspy/executors.js"),
683
689
  iyunbiao: () => import("./iyunbiao/executors.js"),
684
690
  jamie: () => import("./jamie/executors.js"),
685
691
  jazzhr: () => import("./jazzhr/executors.js"),
@@ -963,6 +969,7 @@ export const executorModules = {
963
969
  orimon: () => import("./orimon/executors.js"),
964
970
  ortto: () => import("./ortto/executors.js"),
965
971
  ossinsight: () => import("./ossinsight/executors.js"),
972
+ osv: () => import("./osv/executors.js"),
966
973
  otter_ai: () => import("./otter_ai/executors.js"),
967
974
  oura: () => import("./oura/executors.js"),
968
975
  outline: () => import("./outline/executors.js"),
@@ -995,6 +1002,7 @@ export const executorModules = {
995
1002
  paystack: () => import("./paystack/executors.js"),
996
1003
  pdf_api_io: () => import("./pdf_api_io/executors.js"),
997
1004
  pdf_co: () => import("./pdf_co/executors.js"),
1005
+ pdf_vector: () => import("./pdf_vector/executors.js"),
998
1006
  pdfless: () => import("./pdfless/executors.js"),
999
1007
  pdfmonkey: () => import("./pdfmonkey/executors.js"),
1000
1008
  peec: () => import("./peec/executors.js"),
@@ -1067,6 +1075,7 @@ export const executorModules = {
1067
1075
  proxiedmail: () => import("./proxiedmail/executors.js"),
1068
1076
  prtg_classic: () => import("./prtg_classic/executors.js"),
1069
1077
  pubmed: () => import("./pubmed/executors.js"),
1078
+ pulsetic: () => import("./pulsetic/executors.js"),
1070
1079
  push_by_techulus: () => import("./push_by_techulus/executors.js"),
1071
1080
  pushbullet: () => import("./pushbullet/executors.js"),
1072
1081
  pushover: () => import("./pushover/executors.js"),
@@ -1206,6 +1215,7 @@ export const executorModules = {
1206
1215
  shipengine: () => import("./shipengine/executors.js"),
1207
1216
  shippo: () => import("./shippo/executors.js"),
1208
1217
  shodan: () => import("./shodan/executors.js"),
1218
+ shopee: () => import("./shopee/executors.js"),
1209
1219
  shopify: () => import("./shopify/executors.js"),
1210
1220
  shopify_admin: () => import("./shopify_admin/executors.js"),
1211
1221
  shopify_partner: () => import("./shopify_partner/executors.js"),
@@ -1254,6 +1264,7 @@ export const executorModules = {
1254
1264
  sonarcloud: () => import("./sonarcloud/executors.js"),
1255
1265
  sorftime: () => import("./sorftime/executors.js"),
1256
1266
  sorftime_mcp: () => import("./sorftime_mcp/executors.js"),
1267
+ speak_ai: () => import("./speak_ai/executors.js"),
1257
1268
  speechmatics: () => import("./speechmatics/executors.js"),
1258
1269
  speedtest_tracker: () => import("./speedtest_tracker/executors.js"),
1259
1270
  spider: () => import("./spider/executors.js"),
@@ -1540,6 +1551,7 @@ export const executorModules = {
1540
1551
  zoom: () => import("./zoom/executors.js"),
1541
1552
  zorus: () => import("./zorus/executors.js"),
1542
1553
  zotero: () => import("./zotero/executors.js"),
1554
+ zyhub: () => import("./zyhub/executors.js"),
1543
1555
  zylvie: () => import("./zylvie/executors.js"),
1544
1556
  zyte_api: () => import("./zyte_api/executors.js"),
1545
1557
  };
@@ -0,0 +1,2 @@
1
+ import type { ActionDefinition } from "../../core/types.ts";
2
+ export declare const shopeeActions: ActionDefinition[];
@@ -0,0 +1,474 @@
1
+ import { s } from "../../core/json-schema.js";
2
+ import { defineProviderAction } from "../../core/provider-definition.js";
3
+ const service = "shopee";
4
+ const entityIdSchema = (description) => s.integer(description, { minimum: 1 });
5
+ const timestampSchema = (description) => s.integer(description, { minimum: 0 });
6
+ const rawDataSchema = s.looseObject("The response data returned by Shopee Open Platform.");
7
+ const responseSchema = s.object("A normalized Shopee Open Platform response.", {
8
+ requestId: s.string("The Shopee request ID used for upstream error tracking."),
9
+ data: rawDataSchema,
10
+ }, { optional: ["requestId"] });
11
+ const merchantInputSchema = s.object("A Shopee merchant selected from the authorized CNSC account.", {
12
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
13
+ }, { optional: ["merchantId"] });
14
+ const shopInputSchema = s.object("A Shopee shop selected from the authorized account.", {
15
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
16
+ }, { optional: ["shopId"] });
17
+ const languageSchema = s.stringEnum("The language used for category and attribute names.", ["en", "zh-hans"]);
18
+ const attributeValueSchema = s.object("A value assigned to a Shopee global product attribute.", {
19
+ valueId: s.integer("The predefined Shopee attribute value ID, or 0 for a custom value."),
20
+ originalValueName: s.string("The predefined or custom attribute value name."),
21
+ valueUnit: s.string("The unit for a quantitative attribute value."),
22
+ }, { optional: ["valueId", "originalValueName", "valueUnit"] });
23
+ const attributeSchema = s.object("A Shopee global product attribute and its selected values.", {
24
+ attributeId: entityIdSchema("The Shopee attribute ID."),
25
+ values: s.array("The values selected for this attribute.", attributeValueSchema, {
26
+ minItems: 1,
27
+ }),
28
+ }, { optional: ["values"] });
29
+ const sellerStockSchema = s.object("Stock held at a Shopee seller stock location.", {
30
+ locationId: s.string("The Shopee seller stock location ID."),
31
+ stock: s.integer("The available stock at this location.", { minimum: 0 }),
32
+ });
33
+ const itemStatusSchema = s.stringEnum("A Shopee listing status.", [
34
+ "NORMAL",
35
+ "BANNED",
36
+ "UNLIST",
37
+ "REVIEWING",
38
+ "SELLER_DELETE",
39
+ "SHOPEE_DELETE",
40
+ ]);
41
+ const priceUpdateSchema = s.object("A new price for an item or variation model.", {
42
+ modelId: entityIdSchema("The Shopee model ID. Omit it for an item without variations."),
43
+ originalPrice: s.number("The new original price in the shop currency.", {
44
+ exclusiveMinimum: 0,
45
+ }),
46
+ }, { optional: ["modelId"] });
47
+ const stockLocationUpdateSchema = s.object("Stock assigned to one seller warehouse location.", {
48
+ locationId: s.string("The warehouse location ID returned by Shopee."),
49
+ stock: s.integer("The new available stock at this location.", { minimum: 0 }),
50
+ }, { optional: ["locationId"] });
51
+ const stockUpdateSchema = s.object("New stock for an item or variation model.", {
52
+ modelId: entityIdSchema("The Shopee model ID. Omit it for an item without variations."),
53
+ sellerStock: s.array("The new seller stock values, optionally split by warehouse location.", stockLocationUpdateSchema, { minItems: 1 }),
54
+ }, { optional: ["modelId"] });
55
+ const packageInputProperties = {
56
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
57
+ orderSerialNumber: s.string("The Shopee order serial number."),
58
+ packageNumber: s.string("The package number for an order split into packages."),
59
+ };
60
+ export const shopeeActions = [
61
+ defineProviderAction(service, {
62
+ name: "get_merchant_info",
63
+ operationType: "read",
64
+ description: "Get the identity, region, currency, and authorization status of a Shopee merchant.",
65
+ requiredScopes: ["shopee.read"],
66
+ inputSchema: merchantInputSchema,
67
+ outputSchema: responseSchema,
68
+ }),
69
+ defineProviderAction(service, {
70
+ name: "list_global_categories",
71
+ operationType: "read",
72
+ description: "List the Shopee global product category tree for a cross-border merchant.",
73
+ requiredScopes: ["shopee.read"],
74
+ inputSchema: s.object("The merchant and display language for the global category tree.", {
75
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
76
+ language: languageSchema,
77
+ }, { optional: ["merchantId", "language"] }),
78
+ outputSchema: responseSchema,
79
+ }),
80
+ defineProviderAction(service, {
81
+ name: "get_global_attribute_tree",
82
+ operationType: "read",
83
+ description: "Get Shopee global product attributes for up to 20 category IDs.",
84
+ requiredScopes: ["shopee.read"],
85
+ inputSchema: s.object("The merchant, categories, and display language for global product attributes.", {
86
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
87
+ categoryIds: s.array("The global category IDs whose attribute definitions should be returned.", entityIdSchema("A Shopee global category ID."), { minItems: 1, maxItems: 20, uniqueItems: true }),
88
+ language: languageSchema,
89
+ }, { optional: ["merchantId", "language"] }),
90
+ outputSchema: responseSchema,
91
+ }),
92
+ defineProviderAction(service, {
93
+ name: "list_global_brands",
94
+ operationType: "read",
95
+ description: "List Shopee brands available for a global product category.",
96
+ requiredScopes: ["shopee.read"],
97
+ inputSchema: s.object("The category and pagination parameters for Shopee global brands.", {
98
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
99
+ categoryId: entityIdSchema("The Shopee global category ID."),
100
+ offset: s.integer("The zero-based result offset.", { minimum: 0 }),
101
+ pageSize: s.integer("The number of brands to return, from 1 to 100.", {
102
+ minimum: 1,
103
+ maximum: 100,
104
+ }),
105
+ status: s.integer("The brand status: 1 for normal or 2 for pending.", {
106
+ minimum: 1,
107
+ maximum: 2,
108
+ }),
109
+ }, { optional: ["merchantId", "offset", "pageSize", "status"] }),
110
+ outputSchema: responseSchema,
111
+ }),
112
+ defineProviderAction(service, {
113
+ name: "upload_product_image",
114
+ operationType: "write",
115
+ description: "Download a public image URL and upload it to Shopee Media Space for products.",
116
+ requiredScopes: ["shopee.write"],
117
+ inputSchema: s.object("A public image URL and Shopee image processing options.", {
118
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
119
+ imageUrl: s.string("A public HTTPS URL for a JPG, JPEG, or PNG image up to 10 MB.", {
120
+ format: "uri",
121
+ }),
122
+ scene: s.stringEnum("How Shopee processes the image.", ["normal", "desc"]),
123
+ ratio: s.stringEnum("The requested image ratio for eligible sellers.", ["1:1", "3:4"]),
124
+ }, { optional: ["shopId", "scene", "ratio"] }),
125
+ outputSchema: responseSchema,
126
+ }),
127
+ defineProviderAction(service, {
128
+ name: "create_global_item",
129
+ operationType: "write",
130
+ description: "Create a Shopee global product draft for a mainland China CNSC merchant.",
131
+ requiredScopes: ["shopee.write"],
132
+ inputSchema: s.object("The product information used to create a Shopee global product draft.", {
133
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
134
+ categoryId: entityIdSchema("The Shopee global category ID."),
135
+ name: s.string("The global product name."),
136
+ description: s.string("The global product description."),
137
+ sku: s.string("The seller-defined global product SKU."),
138
+ imageIds: s.stringArray("Shopee Media Space image IDs for the product.", {
139
+ minItems: 1,
140
+ maxItems: 9,
141
+ uniqueItems: true,
142
+ itemDescription: "A Shopee Media Space image ID.",
143
+ }),
144
+ originalPrice: s.number("The original global product price in the merchant base currency.", {
145
+ exclusiveMinimum: 0,
146
+ }),
147
+ stock: s.integer("The available normal stock for the product.", { minimum: 0 }),
148
+ weight: s.number("The package weight in kilograms.", { exclusiveMinimum: 0 }),
149
+ packageLength: s.number("The package length in centimeters.", { exclusiveMinimum: 0 }),
150
+ packageWidth: s.number("The package width in centimeters.", { exclusiveMinimum: 0 }),
151
+ packageHeight: s.number("The package height in centimeters.", { exclusiveMinimum: 0 }),
152
+ daysToShip: s.integer("The number of days needed to ship the product.", { minimum: 1 }),
153
+ condition: s.stringEnum("The product condition.", ["NEW", "USED"]),
154
+ brandId: entityIdSchema("The Shopee brand ID."),
155
+ brandName: s.string("The original brand name."),
156
+ attributes: s.array("The product attributes required by its category.", attributeSchema),
157
+ sellerStock: s.array("Stock allocated to Shopee seller stock locations.", sellerStockSchema),
158
+ }, {
159
+ optional: [
160
+ "merchantId",
161
+ "sku",
162
+ "imageIds",
163
+ "stock",
164
+ "packageLength",
165
+ "packageWidth",
166
+ "packageHeight",
167
+ "brandId",
168
+ "brandName",
169
+ "attributes",
170
+ "sellerStock",
171
+ ],
172
+ }),
173
+ outputSchema: responseSchema,
174
+ }),
175
+ defineProviderAction(service, {
176
+ name: "list_merchant_shops",
177
+ operationType: "read",
178
+ description: "List shops authorized and bound to a Shopee merchant.",
179
+ requiredScopes: ["shopee.read"],
180
+ inputSchema: s.object("Pagination parameters for shops bound to a Shopee merchant.", {
181
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
182
+ page: s.integer("The one-based page number to retrieve.", { minimum: 1 }),
183
+ pageSize: s.integer("The number of shops to return, from 1 to 500.", {
184
+ minimum: 1,
185
+ maximum: 500,
186
+ }),
187
+ }, { optional: ["merchantId", "page", "pageSize"] }),
188
+ outputSchema: responseSchema,
189
+ }),
190
+ defineProviderAction(service, {
191
+ name: "get_shop_info",
192
+ operationType: "read",
193
+ description: "Get the profile, region, authorization, and cross-border status of a Shopee shop.",
194
+ requiredScopes: ["shopee.read"],
195
+ inputSchema: shopInputSchema,
196
+ outputSchema: responseSchema,
197
+ }),
198
+ defineProviderAction(service, {
199
+ name: "list_global_items",
200
+ operationType: "read",
201
+ description: "List global products owned by a Shopee cross-border merchant.",
202
+ requiredScopes: ["shopee.read"],
203
+ inputSchema: s.object("Cursor and update-time filters for Shopee global products.", {
204
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
205
+ cursor: s.string("The cursor returned by the previous page."),
206
+ pageSize: s.integer("The number of global products to return, from 1 to 50.", {
207
+ minimum: 1,
208
+ maximum: 50,
209
+ }),
210
+ updatedFrom: timestampSchema("The earliest item update time as a Unix timestamp in seconds."),
211
+ updatedTo: timestampSchema("The latest item update time as a Unix timestamp in seconds."),
212
+ }, { optional: ["merchantId", "cursor", "pageSize", "updatedFrom", "updatedTo"] }),
213
+ outputSchema: responseSchema,
214
+ }),
215
+ defineProviderAction(service, {
216
+ name: "get_global_items",
217
+ operationType: "read",
218
+ description: "Get details for up to 20 Shopee global products.",
219
+ requiredScopes: ["shopee.read"],
220
+ inputSchema: s.object("Shopee global product identifiers.", {
221
+ merchantId: entityIdSchema("The Shopee merchant ID. Omit it when the connection has exactly one merchant."),
222
+ globalItemIds: s.array("The global product IDs to retrieve.", entityIdSchema("A Shopee global product ID."), {
223
+ minItems: 1,
224
+ maxItems: 20,
225
+ uniqueItems: true,
226
+ }),
227
+ }, { optional: ["merchantId"] }),
228
+ outputSchema: responseSchema,
229
+ }),
230
+ defineProviderAction(service, {
231
+ name: "list_shop_items",
232
+ operationType: "read",
233
+ description: "List Shopee shop items by listing status and update time.",
234
+ requiredScopes: ["shopee.read"],
235
+ inputSchema: s.object("Filters and offset pagination for Shopee shop items.", {
236
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
237
+ offset: s.integer("The zero-based result offset.", { minimum: 0 }),
238
+ pageSize: s.integer("The number of items to return, from 1 to 100.", {
239
+ minimum: 1,
240
+ maximum: 100,
241
+ }),
242
+ statuses: s.array("The listing statuses to include.", itemStatusSchema, {
243
+ minItems: 1,
244
+ uniqueItems: true,
245
+ }),
246
+ updatedFrom: timestampSchema("The earliest item update time as a Unix timestamp."),
247
+ updatedTo: timestampSchema("The latest item update time as a Unix timestamp."),
248
+ }, { optional: ["shopId", "offset", "pageSize", "updatedFrom", "updatedTo"] }),
249
+ outputSchema: responseSchema,
250
+ }),
251
+ defineProviderAction(service, {
252
+ name: "get_shop_items",
253
+ operationType: "read",
254
+ description: "Get base information for up to 50 Shopee shop items.",
255
+ requiredScopes: ["shopee.read"],
256
+ inputSchema: s.object("Shopee shop item identifiers and optional detail sections.", {
257
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
258
+ itemIds: s.array("The Shopee item IDs to retrieve.", entityIdSchema("A Shopee item ID."), {
259
+ minItems: 1,
260
+ maxItems: 50,
261
+ uniqueItems: true,
262
+ }),
263
+ includeTaxInfo: s.boolean("Whether to include item tax information."),
264
+ includeComplaintPolicy: s.boolean("Whether to include item complaint policies."),
265
+ }, { optional: ["shopId", "includeTaxInfo", "includeComplaintPolicy"] }),
266
+ outputSchema: responseSchema,
267
+ }),
268
+ defineProviderAction(service, {
269
+ name: "get_item_models",
270
+ operationType: "read",
271
+ description: "Get variation tiers, model prices, and model stock for a Shopee shop item.",
272
+ requiredScopes: ["shopee.read"],
273
+ inputSchema: s.object("A Shopee shop item whose variation models should be returned.", {
274
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
275
+ itemId: entityIdSchema("The Shopee item ID."),
276
+ }, { optional: ["shopId"] }),
277
+ outputSchema: responseSchema,
278
+ }),
279
+ defineProviderAction(service, {
280
+ name: "update_item_prices",
281
+ operationType: "destructive",
282
+ description: "Replace prices for up to 50 models of one Shopee shop item.",
283
+ requiredScopes: ["shopee.write"],
284
+ inputSchema: s.object("A Shopee shop item and its replacement prices.", {
285
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
286
+ itemId: entityIdSchema("The Shopee item ID."),
287
+ prices: s.array("The replacement prices for the item or its models.", priceUpdateSchema, {
288
+ minItems: 1,
289
+ maxItems: 50,
290
+ }),
291
+ }, { optional: ["shopId"] }),
292
+ outputSchema: responseSchema,
293
+ }),
294
+ defineProviderAction(service, {
295
+ name: "update_item_stocks",
296
+ operationType: "destructive",
297
+ description: "Replace seller stock for up to 50 models of one Shopee shop item.",
298
+ requiredScopes: ["shopee.write"],
299
+ inputSchema: s.object("A Shopee shop item and its replacement seller stock.", {
300
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
301
+ itemId: entityIdSchema("The Shopee item ID."),
302
+ stocks: s.array("The replacement stock for the item or its models.", stockUpdateSchema, {
303
+ minItems: 1,
304
+ maxItems: 50,
305
+ }),
306
+ }, { optional: ["shopId"] }),
307
+ outputSchema: responseSchema,
308
+ }),
309
+ defineProviderAction(service, {
310
+ name: "list_orders",
311
+ operationType: "read",
312
+ description: "List Shopee shop orders created or updated in a time range of at most 15 days.",
313
+ requiredScopes: ["shopee.read"],
314
+ inputSchema: s.object("Filters and cursor pagination for Shopee shop orders.", {
315
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
316
+ timeRangeField: s.stringEnum("The order timestamp field used for the range.", ["create_time", "update_time"]),
317
+ timeFrom: timestampSchema("The inclusive range start as a Unix timestamp in seconds."),
318
+ timeTo: timestampSchema("The inclusive range end as a Unix timestamp in seconds."),
319
+ pageSize: s.integer("The number of orders to return, from 1 to 100.", {
320
+ minimum: 1,
321
+ maximum: 100,
322
+ }),
323
+ cursor: s.string("The cursor returned by the previous page."),
324
+ orderStatus: s.stringEnum("The Shopee order status to include.", [
325
+ "UNPAID",
326
+ "READY_TO_SHIP",
327
+ "PROCESSED",
328
+ "SHIPPED",
329
+ "COMPLETED",
330
+ "IN_CANCEL",
331
+ "CANCELLED",
332
+ "INVOICE_PENDING",
333
+ ]),
334
+ }, { optional: ["shopId", "timeRangeField", "pageSize", "cursor", "orderStatus"] }),
335
+ outputSchema: responseSchema,
336
+ }),
337
+ defineProviderAction(service, {
338
+ name: "get_orders",
339
+ operationType: "read",
340
+ description: "Get detailed information for up to 50 Shopee orders from one shop.",
341
+ requiredScopes: ["shopee.read"],
342
+ inputSchema: s.object("Shopee order identifiers and optional response fields.", {
343
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
344
+ orderSerialNumbers: s.stringArray("The Shopee order serial numbers to retrieve.", {
345
+ minItems: 1,
346
+ maxItems: 50,
347
+ uniqueItems: true,
348
+ itemDescription: "A Shopee order serial number.",
349
+ }),
350
+ optionalFields: s.stringArray("Additional documented order fields to include in the response.", {
351
+ minItems: 1,
352
+ uniqueItems: true,
353
+ itemDescription: "A field name from the Shopee get order detail API.",
354
+ }),
355
+ }, { optional: ["shopId", "optionalFields"] }),
356
+ outputSchema: responseSchema,
357
+ }),
358
+ defineProviderAction(service, {
359
+ name: "get_shipping_parameters",
360
+ operationType: "read",
361
+ description: "Get the pickup, drop-off, or non-integrated shipping options for an order package.",
362
+ requiredScopes: ["shopee.read"],
363
+ inputSchema: s.object("A Shopee order package ready for shipment.", packageInputProperties, {
364
+ optional: ["shopId", "packageNumber"],
365
+ }),
366
+ outputSchema: responseSchema,
367
+ }),
368
+ defineProviderAction(service, {
369
+ name: "ship_order",
370
+ operationType: "write",
371
+ description: "Arrange pickup, drop-off, or non-integrated shipment for a Shopee order package.",
372
+ requiredScopes: ["shopee.write"],
373
+ inputSchema: s.object("A Shopee order package and one shipping method returned by get_shipping_parameters.", {
374
+ ...packageInputProperties,
375
+ pickup: s.object("Pickup options returned by Shopee.", {
376
+ addressId: entityIdSchema("The pickup address ID."),
377
+ pickupTimeId: s.string("The pickup time-slot ID."),
378
+ trackingNumber: s.string("A carrier-assigned tracking number when required."),
379
+ }, { optional: ["pickupTimeId", "trackingNumber"] }),
380
+ dropoff: s.object("Drop-off options returned by Shopee.", {
381
+ branchId: entityIdSchema("The carrier branch ID."),
382
+ senderRealName: s.string("The sender's legal name when required."),
383
+ trackingNumber: s.string("A carrier-assigned tracking number when required."),
384
+ slug: s.string("The selected third-party logistics provider slug."),
385
+ }, { optional: ["branchId", "senderRealName", "trackingNumber", "slug"] }),
386
+ nonIntegrated: s.object("Options for a non-integrated logistics channel.", { trackingNumber: s.string("The carrier-assigned tracking number.") }, { optional: ["trackingNumber"] }),
387
+ }, { optional: ["shopId", "packageNumber", "pickup", "dropoff", "nonIntegrated"] }),
388
+ outputSchema: responseSchema,
389
+ }),
390
+ defineProviderAction(service, {
391
+ name: "get_tracking_number",
392
+ operationType: "read",
393
+ description: "Get carrier tracking numbers for a shipped Shopee order package.",
394
+ requiredScopes: ["shopee.read"],
395
+ inputSchema: s.object("A shipped Shopee order package and optional tracking fields.", {
396
+ ...packageInputProperties,
397
+ optionalFields: s.array("Additional tracking number fields to return.", s.stringEnum("A supported tracking number field.", [
398
+ "plp_number",
399
+ "first_mile_tracking_number",
400
+ "last_mile_tracking_number",
401
+ ]), { uniqueItems: true }),
402
+ }, { optional: ["shopId", "packageNumber", "optionalFields"] }),
403
+ outputSchema: responseSchema,
404
+ }),
405
+ defineProviderAction(service, {
406
+ name: "get_tracking_info",
407
+ operationType: "read",
408
+ description: "Get logistics tracking events for a Shopee order package.",
409
+ requiredScopes: ["shopee.read"],
410
+ inputSchema: s.object("A shipped Shopee order package.", packageInputProperties, {
411
+ optional: ["shopId", "packageNumber"],
412
+ }),
413
+ outputSchema: responseSchema,
414
+ }),
415
+ defineProviderAction(service, {
416
+ name: "list_returns",
417
+ operationType: "read",
418
+ description: "List Shopee returns by creation time, update time, and workflow status.",
419
+ requiredScopes: ["shopee.read"],
420
+ inputSchema: s.object("Filters and page pagination for Shopee returns.", {
421
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
422
+ page: s.integer("The one-based page number.", { minimum: 1 }),
423
+ pageSize: s.integer("The number of returns to include, from 1 to 100.", {
424
+ minimum: 1,
425
+ maximum: 100,
426
+ }),
427
+ createdFrom: timestampSchema("The earliest return creation time as a Unix timestamp."),
428
+ createdTo: timestampSchema("The latest return creation time as a Unix timestamp."),
429
+ updatedFrom: timestampSchema("The earliest return update time as a Unix timestamp."),
430
+ updatedTo: timestampSchema("The latest return update time as a Unix timestamp."),
431
+ status: s.string("A Shopee ReturnStatus value."),
432
+ negotiationStatus: s.string("A Shopee NegotiationStatus value."),
433
+ sellerProofStatus: s.string("A Shopee SellerProofStatus value."),
434
+ sellerCompensationStatus: s.string("A Shopee SellerCompensationStatus value."),
435
+ }, {
436
+ optional: [
437
+ "shopId",
438
+ "page",
439
+ "pageSize",
440
+ "createdFrom",
441
+ "createdTo",
442
+ "updatedFrom",
443
+ "updatedTo",
444
+ "status",
445
+ "negotiationStatus",
446
+ "sellerProofStatus",
447
+ "sellerCompensationStatus",
448
+ ],
449
+ }),
450
+ outputSchema: responseSchema,
451
+ }),
452
+ defineProviderAction(service, {
453
+ name: "get_return",
454
+ operationType: "read",
455
+ description: "Get the details and current workflow state of a Shopee return.",
456
+ requiredScopes: ["shopee.read"],
457
+ inputSchema: s.object("A Shopee return selected from one shop.", {
458
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
459
+ returnSerialNumber: s.string("The Shopee return serial number."),
460
+ }, { optional: ["shopId"] }),
461
+ outputSchema: responseSchema,
462
+ }),
463
+ defineProviderAction(service, {
464
+ name: "get_order_escrow",
465
+ operationType: "read",
466
+ description: "Get Shopee accounting and fee details for one order.",
467
+ requiredScopes: ["shopee.read"],
468
+ inputSchema: s.object("A Shopee order whose escrow accounting should be returned.", {
469
+ shopId: entityIdSchema("The Shopee shop ID. Omit it when the connection has exactly one shop."),
470
+ orderSerialNumber: s.string("The Shopee order serial number."),
471
+ }, { optional: ["shopId"] }),
472
+ outputSchema: responseSchema,
473
+ }),
474
+ ];
@@ -0,0 +1,3 @@
1
+ import type { CredentialValidators, ProviderExecutors } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,85 @@
1
+ import { looseArray, optionalInteger, optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { defineProviderExecutors, providerResponseError, requireOAuthCredential } from "../provider-runtime.js";
3
+ import { shopeeActions } from "./actions.js";
4
+ import { executeShopeeAction, fetchShopeeEntityInfo } from "./runtime.js";
5
+ const service = "shopee";
6
+ const handlers = Object.fromEntries(shopeeActions.map((action) => [
7
+ action.name,
8
+ (input, context) => executeShopeeAction(action.name, input, context),
9
+ ]));
10
+ export const executors = defineProviderExecutors({
11
+ service,
12
+ handlers,
13
+ async createContext(context, fetcher) {
14
+ const credential = await requireOAuthCredential(context, service);
15
+ return {
16
+ clientConfig: readClientConfig(credential.providerSecret),
17
+ providerSecret: credential.providerSecret,
18
+ fetcher,
19
+ };
20
+ },
21
+ });
22
+ export const credentialValidators = {
23
+ async oauth2(input, { fetcher }) {
24
+ const clientConfig = readClientConfig(input.providerSecret);
25
+ const merchantId = firstPositiveInteger(input.metadata.merchantIds);
26
+ const shopId = firstPositiveInteger(input.metadata.shopIds);
27
+ if (merchantId != null) {
28
+ const merchant = await fetchShopeeEntityInfo({
29
+ entityType: "merchant",
30
+ entityId: merchantId,
31
+ accessToken: input.accessToken,
32
+ clientConfig,
33
+ fetcher,
34
+ });
35
+ return {
36
+ profile: {
37
+ accountId: `merchant:${merchantId}`,
38
+ displayName: optionalString(merchant.merchant_name) ?? `Shopee merchant ${merchantId}`,
39
+ grantedScopes: ["all"],
40
+ },
41
+ };
42
+ }
43
+ if (shopId != null) {
44
+ const shop = await fetchShopeeEntityInfo({
45
+ entityType: "shop",
46
+ entityId: shopId,
47
+ accessToken: input.accessToken,
48
+ clientConfig,
49
+ fetcher,
50
+ });
51
+ return {
52
+ profile: {
53
+ accountId: `shop:${shopId}`,
54
+ displayName: optionalString(shop.shop_name) ?? `Shopee shop ${shopId}`,
55
+ grantedScopes: ["all"],
56
+ },
57
+ };
58
+ }
59
+ throw providerResponseError("Shopee connection has no authorized merchant or shop.");
60
+ },
61
+ };
62
+ function readClientConfig(providerSecret) {
63
+ const value = optionalRecord(providerSecret?.signingConfig);
64
+ const clientId = optionalString(value?.clientId);
65
+ const clientSecret = optionalString(value?.clientSecret);
66
+ const apiBaseUrl = optionalString(value?.apiBaseUrl);
67
+ if (!clientId || !clientSecret || !apiBaseUrl) {
68
+ throw providerResponseError("Shopee connection is missing its signing configuration.");
69
+ }
70
+ return {
71
+ service,
72
+ clientId,
73
+ clientSecret,
74
+ extra: { apiBaseUrl },
75
+ secretExtra: {},
76
+ };
77
+ }
78
+ function firstPositiveInteger(value) {
79
+ for (const item of looseArray(value)) {
80
+ const integer = optionalInteger(item);
81
+ if (integer != null && integer > 0)
82
+ return integer;
83
+ }
84
+ return undefined;
85
+ }