├── .eslintignore
├── android
├── .gitignore
├── src
│ ├── main
│ │ ├── res
│ │ │ └── .gitkeep
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ │ └── tech
│ │ │ └── thegamedefault
│ │ │ └── capacitor
│ │ │ └── calls
│ │ │ ├── CallDetector.java
│ │ │ ├── PhoneState.java
│ │ │ ├── CallDetectorPlugin.java
│ │ │ └── CallBroadcastReceiver.java
│ ├── test
│ │ └── java
│ │ │ └── com
│ │ │ └── getcapacitor
│ │ │ └── ExampleUnitTest.java
│ └── androidTest
│ │ └── java
│ │ └── com
│ │ └── getcapacitor
│ │ └── android
│ │ └── ExampleInstrumentedTest.java
├── settings.gradle
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── proguard-rules.pro
├── gradle.properties
├── build.gradle
├── gradlew.bat
└── gradlew
├── .prettierignore
├── example
├── .gitignore
├── capacitor.config.json
├── README.md
├── package.json
└── package-lock.json
├── ios
├── Plugin.xcodeproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ ├── xcshareddata
│ │ └── xcschemes
│ │ │ ├── PluginTests.xcscheme
│ │ │ └── Plugin.xcscheme
│ └── project.pbxproj
├── Plugin
│ ├── CallDetector.swift
│ ├── CallDetectorPlugin.h
│ ├── CallDetectorPlugin.m
│ ├── Info.plist
│ └── CallDetectorPlugin.swift
├── Plugin.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── Podfile
└── PluginTests
│ ├── Info.plist
│ └── CallDetectorTests.swift
├── src
├── index.ts
├── web.ts
└── definitions.ts
├── rollup.config.js
├── tsconfig.json
├── CapacitorPluginIncomingCall.podspec
├── .gitignore
├── CONTRIBUTING.md
├── package.json
└── README.md
/.eslintignore:
--------------------------------------------------------------------------------
1 | build
2 | dist
3 |
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/android/src/main/res/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | build
2 | dist
3 |
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | .idea/
2 | node_modules/
3 | .vscode/
4 | *.map
5 | .DS_Store
6 | .sourcemaps
7 |
--------------------------------------------------------------------------------
/android/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':capacitor-android'
2 | project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/android/capacitor')
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/313hemant313/capacitor-plugin-incoming-call/HEAD/android/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/ios/Plugin.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Plugin/CallDetector.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 |
3 | @objc public class CallDetector: NSObject {
4 |
5 |
6 | @objc public func echo(_ value: String) -> String {
7 | print(value)
8 | return value
9 | }
10 | }
11 |
--------------------------------------------------------------------------------
/example/capacitor.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "appId": "com.example.plugin",
3 | "appName": "example",
4 | "bundledWebRuntime": true,
5 | "webDir": "www",
6 | "plugins": {
7 | "SplashScreen": {
8 | "launchShowDuration": 0
9 | }
10 | }
11 | }
--------------------------------------------------------------------------------
/ios/Plugin.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2.1-all.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/ios/Plugin.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Plugin.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import { registerPlugin } from '@capacitor/core';
2 |
3 | import type { CallDetectorPlugin } from './definitions';
4 |
5 | const CallDetector = registerPlugin('CallDetector', {
6 | web: () => import('./web').then(m => new m.CallDetectorWeb()),
7 | });
8 |
9 | export * from './definitions';
10 | export { CallDetector };
11 |
--------------------------------------------------------------------------------
/example/README.md:
--------------------------------------------------------------------------------
1 | ## Created with Capacitor Create App
2 |
3 | This app was created using [`@capacitor/create-app`](https://github.com/ionic-team/create-capacitor-app),
4 | and comes with a very minimal shell for building an app.
5 |
6 | ### Running this example
7 |
8 | To run the provided example, you can use [serve](https://www.npmjs.com/package/serve):
9 |
10 | ```bash
11 | npx serve
12 | ```
13 |
--------------------------------------------------------------------------------
/ios/Plugin/CallDetectorPlugin.h:
--------------------------------------------------------------------------------
1 | #import
2 |
3 | //! Project version number for Plugin.
4 | FOUNDATION_EXPORT double PluginVersionNumber;
5 |
6 | //! Project version string for Plugin.
7 | FOUNDATION_EXPORT const unsigned char PluginVersionString[];
8 |
9 | // In this header, you should import all the public headers of your framework using statements like #import
10 |
11 |
--------------------------------------------------------------------------------
/ios/Plugin/CallDetectorPlugin.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | // Define the plugin using the CAP_PLUGIN Macro, and
5 | // each method the plugin supports using the CAP_PLUGIN_METHOD macro.
6 | CAP_PLUGIN(CallDetectorPlugin, "CallDetector",
7 | CAP_PLUGIN_METHOD(echo, CAPPluginReturnPromise);
8 | CAP_PLUGIN_METHOD(detectCallState, CAPPluginReturnPromise);
9 | )
10 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | platform :ios, '12.0'
2 |
3 | def capacitor_pods
4 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
5 | use_frameworks!
6 | pod 'Capacitor', :path => '../node_modules/@capacitor/ios'
7 | pod 'CapacitorCordova', :path => '../node_modules/@capacitor/ios'
8 | end
9 |
10 | target 'Plugin' do
11 | capacitor_pods
12 | end
13 |
14 | target 'PluginTests' do
15 | capacitor_pods
16 | end
17 |
--------------------------------------------------------------------------------
/android/src/test/java/com/getcapacitor/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.getcapacitor;
2 |
3 | import static org.junit.Assert.*;
4 |
5 | import org.junit.Test;
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * @see Testing documentation
11 | */
12 | public class ExampleUnitTest {
13 |
14 | @Test
15 | public void addition_isCorrect() throws Exception {
16 | assertEquals(4, 2 + 2);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/src/web.ts:
--------------------------------------------------------------------------------
1 | import { WebPlugin } from '@capacitor/core';
2 |
3 | import type { CallDetectorPlugin } from './definitions';
4 |
5 | export class CallDetectorWeb extends WebPlugin implements CallDetectorPlugin {
6 | async echo(options: { value: string }): Promise<{ value: string }> {
7 | console.log('ECHO', options);
8 | return options;
9 | }
10 |
11 | async detectCallState(options: { action: string }): Promise<{ action: string }> {
12 | console.log('Cannot work in web', options);
13 | return options;
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | input: 'dist/esm/index.js',
3 | output: [
4 | {
5 | file: 'dist/plugin.js',
6 | format: 'iife',
7 | name: 'capacitorCallDetector',
8 | globals: {
9 | '@capacitor/core': 'capacitorExports',
10 | },
11 | sourcemap: true,
12 | inlineDynamicImports: true,
13 | },
14 | {
15 | file: 'dist/plugin.cjs.js',
16 | format: 'cjs',
17 | sourcemap: true,
18 | inlineDynamicImports: true,
19 | },
20 | ],
21 | external: ['@capacitor/core'],
22 | };
23 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowUnreachableCode": false,
4 | "declaration": true,
5 | "esModuleInterop": true,
6 | "inlineSources": true,
7 | "lib": ["dom", "es2017"],
8 | "module": "esnext",
9 | "moduleResolution": "node",
10 | "noFallthroughCasesInSwitch": true,
11 | "noUnusedLocals": true,
12 | "noUnusedParameters": true,
13 | "outDir": "dist/esm",
14 | "pretty": true,
15 | "sourceMap": true,
16 | "strict": true,
17 | "target": "es2017"
18 | },
19 | "files": ["src/index.ts"]
20 | }
21 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "capacitor-app",
3 | "version": "1.0.0",
4 | "description": "An Amazing Capacitor App",
5 | "main": "index.js",
6 | "keywords": [
7 | "capacitor",
8 | "mobile"
9 | ],
10 | "scripts": {
11 | "test": "echo \"Error: no test specified\" && exit 1"
12 | },
13 | "dependencies": {
14 | "@capacitor/core": "latest",
15 | "@capacitor/camera": "latest",
16 | "@capacitor/splash-screen": "latest",
17 | "capacitor-plugin-incoming-call": "file:.."
18 | },
19 | "devDependencies": {
20 | "@capacitor/cli": "latest"
21 | },
22 | "author": "",
23 | "license": "ISC"
24 | }
25 |
--------------------------------------------------------------------------------
/CapacitorPluginIncomingCall.podspec:
--------------------------------------------------------------------------------
1 | require 'json'
2 |
3 | package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
4 |
5 | Pod::Spec.new do |s|
6 | s.name = 'CapacitorPluginIncomingCall'
7 | s.version = package['version']
8 | s.summary = package['description']
9 | s.license = package['license']
10 | s.homepage = package['repository']['url']
11 | s.author = package['author']
12 | s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
13 | s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}'
14 | s.ios.deployment_target = '12.0'
15 | s.dependency 'Capacitor'
16 | s.swift_version = '5.1'
17 | end
18 |
--------------------------------------------------------------------------------
/ios/PluginTests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/android/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/ios/Plugin/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/ios/PluginTests/CallDetectorTests.swift:
--------------------------------------------------------------------------------
1 | import XCTest
2 | @testable import Plugin
3 |
4 | class CallDetectorTests: XCTestCase {
5 | override func setUp() {
6 | super.setUp()
7 | // Put setup code here. This method is called before the invocation of each test method in the class.
8 | }
9 |
10 | override func tearDown() {
11 | // Put teardown code here. This method is called after the invocation of each test method in the class.
12 | super.tearDown()
13 | }
14 |
15 | func testEcho() {
16 | // This is an example of a functional test case for a plugin.
17 | // Use XCTAssert and related functions to verify your tests produce the correct results.
18 |
19 | let implementation = CallDetector()
20 | let value = "Hello, World!"
21 | let result = implementation.echo(value)
22 |
23 | XCTAssertEqual(value, result)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/android/src/androidTest/java/com/getcapacitor/android/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.getcapacitor.android;
2 |
3 | import static org.junit.Assert.*;
4 |
5 | import android.content.Context;
6 | import androidx.test.ext.junit.runners.AndroidJUnit4;
7 | import androidx.test.platform.app.InstrumentationRegistry;
8 | import org.junit.Test;
9 | import org.junit.runner.RunWith;
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * @see Testing documentation
15 | */
16 | @RunWith(AndroidJUnit4.class)
17 | public class ExampleInstrumentedTest {
18 |
19 | @Test
20 | public void useAppContext() throws Exception {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
23 |
24 | assertEquals("com.getcapacitor.android", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | org.gradle.jvmargs=-Xmx1536m
13 |
14 | # When configured, Gradle will run in incubating parallel mode.
15 | # This option should only be used with decoupled projects. More details, visit
16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
17 | # org.gradle.parallel=true
18 |
19 | # AndroidX package structure to make it clearer which packages are bundled with the
20 | # Android operating system, and which are packaged with your app's APK
21 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
22 | android.useAndroidX=true
23 |
24 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # node files
2 | dist
3 | node_modules
4 |
5 | # iOS files
6 | Pods
7 | Podfile.lock
8 | Build
9 | xcuserdata
10 |
11 | # macOS files
12 | .DS_Store
13 |
14 |
15 |
16 | # Based on Android gitignore template: https://github.com/github/gitignore/blob/HEAD/Android.gitignore
17 |
18 | # Built application files
19 | *.apk
20 | *.ap_
21 |
22 | # Files for the ART/Dalvik VM
23 | *.dex
24 |
25 | # Java class files
26 | *.class
27 |
28 | # Generated files
29 | bin
30 | gen
31 | out
32 |
33 | # Gradle files
34 | .gradle
35 | build
36 |
37 | # Local configuration file (sdk path, etc)
38 | local.properties
39 |
40 | # Proguard folder generated by Eclipse
41 | proguard
42 |
43 | # Log Files
44 | *.log
45 |
46 | # Android Studio Navigation editor temp files
47 | .navigation
48 |
49 | # Android Studio captures folder
50 | captures
51 |
52 | # IntelliJ
53 | *.iml
54 | .idea
55 |
56 | # Keystore files
57 | # Uncomment the following line if you do not want to check your keystore files in.
58 | #*.jks
59 |
60 | # External native build folder generated in Android Studio 2.2 and later
61 | .externalNativeBuild
62 |
--------------------------------------------------------------------------------
/src/definitions.ts:
--------------------------------------------------------------------------------
1 | import type { PluginListenerHandle } from '@capacitor/core';
2 |
3 | export interface CallDetectorPlugin {
4 | echo(options: { value: string }): Promise<{ value: string }>;
5 | /**
6 | * To enable / disable detection of calls
7 | * options: { action: 'ACTIVATE' | 'DEACTIVATE' }
8 | *
9 | */
10 | detectCallState(options: { action: string }): Promise<{ action: string }>;
11 | addListener(
12 | eventName: 'callStateChange',
13 | listenerFunc: CallStateChangeListener,
14 | ): Promise & PluginListenerHandle;
15 | }
16 |
17 |
18 | export interface PhoneState {
19 | /**
20 | * Whether there is an active call or not.
21 | *
22 | * @since 1.0.0
23 | */
24 | callActive: boolean;
25 |
26 | /**
27 | * The type of call.
28 | *
29 | * 'RINGING' | 'OUTGOING' | 'IDLE' | 'ON_CALL' | 'ON_HOLD'
30 | *
31 | * @since 1.0.0
32 | */
33 | callState: PhoneStateType;
34 |
35 | incomingNumber: string;
36 |
37 | outgoingNumber: string;
38 |
39 | }
40 |
41 | export type PhoneStateType = 'RINGING' | 'OUTGOING' | 'IDLE' | 'ON_CALL' | 'ON_HOLD';
42 |
43 |
44 | export type CallStateChangeListener = (status: PhoneState) => void;
--------------------------------------------------------------------------------
/android/src/main/java/tech/thegamedefault/capacitor/calls/CallDetector.java:
--------------------------------------------------------------------------------
1 | package tech.thegamedefault.capacitor.calls;
2 |
3 | import android.content.IntentFilter;
4 | import android.telephony.TelephonyManager;
5 | import android.util.Log;
6 |
7 | import androidx.annotation.NonNull;
8 | import androidx.annotation.Nullable;
9 | import androidx.appcompat.app.AppCompatActivity;
10 |
11 | public class CallDetector {
12 |
13 | interface CallStateChangeListener {
14 | void onCallStateChanged();
15 | }
16 |
17 | @Nullable
18 | private CallStateChangeListener callStateChangeListener;
19 |
20 | public void setCallStateChangeListener(@Nullable CallStateChangeListener listener) {
21 | this.callStateChangeListener = listener;
22 | }
23 |
24 | private static CallBroadcastReceiver receiver = null;
25 |
26 | public String echo(String value) {
27 | Log.i("Echo", value);
28 | return value;
29 | }
30 |
31 | public void enableDetectCall() {
32 | Log.i("enableDetectCall", "Called");
33 | receiver = new CallBroadcastReceiver();
34 | receiver.setCallStateChangeListener(callStateChangeListener);
35 | }
36 |
37 | public void disableDetectCall() {
38 | Log.i("disableDetectCall", "Called");
39 | receiver.abortBroadcast();
40 | receiver = null;
41 | }
42 |
43 | public PhoneState getCurrentPhoneState() {
44 | return receiver.getCurrentPhoneState();
45 | }
46 |
47 | public void startDetection(@NonNull AppCompatActivity activity) {
48 | IntentFilter filter = new IntentFilter(TelephonyManager.ACTION_PHONE_STATE_CHANGED);
49 | activity.registerReceiver(receiver, filter);
50 | }
51 |
52 | }
53 |
--------------------------------------------------------------------------------
/android/src/main/java/tech/thegamedefault/capacitor/calls/PhoneState.java:
--------------------------------------------------------------------------------
1 | package tech.thegamedefault.capacitor.calls;
2 |
3 | import org.json.JSONException;
4 | import org.json.JSONObject;
5 |
6 | public class PhoneState {
7 | boolean callActive;
8 | String callState; // RINGING, OUTGOING, IDLE, ON_CALL, ON_HOLD .. etc
9 |
10 | String incomingNumber;
11 |
12 | String outgoingNumber;
13 |
14 | public String getOutgoingNumber() {
15 | return outgoingNumber;
16 | }
17 |
18 | public void setOutgoingNumber(String outgoingNumber) {
19 | this.outgoingNumber = outgoingNumber;
20 | }
21 |
22 | public String getIncomingNumber() {
23 | return incomingNumber;
24 | }
25 |
26 | public void setIncomingNumber(String incomingNumber) {
27 | this.incomingNumber = incomingNumber;
28 | }
29 |
30 | public PhoneState() {
31 | }
32 |
33 | public boolean isCallActive() {
34 | return callActive;
35 | }
36 |
37 | public void setCallActive(boolean callActive) {
38 | this.callActive = callActive;
39 | }
40 |
41 | public String getCallState() {
42 | return callState;
43 | }
44 |
45 | public void setCallState(String callState) {
46 | this.callState = callState;
47 | }
48 |
49 | public JSONObject toJsonObject() {
50 | JSONObject jsonObject = new JSONObject();
51 | try {
52 | jsonObject.put("callActive", isCallActive());
53 | jsonObject.put("callState", getCallState());
54 | jsonObject.put("incomingNumber", getIncomingNumber());
55 | jsonObject.put("outgoingNumber", getOutgoingNumber());
56 | } catch (JSONException e) {
57 | e.printStackTrace();
58 | }
59 | return jsonObject;
60 | }
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributing
2 |
3 | This guide provides instructions for contributing to this Capacitor plugin.
4 |
5 | ## Developing
6 |
7 | ### Local Setup
8 |
9 | 1. Fork and clone the repo.
10 | 1. Install the dependencies.
11 |
12 | ```shell
13 | npm install
14 | ```
15 |
16 | 1. Install SwiftLint if you're on macOS.
17 |
18 | ```shell
19 | brew install swiftlint
20 | ```
21 |
22 | ### Scripts
23 |
24 | #### `npm run build`
25 |
26 | Build the plugin web assets and generate plugin API documentation using [`@capacitor/docgen`](https://github.com/ionic-team/capacitor-docgen).
27 |
28 | It will compile the TypeScript code from `src/` into ESM JavaScript in `dist/esm/`. These files are used in apps with bundlers when your plugin is imported.
29 |
30 | Then, Rollup will bundle the code into a single file at `dist/plugin.js`. This file is used in apps without bundlers by including it as a script in `index.html`.
31 |
32 | #### `npm run verify`
33 |
34 | Build and validate the web and native projects.
35 |
36 | This is useful to run in CI to verify that the plugin builds for all platforms.
37 |
38 | #### `npm run lint` / `npm run fmt`
39 |
40 | Check formatting and code quality, autoformat/autofix if possible.
41 |
42 | This template is integrated with ESLint, Prettier, and SwiftLint. Using these tools is completely optional, but the [Capacitor Community](https://github.com/capacitor-community/) strives to have consistent code style and structure for easier cooperation.
43 |
44 | ## Publishing
45 |
46 | There is a `prepublishOnly` hook in `package.json` which prepares the plugin before publishing, so all you need to do is run:
47 |
48 | ```shell
49 | npm publish
50 | ```
51 |
52 | > **Note**: The [`files`](https://docs.npmjs.com/cli/v7/configuring-npm/package-json#files) array in `package.json` specifies which files get published. If you rename files/directories or add files elsewhere, you may need to update it.
53 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | ext {
2 | junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
3 | androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.6.1'
4 | androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.1.5'
5 | androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.5.1'
6 | }
7 |
8 | buildscript {
9 | repositories {
10 | google()
11 | jcenter()
12 | }
13 | dependencies {
14 | classpath 'com.android.tools.build:gradle:8.2.1'
15 | }
16 | }
17 |
18 | apply plugin: 'com.android.library'
19 |
20 | android {
21 | namespace "tech.thegamedefault.capacitor.calls"
22 | compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
23 | defaultConfig {
24 | minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
25 | targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
26 | versionCode 1
27 | versionName "1.0"
28 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
29 | }
30 | buildTypes {
31 | release {
32 | minifyEnabled false
33 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
34 | }
35 | }
36 | lintOptions {
37 | abortOnError false
38 | }
39 | compileOptions {
40 | sourceCompatibility JavaVersion.VERSION_17
41 | targetCompatibility JavaVersion.VERSION_17
42 | }
43 | }
44 |
45 | repositories {
46 | google()
47 | mavenCentral()
48 | jcenter()
49 | }
50 |
51 |
52 | dependencies {
53 | implementation fileTree(dir: 'libs', include: ['*.jar'])
54 | implementation project(':capacitor-android')
55 | implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
56 | testImplementation "junit:junit:$junitVersion"
57 | androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
58 | androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
59 | }
60 |
--------------------------------------------------------------------------------
/ios/Plugin/CallDetectorPlugin.swift:
--------------------------------------------------------------------------------
1 | import Foundation
2 | import Capacitor
3 | import CallKit;
4 |
5 | /**
6 | * Please read the Capacitor iOS Plugin Development Guide
7 | * here: https://capacitorjs.com/docs/plugins/ios
8 | */
9 | @objc(CallDetectorPlugin)
10 | public class CallDetectorPlugin: CAPPlugin, CXCallObserverDelegate {
11 | private let implementation = CallDetector()
12 | private let callObserver = CXCallObserver()
13 |
14 | private var enabled = false;
15 | private var activeListener = false;
16 |
17 | @objc func echo(_ call: CAPPluginCall) {
18 | let value = call.getString("value") ?? ""
19 | call.resolve([
20 | "value": implementation.echo(value)
21 | ])
22 | }
23 |
24 | @objc func detectCallState(_ call: CAPPluginCall){
25 |
26 | call.keepAlive = true;
27 | // 'ACTIVATE' | 'DEACTIVATE'
28 | let value = call.getString("action") ?? ""
29 | if(value == "ACTIVATE"){
30 | activeListener = true
31 | }else if(value == "DEACTIVATE"){
32 | activeListener = false
33 | }else{
34 | call.reject("must provide an action: 'ACTIVATE' | 'DEACTIVATE'")
35 | }
36 |
37 | if(!enabled){
38 | callObserver.setDelegate(self, queue: nil) //Set delegate to self to call delegate method.
39 | enabled = true
40 | }
41 |
42 | call.resolve(["success": true])
43 | }
44 |
45 | @objc public func callObserver(_ callObserver: CXCallObserver, callChanged call: CXCall) {
46 |
47 | // https://developer.apple.com/documentation/callkit/cxcall
48 | var callState = "IDLE"
49 | var callActive = true
50 |
51 | // 'RINGING' | 'OUTGOING' | 'IDLE' | 'ON_CALL' | 'ON_HOLD'
52 | if call.hasConnected {
53 | callState = "ON_CALL"
54 | callActive = true
55 | }else if call.isOutgoing {
56 | callState = "OUTGOING"
57 | callActive = false
58 | }else if call.hasEnded {
59 | callState = "IDLE"
60 | callActive = false
61 | }else if call.isOnHold {
62 | callState = "ON_HOLD"
63 | callActive = true
64 | }else{
65 | callState = "RINGING"
66 | callActive = false
67 | }
68 |
69 | if(activeListener){
70 | notifyListeners("callStateChange", data: [
71 | "callActive": callActive,
72 | "callState": callState
73 | ]);
74 | }
75 | }
76 | }
77 |
--------------------------------------------------------------------------------
/ios/Plugin.xcodeproj/xcshareddata/xcschemes/PluginTests.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
54 |
60 |
61 |
63 |
64 |
67 |
68 |
69 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "capacitor-plugin-incoming-call",
3 | "version": "0.1.0",
4 | "description": "capacitor-plugin-incoming-call",
5 | "main": "dist/plugin.cjs.js",
6 | "module": "dist/esm/index.js",
7 | "types": "dist/esm/index.d.ts",
8 | "unpkg": "dist/plugin.js",
9 | "files": [
10 | "android/src/main/",
11 | "android/build.gradle",
12 | "dist/",
13 | "ios/Plugin/",
14 | "CapacitorPluginIncomingCall.podspec"
15 | ],
16 | "author": "TheGameDefault",
17 | "license": "MIT",
18 | "repository": {
19 | "type": "git",
20 | "url": "git+https://github.com/313hemant313/capacitor-plugin-incoming-call.git"
21 | },
22 | "bugs": {
23 | "url": "https://github.com/313hemant313/capacitor-plugin-incoming-call/issues"
24 | },
25 | "keywords": [
26 | "capacitor",
27 | "plugin",
28 | "native"
29 | ],
30 | "scripts": {
31 | "verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
32 | "verify:ios": "cd ios && pod install && xcodebuild -workspace Plugin.xcworkspace -scheme Plugin && cd ..",
33 | "verify:android": "cd android && ./gradlew clean build test && cd ..",
34 | "verify:web": "npm run build",
35 | "lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
36 | "fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
37 | "eslint": "eslint . --ext ts",
38 | "prettier": "prettier \"**/*.{css,html,ts,js,java}\"",
39 | "swiftlint": "node-swiftlint",
40 | "docgen": "docgen --api CallDetectorPlugin --output-readme README.md --output-json dist/docs.json",
41 | "build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.js",
42 | "clean": "rimraf ./dist",
43 | "watch": "tsc --watch",
44 | "prepublishOnly": "npm run build"
45 | },
46 | "devDependencies": {
47 | "@capacitor/android": "^6.0.0",
48 | "@capacitor/core": "^6.0.0",
49 | "@capacitor/docgen": "^0.0.18",
50 | "@capacitor/ios": "^6.0.0",
51 | "@ionic/eslint-config": "^0.4.0",
52 | "@ionic/prettier-config": "^1.0.1",
53 | "@ionic/swiftlint-config": "^1.1.2",
54 | "eslint": "^8.57.0",
55 | "prettier": "~2.2.0",
56 | "prettier-plugin-java": "~1.0.0",
57 | "rimraf": "^3.0.2",
58 | "rollup": "^2.32.0",
59 | "swiftlint": "^1.0.1",
60 | "typescript": "~4.0.3"
61 | },
62 | "peerDependencies": {
63 | "@capacitor/core": "^6.0.0"
64 | },
65 | "prettier": "@ionic/prettier-config",
66 | "swiftlint": "@ionic/swiftlint-config",
67 | "eslintConfig": {
68 | "extends": "@ionic/eslint-config/recommended"
69 | },
70 | "capacitor": {
71 | "ios": {
72 | "src": "ios"
73 | },
74 | "android": {
75 | "src": "android"
76 | }
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/android/src/main/java/tech/thegamedefault/capacitor/calls/CallDetectorPlugin.java:
--------------------------------------------------------------------------------
1 | package tech.thegamedefault.capacitor.calls;
2 |
3 | import android.Manifest;
4 | import android.util.Log;
5 |
6 | import com.getcapacitor.JSObject;
7 | import com.getcapacitor.Plugin;
8 | import com.getcapacitor.PluginCall;
9 | import com.getcapacitor.PluginMethod;
10 | import com.getcapacitor.annotation.CapacitorPlugin;
11 | import com.getcapacitor.annotation.Permission;
12 |
13 | import org.json.JSONException;
14 |
15 | @CapacitorPlugin(
16 | name = "CallDetector",
17 | permissions = {
18 | @Permission(
19 | alias = "phone_calls",
20 | strings = {
21 | Manifest.permission.READ_PHONE_STATE,
22 | Manifest.permission.PROCESS_OUTGOING_CALLS
23 | }
24 | )
25 | }
26 | )
27 | public class CallDetectorPlugin extends Plugin {
28 |
29 | private CallDetector implementation = new CallDetector();
30 | public static final String CALL_STATE_EVENT = "callStateChange";
31 |
32 | @PluginMethod
33 | public void echo(PluginCall call) {
34 | String value = call.getString("value");
35 |
36 | JSObject ret = new JSObject();
37 | ret.put("value", implementation.echo(value));
38 | call.resolve(ret);
39 | }
40 |
41 | @PluginMethod
42 | public void detectCallState(PluginCall call) {
43 | String action = call.getString("action");
44 | JSObject ret = new JSObject();
45 | if ("ACTIVATE".equals(action)) {
46 | setupCallDetector();
47 | call.setKeepAlive(true);
48 | } else {
49 | implementation.disableDetectCall();
50 | }
51 | ret.put("success", true);
52 | call.resolve(ret);
53 | }
54 |
55 | private void setupCallDetector() {
56 | implementation.setCallStateChangeListener(this::updateCallState);
57 | implementation.enableDetectCall();
58 | implementation.startDetection(getActivity());
59 | }
60 |
61 | private void updateCallState() {
62 | Log.i("CallDetector", "Notify listeners, CurrentPhoneState: " + implementation.getCurrentPhoneState());
63 | notifyListeners(CALL_STATE_EVENT, getPhoneStateJSObject(implementation.getCurrentPhoneState()));
64 | }
65 |
66 | private JSObject getPhoneStateJSObject(PhoneState state) {
67 | JSObject ret = null;
68 | try {
69 | ret = JSObject.fromJSONObject(state.toJsonObject());
70 | } catch (JSONException e) {
71 | e.printStackTrace();
72 | }
73 | return ret;
74 | }
75 |
76 | @Override
77 | protected void handleOnDestroy() {
78 | implementation.setCallStateChangeListener(null);
79 | }
80 |
81 | }
82 |
--------------------------------------------------------------------------------
/ios/Plugin.xcodeproj/xcshareddata/xcschemes/Plugin.xcscheme:
--------------------------------------------------------------------------------
1 |
2 |
5 |
8 |
9 |
15 |
21 |
22 |
23 |
24 |
25 |
30 |
31 |
33 |
39 |
40 |
41 |
42 |
43 |
53 |
54 |
60 |
61 |
67 |
68 |
69 |
70 |
72 |
73 |
76 |
77 |
78 |
--------------------------------------------------------------------------------
/android/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 |
17 | @if "%DEBUG%"=="" @echo off
18 | @rem ##########################################################################
19 | @rem
20 | @rem Gradle startup script for Windows
21 | @rem
22 | @rem ##########################################################################
23 |
24 | @rem Set local scope for the variables with windows NT shell
25 | if "%OS%"=="Windows_NT" setlocal
26 |
27 | set DIRNAME=%~dp0
28 | if "%DIRNAME%"=="" set DIRNAME=.
29 | @rem This is normally unused
30 | set APP_BASE_NAME=%~n0
31 | set APP_HOME=%DIRNAME%
32 |
33 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
34 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
35 |
36 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
37 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
38 |
39 | @rem Find java.exe
40 | if defined JAVA_HOME goto findJavaFromJavaHome
41 |
42 | set JAVA_EXE=java.exe
43 | %JAVA_EXE% -version >NUL 2>&1
44 | if %ERRORLEVEL% equ 0 goto execute
45 |
46 | echo.
47 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48 | echo.
49 | echo Please set the JAVA_HOME variable in your environment to match the
50 | echo location of your Java installation.
51 |
52 | goto fail
53 |
54 | :findJavaFromJavaHome
55 | set JAVA_HOME=%JAVA_HOME:"=%
56 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
57 |
58 | if exist "%JAVA_EXE%" goto execute
59 |
60 | echo.
61 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62 | echo.
63 | echo Please set the JAVA_HOME variable in your environment to match the
64 | echo location of your Java installation.
65 |
66 | goto fail
67 |
68 | :execute
69 | @rem Setup the command line
70 |
71 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
72 |
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if %ERRORLEVEL% equ 0 goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | set EXIT_CODE=%ERRORLEVEL%
85 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
86 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
87 | exit /b %EXIT_CODE%
88 |
89 | :mainEnd
90 | if "%OS%"=="Windows_NT" endlocal
91 |
92 | :omega
93 |
--------------------------------------------------------------------------------
/android/src/main/java/tech/thegamedefault/capacitor/calls/CallBroadcastReceiver.java:
--------------------------------------------------------------------------------
1 | package tech.thegamedefault.capacitor.calls;
2 |
3 | import android.Manifest;
4 | import android.content.BroadcastReceiver;
5 | import android.content.Context;
6 | import android.content.Intent;
7 | import android.content.pm.PackageManager;
8 | import android.telephony.TelephonyManager;
9 | import android.util.Log;
10 |
11 | import androidx.core.app.ActivityCompat;
12 |
13 | public class CallBroadcastReceiver extends BroadcastReceiver {
14 |
15 | CallDetector.CallStateChangeListener callStateChangeListener = null;
16 | private final PhoneState currentPhoneState = new PhoneState();
17 | private int prevState = TelephonyManager.CALL_STATE_IDLE;
18 |
19 |
20 | @Override
21 | public void onReceive(Context context, Intent intent) {
22 | Log.i("CallBroadcastReceiver", intent.getAction());
23 | if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) {
24 | currentPhoneState.setCallActive(true);
25 | currentPhoneState.setCallState("OUTGOING_CALL");
26 | } else {
27 | TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
28 | if (ActivityCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
29 | return;
30 | }
31 | int callState = tm.getCallState();
32 | if (callState == this.prevState) {
33 | return;
34 | }
35 | checkPhoneState(callState, intent);
36 | }
37 | callStateChangeListener.onCallStateChanged();
38 | }
39 |
40 | private void checkPhoneState(int state, Intent intent) {
41 | switch (state) {
42 | case TelephonyManager.CALL_STATE_IDLE:
43 | this.currentPhoneState.setCallActive(false);
44 | this.currentPhoneState.setCallState("IDLE");
45 | break;
46 |
47 | case TelephonyManager.CALL_STATE_RINGING:
48 | // called when someone is ringing to this phone
49 | this.currentPhoneState.setCallActive(true);
50 | this.currentPhoneState.setCallState("RINGING");
51 | this.currentPhoneState.setIncomingNumber(intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER));
52 | break;
53 |
54 | case TelephonyManager.CALL_STATE_OFFHOOK:
55 |
56 | // If call was picked
57 | if (prevState == TelephonyManager.CALL_STATE_RINGING) {
58 | this.currentPhoneState.setCallActive(true);
59 | this.currentPhoneState.setCallState("ON_CALL");
60 | } else {
61 | // TODO: Not sure if this is correct.
62 | this.currentPhoneState.setCallActive(false);
63 | this.currentPhoneState.setCallState("ON_HOLD");
64 | }
65 | this.currentPhoneState.setOutgoingNumber(intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER));
66 | break;
67 | }
68 | this.prevState = state;
69 | }
70 |
71 | public void setCallStateChangeListener(CallDetector.CallStateChangeListener callStateChangeListener) {
72 | this.callStateChangeListener = callStateChangeListener;
73 | }
74 |
75 | public PhoneState getCurrentPhoneState() {
76 | return this.currentPhoneState;
77 | }
78 |
79 | }
80 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # capacitor-plugin-incoming-call
2 |
3 | capacitor-plugin-incoming-call
4 |
5 | ## Install
6 | install the package and sync the project.
7 | ```bash
8 | npm install capacitor-plugin-incoming-call
9 | npx cap sync
10 | ```
11 |
12 | Add the required permissions to the Android source code
13 |
14 | ``android\app\src\main\java\app\[package_namespace]\MainActivity.java``
15 | ```java
16 | import android.os.Bundle; // required for onCreate parameter
17 | import com.getcapacitor.BridgeActivity;
18 | import androidx.core.app.ActivityCompat;
19 |
20 | public class MainActivity extends BridgeActivity {
21 |
22 | @Override
23 | protected void onCreate(Bundle savedInstanceState) {
24 | super.onCreate(savedInstanceState);
25 | String[] PERMISSIONS = {
26 | android.Manifest.permission.READ_PHONE_STATE,
27 | android.Manifest.permission.READ_CALL_LOG
28 | };
29 |
30 | ActivityCompat.requestPermissions(MainActivity.this,
31 | PERMISSIONS,
32 | 0);
33 | }
34 |
35 | }
36 | ```
37 |
38 | ## Usage
39 |
40 | Typescipt side changes:
41 | ```typescript
42 | console.log('### Test CallDetector plugin ###');
43 | CallDetector.detectCallState({ action: 'ACTIVATE' }).then(x => console.log(x)).catch(e => console.error(e));
44 | CallDetector.addListener('callStateChange', res => {
45 | console.log('### Listening to callStateChange ###');
46 | console.log(res);
47 | });
48 | ```
49 |
50 | ## API
51 |
52 |
53 |
54 | * [`echo(...)`](#echo)
55 | * [`detectCallState(...)`](#detectcallstate)
56 | * [`addListener('callStateChange', ...)`](#addlistenercallstatechange)
57 | * [Interfaces](#interfaces)
58 | * [Type Aliases](#type-aliases)
59 |
60 |
61 |
62 |
63 |
64 |
65 | ### echo(...)
66 |
67 | ```typescript
68 | echo(options: { value: string; }) => Promise<{ value: string; }>
69 | ```
70 |
71 | | Param | Type |
72 | | ------------- | ------------------------------- |
73 | | **`options`** | { value: string; } |
74 |
75 | **Returns:** Promise<{ value: string; }>
76 |
77 | --------------------
78 |
79 |
80 | ### detectCallState(...)
81 |
82 | ```typescript
83 | detectCallState(options: { action: string; }) => Promise<{ action: string; }>
84 | ```
85 |
86 | To enable / disable detection of calls
87 | options: { action: 'ACTIVATE' | 'DEACTIVATE' }
88 |
89 | | Param | Type |
90 | | ------------- | -------------------------------- |
91 | | **`options`** | { action: string; } |
92 |
93 | **Returns:** Promise<{ action: string; }>
94 |
95 | --------------------
96 |
97 |
98 | ### addListener('callStateChange', ...)
99 |
100 | ```typescript
101 | addListener(eventName: 'callStateChange', listenerFunc: CallStateChangeListener) => Promise & PluginListenerHandle
102 | ```
103 |
104 | | Param | Type |
105 | | ------------------ | --------------------------------------------------------------------------- |
106 | | **`eventName`** | 'callStateChange' |
107 | | **`listenerFunc`** | CallStateChangeListener |
108 |
109 | **Returns:** Promise<PluginListenerHandle> & PluginListenerHandle
110 |
111 | --------------------
112 |
113 |
114 | ### Interfaces
115 |
116 |
117 | #### PluginListenerHandle
118 |
119 | | Prop | Type |
120 | | ------------ | ----------------------------------------- |
121 | | **`remove`** | () => Promise<void> |
122 |
123 |
124 | #### PhoneState
125 |
126 | | Prop | Type | Description | Since |
127 | | ---------------- | --------------------------------------------------------- | ----------------------------------------------------------------------------- | ----- |
128 | | **`callActive`** | boolean | Whether there is an active call or not. | 1.0.0 |
129 | | **`callState`** | PhoneStateType | The type of call. 'RINGING' \| 'OUTGOING' \| 'IDLE' \| 'ON_CALL' \| 'ON_HOLD' | 1.0.0 |
130 |
131 |
132 | ### Type Aliases
133 |
134 |
135 | #### CallStateChangeListener
136 |
137 | (status: PhoneState): void
138 |
139 |
140 | #### PhoneStateType
141 |
142 | 'RINGING' | 'OUTGOING' | 'IDLE' | 'ON_CALL' | 'ON_HOLD'
143 |
144 |
145 |
--------------------------------------------------------------------------------
/android/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 |
19 | ##############################################################################
20 | #
21 | # Gradle start up script for POSIX generated by Gradle.
22 | #
23 | # Important for running:
24 | #
25 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
26 | # noncompliant, but you have some other compliant shell such as ksh or
27 | # bash, then to run this script, type that shell name before the whole
28 | # command line, like:
29 | #
30 | # ksh Gradle
31 | #
32 | # Busybox and similar reduced shells will NOT work, because this script
33 | # requires all of these POSIX shell features:
34 | # * functions;
35 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
36 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
37 | # * compound commands having a testable exit status, especially «case»;
38 | # * various built-in commands including «command», «set», and «ulimit».
39 | #
40 | # Important for patching:
41 | #
42 | # (2) This script targets any POSIX shell, so it avoids extensions provided
43 | # by Bash, Ksh, etc; in particular arrays are avoided.
44 | #
45 | # The "traditional" practice of packing multiple parameters into a
46 | # space-separated string is a well documented source of bugs and security
47 | # problems, so this is (mostly) avoided, by progressively accumulating
48 | # options in "$@", and eventually passing that to Java.
49 | #
50 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
51 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
52 | # see the in-line comments for details.
53 | #
54 | # There are tweaks for specific operating systems such as AIX, CygWin,
55 | # Darwin, MinGW, and NonStop.
56 | #
57 | # (3) This script is generated from the Groovy template
58 | # https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
59 | # within the Gradle project.
60 | #
61 | # You can find Gradle at https://github.com/gradle/gradle/.
62 | #
63 | ##############################################################################
64 |
65 | # Attempt to set APP_HOME
66 |
67 | # Resolve links: $0 may be a link
68 | app_path=$0
69 |
70 | # Need this for daisy-chained symlinks.
71 | while
72 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
73 | [ -h "$app_path" ]
74 | do
75 | ls=$( ls -ld "$app_path" )
76 | link=${ls#*' -> '}
77 | case $link in #(
78 | /*) app_path=$link ;; #(
79 | *) app_path=$APP_HOME$link ;;
80 | esac
81 | done
82 |
83 | # This is normally unused
84 | # shellcheck disable=SC2034
85 | APP_BASE_NAME=${0##*/}
86 | APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
87 |
88 | # Use the maximum available, or set MAX_FD != -1 to use that value.
89 | MAX_FD=maximum
90 |
91 | warn () {
92 | echo "$*"
93 | } >&2
94 |
95 | die () {
96 | echo
97 | echo "$*"
98 | echo
99 | exit 1
100 | } >&2
101 |
102 | # OS specific support (must be 'true' or 'false').
103 | cygwin=false
104 | msys=false
105 | darwin=false
106 | nonstop=false
107 | case "$( uname )" in #(
108 | CYGWIN* ) cygwin=true ;; #(
109 | Darwin* ) darwin=true ;; #(
110 | MSYS* | MINGW* ) msys=true ;; #(
111 | NONSTOP* ) nonstop=true ;;
112 | esac
113 |
114 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
115 |
116 |
117 | # Determine the Java command to use to start the JVM.
118 | if [ -n "$JAVA_HOME" ] ; then
119 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
120 | # IBM's JDK on AIX uses strange locations for the executables
121 | JAVACMD=$JAVA_HOME/jre/sh/java
122 | else
123 | JAVACMD=$JAVA_HOME/bin/java
124 | fi
125 | if [ ! -x "$JAVACMD" ] ; then
126 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
127 |
128 | Please set the JAVA_HOME variable in your environment to match the
129 | location of your Java installation."
130 | fi
131 | else
132 | JAVACMD=java
133 | if ! command -v java >/dev/null 2>&1
134 | then
135 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
136 |
137 | Please set the JAVA_HOME variable in your environment to match the
138 | location of your Java installation."
139 | fi
140 | fi
141 |
142 | # Increase the maximum file descriptors if we can.
143 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
144 | case $MAX_FD in #(
145 | max*)
146 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
147 | # shellcheck disable=SC3045
148 | MAX_FD=$( ulimit -H -n ) ||
149 | warn "Could not query maximum file descriptor limit"
150 | esac
151 | case $MAX_FD in #(
152 | '' | soft) :;; #(
153 | *)
154 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
155 | # shellcheck disable=SC3045
156 | ulimit -n "$MAX_FD" ||
157 | warn "Could not set maximum file descriptor limit to $MAX_FD"
158 | esac
159 | fi
160 |
161 | # Collect all arguments for the java command, stacking in reverse order:
162 | # * args from the command line
163 | # * the main class name
164 | # * -classpath
165 | # * -D...appname settings
166 | # * --module-path (only if needed)
167 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
168 |
169 | # For Cygwin or MSYS, switch paths to Windows format before running java
170 | if "$cygwin" || "$msys" ; then
171 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
172 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
173 |
174 | JAVACMD=$( cygpath --unix "$JAVACMD" )
175 |
176 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
177 | for arg do
178 | if
179 | case $arg in #(
180 | -*) false ;; # don't mess with options #(
181 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
182 | [ -e "$t" ] ;; #(
183 | *) false ;;
184 | esac
185 | then
186 | arg=$( cygpath --path --ignore --mixed "$arg" )
187 | fi
188 | # Roll the args list around exactly as many times as the number of
189 | # args, so each arg winds up back in the position where it started, but
190 | # possibly modified.
191 | #
192 | # NB: a `for` loop captures its iteration list before it begins, so
193 | # changing the positional parameters here affects neither the number of
194 | # iterations, nor the values presented in `arg`.
195 | shift # remove old arg
196 | set -- "$@" "$arg" # push replacement arg
197 | done
198 | fi
199 |
200 |
201 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
202 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
203 |
204 | # Collect all arguments for the java command;
205 | # * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
206 | # shell script including quotes and variable substitutions, so put them in
207 | # double quotes to make sure that they get re-expanded; and
208 | # * put everything else in single quotes, so that it's not re-expanded.
209 |
210 | set -- \
211 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
212 | -classpath "$CLASSPATH" \
213 | org.gradle.wrapper.GradleWrapperMain \
214 | "$@"
215 |
216 | # Stop when "xargs" is not available.
217 | if ! command -v xargs >/dev/null 2>&1
218 | then
219 | die "xargs is not available"
220 | fi
221 |
222 | # Use "xargs" to parse quoted args.
223 | #
224 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
225 | #
226 | # In Bash we could simply go:
227 | #
228 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
229 | # set -- "${ARGS[@]}" "$@"
230 | #
231 | # but POSIX shell has neither arrays nor command substitution, so instead we
232 | # post-process each arg (as a line of input to sed) to backslash-escape any
233 | # character that might be a shell metacharacter, then use eval to reverse
234 | # that process (while maintaining the separation between arguments), and wrap
235 | # the whole thing up as a single "set" statement.
236 | #
237 | # This will of course break if any of these variables contains a newline or
238 | # an unmatched quote.
239 | #
240 |
241 | eval "set -- $(
242 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
243 | xargs -n1 |
244 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
245 | tr '\n' ' '
246 | )" '"$@"'
247 |
248 | exec "$JAVACMD" "$@"
249 |
--------------------------------------------------------------------------------
/ios/Plugin.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 48;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 03FC29A292ACC40490383A1F /* Pods_Plugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */; };
11 | 20C0B05DCFC8E3958A738AF2 /* Pods_PluginTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */; };
12 | 2F98D68224C9AAE500613A4C /* CallDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F98D68124C9AAE400613A4C /* CallDetector.swift */; };
13 | 50ADFF92201F53D600D50D53 /* Plugin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ADFF88201F53D600D50D53 /* Plugin.framework */; };
14 | 50ADFF97201F53D600D50D53 /* CallDetectorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50ADFF96201F53D600D50D53 /* CallDetectorTests.swift */; };
15 | 50ADFF99201F53D600D50D53 /* CallDetectorPlugin.h in Headers */ = {isa = PBXBuildFile; fileRef = 50ADFF8B201F53D600D50D53 /* CallDetectorPlugin.h */; settings = {ATTRIBUTES = (Public, ); }; };
16 | 50ADFFA42020D75100D50D53 /* Capacitor.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 50ADFFA52020D75100D50D53 /* Capacitor.framework */; };
17 | 50ADFFA82020EE4F00D50D53 /* CallDetectorPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 50ADFFA72020EE4F00D50D53 /* CallDetectorPlugin.m */; };
18 | 50E1A94820377CB70090CE1A /* CallDetectorPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E1A94720377CB70090CE1A /* CallDetectorPlugin.swift */; };
19 | /* End PBXBuildFile section */
20 |
21 | /* Begin PBXContainerItemProxy section */
22 | 50ADFF93201F53D600D50D53 /* PBXContainerItemProxy */ = {
23 | isa = PBXContainerItemProxy;
24 | containerPortal = 50ADFF7F201F53D600D50D53 /* Project object */;
25 | proxyType = 1;
26 | remoteGlobalIDString = 50ADFF87201F53D600D50D53;
27 | remoteInfo = Plugin;
28 | };
29 | /* End PBXContainerItemProxy section */
30 |
31 | /* Begin PBXFileReference section */
32 | 2F98D68124C9AAE400613A4C /* CallDetector.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallDetector.swift; sourceTree = ""; };
33 | 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; };
34 | 50ADFF88201F53D600D50D53 /* Plugin.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Plugin.framework; sourceTree = BUILT_PRODUCTS_DIR; };
35 | 50ADFF8B201F53D600D50D53 /* CallDetectorPlugin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CallDetectorPlugin.h; sourceTree = ""; };
36 | 50ADFF8C201F53D600D50D53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
37 | 50ADFF91201F53D600D50D53 /* PluginTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PluginTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
38 | 50ADFF96201F53D600D50D53 /* CallDetectorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallDetectorTests.swift; sourceTree = ""; };
39 | 50ADFF98201F53D600D50D53 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
40 | 50ADFFA52020D75100D50D53 /* Capacitor.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = Capacitor.framework; sourceTree = BUILT_PRODUCTS_DIR; };
41 | 50ADFFA72020EE4F00D50D53 /* CallDetectorPlugin.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CallDetectorPlugin.m; sourceTree = ""; };
42 | 50E1A94720377CB70090CE1A /* CallDetectorPlugin.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CallDetectorPlugin.swift; sourceTree = ""; };
43 | 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Plugin.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Plugin/Pods-Plugin.debug.xcconfig"; sourceTree = ""; };
44 | 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Plugin.release.xcconfig"; path = "Pods/Target Support Files/Pods-Plugin/Pods-Plugin.release.xcconfig"; sourceTree = ""; };
45 | 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PluginTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-PluginTests/Pods-PluginTests.debug.xcconfig"; sourceTree = ""; };
46 | F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-PluginTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-PluginTests/Pods-PluginTests.release.xcconfig"; sourceTree = ""; };
47 | F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_PluginTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
48 | /* End PBXFileReference section */
49 |
50 | /* Begin PBXFrameworksBuildPhase section */
51 | 50ADFF84201F53D600D50D53 /* Frameworks */ = {
52 | isa = PBXFrameworksBuildPhase;
53 | buildActionMask = 2147483647;
54 | files = (
55 | 50ADFFA42020D75100D50D53 /* Capacitor.framework in Frameworks */,
56 | 03FC29A292ACC40490383A1F /* Pods_Plugin.framework in Frameworks */,
57 | );
58 | runOnlyForDeploymentPostprocessing = 0;
59 | };
60 | 50ADFF8E201F53D600D50D53 /* Frameworks */ = {
61 | isa = PBXFrameworksBuildPhase;
62 | buildActionMask = 2147483647;
63 | files = (
64 | 50ADFF92201F53D600D50D53 /* Plugin.framework in Frameworks */,
65 | 20C0B05DCFC8E3958A738AF2 /* Pods_PluginTests.framework in Frameworks */,
66 | );
67 | runOnlyForDeploymentPostprocessing = 0;
68 | };
69 | /* End PBXFrameworksBuildPhase section */
70 |
71 | /* Begin PBXGroup section */
72 | 50ADFF7E201F53D600D50D53 = {
73 | isa = PBXGroup;
74 | children = (
75 | 50ADFF8A201F53D600D50D53 /* Plugin */,
76 | 50ADFF95201F53D600D50D53 /* PluginTests */,
77 | 50ADFF89201F53D600D50D53 /* Products */,
78 | 8C8E7744173064A9F6D438E3 /* Pods */,
79 | A797B9EFA3DCEFEA1FBB66A9 /* Frameworks */,
80 | );
81 | sourceTree = "";
82 | };
83 | 50ADFF89201F53D600D50D53 /* Products */ = {
84 | isa = PBXGroup;
85 | children = (
86 | 50ADFF88201F53D600D50D53 /* Plugin.framework */,
87 | 50ADFF91201F53D600D50D53 /* PluginTests.xctest */,
88 | );
89 | name = Products;
90 | sourceTree = "";
91 | };
92 | 50ADFF8A201F53D600D50D53 /* Plugin */ = {
93 | isa = PBXGroup;
94 | children = (
95 | 50E1A94720377CB70090CE1A /* CallDetectorPlugin.swift */,
96 | 2F98D68124C9AAE400613A4C /* CallDetector.swift */,
97 | 50ADFF8B201F53D600D50D53 /* CallDetectorPlugin.h */,
98 | 50ADFFA72020EE4F00D50D53 /* CallDetectorPlugin.m */,
99 | 50ADFF8C201F53D600D50D53 /* Info.plist */,
100 | );
101 | path = Plugin;
102 | sourceTree = "";
103 | };
104 | 50ADFF95201F53D600D50D53 /* PluginTests */ = {
105 | isa = PBXGroup;
106 | children = (
107 | 50ADFF96201F53D600D50D53 /* CallDetectorTests.swift */,
108 | 50ADFF98201F53D600D50D53 /* Info.plist */,
109 | );
110 | path = PluginTests;
111 | sourceTree = "";
112 | };
113 | 8C8E7744173064A9F6D438E3 /* Pods */ = {
114 | isa = PBXGroup;
115 | children = (
116 | 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */,
117 | 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */,
118 | 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */,
119 | F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */,
120 | );
121 | name = Pods;
122 | sourceTree = "";
123 | };
124 | A797B9EFA3DCEFEA1FBB66A9 /* Frameworks */ = {
125 | isa = PBXGroup;
126 | children = (
127 | 50ADFFA52020D75100D50D53 /* Capacitor.framework */,
128 | 3B2A61DA5A1F2DD4F959604D /* Pods_Plugin.framework */,
129 | F6753A823D3815DB436415E3 /* Pods_PluginTests.framework */,
130 | );
131 | name = Frameworks;
132 | sourceTree = "";
133 | };
134 | /* End PBXGroup section */
135 |
136 | /* Begin PBXHeadersBuildPhase section */
137 | 50ADFF85201F53D600D50D53 /* Headers */ = {
138 | isa = PBXHeadersBuildPhase;
139 | buildActionMask = 2147483647;
140 | files = (
141 | 50ADFF99201F53D600D50D53 /* CallDetectorPlugin.h in Headers */,
142 | );
143 | runOnlyForDeploymentPostprocessing = 0;
144 | };
145 | /* End PBXHeadersBuildPhase section */
146 |
147 | /* Begin PBXNativeTarget section */
148 | 50ADFF87201F53D600D50D53 /* Plugin */ = {
149 | isa = PBXNativeTarget;
150 | buildConfigurationList = 50ADFF9C201F53D600D50D53 /* Build configuration list for PBXNativeTarget "Plugin" */;
151 | buildPhases = (
152 | AB5B3E54B4E897F32C2279DA /* [CP] Check Pods Manifest.lock */,
153 | 50ADFF83201F53D600D50D53 /* Sources */,
154 | 50ADFF84201F53D600D50D53 /* Frameworks */,
155 | 50ADFF85201F53D600D50D53 /* Headers */,
156 | 50ADFF86201F53D600D50D53 /* Resources */,
157 | );
158 | buildRules = (
159 | );
160 | dependencies = (
161 | );
162 | name = Plugin;
163 | productName = Plugin;
164 | productReference = 50ADFF88201F53D600D50D53 /* Plugin.framework */;
165 | productType = "com.apple.product-type.framework";
166 | };
167 | 50ADFF90201F53D600D50D53 /* PluginTests */ = {
168 | isa = PBXNativeTarget;
169 | buildConfigurationList = 50ADFF9F201F53D600D50D53 /* Build configuration list for PBXNativeTarget "PluginTests" */;
170 | buildPhases = (
171 | 0596884F929ED6F1DE134961 /* [CP] Check Pods Manifest.lock */,
172 | 50ADFF8D201F53D600D50D53 /* Sources */,
173 | 50ADFF8E201F53D600D50D53 /* Frameworks */,
174 | 50ADFF8F201F53D600D50D53 /* Resources */,
175 | 8E97F58B69A94C6503FC9C85 /* [CP] Embed Pods Frameworks */,
176 | );
177 | buildRules = (
178 | );
179 | dependencies = (
180 | 50ADFF94201F53D600D50D53 /* PBXTargetDependency */,
181 | );
182 | name = PluginTests;
183 | productName = PluginTests;
184 | productReference = 50ADFF91201F53D600D50D53 /* PluginTests.xctest */;
185 | productType = "com.apple.product-type.bundle.unit-test";
186 | };
187 | /* End PBXNativeTarget section */
188 |
189 | /* Begin PBXProject section */
190 | 50ADFF7F201F53D600D50D53 /* Project object */ = {
191 | isa = PBXProject;
192 | attributes = {
193 | LastSwiftUpdateCheck = 0920;
194 | LastUpgradeCheck = 1160;
195 | ORGANIZATIONNAME = "Max Lynch";
196 | TargetAttributes = {
197 | 50ADFF87201F53D600D50D53 = {
198 | CreatedOnToolsVersion = 9.2;
199 | LastSwiftMigration = 1100;
200 | ProvisioningStyle = Automatic;
201 | };
202 | 50ADFF90201F53D600D50D53 = {
203 | CreatedOnToolsVersion = 9.2;
204 | LastSwiftMigration = 1100;
205 | ProvisioningStyle = Automatic;
206 | };
207 | };
208 | };
209 | buildConfigurationList = 50ADFF82201F53D600D50D53 /* Build configuration list for PBXProject "Plugin" */;
210 | compatibilityVersion = "Xcode 8.0";
211 | developmentRegion = en;
212 | hasScannedForEncodings = 0;
213 | knownRegions = (
214 | en,
215 | Base,
216 | );
217 | mainGroup = 50ADFF7E201F53D600D50D53;
218 | productRefGroup = 50ADFF89201F53D600D50D53 /* Products */;
219 | projectDirPath = "";
220 | projectRoot = "";
221 | targets = (
222 | 50ADFF87201F53D600D50D53 /* Plugin */,
223 | 50ADFF90201F53D600D50D53 /* PluginTests */,
224 | );
225 | };
226 | /* End PBXProject section */
227 |
228 | /* Begin PBXResourcesBuildPhase section */
229 | 50ADFF86201F53D600D50D53 /* Resources */ = {
230 | isa = PBXResourcesBuildPhase;
231 | buildActionMask = 2147483647;
232 | files = (
233 | );
234 | runOnlyForDeploymentPostprocessing = 0;
235 | };
236 | 50ADFF8F201F53D600D50D53 /* Resources */ = {
237 | isa = PBXResourcesBuildPhase;
238 | buildActionMask = 2147483647;
239 | files = (
240 | );
241 | runOnlyForDeploymentPostprocessing = 0;
242 | };
243 | /* End PBXResourcesBuildPhase section */
244 |
245 | /* Begin PBXShellScriptBuildPhase section */
246 | 0596884F929ED6F1DE134961 /* [CP] Check Pods Manifest.lock */ = {
247 | isa = PBXShellScriptBuildPhase;
248 | buildActionMask = 2147483647;
249 | files = (
250 | );
251 | inputPaths = (
252 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
253 | "${PODS_ROOT}/Manifest.lock",
254 | );
255 | name = "[CP] Check Pods Manifest.lock";
256 | outputPaths = (
257 | "$(DERIVED_FILE_DIR)/Pods-PluginTests-checkManifestLockResult.txt",
258 | );
259 | runOnlyForDeploymentPostprocessing = 0;
260 | shellPath = /bin/sh;
261 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
262 | showEnvVarsInLog = 0;
263 | };
264 | 8E97F58B69A94C6503FC9C85 /* [CP] Embed Pods Frameworks */ = {
265 | isa = PBXShellScriptBuildPhase;
266 | buildActionMask = 2147483647;
267 | files = (
268 | );
269 | inputPaths = (
270 | "${PODS_ROOT}/Target Support Files/Pods-PluginTests/Pods-PluginTests-frameworks.sh",
271 | "${BUILT_PRODUCTS_DIR}/Capacitor/Capacitor.framework",
272 | "${BUILT_PRODUCTS_DIR}/CapacitorCordova/Cordova.framework",
273 | );
274 | name = "[CP] Embed Pods Frameworks";
275 | outputPaths = (
276 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Capacitor.framework",
277 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Cordova.framework",
278 | );
279 | runOnlyForDeploymentPostprocessing = 0;
280 | shellPath = /bin/sh;
281 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-PluginTests/Pods-PluginTests-frameworks.sh\"\n";
282 | showEnvVarsInLog = 0;
283 | };
284 | AB5B3E54B4E897F32C2279DA /* [CP] Check Pods Manifest.lock */ = {
285 | isa = PBXShellScriptBuildPhase;
286 | buildActionMask = 2147483647;
287 | files = (
288 | );
289 | inputPaths = (
290 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
291 | "${PODS_ROOT}/Manifest.lock",
292 | );
293 | name = "[CP] Check Pods Manifest.lock";
294 | outputPaths = (
295 | "$(DERIVED_FILE_DIR)/Pods-Plugin-checkManifestLockResult.txt",
296 | );
297 | runOnlyForDeploymentPostprocessing = 0;
298 | shellPath = /bin/sh;
299 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
300 | showEnvVarsInLog = 0;
301 | };
302 | /* End PBXShellScriptBuildPhase section */
303 |
304 | /* Begin PBXSourcesBuildPhase section */
305 | 50ADFF83201F53D600D50D53 /* Sources */ = {
306 | isa = PBXSourcesBuildPhase;
307 | buildActionMask = 2147483647;
308 | files = (
309 | 50E1A94820377CB70090CE1A /* CallDetectorPlugin.swift in Sources */,
310 | 2F98D68224C9AAE500613A4C /* CallDetector.swift in Sources */,
311 | 50ADFFA82020EE4F00D50D53 /* CallDetectorPlugin.m in Sources */,
312 | );
313 | runOnlyForDeploymentPostprocessing = 0;
314 | };
315 | 50ADFF8D201F53D600D50D53 /* Sources */ = {
316 | isa = PBXSourcesBuildPhase;
317 | buildActionMask = 2147483647;
318 | files = (
319 | 50ADFF97201F53D600D50D53 /* CallDetectorTests.swift in Sources */,
320 | );
321 | runOnlyForDeploymentPostprocessing = 0;
322 | };
323 | /* End PBXSourcesBuildPhase section */
324 |
325 | /* Begin PBXTargetDependency section */
326 | 50ADFF94201F53D600D50D53 /* PBXTargetDependency */ = {
327 | isa = PBXTargetDependency;
328 | target = 50ADFF87201F53D600D50D53 /* Plugin */;
329 | targetProxy = 50ADFF93201F53D600D50D53 /* PBXContainerItemProxy */;
330 | };
331 | /* End PBXTargetDependency section */
332 |
333 | /* Begin XCBuildConfiguration section */
334 | 50ADFF9A201F53D600D50D53 /* Debug */ = {
335 | isa = XCBuildConfiguration;
336 | buildSettings = {
337 | ALWAYS_SEARCH_USER_PATHS = NO;
338 | CLANG_ANALYZER_NONNULL = YES;
339 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
340 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
341 | CLANG_CXX_LIBRARY = "libc++";
342 | CLANG_ENABLE_MODULES = YES;
343 | CLANG_ENABLE_OBJC_ARC = YES;
344 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
345 | CLANG_WARN_BOOL_CONVERSION = YES;
346 | CLANG_WARN_COMMA = YES;
347 | CLANG_WARN_CONSTANT_CONVERSION = YES;
348 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
349 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
350 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
351 | CLANG_WARN_EMPTY_BODY = YES;
352 | CLANG_WARN_ENUM_CONVERSION = YES;
353 | CLANG_WARN_INFINITE_RECURSION = YES;
354 | CLANG_WARN_INT_CONVERSION = YES;
355 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
356 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
357 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
358 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
359 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
360 | CLANG_WARN_STRICT_PROTOTYPES = YES;
361 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
362 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
363 | CLANG_WARN_UNREACHABLE_CODE = YES;
364 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
365 | CODE_SIGN_IDENTITY = "iPhone Developer";
366 | COPY_PHASE_STRIP = NO;
367 | CURRENT_PROJECT_VERSION = 1;
368 | DEBUG_INFORMATION_FORMAT = dwarf;
369 | ENABLE_STRICT_OBJC_MSGSEND = YES;
370 | ENABLE_TESTABILITY = YES;
371 | FRAMEWORK_SEARCH_PATHS = (
372 | "\"${BUILT_PRODUCTS_DIR}/Capacitor\"",
373 | "\"${BUILT_PRODUCTS_DIR}/CapacitorCordova\"",
374 | );
375 | GCC_C_LANGUAGE_STANDARD = gnu11;
376 | GCC_DYNAMIC_NO_PIC = NO;
377 | GCC_NO_COMMON_BLOCKS = YES;
378 | GCC_OPTIMIZATION_LEVEL = 0;
379 | GCC_PREPROCESSOR_DEFINITIONS = (
380 | "DEBUG=1",
381 | "$(inherited)",
382 | );
383 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
384 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
385 | GCC_WARN_UNDECLARED_SELECTOR = YES;
386 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
387 | GCC_WARN_UNUSED_FUNCTION = YES;
388 | GCC_WARN_UNUSED_VARIABLE = YES;
389 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
390 | MTL_ENABLE_DEBUG_INFO = YES;
391 | ONLY_ACTIVE_ARCH = YES;
392 | SDKROOT = iphoneos;
393 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
394 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
395 | VERSIONING_SYSTEM = "apple-generic";
396 | VERSION_INFO_PREFIX = "";
397 | };
398 | name = Debug;
399 | };
400 | 50ADFF9B201F53D600D50D53 /* Release */ = {
401 | isa = XCBuildConfiguration;
402 | buildSettings = {
403 | ALWAYS_SEARCH_USER_PATHS = NO;
404 | CLANG_ANALYZER_NONNULL = YES;
405 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
406 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
407 | CLANG_CXX_LIBRARY = "libc++";
408 | CLANG_ENABLE_MODULES = YES;
409 | CLANG_ENABLE_OBJC_ARC = YES;
410 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
411 | CLANG_WARN_BOOL_CONVERSION = YES;
412 | CLANG_WARN_COMMA = YES;
413 | CLANG_WARN_CONSTANT_CONVERSION = YES;
414 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
415 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
416 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
417 | CLANG_WARN_EMPTY_BODY = YES;
418 | CLANG_WARN_ENUM_CONVERSION = YES;
419 | CLANG_WARN_INFINITE_RECURSION = YES;
420 | CLANG_WARN_INT_CONVERSION = YES;
421 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
422 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
423 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
424 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
425 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
426 | CLANG_WARN_STRICT_PROTOTYPES = YES;
427 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
428 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
429 | CLANG_WARN_UNREACHABLE_CODE = YES;
430 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
431 | CODE_SIGN_IDENTITY = "iPhone Developer";
432 | COPY_PHASE_STRIP = NO;
433 | CURRENT_PROJECT_VERSION = 1;
434 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
435 | ENABLE_NS_ASSERTIONS = NO;
436 | ENABLE_STRICT_OBJC_MSGSEND = YES;
437 | FRAMEWORK_SEARCH_PATHS = (
438 | "\"${BUILT_PRODUCTS_DIR}/Capacitor\"",
439 | "\"${BUILT_PRODUCTS_DIR}/CapacitorCordova\"",
440 | );
441 | GCC_C_LANGUAGE_STANDARD = gnu11;
442 | GCC_NO_COMMON_BLOCKS = YES;
443 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
444 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
445 | GCC_WARN_UNDECLARED_SELECTOR = YES;
446 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
447 | GCC_WARN_UNUSED_FUNCTION = YES;
448 | GCC_WARN_UNUSED_VARIABLE = YES;
449 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
450 | MTL_ENABLE_DEBUG_INFO = NO;
451 | SDKROOT = iphoneos;
452 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
453 | VALIDATE_PRODUCT = YES;
454 | VERSIONING_SYSTEM = "apple-generic";
455 | VERSION_INFO_PREFIX = "";
456 | };
457 | name = Release;
458 | };
459 | 50ADFF9D201F53D600D50D53 /* Debug */ = {
460 | isa = XCBuildConfiguration;
461 | baseConfigurationReference = 5E23F77F099397094342571A /* Pods-Plugin.debug.xcconfig */;
462 | buildSettings = {
463 | CLANG_ENABLE_MODULES = YES;
464 | CODE_SIGN_IDENTITY = "";
465 | CODE_SIGN_STYLE = Automatic;
466 | DEFINES_MODULE = YES;
467 | DYLIB_COMPATIBILITY_VERSION = 1;
468 | DYLIB_CURRENT_VERSION = 1;
469 | DYLIB_INSTALL_NAME_BASE = "@rpath";
470 | INFOPLIST_FILE = Plugin/Info.plist;
471 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
472 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
473 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)\n$(FRAMEWORK_SEARCH_PATHS)\n$(FRAMEWORK_SEARCH_PATHS)";
474 | ONLY_ACTIVE_ARCH = YES;
475 | PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.Plugin;
476 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
477 | SKIP_INSTALL = YES;
478 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
479 | SWIFT_VERSION = 5.0;
480 | TARGETED_DEVICE_FAMILY = "1,2";
481 | };
482 | name = Debug;
483 | };
484 | 50ADFF9E201F53D600D50D53 /* Release */ = {
485 | isa = XCBuildConfiguration;
486 | baseConfigurationReference = 91781294A431A2A7CC6EB714 /* Pods-Plugin.release.xcconfig */;
487 | buildSettings = {
488 | CLANG_ENABLE_MODULES = YES;
489 | CODE_SIGN_IDENTITY = "";
490 | CODE_SIGN_STYLE = Automatic;
491 | DEFINES_MODULE = YES;
492 | DYLIB_COMPATIBILITY_VERSION = 1;
493 | DYLIB_CURRENT_VERSION = 1;
494 | DYLIB_INSTALL_NAME_BASE = "@rpath";
495 | INFOPLIST_FILE = Plugin/Info.plist;
496 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
497 | IPHONEOS_DEPLOYMENT_TARGET = 12.0;
498 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks $(FRAMEWORK_SEARCH_PATHS)";
499 | ONLY_ACTIVE_ARCH = NO;
500 | PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.Plugin;
501 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
502 | SKIP_INSTALL = YES;
503 | SWIFT_VERSION = 5.0;
504 | TARGETED_DEVICE_FAMILY = "1,2";
505 | };
506 | name = Release;
507 | };
508 | 50ADFFA0201F53D600D50D53 /* Debug */ = {
509 | isa = XCBuildConfiguration;
510 | baseConfigurationReference = 96ED1B6440D6672E406C8D19 /* Pods-PluginTests.debug.xcconfig */;
511 | buildSettings = {
512 | CODE_SIGN_STYLE = Automatic;
513 | INFOPLIST_FILE = PluginTests/Info.plist;
514 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
515 | PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.PluginTests;
516 | PRODUCT_NAME = "$(TARGET_NAME)";
517 | SWIFT_VERSION = 5.0;
518 | TARGETED_DEVICE_FAMILY = "1,2";
519 | };
520 | name = Debug;
521 | };
522 | 50ADFFA1201F53D600D50D53 /* Release */ = {
523 | isa = XCBuildConfiguration;
524 | baseConfigurationReference = F65BB2953ECE002E1EF3E424 /* Pods-PluginTests.release.xcconfig */;
525 | buildSettings = {
526 | CODE_SIGN_STYLE = Automatic;
527 | INFOPLIST_FILE = PluginTests/Info.plist;
528 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
529 | PRODUCT_BUNDLE_IDENTIFIER = com.getcapacitor.PluginTests;
530 | PRODUCT_NAME = "$(TARGET_NAME)";
531 | SWIFT_VERSION = 5.0;
532 | TARGETED_DEVICE_FAMILY = "1,2";
533 | };
534 | name = Release;
535 | };
536 | /* End XCBuildConfiguration section */
537 |
538 | /* Begin XCConfigurationList section */
539 | 50ADFF82201F53D600D50D53 /* Build configuration list for PBXProject "Plugin" */ = {
540 | isa = XCConfigurationList;
541 | buildConfigurations = (
542 | 50ADFF9A201F53D600D50D53 /* Debug */,
543 | 50ADFF9B201F53D600D50D53 /* Release */,
544 | );
545 | defaultConfigurationIsVisible = 0;
546 | defaultConfigurationName = Release;
547 | };
548 | 50ADFF9C201F53D600D50D53 /* Build configuration list for PBXNativeTarget "Plugin" */ = {
549 | isa = XCConfigurationList;
550 | buildConfigurations = (
551 | 50ADFF9D201F53D600D50D53 /* Debug */,
552 | 50ADFF9E201F53D600D50D53 /* Release */,
553 | );
554 | defaultConfigurationIsVisible = 0;
555 | defaultConfigurationName = Release;
556 | };
557 | 50ADFF9F201F53D600D50D53 /* Build configuration list for PBXNativeTarget "PluginTests" */ = {
558 | isa = XCConfigurationList;
559 | buildConfigurations = (
560 | 50ADFFA0201F53D600D50D53 /* Debug */,
561 | 50ADFFA1201F53D600D50D53 /* Release */,
562 | );
563 | defaultConfigurationIsVisible = 0;
564 | defaultConfigurationName = Release;
565 | };
566 | /* End XCConfigurationList section */
567 | };
568 | rootObject = 50ADFF7F201F53D600D50D53 /* Project object */;
569 | }
570 |
--------------------------------------------------------------------------------
/example/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "capacitor-app",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "capacitor-app",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "@capacitor/camera": "latest",
13 | "@capacitor/core": "latest",
14 | "@capacitor/splash-screen": "latest",
15 | "capacitor-plugin-incoming-call": "file:.."
16 | },
17 | "devDependencies": {
18 | "@capacitor/cli": "latest"
19 | }
20 | },
21 | "..": {
22 | "version": "0.0.9",
23 | "license": "MIT",
24 | "devDependencies": {
25 | "@capacitor/android": "^5.0.5",
26 | "@capacitor/core": "^5.0.0",
27 | "@capacitor/docgen": "^0.0.18",
28 | "@capacitor/ios": "^5.0.0",
29 | "@ionic/eslint-config": "^0.3.0",
30 | "@ionic/prettier-config": "^1.0.1",
31 | "@ionic/swiftlint-config": "^1.1.2",
32 | "eslint": "^7.11.0",
33 | "prettier": "~2.2.0",
34 | "prettier-plugin-java": "~1.0.0",
35 | "rimraf": "^3.0.2",
36 | "rollup": "^2.32.0",
37 | "swiftlint": "^1.0.1",
38 | "typescript": "~4.0.3"
39 | },
40 | "peerDependencies": {
41 | "@capacitor/core": "^5.0.0"
42 | }
43 | },
44 | "node_modules/@capacitor/camera": {
45 | "version": "6.0.1",
46 | "resolved": "https://registry.npmjs.org/@capacitor/camera/-/camera-6.0.1.tgz",
47 | "integrity": "sha512-KGfjv8q0Q9OEcpBGqSSZD2yb1KeDe12mlzOOPp4wr6GvcOY0EIvZ0o3KiPXegLVuRZeemz71/lCxPHAQ/5gAiA==",
48 | "peerDependencies": {
49 | "@capacitor/core": "^6.0.0"
50 | }
51 | },
52 | "node_modules/@capacitor/cli": {
53 | "version": "6.1.0",
54 | "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.0.tgz",
55 | "integrity": "sha512-HEKDh3+FuNZKFHmSDZ7nAnaX3bzhtznYk9GsZBMac1y4CTAxIykPX9wzZ3DzLeM/EbMBGFClUbefkIkimAyfYg==",
56 | "dev": true,
57 | "dependencies": {
58 | "@ionic/cli-framework-output": "^2.2.5",
59 | "@ionic/utils-fs": "^3.1.6",
60 | "@ionic/utils-process": "^2.1.11",
61 | "@ionic/utils-subprocess": "2.1.11",
62 | "@ionic/utils-terminal": "^2.3.3",
63 | "commander": "^9.3.0",
64 | "debug": "^4.3.4",
65 | "env-paths": "^2.2.0",
66 | "kleur": "^4.1.4",
67 | "native-run": "^2.0.0",
68 | "open": "^8.4.0",
69 | "plist": "^3.0.5",
70 | "prompts": "^2.4.2",
71 | "rimraf": "^4.4.1",
72 | "semver": "^7.3.7",
73 | "tar": "^6.1.11",
74 | "tslib": "^2.4.0",
75 | "xml2js": "^0.5.0"
76 | },
77 | "bin": {
78 | "cap": "bin/capacitor",
79 | "capacitor": "bin/capacitor"
80 | },
81 | "engines": {
82 | "node": ">=18.0.0"
83 | }
84 | },
85 | "node_modules/@capacitor/core": {
86 | "version": "6.1.0",
87 | "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.0.tgz",
88 | "integrity": "sha512-Kt4ONm0X9xxJXn9Q73oBaKdzep5B/VJw3VjXa2eGul4cD2k37mJwgjpXSMRnLH0Aju5bCiRL8J/hMAfTlokO6A==",
89 | "dependencies": {
90 | "tslib": "^2.1.0"
91 | }
92 | },
93 | "node_modules/@capacitor/splash-screen": {
94 | "version": "6.0.1",
95 | "resolved": "https://registry.npmjs.org/@capacitor/splash-screen/-/splash-screen-6.0.1.tgz",
96 | "integrity": "sha512-ndsqq335Mb6NxDrcXsT0PVwomo/UrDN4ykqpu8wY8F3HT4vbr8Hojh5PLqtlTy6TCIIIen58fkEgIoyGPsPSaw==",
97 | "peerDependencies": {
98 | "@capacitor/core": "^6.0.0"
99 | }
100 | },
101 | "node_modules/@ionic/cli-framework-output": {
102 | "version": "2.2.8",
103 | "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.8.tgz",
104 | "integrity": "sha512-TshtaFQsovB4NWRBydbNFawql6yul7d5bMiW1WYYf17hd99V6xdDdk3vtF51bw6sLkxON3bDQpWsnUc9/hVo3g==",
105 | "dev": true,
106 | "dependencies": {
107 | "@ionic/utils-terminal": "2.3.5",
108 | "debug": "^4.0.0",
109 | "tslib": "^2.0.1"
110 | },
111 | "engines": {
112 | "node": ">=16.0.0"
113 | }
114 | },
115 | "node_modules/@ionic/utils-array": {
116 | "version": "2.1.5",
117 | "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz",
118 | "integrity": "sha512-HD72a71IQVBmQckDwmA8RxNVMTbxnaLbgFOl+dO5tbvW9CkkSFCv41h6fUuNsSEVgngfkn0i98HDuZC8mk+lTA==",
119 | "dev": true,
120 | "dependencies": {
121 | "debug": "^4.0.0",
122 | "tslib": "^2.0.1"
123 | },
124 | "engines": {
125 | "node": ">=10.3.0"
126 | }
127 | },
128 | "node_modules/@ionic/utils-fs": {
129 | "version": "3.1.7",
130 | "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.7.tgz",
131 | "integrity": "sha512-2EknRvMVfhnyhL1VhFkSLa5gOcycK91VnjfrTB0kbqkTFCOXyXgVLI5whzq7SLrgD9t1aqos3lMMQyVzaQ5gVA==",
132 | "dev": true,
133 | "dependencies": {
134 | "@types/fs-extra": "^8.0.0",
135 | "debug": "^4.0.0",
136 | "fs-extra": "^9.0.0",
137 | "tslib": "^2.0.1"
138 | },
139 | "engines": {
140 | "node": ">=16.0.0"
141 | }
142 | },
143 | "node_modules/@ionic/utils-object": {
144 | "version": "2.1.6",
145 | "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz",
146 | "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==",
147 | "dev": true,
148 | "dependencies": {
149 | "debug": "^4.0.0",
150 | "tslib": "^2.0.1"
151 | },
152 | "engines": {
153 | "node": ">=16.0.0"
154 | }
155 | },
156 | "node_modules/@ionic/utils-process": {
157 | "version": "2.1.12",
158 | "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz",
159 | "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==",
160 | "dev": true,
161 | "dependencies": {
162 | "@ionic/utils-object": "2.1.6",
163 | "@ionic/utils-terminal": "2.3.5",
164 | "debug": "^4.0.0",
165 | "signal-exit": "^3.0.3",
166 | "tree-kill": "^1.2.2",
167 | "tslib": "^2.0.1"
168 | },
169 | "engines": {
170 | "node": ">=16.0.0"
171 | }
172 | },
173 | "node_modules/@ionic/utils-stream": {
174 | "version": "3.1.5",
175 | "resolved": "https://registry.npmjs.org/@ionic/utils-stream/-/utils-stream-3.1.5.tgz",
176 | "integrity": "sha512-hkm46uHvEC05X/8PHgdJi4l4zv9VQDELZTM+Kz69odtO9zZYfnt8DkfXHJqJ+PxmtiE5mk/ehJWLnn/XAczTUw==",
177 | "dev": true,
178 | "dependencies": {
179 | "debug": "^4.0.0",
180 | "tslib": "^2.0.1"
181 | },
182 | "engines": {
183 | "node": ">=10.3.0"
184 | }
185 | },
186 | "node_modules/@ionic/utils-subprocess": {
187 | "version": "2.1.11",
188 | "resolved": "https://registry.npmjs.org/@ionic/utils-subprocess/-/utils-subprocess-2.1.11.tgz",
189 | "integrity": "sha512-6zCDixNmZCbMCy5np8klSxOZF85kuDyzZSTTQKQP90ZtYNCcPYmuFSzaqDwApJT4r5L3MY3JrqK1gLkc6xiUPw==",
190 | "dev": true,
191 | "dependencies": {
192 | "@ionic/utils-array": "2.1.5",
193 | "@ionic/utils-fs": "3.1.6",
194 | "@ionic/utils-process": "2.1.10",
195 | "@ionic/utils-stream": "3.1.5",
196 | "@ionic/utils-terminal": "2.3.3",
197 | "cross-spawn": "^7.0.3",
198 | "debug": "^4.0.0",
199 | "tslib": "^2.0.1"
200 | },
201 | "engines": {
202 | "node": ">=10.3.0"
203 | }
204 | },
205 | "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-fs": {
206 | "version": "3.1.6",
207 | "resolved": "https://registry.npmjs.org/@ionic/utils-fs/-/utils-fs-3.1.6.tgz",
208 | "integrity": "sha512-eikrNkK89CfGPmexjTfSWl4EYqsPSBh0Ka7by4F0PLc1hJZYtJxUZV3X4r5ecA8ikjicUmcbU7zJmAjmqutG/w==",
209 | "dev": true,
210 | "dependencies": {
211 | "@types/fs-extra": "^8.0.0",
212 | "debug": "^4.0.0",
213 | "fs-extra": "^9.0.0",
214 | "tslib": "^2.0.1"
215 | },
216 | "engines": {
217 | "node": ">=10.3.0"
218 | }
219 | },
220 | "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": {
221 | "version": "2.1.5",
222 | "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz",
223 | "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==",
224 | "dev": true,
225 | "dependencies": {
226 | "debug": "^4.0.0",
227 | "tslib": "^2.0.1"
228 | },
229 | "engines": {
230 | "node": ">=10.3.0"
231 | }
232 | },
233 | "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": {
234 | "version": "2.1.10",
235 | "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz",
236 | "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==",
237 | "dev": true,
238 | "dependencies": {
239 | "@ionic/utils-object": "2.1.5",
240 | "@ionic/utils-terminal": "2.3.3",
241 | "debug": "^4.0.0",
242 | "signal-exit": "^3.0.3",
243 | "tree-kill": "^1.2.2",
244 | "tslib": "^2.0.1"
245 | },
246 | "engines": {
247 | "node": ">=10.3.0"
248 | }
249 | },
250 | "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": {
251 | "version": "2.3.3",
252 | "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz",
253 | "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==",
254 | "dev": true,
255 | "dependencies": {
256 | "@types/slice-ansi": "^4.0.0",
257 | "debug": "^4.0.0",
258 | "signal-exit": "^3.0.3",
259 | "slice-ansi": "^4.0.0",
260 | "string-width": "^4.1.0",
261 | "strip-ansi": "^6.0.0",
262 | "tslib": "^2.0.1",
263 | "untildify": "^4.0.0",
264 | "wrap-ansi": "^7.0.0"
265 | },
266 | "engines": {
267 | "node": ">=10.3.0"
268 | }
269 | },
270 | "node_modules/@ionic/utils-terminal": {
271 | "version": "2.3.5",
272 | "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.5.tgz",
273 | "integrity": "sha512-3cKScz9Jx2/Pr9ijj1OzGlBDfcmx7OMVBt4+P1uRR0SSW4cm1/y3Mo4OY3lfkuaYifMNBW8Wz6lQHbs1bihr7A==",
274 | "dev": true,
275 | "dependencies": {
276 | "@types/slice-ansi": "^4.0.0",
277 | "debug": "^4.0.0",
278 | "signal-exit": "^3.0.3",
279 | "slice-ansi": "^4.0.0",
280 | "string-width": "^4.1.0",
281 | "strip-ansi": "^6.0.0",
282 | "tslib": "^2.0.1",
283 | "untildify": "^4.0.0",
284 | "wrap-ansi": "^7.0.0"
285 | },
286 | "engines": {
287 | "node": ">=16.0.0"
288 | }
289 | },
290 | "node_modules/@types/fs-extra": {
291 | "version": "8.1.5",
292 | "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz",
293 | "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==",
294 | "dev": true,
295 | "dependencies": {
296 | "@types/node": "*"
297 | }
298 | },
299 | "node_modules/@types/node": {
300 | "version": "20.14.10",
301 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz",
302 | "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==",
303 | "dev": true,
304 | "dependencies": {
305 | "undici-types": "~5.26.4"
306 | }
307 | },
308 | "node_modules/@types/slice-ansi": {
309 | "version": "4.0.0",
310 | "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz",
311 | "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==",
312 | "dev": true
313 | },
314 | "node_modules/@xmldom/xmldom": {
315 | "version": "0.8.10",
316 | "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz",
317 | "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==",
318 | "dev": true,
319 | "engines": {
320 | "node": ">=10.0.0"
321 | }
322 | },
323 | "node_modules/ansi-regex": {
324 | "version": "5.0.1",
325 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
326 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
327 | "dev": true,
328 | "engines": {
329 | "node": ">=8"
330 | }
331 | },
332 | "node_modules/ansi-styles": {
333 | "version": "4.3.0",
334 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
335 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
336 | "dev": true,
337 | "dependencies": {
338 | "color-convert": "^2.0.1"
339 | },
340 | "engines": {
341 | "node": ">=8"
342 | },
343 | "funding": {
344 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
345 | }
346 | },
347 | "node_modules/astral-regex": {
348 | "version": "2.0.0",
349 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
350 | "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
351 | "dev": true,
352 | "engines": {
353 | "node": ">=8"
354 | }
355 | },
356 | "node_modules/at-least-node": {
357 | "version": "1.0.0",
358 | "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
359 | "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
360 | "dev": true,
361 | "engines": {
362 | "node": ">= 4.0.0"
363 | }
364 | },
365 | "node_modules/balanced-match": {
366 | "version": "1.0.2",
367 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
368 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
369 | "dev": true
370 | },
371 | "node_modules/base64-js": {
372 | "version": "1.5.1",
373 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
374 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
375 | "dev": true,
376 | "funding": [
377 | {
378 | "type": "github",
379 | "url": "https://github.com/sponsors/feross"
380 | },
381 | {
382 | "type": "patreon",
383 | "url": "https://www.patreon.com/feross"
384 | },
385 | {
386 | "type": "consulting",
387 | "url": "https://feross.org/support"
388 | }
389 | ]
390 | },
391 | "node_modules/big-integer": {
392 | "version": "1.6.52",
393 | "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz",
394 | "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==",
395 | "dev": true,
396 | "engines": {
397 | "node": ">=0.6"
398 | }
399 | },
400 | "node_modules/bplist-parser": {
401 | "version": "0.3.2",
402 | "resolved": "https://registry.npmjs.org/bplist-parser/-/bplist-parser-0.3.2.tgz",
403 | "integrity": "sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==",
404 | "dev": true,
405 | "dependencies": {
406 | "big-integer": "1.6.x"
407 | },
408 | "engines": {
409 | "node": ">= 5.10.0"
410 | }
411 | },
412 | "node_modules/brace-expansion": {
413 | "version": "2.0.1",
414 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
415 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
416 | "dev": true,
417 | "dependencies": {
418 | "balanced-match": "^1.0.0"
419 | }
420 | },
421 | "node_modules/buffer-crc32": {
422 | "version": "0.2.13",
423 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
424 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==",
425 | "dev": true,
426 | "engines": {
427 | "node": "*"
428 | }
429 | },
430 | "node_modules/capacitor-plugin-incoming-call": {
431 | "resolved": "..",
432 | "link": true
433 | },
434 | "node_modules/chownr": {
435 | "version": "2.0.0",
436 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
437 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
438 | "dev": true,
439 | "engines": {
440 | "node": ">=10"
441 | }
442 | },
443 | "node_modules/color-convert": {
444 | "version": "2.0.1",
445 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
446 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
447 | "dev": true,
448 | "dependencies": {
449 | "color-name": "~1.1.4"
450 | },
451 | "engines": {
452 | "node": ">=7.0.0"
453 | }
454 | },
455 | "node_modules/color-name": {
456 | "version": "1.1.4",
457 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
458 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
459 | "dev": true
460 | },
461 | "node_modules/commander": {
462 | "version": "9.5.0",
463 | "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
464 | "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
465 | "dev": true,
466 | "engines": {
467 | "node": "^12.20.0 || >=14"
468 | }
469 | },
470 | "node_modules/cross-spawn": {
471 | "version": "7.0.3",
472 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
473 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
474 | "dev": true,
475 | "dependencies": {
476 | "path-key": "^3.1.0",
477 | "shebang-command": "^2.0.0",
478 | "which": "^2.0.1"
479 | },
480 | "engines": {
481 | "node": ">= 8"
482 | }
483 | },
484 | "node_modules/debug": {
485 | "version": "4.3.5",
486 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
487 | "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
488 | "dev": true,
489 | "dependencies": {
490 | "ms": "2.1.2"
491 | },
492 | "engines": {
493 | "node": ">=6.0"
494 | },
495 | "peerDependenciesMeta": {
496 | "supports-color": {
497 | "optional": true
498 | }
499 | }
500 | },
501 | "node_modules/define-lazy-prop": {
502 | "version": "2.0.0",
503 | "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz",
504 | "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==",
505 | "dev": true,
506 | "engines": {
507 | "node": ">=8"
508 | }
509 | },
510 | "node_modules/elementtree": {
511 | "version": "0.1.7",
512 | "resolved": "https://registry.npmjs.org/elementtree/-/elementtree-0.1.7.tgz",
513 | "integrity": "sha512-wkgGT6kugeQk/P6VZ/f4T+4HB41BVgNBq5CDIZVbQ02nvTVqAiVTbskxxu3eA/X96lMlfYOwnLQpN2v5E1zDEg==",
514 | "dev": true,
515 | "dependencies": {
516 | "sax": "1.1.4"
517 | },
518 | "engines": {
519 | "node": ">= 0.4.0"
520 | }
521 | },
522 | "node_modules/emoji-regex": {
523 | "version": "8.0.0",
524 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
525 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
526 | "dev": true
527 | },
528 | "node_modules/env-paths": {
529 | "version": "2.2.1",
530 | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
531 | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
532 | "dev": true,
533 | "engines": {
534 | "node": ">=6"
535 | }
536 | },
537 | "node_modules/fd-slicer": {
538 | "version": "1.1.0",
539 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
540 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==",
541 | "dev": true,
542 | "dependencies": {
543 | "pend": "~1.2.0"
544 | }
545 | },
546 | "node_modules/fs-extra": {
547 | "version": "9.1.0",
548 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
549 | "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
550 | "dev": true,
551 | "dependencies": {
552 | "at-least-node": "^1.0.0",
553 | "graceful-fs": "^4.2.0",
554 | "jsonfile": "^6.0.1",
555 | "universalify": "^2.0.0"
556 | },
557 | "engines": {
558 | "node": ">=10"
559 | }
560 | },
561 | "node_modules/fs-minipass": {
562 | "version": "2.1.0",
563 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
564 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
565 | "dev": true,
566 | "dependencies": {
567 | "minipass": "^3.0.0"
568 | },
569 | "engines": {
570 | "node": ">= 8"
571 | }
572 | },
573 | "node_modules/fs-minipass/node_modules/minipass": {
574 | "version": "3.3.6",
575 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
576 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
577 | "dev": true,
578 | "dependencies": {
579 | "yallist": "^4.0.0"
580 | },
581 | "engines": {
582 | "node": ">=8"
583 | }
584 | },
585 | "node_modules/fs.realpath": {
586 | "version": "1.0.0",
587 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
588 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
589 | "dev": true
590 | },
591 | "node_modules/glob": {
592 | "version": "9.3.5",
593 | "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz",
594 | "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==",
595 | "dev": true,
596 | "dependencies": {
597 | "fs.realpath": "^1.0.0",
598 | "minimatch": "^8.0.2",
599 | "minipass": "^4.2.4",
600 | "path-scurry": "^1.6.1"
601 | },
602 | "engines": {
603 | "node": ">=16 || 14 >=14.17"
604 | },
605 | "funding": {
606 | "url": "https://github.com/sponsors/isaacs"
607 | }
608 | },
609 | "node_modules/graceful-fs": {
610 | "version": "4.2.11",
611 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
612 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
613 | "dev": true
614 | },
615 | "node_modules/inherits": {
616 | "version": "2.0.4",
617 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
618 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
619 | "dev": true
620 | },
621 | "node_modules/ini": {
622 | "version": "4.1.3",
623 | "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz",
624 | "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==",
625 | "dev": true,
626 | "engines": {
627 | "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
628 | }
629 | },
630 | "node_modules/is-docker": {
631 | "version": "2.2.1",
632 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz",
633 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==",
634 | "dev": true,
635 | "bin": {
636 | "is-docker": "cli.js"
637 | },
638 | "engines": {
639 | "node": ">=8"
640 | },
641 | "funding": {
642 | "url": "https://github.com/sponsors/sindresorhus"
643 | }
644 | },
645 | "node_modules/is-fullwidth-code-point": {
646 | "version": "3.0.0",
647 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
648 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
649 | "dev": true,
650 | "engines": {
651 | "node": ">=8"
652 | }
653 | },
654 | "node_modules/is-wsl": {
655 | "version": "2.2.0",
656 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
657 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
658 | "dev": true,
659 | "dependencies": {
660 | "is-docker": "^2.0.0"
661 | },
662 | "engines": {
663 | "node": ">=8"
664 | }
665 | },
666 | "node_modules/isexe": {
667 | "version": "2.0.0",
668 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
669 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
670 | "dev": true
671 | },
672 | "node_modules/jsonfile": {
673 | "version": "6.1.0",
674 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
675 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
676 | "dev": true,
677 | "dependencies": {
678 | "universalify": "^2.0.0"
679 | },
680 | "optionalDependencies": {
681 | "graceful-fs": "^4.1.6"
682 | }
683 | },
684 | "node_modules/kleur": {
685 | "version": "4.1.5",
686 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
687 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
688 | "dev": true,
689 | "engines": {
690 | "node": ">=6"
691 | }
692 | },
693 | "node_modules/lru-cache": {
694 | "version": "10.4.3",
695 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz",
696 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==",
697 | "dev": true
698 | },
699 | "node_modules/minimatch": {
700 | "version": "8.0.4",
701 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz",
702 | "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==",
703 | "dev": true,
704 | "dependencies": {
705 | "brace-expansion": "^2.0.1"
706 | },
707 | "engines": {
708 | "node": ">=16 || 14 >=14.17"
709 | },
710 | "funding": {
711 | "url": "https://github.com/sponsors/isaacs"
712 | }
713 | },
714 | "node_modules/minipass": {
715 | "version": "4.2.8",
716 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz",
717 | "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==",
718 | "dev": true,
719 | "engines": {
720 | "node": ">=8"
721 | }
722 | },
723 | "node_modules/minizlib": {
724 | "version": "2.1.2",
725 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
726 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
727 | "dev": true,
728 | "dependencies": {
729 | "minipass": "^3.0.0",
730 | "yallist": "^4.0.0"
731 | },
732 | "engines": {
733 | "node": ">= 8"
734 | }
735 | },
736 | "node_modules/minizlib/node_modules/minipass": {
737 | "version": "3.3.6",
738 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
739 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
740 | "dev": true,
741 | "dependencies": {
742 | "yallist": "^4.0.0"
743 | },
744 | "engines": {
745 | "node": ">=8"
746 | }
747 | },
748 | "node_modules/mkdirp": {
749 | "version": "1.0.4",
750 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
751 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
752 | "dev": true,
753 | "bin": {
754 | "mkdirp": "bin/cmd.js"
755 | },
756 | "engines": {
757 | "node": ">=10"
758 | }
759 | },
760 | "node_modules/ms": {
761 | "version": "2.1.2",
762 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
763 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
764 | "dev": true
765 | },
766 | "node_modules/native-run": {
767 | "version": "2.0.1",
768 | "resolved": "https://registry.npmjs.org/native-run/-/native-run-2.0.1.tgz",
769 | "integrity": "sha512-XfG1FBZLM50J10xH9361whJRC9SHZ0Bub4iNRhhI61C8Jv0e1ud19muex6sNKB51ibQNUJNuYn25MuYET/rE6w==",
770 | "dev": true,
771 | "dependencies": {
772 | "@ionic/utils-fs": "^3.1.7",
773 | "@ionic/utils-terminal": "^2.3.4",
774 | "bplist-parser": "^0.3.2",
775 | "debug": "^4.3.4",
776 | "elementtree": "^0.1.7",
777 | "ini": "^4.1.1",
778 | "plist": "^3.1.0",
779 | "split2": "^4.2.0",
780 | "through2": "^4.0.2",
781 | "tslib": "^2.6.2",
782 | "yauzl": "^2.10.0"
783 | },
784 | "bin": {
785 | "native-run": "bin/native-run"
786 | },
787 | "engines": {
788 | "node": ">=16.0.0"
789 | }
790 | },
791 | "node_modules/open": {
792 | "version": "8.4.2",
793 | "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz",
794 | "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==",
795 | "dev": true,
796 | "dependencies": {
797 | "define-lazy-prop": "^2.0.0",
798 | "is-docker": "^2.1.1",
799 | "is-wsl": "^2.2.0"
800 | },
801 | "engines": {
802 | "node": ">=12"
803 | },
804 | "funding": {
805 | "url": "https://github.com/sponsors/sindresorhus"
806 | }
807 | },
808 | "node_modules/path-key": {
809 | "version": "3.1.1",
810 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
811 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
812 | "dev": true,
813 | "engines": {
814 | "node": ">=8"
815 | }
816 | },
817 | "node_modules/path-scurry": {
818 | "version": "1.11.1",
819 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
820 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
821 | "dev": true,
822 | "dependencies": {
823 | "lru-cache": "^10.2.0",
824 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
825 | },
826 | "engines": {
827 | "node": ">=16 || 14 >=14.18"
828 | },
829 | "funding": {
830 | "url": "https://github.com/sponsors/isaacs"
831 | }
832 | },
833 | "node_modules/path-scurry/node_modules/minipass": {
834 | "version": "7.1.2",
835 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
836 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
837 | "dev": true,
838 | "engines": {
839 | "node": ">=16 || 14 >=14.17"
840 | }
841 | },
842 | "node_modules/pend": {
843 | "version": "1.2.0",
844 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
845 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==",
846 | "dev": true
847 | },
848 | "node_modules/plist": {
849 | "version": "3.1.0",
850 | "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz",
851 | "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==",
852 | "dev": true,
853 | "dependencies": {
854 | "@xmldom/xmldom": "^0.8.8",
855 | "base64-js": "^1.5.1",
856 | "xmlbuilder": "^15.1.1"
857 | },
858 | "engines": {
859 | "node": ">=10.4.0"
860 | }
861 | },
862 | "node_modules/prompts": {
863 | "version": "2.4.2",
864 | "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
865 | "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
866 | "dev": true,
867 | "dependencies": {
868 | "kleur": "^3.0.3",
869 | "sisteransi": "^1.0.5"
870 | },
871 | "engines": {
872 | "node": ">= 6"
873 | }
874 | },
875 | "node_modules/prompts/node_modules/kleur": {
876 | "version": "3.0.3",
877 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
878 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
879 | "dev": true,
880 | "engines": {
881 | "node": ">=6"
882 | }
883 | },
884 | "node_modules/readable-stream": {
885 | "version": "3.6.2",
886 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
887 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
888 | "dev": true,
889 | "dependencies": {
890 | "inherits": "^2.0.3",
891 | "string_decoder": "^1.1.1",
892 | "util-deprecate": "^1.0.1"
893 | },
894 | "engines": {
895 | "node": ">= 6"
896 | }
897 | },
898 | "node_modules/rimraf": {
899 | "version": "4.4.1",
900 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz",
901 | "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==",
902 | "dev": true,
903 | "dependencies": {
904 | "glob": "^9.2.0"
905 | },
906 | "bin": {
907 | "rimraf": "dist/cjs/src/bin.js"
908 | },
909 | "engines": {
910 | "node": ">=14"
911 | },
912 | "funding": {
913 | "url": "https://github.com/sponsors/isaacs"
914 | }
915 | },
916 | "node_modules/safe-buffer": {
917 | "version": "5.2.1",
918 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
919 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
920 | "dev": true,
921 | "funding": [
922 | {
923 | "type": "github",
924 | "url": "https://github.com/sponsors/feross"
925 | },
926 | {
927 | "type": "patreon",
928 | "url": "https://www.patreon.com/feross"
929 | },
930 | {
931 | "type": "consulting",
932 | "url": "https://feross.org/support"
933 | }
934 | ]
935 | },
936 | "node_modules/sax": {
937 | "version": "1.1.4",
938 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
939 | "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==",
940 | "dev": true
941 | },
942 | "node_modules/semver": {
943 | "version": "7.6.2",
944 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
945 | "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
946 | "dev": true,
947 | "bin": {
948 | "semver": "bin/semver.js"
949 | },
950 | "engines": {
951 | "node": ">=10"
952 | }
953 | },
954 | "node_modules/shebang-command": {
955 | "version": "2.0.0",
956 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
957 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
958 | "dev": true,
959 | "dependencies": {
960 | "shebang-regex": "^3.0.0"
961 | },
962 | "engines": {
963 | "node": ">=8"
964 | }
965 | },
966 | "node_modules/shebang-regex": {
967 | "version": "3.0.0",
968 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
969 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
970 | "dev": true,
971 | "engines": {
972 | "node": ">=8"
973 | }
974 | },
975 | "node_modules/signal-exit": {
976 | "version": "3.0.7",
977 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
978 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
979 | "dev": true
980 | },
981 | "node_modules/sisteransi": {
982 | "version": "1.0.5",
983 | "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
984 | "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
985 | "dev": true
986 | },
987 | "node_modules/slice-ansi": {
988 | "version": "4.0.0",
989 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
990 | "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
991 | "dev": true,
992 | "dependencies": {
993 | "ansi-styles": "^4.0.0",
994 | "astral-regex": "^2.0.0",
995 | "is-fullwidth-code-point": "^3.0.0"
996 | },
997 | "engines": {
998 | "node": ">=10"
999 | },
1000 | "funding": {
1001 | "url": "https://github.com/chalk/slice-ansi?sponsor=1"
1002 | }
1003 | },
1004 | "node_modules/split2": {
1005 | "version": "4.2.0",
1006 | "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
1007 | "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
1008 | "dev": true,
1009 | "engines": {
1010 | "node": ">= 10.x"
1011 | }
1012 | },
1013 | "node_modules/string_decoder": {
1014 | "version": "1.3.0",
1015 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1016 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1017 | "dev": true,
1018 | "dependencies": {
1019 | "safe-buffer": "~5.2.0"
1020 | }
1021 | },
1022 | "node_modules/string-width": {
1023 | "version": "4.2.3",
1024 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1025 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1026 | "dev": true,
1027 | "dependencies": {
1028 | "emoji-regex": "^8.0.0",
1029 | "is-fullwidth-code-point": "^3.0.0",
1030 | "strip-ansi": "^6.0.1"
1031 | },
1032 | "engines": {
1033 | "node": ">=8"
1034 | }
1035 | },
1036 | "node_modules/strip-ansi": {
1037 | "version": "6.0.1",
1038 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1039 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1040 | "dev": true,
1041 | "dependencies": {
1042 | "ansi-regex": "^5.0.1"
1043 | },
1044 | "engines": {
1045 | "node": ">=8"
1046 | }
1047 | },
1048 | "node_modules/tar": {
1049 | "version": "6.2.1",
1050 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz",
1051 | "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==",
1052 | "dev": true,
1053 | "dependencies": {
1054 | "chownr": "^2.0.0",
1055 | "fs-minipass": "^2.0.0",
1056 | "minipass": "^5.0.0",
1057 | "minizlib": "^2.1.1",
1058 | "mkdirp": "^1.0.3",
1059 | "yallist": "^4.0.0"
1060 | },
1061 | "engines": {
1062 | "node": ">=10"
1063 | }
1064 | },
1065 | "node_modules/tar/node_modules/minipass": {
1066 | "version": "5.0.0",
1067 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
1068 | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
1069 | "dev": true,
1070 | "engines": {
1071 | "node": ">=8"
1072 | }
1073 | },
1074 | "node_modules/through2": {
1075 | "version": "4.0.2",
1076 | "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
1077 | "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
1078 | "dev": true,
1079 | "dependencies": {
1080 | "readable-stream": "3"
1081 | }
1082 | },
1083 | "node_modules/tree-kill": {
1084 | "version": "1.2.2",
1085 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
1086 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
1087 | "dev": true,
1088 | "bin": {
1089 | "tree-kill": "cli.js"
1090 | }
1091 | },
1092 | "node_modules/tslib": {
1093 | "version": "2.6.3",
1094 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
1095 | "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ=="
1096 | },
1097 | "node_modules/undici-types": {
1098 | "version": "5.26.5",
1099 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
1100 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
1101 | "dev": true
1102 | },
1103 | "node_modules/universalify": {
1104 | "version": "2.0.1",
1105 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
1106 | "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
1107 | "dev": true,
1108 | "engines": {
1109 | "node": ">= 10.0.0"
1110 | }
1111 | },
1112 | "node_modules/untildify": {
1113 | "version": "4.0.0",
1114 | "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz",
1115 | "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==",
1116 | "dev": true,
1117 | "engines": {
1118 | "node": ">=8"
1119 | }
1120 | },
1121 | "node_modules/util-deprecate": {
1122 | "version": "1.0.2",
1123 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1124 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
1125 | "dev": true
1126 | },
1127 | "node_modules/which": {
1128 | "version": "2.0.2",
1129 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1130 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1131 | "dev": true,
1132 | "dependencies": {
1133 | "isexe": "^2.0.0"
1134 | },
1135 | "bin": {
1136 | "node-which": "bin/node-which"
1137 | },
1138 | "engines": {
1139 | "node": ">= 8"
1140 | }
1141 | },
1142 | "node_modules/wrap-ansi": {
1143 | "version": "7.0.0",
1144 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
1145 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
1146 | "dev": true,
1147 | "dependencies": {
1148 | "ansi-styles": "^4.0.0",
1149 | "string-width": "^4.1.0",
1150 | "strip-ansi": "^6.0.0"
1151 | },
1152 | "engines": {
1153 | "node": ">=10"
1154 | },
1155 | "funding": {
1156 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
1157 | }
1158 | },
1159 | "node_modules/xml2js": {
1160 | "version": "0.5.0",
1161 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
1162 | "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
1163 | "dev": true,
1164 | "dependencies": {
1165 | "sax": ">=0.6.0",
1166 | "xmlbuilder": "~11.0.0"
1167 | },
1168 | "engines": {
1169 | "node": ">=4.0.0"
1170 | }
1171 | },
1172 | "node_modules/xml2js/node_modules/xmlbuilder": {
1173 | "version": "11.0.1",
1174 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
1175 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
1176 | "dev": true,
1177 | "engines": {
1178 | "node": ">=4.0"
1179 | }
1180 | },
1181 | "node_modules/xmlbuilder": {
1182 | "version": "15.1.1",
1183 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz",
1184 | "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==",
1185 | "dev": true,
1186 | "engines": {
1187 | "node": ">=8.0"
1188 | }
1189 | },
1190 | "node_modules/yallist": {
1191 | "version": "4.0.0",
1192 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1193 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
1194 | "dev": true
1195 | },
1196 | "node_modules/yauzl": {
1197 | "version": "2.10.0",
1198 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
1199 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==",
1200 | "dev": true,
1201 | "dependencies": {
1202 | "buffer-crc32": "~0.2.3",
1203 | "fd-slicer": "~1.1.0"
1204 | }
1205 | }
1206 | }
1207 | }
1208 |
--------------------------------------------------------------------------------