@jam-nodes/nodes 0.1.2 → 0.2.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 (93) hide show
  1. package/dist/ai/analyze-posts.d.ts +175 -0
  2. package/dist/ai/analyze-posts.d.ts.map +1 -0
  3. package/dist/ai/analyze-posts.js +172 -0
  4. package/dist/ai/analyze-posts.js.map +1 -0
  5. package/dist/ai/draft-emails.d.ts +45 -0
  6. package/dist/ai/draft-emails.d.ts.map +1 -0
  7. package/dist/ai/draft-emails.js +134 -0
  8. package/dist/ai/draft-emails.js.map +1 -0
  9. package/dist/ai/index.d.ts +4 -0
  10. package/dist/ai/index.d.ts.map +1 -0
  11. package/dist/ai/index.js +4 -0
  12. package/dist/ai/index.js.map +1 -0
  13. package/dist/ai/keyword-generator.d.ts +37 -0
  14. package/dist/ai/keyword-generator.d.ts.map +1 -0
  15. package/dist/ai/keyword-generator.js +124 -0
  16. package/dist/ai/keyword-generator.js.map +1 -0
  17. package/dist/index.d.ts +323 -0
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +29 -0
  20. package/dist/index.js.map +1 -1
  21. package/dist/integrations/apollo/index.d.ts +2 -0
  22. package/dist/integrations/apollo/index.d.ts.map +1 -0
  23. package/dist/integrations/apollo/index.js +2 -0
  24. package/dist/integrations/apollo/index.js.map +1 -0
  25. package/dist/integrations/apollo/search-contacts.d.ts +158 -0
  26. package/dist/integrations/apollo/search-contacts.d.ts.map +1 -0
  27. package/dist/integrations/apollo/search-contacts.js +161 -0
  28. package/dist/integrations/apollo/search-contacts.js.map +1 -0
  29. package/dist/integrations/dataforseo/index.d.ts +3 -0
  30. package/dist/integrations/dataforseo/index.d.ts.map +1 -0
  31. package/dist/integrations/dataforseo/index.js +3 -0
  32. package/dist/integrations/dataforseo/index.js.map +1 -0
  33. package/dist/integrations/dataforseo/keyword-research.d.ts +96 -0
  34. package/dist/integrations/dataforseo/keyword-research.d.ts.map +1 -0
  35. package/dist/integrations/dataforseo/keyword-research.js +115 -0
  36. package/dist/integrations/dataforseo/keyword-research.js.map +1 -0
  37. package/dist/integrations/dataforseo/seo-audit.d.ts +257 -0
  38. package/dist/integrations/dataforseo/seo-audit.d.ts.map +1 -0
  39. package/dist/integrations/dataforseo/seo-audit.js +266 -0
  40. package/dist/integrations/dataforseo/seo-audit.js.map +1 -0
  41. package/dist/integrations/index.d.ts +5 -0
  42. package/dist/integrations/index.d.ts.map +1 -0
  43. package/dist/integrations/index.js +9 -0
  44. package/dist/integrations/index.js.map +1 -0
  45. package/dist/integrations/openai/index.d.ts +2 -0
  46. package/dist/integrations/openai/index.d.ts.map +1 -0
  47. package/dist/integrations/openai/index.js +2 -0
  48. package/dist/integrations/openai/index.js.map +1 -0
  49. package/dist/integrations/openai/sora-video.d.ts +89 -0
  50. package/dist/integrations/openai/sora-video.d.ts.map +1 -0
  51. package/dist/integrations/openai/sora-video.js +93 -0
  52. package/dist/integrations/openai/sora-video.js.map +1 -0
  53. package/dist/integrations/social/index.d.ts +4 -0
  54. package/dist/integrations/social/index.d.ts.map +1 -0
  55. package/dist/integrations/social/index.js +4 -0
  56. package/dist/integrations/social/index.js.map +1 -0
  57. package/dist/integrations/social/linkedin-monitor.d.ts +166 -0
  58. package/dist/integrations/social/linkedin-monitor.d.ts.map +1 -0
  59. package/dist/integrations/social/linkedin-monitor.js +167 -0
  60. package/dist/integrations/social/linkedin-monitor.js.map +1 -0
  61. package/dist/integrations/social/reddit-monitor.d.ts +177 -0
  62. package/dist/integrations/social/reddit-monitor.d.ts.map +1 -0
  63. package/dist/integrations/social/reddit-monitor.js +162 -0
  64. package/dist/integrations/social/reddit-monitor.js.map +1 -0
  65. package/dist/integrations/social/twitter-monitor.d.ts +186 -0
  66. package/dist/integrations/social/twitter-monitor.d.ts.map +1 -0
  67. package/dist/integrations/social/twitter-monitor.js +174 -0
  68. package/dist/integrations/social/twitter-monitor.js.map +1 -0
  69. package/dist/prompts/analyze-posts.d.ts +31 -0
  70. package/dist/prompts/analyze-posts.d.ts.map +1 -0
  71. package/dist/prompts/analyze-posts.js +87 -0
  72. package/dist/prompts/analyze-posts.js.map +1 -0
  73. package/dist/prompts/draft-emails.d.ts +19 -0
  74. package/dist/prompts/draft-emails.d.ts.map +1 -0
  75. package/dist/prompts/draft-emails.js +117 -0
  76. package/dist/prompts/draft-emails.js.map +1 -0
  77. package/dist/prompts/index.d.ts +4 -0
  78. package/dist/prompts/index.d.ts.map +1 -0
  79. package/dist/prompts/index.js +7 -0
  80. package/dist/prompts/index.js.map +1 -0
  81. package/dist/prompts/keyword-generator.d.ts +17 -0
  82. package/dist/prompts/keyword-generator.d.ts.map +1 -0
  83. package/dist/prompts/keyword-generator.js +61 -0
  84. package/dist/prompts/keyword-generator.js.map +1 -0
  85. package/dist/schemas/ai.d.ts +1212 -0
  86. package/dist/schemas/ai.d.ts.map +1 -0
  87. package/dist/schemas/ai.js +119 -0
  88. package/dist/schemas/ai.js.map +1 -0
  89. package/dist/schemas/index.d.ts +2 -0
  90. package/dist/schemas/index.d.ts.map +1 -0
  91. package/dist/schemas/index.js +9 -0
  92. package/dist/schemas/index.js.map +1 -0
  93. package/package.json +14 -6
@@ -0,0 +1,257 @@
1
+ import { z } from 'zod';
2
+ export interface SeoIssue {
3
+ id: string;
4
+ title: string;
5
+ description: string;
6
+ score: number;
7
+ displayValue?: string;
8
+ }
9
+ export declare const SeoAuditInputSchema: z.ZodObject<{
10
+ /** URL to audit */
11
+ url: z.ZodOptional<z.ZodString>;
12
+ }, "strip", z.ZodTypeAny, {
13
+ url?: string | undefined;
14
+ }, {
15
+ url?: string | undefined;
16
+ }>;
17
+ export type SeoAuditInput = z.infer<typeof SeoAuditInputSchema>;
18
+ export declare const SeoAuditOutputSchema: z.ZodObject<{
19
+ overallScore: z.ZodNullable<z.ZodNumber>;
20
+ issues: z.ZodArray<z.ZodObject<{
21
+ id: z.ZodString;
22
+ title: z.ZodString;
23
+ description: z.ZodString;
24
+ score: z.ZodNumber;
25
+ displayValue: z.ZodOptional<z.ZodString>;
26
+ }, "strip", z.ZodTypeAny, {
27
+ id: string;
28
+ title: string;
29
+ description: string;
30
+ score: number;
31
+ displayValue?: string | undefined;
32
+ }, {
33
+ id: string;
34
+ title: string;
35
+ description: string;
36
+ score: number;
37
+ displayValue?: string | undefined;
38
+ }>, "many">;
39
+ passedAudits: z.ZodNumber;
40
+ failedAudits: z.ZodNumber;
41
+ url: z.ZodNullable<z.ZodString>;
42
+ skipped: z.ZodOptional<z.ZodBoolean>;
43
+ awaitingUrl: z.ZodOptional<z.ZodBoolean>;
44
+ meta: z.ZodOptional<z.ZodObject<{
45
+ title: z.ZodOptional<z.ZodString>;
46
+ description: z.ZodOptional<z.ZodString>;
47
+ canonical: z.ZodOptional<z.ZodString>;
48
+ htags: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodArray<z.ZodString, "many">>>;
49
+ }, "strip", z.ZodTypeAny, {
50
+ title?: string | undefined;
51
+ description?: string | undefined;
52
+ canonical?: string | undefined;
53
+ htags?: Record<string, string[]> | undefined;
54
+ }, {
55
+ title?: string | undefined;
56
+ description?: string | undefined;
57
+ canonical?: string | undefined;
58
+ htags?: Record<string, string[]> | undefined;
59
+ }>>;
60
+ performance: z.ZodOptional<z.ZodObject<{
61
+ timeToInteractive: z.ZodOptional<z.ZodNumber>;
62
+ largestContentfulPaint: z.ZodOptional<z.ZodNumber>;
63
+ domComplete: z.ZodOptional<z.ZodNumber>;
64
+ }, "strip", z.ZodTypeAny, {
65
+ timeToInteractive?: number | undefined;
66
+ largestContentfulPaint?: number | undefined;
67
+ domComplete?: number | undefined;
68
+ }, {
69
+ timeToInteractive?: number | undefined;
70
+ largestContentfulPaint?: number | undefined;
71
+ domComplete?: number | undefined;
72
+ }>>;
73
+ links: z.ZodOptional<z.ZodObject<{
74
+ internal: z.ZodNumber;
75
+ external: z.ZodNumber;
76
+ broken: z.ZodNumber;
77
+ }, "strip", z.ZodTypeAny, {
78
+ internal: number;
79
+ external: number;
80
+ broken: number;
81
+ }, {
82
+ internal: number;
83
+ external: number;
84
+ broken: number;
85
+ }>>;
86
+ resources: z.ZodOptional<z.ZodObject<{
87
+ images: z.ZodNumber;
88
+ scripts: z.ZodNumber;
89
+ stylesheets: z.ZodNumber;
90
+ }, "strip", z.ZodTypeAny, {
91
+ images: number;
92
+ scripts: number;
93
+ stylesheets: number;
94
+ }, {
95
+ images: number;
96
+ scripts: number;
97
+ stylesheets: number;
98
+ }>>;
99
+ content: z.ZodOptional<z.ZodObject<{
100
+ wordCount: z.ZodNumber;
101
+ textRatio: z.ZodNumber;
102
+ readabilityScore: z.ZodOptional<z.ZodNumber>;
103
+ }, "strip", z.ZodTypeAny, {
104
+ wordCount: number;
105
+ textRatio: number;
106
+ readabilityScore?: number | undefined;
107
+ }, {
108
+ wordCount: number;
109
+ textRatio: number;
110
+ readabilityScore?: number | undefined;
111
+ }>>;
112
+ extractedKeywords: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
113
+ }, "strip", z.ZodTypeAny, {
114
+ issues: {
115
+ id: string;
116
+ title: string;
117
+ description: string;
118
+ score: number;
119
+ displayValue?: string | undefined;
120
+ }[];
121
+ url: string | null;
122
+ overallScore: number | null;
123
+ passedAudits: number;
124
+ failedAudits: number;
125
+ skipped?: boolean | undefined;
126
+ awaitingUrl?: boolean | undefined;
127
+ meta?: {
128
+ title?: string | undefined;
129
+ description?: string | undefined;
130
+ canonical?: string | undefined;
131
+ htags?: Record<string, string[]> | undefined;
132
+ } | undefined;
133
+ performance?: {
134
+ timeToInteractive?: number | undefined;
135
+ largestContentfulPaint?: number | undefined;
136
+ domComplete?: number | undefined;
137
+ } | undefined;
138
+ links?: {
139
+ internal: number;
140
+ external: number;
141
+ broken: number;
142
+ } | undefined;
143
+ resources?: {
144
+ images: number;
145
+ scripts: number;
146
+ stylesheets: number;
147
+ } | undefined;
148
+ content?: {
149
+ wordCount: number;
150
+ textRatio: number;
151
+ readabilityScore?: number | undefined;
152
+ } | undefined;
153
+ extractedKeywords?: string[] | undefined;
154
+ }, {
155
+ issues: {
156
+ id: string;
157
+ title: string;
158
+ description: string;
159
+ score: number;
160
+ displayValue?: string | undefined;
161
+ }[];
162
+ url: string | null;
163
+ overallScore: number | null;
164
+ passedAudits: number;
165
+ failedAudits: number;
166
+ skipped?: boolean | undefined;
167
+ awaitingUrl?: boolean | undefined;
168
+ meta?: {
169
+ title?: string | undefined;
170
+ description?: string | undefined;
171
+ canonical?: string | undefined;
172
+ htags?: Record<string, string[]> | undefined;
173
+ } | undefined;
174
+ performance?: {
175
+ timeToInteractive?: number | undefined;
176
+ largestContentfulPaint?: number | undefined;
177
+ domComplete?: number | undefined;
178
+ } | undefined;
179
+ links?: {
180
+ internal: number;
181
+ external: number;
182
+ broken: number;
183
+ } | undefined;
184
+ resources?: {
185
+ images: number;
186
+ scripts: number;
187
+ stylesheets: number;
188
+ } | undefined;
189
+ content?: {
190
+ wordCount: number;
191
+ textRatio: number;
192
+ readabilityScore?: number | undefined;
193
+ } | undefined;
194
+ extractedKeywords?: string[] | undefined;
195
+ }>;
196
+ export type SeoAuditOutput = z.infer<typeof SeoAuditOutputSchema>;
197
+ /**
198
+ * SEO Audit Node
199
+ *
200
+ * Runs an SEO audit using DataForSEO On-Page Instant Pages API.
201
+ * Provides comprehensive on-page SEO analysis including meta tags,
202
+ * content analysis, technical SEO checks, and performance metrics.
203
+ *
204
+ * Requires `context.services.dataForSeo` to be provided by the host application.
205
+ *
206
+ * @example
207
+ * ```typescript
208
+ * const result = await seoAuditNode.executor({
209
+ * url: 'https://example.com'
210
+ * }, context);
211
+ * ```
212
+ */
213
+ export declare const seoAuditNode: import("@jam-nodes/core").NodeDefinition<{
214
+ url?: string | undefined;
215
+ }, {
216
+ issues: {
217
+ id: string;
218
+ title: string;
219
+ description: string;
220
+ score: number;
221
+ displayValue?: string | undefined;
222
+ }[];
223
+ url: string | null;
224
+ overallScore: number | null;
225
+ passedAudits: number;
226
+ failedAudits: number;
227
+ skipped?: boolean | undefined;
228
+ awaitingUrl?: boolean | undefined;
229
+ meta?: {
230
+ title?: string | undefined;
231
+ description?: string | undefined;
232
+ canonical?: string | undefined;
233
+ htags?: Record<string, string[]> | undefined;
234
+ } | undefined;
235
+ performance?: {
236
+ timeToInteractive?: number | undefined;
237
+ largestContentfulPaint?: number | undefined;
238
+ domComplete?: number | undefined;
239
+ } | undefined;
240
+ links?: {
241
+ internal: number;
242
+ external: number;
243
+ broken: number;
244
+ } | undefined;
245
+ resources?: {
246
+ images: number;
247
+ scripts: number;
248
+ stylesheets: number;
249
+ } | undefined;
250
+ content?: {
251
+ wordCount: number;
252
+ textRatio: number;
253
+ readabilityScore?: number | undefined;
254
+ } | undefined;
255
+ extractedKeywords?: string[] | undefined;
256
+ }>;
257
+ //# sourceMappingURL=seo-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo-audit.d.ts","sourceRoot":"","sources":["../../../src/integrations/dataforseo/seo-audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,eAAO,MAAM,mBAAmB;IAC9B,mBAAmB;;;;;;EAEnB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEhE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyC/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAmFlE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6IvB,CAAC"}
@@ -0,0 +1,266 @@
1
+ import { z } from 'zod';
2
+ import { defineNode } from '@jam-nodes/core';
3
+ // =============================================================================
4
+ // Schemas
5
+ // =============================================================================
6
+ export const SeoAuditInputSchema = z.object({
7
+ /** URL to audit */
8
+ url: z.string().url().optional(),
9
+ });
10
+ export const SeoAuditOutputSchema = z.object({
11
+ overallScore: z.number().nullable(),
12
+ issues: z.array(z.object({
13
+ id: z.string(),
14
+ title: z.string(),
15
+ description: z.string(),
16
+ score: z.number(),
17
+ displayValue: z.string().optional(),
18
+ })),
19
+ passedAudits: z.number(),
20
+ failedAudits: z.number(),
21
+ url: z.string().nullable(),
22
+ skipped: z.boolean().optional(),
23
+ awaitingUrl: z.boolean().optional(),
24
+ meta: z.object({
25
+ title: z.string().optional(),
26
+ description: z.string().optional(),
27
+ canonical: z.string().optional(),
28
+ htags: z.record(z.array(z.string())).optional(),
29
+ }).optional(),
30
+ performance: z.object({
31
+ timeToInteractive: z.number().optional(),
32
+ largestContentfulPaint: z.number().optional(),
33
+ domComplete: z.number().optional(),
34
+ }).optional(),
35
+ links: z.object({
36
+ internal: z.number(),
37
+ external: z.number(),
38
+ broken: z.number(),
39
+ }).optional(),
40
+ resources: z.object({
41
+ images: z.number(),
42
+ scripts: z.number(),
43
+ stylesheets: z.number(),
44
+ }).optional(),
45
+ content: z.object({
46
+ wordCount: z.number(),
47
+ textRatio: z.number(),
48
+ readabilityScore: z.number().optional(),
49
+ }).optional(),
50
+ extractedKeywords: z.array(z.string()).optional(),
51
+ });
52
+ // =============================================================================
53
+ // Constants
54
+ // =============================================================================
55
+ const CHECK_DESCRIPTIONS = {
56
+ title: 'The page should have a title tag with an appropriate length (50-60 characters).',
57
+ description: 'The page should have a meta description with an appropriate length (120-160 characters).',
58
+ canonical: 'The page should have a valid canonical URL to prevent duplicate content issues.',
59
+ h1: 'The page should have exactly one H1 tag that describes the main topic.',
60
+ https: 'The page should be served over HTTPS for security and SEO benefits.',
61
+ no_content_encoding: 'Content should be properly encoded (gzip/brotli) for faster loading.',
62
+ is_http: 'The page is using HTTP instead of HTTPS, which can hurt SEO rankings.',
63
+ has_redirect: 'The page has redirects that may slow down loading and dilute link equity.',
64
+ no_doctype: 'The page is missing a DOCTYPE declaration.',
65
+ flash: 'The page uses Flash which is not supported by modern browsers.',
66
+ frame: 'The page uses frames which can cause SEO and accessibility issues.',
67
+ lorem_ipsum: 'The page contains placeholder Lorem Ipsum text.',
68
+ seo_friendly_url: 'URLs should be readable and contain relevant keywords.',
69
+ title_too_long: 'The title tag is too long and may be truncated in search results.',
70
+ title_too_short: 'The title tag is too short and may not be descriptive enough.',
71
+ description_too_long: 'The meta description is too long and may be truncated.',
72
+ description_too_short: 'The meta description is too short and may not provide enough context.',
73
+ low_content_rate: 'The page has a low text-to-HTML ratio, which may indicate thin content.',
74
+ high_loading_time: 'The page takes too long to load, which can hurt user experience and rankings.',
75
+ is_broken: 'The page returns an error status code.',
76
+ size_greater_than_3mb: 'The page size exceeds 3MB which can cause slow loading.',
77
+ no_image_alt: 'Images are missing alt text, which hurts accessibility and image SEO.',
78
+ no_h1_tag: 'The page is missing an H1 tag.',
79
+ duplicate_title_tag: 'Multiple pages share the same title tag.',
80
+ duplicate_meta_description: 'Multiple pages share the same meta description.',
81
+ duplicate_content: 'The page has duplicate or near-duplicate content with other pages.',
82
+ };
83
+ // Positive checks where TRUE means GOOD
84
+ const POSITIVE_CHECKS = new Set(['is_https', 'has_html_doctype']);
85
+ // Informational checks - neutral data points
86
+ const INFORMATIONAL_CHECKS = new Set(['is_www', 'from_sitemap', 'has_micromarkup']);
87
+ // =============================================================================
88
+ // Helpers
89
+ // =============================================================================
90
+ function formatCheckTitle(checkId) {
91
+ return checkId
92
+ .split('_')
93
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1))
94
+ .join(' ');
95
+ }
96
+ function validateUrl(url) {
97
+ try {
98
+ const parsed = new URL(url);
99
+ // Only allow http/https
100
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
101
+ return { isValid: false, error: 'Only HTTP/HTTPS URLs are allowed' };
102
+ }
103
+ // Block internal IPs
104
+ const hostname = parsed.hostname.toLowerCase();
105
+ if (hostname === 'localhost' ||
106
+ hostname === '127.0.0.1' ||
107
+ hostname.startsWith('192.168.') ||
108
+ hostname.startsWith('10.') ||
109
+ hostname.startsWith('172.')) {
110
+ return { isValid: false, error: 'Internal URLs are not allowed' };
111
+ }
112
+ return { isValid: true };
113
+ }
114
+ catch {
115
+ return { isValid: false, error: 'Invalid URL format' };
116
+ }
117
+ }
118
+ // =============================================================================
119
+ // Node Definition
120
+ // =============================================================================
121
+ /**
122
+ * SEO Audit Node
123
+ *
124
+ * Runs an SEO audit using DataForSEO On-Page Instant Pages API.
125
+ * Provides comprehensive on-page SEO analysis including meta tags,
126
+ * content analysis, technical SEO checks, and performance metrics.
127
+ *
128
+ * Requires `context.services.dataForSeo` to be provided by the host application.
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * const result = await seoAuditNode.executor({
133
+ * url: 'https://example.com'
134
+ * }, context);
135
+ * ```
136
+ */
137
+ export const seoAuditNode = defineNode({
138
+ type: 'seo_audit',
139
+ name: 'SEO Audit',
140
+ description: 'Run comprehensive SEO audit using DataForSEO',
141
+ category: 'integration',
142
+ inputSchema: SeoAuditInputSchema,
143
+ outputSchema: SeoAuditOutputSchema,
144
+ estimatedDuration: 30,
145
+ capabilities: {
146
+ supportsRerun: true,
147
+ },
148
+ executor: async (input, context) => {
149
+ try {
150
+ // Require DataForSEO service
151
+ if (!context.services?.dataForSeo) {
152
+ return {
153
+ success: false,
154
+ error: 'DataForSEO service not configured. Please provide context.services.dataForSeo.',
155
+ };
156
+ }
157
+ // Check for stored values from previous approval
158
+ const storedUrl = context.variables?.['site_url'];
159
+ const skipFlag = context.variables?.['seo_audit_skip'];
160
+ const urlToAudit = input.url || storedUrl;
161
+ // Handle skip case
162
+ if (skipFlag) {
163
+ return {
164
+ success: true,
165
+ output: {
166
+ skipped: true,
167
+ overallScore: null,
168
+ issues: [],
169
+ passedAudits: 0,
170
+ failedAudits: 0,
171
+ url: null,
172
+ },
173
+ };
174
+ }
175
+ // If no URL provided, indicate awaiting input
176
+ if (!urlToAudit) {
177
+ return {
178
+ success: true,
179
+ output: {
180
+ awaitingUrl: true,
181
+ overallScore: null,
182
+ issues: [],
183
+ passedAudits: 0,
184
+ failedAudits: 0,
185
+ url: null,
186
+ },
187
+ };
188
+ }
189
+ // Validate URL
190
+ const urlValidation = validateUrl(urlToAudit);
191
+ if (!urlValidation.isValid) {
192
+ return {
193
+ success: false,
194
+ error: `Invalid URL: ${urlValidation.error}`,
195
+ };
196
+ }
197
+ // Call DataForSEO
198
+ const onPageResult = await context.services.dataForSeo.getOnPageInstant(urlToAudit, {
199
+ enableJavascript: false,
200
+ });
201
+ const overallScore = Math.round(onPageResult.onPageScore);
202
+ // Build issues from failed checks
203
+ const issues = [];
204
+ let passedAudits = 0;
205
+ let failedAudits = 0;
206
+ if (onPageResult.checks) {
207
+ for (const [checkId, checkData] of Object.entries(onPageResult.checks)) {
208
+ if (INFORMATIONAL_CHECKS.has(checkId)) {
209
+ continue;
210
+ }
211
+ let isPassed;
212
+ if (POSITIVE_CHECKS.has(checkId)) {
213
+ isPassed = checkData.passed;
214
+ }
215
+ else {
216
+ isPassed = checkData.passed;
217
+ }
218
+ if (isPassed) {
219
+ passedAudits++;
220
+ }
221
+ else {
222
+ failedAudits++;
223
+ issues.push({
224
+ id: checkId,
225
+ title: formatCheckTitle(checkId),
226
+ description: checkData.description || CHECK_DESCRIPTIONS[checkId] || `Issue: ${formatCheckTitle(checkId)}`,
227
+ score: checkData.score,
228
+ });
229
+ }
230
+ }
231
+ }
232
+ const output = {
233
+ overallScore,
234
+ issues,
235
+ passedAudits,
236
+ failedAudits,
237
+ url: urlToAudit,
238
+ meta: onPageResult.meta,
239
+ };
240
+ // Optional: send notification if service available
241
+ if (context.services?.notifications) {
242
+ await context.services.notifications.send({
243
+ userId: context.userId,
244
+ title: 'SEO Audit Complete',
245
+ message: `SEO Score: ${overallScore}/100 (${failedAudits} issues found)`,
246
+ data: {
247
+ url: urlToAudit,
248
+ score: overallScore,
249
+ issues: failedAudits,
250
+ },
251
+ });
252
+ }
253
+ return {
254
+ success: true,
255
+ output,
256
+ };
257
+ }
258
+ catch (error) {
259
+ return {
260
+ success: false,
261
+ error: error instanceof Error ? error.message : 'Failed to run SEO audit',
262
+ };
263
+ }
264
+ },
265
+ });
266
+ //# sourceMappingURL=seo-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seo-audit.js","sourceRoot":"","sources":["../../../src/integrations/dataforseo/seo-audit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export { redditMonitorNode, RedditMonitorInputSchema, RedditMonitorOutputSchema, type RedditMonitorInput, type RedditMonitorOutput, type RedditPost, twitterMonitorNode, TwitterMonitorInputSchema, TwitterMonitorOutputSchema, type TwitterMonitorInput, type TwitterMonitorOutput, type TwitterPost, linkedinMonitorNode, LinkedInMonitorInputSchema, LinkedInMonitorOutputSchema, type LinkedInMonitorInput, type LinkedInMonitorOutput, type LinkedInPost, } from './social/index';
2
+ export { soraVideoNode, SoraVideoInputSchema, SoraVideoOutputSchema, type SoraVideoInput, type SoraVideoOutput, } from './openai/index';
3
+ export { seoKeywordResearchNode, SeoKeywordResearchInputSchema, SeoKeywordResearchOutputSchema, type SeoKeywordResearchInput, type SeoKeywordResearchOutput, seoAuditNode, SeoAuditInputSchema, SeoAuditOutputSchema, type SeoAuditInput, type SeoAuditOutput, type SeoIssue, } from './dataforseo/index';
4
+ export { searchContactsNode, SearchContactsInputSchema, SearchContactsOutputSchema, type SearchContactsInput, type SearchContactsOutput, } from './apollo/index';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,WAAW,EAChB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,8BAA8B,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,QAAQ,GACd,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,GAC1B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Social integrations
2
+ export { redditMonitorNode, RedditMonitorInputSchema, RedditMonitorOutputSchema, twitterMonitorNode, TwitterMonitorInputSchema, TwitterMonitorOutputSchema, linkedinMonitorNode, LinkedInMonitorInputSchema, LinkedInMonitorOutputSchema, } from './social/index';
3
+ // OpenAI integrations
4
+ export { soraVideoNode, SoraVideoInputSchema, SoraVideoOutputSchema, } from './openai/index';
5
+ // DataForSEO integrations
6
+ export { seoKeywordResearchNode, SeoKeywordResearchInputSchema, SeoKeywordResearchOutputSchema, seoAuditNode, SeoAuditInputSchema, SeoAuditOutputSchema, } from './dataforseo/index';
7
+ // Apollo integrations
8
+ export { searchContactsNode, SearchContactsInputSchema, SearchContactsOutputSchema, } from './apollo/index';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,EACL,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EAIzB,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,EAI1B,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,GAI5B,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,GAGtB,MAAM,gBAAgB,CAAC;AAExB,0BAA0B;AAC1B,OAAO,EACL,sBAAsB,EACtB,6BAA6B,EAC7B,8BAA8B,EAG9B,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,GAIrB,MAAM,oBAAoB,CAAC;AAE5B,sBAAsB;AACtB,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { soraVideoNode, SoraVideoInputSchema, SoraVideoOutputSchema, type SoraVideoInput, type SoraVideoOutput, } from './sora-video';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { soraVideoNode, SoraVideoInputSchema, SoraVideoOutputSchema, } from './sora-video';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/openai/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,oBAAoB,EACpB,qBAAqB,GAGtB,MAAM,cAAc,CAAC"}
@@ -0,0 +1,89 @@
1
+ import { z } from 'zod';
2
+ export declare const SoraVideoInputSchema: z.ZodObject<{
3
+ /** Detailed description of the video to generate */
4
+ prompt: z.ZodString;
5
+ /** Sora model to use */
6
+ model: z.ZodDefault<z.ZodOptional<z.ZodEnum<["sora-2", "sora-2-pro"]>>>;
7
+ /** Video duration in seconds */
8
+ seconds: z.ZodDefault<z.ZodOptional<z.ZodUnion<[z.ZodLiteral<4>, z.ZodLiteral<8>, z.ZodLiteral<12>]>>>;
9
+ /** Video dimensions */
10
+ size: z.ZodDefault<z.ZodOptional<z.ZodEnum<["720x1280", "1280x720", "1024x1792", "1792x1024"]>>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ prompt: string;
13
+ model: "sora-2" | "sora-2-pro";
14
+ seconds: 8 | 4 | 12;
15
+ size: "720x1280" | "1280x720" | "1024x1792" | "1792x1024";
16
+ }, {
17
+ prompt: string;
18
+ model?: "sora-2" | "sora-2-pro" | undefined;
19
+ seconds?: 8 | 4 | 12 | undefined;
20
+ size?: "720x1280" | "1280x720" | "1024x1792" | "1792x1024" | undefined;
21
+ }>;
22
+ export type SoraVideoInput = z.infer<typeof SoraVideoInputSchema>;
23
+ export declare const SoraVideoOutputSchema: z.ZodObject<{
24
+ video: z.ZodObject<{
25
+ url: z.ZodString;
26
+ durationSeconds: z.ZodNumber;
27
+ size: z.ZodString;
28
+ model: z.ZodString;
29
+ }, "strip", z.ZodTypeAny, {
30
+ url: string;
31
+ model: string;
32
+ size: string;
33
+ durationSeconds: number;
34
+ }, {
35
+ url: string;
36
+ model: string;
37
+ size: string;
38
+ durationSeconds: number;
39
+ }>;
40
+ processingTimeSeconds: z.ZodNumber;
41
+ }, "strip", z.ZodTypeAny, {
42
+ video: {
43
+ url: string;
44
+ model: string;
45
+ size: string;
46
+ durationSeconds: number;
47
+ };
48
+ processingTimeSeconds: number;
49
+ }, {
50
+ video: {
51
+ url: string;
52
+ model: string;
53
+ size: string;
54
+ durationSeconds: number;
55
+ };
56
+ processingTimeSeconds: number;
57
+ }>;
58
+ export type SoraVideoOutput = z.infer<typeof SoraVideoOutputSchema>;
59
+ /**
60
+ * Sora Video Generation Node
61
+ *
62
+ * Generates videos using OpenAI Sora 2 API.
63
+ * Requires `context.services.openai` to be provided by the host application.
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const result = await soraVideoNode.executor({
68
+ * prompt: 'A serene ocean sunset with waves gently crashing',
69
+ * model: 'sora-2',
70
+ * seconds: 8,
71
+ * size: '1280x720'
72
+ * }, context);
73
+ * ```
74
+ */
75
+ export declare const soraVideoNode: import("@jam-nodes/core").NodeDefinition<{
76
+ prompt: string;
77
+ model?: "sora-2" | "sora-2-pro" | undefined;
78
+ seconds?: 8 | 4 | 12 | undefined;
79
+ size?: "720x1280" | "1280x720" | "1024x1792" | "1792x1024" | undefined;
80
+ }, {
81
+ video: {
82
+ url: string;
83
+ model: string;
84
+ size: string;
85
+ durationSeconds: number;
86
+ };
87
+ processingTimeSeconds: number;
88
+ }>;
89
+ //# sourceMappingURL=sora-video.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sora-video.d.ts","sourceRoot":"","sources":["../../../src/integrations/openai/sora-video.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,oBAAoB;IAC/B,oDAAoD;;IAEpD,wBAAwB;;IAExB,gCAAgC;;IAEhC,uBAAuB;;;;;;;;;;;;EAEvB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQhC,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;EAoDxB,CAAC"}