42 lines
1.1 KiB
TypeScript
42 lines
1.1 KiB
TypeScript
/**
|
|
* Push notification provider factory.
|
|
*
|
|
* Creates a PushProvider based on PUSH_PROVIDER env var.
|
|
* Defaults to 'mock' since no push infra is wired yet.
|
|
*/
|
|
|
|
import { ExpoPushProvider } from './providers/expo.js';
|
|
import { MockPushProvider } from './providers/mock.js';
|
|
import type { PushProvider, PushProviderType } from './types.js';
|
|
|
|
let _provider: PushProvider | null = null;
|
|
|
|
export function getPush(): PushProvider {
|
|
if (!_provider) {
|
|
const type = (process.env.PUSH_PROVIDER || 'mock') as PushProviderType;
|
|
_provider = createPushProvider(type);
|
|
}
|
|
return _provider;
|
|
}
|
|
|
|
export function createPushProvider(type: PushProviderType): PushProvider {
|
|
switch (type) {
|
|
case 'expo':
|
|
return new ExpoPushProvider();
|
|
case 'firebase':
|
|
throw new Error('Firebase push provider not yet implemented. Use expo or mock.');
|
|
case 'mock':
|
|
return new MockPushProvider();
|
|
default:
|
|
throw new Error(`Unknown PUSH_PROVIDER: '${type}'. Valid: expo, firebase, mock`);
|
|
}
|
|
}
|
|
|
|
export function setPush(provider: PushProvider): void {
|
|
_provider = provider;
|
|
}
|
|
|
|
export function _resetPush(): void {
|
|
_provider = null;
|
|
}
|