
Security News
Lovable’s OJ Rewrites Vite’s Dev Server in Rust as AI Lowers the Cost of Forking Open Source
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.
@23blocks/block-campaigns
Advanced tools
Campaigns block for 23blocks SDK - marketing campaigns, media, landing pages, and audience management
Campaigns block for the 23blocks SDK - marketing campaigns, media, landing pages, and audiences.
npm install @23blocks/block-campaigns @23blocks/transport-http
This package provides marketing campaign functionality including:
import { createHttpTransport } from '@23blocks/transport-http';
import { createCampaignsBlock } from '@23blocks/block-campaigns';
const transport = createHttpTransport({
baseUrl: 'https://api.yourapp.com',
headers: () => {
const token = localStorage.getItem('access_token');
return token ? { Authorization: `Bearer ${token}` } : {};
},
});
const campaigns = createCampaignsBlock(transport, {
apiKey: 'your-api-key',
});
// List active campaigns
const { data: campaignList } = await campaigns.campaigns.list({
status: 'active',
limit: 20,
});
campaignList.forEach((campaign) => {
console.log(campaign.name, campaign.startDate, campaign.endDate);
});
// List campaigns
const { data: campaignList } = await campaigns.campaigns.list({
limit: 20,
status: 'active',
});
// Get campaign by ID
const campaign = await campaigns.campaigns.get('campaign-id');
// Create campaign
const newCampaign = await campaigns.campaigns.create({
name: 'Summer Sale 2024',
description: 'Annual summer promotion',
type: 'promotion',
startDate: '2024-06-01',
endDate: '2024-08-31',
budget: 10000,
status: 'draft',
});
// Update campaign
await campaigns.campaigns.update('campaign-id', {
status: 'active',
budget: 15000,
});
// Delete campaign
await campaigns.campaigns.delete('campaign-id');
// Get campaign results
const results = await campaigns.campaigns.getResults('campaign-id');
console.log(results.impressions, results.clicks, results.conversions);
// List media for campaign
const { data: mediaList } = await campaigns.campaignMedia.list({
campaignId: 'campaign-id',
});
// Get media by ID
const media = await campaigns.campaignMedia.get('media-id');
// Create campaign media
const newMedia = await campaigns.campaignMedia.create({
campaignId: 'campaign-id',
name: 'Banner Ad',
type: 'image',
fileId: 'file-id',
placement: 'homepage_banner',
status: 'active',
});
// Update media
await campaigns.campaignMedia.update('media-id', {
status: 'paused',
});
// Delete media
await campaigns.campaignMedia.delete('media-id');
// Get media results
const results = await campaigns.campaignMedia.getResults('media-id');
console.log(results.impressions, results.clicks, results.ctr);
// List landing pages
const { data: pages } = await campaigns.landingPages.list({
campaignId: 'campaign-id',
});
// Get landing page by ID
const page = await campaigns.landingPages.get('page-id');
// Create landing page
const newPage = await campaigns.landingPages.create({
campaignId: 'campaign-id',
name: 'Summer Sale Landing',
slug: 'summer-sale-2024',
title: 'Summer Sale - Up to 50% Off',
content: '<h1>Summer Sale</h1>...',
status: 'published',
});
// Update landing page
await campaigns.landingPages.update('page-id', {
content: '<h1>Updated Content</h1>...',
});
// Delete landing page
await campaigns.landingPages.delete('page-id');
// List audiences
const { data: audiences } = await campaigns.audiences.list();
// Get audience by ID
const audience = await campaigns.audiences.get('audience-id');
// Create audience
const newAudience = await campaigns.audiences.create({
name: 'Premium Customers',
description: 'Customers with lifetime value > $1000',
criteria: {
minLifetimeValue: 1000,
segments: ['active', 'returning'],
},
});
// Update audience
await campaigns.audiences.update('audience-id', {
criteria: {
minLifetimeValue: 1500,
},
});
// Delete audience
await campaigns.audiences.delete('audience-id');
// Get audience members
const { data: members } = await campaigns.audiences.getMembers('audience-id', {
limit: 100,
});
// Add member to audience
await campaigns.audiences.addMember('audience-id', {
userId: 'user-id',
});
// Remove member from audience
await campaigns.audiences.removeMember('audience-id', 'member-id');
import type {
Campaign,
CampaignResults,
CampaignMedia,
CampaignMediaResults,
LandingPage,
Audience,
AudienceMember,
CreateCampaignRequest,
CreateCampaignMediaRequest,
CreateLandingPageRequest,
CreateAudienceRequest,
} from '@23blocks/block-campaigns';
| Property | Type | Description |
|---|---|---|
id | string | Campaign ID |
name | string | Campaign name |
description | string | Campaign description |
type | string | Campaign type |
status | string | draft, active, paused, completed |
startDate | Date | Campaign start date |
endDate | Date | Campaign end date |
budget | number | Campaign budget |
| Property | Type | Description |
|---|---|---|
impressions | number | Total impressions |
clicks | number | Total clicks |
conversions | number | Total conversions |
spend | number | Total spend |
revenue | number | Total revenue |
roi | number | Return on investment |
@23blocks/angular - Angular integration@23blocks/react - React integration@23blocks/sdk - Full SDK packageMIT - Copyright (c) 2024 23blocks
FAQs
Campaigns block for 23blocks SDK - marketing campaigns, media, landing pages, and audience management
The npm package @23blocks/block-campaigns receives a total of 36 weekly downloads. As such, @23blocks/block-campaigns popularity was classified as not popular.
We found that @23blocks/block-campaigns demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
Lovable’s OJ rewrites Vite’s dev server in Rust, reducing memory use and preview times as AI lowers the cost of open source reimplementation.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.