Initial commit

This commit is contained in:
Matthew Raymer
2025-03-25 10:40:14 +00:00
commit e946767cba
6 changed files with 128 additions and 0 deletions

19
src/definitions.ts Normal file
View File

@@ -0,0 +1,19 @@
export interface DailyNotificationPlugin {
initialize(options: DailyNotificationOptions): Promise<void>;
checkPermissions(): Promise<PermissionStatus>;
requestPermissions(): Promise<PermissionStatus>;
}
export interface DailyNotificationOptions {
url: string;
notificationTime: string; // "HH:mm" format
title?: string;
body?: string;
}
export interface PermissionStatus {
notifications: PermissionState;
backgroundRefresh?: PermissionState; // iOS only
}
export type PermissionState = 'prompt' | 'prompt-with-rationale' | 'granted' | 'denied';

10
src/index.ts Normal file
View File

@@ -0,0 +1,10 @@
import { registerPlugin } from '@capacitor/core';
import type { DailyNotificationPlugin } from './definitions';
const DailyNotification = registerPlugin<DailyNotificationPlugin>('DailyNotification', {
web: () => import('./web').then(m => new m.DailyNotificationWeb()),
});
export * from './definitions';
export { DailyNotification };

45
src/web.ts Normal file
View File

@@ -0,0 +1,45 @@
import { WebPlugin } from '@capacitor/core';
import type { DailyNotificationPlugin, DailyNotificationOptions, PermissionStatus } from './definitions';
export class DailyNotificationWeb extends WebPlugin implements DailyNotificationPlugin {
async initialize(options: DailyNotificationOptions): Promise<void> {
console.warn('DailyNotification.initialize() is not implemented on web');
return;
}
async checkPermissions(): Promise<PermissionStatus> {
if ('Notification' in window) {
const status = await Notification.permission;
return {
notifications: this.mapWebPermission(status),
};
}
return {
notifications: 'denied',
};
}
async requestPermissions(): Promise<PermissionStatus> {
if ('Notification' in window) {
const status = await Notification.requestPermission();
return {
notifications: this.mapWebPermission(status),
};
}
return {
notifications: 'denied',
};
}
private mapWebPermission(permission: NotificationPermission): PermissionState {
switch (permission) {
case 'granted':
return 'granted';
case 'denied':
return 'denied';
default:
return 'prompt';
}
}
}