Skip to content
Last updated

PERS SDK - v2.3.26 / Exports / CampaignManager

Class: CampaignManager

Campaign Manager - Clean, high-level interface for campaign operations

Provides a comprehensive API for loyalty campaign management including campaign discovery, reward claiming, business engagement tracking, and administrative campaign lifecycle operations. Campaigns are the core promotional mechanisms that drive user engagement and reward distribution in the loyalty ecosystem.

Example

// Get all available campaigns (paginated)
const result = await sdk.campaigns.getCampaigns({ page: 1, limit: 20 });
console.log(`${result.data.length} of ${result.total} campaigns`);

// Get specific campaign details
const campaign = await sdk.campaigns.getCampaignById('summer-promo-2024');
console.log('Campaign:', campaign.name);

// User claims campaign reward
const claim = await sdk.campaigns.claimCampaign({
  campaignId: 'summer-promo-2024',
  businessId: 'partner-hotel-123'
});

Example

// Get user's claimed campaigns
const userClaims = await sdk.campaigns.getUserClaims();

console.log('My Campaign Claims:');
userClaims.forEach(claim => {
  console.log(`- ${claim.campaign.name}`);
  console.log(`  Rewards: ${claim.rewards?.length || 0} tokens`);
  console.log(`  Date: ${claim.claimedAt}`);
});

// Check if user can claim specific campaign
const campaigns = await sdk.campaigns.getCampaigns({ active: true });
const eligibleCampaigns = campaigns.data.filter(c => 
  !userClaims.some(claim => claim.campaignId === c.id)
);

Example

// Admin: Create seasonal campaign
const newCampaign = await sdk.campaigns.createCampaign({
  name: 'Holiday Rewards',
  description: 'Special holiday loyalty bonuses',
  startDate: '2024-12-01',
  endDate: '2024-12-31',
  isActive: true
});

// Admin: Set up campaign rewards
await sdk.campaigns.createCampaignTokenUnit(newCampaign.id, {
  tokenId: 'loyalty-points',
  amount: 500,
  type: 'REWARD'
});

Table of contents

Constructors

Methods

Constructors

constructor

new CampaignManager(apiClient, events?): CampaignManager

Parameters

NameType
apiClientPersApiClient
events?PersEventEmitter

Returns

CampaignManager

Defined in

managers/campaign-manager.ts:91

Methods

getCampaignById

getCampaignById(campaignId, include?): Promise<CampaignDTO>

Get campaign by ID

Retrieves detailed information for a specific campaign including rewards, business partnerships, eligibility criteria, and claiming requirements.

Parameters

NameTypeDescription
campaignIdstringUnique campaign identifier
include?CampaignIncludeRelation[]Relations to include: 'triggerSources', 'businesses'

Returns

Promise<CampaignDTO>

Promise resolving to campaign data with complete details

Throws

When campaign with specified ID is not found

Example

try {
  const campaign = await sdk.campaigns.getCampaignById('summer-promo-2024');
  
  console.log('Campaign Details:');
  console.log('Name:', campaign.name);
  console.log('Description:', campaign.description);
  console.log('Active:', campaign.isActive);
  console.log('Period:', `${campaign.startDate} to ${campaign.endDate}`);
  
  console.log('\nRewards:');
  campaign.tokenUnits?.forEach(unit => {
    console.log(`- ${unit.amount} ${unit.token.symbol} (${unit.token.name})`);
  });
  
  console.log('\nPartner Businesses:');
  campaign.businessEngagements?.forEach(engagement => {
    console.log(`- ${engagement.business.displayName}`);
  });
  
} catch (error) {
  console.log('Campaign not found:', error.message);
}

Example

// Get campaign with trigger sources and businesses included
const campaign = await sdk.campaigns.getCampaignById('campaign-123', ['triggerSources', 'businesses']);
console.log('Trigger sources:', campaign.included?.triggerSources);
console.log('Businesses:', campaign.included?.businesses);

Defined in

managers/campaign-manager.ts:144


claimCampaign

claimCampaign(claimRequest): Promise<CampaignClaimDTO>

Claim a campaign reward

Claims rewards from a campaign for the authenticated user. This action validates eligibility, processes reward distribution, and creates a permanent claim record. Users can typically claim each campaign only once.

Parameters

NameTypeDescription
claimRequestCampaignClaimRequestDTOCampaign claim request with campaign and business context

Returns

Promise<CampaignClaimDTO>

Promise resolving to claim result with reward details

Throws

When campaign is not claimable or user is not eligible

Example

try {
  const claim = await sdk.campaigns.claimCampaign({
    campaignId: 'welcome-bonus',
    businessId: 'partner-hotel-123'
  });
  
  console.log('Campaign claimed successfully!');
  console.log('Claim ID:', claim.id);
  console.log('Claimed at:', claim.claimedAt);
  
  if (claim.rewards?.length) {
    console.log('\nRewards received:');
    claim.rewards.forEach(reward => {
      console.log(`- ${reward.amount} ${reward.token.symbol}`);
    });
  }
  
} catch (error) {
  console.log('Claim failed:', error.message);
}

Example

// Check if campaign is still active
const campaign = await sdk.campaigns.getCampaignById('limited-time-offer');

if (campaign.isActive && new Date() <= new Date(campaign.endDate)) {
  // Check if user already claimed
  const userClaims = await sdk.campaigns.getUserClaims();
  const alreadyClaimed = userClaims.some(c => c.campaignId === campaign.id);
  
  if (!alreadyClaimed) {
    const claim = await sdk.campaigns.claimCampaign({
      campaignId: campaign.id,
      businessId: 'partner-business-id'
    });
    console.log('Claim successful:', claim.id);
  } else {
    console.log('Campaign already claimed');
  }
}

Defined in

managers/campaign-manager.ts:205


getUserClaims

getUserClaims(options?): Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Get user's campaign claims

Retrieves all campaigns that the authenticated user has successfully claimed. Includes claim timestamps, received rewards, and associated business context. Useful for user reward history and campaign participation tracking.

Parameters

NameType
options?PaginationOptions & { include?: CampaignClaimIncludeRelation[] }

Returns

Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Promise resolving to array of user's campaign claims

Example

const userClaims = await sdk.campaigns.getUserClaims();

console.log(`Campaign History (${userClaims.length} claims):`);

userClaims.forEach((claim, index) => {
  console.log(`\n${index + 1}. ${claim.campaign.name}`);
  console.log(`   Claimed: ${new Date(claim.claimedAt).toLocaleDateString()}`);
  console.log(`   Business: ${claim.business?.displayName || 'N/A'}`);
  
  if (claim.rewards?.length) {
    console.log(`   Rewards:`);
    claim.rewards.forEach(reward => {
      console.log(`      • ${reward.amount} ${reward.token.symbol}`);
    });
  }
});

// Calculate total rewards earned
const totalRewards = userClaims.reduce((total, claim) => {
  return total + (claim.rewards?.length || 0);
}, 0);

console.log(`\nTotal reward items earned: ${totalRewards}`);

Defined in

managers/campaign-manager.ts:254


getCampaigns

getCampaigns(options?): Promise<PaginatedResponseDTO<CampaignDTO>>

Get campaigns with pagination support

Returns campaigns with pagination metadata for efficient data loading. Intelligent access: Public gets active only, Business gets own campaigns, Admin gets all.

Parameters

NameTypeDescription
options?PaginationOptions & { active?: boolean ; tag?: string ; search?: string ; businessId?: string ; startDate?: string | Date ; endDate?: string | Date ; sortBy?: "startDate" | "name" | "createdAt" ; sortOrder?: SortOrder ; include?: CampaignIncludeRelation[] }Pagination and filter options (page, limit, sortBy, sortOrder, active, tag, search, businessId, startDate, endDate, include)

Returns

Promise<PaginatedResponseDTO<CampaignDTO>>

Promise resolving to paginated campaigns with metadata

Example

// Get first page of campaigns
const result = await sdk.campaigns.getCampaigns({ page: 1, limit: 10 });
console.log(`Showing ${result.data.length} of ${result.total} campaigns`);
console.log(`Has more pages: ${result.hasMore}`);

// Get campaigns for a specific business
const businessCampaigns = await sdk.campaigns.getCampaigns({
  businessId: 'business-123',
  page: 1,
  limit: 20
});

// Search campaigns by name or description
const searchResults = await sdk.campaigns.getCampaigns({
  search: 'summer rewards',
  page: 1,
  limit: 20
});

// Filter by tag
const taggedCampaigns = await sdk.campaigns.getCampaigns({
  tag: 'seasonal',
  active: true
});

// Filter by date range
const dateFiltered = await sdk.campaigns.getCampaigns({
  startDate: new Date('2026-05-01'),
  endDate: new Date('2026-12-31'),
  active: true
});

// Get campaigns with claim count
const withCounts = await sdk.campaigns.getCampaigns({
  include: ['claimCount']
});
withCounts.data.forEach(c => console.log(`${c.name}: ${c.claimCount} claims`));

// Include related data (trigger sources, businesses, and claim count)
const campaignsWithRelations = await sdk.campaigns.getCampaigns({
  include: ['triggerSources', 'businesses', 'claimCount']
});

Defined in

managers/campaign-manager.ts:316


createCampaign

createCampaign(campaignData): Promise<CampaignDTO>

Admin: Create new campaign

Creates a new loyalty campaign with specified configuration, rewards, and business partnerships. This operation requires administrator privileges and establishes a new promotional mechanism for user engagement.

Parameters

NameTypeDescription
campaignDataCampaignCreateRequestDTOCampaign configuration including title, dates, and settings

Returns

Promise<CampaignDTO>

Promise resolving to created campaign data

Throws

When not authenticated as admin or validation fails

Example

// Admin operation - create seasonal campaign
const campaign = await sdk.campaigns.createCampaign({
  name: 'Summer Travel Rewards',
  description: 'Earn bonus points for summer bookings',
  startDate: '2024-06-01T00:00:00Z',
  endDate: '2024-08-31T23:59:59Z',
  isActive: true,
  isTestnet: false,
  campaignType: 'SEASONAL'
});

console.log('Campaign created:', campaign.name);
console.log('Campaign ID:', campaign.id);

// Set up campaign rewards
await sdk.campaigns.createCampaignTokenUnit(campaign.id, {
  tokenId: 'loyalty-points',
  amount: 1000,
  type: 'BONUS'
});

Defined in

managers/campaign-manager.ts:371


updateCampaign

updateCampaign(campaignId, campaignData): Promise<CampaignDTO>

Admin: Update campaign

Updates an existing campaign's configuration, dates, or status. This operation requires administrator privileges and can modify most campaign properties while preserving existing claims and relationships.

Parameters

NameTypeDescription
campaignIdstringID of the campaign to update
campaignDataCampaignCreateRequestDTOUpdated campaign configuration

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or campaign not found

Example

// Admin operation - extend campaign duration
const updated = await sdk.campaigns.updateCampaign('summer-2024', {
  name: 'Extended Summer Travel Rewards',
  description: 'Earn bonus points for summer and early fall bookings',
  endDate: '2024-09-30T23:59:59Z',  // Extended end date
  isActive: true
});

console.log('Campaign updated:', updated.name);
console.log('New end date:', updated.endDate);

Defined in

managers/campaign-manager.ts:401


toggleCampaignStatus

toggleCampaignStatus(campaignId): Promise<CampaignDTO>

Admin: Toggle campaign active status

Toggles the active/inactive status of a campaign. Inactive campaigns are not available for new claims but existing claims remain valid. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign to toggle

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or campaign not found

Example

// Admin operation - temporarily disable campaign
const updated = await sdk.campaigns.toggleCampaignStatus('problematic-campaign');

console.log(`Campaign ${updated.isActive ? 'activated' : 'deactivated'}`);
console.log('Status:', updated.isActive ? 'Active' : 'Inactive');

Defined in

managers/campaign-manager.ts:425


toggleCampaignTestnet

toggleCampaignTestnet(campaignId): Promise<CampaignDTO>

Admin: Toggle campaign testnet environment

Toggles the testnet/mainnet environment for a campaign. Testnet campaigns operate with test tokens and are used for validation before production deployment. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign to toggle

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or campaign not found

Example

// Admin operation - move campaign to production
const updated = await sdk.campaigns.toggleCampaignTestnet('test-campaign');

console.log(`Campaign moved to ${updated.isTestnet ? 'testnet' : 'mainnet'}`);

Defined in

managers/campaign-manager.ts:448


getCampaignTriggers

getCampaignTriggers(options?): Promise<PaginatedResponseDTO<CampaignTriggerDTO>>

Admin: Get all campaign triggers (paginated)

Retrieves all campaign trigger rules that define rate limits, geo-validation, conditions, and trigger types for campaign activation.

Parameters

NameTypeDescription
options?PaginationOptionsPagination options

Returns

Promise<PaginatedResponseDTO<CampaignTriggerDTO>>

Promise resolving to paginated list of campaign triggers

Example

const triggers = await sdk.campaigns.getCampaignTriggers({ page: 1, limit: 20 });
console.log(`Found ${triggers.total} triggers`);
triggers.data.forEach(trigger => {
  console.log(`- ${trigger.name}: max ${trigger.maxPerDayPerUser}/day`);
});

Defined in

managers/campaign-manager.ts:475


getCampaignTriggerById

getCampaignTriggerById(triggerId): Promise<CampaignTriggerDTO>

Admin: Get campaign trigger by ID

Parameters

NameTypeDescription
triggerIdstringThe campaign trigger ID

Returns

Promise<CampaignTriggerDTO>

Promise resolving to the campaign trigger

Example

const trigger = await sdk.campaigns.getCampaignTriggerById('trigger-123');
console.log('Max per day:', trigger.maxPerDayPerUser);

Defined in

managers/campaign-manager.ts:491


createCampaignTrigger

createCampaignTrigger(data): Promise<CampaignTriggerDTO>

Admin: Create a new campaign trigger

Creates a trigger rule that defines rate limits, geo-validation, and conditions for campaign activation. Triggers are created independently and then assigned to campaigns via setCampaignTrigger().

Parameters

NameTypeDescription
dataCampaignTriggerCreateRequestDTOTrigger configuration

Returns

Promise<CampaignTriggerDTO>

Promise resolving to created trigger

Example

const trigger = await sdk.campaigns.createCampaignTrigger({
  name: 'Daily Check-in',
  maxPerDayPerUser: 1,
  maxPerUser: 100,
  minCooldownSeconds: 3600,
  maxGeoDistanceInMeters: 50,
  triggerType: 'CLAIM_BY_USER'
});

// Then assign to campaign
await sdk.campaigns.setCampaignTrigger(campaignId, trigger.id);

Defined in

managers/campaign-manager.ts:520


updateCampaignTrigger

updateCampaignTrigger(triggerId, data): Promise<CampaignTriggerDTO>

Admin: Update an existing campaign trigger

Parameters

NameTypeDescription
triggerIdstringThe campaign trigger ID
dataPartial<CampaignTriggerCreateRequestDTO>Updated trigger configuration (partial)

Returns

Promise<CampaignTriggerDTO>

Promise resolving to updated trigger

Example

const updated = await sdk.campaigns.updateCampaignTrigger('trigger-123', {
  maxPerDayPerUser: 5,
  minCooldownSeconds: 1800
});

Defined in

managers/campaign-manager.ts:548


deleteCampaignTrigger

deleteCampaignTrigger(triggerId): Promise<boolean>

Admin: Delete a campaign trigger

Parameters

NameTypeDescription
triggerIdstringThe campaign trigger ID

Returns

Promise<boolean>

Promise resolving to success status

Example

await sdk.campaigns.deleteCampaignTrigger('trigger-123');

Defined in

managers/campaign-manager.ts:575


setCampaignTrigger

setCampaignTrigger(campaignId, triggerId): Promise<CampaignDTO>

Admin: Assign a trigger to a campaign

Associates a trigger rule with a campaign. A campaign can have only one trigger at a time. Assigning a new trigger replaces any existing trigger.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
triggerIdstringID of the trigger to associate

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign

Example

const updated = await sdk.campaigns.setCampaignTrigger(
  'campaign-123',
  'trigger-456'
);
console.log('Trigger assigned:', updated.trigger?.name);

Defined in

managers/campaign-manager.ts:607


removeCampaignTrigger

removeCampaignTrigger(campaignId, triggerId): Promise<CampaignDTO>

Admin: Remove a trigger from a campaign

Removes the trigger rule from a campaign. The trigger itself is not deleted and can be reassigned to other campaigns.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
triggerIdstringID of the trigger to remove

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign

Example

const updated = await sdk.campaigns.removeCampaignTrigger(
  'campaign-123',
  'trigger-456'
);
console.log('Trigger removed:', updated.trigger === null);

Defined in

managers/campaign-manager.ts:639


createCampaignTokenUnit

createCampaignTokenUnit(campaignId, tokenUnit): Promise<CampaignDTO>

Admin: Create campaign token unit

Adds a token reward unit to a campaign, specifying the token type and amount that users will receive when claiming the campaign. Multiple token units can be added to create multi-reward campaigns. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
tokenUnitTokenUnitCreateRequestDTOToken unit configuration including token type and amount

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or validation fails

Example

// Admin operation - add loyalty points reward
const updated = await sdk.campaigns.createCampaignTokenUnit('summer-promo', {
  tokenId: 'loyalty-points',
  amount: 500,
  type: 'REWARD'
});

console.log('Token unit added to campaign');
console.log('Reward units:', updated.tokenUnits?.length);

// Add multiple reward types
await sdk.campaigns.createCampaignTokenUnit('summer-promo', {
  tokenId: 'bonus-credits',
  amount: 100,
  type: 'BONUS'
});

Defined in

managers/campaign-manager.ts:688


deleteCampaignTokenUnit

deleteCampaignTokenUnit(campaignId, tokenUnitId): Promise<CampaignDTO>

Admin: Delete campaign token unit

Removes a token reward unit from a campaign. This affects future claims but does not impact rewards that have already been distributed. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
tokenUnitIdstringID of the token unit to remove

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or entities not found

Example

// Admin operation - remove token unit from campaign
const updated = await sdk.campaigns.deleteCampaignTokenUnit(
  'summer-promo',
  'token-unit-123'
);

console.log('Token unit removed from campaign');
console.log('Remaining reward units:', updated.tokenUnits?.length);

Defined in

managers/campaign-manager.ts:716


addBusinessEngagementToCampaign

addBusinessEngagementToCampaign(campaignId, engagement): Promise<CampaignDTO>

Admin: Add business engagement to campaign

Associates a business partner with a campaign, enabling the business to participate in the campaign and allowing users to claim rewards through that business. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
engagementCampaignBusinessEngagementCreateRequestDTOBusiness engagement configuration

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or validation fails

Example

// Admin operation - add business partner to campaign
const updated = await sdk.campaigns.addBusinessEngagementToCampaign('summer-promo', {
  businessId: 'partner-hotel-123',
  engagementType: 'PROMOTION_PARTNER',
  isActive: true,
  startDate: '2024-06-01',
  endDate: '2024-08-31'
});

console.log('Business partner added to campaign');
console.log('Partner businesses:', updated.businessEngagements?.length);

Defined in

managers/campaign-manager.ts:747


updateCampaignBusinessEngagement

updateCampaignBusinessEngagement(campaignId, engagementId, engagement): Promise<CampaignDTO>

Admin: Update campaign business engagement

Updates an existing business engagement within a campaign, modifying participation parameters, dates, or status. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
engagementIdstringID of the engagement to update
engagementCampaignBusinessEngagementCreateRequestDTOUpdated engagement configuration

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or entities not found

Example

// Admin operation - update business engagement terms
const updated = await sdk.campaigns.updateCampaignBusinessEngagement(
  'summer-promo',
  'engagement-456',
  {
    engagementType: 'PREMIUM_PARTNER',
    isActive: true,
    endDate: '2024-09-30'  // Extended participation
  }
);

console.log('Business engagement updated');

Defined in

managers/campaign-manager.ts:779


deleteCampaignBusinessEngagement

deleteCampaignBusinessEngagement(campaignId, engagementId): Promise<CampaignDTO>

Admin: Delete campaign business engagement

Removes a business engagement from a campaign, ending the business's participation in the campaign. Existing claims through this business remain valid. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringID of the campaign
engagementIdstringID of the engagement to remove

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign data

Throws

When not authenticated as admin or entities not found

Example

// Admin operation - remove business from campaign
const updated = await sdk.campaigns.deleteCampaignBusinessEngagement(
  'summer-promo',
  'engagement-456'
);

console.log('Business engagement removed');
console.log('Remaining partners:', updated.businessEngagements?.length);

Defined in

managers/campaign-manager.ts:807


getCampaignClaims

getCampaignClaims(filters?, include?): Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Admin: Get campaign claims with optional filters

Retrieves campaign claims with optional filtering by campaign, user, business, or date range. This operation requires administrator privileges and provides system-wide visibility into campaign performance and user engagement.

Parameters

NameTypeDescription
filters?CampaignClaimQueryParamsOptional filters and pagination options
include?CampaignClaimIncludeRelation[]Optional relations to include for enrichment

Returns

Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Promise resolving to paginated campaign claims

Throws

When not authenticated as administrator

Example

const { data: allClaims, pagination } = await sdk.campaigns.getCampaignClaims();
console.log(`Total: ${pagination.total}`);

Example

const { data: userClaims } = await sdk.campaigns.getCampaignClaims({ userId: 'user-123' });

Example

// Get claims within a specific date range
const { data: monthClaims } = await sdk.campaigns.getCampaignClaims({
  dateFrom: new Date('2024-01-01'),
  dateTo: new Date('2024-01-31'),
  limit: 100
});
console.log(`${monthClaims.length} claims in January 2024`);

Example

const { data: page1 } = await sdk.campaigns.getCampaignClaims({ 
  campaignId: 'campaign-456',
  page: 1,
  limit: 50
});

Defined in

managers/campaign-manager.ts:863


getCampaignClaimsByUserId

getCampaignClaimsByUserId(userId, options?, include?): Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Admin: Get campaign claims by user ID

Retrieves all campaign claims for a specific user. This operation requires administrator privileges and is used for user support, account analysis, and individual user engagement tracking.

Parameters

NameTypeDescription
userIdstringID of the user to get claims for
options?PaginationOptions-
include?CampaignClaimIncludeRelation[]-

Returns

Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Promise resolving to array of user's campaign claims

Throws

When not authenticated as admin or user not found

Example

// Admin operation - analyze user's campaign participation
const userClaims = await sdk.campaigns.getCampaignClaimsByUserId('user-123');

console.log(`User Campaign Activity:`);
console.log(`Total campaigns claimed: ${userClaims.length}`);

userClaims.forEach((claim, index) => {
  console.log(`\n${index + 1}. ${claim.campaign.name}`);
  console.log(`   Date: ${claim.claimedAt}`);
  console.log(`   Business: ${claim.business?.displayName || 'Direct'}`);
  console.log(`   Rewards: ${claim.rewards?.length || 0} items`);
});

// Calculate user engagement metrics
const totalRewards = userClaims.reduce((sum, claim) => 
  sum + (claim.rewards?.length || 0), 0
);
console.log(`\nTotal rewards earned: ${totalRewards}`);

Defined in

managers/campaign-manager.ts:903


getCampaignClaimsByBusinessId

getCampaignClaimsByBusinessId(businessId, options?, include?): Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Admin: Get campaign claims by business ID

Retrieves all campaign claims processed through a specific business partner. This operation requires administrator privileges and is used for business partnership analysis and performance tracking.

Parameters

NameTypeDescription
businessIdstringID of the business to get claims for
options?PaginationOptions-
include?CampaignClaimIncludeRelation[]-

Returns

Promise<PaginatedResponseDTO<CampaignClaimDTO>>

Promise resolving to array of business's campaign claims

Throws

When not authenticated as admin or business not found

Example

// Admin operation - analyze business partnership performance
const businessClaims = await sdk.campaigns.getCampaignClaimsByBusinessId('partner-hotel-123');

console.log(`Business Partnership Analysis:`);
console.log(`Claims processed: ${businessClaims.length}`);

// Analyze claims by campaign
const claimsByCampaign = businessClaims.reduce((acc, claim) => {
  const campaignName = claim.campaign.name;
  acc[campaignName] = (acc[campaignName] || 0) + 1;
  return acc;
}, {});

console.log('\nCampaign Performance:');
Object.entries(claimsByCampaign).forEach(([campaign, count]) => {
  console.log(`${campaign}: ${count} claims`);
});

// Calculate partnership value
const totalRewardsDistributed = businessClaims.reduce((sum, claim) => 
  sum + (claim.rewards?.length || 0), 0
);
console.log(`\nTotal rewards distributed: ${totalRewardsDistributed}`);

Defined in

managers/campaign-manager.ts:949


assignTriggerSource

assignTriggerSource(campaignId, triggerSourceId): Promise<CampaignDTO>

Admin: Assign a trigger source to a campaign

Associates a trigger source with a campaign, enabling the trigger source to activate campaign rewards when triggered. A campaign can have multiple trigger sources. Requires administrator privileges.

Note: To create/update/delete trigger sources, use sdk.triggerSources.

Parameters

NameTypeDescription
campaignIdstringCampaign UUID
triggerSourceIdstringTrigger source UUID

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign with trigger source assigned

Throws

When not authenticated as admin or entities not found

Example

// Create trigger source first
const source = await sdk.triggerSources.create({
  type: 'QR_CODE',
  name: 'Store Entrance QR'
});

// Then assign to campaign
const updated = await sdk.campaigns.assignTriggerSource(
  'campaign-123',
  source.id
);

console.log('Trigger source assigned:', updated.triggerSourceIds.length);

Defined in

managers/campaign-manager.ts:993


removeTriggerSource

removeTriggerSource(campaignId, triggerSourceId): Promise<CampaignDTO>

Admin: Remove a trigger source from a campaign

Removes the association between a trigger source and a campaign. The trigger source itself is not deleted and can be reassigned to other campaigns. Requires administrator privileges.

Parameters

NameTypeDescription
campaignIdstringCampaign UUID
triggerSourceIdstringTrigger source UUID

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign with trigger source removed

Throws

When not authenticated as admin or entities not found

Example

// Remove a trigger source from a campaign
const updated = await sdk.campaigns.removeTriggerSource(
  'campaign-123',
  'source-456'
);

console.log('Remaining trigger source IDs:', updated.triggerSourceIds.length);

Defined in

managers/campaign-manager.ts:1029


exportCSV

exportCSV(options?): Promise<Blob>

Admin: Export campaigns as CSV

Generates a comprehensive CSV export of all tenant campaigns for external analysis, reporting, or compliance purposes. This operation requires administrator privileges and creates a downloadable file.

Parameters

NameTypeDescription
options?ObjectOptional date range filters
options.dateFrom?stringStart date filter (ISO date string)
options.dateTo?stringEnd date filter (ISO date string)

Returns

Promise<Blob>

Promise resolving to CSV blob for download

Throws

When not authenticated as administrator or export fails

Example

const csvBlob = await sdk.campaigns.exportCSV();
const downloadUrl = URL.createObjectURL(csvBlob);

Example

const csvBlob = await sdk.campaigns.exportCSV({
  dateFrom: '2024-01-01',
  dateTo: '2024-12-31'
});

Defined in

managers/campaign-manager.ts:1060


exportClaimsCSV

exportClaimsCSV(options?): Promise<Blob>

Admin: Export campaign claims as CSV

Generates a comprehensive CSV export of all campaign claim records for external analysis, reporting, or compliance purposes. This operation requires administrator privileges and creates a downloadable file.

Parameters

NameTypeDescription
options?ObjectOptional date range filters
options.dateFrom?stringStart date filter (ISO date string)
options.dateTo?stringEnd date filter (ISO date string)

Returns

Promise<Blob>

Promise resolving to CSV blob for download

Throws

When not authenticated as administrator or export fails

Example

const csvBlob = await sdk.campaigns.exportClaimsCSV();
const downloadUrl = URL.createObjectURL(csvBlob);

Defined in

managers/campaign-manager.ts:1084


getCampaignService

getCampaignService(): CampaignService

Get the full campaign service for advanced operations

Provides access to the complete CampaignService instance for advanced campaign operations, custom triggers, analytics, and operations not covered by the high-level manager methods.

Returns

CampaignService

CampaignService instance with full API access

Example

const campaignService = sdk.campaigns.getCampaignService();

// Access advanced campaign analytics
const analytics = await campaignService.getCampaignAnalytics('campaign-123');

// Access custom trigger management
const customTriggers = await campaignService.getCustomTriggers();

// Access campaign API directly
const campaignApi = campaignService.api;

// Use advanced claim validation
const eligibility = await campaignService.validateClaimEligibility('user-123', 'campaign-456');

Defined in

managers/campaign-manager.ts:1115


setCampaignApproval

setCampaignApproval(campaignId, status, reason?): Promise<CampaignDTO>

Admin: Approve a campaign

Approves a campaign that is pending approval. This operation is only available when the tenant has campaign approval enabled in their approval settings.

Parameters

NameTypeDescription
campaignIdstringID of the campaign to approve
status"approved" | "rejected"-
reason?string-

Returns

Promise<CampaignDTO>

Promise resolving to updated campaign with approval metadata

Throws

When not authenticated as tenant admin or campaign not found

Example

`	ypescript
const approvedCampaign = await sdk.campaigns.approveCampaign('campaign-123');
console.log('Campaign approved at:', approvedCampaign.approval?.approvedAt);
`

Defined in

managers/campaign-manager.ts:1139