@kapsula-chat/capacitor-push-calls 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,112 @@
1
+ package com.capacitor.voipcalls
2
+
3
+ import android.content.Context
4
+ import android.os.Build
5
+ import android.telecom.Connection
6
+ import android.telecom.DisconnectCause
7
+ import android.telecom.VideoProfile
8
+ import androidx.annotation.RequiresApi
9
+ import com.getcapacitor.Bridge
10
+
11
+ @RequiresApi(Build.VERSION_CODES.M)
12
+ class VoipConnection(
13
+ private val context: Context,
14
+ private val callId: String,
15
+ private val handle: String,
16
+ private val displayName: String,
17
+ private val handleType: String,
18
+ private val video: Boolean,
19
+ private val isOutgoing: Boolean
20
+ ) : Connection() {
21
+
22
+ private var callManager: CallManager? = null
23
+
24
+ init {
25
+ setConnectionCapabilities(
26
+ CAPABILITY_SUPPORT_HOLD or
27
+ CAPABILITY_HOLD or
28
+ CAPABILITY_MUTE
29
+ )
30
+
31
+ if (video) {
32
+ setVideoState(VideoProfile.STATE_BIDIRECTIONAL)
33
+ }
34
+
35
+ // Get plugin instance and register this connection
36
+ Bridge.getInstance()?.let { bridge ->
37
+ val plugin = bridge.getPlugin("CapacitorPushCalls")?.instance
38
+ if (plugin is CapacitorVoipCallsPlugin) {
39
+ callManager = plugin.callManager
40
+ callManager?.registerConnection(callId, this)
41
+ }
42
+ }
43
+ }
44
+
45
+ override fun onShowIncomingCallUi() {
46
+ // Called when the system wants to show incoming call UI
47
+ // You can use this to show your custom incoming call screen
48
+ }
49
+
50
+ override fun onAnswer() {
51
+ setActive()
52
+ callManager?.notifyCallAnswered(callId)
53
+ }
54
+
55
+ override fun onAnswer(videoState: Int) {
56
+ setActive()
57
+ setVideoState(videoState)
58
+ callManager?.notifyCallAnswered(callId)
59
+ }
60
+
61
+ override fun onReject() {
62
+ setDisconnected(DisconnectCause(DisconnectCause.REJECTED))
63
+ destroy()
64
+ callManager?.notifyCallRejected(callId)
65
+ }
66
+
67
+ override fun onDisconnect() {
68
+ setDisconnected(DisconnectCause(DisconnectCause.LOCAL))
69
+ destroy()
70
+ callManager?.notifyCallEnded(callId, "local")
71
+ }
72
+
73
+ override fun onAbort() {
74
+ setDisconnected(DisconnectCause(DisconnectCause.CANCELED))
75
+ destroy()
76
+ callManager?.notifyCallEnded(callId, "canceled")
77
+ }
78
+
79
+ override fun onHold() {
80
+ setOnHold()
81
+ callManager?.notifyCallHeld(callId, true)
82
+ }
83
+
84
+ override fun onUnhold() {
85
+ setActive()
86
+ callManager?.notifyCallHeld(callId, false)
87
+ }
88
+
89
+ override fun onPlayDtmfTone(c: Char) {
90
+ // Handle DTMF tones if needed
91
+ }
92
+
93
+ override fun onStopDtmfTone() {
94
+ // Stop DTMF tone
95
+ }
96
+
97
+ override fun onStateChanged(state: Int) {
98
+ when (state) {
99
+ STATE_DIALING -> {
100
+ if (isOutgoing) {
101
+ callManager?.notifyCallStarted(callId)
102
+ }
103
+ }
104
+ STATE_ACTIVE -> {
105
+ // Call is now active
106
+ }
107
+ STATE_DISCONNECTED -> {
108
+ // Call has ended
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,101 @@
1
+ package com.capacitor.voipcalls
2
+
3
+ import android.content.ComponentName
4
+ import android.content.Context
5
+ import android.graphics.drawable.Icon
6
+ import android.net.Uri
7
+ import android.os.Build
8
+ import android.os.Bundle
9
+ import android.telecom.*
10
+ import androidx.annotation.RequiresApi
11
+
12
+ @RequiresApi(Build.VERSION_CODES.M)
13
+ class VoipConnectionService : ConnectionService() {
14
+
15
+ companion object {
16
+ private const val PHONE_ACCOUNT_ID = "CapacitorPushCalls"
17
+ private const val PHONE_ACCOUNT_LABEL = "Push Calls"
18
+
19
+ fun getPhoneAccount(context: Context): PhoneAccount {
20
+ val componentName = ComponentName(context, VoipConnectionService::class.java)
21
+ val phoneAccountHandle = PhoneAccountHandle(componentName, PHONE_ACCOUNT_ID)
22
+
23
+ return PhoneAccount.builder(phoneAccountHandle, PHONE_ACCOUNT_LABEL)
24
+ .setCapabilities(
25
+ PhoneAccount.CAPABILITY_CALL_PROVIDER or
26
+ PhoneAccount.CAPABILITY_VIDEO_CALLING or
27
+ PhoneAccount.CAPABILITY_SELF_MANAGED
28
+ )
29
+ .setSupportedUriSchemes(listOf(PhoneAccount.SCHEME_TEL, PhoneAccount.SCHEME_SIP))
30
+ .build()
31
+ }
32
+
33
+ fun registerPhoneAccount(context: Context) {
34
+ val telecomManager = context.getSystemService(Context.TELECOM_SERVICE) as TelecomManager
35
+ val phoneAccount = getPhoneAccount(context)
36
+ telecomManager.registerPhoneAccount(phoneAccount)
37
+ }
38
+ }
39
+
40
+ override fun onCreateOutgoingConnection(
41
+ connectionManagerPhoneAccount: PhoneAccountHandle?,
42
+ request: ConnectionRequest?
43
+ ): Connection {
44
+ val extras = request?.extras ?: Bundle()
45
+ val callId = extras.getString("callId") ?: return Connection.createFailedConnection(
46
+ DisconnectCause(DisconnectCause.ERROR, "Missing call ID")
47
+ )
48
+
49
+ val handle = extras.getString("handle") ?: ""
50
+ val displayName = extras.getString("displayName") ?: ""
51
+ val handleType = extras.getString("handleType") ?: "generic"
52
+ val video = extras.getBoolean("video", false)
53
+
54
+ val connection = VoipConnection(
55
+ applicationContext,
56
+ callId,
57
+ handle,
58
+ displayName,
59
+ handleType,
60
+ video,
61
+ isOutgoing = true
62
+ )
63
+
64
+ connection.setDialing()
65
+ connection.setAddress(Uri.parse("tel:$handle"), TelecomManager.PRESENTATION_ALLOWED)
66
+ connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED)
67
+
68
+ return connection
69
+ }
70
+
71
+ override fun onCreateIncomingConnection(
72
+ connectionManagerPhoneAccount: PhoneAccountHandle?,
73
+ request: ConnectionRequest?
74
+ ): Connection {
75
+ val extras = request?.extras ?: Bundle()
76
+ val callId = extras.getString("callId") ?: return Connection.createFailedConnection(
77
+ DisconnectCause(DisconnectCause.ERROR, "Missing call ID")
78
+ )
79
+
80
+ val handle = extras.getString("handle") ?: ""
81
+ val displayName = extras.getString("displayName") ?: ""
82
+ val handleType = extras.getString("handleType") ?: "generic"
83
+ val video = extras.getBoolean("video", false)
84
+
85
+ val connection = VoipConnection(
86
+ applicationContext,
87
+ callId,
88
+ handle,
89
+ displayName,
90
+ handleType,
91
+ video,
92
+ isOutgoing = false
93
+ )
94
+
95
+ connection.setRinging()
96
+ connection.setAddress(Uri.parse("tel:$handle"), TelecomManager.PRESENTATION_ALLOWED)
97
+ connection.setCallerDisplayName(displayName, TelecomManager.PRESENTATION_ALLOWED)
98
+
99
+ return connection
100
+ }
101
+ }
@@ -0,0 +1,279 @@
1
+ import { PluginListenerHandle } from '@capacitor/core';
2
+ export interface CapacitorPushCallsPlugin {
3
+ /**
4
+ * Register with APNS/FCM for regular push notifications.
5
+ */
6
+ register(): Promise<void>;
7
+ /**
8
+ * Unregister from APNS/FCM for regular push notifications.
9
+ */
10
+ unregister(): Promise<void>;
11
+ /**
12
+ * Request permission for regular push notifications.
13
+ */
14
+ requestPermissions(): Promise<PermissionStatus>;
15
+ /**
16
+ * Check regular push notification permission status.
17
+ */
18
+ checkPermissions(): Promise<PermissionStatus>;
19
+ /**
20
+ * Returns currently delivered notifications (regular push).
21
+ */
22
+ getDeliveredNotifications(): Promise<DeliveredNotifications>;
23
+ /**
24
+ * Remove specific delivered notifications by id.
25
+ */
26
+ removeDeliveredNotifications(options: {
27
+ notifications: Array<string | PushNotificationSchema>;
28
+ }): Promise<void>;
29
+ /**
30
+ * Remove all delivered notifications.
31
+ */
32
+ removeAllDeliveredNotifications(): Promise<void>;
33
+ /**
34
+ * Get app badge count.
35
+ */
36
+ getBadgeCount(): Promise<{
37
+ count: number;
38
+ }>;
39
+ /**
40
+ * Alias for getBadgeCount.
41
+ */
42
+ getBadgeNumber(): Promise<{
43
+ count: number;
44
+ }>;
45
+ /**
46
+ * Set app badge count.
47
+ */
48
+ setBadgeCount(options: {
49
+ count: number;
50
+ }): Promise<void>;
51
+ /**
52
+ * Alias for setBadgeCount.
53
+ */
54
+ setBadgeNumber(options: {
55
+ count: number;
56
+ }): Promise<void>;
57
+ /**
58
+ * Clear app badge count.
59
+ */
60
+ clearBadgeCount(): Promise<void>;
61
+ /**
62
+ * Android-only notification channel management (no-op on iOS).
63
+ */
64
+ createChannel(channel: Channel): Promise<void>;
65
+ deleteChannel(options: {
66
+ id: string;
67
+ }): Promise<void>;
68
+ listChannels(): Promise<ListChannelsResult>;
69
+ /**
70
+ * Register for VoIP push notifications (iOS only - PushKit)
71
+ * On Android, VoIP calls are routed from FCM data pushes
72
+ */
73
+ registerVoipNotifications(): Promise<void>;
74
+ /**
75
+ * Start an outgoing call
76
+ */
77
+ startCall(options: StartCallOptions): Promise<{
78
+ callId: string;
79
+ }>;
80
+ /**
81
+ * End an active call
82
+ */
83
+ endCall(options: {
84
+ callId: string;
85
+ }): Promise<void>;
86
+ /**
87
+ * Answer an incoming call
88
+ */
89
+ answerCall(options: {
90
+ callId: string;
91
+ }): Promise<void>;
92
+ /**
93
+ * Reject an incoming call
94
+ */
95
+ rejectCall(options: {
96
+ callId: string;
97
+ }): Promise<void>;
98
+ /**
99
+ * Hold/unhold a call
100
+ */
101
+ setCallOnHold(options: {
102
+ callId: string;
103
+ onHold: boolean;
104
+ }): Promise<void>;
105
+ /**
106
+ * Set audio to speaker
107
+ */
108
+ setAudioRoute(options: {
109
+ route: 'speaker' | 'earpiece' | 'bluetooth';
110
+ }): Promise<void>;
111
+ /**
112
+ * Mute/unmute call audio
113
+ */
114
+ setMuted(options: {
115
+ muted: boolean;
116
+ }): Promise<void>;
117
+ /**
118
+ * Report incoming call to the system.
119
+ * Used for Android FCM routing and optional manual/testing trigger on iOS.
120
+ */
121
+ handleIncomingCall(options: IncomingCallData): Promise<{
122
+ callId: string;
123
+ }>;
124
+ /**
125
+ * Update call status (connecting, connected, failed)
126
+ */
127
+ updateCallStatus(options: {
128
+ callId: string;
129
+ status: CallStatus;
130
+ }): Promise<void>;
131
+ /**
132
+ * Check if platform supports native VoIP calls
133
+ */
134
+ isSupported(): Promise<{
135
+ supported: boolean;
136
+ }>;
137
+ /**
138
+ * Register push token (iOS PushKit token)
139
+ */
140
+ addListener(eventName: 'registration', listenerFunc: (token: Token) => void): Promise<PluginListenerHandle>;
141
+ addListener(eventName: 'registrationError', listenerFunc: (error: RegistrationError) => void): Promise<PluginListenerHandle>;
142
+ addListener(eventName: 'pushNotificationReceived', listenerFunc: (notification: PushNotificationSchema) => void): Promise<PluginListenerHandle>;
143
+ addListener(eventName: 'pushNotificationActionPerformed', listenerFunc: (notification: ActionPerformed) => void): Promise<PluginListenerHandle>;
144
+ addListener(eventName: 'voipPushToken', listenerFunc: (data: {
145
+ token: string;
146
+ }) => void): Promise<PluginListenerHandle>;
147
+ /**
148
+ * Incoming call notification (iOS PushKit or Android external)
149
+ */
150
+ addListener(eventName: 'incomingCall', listenerFunc: (data: IncomingCallData) => void): Promise<PluginListenerHandle>;
151
+ /**
152
+ * Call answered by user
153
+ */
154
+ addListener(eventName: 'callAnswered', listenerFunc: (data: {
155
+ callId: string;
156
+ }) => void): Promise<PluginListenerHandle>;
157
+ /**
158
+ * Call ended by user or system
159
+ */
160
+ addListener(eventName: 'callEnded', listenerFunc: (data: {
161
+ callId: string;
162
+ reason?: string;
163
+ }) => void): Promise<PluginListenerHandle>;
164
+ /**
165
+ * Call started connecting
166
+ */
167
+ addListener(eventName: 'callStarted', listenerFunc: (data: {
168
+ callId: string;
169
+ }) => void): Promise<PluginListenerHandle>;
170
+ /**
171
+ * Call rejected by user
172
+ */
173
+ addListener(eventName: 'callRejected', listenerFunc: (data: {
174
+ callId: string;
175
+ }) => void): Promise<PluginListenerHandle>;
176
+ /**
177
+ * Call put on hold or resumed
178
+ */
179
+ addListener(eventName: 'callHeld', listenerFunc: (data: {
180
+ callId: string;
181
+ onHold: boolean;
182
+ }) => void): Promise<PluginListenerHandle>;
183
+ /**
184
+ * Remove all listeners for this plugin
185
+ */
186
+ removeAllListeners(): Promise<void>;
187
+ }
188
+ export interface StartCallOptions {
189
+ /**
190
+ * Display name or phone number to call
191
+ */
192
+ handle: string;
193
+ /**
194
+ * Display name for the call
195
+ */
196
+ displayName: string;
197
+ /**
198
+ * Type of handle: generic, phone, email
199
+ */
200
+ handleType?: 'generic' | 'phone' | 'email';
201
+ /**
202
+ * Whether this is a video call
203
+ */
204
+ video?: boolean;
205
+ }
206
+ export interface IncomingCallData {
207
+ /**
208
+ * Unique identifier for the call
209
+ */
210
+ callId: string;
211
+ /**
212
+ * Caller's handle (phone number, SIP URI, etc)
213
+ */
214
+ handle: string;
215
+ /**
216
+ * Display name for the caller
217
+ */
218
+ displayName: string;
219
+ /**
220
+ * Type of handle: generic, phone, email
221
+ */
222
+ handleType?: 'generic' | 'phone' | 'email';
223
+ /**
224
+ * Whether this is a video call
225
+ */
226
+ video?: boolean;
227
+ /**
228
+ * Additional data from push notification
229
+ */
230
+ metadata?: Record<string, any>;
231
+ }
232
+ export type CallStatus = 'connecting' | 'connected' | 'disconnecting' | 'disconnected' | 'failed';
233
+ export interface PermissionStatus {
234
+ receive: PermissionState;
235
+ }
236
+ export type PermissionState = 'prompt' | 'prompt-with-rationale' | 'granted' | 'denied';
237
+ export interface Token {
238
+ value: string;
239
+ }
240
+ export interface RegistrationError {
241
+ error: string;
242
+ }
243
+ export interface PushNotificationSchema {
244
+ title?: string;
245
+ subtitle?: string;
246
+ body?: string;
247
+ id?: string;
248
+ tag?: string;
249
+ badge?: number;
250
+ notification?: any;
251
+ data?: Record<string, any>;
252
+ click_action?: string;
253
+ link?: string;
254
+ group?: string;
255
+ groupSummary?: boolean;
256
+ }
257
+ export interface ActionPerformed {
258
+ actionId: string;
259
+ inputValue?: string;
260
+ notification: PushNotificationSchema;
261
+ }
262
+ export interface DeliveredNotifications {
263
+ notifications: PushNotificationSchema[];
264
+ }
265
+ export interface Channel {
266
+ id: string;
267
+ name: string;
268
+ description?: string;
269
+ sound?: string;
270
+ importance?: 1 | 2 | 3 | 4 | 5;
271
+ visibility?: -1 | 0 | 1;
272
+ lights?: boolean;
273
+ lightColor?: string;
274
+ vibration?: boolean;
275
+ }
276
+ export interface ListChannelsResult {
277
+ channels: Channel[];
278
+ }
279
+ //# sourceMappingURL=definitions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,5 @@
1
+ import type { CapacitorPushCallsPlugin } from './definitions';
2
+ declare const CapacitorPushCalls: CapacitorPushCallsPlugin;
3
+ export * from './definitions';
4
+ export { CapacitorPushCalls };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAE9D,QAAA,MAAM,kBAAkB,0BAKvB,CAAC;AAEF,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { registerPlugin } from '@capacitor/core';
2
+ const CapacitorPushCalls = registerPlugin('CapacitorPushCalls', {
3
+ web: () => import('./web').then(m => new m.CapacitorPushCallsWeb()),
4
+ });
5
+ export * from './definitions';
6
+ export { CapacitorPushCalls };
@@ -0,0 +1,67 @@
1
+ import { WebPlugin } from '@capacitor/core';
2
+ import type { CapacitorPushCallsPlugin, StartCallOptions, IncomingCallData, CallStatus, Channel, DeliveredNotifications, ListChannelsResult, PermissionStatus } from './definitions';
3
+ export declare class CapacitorPushCallsWeb extends WebPlugin implements CapacitorPushCallsPlugin {
4
+ register(): Promise<void>;
5
+ unregister(): Promise<void>;
6
+ requestPermissions(): Promise<PermissionStatus>;
7
+ checkPermissions(): Promise<PermissionStatus>;
8
+ getDeliveredNotifications(): Promise<DeliveredNotifications>;
9
+ removeDeliveredNotifications(_options: {
10
+ notifications: Array<string | {
11
+ id?: string;
12
+ }>;
13
+ }): Promise<void>;
14
+ removeAllDeliveredNotifications(): Promise<void>;
15
+ getBadgeCount(): Promise<{
16
+ count: number;
17
+ }>;
18
+ getBadgeNumber(): Promise<{
19
+ count: number;
20
+ }>;
21
+ setBadgeCount(_options: {
22
+ count: number;
23
+ }): Promise<void>;
24
+ setBadgeNumber(options: {
25
+ count: number;
26
+ }): Promise<void>;
27
+ clearBadgeCount(): Promise<void>;
28
+ createChannel(_channel: Channel): Promise<void>;
29
+ deleteChannel(_options: {
30
+ id: string;
31
+ }): Promise<void>;
32
+ listChannels(): Promise<ListChannelsResult>;
33
+ registerVoipNotifications(): Promise<void>;
34
+ startCall(_options: StartCallOptions): Promise<{
35
+ callId: string;
36
+ }>;
37
+ endCall(_options: {
38
+ callId: string;
39
+ }): Promise<void>;
40
+ answerCall(_options: {
41
+ callId: string;
42
+ }): Promise<void>;
43
+ rejectCall(_options: {
44
+ callId: string;
45
+ }): Promise<void>;
46
+ setCallOnHold(_options: {
47
+ callId: string;
48
+ onHold: boolean;
49
+ }): Promise<void>;
50
+ setAudioRoute(_options: {
51
+ route: 'speaker' | 'earpiece' | 'bluetooth';
52
+ }): Promise<void>;
53
+ setMuted(_options: {
54
+ muted: boolean;
55
+ }): Promise<void>;
56
+ handleIncomingCall(_options: IncomingCallData): Promise<{
57
+ callId: string;
58
+ }>;
59
+ updateCallStatus(_options: {
60
+ callId: string;
61
+ status: CallStatus;
62
+ }): Promise<void>;
63
+ isSupported(): Promise<{
64
+ supported: boolean;
65
+ }>;
66
+ }
67
+ //# sourceMappingURL=web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EACV,wBAAwB,EACxB,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,OAAO,EACP,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,eAAe,CAAC;AAEvB,qBAAa,qBACX,SAAQ,SACR,YAAW,wBAAwB;IAE7B,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,kBAAkB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI/C,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAI7C,yBAAyB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAI5D,4BAA4B,CAAC,QAAQ,EAAE;QAC3C,aAAa,EAAE,KAAK,CAAC,MAAM,GAAG;YAAE,EAAE,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAChD,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,+BAA+B,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhD,aAAa,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAI3C,cAAc,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAI5C,aAAa,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,cAAc,CAAC,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,aAAa,CAAC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,YAAY,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAI3C,yBAAyB,IAAI,OAAO,CAAC,IAAI,CAAC;IAI1C,SAAS,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAIlE,OAAO,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpD,UAAU,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,UAAU,CAAC,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvD,aAAa,CAAC,QAAQ,EAAE;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,OAAO,CAAC;KACjB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,aAAa,CAAC,QAAQ,EAAE;QAC5B,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,WAAW,CAAC;KAC7C,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,QAAQ,CAAC,QAAQ,EAAE;QAAE,KAAK,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,kBAAkB,CACtB,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAIxB,gBAAgB,CAAC,QAAQ,EAAE;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,UAAU,CAAC;KACpB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIX,WAAW,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CAGrD"}
@@ -0,0 +1,81 @@
1
+ import { WebPlugin } from '@capacitor/core';
2
+ export class CapacitorPushCallsWeb extends WebPlugin {
3
+ async register() {
4
+ throw this.unimplemented('Push notifications not supported on web');
5
+ }
6
+ async unregister() {
7
+ throw this.unimplemented('Push notifications not supported on web');
8
+ }
9
+ async requestPermissions() {
10
+ return { receive: 'denied' };
11
+ }
12
+ async checkPermissions() {
13
+ return { receive: 'denied' };
14
+ }
15
+ async getDeliveredNotifications() {
16
+ return { notifications: [] };
17
+ }
18
+ async removeDeliveredNotifications(_options) {
19
+ throw this.unimplemented('Push notifications not supported on web');
20
+ }
21
+ async removeAllDeliveredNotifications() {
22
+ throw this.unimplemented('Push notifications not supported on web');
23
+ }
24
+ async getBadgeCount() {
25
+ return { count: 0 };
26
+ }
27
+ async getBadgeNumber() {
28
+ return this.getBadgeCount();
29
+ }
30
+ async setBadgeCount(_options) {
31
+ throw this.unimplemented('Badge count not supported on web');
32
+ }
33
+ async setBadgeNumber(options) {
34
+ return this.setBadgeCount(options);
35
+ }
36
+ async clearBadgeCount() {
37
+ throw this.unimplemented('Badge count not supported on web');
38
+ }
39
+ async createChannel(_channel) {
40
+ throw this.unimplemented('Notification channels not supported on web');
41
+ }
42
+ async deleteChannel(_options) {
43
+ throw this.unimplemented('Notification channels not supported on web');
44
+ }
45
+ async listChannels() {
46
+ return { channels: [] };
47
+ }
48
+ async registerVoipNotifications() {
49
+ throw this.unimplemented('VoIP notifications not supported on web');
50
+ }
51
+ async startCall(_options) {
52
+ throw this.unimplemented('Native calls not supported on web');
53
+ }
54
+ async endCall(_options) {
55
+ throw this.unimplemented('Native calls not supported on web');
56
+ }
57
+ async answerCall(_options) {
58
+ throw this.unimplemented('Native calls not supported on web');
59
+ }
60
+ async rejectCall(_options) {
61
+ throw this.unimplemented('Native calls not supported on web');
62
+ }
63
+ async setCallOnHold(_options) {
64
+ throw this.unimplemented('Call hold not supported on web');
65
+ }
66
+ async setAudioRoute(_options) {
67
+ throw this.unimplemented('Audio routing not supported on web');
68
+ }
69
+ async setMuted(_options) {
70
+ throw this.unimplemented('Mute not supported on web');
71
+ }
72
+ async handleIncomingCall(_options) {
73
+ throw this.unimplemented('Incoming calls not supported on web');
74
+ }
75
+ async updateCallStatus(_options) {
76
+ throw this.unimplemented('Call status updates not supported on web');
77
+ }
78
+ async isSupported() {
79
+ return { supported: false };
80
+ }
81
+ }