@oomol-lab/open-connector 1.6.2 → 1.6.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +27 -0
  2. package/assets/open-connector/catalog/apps/assured_platform.json +218 -0
  3. package/assets/open-connector/catalog/apps/baixiao.json +1080 -0
  4. package/assets/open-connector/catalog/apps/benchmarkone.json +956 -0
  5. package/assets/open-connector/catalog/apps/bing_webmaster.json +3097 -0
  6. package/assets/open-connector/catalog/apps/buzzsprout.json +1979 -0
  7. package/assets/open-connector/catalog/apps/feishu.json +13 -19
  8. package/assets/open-connector/catalog/apps/feishu_app_bot.json +12 -19
  9. package/assets/open-connector/catalog/apps/jin10.json +1 -1
  10. package/assets/open-connector/catalog/apps/linkfox.json +836 -0
  11. package/assets/open-connector/catalog/apps/metatraderapi.json +1077 -0
  12. package/assets/open-connector/catalog/apps/mktindex.json +2411 -0
  13. package/assets/open-connector/catalog/apps/mojo_helpdesk.json +660 -0
  14. package/assets/open-connector/catalog/apps/mumble.json +446 -0
  15. package/assets/open-connector/catalog/apps/notion.json +112 -3
  16. package/assets/open-connector/catalog/apps/omise.json +438 -0
  17. package/assets/open-connector/catalog/apps/panjiva.json +2858 -0
  18. package/assets/open-connector/catalog/apps/papertrail.json +449 -0
  19. package/assets/open-connector/catalog/apps/peec.json +747 -0
  20. package/assets/open-connector/catalog/apps/polygon_io.json +5156 -584
  21. package/assets/open-connector/catalog/apps/quant_data.json +1928 -0
  22. package/assets/open-connector/catalog/apps/riddle_quiz_maker.json +621 -0
  23. package/assets/open-connector/catalog/apps/slack.json +327 -4
  24. package/assets/open-connector/catalog/apps/slackbot.json +280 -3
  25. package/assets/open-connector/catalog/apps/templatedocs.json +438 -0
  26. package/assets/open-connector/catalog/apps/terminus_app.json +510 -0
  27. package/assets/open-connector/catalog/apps/ticket_tailor.json +584 -0
  28. package/assets/open-connector/catalog/apps/tongdaxin.json +2186 -82
  29. package/assets/open-connector/catalog/apps/veremark.json +514 -0
  30. package/assets/open-connector/catalog/apps/walletap.json +549 -0
  31. package/assets/open-connector/catalog/apps/xiaohongshu_store.json +955 -39
  32. package/assets/open-connector/catalog/apps-index.json +1 -1
  33. package/package.json +5 -1
  34. package/src/connection-service.d.ts +2 -0
  35. package/src/connection-service.js +8 -1
  36. package/src/core/provider-id.d.ts +5 -0
  37. package/src/core/provider-id.js +12 -0
  38. package/src/oauth/oauth-credential-refresh-service.js +2 -0
  39. package/src/oauth/oauth-flow-service.js +2 -0
  40. package/src/providers/action-contracts.generated.d.ts +27 -7
  41. package/src/providers/assured_platform/executors.d.ts +4 -0
  42. package/src/providers/assured_platform/executors.js +18 -0
  43. package/src/providers/assured_platform/runtime.d.ts +7 -0
  44. package/src/providers/assured_platform/runtime.js +108 -0
  45. package/src/providers/baixiao/actions.d.ts +2 -0
  46. package/src/providers/baixiao/actions.js +377 -0
  47. package/src/providers/baixiao/executors.d.ts +4 -0
  48. package/src/providers/baixiao/executors.js +106 -0
  49. package/src/providers/benchmarkone/executors.d.ts +4 -0
  50. package/src/providers/benchmarkone/executors.js +26 -0
  51. package/src/providers/benchmarkone/runtime.d.ts +12 -0
  52. package/src/providers/benchmarkone/runtime.js +113 -0
  53. package/src/providers/bing_webmaster/actions.d.ts +2 -0
  54. package/src/providers/bing_webmaster/actions.js +113 -0
  55. package/src/providers/bing_webmaster/executors.d.ts +4 -0
  56. package/src/providers/bing_webmaster/executors.js +104 -0
  57. package/src/providers/bing_webmaster/management-actions.d.ts +2 -0
  58. package/src/providers/bing_webmaster/management-actions.js +241 -0
  59. package/src/providers/bing_webmaster/reporting-actions.d.ts +2 -0
  60. package/src/providers/bing_webmaster/reporting-actions.js +300 -0
  61. package/src/providers/bing_webmaster/schemas.d.ts +33 -0
  62. package/src/providers/bing_webmaster/schemas.js +313 -0
  63. package/src/providers/buzzsprout/executors.d.ts +4 -0
  64. package/src/providers/buzzsprout/executors.js +21 -0
  65. package/src/providers/buzzsprout/runtime.d.ts +12 -0
  66. package/src/providers/buzzsprout/runtime.js +237 -0
  67. package/src/providers/dropbox/executors.js +21 -3
  68. package/src/providers/feishu/shared/drive-actions.d.ts +1 -0
  69. package/src/providers/feishu/shared/drive-actions.js +13 -9
  70. package/src/providers/feishu/shared/drive-runtime.js +15 -3
  71. package/src/providers/feishu/shared/wiki-actions.js +4 -2
  72. package/src/providers/feishu_app_bot/scopes.js +1 -1
  73. package/src/providers/hithink_finance/runtime.js +39 -60
  74. package/src/providers/linkfox/actions.js +2 -0
  75. package/src/providers/linkfox/runtime.js +70 -1
  76. package/src/providers/linkfox/sif-actions.d.ts +10 -0
  77. package/src/providers/linkfox/sif-actions.js +193 -0
  78. package/src/providers/mcp-client.d.ts +1 -0
  79. package/src/providers/mcp-client.js +41 -27
  80. package/src/providers/metatraderapi/executors.d.ts +4 -0
  81. package/src/providers/metatraderapi/executors.js +18 -0
  82. package/src/providers/metatraderapi/runtime.d.ts +7 -0
  83. package/src/providers/metatraderapi/runtime.js +216 -0
  84. package/src/providers/mktindex/actions-mmi.d.ts +2 -0
  85. package/src/providers/mktindex/actions-mmi.js +510 -0
  86. package/src/providers/mktindex/actions.d.ts +2 -0
  87. package/src/providers/mktindex/actions.js +2 -0
  88. package/src/providers/mktindex/executors.d.ts +4 -0
  89. package/src/providers/mktindex/executors.js +27 -0
  90. package/src/providers/mktindex/request.d.ts +17 -0
  91. package/src/providers/mktindex/request.js +48 -0
  92. package/src/providers/mktindex/runtime.d.ts +9 -0
  93. package/src/providers/mktindex/runtime.js +492 -0
  94. package/src/providers/mojo_helpdesk/executors.d.ts +4 -0
  95. package/src/providers/mojo_helpdesk/executors.js +18 -0
  96. package/src/providers/mojo_helpdesk/runtime.d.ts +7 -0
  97. package/src/providers/mojo_helpdesk/runtime.js +173 -0
  98. package/src/providers/mumble/executors.d.ts +4 -0
  99. package/src/providers/mumble/executors.js +99 -0
  100. package/src/providers/notion/executors.d.ts +9 -0
  101. package/src/providers/notion/executors.js +161 -6
  102. package/src/providers/omise/executors.d.ts +4 -0
  103. package/src/providers/omise/executors.js +120 -0
  104. package/src/providers/panjiva/actions.d.ts +14 -0
  105. package/src/providers/panjiva/actions.js +389 -0
  106. package/src/providers/panjiva/executors.d.ts +4 -0
  107. package/src/providers/panjiva/executors.js +136 -0
  108. package/src/providers/papertrail/executors.d.ts +4 -0
  109. package/src/providers/papertrail/executors.js +15 -0
  110. package/src/providers/papertrail/runtime.d.ts +7 -0
  111. package/src/providers/papertrail/runtime.js +167 -0
  112. package/src/providers/peec/executors.d.ts +4 -0
  113. package/src/providers/peec/executors.js +15 -0
  114. package/src/providers/peec/runtime.d.ts +7 -0
  115. package/src/providers/peec/runtime.js +128 -0
  116. package/src/providers/polygon_io/actions.d.ts +2 -0
  117. package/src/providers/polygon_io/actions.js +282 -0
  118. package/src/providers/polygon_io/expanded-actions.d.ts +2 -0
  119. package/src/providers/polygon_io/expanded-actions.js +375 -0
  120. package/src/providers/polygon_io/expanded-runtime.d.ts +16 -0
  121. package/src/providers/polygon_io/expanded-runtime.js +277 -0
  122. package/src/providers/polygon_io/runtime.js +21 -2
  123. package/src/providers/quant_data/executors.d.ts +4 -0
  124. package/src/providers/quant_data/executors.js +15 -0
  125. package/src/providers/quant_data/runtime.d.ts +7 -0
  126. package/src/providers/quant_data/runtime.js +118 -0
  127. package/src/providers/registry.generated.js +20 -0
  128. package/src/providers/riddle_quiz_maker/executors.d.ts +4 -0
  129. package/src/providers/riddle_quiz_maker/executors.js +15 -0
  130. package/src/providers/riddle_quiz_maker/runtime.d.ts +7 -0
  131. package/src/providers/riddle_quiz_maker/runtime.js +145 -0
  132. package/src/providers/sellersprite_mcp/executors.js +2 -1
  133. package/src/providers/slack/actions.js +106 -3
  134. package/src/providers/slack/runtime.js +262 -38
  135. package/src/providers/slackbot/actions.js +1 -1
  136. package/src/providers/templatedocs/executors.d.ts +4 -0
  137. package/src/providers/templatedocs/executors.js +18 -0
  138. package/src/providers/templatedocs/runtime.d.ts +13 -0
  139. package/src/providers/templatedocs/runtime.js +151 -0
  140. package/src/providers/terminus_app/executors.d.ts +4 -0
  141. package/src/providers/terminus_app/executors.js +15 -0
  142. package/src/providers/terminus_app/runtime.d.ts +7 -0
  143. package/src/providers/terminus_app/runtime.js +172 -0
  144. package/src/providers/ticket_tailor/executors.d.ts +4 -0
  145. package/src/providers/ticket_tailor/executors.js +15 -0
  146. package/src/providers/ticket_tailor/runtime.d.ts +7 -0
  147. package/src/providers/ticket_tailor/runtime.js +152 -0
  148. package/src/providers/tongdaxin/actions.d.ts +1 -0
  149. package/src/providers/tongdaxin/actions.js +6 -3
  150. package/src/providers/tongdaxin/executors.js +55 -13
  151. package/src/providers/tongdaxin/named-action-output.d.ts +1 -0
  152. package/src/providers/tongdaxin/named-action-output.js +143 -0
  153. package/src/providers/tongdaxin/named-action-routing.d.ts +9 -0
  154. package/src/providers/tongdaxin/named-action-routing.js +417 -0
  155. package/src/providers/tongdaxin/named-actions.d.ts +2 -0
  156. package/src/providers/tongdaxin/named-actions.js +373 -0
  157. package/src/providers/twenty_crm/runtime.js +4 -2
  158. package/src/providers/veremark/executors.d.ts +4 -0
  159. package/src/providers/veremark/executors.js +129 -0
  160. package/src/providers/walletap/executors.d.ts +4 -0
  161. package/src/providers/walletap/executors.js +15 -0
  162. package/src/providers/walletap/runtime.d.ts +7 -0
  163. package/src/providers/walletap/runtime.js +147 -0
  164. package/src/providers/weixin_official_account/access-token.js +31 -7
  165. package/src/providers/weixin_store/access-token.js +33 -7
  166. package/src/providers/xiaohongshu_store/executors.js +152 -3
  167. package/src/server/api/openapi.js +3 -0
  168. package/src/server/connector-assets.d.ts +4 -0
  169. package/src/server/connector-assets.js +12 -0
  170. package/src/server/connector-build.d.ts +33 -0
  171. package/src/server/connector-build.js +73 -0
  172. package/src/server/connector-runtime.d.ts +1 -2
  173. package/src/server/connector-runtime.js +2 -8
  174. package/src/server/server-assets.d.ts +0 -28
  175. package/src/server/server-assets.js +0 -50
@@ -0,0 +1,373 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ import { defineProviderAction } from "../../core/provider-definition.js";
3
+ const service = "tongdaxin";
4
+ const securityCodeSchema = s.nonWhitespaceString("The exact Tongdaxin security, board, index, or contract code without a market suffix.");
5
+ const marketCodeSchema = s.nonWhitespaceString("The Tongdaxin market code returned by lookup_security for the selected instrument.");
6
+ const quoteCodeSchema = s.nonWhitespaceString("The exact non-futures Tongdaxin security, board, index, or fund code without a market suffix.");
7
+ const quoteMarketCodeSchema = s.stringEnum("The non-futures Tongdaxin market code returned by lookup_security for the selected instrument.", ["0", "1", "2", "31", "33", "62"]);
8
+ const dateSchema = s.nonWhitespaceString("A date accepted by Tongdaxin, normally formatted as YYYYMMDD or YYYY-MM-DD.");
9
+ const reportDateSchema = s.nonWhitespaceString("The report date or reporting period formatted as YYYYMMDD.");
10
+ const pageNumberSchema = s.integer("The one-based result page number.", { minimum: 1 });
11
+ const pageSizeSchema = s.integer("The number of results to request per page.", {
12
+ minimum: 1,
13
+ maximum: 100,
14
+ });
15
+ const rawResultSchema = s.unknown("The complete structured MCP tool result, preserved for fields not covered by the stable convenience fields.");
16
+ const looseRowSchema = s.looseObject("One provider-defined row returned by Tongdaxin.");
17
+ const lookupMatchSchema = s.looseRequiredObject("A Tongdaxin instrument match normalized for direct use by market-data Actions.", {
18
+ code: s.string("The exact Tongdaxin instrument code."),
19
+ marketCode: s.string("The normalized string market code accepted by market-data Actions."),
20
+ name: s.string("The instrument name returned by Tongdaxin."),
21
+ type: s.string("The Tongdaxin instrument-type label."),
22
+ aliases: s.stringArray("Known names and aliases for the instrument."),
23
+ }, { optional: ["name", "type", "aliases"] });
24
+ const lookupOutputSchema = s.object("Resolved Tongdaxin instruments and the complete result.", {
25
+ matches: s.array("The matching instruments returned by Tongdaxin.", lookupMatchSchema),
26
+ result: rawResultSchema,
27
+ });
28
+ const quotesOutputSchema = s.object("A normalized Tongdaxin real-time quote result.", {
29
+ baseInformation: s.looseObject("Stable instrument identity and market metadata."),
30
+ quote: s.looseObject("The current price, volume, amount, and session snapshot."),
31
+ extendedInformation: s.looseObject("Extended quote and valuation fields."),
32
+ orderBook: s.array("The returned bid and ask levels.", looseRowSchema),
33
+ professionalInformation: s.looseObject("Professional market fields when requested."),
34
+ financialInformation: s.looseObject("Financial and valuation fields when requested."),
35
+ statistics: s.looseObject("Statistical and ranking fields when requested."),
36
+ result: rawResultSchema,
37
+ });
38
+ const klineOutputSchema = s.object("A normalized Tongdaxin historical K-line result.", {
39
+ code: s.string("The instrument code returned by Tongdaxin."),
40
+ period: {
41
+ description: "The upstream K-line period identifier.",
42
+ anyOf: [{ type: "string" }, { type: "number" }],
43
+ },
44
+ rows: s.array("The returned OHLCV rows.", looseRowSchema),
45
+ statistics: s.looseObject("Statistics calculated for the returned K-line interval."),
46
+ result: rawResultSchema,
47
+ });
48
+ const collectionOutputSchema = s.object("Tongdaxin query values and the complete result.", {
49
+ data: s.array("The provider-defined values returned by Tongdaxin.", s.unknown("One provider-defined value returned by Tongdaxin.")),
50
+ result: rawResultSchema,
51
+ });
52
+ const screenerOutputSchema = s.object("A normalized Tongdaxin screening result.", {
53
+ summary: s.nullableString("The result summary, or null when Tongdaxin omits one."),
54
+ metadata: s.looseObject("Pagination, range, and query metadata."),
55
+ headers: s.stringArray("The ordered column headers for returned screening rows."),
56
+ data: s.array("The securities or entities matching the screening criteria.", looseRowSchema),
57
+ result: rawResultSchema,
58
+ });
59
+ const searchOutputSchema = s.object("A normalized Tongdaxin current-information search result.", {
60
+ ok: s.nullableBoolean("Whether the underlying Wenda request reported success."),
61
+ query: s.nullableString("The structured query sent to Wenda, or null when omitted."),
62
+ data: s.nullable(s.unknown("The provider-defined search rows returned by Wenda, or null when unavailable.")),
63
+ result: rawResultSchema,
64
+ });
65
+ const f10OutputSchema = s.unknown("The transformed F10 data returned by Tongdaxin, preserved as any JSON value.");
66
+ function defineReadAction(name, description, inputSchema, outputSchema = f10OutputSchema) {
67
+ return defineProviderAction(service, {
68
+ name,
69
+ operationType: "read",
70
+ description,
71
+ requiredScopes: [],
72
+ inputSchema,
73
+ outputSchema,
74
+ });
75
+ }
76
+ function createWendaSearchInput(description) {
77
+ const schema = s.object(description, {
78
+ query: s.nonWhitespaceString("A natural-language fallback query used only when structured subject fields are unavailable; startDate and endDate are required with this field."),
79
+ name: s.nonWhitespaceString("The company, security, industry, board, theme, or other subject name to search."),
80
+ symbol: s.nonWhitespaceString("The optional security code or short symbol to search."),
81
+ startDate: s.describe(dateSchema, "The search start date; provide it together with endDate, and always provide both for relative or current natural-language queries."),
82
+ endDate: s.describe(dateSchema, "The search end date; provide it together with startDate, and always provide both for relative or current natural-language queries."),
83
+ keywords: s.nonWhitespaceString("Comma-separated keywords used to narrow the Tongdaxin search."),
84
+ context: s.nonWhitespaceString("Additional instructions appended to the structured Tongdaxin search."),
85
+ }, { optional: ["query", "name", "symbol", "startDate", "endDate", "keywords", "context"] });
86
+ const schemaWithSubject = s.requireAnyProperty(schema, ["query", "name", "symbol"]);
87
+ schemaWithSubject.anyOf = [
88
+ { required: ["query", "startDate", "endDate"] },
89
+ { required: ["name"] },
90
+ { required: ["symbol"] },
91
+ ];
92
+ return requirePairedFields(schemaWithSubject, "startDate", "endDate");
93
+ }
94
+ function requirePairedFields(schema, left, right) {
95
+ const schemaWithRuntimeRequirements = schema;
96
+ schemaWithRuntimeRequirements.allOf = [
97
+ { if: { required: [left] }, then: { required: [right] } },
98
+ { if: { required: [right] }, then: { required: [left] } },
99
+ ];
100
+ return schemaWithRuntimeRequirements;
101
+ }
102
+ function createScreenInput(description) {
103
+ return s.object(description, {
104
+ criteria: s.nonWhitespaceString("Natural-language screening criteria covering technical, capital-flow, or fundamental conditions."),
105
+ page: pageNumberSchema,
106
+ pageSize: pageSizeSchema,
107
+ }, { optional: ["page", "pageSize"] });
108
+ }
109
+ function requireFieldsBySelector(schema, selector, requirements) {
110
+ const schemaWithRuntimeRequirements = schema;
111
+ schemaWithRuntimeRequirements.allOf = Object.entries(requirements).map(([selectorValue, fields]) => {
112
+ const serializedSelectorValue = selectorValue === "true" ? true : selectorValue === "false" ? false : selectorValue;
113
+ return {
114
+ if: {
115
+ properties: { [selector]: { const: serializedSelectorValue } },
116
+ required: [selector],
117
+ },
118
+ then: { required: [...fields] },
119
+ };
120
+ });
121
+ return schemaWithRuntimeRequirements;
122
+ }
123
+ export const tongdaxinNamedActions = [
124
+ defineReadAction("lookup_security", "Resolve a security, fund, index, futures contract, or option underlying to Tongdaxin codes and market parameters.", s.object("Input for resolving an instrument in a specific Tongdaxin market.", {
125
+ query: s.nonWhitespaceString("The instrument name, abbreviation, alias, or code to resolve."),
126
+ market: s.stringEnum("The Tongdaxin market range to search.", [
127
+ "A_SHARE",
128
+ "HK_STOCK",
129
+ "HK_FUND",
130
+ "FUND",
131
+ "US_STOCK",
132
+ "INDEX",
133
+ "FUTURES",
134
+ "OPTION",
135
+ ]),
136
+ }), lookupOutputSchema),
137
+ defineReadAction("get_quotes", "Get a real-time Tongdaxin market snapshot with optional order-book, valuation, financial, and ranking data.", requireFieldsBySelector(s.object("Input for a Tongdaxin real-time quote request.", {
138
+ code: quoteCodeSchema,
139
+ marketCode: quoteMarketCodeSchema,
140
+ orderBookDepth: s.integer("The number of bid and ask levels to return, from 0 to 10.", {
141
+ minimum: 0,
142
+ maximum: 10,
143
+ }),
144
+ includeProfessionalData: s.boolean("Whether to include inner volume, outer volume, order imbalance, and related professional fields."),
145
+ includeFinancialData: s.boolean("Whether to include PE, PB, ROE, total market value, and float market value."),
146
+ includeStatistics: s.boolean("Whether to include Tongdaxin statistical and ranking data."),
147
+ statisticParameter: s.nonWhitespaceString("The Tongdaxin statistic selector used when statistical data is requested."),
148
+ }, {
149
+ optional: [
150
+ "orderBookDepth",
151
+ "includeProfessionalData",
152
+ "includeFinancialData",
153
+ "includeStatistics",
154
+ "statisticParameter",
155
+ ],
156
+ }), "includeStatistics", { true: ["statisticParameter"] }), quotesOutputSchema),
157
+ defineReadAction("get_kline", "Get Tongdaxin historical OHLCV data for a security, index, board, or futures contract.", s.object("Input for a Tongdaxin historical K-line request.", {
158
+ code: securityCodeSchema,
159
+ marketCode: marketCodeSchema,
160
+ period: s.stringEnum("The K-line period to request.", [
161
+ "5_SECONDS",
162
+ "1_MINUTE",
163
+ "5_MINUTES",
164
+ "15_MINUTES",
165
+ "30_MINUTES",
166
+ "1_HOUR",
167
+ "DAILY",
168
+ "WEEKLY",
169
+ "MONTHLY",
170
+ "QUARTERLY",
171
+ "YEARLY",
172
+ ]),
173
+ count: s.integer("The number of K-line rows to return.", { minimum: 1, maximum: 1000 }),
174
+ offset: s.integer("The zero-based backward offset used to page through history.", {
175
+ minimum: 0,
176
+ }),
177
+ adjustment: s.stringEnum("The price adjustment method.", ["NONE", "FORWARD", "BACKWARD"]),
178
+ includeIpoPrice: s.boolean("Whether to include the issue price when Tongdaxin supplies it."),
179
+ }, { optional: ["count", "offset", "includeIpoPrice"] }), klineOutputSchema),
180
+ defineReadAction("query_indicators", "Query Tongdaxin valuation, financial, company, shareholder, market, concept, or industry-chain indicators for named entities.", s.object("Input for a natural-language Tongdaxin indicator query.", {
181
+ query: s.nonWhitespaceString("A single request containing both the named entity and the indicators or facts to return."),
182
+ market: s.stringEnum("The entity market or asset range.", ["A_SHARE", "INDEX", "FUND"]),
183
+ }), collectionOutputSchema),
184
+ defineReadAction("screen_stocks", "Screen A-share securities with natural-language technical, capital-flow, and fundamental criteria.", createScreenInput("Input for screening A-share securities."), screenerOutputSchema),
185
+ defineReadAction("screen_hk_stocks", "Screen Hong Kong stocks with natural-language technical, capital-flow, and fundamental criteria.", createScreenInput("Input for screening Hong Kong stocks."), screenerOutputSchema),
186
+ defineReadAction("screen_funds", "Screen funds with natural-language performance, manager, risk, holding, or allocation criteria.", createScreenInput("Input for screening funds."), screenerOutputSchema),
187
+ defineReadAction("screen_indices", "Screen indices with natural-language market, valuation, performance, or technical criteria.", createScreenInput("Input for screening indices."), screenerOutputSchema),
188
+ defineReadAction("screen_fund_managers", "Screen fund managers with natural-language experience, performance, product, or risk criteria.", createScreenInput("Input for screening fund managers."), screenerOutputSchema),
189
+ defineReadAction("search_news", "Search current Tongdaxin financial news, market briefs, themes, and company-related information.", createWendaSearchInput("Structured filters for a Tongdaxin financial news search."), searchOutputSchema),
190
+ defineReadAction("search_announcements", "Search Tongdaxin company announcements, regulatory filings, and periodic reports.", createWendaSearchInput("Structured filters for a Tongdaxin announcement search."), searchOutputSchema),
191
+ defineReadAction("search_reports", "Search Tongdaxin broker research, rating changes, target prices, and opinion summaries.", createWendaSearchInput("Structured filters for a Tongdaxin broker research search."), searchOutputSchema),
192
+ defineReadAction("query_macro_data", "Query Tongdaxin macroeconomic data such as GDP, CPI, PPI, social financing, money supply, interest rates, exchange rates, trade, employment, and population.", s.object("Input for a Tongdaxin macroeconomic data query.", {
193
+ query: s.nonWhitespaceString("A five-part pipe-delimited query formatted as subject|start date|end date|keywords|context; dates must be concrete YYYYMMDD values."),
194
+ }), searchOutputSchema),
195
+ defineReadAction("get_financial_statements", "Get structured A-share income statements, balance sheets, or cash-flow statements from Tongdaxin F10.", s.object("Input for an A-share financial statement query.", {
196
+ code: securityCodeSchema,
197
+ statement: s.stringEnum("The financial statement to return.", [
198
+ "INCOME_STATEMENT",
199
+ "BALANCE_SHEET",
200
+ "CASH_FLOW_STATEMENT",
201
+ ]),
202
+ reportView: s.stringEnum("Whether to use reporting-period or single-quarter figures.", [
203
+ "REPORTING_PERIOD",
204
+ "SINGLE_QUARTER",
205
+ ]),
206
+ }, { optional: ["reportView"] })),
207
+ defineReadAction("get_company_profile", "Get a Tongdaxin company overview, basic profile, issuance history, executives, or affiliates.", s.object("Input for a Tongdaxin company-profile query.", {
208
+ code: securityCodeSchema,
209
+ section: s.stringEnum("The company-profile section to return.", [
210
+ "OVERVIEW",
211
+ "BASIC_INFORMATION",
212
+ "ISSUANCE_AND_TRADING",
213
+ "EXECUTIVES",
214
+ "AFFILIATES",
215
+ "EMPLOYEE_STRUCTURE",
216
+ "EMPLOYEE_EFFICIENCY",
217
+ ]),
218
+ })),
219
+ defineReadAction("get_shareholder_research", "Get Tongdaxin controlling-shareholder, shareholder-count, ranking, or top-shareholder data.", s.object("Input for a Tongdaxin shareholder-research query.", {
220
+ code: securityCodeSchema,
221
+ section: s.stringEnum("The shareholder dataset to return.", [
222
+ "CONTROLLING_SHAREHOLDER",
223
+ "SHAREHOLDER_COUNT",
224
+ "SHAREHOLDER_COUNT_RANK",
225
+ "TOP_FLOAT_SHAREHOLDERS",
226
+ "TOP_SHAREHOLDERS",
227
+ ]),
228
+ page: pageNumberSchema,
229
+ pageSize: pageSizeSchema,
230
+ }, { optional: ["page", "pageSize"] })),
231
+ defineReadAction("get_institutional_holdings", "Get Tongdaxin institutional-holding periods, summaries, distributions, details, northbound holdings, or price comparisons.", requireFieldsBySelector(s.object("Input for a Tongdaxin institutional-holdings query.", {
232
+ code: securityCodeSchema,
233
+ section: s.stringEnum("The institutional-holdings dataset to return.", [
234
+ "AVAILABLE_DATES",
235
+ "SUMMARY",
236
+ "OVERVIEW",
237
+ "DETAIL",
238
+ "NORTHBOUND_FUNDS",
239
+ "PRICE_COMPARISON",
240
+ ]),
241
+ reportDate: reportDateSchema,
242
+ date: dateSchema,
243
+ sort: s.nonWhitespaceString("The upstream sort selector for detailed holdings."),
244
+ institutionType: s.nonWhitespaceString("The upstream institution-type selector for detailed holdings."),
245
+ comparison: s.nonWhitespaceString("The upstream comparison selector for holdings versus price."),
246
+ page: pageNumberSchema,
247
+ pageSize: pageSizeSchema,
248
+ }, {
249
+ optional: ["reportDate", "date", "sort", "institutionType", "comparison", "page", "pageSize"],
250
+ }), "section", {
251
+ OVERVIEW: ["reportDate"],
252
+ DETAIL: ["reportDate", "sort", "institutionType"],
253
+ NORTHBOUND_FUNDS: ["date"],
254
+ PRICE_COMPARISON: ["comparison"],
255
+ })),
256
+ defineReadAction("get_capital_and_trading_data", "Get Tongdaxin capital flow, northbound holdings, block trades, margin data, refinancing, limit analysis, or shareholder-change events.", requireFieldsBySelector(s.object("Input for a Tongdaxin capital, trading, or stock-event query.", {
257
+ code: securityCodeSchema,
258
+ section: s.stringEnum("The capital, trading, or stock-event dataset to return.", [
259
+ "CAPITAL_FLOW",
260
+ "NORTHBOUND_FUNDS",
261
+ "BLOCK_TRADE",
262
+ "BLOCK_TRADE_INTENTION",
263
+ "MARGIN_TRADING",
264
+ "REFINANCING",
265
+ "LIMIT_UP_ANALYSIS",
266
+ "LIMIT_DOWN_ANALYSIS",
267
+ "SHAREHOLDER_CHANGE",
268
+ "TOP_SHAREHOLDER_DETAIL",
269
+ ]),
270
+ date: dateSchema,
271
+ startDate: dateSchema,
272
+ endDate: dateSchema,
273
+ reportDate: reportDateSchema,
274
+ sort: s.nonWhitespaceString("The upstream sort selector for detailed shareholder data."),
275
+ shareholderType: s.nonWhitespaceString("The upstream shareholder-type selector for detailed shareholder data."),
276
+ selectedIndex: s.integer("The selected upstream result index.", { minimum: 0 }),
277
+ page: pageNumberSchema,
278
+ pageSize: pageSizeSchema,
279
+ }, {
280
+ optional: [
281
+ "date",
282
+ "startDate",
283
+ "endDate",
284
+ "reportDate",
285
+ "sort",
286
+ "shareholderType",
287
+ "selectedIndex",
288
+ "page",
289
+ "pageSize",
290
+ ],
291
+ }), "section", {
292
+ NORTHBOUND_FUNDS: ["date"],
293
+ BLOCK_TRADE: ["date"],
294
+ SHAREHOLDER_CHANGE: ["startDate", "endDate"],
295
+ TOP_SHAREHOLDER_DETAIL: ["reportDate", "sort", "shareholderType", "selectedIndex"],
296
+ })),
297
+ defineReadAction("get_dividends_and_financing", "Get Tongdaxin dividend, payout, yield, rights-issue, placement, or refinancing data.", s.object("Input for a Tongdaxin dividend and financing query.", {
298
+ code: securityCodeSchema,
299
+ section: s.stringEnum("The dividend or financing dataset to return.", [
300
+ "OVERVIEW",
301
+ "DIVIDEND_CHART",
302
+ "RIGHTS_ISSUE_PLAN",
303
+ "PLACEMENT_DETAIL",
304
+ "REFINANCING_PLAN",
305
+ "PAYOUT_HISTORY",
306
+ "YIELD_HISTORY",
307
+ "PAYOUT_RANK",
308
+ "YIELD_RANK",
309
+ "CASH_FINANCING_RATIO_RANK",
310
+ ]),
311
+ })),
312
+ defineReadAction("get_share_capital", "Get Tongdaxin share-capital structure, historical changes, restricted-share unlocks, or stock buybacks.", s.object("Input for a Tongdaxin share-capital query.", {
313
+ code: securityCodeSchema,
314
+ section: s.stringEnum("The share-capital dataset to return.", [
315
+ "STRUCTURE",
316
+ "CHANGES",
317
+ "RESTRICTED_UNLOCKS",
318
+ "STOCK_BUYBACK",
319
+ ]),
320
+ })),
321
+ defineReadAction("get_valuation_and_ranking", "Get Tongdaxin valuation history, industry rankings, financial-sector indicators, or board valuation comparisons.", requireFieldsBySelector(s.object("Input for a Tongdaxin valuation or ranking query.", {
322
+ code: s.optional(securityCodeSchema),
323
+ section: s.stringEnum("The valuation or ranking dataset to return.", [
324
+ "VALUATION_HISTORY",
325
+ "INDUSTRY_FINANCIAL_RANK",
326
+ "INDUSTRY_VALUATION_RANK",
327
+ "FINANCIAL_SECTOR_INDICATORS",
328
+ "BOARD_RELATIVE_VALUATION",
329
+ "BOARD_HISTORY_VALUATION",
330
+ ]),
331
+ reportDate: reportDateSchema,
332
+ timeRange: s.nonWhitespaceString("The valuation-history range, such as 1Y, accepted by Tongdaxin."),
333
+ valuationMetric: s.nonWhitespaceString("The valuation metric, such as PE or PB, accepted by Tongdaxin."),
334
+ boardCode: s.nonWhitespaceString("The Tongdaxin board or index code used for comparison."),
335
+ }, { optional: ["reportDate", "timeRange", "valuationMetric", "boardCode"] }), "section", {
336
+ VALUATION_HISTORY: ["code", "timeRange", "valuationMetric"],
337
+ INDUSTRY_FINANCIAL_RANK: ["code", "reportDate"],
338
+ INDUSTRY_VALUATION_RANK: ["code", "reportDate"],
339
+ FINANCIAL_SECTOR_INDICATORS: ["code", "reportDate"],
340
+ BOARD_RELATIVE_VALUATION: ["code", "boardCode"],
341
+ BOARD_HISTORY_VALUATION: ["boardCode"],
342
+ })),
343
+ defineReadAction("get_board_and_industry_data", "Get Tongdaxin board profiles, returns, market statistics, industry chains, or important industry events.", s.object("Input for a Tongdaxin board or industry query.", {
344
+ code: securityCodeSchema,
345
+ section: s.stringEnum("The board or industry dataset to return.", [
346
+ "BOARD_BASIC_INFORMATION",
347
+ "BOARD_DETAIL",
348
+ "BOARD_STAGE_RETURN",
349
+ "BOARD_MARKET_STATISTICS",
350
+ "INDUSTRY_CHAIN",
351
+ "INDUSTRY_IMPORTANT_EVENTS",
352
+ ]),
353
+ period: s.nonWhitespaceString("The board return period accepted by Tongdaxin, such as 1m."),
354
+ title: s.nonWhitespaceString("An optional title filter for important industry events."),
355
+ }, { optional: ["period", "title"] })),
356
+ defineReadAction("get_hot_topics", "Get Tongdaxin board-family, theme-library, event-driven, or information-overview data for a stock.", s.object("Input for a Tongdaxin hot-topic query.", {
357
+ code: securityCodeSchema,
358
+ section: s.stringEnum("The hot-topic dataset to return.", [
359
+ "BOARD_FAMILY",
360
+ "THEME_LIBRARY",
361
+ "EVENT_DRIVEN",
362
+ "INFORMATION_OVERVIEW",
363
+ ]),
364
+ })),
365
+ defineReadAction("get_hk_financials", "Get Tongdaxin Hong Kong income statements, balance sheets, or cash-flow statements.", s.object("Input for a Tongdaxin Hong Kong financial-statement query.", {
366
+ code: securityCodeSchema,
367
+ statement: s.stringEnum("The Hong Kong financial statement to return.", [
368
+ "INCOME_STATEMENT",
369
+ "BALANCE_SHEET",
370
+ "CASH_FLOW_STATEMENT",
371
+ ]),
372
+ })),
373
+ ];
@@ -57,9 +57,10 @@ async function listMetadataObjects(context, phase = "execute") {
57
57
  };
58
58
  }
59
59
  async function listRecords(input, context) {
60
+ const objectNamePlural = readRequiredString(input.objectNamePlural, "objectNamePlural");
60
61
  const payload = await requestTwentyCrmJson({
61
62
  method: "GET",
62
- path: `/rest/${encodeObjectName(readRequiredString(input.objectNamePlural, "objectNamePlural"))}`,
63
+ path: `/rest/${encodeObjectName(objectNamePlural)}`,
63
64
  query: compactObject({
64
65
  limit: optionalInteger(input.limit),
65
66
  starting_after: readOptionalString(input.startingAfter),
@@ -70,8 +71,9 @@ async function listRecords(input, context) {
70
71
  }),
71
72
  }, context);
72
73
  const record = requireProviderObject(payload, "Twenty CRM list records response");
74
+ const data = requireProviderObject(record.data, "Twenty CRM data");
73
75
  return {
74
- records: readArray(record, "data").map((item) => requireProviderObject(item, "Twenty CRM record")),
76
+ records: readArray(data, objectNamePlural).map((item) => requireProviderObject(item, "Twenty CRM record")),
75
77
  pageInfo: optionalRecord(record.pageInfo) ?? {},
76
78
  raw: record,
77
79
  };
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,129 @@
1
+ import { compactObject, looseArray, optionalRecord, optionalString, requiredRecord, requiredString, } from "../../core/cast.js";
2
+ import { readProviderTextBody } from "../provider-runtime.js";
3
+ import { defineApiKeyProviderExecutors, defineProviderProxy, providerUserAgent, ProviderRequestError, } from "../provider-runtime.js";
4
+ const service = "veremark", baseUrl = "https://api.veremark.com/external/v1";
5
+ const handlers = {
6
+ async list_criteria(_i, c) {
7
+ return { criteria: looseArray(await request("/criteria/", c)).map(normalizeCriterion) };
8
+ },
9
+ async list_requests(i, c) {
10
+ return {
11
+ requests: looseArray(await request("/request/", c, "GET", undefined, {
12
+ status_change_date_from: optionalString(i.statusChangeDateFrom),
13
+ })).map(normalizeRequest),
14
+ };
15
+ },
16
+ async get_request(i, c) {
17
+ return {
18
+ request: normalizeRequest(await request(`/request/${encodeURIComponent(requiredString(i.guid, "guid"))}`, c)),
19
+ };
20
+ },
21
+ async create_request(i, c) {
22
+ const candidate = optionalRecord(i.candidate) ?? {}, job = optionalRecord(i.job) ?? {}, webhook = optionalRecord(i.webhook);
23
+ const body = compactObject({
24
+ criteria_guid: requiredString(i.criteriaGuid, "criteriaGuid"),
25
+ candidate: compactObject({
26
+ first_name: requiredString(candidate.firstName, "candidate.firstName"),
27
+ last_name: requiredString(candidate.lastName, "candidate.lastName"),
28
+ email: requiredString(candidate.email, "candidate.email"),
29
+ country_code: optionalString(candidate.countryCode),
30
+ phone_number: optionalString(candidate.phoneNumber),
31
+ }),
32
+ job: compactObject({
33
+ role: requiredString(job.role, "job.role"),
34
+ external_id: optionalString(job.externalId),
35
+ client: optionalString(job.client),
36
+ additional_information: optionalString(job.additionalInformation),
37
+ }),
38
+ webhook: webhook
39
+ ? compactObject({
40
+ url: requiredString(webhook.url, "webhook.url"),
41
+ method: requiredString(webhook.method, "webhook.method"),
42
+ authentication_type: optionalString(webhook.authenticationType),
43
+ credentials: optionalString(webhook.credentials),
44
+ })
45
+ : undefined,
46
+ send_initial_candidate_email: i.sendInitialCandidateEmail,
47
+ assigned_user_guid: optionalString(i.assignedUserGuid),
48
+ });
49
+ return { request: normalizeRequest(await request("/request/", c, "POST", body)) };
50
+ },
51
+ };
52
+ export const executors = defineApiKeyProviderExecutors(service, handlers, {
53
+ skipDnsValidation: true,
54
+ });
55
+ export const proxy = defineProviderProxy({
56
+ service,
57
+ baseUrl,
58
+ auth: { type: "api_key_authorization", prefix: "Token " },
59
+ skipDnsValidation: true,
60
+ });
61
+ export const credentialValidators = {
62
+ async apiKey(input, { fetcher, signal }) {
63
+ const criteria = await handlers.list_criteria({}, { apiKey: input.apiKey, fetcher, signal });
64
+ return {
65
+ profile: { displayName: "Veremark API Token" },
66
+ grantedScopes: [],
67
+ metadata: {
68
+ apiBaseUrl: baseUrl,
69
+ validationEndpoint: "/criteria/",
70
+ criteriaCount: looseArray(optionalRecord(criteria)?.criteria).length,
71
+ },
72
+ };
73
+ },
74
+ };
75
+ async function request(path, c, method = "GET", body, query) {
76
+ const url = new URL(path.replace(/^\//u, ""), `${baseUrl}/`);
77
+ for (const [k, v] of Object.entries(query ?? {}))
78
+ if (v !== undefined)
79
+ url.searchParams.set(k, v);
80
+ const response = await c.fetcher(url, {
81
+ method,
82
+ headers: {
83
+ accept: "application/json",
84
+ authorization: `Token ${c.apiKey}`,
85
+ "content-type": "application/json",
86
+ "user-agent": providerUserAgent,
87
+ },
88
+ body: body ? JSON.stringify(body) : undefined,
89
+ signal: c.signal,
90
+ });
91
+ const text = await readProviderTextBody(response, "Veremark response");
92
+ let payload = null;
93
+ try {
94
+ payload = text ? JSON.parse(text) : null;
95
+ }
96
+ catch {
97
+ throw new ProviderRequestError(502, "Veremark returned invalid JSON");
98
+ }
99
+ if (!response.ok) {
100
+ const r = optionalRecord(payload);
101
+ throw new ProviderRequestError(response.status, optionalString(r?.detail) ??
102
+ optionalString(r?.message) ??
103
+ optionalString(r?.error) ??
104
+ `Veremark request failed with status ${response.status}`, payload);
105
+ }
106
+ return payload;
107
+ }
108
+ function normalizeCriterion(value) {
109
+ const r = requiredRecord(value, "Veremark criterion");
110
+ return {
111
+ guid: requiredString(r.guid, "criterion guid"),
112
+ name: requiredString(r.name, "criterion name"),
113
+ country: optionalString(r.country) ?? null,
114
+ checks: looseArray(r.checks),
115
+ raw: r,
116
+ };
117
+ }
118
+ function normalizeRequest(value) {
119
+ const r = requiredRecord(value, "Veremark request");
120
+ return {
121
+ guid: requiredString(r.guid, "request guid"),
122
+ status: optionalString(r.status) ?? null,
123
+ requestUrl: optionalString(r.request_url) ?? null,
124
+ externalId: optionalString(r.external_id) ?? null,
125
+ candidateGuid: optionalString(r.candidate_guid) ?? null,
126
+ checks: looseArray(r.checks),
127
+ raw: r,
128
+ };
129
+ }
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,15 @@
1
+ import { defineApiKeyProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { validateWalletapCredential, walletapActionHandlers } from "./runtime.js";
3
+ const service = "walletap";
4
+ export const executors = defineApiKeyProviderExecutors(service, walletapActionHandlers);
5
+ export const proxy = defineProviderProxy({
6
+ service,
7
+ baseUrl: "https://api.walletap.io",
8
+ auth: { type: "api_key_header", name: "x-api-key" },
9
+ skipDnsValidation: true,
10
+ });
11
+ export const credentialValidators = {
12
+ apiKey(input, { fetcher, signal }) {
13
+ return validateWalletapCredential(input.apiKey, fetcher, signal);
14
+ },
15
+ };
@@ -0,0 +1,7 @@
1
+ import type { CredentialValidationResult } from "../../core/types.ts";
2
+ import type { ApiKeyProviderContext, ProviderActionHandlers, ProviderFetch } from "../provider-runtime.ts";
3
+ export declare const walletapApiBaseUrl = "https://api.walletap.io";
4
+ type WalletapActionHandler = (input: Record<string, unknown>, context: ApiKeyProviderContext) => Promise<unknown>;
5
+ export declare const walletapActionHandlers: ProviderActionHandlers<"walletap", WalletapActionHandler>;
6
+ export declare function validateWalletapCredential(apiKey: string, fetcher: ProviderFetch, signal?: AbortSignal): Promise<CredentialValidationResult>;
7
+ export {};