| name | jterrazz-broadcast |
| description | Multi-channel announcements via @jterrazz/broadcast — App Store in-app events, push notifications. Use when creating, sending, or managing announcements. |
@jterrazz/broadcast
Part of the @jterrazz ecosystem. Defines how apps announce and distribute events.
Define an announcement once, send it to multiple channels — App Store, push, email, in-app.
Core model
import { sendBroadcast, AppleAppStoreAdapter } from '@jterrazz/broadcast';
await sendBroadcast(
{
title: 'Breaking News',
shortDescription: 'Live coverage',
longDescription: 'Full details...',
badge: 'live-event',
audience: 'all',
priority: 'high',
startDate: new Date('2026-04-01'),
endDate: new Date('2026-04-07'),
deepLink: 'myapp://events/123',
cardImageUrl: 'https://...',
detailImageUrl: 'https://...',
territories: ['USA', 'FRA'],
},
[apple],
);
Apple provider setup
import { readFileSync } from 'node:fs';
import { AppleAppStoreAdapter } from '@jterrazz/broadcast';
const apple = new AppleAppStoreAdapter({
issuerId: '...',
keyId: '...',
privateKey: readFileSync('./AuthKey.p8', 'utf-8'),
appId: '...',
});
Provider methods
await apple.create(broadcast);
await apple.list();
await apple.update('event-id', { priority: 'normal' });
await apple.delete('event-id');
Multi-provider fan-out
sendBroadcast runs all providers concurrently. One failing won't block others. Each result has a status field: created | submitted | approved | published | rejected | failed.
Always
- Apple requires both
cardImageUrl (16:9) and detailImageUrl (9:16) for review submission
- Event dates must be in the future
- Max 15 approved events at a time on App Store Connect
- Implement
BroadcastProviderPort interface for custom channels