Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions packages/core/src/types/node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,26 @@ export interface NodeCredentials {
}
/** Twitter/X API credentials */
twitter?: {
/** OAuth2 client ID for PKCE flow */
clientId?: string;
/** OAuth2 client secret for token exchange/refresh */
clientSecret?: string;
/** OAuth2 access token used for Twitter API v2 operations */
accessToken?: string;
/** OAuth2 refresh token */
refreshToken?: string;
/** Access token expiration timestamp (unix ms) */
expiresAt?: number;
/** Official Twitter API v2 Bearer Token */
bearerToken?: string;
/** TwitterAPI.io API key (third-party, simpler) */
twitterApiIoKey?: string;
/** OAuth 1.0a Consumer Key (API Key) */
consumerKey?: string;
/** OAuth 1.0a Consumer Secret (API Secret) */
consumerSecret?: string;
/** OAuth 1.0a Access Token Secret */
accessTokenSecret?: string;
};
/** ForumScout API credentials (for LinkedIn monitoring) */
forumScout?: {
Expand Down
50 changes: 50 additions & 0 deletions packages/nodes/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,28 @@ export {
twitterMonitorNode,
TwitterMonitorInputSchema,
TwitterMonitorOutputSchema,
twitterCredential,
twitterCreateTweetNode,
TwitterCreateTweetInputSchema,
TwitterCreateTweetOutputSchema,
twitterDeleteTweetNode,
TwitterDeleteTweetInputSchema,
TwitterDeleteTweetOutputSchema,
twitterLikeTweetNode,
TwitterLikeTweetInputSchema,
TwitterLikeTweetOutputSchema,
twitterRetweetNode,
TwitterRetweetInputSchema,
TwitterRetweetOutputSchema,
twitterSearchTweetsNode,
TwitterSearchTweetsInputSchema,
TwitterSearchTweetsOutputSchema,
twitterSendDMNode,
TwitterSendDMInputSchema,
TwitterSendDMOutputSchema,
twitterGetUserByUsernameNode,
TwitterGetUserByUsernameInputSchema,
TwitterGetUserByUsernameOutputSchema,
linkedinMonitorNode,
LinkedInMonitorInputSchema,
LinkedInMonitorOutputSchema,
Expand Down Expand Up @@ -128,6 +150,20 @@ export type {
TwitterMonitorInput,
TwitterMonitorOutput,
TwitterPost,
TwitterCreateTweetInput,
TwitterCreateTweetOutput,
TwitterDeleteTweetInput,
TwitterDeleteTweetOutput,
TwitterLikeTweetInput,
TwitterLikeTweetOutput,
TwitterRetweetInput,
TwitterRetweetOutput,
TwitterSearchTweetsInput,
TwitterSearchTweetsOutput,
TwitterSendDMInput,
TwitterSendDMOutput,
TwitterGetUserByUsernameInput,
TwitterGetUserByUsernameOutput,
LinkedInMonitorInput,
LinkedInMonitorOutput,
LinkedInPost,
Expand Down Expand Up @@ -192,6 +228,13 @@ import { httpRequestNode, breadNode } from './examples/index.js';
import {
redditMonitorNode,
twitterMonitorNode,
twitterCreateTweetNode,
twitterDeleteTweetNode,
twitterLikeTweetNode,
twitterRetweetNode,
twitterSearchTweetsNode,
twitterSendDMNode,
twitterGetUserByUsernameNode,
linkedinMonitorNode,
soraVideoNode,
seoKeywordResearchNode,
Expand Down Expand Up @@ -228,6 +271,13 @@ export const builtInNodes = [
// Integrations
redditMonitorNode,
twitterMonitorNode,
twitterCreateTweetNode,
twitterDeleteTweetNode,
twitterLikeTweetNode,
twitterRetweetNode,
twitterSearchTweetsNode,
twitterSendDMNode,
twitterGetUserByUsernameNode,
linkedinMonitorNode,
soraVideoNode,
seoKeywordResearchNode,
Expand Down
36 changes: 36 additions & 0 deletions packages/nodes/src/integrations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,42 @@ export {
type TwitterMonitorInput,
type TwitterMonitorOutput,
type TwitterPost,
twitterCredential,
twitterCreateTweetNode,
TwitterCreateTweetInputSchema,
TwitterCreateTweetOutputSchema,
type TwitterCreateTweetInput,
type TwitterCreateTweetOutput,
twitterDeleteTweetNode,
TwitterDeleteTweetInputSchema,
TwitterDeleteTweetOutputSchema,
type TwitterDeleteTweetInput,
type TwitterDeleteTweetOutput,
twitterLikeTweetNode,
TwitterLikeTweetInputSchema,
TwitterLikeTweetOutputSchema,
type TwitterLikeTweetInput,
type TwitterLikeTweetOutput,
twitterRetweetNode,
TwitterRetweetInputSchema,
TwitterRetweetOutputSchema,
type TwitterRetweetInput,
type TwitterRetweetOutput,
twitterSearchTweetsNode,
TwitterSearchTweetsInputSchema,
TwitterSearchTweetsOutputSchema,
type TwitterSearchTweetsInput,
type TwitterSearchTweetsOutput,
twitterSendDMNode,
TwitterSendDMInputSchema,
TwitterSendDMOutputSchema,
type TwitterSendDMInput,
type TwitterSendDMOutput,
twitterGetUserByUsernameNode,
TwitterGetUserByUsernameInputSchema,
TwitterGetUserByUsernameOutputSchema,
type TwitterGetUserByUsernameInput,
type TwitterGetUserByUsernameOutput,
linkedinMonitorNode,
LinkedInMonitorInputSchema,
LinkedInMonitorOutputSchema,
Expand Down
36 changes: 36 additions & 0 deletions packages/nodes/src/integrations/social/credentials.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { z } from 'zod';
import { defineOAuth2Credential } from '@jam-nodes/core';

export const twitterCredential = defineOAuth2Credential({
pkce: true,
name: 'twitter',
displayName: 'Twitter/X OAuth2',
documentationUrl: 'https://developer.twitter.com/en/docs',
config: {
authorizationUrl: 'https://twitter.com/i/oauth2/authorize',
tokenUrl: 'https://api.twitter.com/2/oauth2/token',
scopes: [
'tweet.read',
'tweet.write',
'users.read',
'dm.read',
'dm.write',
'like.read',
'like.write',
'offline.access',
],
pkce: true,
},
schema: z.object({
clientId: z.string(),
clientSecret: z.string(),
accessToken: z.string(),
refreshToken: z.string().optional(),
expiresAt: z.number().optional(),
// OAuth 1.0a — enables read + write operations
consumerKey: z.string().optional(),
consumerSecret: z.string().optional(),
accessTokenSecret: z.string().optional(),
bearerToken: z.string().optional(),
}),
});
60 changes: 60 additions & 0 deletions packages/nodes/src/integrations/social/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,66 @@ export {
type TwitterPost,
} from './twitter-monitor.js';

export {
twitterCredential,
} from './credentials.js';

export {
twitterCreateTweetNode,
TwitterCreateTweetInputSchema,
TwitterCreateTweetOutputSchema,
type TwitterCreateTweetInput,
type TwitterCreateTweetOutput,
} from './twitter-create-tweet.js';

export {
twitterDeleteTweetNode,
TwitterDeleteTweetInputSchema,
TwitterDeleteTweetOutputSchema,
type TwitterDeleteTweetInput,
type TwitterDeleteTweetOutput,
} from './twitter-delete-tweet.js';

export {
twitterLikeTweetNode,
TwitterLikeTweetInputSchema,
TwitterLikeTweetOutputSchema,
type TwitterLikeTweetInput,
type TwitterLikeTweetOutput,
} from './twitter-like-tweet.js';

export {
twitterRetweetNode,
TwitterRetweetInputSchema,
TwitterRetweetOutputSchema,
type TwitterRetweetInput,
type TwitterRetweetOutput,
} from './twitter-retweet.js';

export {
twitterSearchTweetsNode,
TwitterSearchTweetsInputSchema,
TwitterSearchTweetsOutputSchema,
type TwitterSearchTweetsInput,
type TwitterSearchTweetsOutput,
} from './twitter-search-tweets.js';

export {
twitterSendDMNode,
TwitterSendDMInputSchema,
TwitterSendDMOutputSchema,
type TwitterSendDMInput,
type TwitterSendDMOutput,
} from './twitter-send-dm.js';

export {
twitterGetUserByUsernameNode,
TwitterGetUserByUsernameInputSchema,
TwitterGetUserByUsernameOutputSchema,
type TwitterGetUserByUsernameInput,
type TwitterGetUserByUsernameOutput,
} from './twitter-get-user-by-username.js';

export {
linkedinMonitorNode,
LinkedInMonitorInputSchema,
Expand Down
Loading