n8n-nodes-hypebridge-actors 1.0.0

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 (173) hide show
  1. package/LICENSE.md +19 -0
  2. package/README.md +204 -0
  3. package/dist/credentials/ApifyApi.credentials.d.ts +10 -0
  4. package/dist/credentials/ApifyApi.credentials.js +36 -0
  5. package/dist/credentials/ApifyApi.credentials.js.map +1 -0
  6. package/dist/credentials/ApifyOAuth2Api.credentials.d.ts +9 -0
  7. package/dist/credentials/ApifyOAuth2Api.credentials.js +66 -0
  8. package/dist/credentials/ApifyOAuth2Api.credentials.js.map +1 -0
  9. package/dist/docs/actions.png +0 -0
  10. package/dist/docs/actor-subtitle.png +0 -0
  11. package/dist/docs/auth.png +0 -0
  12. package/dist/docs/node-description.png +0 -0
  13. package/dist/docs/run-actor.png +0 -0
  14. package/dist/docs/trigger.png +0 -0
  15. package/dist/docs/workflow.png +0 -0
  16. package/dist/icons/apify.svg +5 -0
  17. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.node.d.ts +13 -0
  18. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.node.js +88 -0
  19. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.node.js.map +1 -0
  20. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.node.json +23 -0
  21. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.properties.d.ts +4 -0
  22. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.properties.js +143 -0
  23. package/dist/nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.properties.js.map +1 -0
  24. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/executeActor.d.ts +5 -0
  25. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/executeActor.js +68 -0
  26. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/executeActor.js.map +1 -0
  27. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/genericFunctions.d.ts +10 -0
  28. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/genericFunctions.js +90 -0
  29. package/dist/nodes/ApifyBlindPostCommentsScraper/helpers/genericFunctions.js.map +1 -0
  30. package/dist/nodes/ApifyBlindPostCommentsScraper/logo.svg +5 -0
  31. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.node.d.ts +13 -0
  32. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.node.js +88 -0
  33. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.node.js.map +1 -0
  34. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.node.json +23 -0
  35. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.properties.d.ts +4 -0
  36. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.properties.js +90 -0
  37. package/dist/nodes/ApifyDiceFm/ApifyDiceFm.properties.js.map +1 -0
  38. package/dist/nodes/ApifyDiceFm/helpers/executeActor.d.ts +5 -0
  39. package/dist/nodes/ApifyDiceFm/helpers/executeActor.js +68 -0
  40. package/dist/nodes/ApifyDiceFm/helpers/executeActor.js.map +1 -0
  41. package/dist/nodes/ApifyDiceFm/helpers/genericFunctions.d.ts +10 -0
  42. package/dist/nodes/ApifyDiceFm/helpers/genericFunctions.js +90 -0
  43. package/dist/nodes/ApifyDiceFm/helpers/genericFunctions.js.map +1 -0
  44. package/dist/nodes/ApifyDiceFm/logo.svg +5 -0
  45. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.node.d.ts +13 -0
  46. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.node.js +88 -0
  47. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.node.js.map +1 -0
  48. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.node.json +23 -0
  49. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.properties.d.ts +4 -0
  50. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.properties.js +138 -0
  51. package/dist/nodes/ApifyDraftkingsPredictions/ApifyDraftkingsPredictions.properties.js.map +1 -0
  52. package/dist/nodes/ApifyDraftkingsPredictions/helpers/executeActor.d.ts +5 -0
  53. package/dist/nodes/ApifyDraftkingsPredictions/helpers/executeActor.js +68 -0
  54. package/dist/nodes/ApifyDraftkingsPredictions/helpers/executeActor.js.map +1 -0
  55. package/dist/nodes/ApifyDraftkingsPredictions/helpers/genericFunctions.d.ts +10 -0
  56. package/dist/nodes/ApifyDraftkingsPredictions/helpers/genericFunctions.js +90 -0
  57. package/dist/nodes/ApifyDraftkingsPredictions/helpers/genericFunctions.js.map +1 -0
  58. package/dist/nodes/ApifyDraftkingsPredictions/logo.svg +5 -0
  59. package/dist/nodes/ApifyEater/ApifyEater.node.d.ts +13 -0
  60. package/dist/nodes/ApifyEater/ApifyEater.node.js +88 -0
  61. package/dist/nodes/ApifyEater/ApifyEater.node.js.map +1 -0
  62. package/dist/nodes/ApifyEater/ApifyEater.node.json +23 -0
  63. package/dist/nodes/ApifyEater/ApifyEater.properties.d.ts +4 -0
  64. package/dist/nodes/ApifyEater/ApifyEater.properties.js +82 -0
  65. package/dist/nodes/ApifyEater/ApifyEater.properties.js.map +1 -0
  66. package/dist/nodes/ApifyEater/helpers/executeActor.d.ts +5 -0
  67. package/dist/nodes/ApifyEater/helpers/executeActor.js +68 -0
  68. package/dist/nodes/ApifyEater/helpers/executeActor.js.map +1 -0
  69. package/dist/nodes/ApifyEater/helpers/genericFunctions.d.ts +10 -0
  70. package/dist/nodes/ApifyEater/helpers/genericFunctions.js +90 -0
  71. package/dist/nodes/ApifyEater/helpers/genericFunctions.js.map +1 -0
  72. package/dist/nodes/ApifyEater/logo.svg +5 -0
  73. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.node.d.ts +13 -0
  74. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.node.js +88 -0
  75. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.node.js.map +1 -0
  76. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.node.json +23 -0
  77. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.properties.d.ts +4 -0
  78. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.properties.js +99 -0
  79. package/dist/nodes/ApifyEventbriteSearch/ApifyEventbriteSearch.properties.js.map +1 -0
  80. package/dist/nodes/ApifyEventbriteSearch/helpers/executeActor.d.ts +5 -0
  81. package/dist/nodes/ApifyEventbriteSearch/helpers/executeActor.js +68 -0
  82. package/dist/nodes/ApifyEventbriteSearch/helpers/executeActor.js.map +1 -0
  83. package/dist/nodes/ApifyEventbriteSearch/helpers/genericFunctions.d.ts +10 -0
  84. package/dist/nodes/ApifyEventbriteSearch/helpers/genericFunctions.js +90 -0
  85. package/dist/nodes/ApifyEventbriteSearch/helpers/genericFunctions.js.map +1 -0
  86. package/dist/nodes/ApifyEventbriteSearch/logo.svg +5 -0
  87. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.node.d.ts +13 -0
  88. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.node.js +88 -0
  89. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.node.js.map +1 -0
  90. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.node.json +23 -0
  91. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.properties.d.ts +4 -0
  92. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.properties.js +90 -0
  93. package/dist/nodes/ApifyEventnoire/ApifyEventnoire.properties.js.map +1 -0
  94. package/dist/nodes/ApifyEventnoire/helpers/executeActor.d.ts +5 -0
  95. package/dist/nodes/ApifyEventnoire/helpers/executeActor.js +68 -0
  96. package/dist/nodes/ApifyEventnoire/helpers/executeActor.js.map +1 -0
  97. package/dist/nodes/ApifyEventnoire/helpers/genericFunctions.d.ts +10 -0
  98. package/dist/nodes/ApifyEventnoire/helpers/genericFunctions.js +90 -0
  99. package/dist/nodes/ApifyEventnoire/helpers/genericFunctions.js.map +1 -0
  100. package/dist/nodes/ApifyEventnoire/logo.svg +5 -0
  101. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.node.d.ts +13 -0
  102. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.node.js +88 -0
  103. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.node.js.map +1 -0
  104. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.node.json +23 -0
  105. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.properties.d.ts +4 -0
  106. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.properties.js +110 -0
  107. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/ApifyInfluencerDiscoveryAgentInstagramTiktok.properties.js.map +1 -0
  108. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/executeActor.d.ts +5 -0
  109. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/executeActor.js +68 -0
  110. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/executeActor.js.map +1 -0
  111. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/genericFunctions.d.ts +10 -0
  112. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/genericFunctions.js +90 -0
  113. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/helpers/genericFunctions.js.map +1 -0
  114. package/dist/nodes/ApifyInfluencerDiscoveryAgentInstagramTiktok/logo.svg +5 -0
  115. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.node.d.ts +13 -0
  116. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.node.js +88 -0
  117. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.node.js.map +1 -0
  118. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.node.json +23 -0
  119. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.properties.d.ts +4 -0
  120. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.properties.js +60 -0
  121. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/ApifyInfluencerEvaluationAgentInstagramTiktok.properties.js.map +1 -0
  122. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/executeActor.d.ts +5 -0
  123. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/executeActor.js +68 -0
  124. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/executeActor.js.map +1 -0
  125. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/genericFunctions.d.ts +10 -0
  126. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/genericFunctions.js +90 -0
  127. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/helpers/genericFunctions.js.map +1 -0
  128. package/dist/nodes/ApifyInfluencerEvaluationAgentInstagramTiktok/logo.svg +5 -0
  129. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.node.d.ts +13 -0
  130. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.node.js +88 -0
  131. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.node.js.map +1 -0
  132. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.node.json +23 -0
  133. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.properties.d.ts +4 -0
  134. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.properties.js +90 -0
  135. package/dist/nodes/ApifyPoshVip/ApifyPoshVip.properties.js.map +1 -0
  136. package/dist/nodes/ApifyPoshVip/helpers/executeActor.d.ts +5 -0
  137. package/dist/nodes/ApifyPoshVip/helpers/executeActor.js +68 -0
  138. package/dist/nodes/ApifyPoshVip/helpers/executeActor.js.map +1 -0
  139. package/dist/nodes/ApifyPoshVip/helpers/genericFunctions.d.ts +10 -0
  140. package/dist/nodes/ApifyPoshVip/helpers/genericFunctions.js +90 -0
  141. package/dist/nodes/ApifyPoshVip/helpers/genericFunctions.js.map +1 -0
  142. package/dist/nodes/ApifyPoshVip/logo.svg +5 -0
  143. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.node.d.ts +13 -0
  144. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.node.js +88 -0
  145. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.node.js.map +1 -0
  146. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.node.json +23 -0
  147. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.properties.d.ts +4 -0
  148. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.properties.js +90 -0
  149. package/dist/nodes/ApifyPrekindle/ApifyPrekindle.properties.js.map +1 -0
  150. package/dist/nodes/ApifyPrekindle/helpers/executeActor.d.ts +5 -0
  151. package/dist/nodes/ApifyPrekindle/helpers/executeActor.js +68 -0
  152. package/dist/nodes/ApifyPrekindle/helpers/executeActor.js.map +1 -0
  153. package/dist/nodes/ApifyPrekindle/helpers/genericFunctions.d.ts +10 -0
  154. package/dist/nodes/ApifyPrekindle/helpers/genericFunctions.js +90 -0
  155. package/dist/nodes/ApifyPrekindle/helpers/genericFunctions.js.map +1 -0
  156. package/dist/nodes/ApifyPrekindle/logo.svg +5 -0
  157. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.node.d.ts +13 -0
  158. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.node.js +88 -0
  159. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.node.js.map +1 -0
  160. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.node.json +23 -0
  161. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.properties.d.ts +4 -0
  162. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.properties.js +90 -0
  163. package/dist/nodes/ApifyShotgunLive/ApifyShotgunLive.properties.js.map +1 -0
  164. package/dist/nodes/ApifyShotgunLive/helpers/executeActor.d.ts +5 -0
  165. package/dist/nodes/ApifyShotgunLive/helpers/executeActor.js +68 -0
  166. package/dist/nodes/ApifyShotgunLive/helpers/executeActor.js.map +1 -0
  167. package/dist/nodes/ApifyShotgunLive/helpers/genericFunctions.d.ts +10 -0
  168. package/dist/nodes/ApifyShotgunLive/helpers/genericFunctions.js +90 -0
  169. package/dist/nodes/ApifyShotgunLive/helpers/genericFunctions.js.map +1 -0
  170. package/dist/nodes/ApifyShotgunLive/logo.svg +5 -0
  171. package/dist/package.json +71 -0
  172. package/dist/tsconfig.tsbuildinfo +1 -0
  173. package/package.json +71 -0
package/LICENSE.md ADDED
@@ -0,0 +1,19 @@
1
+ Copyright 2022 n8n
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,204 @@
1
+ # n8n Nodes - Apify Actor Template
2
+
3
+ This template converts Apify Actors into n8n community nodes. The generation script reads your Actor's input schema and creates the node package structure, which you can then customize and publish.
4
+ Simply provide an Actor ID, and the script generates a complete n8n community node package using your Actor's input schema—ready to customize and publish.
5
+
6
+ [Apify](https://apify.com) is a platform for building, deploying, and publishing web automation tools called Actors, while [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform that connects various services and APIs.
7
+
8
+ ---
9
+
10
+ ## Table of Contents
11
+
12
+ - [Setup](#setup)
13
+ - [Prerequisites](#️-prerequisites)
14
+ - [1. Generate Your Node](#1-generate-your-node)
15
+ - [2. Customize Your Node](#2-customize-your-node)
16
+ - [Actor schema constants](#actor-schema-constants)
17
+ - [Node icon](#node-icon)
18
+ - [Subtitle](#subtitle)
19
+ - [Node description](#node-description)
20
+ - [AI tool result filtering](#ai-tool-result-filtering)
21
+ - [Node discoverability](#node-discoverability)
22
+ - [Development](#development)
23
+ - [Getting help](#getting-help)
24
+
25
+ ## Setup
26
+
27
+ ### ⚙️ Prerequisites
28
+
29
+ - Node.js v23.11.1 or higher
30
+ - A valid Apify Actor ID from the [Apify Store](https://apify.com/store)
31
+
32
+ ---
33
+
34
+ ### 1. Generate Your Node
35
+
36
+ Install dependencies:
37
+
38
+ ```bash
39
+ npm install
40
+ ```
41
+
42
+ Run the generation script:
43
+
44
+ ```bash
45
+ npm run create-actor-app
46
+ ```
47
+
48
+ When prompted, enter your Actor ID. Find this in your Actor's console URL, for example, if your Actor page is `https://console.apify.com/actors/aYG0l9s7dbB7j3gbS/input`, the Actor ID is `aYG0l9s7dbB7j3gbS`.
49
+
50
+ The script fetches your Actor's metadata and input schema, generates node files with proper naming, converts Actor input fields into n8n node parameters, and creates all necessary boilerplate code.
51
+
52
+ Test the generated node:
53
+
54
+ ```bash
55
+ npm run build
56
+ npm run dev
57
+ ```
58
+
59
+ ---
60
+
61
+ ### 2. Customize Your Node
62
+
63
+ After generation, your node files will be located in:
64
+ ```
65
+ nodes/Apify<YourActorName>/
66
+ ```
67
+
68
+ For example, if you converted the **Website Content Crawler** Actor, the folder will be:
69
+ ```
70
+ nodes/ApifyWebsiteContentCrawler/
71
+ ```
72
+
73
+ #### Customization
74
+
75
+ The generated code includes five sections labeled with `SNIPPET` comments. Search for `SNIPPET` in your IDE to locate them quickly.
76
+
77
+ ##### Actor schema constants
78
+
79
+ Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
80
+
81
+ The script generates these constants from your Actor's metadata:
82
+
83
+ ```typescript
84
+ export const ACTOR_ID = 'aYG0l9s7dbB7j3gbS'
85
+ export const CLASS_NAME = 'ApifyWebsiteContentCrawler'
86
+ export const DISPLAY_NAME = 'Apify Website Content Crawler'
87
+ export const DESCRIPTION = ''
88
+ ```
89
+
90
+ > **Tip:** Change `DISPLAY_NAME` or `DESCRIPTION` to adjust how your node appears in the n8n interface.
91
+
92
+ ---
93
+
94
+ ##### Node icon
95
+
96
+ Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
97
+
98
+ The default configuration uses the Apify logo:
99
+
100
+ ```typescript
101
+ icon: 'file:logo.svg'
102
+ ```
103
+
104
+ Replace the SVG files in the node directory with your own branding.
105
+
106
+ ---
107
+
108
+ ##### Subtitle
109
+
110
+ Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
111
+
112
+ The subtitle appears beneath your node in n8n workflows:
113
+
114
+ ```typescript
115
+ subtitle: 'Run Scraper',
116
+ ```
117
+
118
+ ![Actor Subtitle](./docs/actor-subtitle.png)
119
+
120
+ ---
121
+
122
+ ##### Node description
123
+
124
+ Location: `nodes/Apify{YourActorName}/Apify{YourActorName}.node.ts`
125
+
126
+ This description appears in n8n's node browser:
127
+
128
+ ```typescript
129
+ description: DESCRIPTION,
130
+ ```
131
+
132
+ ![Apify Node Description](./docs/node-description.png)
133
+
134
+ ---
135
+
136
+ ##### AI tool result filtering
137
+
138
+ Location: `nodes/Apify{YourActorName}/helpers/genericFunctions.ts`
139
+
140
+ When your node runs in AI agent workflows, reduce token usage by filtering the returned data:
141
+
142
+ ```typescript
143
+ if (isUsedAsAiTool(this.getNode().type)) {
144
+ results = results.map((item: any) => ({ markdown: item.markdown }));
145
+ }
146
+ ```
147
+
148
+ AI agents perform better with clean, focused data that takes up less context.
149
+
150
+ ---
151
+
152
+ #### Node discoverability
153
+
154
+ The `Apify{YourActorName}.node.json` file controls where your node appears in n8n:
155
+
156
+ ```json
157
+ {
158
+ "categories": ["Data & Storage", "Marketing & Content"],
159
+ "alias": ["crawler", "scraper", "website", "content"]
160
+ }
161
+ ```
162
+
163
+ Adjust `categories` to match your Actor's purpose and add relevant search keywords to `alias`.
164
+
165
+ The template includes pre-configured authentication in the `credentials/` directory. Users running n8n locally provide their Apify API token. Users on n8n cloud can authenticate via OAuth2.
166
+
167
+ ---
168
+
169
+ ## Development
170
+
171
+ Start n8n with your custom node:
172
+
173
+ ```bash
174
+ npm run dev
175
+ ```
176
+
177
+ This launches n8n at `http://localhost:5678` with hot reloading enabled. Changes to your node files automatically refresh.
178
+
179
+ ## Getting help
180
+
181
+ - [Apify API documentation](https://docs.apify.com)
182
+ - [n8n Community Nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
183
+ - [n8n community](https://community.n8n.io/)
184
+
185
+ ---
186
+
187
+ > **Before publishing:** Update placeholder values in [package.json](package.json) (AUTHOR_NAME, AUTHOR_EMAIL, PACKAGE_DESCRIPTION) with your information.
188
+
189
+ ---
190
+
191
+ ## Published Nodes
192
+
193
+ Community nodes built with this template:
194
+
195
+ | Node | npm Package | Creator |
196
+ |------|-------------|---------|
197
+ | **Facebook Search** | [n8n-nodes-facebook-search-ppr](https://www.npmjs.com/package/n8n-nodes-facebook-search-ppr) | [danek](https://apify.com/danek) |
198
+ | **LinkedIn Profile Enrichment** | [n8n-nodes-linkedin-profile-enrichment](https://www.npmjs.com/package/n8n-nodes-linkedin-profile-enrichment) | [anchor](https://apify.com/anchor) |
199
+ | **Google Ads Scraper** | [n8n-nodes-google-ads-scraper](https://www.npmjs.com/package/n8n-nodes-google-ads-scraper) | [silva95gustavo](https://apify.com/silva95gustavo) |
200
+ | **Skip Trace Scraper** | [n8n-nodes-skip-trace](https://www.npmjs.com/package/n8n-nodes-skip-trace) | [one-api](https://apify.com/one-api) |
201
+ | **Google Search** | [n8n-nodes-google-search-scraper](https://www.npmjs.com/package/n8n-nodes-google-search-scraper) | [compass](https://apify.com/compass) |
202
+ | **Google Maps Scraper** | [n8n-nodes-crawler-google-places](https://www.npmjs.com/package/n8n-nodes-crawler-google-places) | [apify](https://apify.com/apify) |
203
+
204
+ Built a node with this template? Open a PR to add it to the list!
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class ApifyApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: Icon;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApifyApi = void 0;
4
+ class ApifyApi {
5
+ constructor() {
6
+ this.name = 'apifyApi';
7
+ this.displayName = 'Apify API';
8
+ this.documentationUrl = 'https://docs.apify.com/platform/integrations/api#api-token';
9
+ this.icon = "file:../nodes/ApifyActorTemplate/logo.svg";
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ },
18
+ ];
19
+ this.authenticate = {
20
+ type: 'generic',
21
+ properties: {
22
+ headers: {
23
+ Authorization: '=Bearer {{$credentials.apiKey}}',
24
+ },
25
+ },
26
+ };
27
+ this.test = {
28
+ request: {
29
+ method: 'GET',
30
+ url: 'https://api.apify.com/v2/me',
31
+ },
32
+ };
33
+ }
34
+ }
35
+ exports.ApifyApi = ApifyApi;
36
+ //# sourceMappingURL=ApifyApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApifyApi.credentials.js","sourceRoot":"","sources":["../../credentials/ApifyApi.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAElB,gBAAW,GAAG,WAAW,CAAC;QAE1B,qBAAgB,GAAG,4DAA4D,CAAC;QAEhF,SAAI,GAAS,2CAA2C,CAAA;QAExD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAKF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,6BAA6B;aAClC;SACD,CAAC;IACH,CAAC;CAAA;AArCD,4BAqCC"}
@@ -0,0 +1,9 @@
1
+ import type { Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
2
+ export declare class ApifyOAuth2Api implements ICredentialType {
3
+ name: string;
4
+ extends: string[];
5
+ displayName: string;
6
+ icon: Icon;
7
+ documentationUrl: string;
8
+ properties: INodeProperties[];
9
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApifyOAuth2Api = void 0;
4
+ const scopes = ['profile', 'full_api_access'];
5
+ class ApifyOAuth2Api {
6
+ constructor() {
7
+ this.name = 'apifyOAuth2Api';
8
+ this.extends = ['oAuth2Api'];
9
+ this.displayName = 'Apify OAuth2 API';
10
+ this.icon = "file:../nodes/ApifyActorTemplate/logo.svg";
11
+ this.documentationUrl = 'https://docs.apify.com/api/v2';
12
+ this.properties = [
13
+ {
14
+ displayName: 'Grant Type',
15
+ name: 'grantType',
16
+ type: 'hidden',
17
+ default: 'pkce',
18
+ },
19
+ {
20
+ displayName: 'Authorization URL',
21
+ name: 'authUrl',
22
+ type: 'hidden',
23
+ default: 'https://console.apify.com/authorize/oauth',
24
+ },
25
+ {
26
+ displayName: 'Access Token URL',
27
+ name: 'accessTokenUrl',
28
+ type: 'hidden',
29
+ default: 'https://console-backend.apify.com/oauth/apps/token',
30
+ },
31
+ {
32
+ displayName: 'Scope',
33
+ name: 'scope',
34
+ type: 'hidden',
35
+ default: `${scopes.join(' ')}`,
36
+ },
37
+ {
38
+ displayName: 'Auth URI Query Parameters',
39
+ name: 'authQueryParameters',
40
+ type: 'hidden',
41
+ default: '',
42
+ },
43
+ {
44
+ displayName: 'Authentication',
45
+ name: 'authentication',
46
+ type: 'hidden',
47
+ default: 'header',
48
+ },
49
+ {
50
+ displayName: 'Client ID',
51
+ name: 'clientId',
52
+ type: 'hidden',
53
+ default: '',
54
+ },
55
+ {
56
+ displayName: 'Client Secret',
57
+ name: 'clientSecret',
58
+ type: 'hidden',
59
+ default: '',
60
+ typeOptions: { password: true },
61
+ },
62
+ ];
63
+ }
64
+ }
65
+ exports.ApifyOAuth2Api = ApifyOAuth2Api;
66
+ //# sourceMappingURL=ApifyOAuth2Api.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApifyOAuth2Api.credentials.js","sourceRoot":"","sources":["../../credentials/ApifyOAuth2Api.credentials.ts"],"names":[],"mappings":";;;AAEA,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAE9C,MAAa,cAAc;IAA3B;QACC,SAAI,GAAG,gBAAgB,CAAC;QAExB,YAAO,GAAG,CAAC,WAAW,CAAC,CAAC;QAExB,gBAAW,GAAG,kBAAkB,CAAC;QAEjC,SAAI,GAAS,2CAA2C,CAAA;QAGxD,qBAAgB,GAAG,+BAA+B,CAAC;QAEnD,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,MAAM;aACf;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,2CAA2C;aACpD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,oDAAoD;aAC7D;YACD;gBACC,WAAW,EAAE,OAAO;gBACpB,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;aAC9B;YACD;gBACC,WAAW,EAAE,2BAA2B;gBACxC,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,gBAAgB;gBAC7B,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,QAAQ;aACjB;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;aACX;YACD;gBACC,WAAW,EAAE,eAAe;gBAC5B,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;aAC/B;SACD,CAAC;IACH,CAAC;CAAA;AA/DD,wCA+DC"}
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,5 @@
1
+ <svg width="150" height="150" viewBox="0 0 150 150" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M86.0214 0H147.727C148.982 0 150 1.01753 150 2.27273V96.5744C150 98.8332 147.062 99.7089 145.826 97.8188L84.1196 3.51714C83.1305 2.00559 84.215 0 86.0214 0Z" fill="#246DFF"/>
3
+ <path d="M63.9786 0H2.27273C1.01753 0 0 1.01753 0 2.27273V96.5744C0 98.8332 2.93774 99.7089 4.1745 97.8188L65.8804 3.51714C66.8695 2.00559 65.785 0 63.9786 0Z" fill="#20A34E"/>
4
+ <path d="M73.9429 75.5012L3.84485 146.126C2.42137 147.56 3.43724 150 5.45792 150H144.6C146.612 150 147.632 147.578 146.225 146.139L77.1811 75.5135C76.2942 74.6063 74.8365 74.6008 73.9429 75.5012Z" fill="#F86606"/>
5
+ </svg>
@@ -0,0 +1,13 @@
1
+ import { IExecuteFunctions, INodeExecutionData, INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare const ACTOR_ID: string;
3
+ export declare const PACKAGE_NAME: string;
4
+ export declare const CLASS_NAME: string;
5
+ export declare const ClassNameCamel: string;
6
+ export declare const X_PLATFORM_HEADER_ID: string;
7
+ export declare const X_PLATFORM_APP_HEADER_ID: string;
8
+ export declare const DISPLAY_NAME: string;
9
+ export declare const DESCRIPTION: string;
10
+ export declare class ApifyBlindPostCommentsScraper implements INodeType {
11
+ description: INodeTypeDescription;
12
+ execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
13
+ }
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApifyBlindPostCommentsScraper = exports.DESCRIPTION = exports.DISPLAY_NAME = exports.X_PLATFORM_APP_HEADER_ID = exports.X_PLATFORM_HEADER_ID = exports.ClassNameCamel = exports.CLASS_NAME = exports.PACKAGE_NAME = exports.ACTOR_ID = void 0;
4
+ const ApifyBlindPostCommentsScraper_properties_1 = require("./ApifyBlindPostCommentsScraper.properties");
5
+ const executeActor_1 = require("./helpers/executeActor");
6
+ exports.ACTOR_ID = 'h4IM5lZDxLlFcQ3yx';
7
+ exports.PACKAGE_NAME = 'n8n-nodes-hypebridge-actors';
8
+ exports.CLASS_NAME = 'ApifyBlindPostCommentsScraper';
9
+ exports.ClassNameCamel = 'apifyBlindPostCommentsScraper';
10
+ exports.X_PLATFORM_HEADER_ID = 'n8n';
11
+ exports.X_PLATFORM_APP_HEADER_ID = 'h4IM5lZDxLlFcQ3yx';
12
+ exports.DISPLAY_NAME = 'Blind Post-Comments Scraper';
13
+ exports.DESCRIPTION = 'Scrape posts, comments and discussions from teamblind.com, the anonymous professional community platform.';
14
+ class ApifyBlindPostCommentsScraper {
15
+ constructor() {
16
+ this.description = {
17
+ displayName: exports.DISPLAY_NAME,
18
+ name: exports.ClassNameCamel,
19
+ icon: 'file:logo.svg',
20
+ group: ['transform'],
21
+ version: [1],
22
+ defaultVersion: 1,
23
+ subtitle: 'Run Actor',
24
+ description: exports.DESCRIPTION,
25
+ defaults: {
26
+ name: exports.DISPLAY_NAME,
27
+ },
28
+ inputs: ["main"],
29
+ outputs: ["main"],
30
+ usableAsTool: true,
31
+ credentials: [
32
+ {
33
+ displayName: 'Apify API key connection',
34
+ name: 'apifyApi',
35
+ required: false,
36
+ displayOptions: {
37
+ show: {
38
+ authentication: ['apifyApi'],
39
+ },
40
+ },
41
+ },
42
+ {
43
+ displayName: 'Apify OAuth2 connection',
44
+ name: 'apifyOAuth2Api',
45
+ required: false,
46
+ displayOptions: {
47
+ show: {
48
+ authentication: ['apifyOAuth2Api'],
49
+ },
50
+ },
51
+ },
52
+ ],
53
+ properties: ApifyBlindPostCommentsScraper_properties_1.properties,
54
+ };
55
+ }
56
+ async execute() {
57
+ const items = this.getInputData();
58
+ const returnData = [];
59
+ for (let i = 0; i < items.length; i++) {
60
+ try {
61
+ const data = await executeActor_1.runActor.call(this, i);
62
+ const addPairedItem = (item) => ({
63
+ ...item,
64
+ pairedItem: { item: i },
65
+ });
66
+ if (Array.isArray(data)) {
67
+ returnData.push(...data.map(addPairedItem));
68
+ }
69
+ else {
70
+ returnData.push(addPairedItem(data));
71
+ }
72
+ }
73
+ catch (error) {
74
+ if (this.continueOnFail()) {
75
+ returnData.push({
76
+ json: { error: error.message },
77
+ pairedItem: { item: i },
78
+ });
79
+ continue;
80
+ }
81
+ throw error;
82
+ }
83
+ }
84
+ return [returnData];
85
+ }
86
+ }
87
+ exports.ApifyBlindPostCommentsScraper = ApifyBlindPostCommentsScraper;
88
+ //# sourceMappingURL=ApifyBlindPostCommentsScraper.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ApifyBlindPostCommentsScraper.node.js","sourceRoot":"","sources":["../../../nodes/ApifyBlindPostCommentsScraper/ApifyBlindPostCommentsScraper.node.ts"],"names":[],"mappings":";;;AAOA,yGAAwE;AACxE,yDAAkD;AAGrC,QAAA,QAAQ,GAAG,mBAA6B,CAAC;AAEzC,QAAA,YAAY,GAAG,6BAAuC,CAAC;AACvD,QAAA,UAAU,GAAG,+BAAyC,CAAC;AACvD,QAAA,cAAc,GAAG,+BAAyC,CAAC;AAE3D,QAAA,oBAAoB,GAAG,KAAe,CAAC;AACvC,QAAA,wBAAwB,GAAG,mBAA6B,CAAC;AAEzD,QAAA,YAAY,GAAG,6BAAuC,CAAC;AACvD,QAAA,WAAW,GAAG,2GAAqH,CAAC;AAEjJ,MAAa,6BAA6B;IAA1C;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,oBAAY;YACzB,IAAI,EAAE,sBAAc;YAGpB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC,CAAC,CAAC;YACZ,cAAc,EAAE,CAAC;YAGjB,QAAQ,EAAE,WAAW;YAGrB,WAAW,EAAE,mBAAW;YACxB,QAAQ,EAAE;gBACT,IAAI,EAAE,oBAAY;aAClB;YACD,MAAM,EAAE,QAAyB;YACjC,OAAO,EAAE,QAAyB;YAClC,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE;gBACZ;oBACC,WAAW,EAAE,0BAA0B;oBACvC,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,KAAK;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,cAAc,EAAE,CAAC,UAAU,CAAC;yBAC5B;qBACD;iBACD;gBACD;oBACC,WAAW,EAAE,yBAAyB;oBACtC,IAAI,EAAE,gBAAgB;oBACtB,QAAQ,EAAE,KAAK;oBACf,cAAc,EAAE;wBACf,IAAI,EAAE;4BACL,cAAc,EAAE,CAAC,gBAAgB,CAAC;yBAClC;qBACD;iBACD;aACD;YAED,UAAU,EAAV,qDAAU;SACV,CAAC;IAkCH,CAAC;IAhCA,KAAK,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QAClC,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC;gBACJ,MAAM,IAAI,GAAG,MAAM,uBAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBAE1C,MAAM,aAAa,GAAG,CAAC,IAAwB,EAAE,EAAE,CAAC,CAAC;oBACpD,GAAG,IAAI;oBACP,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;iBACvB,CAAC,CAAC;gBAEH,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBACzB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;gBAC7C,CAAC;qBAAM,CAAC;oBACP,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACtC,CAAC;YACF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC3B,UAAU,CAAC,IAAI,CAAC;wBACf,IAAI,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;wBAC9B,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;qBACvB,CAAC,CAAC;oBACH,SAAS;gBACV,CAAC;gBACD,MAAM,KAAK,CAAC;YACb,CAAC;QACF,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,CAAC;IACrB,CAAC;CACD;AAhFD,sEAgFC"}
@@ -0,0 +1,23 @@
1
+ {
2
+ "node": "n8n-nodes-base.apifyBlindPostCommentsScraper",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": [
6
+ "Data & Storage",
7
+ "Marketing & Content"
8
+ ],
9
+ "resources": {
10
+ "primaryDocumentation": [
11
+ {
12
+ "url": "https://apify.com/hypebridge/blind-post-comments-scraper"
13
+ }
14
+ ]
15
+ },
16
+ "alias": [
17
+ "blind post comments scraper",
18
+ "apify",
19
+ "scraper",
20
+ "automation",
21
+ "hypebridge"
22
+ ]
23
+ }
@@ -0,0 +1,4 @@
1
+ import { IExecuteFunctions, INodeProperties } from 'n8n-workflow';
2
+ export declare function buildActorInput(context: IExecuteFunctions, itemIndex: number, defaultInput: Record<string, any>): Record<string, any>;
3
+ export declare const actorProperties: INodeProperties[];
4
+ export declare const properties: INodeProperties[];
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.properties = exports.actorProperties = void 0;
4
+ exports.buildActorInput = buildActorInput;
5
+ function getFixedCollectionParam(context, paramName, itemIndex, optionName, transformType) {
6
+ var _a;
7
+ const param = context.getNodeParameter(paramName, itemIndex, {});
8
+ if (!((_a = param === null || param === void 0 ? void 0 : param[optionName]) === null || _a === void 0 ? void 0 : _a.length))
9
+ return {};
10
+ let result = param[optionName];
11
+ if (transformType === 'mapValues') {
12
+ result = result.map((item) => item.value);
13
+ }
14
+ return { [paramName]: result };
15
+ }
16
+ function getJsonParam(context, paramName, itemIndex) {
17
+ try {
18
+ const rawValue = context.getNodeParameter(paramName, itemIndex);
19
+ if (typeof rawValue === 'string' && rawValue.trim() === '') {
20
+ return {};
21
+ }
22
+ return { [paramName]: typeof rawValue === 'string' ? JSON.parse(rawValue) : rawValue };
23
+ }
24
+ catch (error) {
25
+ throw new Error(`Invalid JSON in parameter "${paramName}": ${error.message}`);
26
+ }
27
+ }
28
+ function buildActorInput(context, itemIndex, defaultInput) {
29
+ return {
30
+ ...defaultInput,
31
+ ...getFixedCollectionParam(context, 'startUrls', itemIndex, 'items', 'passthrough'),
32
+ maxItems: context.getNodeParameter('maxItems', itemIndex),
33
+ scrapePostsFromLists: context.getNodeParameter('scrapePostsFromLists', itemIndex),
34
+ scrapeComments: context.getNodeParameter('scrapeComments', itemIndex),
35
+ maxComments: context.getNodeParameter('maxComments', itemIndex),
36
+ debugMode: context.getNodeParameter('debugMode', itemIndex),
37
+ ...getJsonParam(context, 'proxyConfiguration', itemIndex),
38
+ };
39
+ }
40
+ const authenticationProperties = [
41
+ {
42
+ displayName: 'Authentication',
43
+ name: 'authentication',
44
+ type: 'options',
45
+ options: [
46
+ {
47
+ name: 'API Key',
48
+ value: 'apifyApi',
49
+ },
50
+ {
51
+ name: 'OAuth2',
52
+ value: 'apifyOAuth2Api',
53
+ },
54
+ ],
55
+ default: 'apifyApi',
56
+ description: 'Choose which authentication method to use',
57
+ },
58
+ ];
59
+ exports.actorProperties = [
60
+ {
61
+ "displayName": "Start URLs",
62
+ "name": "startUrls",
63
+ "description": "URLs to scrape from TeamBlind. Supports post lists (/?sort=pop, /?sort=id, /channels/*, /company/*) and individual post pages (/post/*).",
64
+ "required": true,
65
+ "default": {},
66
+ "type": "fixedCollection",
67
+ "typeOptions": {
68
+ "multipleValues": true
69
+ },
70
+ "options": [
71
+ {
72
+ "name": "items",
73
+ "displayName": "items",
74
+ "values": [
75
+ {
76
+ "displayName": "item",
77
+ "name": "url",
78
+ "type": "string",
79
+ "default": ""
80
+ }
81
+ ]
82
+ }
83
+ ]
84
+ },
85
+ {
86
+ "displayName": "Max Items",
87
+ "name": "maxItems",
88
+ "description": "Maximum number of posts to scrape. Set to 0 for unlimited.",
89
+ "required": false,
90
+ "default": 100,
91
+ "type": "number",
92
+ "typeOptions": {
93
+ "minValue": 0,
94
+ "maxValue": 10000
95
+ }
96
+ },
97
+ {
98
+ "displayName": "Scrape Full Post Details",
99
+ "name": "scrapePostsFromLists",
100
+ "description": "When enabled, follows each post link from list pages to scrape full content and poll data. Additional pay-per-event charges apply.",
101
+ "required": false,
102
+ "default": false,
103
+ "type": "boolean"
104
+ },
105
+ {
106
+ "displayName": "Scrape Comments",
107
+ "name": "scrapeComments",
108
+ "description": "When enabled, extracts comments from post detail pages. Disabling this significantly improves speed.",
109
+ "required": false,
110
+ "default": false,
111
+ "type": "boolean"
112
+ },
113
+ {
114
+ "displayName": "Max Comments per Post",
115
+ "name": "maxComments",
116
+ "description": "Maximum number of comments to extract per post. Set to 0 for all comments.",
117
+ "required": false,
118
+ "default": 10,
119
+ "type": "number",
120
+ "typeOptions": {
121
+ "minValue": 0,
122
+ "maxValue": 100
123
+ }
124
+ },
125
+ {
126
+ "displayName": "Debug Mode",
127
+ "name": "debugMode",
128
+ "description": "When enabled, saves screenshots and HTML to Key-Value Store on extraction failures for troubleshooting.",
129
+ "required": false,
130
+ "default": false,
131
+ "type": "boolean"
132
+ },
133
+ {
134
+ "displayName": "Proxy Configuration",
135
+ "name": "proxyConfiguration",
136
+ "description": "Proxy settings. TeamBlind requires residential proxies to avoid blocks.",
137
+ "required": false,
138
+ "default": "{\"useApifyProxy\":true,\"apifyProxyGroups\":[\"RESIDENTIAL\"],\"apifyProxyCountry\":\"US\"}",
139
+ "type": "json"
140
+ }
141
+ ];
142
+ exports.properties = [...exports.actorProperties, ...authenticationProperties];
143
+ //# sourceMappingURL=ApifyBlindPostCommentsScraper.properties.js.map