Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

bundlesocial

Package Overview
Dependencies
Maintainers
0
Versions
12
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

bundlesocial

Node.js library for the bundle.social API

  • 2.0.0
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
0
Maintainers
0
Weekly downloads
 
Created
Source

bundle.social SDK

Node.js SDK for bundle.social API.

Installation

npm install bundlesocial
yarn add bundlesocial
pnpm add bundlesocial

!!! Make sure you have created a team on bundle.social and have an generated API key. !!!

Setup

import { BundleSocial } from 'bundlesocial';

// Get the API key from the bundle.social dashboard
const bundleSocial = new BundleSocial('YOUR_API_KEY');

Usage

Get the organization information

const organization = await bundlesocial.organization.organizationGetOrganization();

Create a team

const createdTeam = await bundlesocial.team.teamCreateTeam({
  requestBody: {
    name: 'Test Team',
    tier: 'FREE',
  },
});

Get the team information

const team = await bundlesocial.team.teamGetTeam({
  id: createdTeam?.id,
});

Manage social accounts (needed for product integration only)

If you can connect social accounts directly through our web app, you can skip this step.

For more info check out our docs: https://info.bundle.social/api-reference

Connect social account
const response = await bundlesocial.socialAccount.socialAccountConnect({
  requestBody: {
    type: 'TIKTOK',
    teamId: team.id,
    redirectUrl: 'https://your-redirect-url.com',
  }
});

// Redirect the user to the response.url
// After the user has connected the account, the user will be redirected to the redirectUrl
Select page, account or channel (required for FACEBOOK, INSTAGRAM, YOUTUBE, LINKEDIN, DISCORD AND SLACK)

After the user has connected the account and was redirected to your page, you can let the user select the page, account or channel. We unified the data for all platforms. Each social account has a channels field, that is an array of their channels (pages, accounts, channels depending on the platform).

const team = await bundlesocial.team.teamGetTeam({
  id: team.id,
});

const socialAccount = team?.socialAccounts?.find((account) => account.type === 'TIKTOK');
const socialAccountChannelId = socialAccount?.channels?.[0]?.id;

if (socialAccountChannelId) {
  await bundlesocial.socialAccount.socialAccountSetChannel({
    requestBody: {
      type,
      teamId: team.id,
      channelId: socialAccountChannelId,
    }
  });
}

Upload a file

const video = await fs.readFile('./video.mp4');
const videoUpload = await bundlesocial.upload.uploadCreate({
  formData: {
    teamId: team.id,
    file: new Blob([video], { type: 'video/mp4' }),
  }
});

const jpgImage = await fs.readFile('./image.jpg');
const jpgUpload = await bundlesocial.upload.uploadCreate({
  formData: {
    teamId: team.id,
    file: new Blob([jpgImage], { type: 'image/jpeg' }),
  }
});

Create a post

// Make sure you have uploaded the file before creating a post.
// Make sure you have connected a social account to the team.
const createdPost = await bundlesocial.post.postCreate({
  requestBody: {
    teamId: team.id,
    data: {
      INSTAGRAM: {
        text: 'Test Post',
        type: 'REEL',
        uploadIds: [
          videoUpload?.id
        ]
      },
      YOUTUBE: {
        text: 'Test Post',
        type: 'SHORT',
        madeForKids: false,
        uploadIds: [
          videoUpload?.id
        ],
        privacyStatus: 'PUBLIC',
      },
      TIKTOK: {
        text: 'Test Post',
        uploadIds: [
          videoUpload?.id
        ],
        privacy: 'PUBLIC_TO_EVERYONE',
      },
      REDDIT: {
        sr: 'r/bundlesocial',
        text: 'Test Post',
        uploadIds: [
          jpgUpload.id
        ],
      },
    },
    postDate: new Date().toISOString(),
    socialAccountTypes: ['INSTAGRAM', 'YOUTUBE', 'TIKTOK', 'REDDIT'],
    status: 'SCHEDULED',
    title: 'Test Post',
  }
});

Get the post information

const post = await bundlesocial.post.postGet({
  id: createdPost.id,
});

Handling errors

try {
  const organization = await bundlesocial.organization.organizationGetOrganization();
} catch (error) {
  if (error instanceof ApiError) {
    // Handle the error
    console.log(error?.status, error?.statusText, error?.body);
  } else {
    throw error;
  }
}

Handling webhook events

// this is a simple example using express
app.post('/webhook', express.json({ type: 'application/json' }), (req, res) => {
  const bundlesocial = new Bundlesocial(apiKey);
  const signature = req.headers['x-signature'];

  let event: WebhookEvent;

  try {
    // Verify the webhook signature and return a typed event
    event = bundlesocial.webhooks.constructEvent(
      req.body,
      signature as string,
      secret,
    );
    // Do something with the event
  } catch (err) {
    console.log(`Webhook signature verification failed.`, err);
    return res.sendStatus(400);
  }

  return res.send();
});

License

MIT

Keywords

FAQs

Package last updated on 22 Sep 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc