UNPKG

@memberjunction/actions-bizapps-social

Version:

Social Media Actions for MemberJunction - Twitter, LinkedIn, Facebook, Instagram, TikTok, YouTube, HootSuite, Buffer

159 lines 6.71 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TwitterDeleteTweetAction = void 0; const global_1 = require("@memberjunction/global"); const twitter_base_action_1 = require("../twitter-base.action"); const core_1 = require("@memberjunction/core"); const actions_1 = require("@memberjunction/actions"); /** * Action to delete a tweet from Twitter/X */ let TwitterDeleteTweetAction = class TwitterDeleteTweetAction extends twitter_base_action_1.TwitterBaseAction { /** * Delete a tweet from Twitter */ async InternalRunAction(params) { const { Params, ContextUser } = params; try { // Initialize OAuth const companyIntegrationId = this.getParamValue(Params, 'CompanyIntegrationID'); if (!await this.initializeOAuth(companyIntegrationId)) { throw new Error('Failed to initialize OAuth connection'); } // Extract parameters const tweetId = this.getParamValue(Params, 'TweetID'); const confirmDeletion = this.getParamValue(Params, 'ConfirmDeletion') === true; // Validate required parameters if (!tweetId) { throw new Error('TweetID is required'); } // Safety check - require explicit confirmation if (!confirmDeletion) { return { Success: false, ResultCode: 'CONFIRMATION_REQUIRED', Message: 'Tweet deletion requires explicit confirmation. Set ConfirmDeletion to true.', Params }; } // Get the tweet details before deletion (for output) let tweetDetails = null; try { (0, core_1.LogStatus)(`Retrieving tweet details for ID: ${tweetId}...`); const response = await this.axiosInstance.get(`/tweets/${tweetId}`, { params: { 'tweet.fields': 'id,text,created_at,author_id,public_metrics', 'expansions': 'author_id', 'user.fields': 'id,username' } }); if (response.data.data) { tweetDetails = { id: response.data.data.id, text: response.data.data.text, createdAt: response.data.data.created_at, metrics: response.data.data.public_metrics }; // Verify ownership const currentUser = await this.getCurrentUser(); if (response.data.data.author_id !== currentUser.id) { throw new Error('You can only delete your own tweets'); } } } catch (error) { // If we can't retrieve the tweet, it might already be deleted or we don't have access (0, core_1.LogStatus)('Could not retrieve tweet details. It may already be deleted or inaccessible.'); } // Delete the tweet (0, core_1.LogStatus)(`Deleting tweet ID: ${tweetId}...`); await this.deleteTweet(tweetId); // Update output parameters const outputParams = [...Params]; const deletedDetailsParam = outputParams.find(p => p.Name === 'DeletedTweetDetails'); if (deletedDetailsParam && tweetDetails) deletedDetailsParam.Value = tweetDetails; const deletionTimeParam = outputParams.find(p => p.Name === 'DeletionTime'); if (deletionTimeParam) deletionTimeParam.Value = new Date().toISOString(); return { Success: true, ResultCode: 'SUCCESS', Message: `Successfully deleted tweet (ID: ${tweetId})`, Params: outputParams }; } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'; return { Success: false, ResultCode: this.getErrorCode(error), Message: `Failed to delete tweet: ${errorMessage}`, Params }; } } /** * Get error code based on error type */ getErrorCode(error) { if (error instanceof Error) { if (error.message.includes('Rate Limit')) return 'RATE_LIMIT'; if (error.message.includes('Unauthorized')) return 'INVALID_TOKEN'; if (error.message.includes('Not Found')) return 'TWEET_NOT_FOUND'; if (error.message.includes('Forbidden')) return 'INSUFFICIENT_PERMISSIONS'; if (error.message.includes('own tweets')) return 'NOT_OWNER'; } return 'ERROR'; } /** * Define the parameters this action expects */ get Params() { return [ ...this.commonSocialParams, { Name: 'TweetID', Type: 'Input', Value: null }, { Name: 'ConfirmDeletion', Type: 'Input', Value: false }, { Name: 'DeletedTweetDetails', Type: 'Output', Value: null }, { Name: 'DeletionTime', Type: 'Output', Value: null } ]; } /** * Get action description */ get Description() { return 'Deletes a tweet from Twitter/X. Requires explicit confirmation and ownership of the tweet.'; } }; exports.TwitterDeleteTweetAction = TwitterDeleteTweetAction; exports.TwitterDeleteTweetAction = TwitterDeleteTweetAction = __decorate([ (0, global_1.RegisterClass)(actions_1.BaseAction, 'TwitterDeleteTweetAction') ], TwitterDeleteTweetAction); //# sourceMappingURL=delete-tweet.action.js.map