diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 7c286132..00000000 --- a/.editorconfig +++ /dev/null @@ -1,3 +0,0 @@ -# Windows files -[*.bat] -end_of_line = crlf diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 9cadbfed..00000000 --- a/.eslintignore +++ /dev/null @@ -1,46 +0,0 @@ - -# OSX -# -.DS_Store - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml - -# BUCK -buck-out/ -\.buckd/ -*.keystore - \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js index ec673043..45cf2c1e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,27 +1,5 @@ module.exports = { - env: { - node: true, - jest: true, - }, - extends: 'eslint:recommended', - globals: { - Atomics: 'readonly', - SharedArrayBuffer: 'readonly', - }, - parser: '@babel/eslint-parser', - parserOptions: { - requireConfigFile: false, - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 2018, - sourceType: 'module', - }, - plugins: ['react'], - ignorePatterns: ['!.*', 'dist', 'node_modules'], - rules: { - 'react/jsx-uses-react': 2, - 'react/jsx-uses-vars': 2, - 'react/react-in-jsx-scope': 2, - }, + root: true, + extends: ['universe/native', 'universe/web'], + ignorePatterns: ['build'], }; diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..617c5bf4 --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,99 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL Advanced" + +on: + push: + branches: [ "master", "develop-v13" ] + pull_request: + branches: [ "master", "develop-v13" ] + schedule: + - cron: '24 7 * * 5' + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + # Runner size impacts CodeQL analysis time. To learn more, please see: + # - https://gh.io/recommended-hardware-resources-for-running-codeql + # - https://gh.io/supported-runners-and-hardware-resources + # - https://gh.io/using-larger-runners (GitHub.com only) + # Consider using larger runners or machines with greater resources for possible analysis time improvements. + runs-on: ubuntu-latest + permissions: + # required for all workflows + security-events: write + + # required to fetch internal or private CodeQL packs + packages: read + + # only required for workflows in private repositories + actions: read + contents: read + + strategy: + fail-fast: false + matrix: + include: + - language: javascript-typescript + build-mode: none + # CodeQL supports the following values keywords for 'language': 'actions', 'c-cpp', 'csharp', 'go', 'java-kotlin', 'javascript-typescript', 'python', 'ruby', 'rust', 'swift' + # Use `c-cpp` to analyze code written in C, C++ or both + # Use 'java-kotlin' to analyze code written in Java, Kotlin or both + # Use 'javascript-typescript' to analyze code written in JavaScript, TypeScript or both + # To learn more about changing the languages that are analyzed or customizing the build mode for your analysis, + # see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/customizing-your-advanced-setup-for-code-scanning. + # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how + # your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Add any setup steps before running the `github/codeql-action/init` action. + # This includes steps like installing compilers or runtimes (`actions/setup-node` + # or others). This is typically only required for manual builds. + # - name: Setup runtime (example) + # uses: actions/setup-example@v1 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v4 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + + # For more details on CodeQL's query packs, refer to: https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs + # queries: security-extended,security-and-quality + + # If the analyze step fails for one of the languages you are analyzing with + # "We were unable to automatically build your code", modify the matrix above + # to set the build mode to "manual" for that language. Then modify this step + # to build your code. + # ℹ️ Command-line programs to run using the OS shell. + # πŸ“š See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun + - name: Run manual build steps + if: matrix.build-mode == 'manual' + shell: bash + run: | + echo 'If you are using a "manual" build mode for one or more of the' \ + 'languages you are analyzing, replace this with the commands to build' \ + 'your code, for example:' + echo ' make bootstrap' + echo ' make release' + exit 1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v4 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 7034da81..52caf36c 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -1,11 +1,14 @@ -name: Pull Request into Develop +name: Test and Coverage Check +permissions: + contents: read + pull-requests: write on: - # Triggers the workflow on a pull request pointed at develop. pull_request: branches: - - "develop" - + - "master" + - "develop-v13" + # Allows you to run this workflow manually from the Actions tab. workflow_dispatch: @@ -15,19 +18,112 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Use Node.js 19 - uses: actions/setup-node@v3 + - name: Use Node.js 22 + uses: actions/setup-node@v4 with: - node-version: 19 + node-version: 22 cache: "npm" - name: Install Node modules run: npm ci + env: + NPM_CONFIG_REGISTRY: https://registry.npmjs.org/ - name: Linting run: npm run lint - - name: Unit & Integration tests - run: npm test + - name: Unit & Integration tests with coverage + run: npm test -- --coverage --no-watch --passWithNoTests + env: + NPM_CONFIG_REGISTRY: https://registry.npmjs.org/ + + - name: Upload coverage artifacts + uses: actions/upload-artifact@v4 + if: always() + with: + name: coverage-report + path: coverage/ + retention-days: 30 + + - name: Generate coverage summary + if: always() + run: | + echo "## Test Coverage Report" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + if [ -f coverage/coverage-summary.json ]; then + echo "\`\`\`json" >> $GITHUB_STEP_SUMMARY + cat coverage/coverage-summary.json >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + else + echo "No coverage summary available" >> $GITHUB_STEP_SUMMARY + fi + + - name: Comment coverage on PR + uses: romeovs/lcov-reporter-action@v0.3.1 + if: github.event_name == 'pull_request' + with: + lcov-file: ./coverage/lcov.info + github-token: ${{ secrets.GITHUB_TOKEN }} + delete-old-comments: true + + build-ios-example: + runs-on: macos-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Use Node.js 22 + uses: actions/setup-node@v4 + with: + node-version: 22 + cache: "npm" + + - name: Install root dependencies + run: npm install + env: + NPM_CONFIG_REGISTRY: https://registry.npmjs.org/ + + - name: Install example dependencies + working-directory: example + run: npm install + env: + NPM_CONFIG_REGISTRY: https://registry.npmjs.org/ + + - name: Cache CocoaPods + uses: actions/cache@v4 + with: + path: | + ~/Library/Caches/CocoaPods + example/ios/Pods + key: ${{ runner.os }}-pods-${{ hashFiles('example/ios/Podfile.lock') }} + restore-keys: | + ${{ runner.os }}-pods- + + - name: Generate iOS project with Expo + working-directory: example + run: npx expo prebuild --platform ios --clean + env: + NPM_CONFIG_REGISTRY: https://registry.npmjs.org/ + + - name: Build iOS app for Simulator + working-directory: example + run: | + xcodebuild -workspace ios/reactnativeplaidlinksdkexample.xcworkspace \ + -scheme reactnativeplaidlinksdkexample \ + -sdk iphonesimulator \ + -configuration Release \ + -destination 'platform=iOS Simulator,name=iPhone 16,OS=latest' \ + clean build \ + CODE_SIGNING_ALLOWED=NO \ + | tee xcodebuild.log + + - name: Upload build logs + uses: actions/upload-artifact@v4 + if: failure() + with: + name: ios-build-logs + path: example/xcodebuild.log + retention-days: 7 diff --git a/.gitignore b/.gitignore index 13c08aef..3af257a8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,10 @@ - # OSX # .DS_Store -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log +# VSCode +.vscode/ +jsconfig.json # Xcode # @@ -28,31 +25,38 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace - -# Android/IntelliJ +# Android/IJ # -build/ -.idea +.classpath +.cxx .gradle +.idea +.project +.settings local.properties -*.iml -*.hprof -android/build/ +android.iml +android/app/libs +android/keystores/debug.keystore -# BUCK -buck-out/ -\.buckd/ -*.keystore +# Cocoapods +# +example/ios/Pods -# React Native ts -dist/ +# Ruby +example/vendor/ -.vscode -example/android/build/ -example/.yalc -example/yalc.lock +# node.js +# +node_modules/ +npm-debug.log +yarn-debug.log +yarn-error.log + +# Testing +# +coverage/ -exampleReactNative76/android/build/ -exampleReactNative76/.yalc -exampleReactNative76/yalc.lock \ No newline at end of file +# Expo +.expo/* +dist/ diff --git a/.node-version b/.node-version deleted file mode 100644 index 25bf17fc..00000000 --- a/.node-version +++ /dev/null @@ -1 +0,0 @@ -18 \ No newline at end of file diff --git a/.npmignore b/.npmignore index 86e7d696..937d158a 100644 --- a/.npmignore +++ b/.npmignore @@ -1,53 +1,14 @@ -# Example app -example/ +# Exclude all top-level hidden directories by convention +/.*/ -# .gitignore is ignored when .npmignore is provided +# Exclude tarballs generated by `npm pack` +/*.tgz -# OSX -# -.DS_Store +__mocks__ +__tests__ -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# This points at internal endpoints which shouldn't be exposed to the public repo. -package-lock.json - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -project.xcworkspace - - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -android/build/ - - -# BUCK -buck-out/ -\.buckd/ -*.keystore +/babel.config.js +/android/src/androidTest/ +/android/src/test/ +/android/build/ +/example/ diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 07e6e472..00000000 --- a/.prettierignore +++ /dev/null @@ -1 +0,0 @@ -/node_modules diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 43e58819..00000000 --- a/.prettierrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "semi": true, - "singleQuote": true, - "trailingComma": "all", - "bracketSpacing": true, - "bracketSameLine": false -} diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index c5649458..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,3054 +0,0 @@ -# RELEASES - -## LinkKit V12.8.0 β€” 2026-02-18 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Adds missing LAYER_AUTOFILL_NOT_AVAILABLE event name on iOS -- Adds support to submit layer params on iOS & Android - -### Android - -Android SDK [5.5.1](https://github.com/plaid/plaid-link-android/releases/tag/v5.5.1) - -### Additions - -- None - -### Changes - -- Layer update. -- Add missing proguard consumer rule. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.3](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.3) - -### Changes - -- Layer updates. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.7.0 β€” 2025-11-04 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Add `onLoad` to `LinkTokenConfiguration`, fired once when Link is fully loaded and ready to present. Use it to manage your own loading UI or defer presentation until ready. - -### Android - -Android SDK [5.5.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.5.0) - -### Additions - -- None - -### Changes - -- Made LinkErrorCode.errorType public. -- Fixed bug where layer "auto" customization for light/dark mode was always dark, regardless of system setting. -- Added onLoad callback to Plaid.create for detecting when Link is ready to present. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.2](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.2) - -### Changes - -- Resolved `syncFinanceKit` crash when running on iPad on compatibility mode. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.6.1 β€” 2025-10-22 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolved an issue where the `selection` value was missing in `LinkEvent.EventMetadata`. -- Improved internal debugging and logging to help diagnose customer-reported issues more effectively. -- Upgrade to Android SDK [5.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.4.0) -- Upgrade to iOS SDK [6.4.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.1) - -### Android - -Android SDK [5.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.4.0) - -### Additions - -- None - -### Changes - -- Resolved an issue where the `selection` value was missing in `LinkEvent.EventMetadata`. -- Improved internal debugging and logging to help diagnose customer-reported issues more effectively. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.2](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.2) - -### Changes - -- Resolved `syncFinanceKit` crash when running on iPad on compatibility mode. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.6.0 β€” 2025-10-06 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolved an issue where the `selection` value was missing in `LinkEvent.EventMetadata`. -- Improved internal debugging and logging to help diagnose customer-reported issues more effectively. -- Upgrade to Android SDK [5.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.4.0) -- Upgrade to iOS SDK [6.4.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.1) - -### Android - -Android SDK [5.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.4.0) - -### Additions - -- None - -### Changes - -- Resolved an issue where the `selection` value was missing in `LinkEvent.EventMetadata`. -- Improved internal debugging and logging to help diagnose customer-reported issues more effectively. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.1) - -### Changes - -- Resolved an issue where the `selection` value was missing in `LinkEvent.EventMetadata`. -- Improved internal debugging and logging to help diagnose customer-reported issues more effectively. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.5.3 β€” 2025-09-16 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolve issue [816](https://github.com/plaid/react-native-plaid-link-sdk/issues/816) with Android SDK upgrade to v5.3.4. - -### Android - -Android SDK [5.3.4](https://github.com/plaid/plaid-link-android/releases/tag/v5.3.4) - -### Additions - -- None - -### Changes - -- Fix retrofit reinitialization bug in edge cases. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.0) - -### Changes - -- Add issueDescription and issueDetectedAt to EventMetadata. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.5.2 β€” 2025-09-10 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolve issue [810](https://github.com/plaid/react-native-plaid-link-sdk/issues/810) Support for react native 0.81+ -- Adds `metadataJson` key to event data to allow for all keys to be camelCase. -- Updates Android SDK - - -### Android - -Android SDK [5.3.3](https://github.com/plaid/plaid-link-android/releases/tag/v5.3.3) - -### Additions - -- None - -### Changes - -- Upgrade com.google.code.gson:gson to 2.9.1. -- Upgrade com.squareup.okhttp3:logging-interceptor to 4.9.2. - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.0) - -### Changes - -- Add issueDescription and issueDetectedAt to EventMetadata. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.5.1 β€” 2025-09-04 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolve issue [803](https://github.com/plaid/react-native-plaid-link-sdk/issues/803) Support for react native 0.81+ - - -### Android - -Android SDK [5.3.2](https://github.com/plaid/plaid-link-android/releases/tag/v5.3.2) - -### Additions - -- Upgrade com.google.protobuf:protobuf-kotlin-lite to 3.25.5 -- Ensure SDK screens resize for keyboard insets on Android 15+ - -### Changes - -- None - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.0) - -### Changes - -- Add issueDescription and issueDetectedAt to EventMetadata. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.5.0 β€” 2025-09-04 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Updates Android SDK to the latest version. -- Resolve issue [804](https://github.com/plaid/react-native-plaid-link-sdk/issues/804) bottom Navigation Bar Overlapping UI Elements - - -### Android - -Android SDK [5.3.2](https://github.com/plaid/plaid-link-android/releases/tag/v5.3.2) - -### Additions - -- Upgrade com.google.protobuf:protobuf-kotlin-lite to 3.25.5 -- Ensure SDK screens resize for keyboard insets on Android 15+ - -### Changes - -- None - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.0) - -### Changes - -- Add issueDescription and issueDetectedAt to EventMetadata. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.4.0 β€” 2025-08-06 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Updates Android and iOS SDKs to the latest versions. -- metadata_json, issueId, issueDescription, issueDetectedAt to LinkEventMetadata. -- Add dateOfBirth to SubmissionData. -- Update submit APIs to allow for date of birth. -- Add LAYER_AUTOFILL_NOT_AVAILABLE to LinkEventName. - -### Android - -Android SDK [5.3.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.3.0) - -### Additions - -- Add LAYER_AUTOFILL_NOT_AVAILABLE event. -- Add issueDescription and issueDetectedAt at event metadata fields. -- Update Layer submit API to support additional parameter dateOfBirth - -### Changes - -- None - -### Removals - -- None - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.4.0) - -### Changes - -- Add issueDescription and issueDetectedAt to EventMetadata. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.3.2 β€” 2025-07-30 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.2.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.2.0) - -### Additions - -- Add ISSUE_FOLLOWED, IDENTITY_MATCH_PASSED, and IDENTITY_MATCH_FAILED event names and issue_id event metadata field. - -### Changes - -- Improve destroy() API behavior in edge cases. - -### Removals - -- Reduce SDK size by 11.5% down from 5.0MB to 4.5MB. -- Remove the androidx.recyclerview:recyclerview, androidx.constraintlayout:constraintlayout, and io.coil-kt:coil dependencies. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.3.2](https://github.com/plaid/plaid-link-ios/releases/tag/6.3.2) - -### Changes - -- Resolve XCFramework signing issue. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.3.1 β€” 2025-07-28 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.2.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.2.0) - -### Additions - -- Add ISSUE_FOLLOWED, IDENTITY_MATCH_PASSED, and IDENTITY_MATCH_FAILED event names and issue_id event metadata field. - -### Changes - -- Improve destroy() API behavior in edge cases. - -### Removals - -- Reduce SDK size by 11.5% down from 5.0MB to 4.5MB. -- Remove the androidx.recyclerview:recyclerview, androidx.constraintlayout:constraintlayout, and io.coil-kt:coil dependencies. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.3.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.3.1) - -### Changes - -- Expose Finance Kit sync simulated behavior to Objective-C (React Native). -- Updated Layer submit API -- Added Layer event LAYER_AUTOFILL_NOT_AVAILABLE - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.3.0 β€” 2025-07-24 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.2.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.2.0) - -### Additions - -- Add ISSUE_FOLLOWED, IDENTITY_MATCH_PASSED, and IDENTITY_MATCH_FAILED event names and issue_id event metadata field. - -### Changes - -- Improve destroy() API behavior in edge cases. - -### Removals - -- Reduce SDK size by 11.5% down from 5.0MB to 4.5MB. -- Remove the androidx.recyclerview:recyclerview, androidx.constraintlayout:constraintlayout, and io.coil-kt:coil dependencies. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.3.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.3.0) - -### SwiftUI API Enhancements - -- Added `makePlaidLinkSheet()` to `Handler`: a convenience method that returns a `View` to present LinkKit using `.fullScreenCover` in SwiftUI applications. -- Added `plaidLink(isPresented:handler:)`: a SwiftUI view modifier to attach LinkKit to any `View`, such as a `Button`, using a pre-configured handler. -- Added `plaidLink(isPresented:token:onSuccess:onExit:onEvent:onLoad:errorView:)`: a flexible SwiftUI modifier for creating LinkKit sessions with just a link token and callbacksβ€”no `Handler` required. - -### Testing - -- Improved FinanceKit testing capabilities in Sandbox. - -### Event Tracking Improvements - -- Added event names: - - `IDENTITY_MATCH_PASSED` - - `IDENTITY_MATCH_FAILED` - - `ISSUE_FOLLOWED` - - `SELECT_ACCOUNT` - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.2.1 β€” 2025-06-21 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Changes - -- Resolve issue [782 PLKEnvironmentDevelopment not defined](https://github.com/plaid/react-native-plaid-link-sdk/issues/782). - -### Android - -Android SDK [5.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v5.1.1) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Add Flutter SDK version tracking. -- Fixed edge to edge layout overlap issue in Android 15+. - -### Removals - -- Reduced SDK size by 20%, from 6.2 MB down to 5.0 MB. -- Removed org.bouncycastle:bcpkix-jdk15to18 dependency. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.2.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.2.1) - -#### Changes - -- Add Flutter SDK version tracking. -- Reduced SDK size from 13.2MB to 8.9MB - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.2.0 β€” 2025-06-13 - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v5.1.1) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Add Flutter SDK version tracking. -- Fixed edge to edge layout overlap issue in Android 15+. - -### Removals - -- Reduced SDK size by 20%, from 6.2 MB down to 5.0 MB. -- Removed org.bouncycastle:bcpkix-jdk15to18 dependency. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.9.25+ (Kotlin integrations only) | - -### iOS - -iOS SDK [6.2.1](https://github.com/plaid/plaid-link-ios/releases/tag/6.2.1) - -#### Changes - -- Add Flutter SDK version tracking. -- Reduced SDK size from 13.2MB to 8.9MB - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.1.1 β€” 2025-04-03 - -### React Native - -- Adds `destroy()` method for Android. -- Remove `async` from open method. - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.1.0) - -#### Changes - -- Improved RememberMe experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.1.0 β€” 2025-03-10 - -### React Native - -- Updates iOS SDK to [6.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.1.0) -- Resolves [issue 754](https://github.com/plaid/react-native-plaid-link-sdk/issues/754) - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.1.0) - -#### Changes - -- Improved RememberMe experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.0.3 β€” 2025-02-04 - -### React Native - -- Updates iOS SDK to [6.0.4](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.4) - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.4](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.4) - -#### Changes - -- Fixed an issue where some sessions experienced delays in receiving the LAYER_READY event or did not receive it at all. -- Fixed an issue with XCFramework signature. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V12.0.2 β€” 2025-01-30 - -### React Native - -- Fixed: Resolved an [issue](https://github.com/plaid/react-native-plaid-link-sdk/issues/747) where the USE_FRAMEWORKS preprocessor check was failing for projects using use_frameworks! :linkage => :static. - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.2](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.2) - -#### Changes - -- Add support for FinanceKit and Apple card. -- Improved returning user experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.0.1 β€” 2025-01-24 - -### React Native - -- Resolves issues with react native >= 0.76.0. -- Remove deprecated PlaidLink component. -- Remove deprecated openLink function. - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.2](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.2) - -#### Changes - -- Add support for FinanceKit and Apple card. -- Improved returning user experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - -## LinkKit V12.0.0 β€” 2025-01-03 - -### React Native - -- Remove deprecated PlaidLink component. -- Remove deprecated openLink function. - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [5.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v5.0.0) - -### Additions - -- Add AUTO_SUBMIT event name. -- Add INVALID_UPDATE_USERNAME item error. - -### Changes - -- Upgrade Kotlin to 1.9.25. -- Upgrade to target and compile SDK version 35. -- Upgrade androidx.databinding:viewbinding library from 8.1.2 to 8.6.1. -- Upgrade androidx.activity:activity library from 1.6.0 to 1.8.2. -- Upgrade androidx.core:core-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.fragment:fragment-ktx library from 1.9.0 to 1.13.0. -- Upgrade androidx.room:room-ktx library from 2.6.0 to 2.6.1. -- Upgrade androidx.lifecycle:lifecycle-runtime-ktx library from 2.5.1 to 2.6.1. -- Upgrade org.jetbrains.kotlinx:kotlinx-coroutines-core library from 1.7.1 to 1.7.3. - -### Removals - -- Remove PROFILE_ELIGIBILITY_CHECK_ERROR event name. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.0) - -#### Changes - -- Add support for FinanceKit and Apple card. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 16.1.0 | -| iOS | >= 14.0 | - - -## LinkKit V11.13.3 β€” 2024-12-06 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates to clarify and resolve the following issues: - - [Issue 713](https://github.com/plaid/react-native-plaid-link-sdk/issues/713) - - [Issue 732](https://github.com/plaid/react-native-plaid-link-sdk/issues/732) - -### Android - -Android SDK [4.6.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.1) - -#### Changes -- Add BANK_INCOME_INSIGHTS_COMPLETED, SUBMIT_EMAIL, SKIP_SUBMIT_EMAIL, SUBMIT_OTP, REMEMBER_ME_ENABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_HOLDOUT, PLAID_CHECK_PANE, AUTO_SELECT_SAVED_INSTITUTION event names. -- Add SUBMIT_DOCUMENTS, SUBMIT_DOCUMENTS_SUCCESS, SUBMIT_DOCUMENTS_ERROR, SUBMIT_EMAIL, and VERIFY_EMAIL event view names. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.1) - -#### Changes - -- Add missing event names submitEmail, skipSubmitEmail, rememberMeEnabled, rememberMeDisabled, rememberMeHoldout, selectSavedInstitution, selectSavedAccount, autoSelectSavedInstitution, plaidCheckPane. -- Add missing view names submitEmail and verifyEmail. -- Add haptics support. -- Fix Embedded search view dynamic resizing. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.13.2 β€” 2024-11-12 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update Android Compile Version from 31 to 34. - -### Android - -Android SDK [4.6.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.1) - -#### Changes -- Add BANK_INCOME_INSIGHTS_COMPLETED, SUBMIT_EMAIL, SKIP_SUBMIT_EMAIL, SUBMIT_OTP, REMEMBER_ME_ENABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_HOLDOUT, PLAID_CHECK_PANE, AUTO_SELECT_SAVED_INSTITUTION event names. -- Add SUBMIT_DOCUMENTS, SUBMIT_DOCUMENTS_SUCCESS, SUBMIT_DOCUMENTS_ERROR, SUBMIT_EMAIL, and VERIFY_EMAIL event view names. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.1) - -#### Changes - -- Add missing event names submitEmail, skipSubmitEmail, rememberMeEnabled, rememberMeDisabled, rememberMeHoldout, selectSavedInstitution, selectSavedAccount, autoSelectSavedInstitution, plaidCheckPane. -- Add missing view names submitEmail and verifyEmail. -- Add haptics support. -- Fix Embedded search view dynamic resizing. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.13.1 β€” 2024-11-11 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Resolves [Issue 713](https://github.com/plaid/react-native-plaid-link-sdk/issues/713). - -### Android - -Android SDK [4.6.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.1) - -#### Changes -- Add BANK_INCOME_INSIGHTS_COMPLETED, SUBMIT_EMAIL, SKIP_SUBMIT_EMAIL, SUBMIT_OTP, REMEMBER_ME_ENABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_HOLDOUT, PLAID_CHECK_PANE, AUTO_SELECT_SAVED_INSTITUTION event names. -- Add SUBMIT_DOCUMENTS, SUBMIT_DOCUMENTS_SUCCESS, SUBMIT_DOCUMENTS_ERROR, SUBMIT_EMAIL, and VERIFY_EMAIL event view names. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.1) - -#### Changes - -- Add missing event names submitEmail, skipSubmitEmail, rememberMeEnabled, rememberMeDisabled, rememberMeHoldout, selectSavedInstitution, selectSavedAccount, autoSelectSavedInstitution, plaidCheckPane. -- Add missing view names submitEmail and verifyEmail. -- Add haptics support. -- Fix Embedded search view dynamic resizing. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.13.0 β€” 2024-09-16 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update Android and iOS SDKs. - -### Android - -Android SDK [4.6.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.1) - -#### Changes -- Add BANK_INCOME_INSIGHTS_COMPLETED, SUBMIT_EMAIL, SKIP_SUBMIT_EMAIL, SUBMIT_OTP, REMEMBER_ME_ENABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_DISABLED, REMEMBER_ME_HOLDOUT, PLAID_CHECK_PANE, AUTO_SELECT_SAVED_INSTITUTION event names. -- Add SUBMIT_DOCUMENTS, SUBMIT_DOCUMENTS_SUCCESS, SUBMIT_DOCUMENTS_ERROR, SUBMIT_EMAIL, and VERIFY_EMAIL event view names. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.1) - -#### Changes - -- Add missing event names submitEmail, skipSubmitEmail, rememberMeEnabled, rememberMeDisabled, rememberMeHoldout, selectSavedInstitution, selectSavedAccount, autoSelectSavedInstitution, plaidCheckPane. -- Add missing view names submitEmail and verifyEmail. -- Add haptics support. -- Fix Embedded search view dynamic resizing. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.12.1 β€” 2024-08-23 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates for new architecture - - https://github.com/plaid/react-native-plaid-link-sdk/pull/701 - - https://github.com/plaid/react-native-plaid-link-sdk/pull/702 - -### Android - -Android SDK [4.6.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.0) - -#### Changes -- Source and target compatibility set to JavaVersion.VERSION_11 down from VERSION_17 to improve compatibility. -- Upgrade androidx.work:work-runtime-ktx library from 2.7.1 to 2.9.0. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.0) - -#### Changes - -- Add submit API for Layer. -- Improved Remember Me Experience - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.12.0 β€” 2024-08-09 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Resolve issue [693](https://github.com/plaid/react-native-plaid-link-sdk/issues/693) missing Layer events. -- Add `LAYER_READY` and `LAYER_NOT_AVAILABLE` events to `LinkEventName`. - -### Android - -Android SDK [4.6.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.6.0) - -#### Changes -- Source and target compatibility set to JavaVersion.VERSION_11 down from VERSION_17 to improve compatibility. -- Upgrade androidx.work:work-runtime-ktx library from 2.7.1 to 2.9.0. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.0) - -#### Changes - -- Add submit API for Layer. -- Improved Remember Me Experience - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V12.0.0-beta.3 β€” 2024-08-06 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.4.0) - -#### Changes -- Support Autofill for SMS OTP in Link Sessions using Google play-services-auth-api-phone library version 18.0.2. -- Change LinkActivity to `exported=false`. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.0-beta5](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.0-beta5) - -#### Changes - -- Resolves bug where large transaction syncs failed. -- Resolves bug where large account balance extraction failed. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.3.0 | -| iOS | >= 14.0 | - -## LinkKit V11.11.2 β€” 2024-08-06 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Resolve issue [693](https://github.com/plaid/react-native-plaid-link-sdk/issues/693) missing Layer events. -- Add `LAYER_READY` and `LAYER_NOT_AVAILABLE` events to `LinkEventName`. - -### Android - -Android SDK [4.5.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.5.1) - -#### Changes -- Fix headless link race condition - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.0) - -#### Changes - -- Add submit API for Layer. -- Improved Remember Me Experience - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.11.1 β€” 2024-07-17 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update Android SDK to 4.5.1. -- Update iOS SDK to 5.6.0. -- Add submit API. - -### Android - -Android SDK [4.5.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.5.1) - -#### Changes -- Fix headless link race condition - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.0) - -#### Changes - -- Add submit API for Layer. -- Improved Remember Me Experience - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.11.0 β€” 2024-06-25 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update Android SDK to 4.5.0. -- Update iOS SDK to 5.6.0. -- Add submit API. - -### Android - -Android SDK [4.5.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.5.0) - -#### Changes -- Add PROFILE_DATA_REVIEW event view name. -- Add LAYER_READY and LAYER_NOT_AVAILABLE event names. -- Add submit API to the LinkHandler. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.6.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.6.0) - -#### Changes - -- Add submit API for Layer. -- Improved Remember Me Experience - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.10.3 β€” 2024-06-04 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.4.2](https://github.com/plaid/plaid-link-android/releases/tag/v4.4.2) - -#### Changes -- Support Autofill for SMS OTP in Link Sessions using Google play-services-auth-api-phone library version 18.0.2. -- Change LinkActivity to `exported=false`. -- Fix race condition that can occur when multiple tokens are initialized. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.5.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.5.1) - -#### Changes - -- Fix headless OAuth bug. -- Improved Remember Me experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.10.2 β€” 2024-05-30 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.5.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.5.1) - -#### Changes - -- Fix headless OAuth bug. -- Improved Remember Me experience. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V12.0.0-beta.2 β€” 2024-05-24 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.4.0) - -#### Changes -- Support Autofill for SMS OTP in Link Sessions using Google play-services-auth-api-phone library version 18.0.2. -- Change LinkActivity to `exported=false`. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.0-beta2](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.0-beta2) - -#### Changes - -- Add Objective-C FinanceKit APIs for React Native. -- Add support for FinanceKit and Apple card. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.3.0 | -| iOS | >= 14.0 | - -## LinkKit V11.10.1 β€” 2024-05-23 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.5.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.5.0) - -#### Changes - -- Add PROFILE_DATA_REVIEW view name. -- Add NSPrivacyCollectedDataTypePurposes for NSPrivacyCollectedDataTypeUserID. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V12.0.0-beta.1 β€” 2024-05-22 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -### Android - -Android SDK [4.4.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.4.0) - -#### Changes -- Support Autofill for SMS OTP in Link Sessions using Google play-services-auth-api-phone library version 18.0.2. -- Change LinkActivity to `exported=false`. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [6.0.0-beta1](https://github.com/plaid/plaid-link-ios/releases/tag/6.0.0-beta1) - -#### Changes - -- Add support for FinanceKit and Apple card. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.3.0 | -| iOS | >= 14.0 | - -## LinkKit V11.10.0 β€” 2024-05-22 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes -- [Exports added](https://github.com/plaid/react-native-plaid-link-sdk/pull/666) for `create` and `open` functions. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.5.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.5.0) - -#### Changes - -- Add PROFILE_DATA_REVIEW view name. -- Add NSPrivacyCollectedDataTypePurposes for NSPrivacyCollectedDataTypeUserID. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.9.0 β€” 2024-05-09 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Adds support for Fabric. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.5.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.5.0) - -#### Changes - -- Add PROFILE_DATA_REVIEW view name. -- Add NSPrivacyCollectedDataTypePurposes for NSPrivacyCollectedDataTypeUserID. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.8.2 β€” 2024-04-22 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Resolve issue where handler wasn't deallocated onExit for iOS sessions. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.4.2](https://github.com/plaid/plaid-link-ios/releases/tag/5.4.2) - -#### Changes - -- Make Link background a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.8.1 β€” 2024-04-22 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Add submit OTP event name -- Add continue_to_third_party exit status -- Resolve issue [653](https://github.com/plaid/react-native-plaid-link-sdk/issues/653) where the `HANDOFF` event is not properly emitted on iOS. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.4.2](https://github.com/plaid/plaid-link-ios/releases/tag/5.4.2) - -#### Changes - -- Make Link background a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.8.0 β€” 2024-04-16 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update iOS SDK and Android SDKs. - -### Android - -Android SDK [4.3.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.1) - -#### Changes -- Change WebView background to a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.4.2](https://github.com/plaid/plaid-link-ios/releases/tag/5.4.2) - -#### Changes - -- Make Link background a transparent gradient. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.7.1 β€” 2024-04-12 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update iOS SDK and Android SDKs. -- Fix issue with Plaid component not working on second press. - -### Android - -Android SDK [4.3.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.3.0) - -#### Changes -- Upgrade AndroidX Activity from 1.3.0 to 1.5.0 -- Upgrade AndroidX Fragment from 1.3.0 to 1.5.0 -- Upgrade AndroidX Lifecycle from 2.4.0 to 2.5.0 -- Animation improvements for Layer. -- Fix webview back navigation handling bug. - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -### iOS - -iOS SDK [5.4.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.4.1) - -#### Changes - -- Remove deprecation from custom Link presentation. -- Improve Link presentation animation. -- Embedded Link bug fixes. - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - -## LinkKit V11.6.0 β€” 2024-03-20 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update iOS SDK and Android SDKs. -- Add ability to pre-load Link. - -### Android - -Android SDK [4.2.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.2.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - - -### iOS - -iOS SDK [5.3.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.3.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -## LinkKit V11.5.2 β€” 2024-02-21 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Update iOS SDK - -### Android - -Android SDK [4.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.1.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - - -### iOS - -iOS SDK [5.2.1](https://github.com/plaid/plaid-link-ios/releases/tag/5.2.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Improved Embedded Link experience. - -## LinkKit V11.5.1 β€” 2024-02-08 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Resolves bug where `LinkEventMetadata` was undefined on `LinkEvent`. All values inside `LinkEventMetadata` should now be accessible on iOS and Android. - - -### Android - -Android SDK [4.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.1.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Improved Remember Me experience. - -### iOS - -iOS SDK [5.2.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.2.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Improved Remember Me experience. - -## LinkKit V11.5.0 β€” 2024-02-01 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates iOS SDK to `5.2.0` for improved Remember Me experience. - - -### Android - -Android SDK [4.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.1.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Improved Remember Me experience. - -### iOS - -iOS SDK [5.2.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.2.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Improved Remember Me experience. - -## LinkKit V11.4.0 β€” 2024-01-22 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates Android SDK SDK to `4.1.1` to fix bug where certain Link sessions close after initial loading. - - -### Android - -Android SDK [4.1.1](https://github.com/plaid/plaid-link-android/releases/tag/v4.1.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Improved Remember Me experience. - -### iOS - -iOS SDK [5.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.1.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Resolve issue where PrivacyInfo.xcprivacy was missing NSPrivacyCollectedDataTypes. -- Improved Remember Me experience. -- Improved OAuth out-of-process webview open options. - -## LinkKit V11.3.0 β€” 2024-01-18 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Reverts Android SDK SDK to `4.0.0`. To prevent [issue 620](https://github.com/plaid/react-native-plaid-link-sdk/issues/620). - - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Improved Remember Me experience. - -### iOS - -iOS SDK [5.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.1.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Resolve issue where PrivacyInfo.xcprivacy was missing NSPrivacyCollectedDataTypes. -- Improved Remember Me experience. -- Improved OAuth out-of-process webview open options. - -## LinkKit V11.2.0 β€” 2024-01-11 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates Android SDK SDK to `4.1.0`. -- Improved Remember Me Experience on iOS & Android - - -### Android - -Android SDK [4.1.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.1.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Improved Remember Me experience. - -### iOS - -iOS SDK [5.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.1.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Resolve issue where PrivacyInfo.xcprivacy was missing NSPrivacyCollectedDataTypes. -- Improved Remember Me experience. -- Improved OAuth out-of-process webview open options. - -## LinkKit V11.1.0 β€” 2024-01-10 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Updates iOS SDK to `5.1.0`. -- Updates `LinkTokenConfiguration.noLoadingState` from required to optional. - -``` - { console.log(success) }} - onExit={(exit: LinkExit) => { console.log(exit) }} - // OPTIONAL - MODAL or FULL_SCREEEN presentation on iOS. Defaults to MODAL. - // UI is always presented in full screen on Android. - iOSPresentationStyle={LinkIOSPresentationStyle.MODAL} - > -``` - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Flutter usage tracking. - -#### Changes - -- Upgrade to Kotlin 1.8.22 -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -#### Removals - -- Remove deprecated support for public key authentication. -- Remove extraParams Map field from API. - -[Android migration guide](https://github.com/plaid/plaid-link-android#migration-guide) - -### iOS - -iOS SDK [5.1.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.1.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Resolve issue where PrivacyInfo.xcprivacy was missing NSPrivacyCollectedDataTypes. -- Improved Remember Me experience. -- Improved OAuth out-of-process webview open options. - - - -## LinkKit V11.0.3 β€” 2023-11-13 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- Removes circular dependency. - -The update to the next major version of our mobile SDKs **includes breaking changes**. Please see our [migration guide] -(https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) for full details. - - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Flutter usage tracking. - -#### Changes - -- Upgrade to Kotlin 1.8.22 -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -#### Removals - -- Remove deprecated support for public key authentication. -- Remove extraParams Map field from API. - -[Android migration guide](https://github.com/plaid/plaid-link-android#migration-guide) - -### iOS - -iOS SDK [5.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Drop support for iOS 11, 12, & 13. -- Reduce iOS SDK size from 15 megabytes to 11 megabytes. -- Remove deprecated support for public key authentication. -- Remove deprecated continue from method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated continue method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated open with OpenOptions function. -- Make webview inspectable on iOS >= 16.4. -- Add Privacy Manifest for `UserDefaults` use. - -[iOS migration guide](https://github.com/plaid/plaid-link-ios/blob/master/v5-migration-guide.md) - -## LinkKit V11.0.2 β€” 2023-11-13 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- `LinkAccountSubtypes` is now exported - -The update to the next major version of our mobile SDKs **includes breaking changes**. Please see our [migration guide] -(https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) for full details. - - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Flutter usage tracking. - -#### Changes - -- Upgrade to Kotlin 1.8.22 -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -#### Removals - -- Remove deprecated support for public key authentication. -- Remove extraParams Map field from API. - -[Android migration guide](https://github.com/plaid/plaid-link-android#migration-guide) - -### iOS - -iOS SDK [5.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Drop support for iOS 11, 12, & 13. -- Reduce iOS SDK size from 15 megabytes to 11 megabytes. -- Remove deprecated support for public key authentication. -- Remove deprecated continue from method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated continue method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated open with OpenOptions function. -- Make webview inspectable on iOS >= 16.4. -- Add Privacy Manifest for `UserDefaults` use. - -[iOS migration guide](https://github.com/plaid/plaid-link-ios/blob/master/v5-migration-guide.md) - -## LinkKit V11.0.1 β€” 2023-11-13 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -- `LinkAccountType` is now exported -- Resolve [issue 598](https://github.com/plaid/react-native-plaid-link-sdk/issues/598) where a `LinkLogLevel` had to be provided for Android to open Link. - -The update to the next major version of our mobile SDKs **includes breaking changes**. Please see our [migration guide] -(https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) for full details. - - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Flutter usage tracking. - -#### Changes - -- Upgrade to Kotlin 1.8.22 -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -#### Removals - -- Remove deprecated support for public key authentication. -- Remove extraParams Map field from API. - -[Android migration guide](https://github.com/plaid/plaid-link-android#migration-guide) - -### iOS - -iOS SDK [5.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Drop support for iOS 11, 12, & 13. -- Reduce iOS SDK size from 15 megabytes to 11 megabytes. -- Remove deprecated support for public key authentication. -- Remove deprecated continue from method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated continue method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated open with OpenOptions function. -- Make webview inspectable on iOS >= 16.4. -- Add Privacy Manifest for `UserDefaults` use. - -[iOS migration guide](https://github.com/plaid/plaid-link-ios/blob/master/v5-migration-guide.md) - -## LinkKit V10.9.0 β€” 2023-11-13 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Update iOS SDK to [4.7.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.7.0) - - -### Android - -Android SDK [3.14.1](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - -### Additions - -- Flutter usage tracking. - -### Changes - -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -### Removals - -- None - - -### iOS - -iOS SDK [4.7.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.7.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -## LinkKit V11.0.0 β€” 2023-11-09 - -### React Native - -#### Requirements - -This SDK now works with any supported version of React Native. - -#### Changes - -The update to the next major version of our mobile SDKs **includes breaking changes**. Please see our [migration guide] -(https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) for full details. - - -- Update Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) -- Update iOS SDK to [5.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.0.0) - -### Android - -Android SDK [4.0.0](https://github.com/plaid/plaid-link-android/releases/tag/v4.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | -| Kotlin | 1.8+ | - -#### Additions - -- Flutter usage tracking. - -#### Changes - -- Upgrade to Kotlin 1.8.22 -- Change LinkActivity to SingleInstance to fix issue with OAuth Redirects on Android 14. - -#### Removals - -- Remove deprecated support for public key authentication. -- Remove extraParams Map field from API. - -[Android migration guide](https://github.com/plaid/plaid-link-android#migration-guide) - -### iOS - -iOS SDK [5.0.0](https://github.com/plaid/plaid-link-ios/releases/tag/5.0.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 15.0.1 | -| iOS | >= 14.0 | - - -#### Changes - -- Drop support for iOS 11, 12, & 13. -- Reduce iOS SDK size from 15 megabytes to 11 megabytes. -- Remove deprecated support for public key authentication. -- Remove deprecated continue from method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated continue method (this method no longer needs to be called for OAuth redirects). -- Remove deprecated open with OpenOptions function. -- Make webview inspectable on iOS >= 16.4. -- Add Privacy Manifest for `UserDefaults` use. - -[iOS migration guide](https://github.com/plaid/plaid-link-ios/blob/master/v5-migration-guide.md) - -## LinkKit V10.8.0 β€” 2023-11-07 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Update iOS SDK to [4.7.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.7.0) - - -### Android - -Android SDK [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -### iOS - -iOS SDK [4.7.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.7.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -## LinkKit V10.7.0 β€” 2023-11-07 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Resolve Issue [589](https://github.com/plaid/react-native-plaid-link-sdk/issues/589) - - -### Android - -Android SDK [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -### iOS - -iOS SDK [4.6.4](https://github.com/plaid/plaid-link-ios/releases/tag/4.6.4) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - - -## LinkKit V10.6.4 β€” 2023-10-12 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Resolve Issue where PLKEmbeddedView doesn't compile on Xcode < 14.3. - - -### Android - -Android SDK [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -### iOS - -iOS SDK [4.6.4](https://github.com/plaid/plaid-link-ios/releases/tag/4.6.4) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -## LinkKit V10.6.3 β€” 2023-10-11 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Resolve Issue [564](https://github.com/plaid/react-native-plaid-link-sdk/issues/564) React native web issue doesn't work with 10.6.0. - - -### Android - -Android SDK [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -### iOS - -iOS SDK [4.6.4](https://github.com/plaid/plaid-link-ios/releases/tag/4.6.4) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -## LinkKit V10.6.2 β€” 2023-10-10 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Resolve Issue [565](https://github.com/plaid/react-native-plaid-link-sdk/issues/565). Where NPM package was in excess of 100mb. - - -### Android - -Android SDK [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -### iOS - -iOS SDK [4.6.4](https://github.com/plaid/plaid-link-ios/releases/tag/4.6.4) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - - -## LinkKit V10.6.0 β€” 2023-09-29 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Resolve Issue [501](https://github.com/plaid/react-native-plaid-link-sdk/issues/501). You will now receive a LinkExit for any configuration errors. -- [Add support for AGP 8](https://github.com/plaid/react-native-plaid-link-sdk/pull/554). -- Add **LinkEventNames** - `IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION`, `SELECT_FILTERED_INSTITUTION`, `SELECT_BRAND`, `SELECT_AUTH_TYPE`, `SUBMIT_ACCOUNT_NUMBER`, `SUBMIT_DOCUMENTS`, `SUBMIT_DOCUMENTS_SUCCESS`, `SUBMIT_DOCUMENTS_ERROR`, `SUBMIT_ROUTING_NUMBER`, `VIEW_DATA_TYPES`, `SUBMIT_PHONE`, `SKIP_SUBMIT_PHONE`, `VERIFY_PHONE`, & `CONNECT_NEW_INSTITUTION`. -- Add **LinkEventViewNames** - `DATA_TRANSPARENCY`, `DATA_TRANSPARENCY_CONSENT`, `NUMBERS_SELECT_INSTITUTION`, `SELECT_AUTH_TYPE`, `SUBMIT_PHONE`, `VERIFY_PHONE`, `SELECT_SAVED_INSTITUTION`, `SELECT_SAVED_ACCOUNT`, `SELECT_BRAND`, `SUBMIT_DOCUMENTS`, `SUBMIT_DOCUMENTS_SUCCESS`, `SUBMIT_DOCUMENTS_ERROR`, & `UPLOAD_DOCUMENTS`. -- Add **LinkEventMetadata** fields `isUpdateMode`, `accountNumberMask`, & `matchReason`. - - - -### Android - -Update Android SDK from [3.13.2](https://github.com/plaid/plaid-link-android/releases/tag/v3.13.2) to [3.14.0](https://github.com/plaid/plaid-link-android/releases/tag/v3.14.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -#### Changes - -- Add IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION, SELECT_BRAND, SELECT_FILTERED_INSTITUTION, SUBMIT_ACCOUNT_NUMBER, SUBMIT_DOCUMENTS, SUBMIT_DOCUMENTS_SUCCESS, SUBMIT_DOCUMENTS_ERROR, VIEW_DATA_TYPES, SUBMIT_PHONE, SKIP_SUBMIT_PHONE, VERIFY_PHONE, and CONNECT_NEW_INSTITUTION event names. -- Add DATA_TRANSPARENCY, DATA_TRANSPARENCY_CONSENT, NUMBERS_SELECT_INSTITUTION, SUBMIT_PHONE, VERIFY_PHONE, SELECT_SAVED_INSTITUTION, SELECT_SAVED_ACCOUNT, and SELECT_BRAND event view names. -- Add is_update_mode, match_reason, and account_number_mask event metadata fields. - -### iOS - -Update iOS SDK from [4.5.1](https://github.com/plaid/plaid-link-ios/releases/tag/4.5.1) to [4.6.4](https://github.com/plaid/plaid-link-ios/releases/tag/4.6.4) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -#### Changes - -- Reduce SDK Size from 17.6MB to 14.7MB. -- Expose toObjC methods for React Native SDK. -- Only displays initial loading indicator for sessions with high latency on initial load. -- Fix double navigation bar for charles schwab. -- Add new event and view names. -- Add missing event metadata fields. -- Fix transparent loading state during OAuth redirect. -- Resolves bug where half-pane Link header could overlap the status bar. - -## LinkKit V10.5.0 β€” 2023-08-08 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Update iOS Native SDK. -- Add support to present Link full screen. `PlaidLinkProps` not supports passing a `LinkIOSPresentationStyle`. Pass `FULL_SCREEN` to present Link full screen instead of as a modal. For more information checkout the [pull-request](https://github.com/plaid/react-native-plaid-link-sdk/pull/543). - -### Android - -[Android SDK 3.13.2](https://github.com/plaid/plaid-link-android/releases/tag/v3.13.2) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -#### Changes - -- Changed LinkRedirectActivity theme from Material to MaterialComponents. - -### iOS - -[iOS SDK 4.5.1](https://github.com/plaid/plaid-link-ios/releases/tag/4.5.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -#### Changes - -- Add identityVerificationPendingReviewSession event name. -- Bug fixes. - -## LinkKit V10.4.0 β€” 2023-06-13 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Update Native SDKs. - -### Android - -[Android SDK 3.13.2](https://github.com/plaid/plaid-link-android/releases/tag/v3.13.2) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -#### Changes - -- Changed LinkRedirectActivity theme from Material to MaterialComponents. - -### iOS - -[iOS SDK 4.4.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.4.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -#### Changes - -- Updates LinkKit loading state activity indicator. -- Updates LinkKit loading state to use a transparent background. - - -## LinkKit V10.3.0 β€” 2023-05-08 - -### React Native - -#### Requirements - -| Name | Version | -|------|---------| -| React Native | >= [66.0](https://reactnative.dev/blog/2021/10/01/version-066) | - -#### Changes - -- Update Example App. -- Fix event metadata JSON key inconsistency between iOS & Android. - - -### Android - -[Android SDK 3.12.1](https://github.com/plaid/plaid-link-android/releases/tag/v3.12.1) - -#### Requirements - -| Name | Version | -|------|---------| -| Android Studio | 4.0+ | - - -#### Changes - -- Fix bug where certain out-of-process webview handoffs fail. - -### iOS - -[iOS SDK 4.3.0](https://github.com/plaid/plaid-link-ios/releases/tag/4.3.0) - -#### Requirements - -| Name | Version | -|------|---------| -| Xcode | >= 14.0 | -| iOS | >= 11.0 | - -#### Changes - -- Fix LinkViewController memory leak. -- Prevent IDV users from being asked for camera permission multiple times. -- Update deprecated continue(from:) to be no-op. -- Reduce SDK size by ~20%. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md deleted file mode 100644 index 2822d03b..00000000 --- a/CONTRIBUTING.md +++ /dev/null @@ -1,80 +0,0 @@ -# Contributing - -We want this community to be friendly and respectful to each other. Please consider this in all your interactions with the project. - -The primary contributors to this SDK are generally Plaid employees, but we welcome PRs from the community to fix bugs. - -## SDK Structure - -The Plaid React Native SDK is intended to be a thin wrapper around the native [Android](https://github.com/plaid/plaid-link-android) and [iOS](https://github.com/plaid/plaid-link-ios) SDKs. As such there is one main file that provides all of the public APIs [PlaidLink.tsx](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/PlaidLink.tsx). - -To learn more you can read about [Native Modules](https://reactnative.dev/docs/native-modules-intro) in React Native, or more specifically Export a Native Method to JavaScript for [Android](https://reactnative.dev/docs/native-modules-android#export-a-native-method-to-javascript) and [iOS](https://reactnative.dev/docs/native-modules-ios#export-a-native-method-to-javascript). - -Per standard React Native conventions, information to open Link is passed via JSON to either the Android or iOS Native Modules and is returned as JSON via callbacks. - -[onEvent](https://plaid.com/docs/link/react-native/#onevent) events are handled using React Native's `NativeEventEmitter` due to their stream-like nature. - -#### Android - -Android is its own com.android.library module that contains a Package, Module and helper classes. - -The Android native module constructs configurations from the JSON and opens Link via the native SDK's APIs. It also listens for Activity results and converts the resulting objects into JSON to return via the callbacks. [PlaidModule.kt](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/android/src/main/java/com/plaid/PlaidModule.kt) is where most of the module wrapping occurs. - -**Note** - There is an existing [known issue](https://github.com/facebook/react-native/issues/30277) with the Android SDK that is caused by an assumption in the core React Native Code. - -#### iOS - -The native iOS SDK is exposed to React Native Javascript via the use of Objective-C in [RNLinksdk.m](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/ios/RNLinksdk.m). This file exports LinkKit native methods using [RCT_EXPORT_METHOD](https://reactnative.dev/docs/native-modules-ios#export-a-native-method-to-javascript) so they can be called directly in Javascript. - -## Development workflow - -### Running the example app - -You can find information on running the example app in the [README](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/example/README.md). - -### iOS changes - -To edit the Objective-C files, open `example/ios/plaidRNDemo.xcworkspace` in XCode and find the source files at `Pods > Development Pods > react-native-plaid-link-sdk`. - -### Android changes - -To edit the Kotlin files, open `example/android` in Android studio and find the source files at `react-native-plaid-link-sdk` under `PlaidRNDemo`. - - -### Typescript changes - -Use your editor of choice for editing the Typescript files at the root of the project or in `example/`. - -Run `tsc` from the project's root (`npm install --global typescript` if command not found) to compile the typescript source. Ensure the `dist` directory has been created. - -Make sure your code passes TypeScript and ESLint. Run the following to verify: - -```sh -npm run lint -``` - -To fix formatting errors, run the following: - -```sh -npm run lint --fix -``` - -### Testing local changes - - -To install local/private packages across local environment we recommend using [yalc](https://github.com/wclr/yalc). - -- Run `yalc publish` in `react-native-plaid-link-sdk` package to publish all the files that should be published in remote NPM registry. -- Run `yalc add react-native-plaid-link-sdk` in your dependent project, which will copy the current version from the store to your project's `.yalc` folder and inject a `file:.yalc/react-native-plaid-link-sdk` into `package.json`. -- In your dependent project run `npm install` and `cd ios && bundle install && bundle exec pod install`. - - -### Sending a pull request - -> **Working on your first pull request?** You can learn how from this _free_ series: [How to Contribute to an Open Source Project on GitHub](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github). - -When you're sending a pull request: - -- Prefer small pull requests focused on one change. -- Review the documentation to ensure it includes any needed updates. -- Follow the pull request template when opening a pull request. diff --git a/FabricExample/.bundle/config b/FabricExample/.bundle/config deleted file mode 100644 index 848943bb..00000000 --- a/FabricExample/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/FabricExample/.eslintrc.js b/FabricExample/.eslintrc.js deleted file mode 100644 index 187894b6..00000000 --- a/FabricExample/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: '@react-native', -}; diff --git a/FabricExample/.gitignore b/FabricExample/.gitignore deleted file mode 100644 index de999559..00000000 --- a/FabricExample/.gitignore +++ /dev/null @@ -1,75 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -**/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore -.kotlin/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* - -# testing -/coverage - -# Yarn -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/FabricExample/.npmrc b/FabricExample/.npmrc deleted file mode 100644 index ef0ca82a..00000000 --- a/FabricExample/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -registry=https://registry.npmjs.org/ -always-auth=false diff --git a/FabricExample/.prettierrc b/FabricExample/.prettierrc deleted file mode 100644 index e9ab9c50..00000000 --- a/FabricExample/.prettierrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "arrowParens": "avoid", - "singleQuote": true, - "trailingComma": "all" -} diff --git a/FabricExample/.prettierrc.js b/FabricExample/.prettierrc.js deleted file mode 100644 index 06860c8d..00000000 --- a/FabricExample/.prettierrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - singleQuote: true, - trailingComma: 'all', -}; diff --git a/FabricExample/.watchmanconfig b/FabricExample/.watchmanconfig deleted file mode 100644 index 0967ef42..00000000 --- a/FabricExample/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/LICENSE b/FabricExample/.yalc/react-native-plaid-link-sdk/LICENSE deleted file mode 100644 index 131a94dd..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Plaid - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/README.md b/FabricExample/.yalc/react-native-plaid-link-sdk/README.md deleted file mode 100644 index 3165b9db..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/README.md +++ /dev/null @@ -1,289 +0,0 @@ -# Plaid React Native SDK - -![version](https://img.shields.io/npm/v/react-native-plaid-link-sdk) -[![License](https://img.shields.io/github/license/plaid/react-native-plaid-link-sdk)](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/LICENSE) - -The Plaid React Native SDK provides the client-side component that your users will interact with in order to link their accounts to Plaid and allow you access to their accounts via the Plaid API. - -For more information about Plaid Link check out our -[introduction documentation](https://plaid.com/docs/link/#introduction-to-link). - -Plaid currently supports two versions of the Plaid React Native SDK v10.x and v11.x. You can find v10 on the [master-v10](https://github.com/plaid/react-native-plaid-link-sdk/tree/master-v10) branch. - -## Features - -The SDK provides: - -- A PlaidLink functional component. -- A function to open Link. -- A hook to handle [onEvent](https://plaid.com/docs/link/react-native/#onevent) callbacks. -- A function to dismiss link on iOS. - -## Getting Started - -Get started with our πŸ“ [documentation](https://plaid.com/docs/link/react-native/) and the πŸ“±[example project](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/example/README.md), or ↔️ [Tiny Quickstart (React Native)](https://github.com/plaid/tiny-quickstart/tree/main/react_native) which is an end to end example demonstrating a minimal integration with this SDK. - -If you're unfamiliar with React Native we recommend starting with the [environment setup instructions](https://reactnative.dev/docs/environment-setup). - -In your React Native project directory: - -```sh -npm install --save react-native-plaid-link-sdk -``` - -### iOS Setup - -Autolinking should install the CocoaPods dependencies for iOS project. If it fails you can run - -```sh -cd ios && bundle install && bundle exec pod install -``` - -### Android Setup - -- Android 5.0 (API level 21) and above. - - Your `compileSdkVersion` must be `33`. -- Android gradle plugin `4.x` and above. - -AutoLinking should handle all of the Android setup. - -Remember to register your Android package name in the [Dashboard](https://dashboard.plaid.com/developers/api). This is required in order to connect to OAuth institutions (which includes most major banks). - -### React Native Setup - -- To initialize `PlaidLink`, you will need to first create a `link_token` at [/link/token/create](https://plaid.com/docs/api/link/#linktokencreate). Check out our [QuickStart guide](https://plaid.com/docs/quickstart/#introduction) for additional API information. - -#### Version >= 11.6.0 - -Starting from version `11.6.0`, we introduced the ability to preload part of the Link experience. You can initiate the preloading process by invoking the `create` function. - -```typescript -function createLinkTokenConfiguration( - token: string, - noLoadingState: boolean = false, -): LinkTokenConfiguration { - return { - token: token, - // Hides native activity indicator if true. - noLoadingState: noLoadingState, - }; -} - -const tokenConfiguration = createLinkTokenConfiguration("#GENERATED_LINK_TOKEN#"); -create(tokenConfiguration); -``` - -After calling `create`, you can subsequently invoke the `open` function. Note that maximizing the delay between these two calls will reduce latency for your users by allowing Link more time to load. - -```typescript -function createLinkOpenProps(): LinkOpenProps { - return { - onSuccess: (success: LinkSuccess) => { - // User was able to successfully link their account. - console.log('Success: ', success); - }, - onExit: (linkExit: LinkExit) => { - // User exited Link session. There may or may not be an error depending on what occured. - console.log('Exit: ', linkExit); - dismissLink(); - }, - // MODAL or FULL_SCREEEN presentation on iOS. Defaults to MODAL. - iOSPresentationStyle: LinkIOSPresentationStyle.MODAL, - logLevel: LinkLogLevel.ERROR, - }; -} - -const openProps = createLinkOpenProps(); -open(openProps); -``` - -#### Version < 11.6.0 - -In versions prior to `11.6.0`, you can open a link by calling the `openLink` function. - -```typescript -// Create PlaidLinkProps from the provided token string. -function makeLinkTokenProps(token: string): PlaidLinkProps { - return { - tokenConfig: { - token: token, - logLevel: LinkLogLevel.ERROR, - // Hides native activity indicator if true. - noLoadingState: false, - }, - onSuccess: (success: LinkSuccess) => { - // User was able to successfully link their account. - console.log('Success: ', success); - success.metadata.accounts.forEach(it => console.log('accounts', it)); - }, - onExit: (linkExit: LinkExit) => { - // User exited Link session. There may or may not be an error depending on what occured. - console.log('Exit: ', linkExit); - dismissLink(); - }, - // MODAL or FULL_SCREEEN presentation on iOS. Defaults to MODAL. - iOSPresentationStyle: LinkIOSPresentationStyle.MODAL, - }; -} - -const linkTokenProps = makeLinkTokenProps("#GENERATED_LINK_TOKEN#"); -openLink(linkTokenProps); -``` - -#### OAuth requirements - -:warning: All integrations must use version 9.0.0 or later of the React Native SDK (requires version 4.1.0 or later of the iOS LinkKit SDK) to maintain support for Chase OAuth on iOS. - -##### Android OAuth Requirements - -###### Register your app package name -1. Log into your [Plaid Dashboard](https://dashboard.plaid.com/developers/api) and navigate to the API page under the Developers tab. -2. Next to Allowed Android package names click "Configure" then "Add New Android Package Name". -3. Enter your package name, for example `com.plaid.example`. -4. Click "Save Changes", you may be prompted to re-enter your password. - -##### iOS OAuth Requirements - -For iOS OAuth to work, specific requirements must be met. -1. Redirect URIs must be [registered](https://plaid.com/docs/link/ios/#register-your-redirect-uri), and set up as [universal links](https://developer.apple.com/documentation/xcode/supporting-associated-domains). -2. Your native iOS application, must be configured with your associated domain. See your iOS [set up universal links](https://plaid.com/docs/link/ios/#set-up-universal-links) for more information. - - -##### Link Token OAuth Requirements - -- On iOS you must configure your `link_token` with a [redirect_uri](https://plaid.com/docs/api/tokens/#link-token-create-request-redirect-uri) to support OAuth. When creating a `link_token` for initializing Link on Android, `android_package_name` must be specified and `redirect_uri` must be left blank. - -- On Android you must configure your `link_token` with an [android_package_name](https://plaid.com/docs/api/tokens/#link-token-create-request-android-package-name) to support OAuth. When creating a `link_token` for initializing Link on iOS, `android_package_name` must be left blank and `redirect_uri` should be used instead. - - -#### To receive onEvent callbacks: - -The React Native Plaid module emits `onEvent` events throughout the account linking process β€” see [details here](https://plaid.com/docs/link/react-native/#onevent). To receive these events in your React Native app, use the `usePlaidEmitter` hook in react functional components: - -```javascript - usePlaidEmitter((event: LinkEvent) => { - console.log(event) - }) -``` - -#### Clearing Previous Session State with `destroy()` - -The `destroy()` method clears state and resources from a previously opened session. -It's especially useful if you're seeing unexpected behavior when calling `create()` multiple times β€” for example, if the phone number isn't submitting properly after multiple `create()` calls. - -#### Problem scenario: -```ts -create(tokenConfiguration1) -create(tokenConfiguration2) -submit(phoneNumber) // <-- might not submit correctly -``` - -#### Solution: -```ts -create(tokenConfiguration1) -async () => { - try { - await destroy(); // Clear previous session state - create(tokenConfiguration2); - submit(phoneNumber); - } catch (e) { - console.error('Error during flow:', e); - } -} -``` - -By calling destroy() before the second create(), you ensure a clean state, preventing issues like failed phone number submissions. - -## Upgrading - -Plaid releases updates to the SDK approximately every few months. For the best user experience, we recommend using the latest version of the SDK. - -Major SDK versions are released annually. SDK versions are supported for two years; with each major SDK release, Plaid will stop officially supporting any previous SDK versions that are more than two years old. - -While these older versions are expected to continue to work without disruption, Plaid will not provide assistance with unsupported SDK versions. - -## Migration guides - -11.x->12.x: - - Removed the `PlaidLink` component and `openLink` function, which were deprecated in version 11.6.0. If you are using this method of opening Link, replace it with the new process that uses `create` and then `open`. For sample code, see [Version 11.6](https://github.com/plaid/react-native-plaid-link-sdk?tab=readme-ov-file#version--1160) or the [Plaid React Native Link docs](https://plaid.com/docs/link/react-native). - - Also see [Version compatibility table](#version-compatibility) for required toolchain updates. -9.x/10.x-> 11.x: See [React Native SDK 11 Migration Guide](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) - -If migrating from older versions, see the [docs](https://plaid.com/docs/link/react-native/#migration-guides) for more information. - -## Version compatibility - -| Plaid SDK Version | Min React Native Version | Android SDK | Android Min Version | Android Compile Version| iOS SDK | iOS Min Version | Status | -|-------------------|--------------------------|-------------|---------------------|------------------------|---------|-----------------|-------------------------------| -| 12.4.0 | * | [5.3.0+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.3.2 | * | [5.2.0+] | 21 | 34 | >=6.3.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.3.1 | * | [5.2.0+] | 21 | 34 | >=6.3.1 | 14.0 | **Deprecated** | -| 12.3.0 | * | [5.2.0+] | 21 | 34 | >=6.3.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.2.1 | * | [5.1.1+] | 21 | 34 | >=6.2.1 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.2.0 | * | [5.1.1+] | 21 | 34 | >=6.2.1 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.1.1 | * | [5.0.0+] | 21 | 34 | >=6.1.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.1.0 | * | [5.0.0+] | 21 | 34 | >=6.1.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.3 | * | [5.0.0+] | 21 | 34 | >=6.0.4 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.2 | * | [5.0.0+] | 21 | 34 | >=6.0.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.1 | * | [5.0.0+] | 21 | 34 | >=6.0.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.0 | * | [5.0.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.0-beta.3 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 15.3.0 | -| 12.0.0-beta.2 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 15.3.0 | -| 12.0.0-beta.1 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | **Deprecated** | -| 11.13.3 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.2 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.1 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.0 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.12.1 | * | [4.6.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.12.0 | * | [4.6.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.2 | * | [4.5.1+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.1 | * | [4.5.1+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.0 | * | [4.5.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.3 | * | [4.4.2+] | 21 | 34 | >=5.5.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.2 | * | [4.3.1+] | 21 | 34 | >=5.5.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.1 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.0 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.9.0 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.2 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.1 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.0 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.7.1 | * | [4.3.0+] | 21 | 34 | >=5.4.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.7.0 | * | [4.3.0+] | 21 | 34 | >=5.4.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.6.0 | * | [4.2.0+] | 21 | 34 | >=5.3.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.2 | * | [4.1.1+] | 21 | 34 | >=5.2.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.1 | * | [4.1.1+] | 21 | 34 | >=5.2.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.0 | * | [4.1.1+] | 21 | 34 | >=5.2.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.4.0 | * | [4.1.1+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.3.0 | * | [4.0.0+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| ~11.2.0~ | * | [4.1.0+] | 21 | 34 | >=5.1.0 | 14.0 | **Deprecated** | -| 11.1.0 | * | [4.0.0+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.3 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.2 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.1 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.0 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 10.13.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.2 | 11.0 | Active, supports Xcode 14 | -| 10.12.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | -| 10.11.0 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | -| ~10.10.0~ | >= 0.66.0 | [3.14.2+] | 21 | 33 | >=4.7.1 | 11.0 | **Deprecated** | -| 10.9.1 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.9.0 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.8.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.7.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.4 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.3 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.2 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Deprecated, supports Xcode 14 | -| 10.6.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Deprecated, supports Xcode 14 | -| 10.5.0 | >= 0.66.0 | [3.13.2+] | 21 | 33 | >=4.5.1 | 11.0 | Deprecated, supports Xcode 14 | -| 10.4.0 | >= 0.66.0 | [3.13.2+] | 21 | 33 | >=4.4.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.3.0 | >= 0.66.0 | [3.12.1+] | 21 | 33 | >=4.3.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.2.0 | >= 0.66.0 | [3.12.0+] | 21 | 33 | >=4.3.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.1.0 | >= 0.66.0 | [3.11.0+] | 21 | 33 | >=4.2.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.0.0 | >= 0.66.0 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.1.0 | >= 0.65.3 | [3.13.2+] | 21 | 33 | >=4.4.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.0.1 | >= 0.65.3 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.0.0 | >= 0.65.3 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | - - -## Contributing - -See the [contributor guidelines](CONTRIBUTING.md) to learn how to contribute to the repository. diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/build.gradle b/FabricExample/.yalc/react-native-plaid-link-sdk/android/build.gradle deleted file mode 100644 index 0119eccb..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/build.gradle +++ /dev/null @@ -1,111 +0,0 @@ -allprojects { - repositories { - mavenLocal() - mavenCentral() - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url "$rootDir/../node_modules/react-native/android" - } - google() - } -} - - -buildscript { - ext { - kotlin_version = '1.8.22' - } - ext.safeExtGet = {prop, fallback -> - rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback - } - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:8.1.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10' - } -} - -def isNewArchitectureEnabled() { - // To opt-in for the New Architecture, you can either: - // - Set `newArchEnabled` to true inside the `gradle.properties` file - // - Invoke gradle with `-newArchEnabled=true` - // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` - return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" -} - -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} - -apply plugin: 'com.android.library' -apply plugin: "kotlin-android" - -android { - - // Used to override the NDK path/version on internal CI or by allowing - // users to customize the NDK path/version from their root project (e.g. for M1 support) - if (rootProject.hasProperty("ndkPath")) { - ndkPath rootProject.ext.ndkPath - } - if (rootProject.hasProperty("ndkVersion")) { - ndkVersion rootProject.ext.ndkVersion - } - - def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger() - if (agpVersion >= 7) { - namespace 'com.plaid' - } - compileSdkVersion 34 - - defaultConfig { - minSdkVersion rootProject.ext.has("minSdkVersion") ? rootProject.ext.minSdkVersion : 21 - targetSdkVersion 34 - versionCode 1 - versionName "0.0.1" - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - } - lintOptions { - abortOnError false - } - - if (agpVersion < 8) { - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - } - - sourceSets.main { - java { - if (!isNewArchitectureEnabled()) { - srcDirs += 'src/paper/java' - } - } - } - - buildTypes { - release { - debuggable = false - } - debug { - debuggable = true - } - } -} - -repositories { - google() - mavenCentral() - maven { url "$rootDir/../node_modules/react-native/android" } -} - -dependencies { - implementation "com.facebook.react:react-native:+" - implementation "com.plaid.link:sdk-core:5.3.2" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle.properties b/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle.properties deleted file mode 100644 index ca0bd104..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle.properties +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2020 Plaid Technologies, Inc. -# - -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true -# Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official - -org.gradle.parallel=true -org.gradle.configureondemand=true - -# Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.99.0 diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.jar b/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f6b961fd..00000000 Binary files a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.properties b/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9c7cc56c..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Nov 09 09:41:09 PST 2023 -distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip -distributionPath=wrapper/dists -zipStorePath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew b/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew deleted file mode 100755 index a5202089..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew.bat b/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew.bat deleted file mode 100644 index 107acd32..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/AndroidManifest.xml b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/AndroidManifest.xml deleted file mode 100644 index 85b307a7..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/AndroidManifest.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultHandler.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultHandler.java deleted file mode 100644 index facbaabf..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.plaid; - -import android.content.Intent; - -public interface ActivityResultHandler { - void handleActivityResult(int requestCode, int resultCode, Intent data); -} \ No newline at end of file diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultManager.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultManager.java deleted file mode 100644 index ab6014dc..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/ActivityResultManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.plaid; - -import android.content.Intent; - -import java.util.HashMap; - -public class ActivityResultManager extends HashMap { - - public void dispatch(int requestCode, int resultCode, Intent data) { - ActivityResultHandler handler = get(requestCode); - if (handler != null) { - handler.handleActivityResult(requestCode, resultCode, data); - } - } -} \ No newline at end of file diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/GlobalFunctions.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/GlobalFunctions.kt deleted file mode 100644 index e1033082..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/GlobalFunctions.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.plaid - -import com.facebook.react.bridge.WritableArray -import com.facebook.react.bridge.WritableMap -import com.facebook.react.bridge.WritableNativeArray -import com.facebook.react.bridge.WritableNativeMap -import org.json.JSONArray -import org.json.JSONObject - -fun convertJsonToMap(jsonObject: JSONObject): WritableMap { - val map: WritableMap = WritableNativeMap() - val iterator = jsonObject.keys() - while (iterator.hasNext()) { - val key = iterator.next() - when (val value = jsonObject[key]) { - is JSONObject -> map.putMap(key, convertJsonToMap(value)) - is JSONArray -> map.putArray(key, convertJsonToArray(value)) - is Boolean -> map.putBoolean(key, value) - is Int -> map.putInt(key, value) - is Double -> map.putDouble(key, value) - is String -> map.putString(key, value) - else -> map.putString(key, value.toString()) - } - } - return map -} - -fun convertJsonToArray(jsonArray: JSONArray): WritableArray { - val array: WritableArray = WritableNativeArray() - for (i in 0 until jsonArray.length()) { - when (val value = jsonArray[i]) { - is JSONObject -> array.pushMap(convertJsonToMap(value)) - is JSONArray -> array.pushArray(convertJsonToArray(value)) - is Boolean -> array.pushBoolean(value) - is Int -> array.pushInt(value) - is Double -> array.pushDouble(value) - is String -> array.pushString(value) - else -> array.pushString(value.toString()) - } - } - return array -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedView.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedView.kt deleted file mode 100644 index 6a80de03..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedView.kt +++ /dev/null @@ -1,161 +0,0 @@ -package com.plaid - -import android.app.Application -import android.content.Context -import android.content.Intent -import android.util.AttributeSet -import android.util.Log -import android.view.View -import android.widget.FrameLayout -import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.NativeModule -import com.facebook.react.bridge.ReactContext -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.events.RCTEventEmitter -import com.plaid.gson.PlaidJsonConverter -import com.plaid.link.OpenPlaidLink -import com.plaid.link.Plaid.create -import com.plaid.link.Plaid.createLinkEmbeddedView -import com.plaid.link.Plaid.setLinkEventListener -import com.plaid.link.configuration.LinkTokenConfiguration -import com.plaid.link.configuration.LinkTokenConfiguration.Builder -import com.plaid.link.event.LinkEvent -import com.plaid.link.result.LinkExit -import com.plaid.link.result.LinkSuccess -import org.json.JSONException -import org.json.JSONObject - -class PLKEmbeddedView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null -) : FrameLayout(context, attrs), ActivityResultHandler { - private val themedReactContext: ThemedReactContext = context as ThemedReactContext - private val TAG = "EmbeddedSearch" - private val LINK_ACTIVITY_REQUEST_CODE = 3364 - private val EVENT_NAME = "OnEmbeddedEvent" - private val jsonConverter = PlaidJsonConverter() - - init { - inflate(context, R.layout.plk_embedded_view, this) - setupOnEventListener() - } - - fun setToken(token: String) { - val embeddedView = createEmbedded(token) - val frameLayout = findViewById(R.id.embedded_frame_layout) - frameLayout.addView(embeddedView) - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - val nativeModule: NativeModule? = themedReactContext.getNativeModule(PlaidModule::class.java) - if (nativeModule is PlaidModule) { - // Add our handler so we can get the callback result. - nativeModule.mActivityResultManager[LINK_ACTIVITY_REQUEST_CODE] = this - } - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - val nativeModule: NativeModule? = themedReactContext.getNativeModule(PlaidModule::class.java) - if (nativeModule is PlaidModule) { - // Remove the handler so the module can handle it. - nativeModule.mActivityResultManager.remove(LINK_ACTIVITY_REQUEST_CODE) - } - } - - private fun createEmbedded(token: String): View? { - val linkTokenConfiguration: LinkTokenConfiguration = Builder().token(token).build() - val activity = themedReactContext.currentActivity ?: return null - return createLinkEmbeddedView(activity, linkTokenConfiguration, { config: LinkTokenConfiguration? -> - val plaidHandler = create((themedReactContext.applicationContext as Application), config!!) - val currentActivity = themedReactContext.currentActivity - if (currentActivity != null) { - plaidHandler.open(currentActivity) - } - }) { linkExit: LinkExit -> - handleLinkExit(linkExit) - } - } - - private fun setupOnEventListener() { - setLinkEventListener { event: LinkEvent -> - try { - val jsonString = jsonConverter.convert(event) - val jsonObject = JSONObject(jsonString) - val eventMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - eventMap.putString("embeddedEventName", "onEvent") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, eventMap) - return@setLinkEventListener - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception: $e") - return@setLinkEventListener - } - } - } - - override fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent) { - if (requestCode == LINK_ACTIVITY_REQUEST_CODE) { - val openPlaidLink = OpenPlaidLink() - when (val linkResult = openPlaidLink.parseResult(resultCode, data)) { - is LinkSuccess -> { - try { - val jsonString = jsonConverter.convert(linkResult) - val jsonObject = JSONObject(jsonString) - val successMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - successMap.putString("embeddedEventName", "onSuccess") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, successMap) - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception parsing LinkSuccess") - sendLinkExitFrom(e) - } - } - is LinkExit -> { - handleLinkExit(linkResult) - } - else -> { - Log.e(TAG, "Unhandled LinkResult") - } - } - } - } - - private fun handleLinkExit(linkExit: LinkExit) { - try { - val jsonString = jsonConverter.convert(linkExit) - val jsonObject = JSONObject(jsonString) - val exitMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - exitMap.putString("embeddedEventName", "onExit") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, exitMap) - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception: $e") - sendLinkExitFrom(e) - } - } - - private fun sendLinkExitFrom(e: JSONException) { - val map = Arguments.createMap() - val errorMap = Arguments.createMap() - val exitMetadataMap = Arguments.createMap() - errorMap.putString("error_message", e.message) - errorMap.putString("json", e.message) - errorMap.putString("error_type", "JSONException") - errorMap.putInt("error_code", 499) - exitMetadataMap.putString("error_message", e.message) - exitMetadataMap.putString("json", e.message) - exitMetadataMap.putString("error_type", "JSONException") - exitMetadataMap.putInt("error_code", 499) - map.putString("eventName", "EXIT") - map.putMap("metadata", exitMetadataMap) - map.putMap("error", errorMap) - map.putString("embeddedEventName", "onExit") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, PLKEmbeddedViewManager.EVENT_NAME, map) - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt deleted file mode 100644 index bf443aa5..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.plaid - -import com.facebook.react.module.annotations.ReactModule -import com.facebook.react.uimanager.SimpleViewManager -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.ViewManagerDelegate -import com.facebook.react.uimanager.annotations.ReactProp -import com.facebook.react.viewmanagers.PLKEmbeddedViewManagerDelegate -import com.facebook.react.viewmanagers.PLKEmbeddedViewManagerInterface - -@ReactModule(name = PLKEmbeddedViewManager.REACT_CLASS) -class PLKEmbeddedViewManager : SimpleViewManager(), - PLKEmbeddedViewManagerInterface { - private val delegate: ViewManagerDelegate - - init { - delegate = PLKEmbeddedViewManagerDelegate(this) - } - - override fun getName(): String { - return REACT_CLASS - } - - public override fun createViewInstance(context: ThemedReactContext): PLKEmbeddedView { - return PLKEmbeddedView(context) - } - - @ReactProp(name = "token") - override fun setToken(view: PLKEmbeddedView, token: String?) { - view.setToken(token ?: "") - } - - override fun setIOSPresentationStyle(view: PLKEmbeddedView, value: String?) { - // Unsupported on Android - } - - override fun getExportedCustomBubblingEventTypeConstants(): Map { - return mutableMapOf( - EVENT_NAME to mutableMapOf( - "phasedRegistrationNames" to mutableMapOf( - "bubbled" to EVENT_NAME - ) - )) - } - - companion object { - const val REACT_CLASS = "PLKEmbeddedView" - const val EVENT_NAME = "onEmbeddedEvent" - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt deleted file mode 100644 index d1ca2ba9..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidModule.kt +++ /dev/null @@ -1,274 +0,0 @@ -package com.plaid - -import android.app.Activity -import android.app.Application -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.text.TextUtils -import android.util.Log -import com.facebook.react.bridge.ActivityEventListener -import com.facebook.react.bridge.Callback -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReactMethod -import com.facebook.react.module.annotations.ReactModule -import com.facebook.react.modules.core.DeviceEventManagerModule -import com.plaid.gson.PlaidJsonConverter -import com.plaid.link.Plaid -import com.plaid.link.PlaidHandler -import com.plaid.link.configuration.LinkLogLevel -import com.plaid.link.configuration.LinkTokenConfiguration -import com.plaid.link.event.LinkEvent -import com.plaid.link.exception.LinkException -import com.plaid.link.result.LinkResultHandler -import com.plaid.link.SubmissionData -import org.json.JSONException -import org.json.JSONObject -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit - -@ReactModule(name = PlaidModule.NAME) -class PlaidModule internal constructor(reactContext: ReactApplicationContext) : - NativePlaidLinkModuleAndroidSpec(reactContext), ActivityEventListener { - - val mActivityResultManager by lazy { ActivityResultManager() } - - private val jsonConverter by lazy { PlaidJsonConverter() } - - private var onSuccessCallback: Callback? = null - private var onExitCallback: Callback? = null - - private var plaidHandler: PlaidHandler? = null - - companion object { - private const val LINK_TOKEN_PREFIX = "link" - - const val NAME = "PlaidAndroid" - } - - override fun getName(): String { - return NAME - } - - override fun initialize() { - super.initialize() - reactApplicationContext.addActivityEventListener(this) - } - - override fun invalidate() { - super.invalidate() - reactApplicationContext.removeActivityEventListener(this) - } - - private fun getLinkTokenConfiguration( - token: String, - noLoadingState: Boolean, - logLevel: LinkLogLevel, - ): LinkTokenConfiguration? { - if (token == null) { - return null - } - - if (!token.startsWith(LINK_TOKEN_PREFIX)) { - return null - } - - val builder = LinkTokenConfiguration.Builder() - .token(token) - .logLevel(logLevel) - .noLoadingState(noLoadingState) - - return builder.build() - } - - @ReactMethod - override fun submit(phoneNumber: String?, dateOfBirth: String?) { - if (plaidHandler != null) { - val submissionData = SubmissionData( - phoneNumber = phoneNumber, - dateOfBirth = dateOfBirth - ) - plaidHandler?.submit(submissionData) - } - } - - @ReactMethod - override fun createPlaidLink( - token: String, - noLoadingState: Boolean, - logLevel: String, - ) { - val tokenConfiguration = getLinkTokenConfiguration(token, noLoadingState, getLogLevel(logLevel)) - if (tokenConfiguration == null) { - throw LinkException("Unable to open link, please check that your configuration is valid") - } - - // Set the event listener here instead of in open for Layer use cases. - try { - Plaid.setLinkEventListener { linkEvent: LinkEvent -> - var json = jsonConverter.convert(linkEvent) - val eventMap = convertJsonToMap(JSONObject(json)) - reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) - .emit("onEvent", eventMap) - } - } catch (ex: JSONException) { - Log.e("PlaidModule", ex.toString()) - throw ex - } - - // Create Plaid handler. - this.plaidHandler = Plaid.create( - reactApplicationContext.getApplicationContext() as Application, - tokenConfiguration - ) - } - - @ReactMethod - override fun open(onSuccessCallback: Callback, onExitCallback: Callback) { - val activity = currentActivity ?: throw IllegalStateException("Current activity is null") - - plaidHandler?.let { handler -> - // Work with nonNullValue here - this.onSuccessCallback = onSuccessCallback - this.onExitCallback = onExitCallback - handler.open(activity) - } ?: run { - // Handler is nil. - throw LinkException("Create must be called before open.") - } - } - - @ReactMethod - override fun destroy(promise: Promise) { - val latch = CountDownLatch(1) - - Handler(Looper.getMainLooper()).post { - try { - Plaid.destroy() - } catch (e: Exception) { - promise.reject("DESTROY_FAILED", "Failed to destroy Plaid", e) - latch.countDown() - return@post - } - latch.countDown() - } - - try { - // Wait for main-thread work to finish (max 5 seconds) - if (!latch.await(5, TimeUnit.SECONDS)) { - promise.reject("TIMEOUT", "Timed out waiting for destroy() to complete.") - } else { - promise.resolve(null) - } - } catch (e: InterruptedException) { - promise.reject("INTERRUPTED", "Thread was interrupted", e) - } - } - - - @ReactMethod - @Suppress("unused") - override fun startLinkActivityForResult( - token: String, - noLoadingState: Boolean, - logLevel: String, - onSuccessCallback: Callback, - onExitCallback: Callback - ) { - val activity = currentActivity ?: throw IllegalStateException("Current activity is null") - this.onSuccessCallback = onSuccessCallback - this.onExitCallback = onExitCallback - - try { - Plaid.setLinkEventListener { linkEvent: LinkEvent -> - var json = jsonConverter.convert(linkEvent) - val eventMap = convertJsonToMap(JSONObject(json)) - reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) - .emit("onEvent", eventMap) - } - - val tokenConfiguration = getLinkTokenConfiguration(token, noLoadingState, getLogLevel(logLevel)) - tokenConfiguration?.let { - Plaid.create( - reactApplicationContext.getApplicationContext() as Application, - it - ).open(activity) - return - } - - throw LinkException("Unable to open link, please check that your configuration is valid") - } catch (ex: JSONException) { - Log.e("PlaidModule", ex.toString()) - throw ex - } - } - - override fun addListener(eventName: String?) = Unit - - override fun removeListeners(count: Double) = Unit - - private fun maybeGetStringField(obj: JSONObject, fieldName: String): String? { - if (obj.has(fieldName) && !TextUtils.isEmpty(obj.getString(fieldName))) { - return obj.getString(fieldName) - } - return null - } - - private fun maybeGetBooleanField(obj: JSONObject, fieldName: String): Boolean? { - if (obj.has(fieldName)) { - return obj.getBoolean(fieldName); - } - return null - } - - private fun getLogLevel(string: String): LinkLogLevel { - when (string) { - "debug" -> return LinkLogLevel.DEBUG - "info" -> return LinkLogLevel.INFO - "warn" -> return LinkLogLevel.WARN - "error" -> return LinkLogLevel.ERROR - else -> { - return LinkLogLevel.ASSERT - } - } - } - - override fun onActivityResult( - activity: Activity, - requestCode: Int, - resultCode: Int, - data: Intent? - ) { - - // Dispath to embedded to handle the callback. - if (mActivityResultManager[requestCode] != null) { - mActivityResultManager.dispatch(requestCode, resultCode, data) - return - } - - val linkHandler = LinkResultHandler( - onSuccess = { success -> - val result = convertJsonToMap(JSONObject(jsonConverter.convert(success))) - print(result) - this.onSuccessCallback?.invoke(result) - }, - onExit = { exit -> - val result = convertJsonToMap(JSONObject(jsonConverter.convert(exit))) - print(result) - this.onExitCallback?.invoke(result) - } - ) - - if (linkHandler.onActivityResult(requestCode, resultCode, data)) { - return - } else { - Log.i("PlaidModule", "Result code not handled.") - } - return - } - - override fun onNewIntent(intent: Intent) { - // Do Nothing - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java deleted file mode 100644 index 7a259163..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/PlaidPackage.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.plaid; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.facebook.react.TurboReactPackage; -import com.facebook.react.ViewManagerOnDemandReactPackage; -import com.facebook.react.bridge.ModuleSpec; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.common.MapBuilder; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.module.annotations.ReactModuleList; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; -import com.facebook.react.uimanager.ViewManager; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Provider; - -@ReactModuleList(nativeModules = {PlaidModule.class}) -public class PlaidPackage extends TurboReactPackage implements ViewManagerOnDemandReactPackage { - - private @Nullable Map mViewManagers; - - private Map getViewManagersMap(final ReactApplicationContext reactContext) { - if (mViewManagers == null) { - Map specs = MapBuilder.newHashMap(); - specs.put( - PLKEmbeddedViewManager.REACT_CLASS, - ModuleSpec.viewManagerSpec( - new Provider() { - @Override - public NativeModule get() { - return new PLKEmbeddedViewManager(); - } - })); - mViewManagers = specs; - } - return mViewManagers; - } - - /** {@inheritDoc} */ - @Override - public List getViewManagerNames(ReactApplicationContext reactContext) { - return new ArrayList<>(getViewManagersMap(reactContext).keySet()); - } - - @Override - protected List getViewManagers(ReactApplicationContext reactContext) { - return new ArrayList<>(getViewManagersMap(reactContext).values()); - } - - /** {@inheritDoc} */ - @Override - public @Nullable ViewManager createViewManager( - ReactApplicationContext reactContext, String viewManagerName) { - ModuleSpec spec = getViewManagersMap(reactContext).get(viewManagerName); - return spec != null ? (ViewManager) spec.getProvider().get() : null; - } - - @Override - public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) { - switch (name) { - case PlaidModule.NAME: - return new PlaidModule(reactContext); - default: - return null; - } - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - try { - Class reactModuleInfoProviderClass = - Class.forName("com.plaid.PlaidPackage$$ReactModuleInfoProvider"); - return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); - } catch (ClassNotFoundException e) { - // ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by - // hand. - return new ReactModuleInfoProvider() { - @Override - public Map getReactModuleInfos() { - final Map reactModuleInfoMap = new HashMap<>(); - - Class[] moduleList = - new Class[]{ - PlaidModule.class, - }; - - for (Class moduleClass : moduleList) { - ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); - - reactModuleInfoMap.put( - reactModule.name(), - new ReactModuleInfo( - reactModule.name(), - moduleClass.getName(), - reactModule.canOverrideExistingModule(), - reactModule.needsEagerInit(), - reactModule.hasConstants(), - reactModule.isCxxModule(), - BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)); - } - - return reactModuleInfoMap; - } - }; - } catch (InstantiationException | IllegalAccessException e) { - throw new RuntimeException( - "No ReactModuleInfoProvider for com.plaid.PlaidPackage$$ReactModuleInfoProvider", e); - } - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt deleted file mode 100644 index f476cc7d..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.Gson -import com.google.gson.GsonBuilder -import com.plaid.internal.classic.networking.adapter.AccountSubtypeAdapter -import com.plaid.internal.classic.networking.adapter.AccountTypeAdapter -import com.plaid.internal.classic.networking.adapter.LinkAccountVerificationStatusAdapter -import com.plaid.internal.classic.networking.adapter.LinkEventNameAdapter -import com.plaid.internal.classic.networking.adapter.LinkEventViewNameAdapter -import com.plaid.internal.classic.networking.adapter.LinkExitMetadataStatusAdapter -import com.plaid.internal.classic.networking.adapter.PlaidErrorCodeAdapter -import com.plaid.internal.classic.networking.adapter.PlaidErrorTypeAdapter -import com.plaid.link.event.LinkEvent -import com.plaid.link.event.LinkEventMetadata -import com.plaid.link.event.LinkEventName -import com.plaid.link.event.LinkEventViewName -import com.plaid.link.result.LinkAccount -import com.plaid.link.result.LinkAccountSubtype -import com.plaid.link.result.LinkAccountType -import com.plaid.link.result.LinkAccountVerificationStatus -import com.plaid.link.result.LinkErrorCode -import com.plaid.link.result.LinkErrorType -import com.plaid.link.result.LinkExit -import com.plaid.link.result.LinkExitMetadataStatus -import com.plaid.link.result.LinkInstitution -import com.plaid.link.result.LinkSuccess - -class PlaidJsonConverter { - - private val gson: Gson by lazy { - GsonBuilder().apply { - this.registerTypeAdapter( - LinkAccount::class.java, - RNAccountAdapter() - ) - this.registerTypeAdapter( - LinkInstitution::class.java, - RNLinkInstitutionAdapter() - ) - this.registerTypeAdapter( - LinkAccountType::class.java, - AccountTypeAdapter() - ) - this.registerTypeAdapter( - LinkAccountSubtype::class.java, - AccountSubtypeAdapter() - ) - this.registerTypeAdapter( - LinkAccountVerificationStatus::class.java, - LinkAccountVerificationStatusAdapter() - ) - this.registerTypeAdapter( - LinkEventViewName::class.java, - LinkEventViewNameAdapter() - ) - this.registerTypeAdapter( - LinkEventName::class.java, - LinkEventNameAdapter() - ) - this.registerTypeAdapter( - LinkEventMetadata::class.java, - RNEventMetadataAdapter() - ) - this.registerTypeAdapter( - LinkErrorCode::class.java, - PlaidErrorCodeAdapter() - ) - this.registerTypeAdapter( - LinkErrorType::class.java, - PlaidErrorTypeAdapter() - ) - this.registerTypeAdapter( - LinkExitMetadataStatus::class.java, - LinkExitMetadataStatusAdapter() - ) - }.create() - } - - fun convert(linkSuccess: LinkSuccess): String { - return gson.toJson(linkSuccess) - } - - fun convert(linkExit: LinkExit): String { - return gson.toJson(linkExit) - } - - fun convert(linkEvent: LinkEvent): String { - return gson.toJson(linkEvent) - .replace("event_name", "event") - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt deleted file mode 100644 index 45a3665f..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.result.LinkAccount -import java.lang.reflect.Type - -class RNAccountAdapter : JsonSerializer { - - override fun serialize( - src: LinkAccount?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - addProperty("id", src.id) - addProperty("name", src.name) - src.mask?.let { - addProperty("mask", it) - } - src.verificationStatus?.let { status -> - context?.serialize(status)?.asJsonObject?.let { - addProperty("verification_status", it.get("json").asString) - addProperty("verificationStatus", it.get("json").asString) - } - } - - // Special handling around account subtype - val subtype = context?.serialize(src.subtype)?.asJsonObject - subtype?.let { - addProperty("type", it.get("accountType")?.asString) - addProperty("subtype", it.get("json")?.asString) - } - } - return obj - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt deleted file mode 100644 index 0c9f60cf..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt +++ /dev/null @@ -1,46 +0,0 @@ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.event.LinkEventMetadata -import java.lang.reflect.Type - -class RNEventMetadataAdapter : JsonSerializer { - - override fun serialize( - src: LinkEventMetadata?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - addProperty("errorType", src.errorType) - addProperty("errorCode", src.errorCode) - addProperty("errorMessage", src.errorMessage) - addProperty("exitStatus", src.exitStatus) - addProperty("institutionId", src.institutionId) - addProperty("institutionName", src.institutionName) - addProperty("institutionSearchQuery", src.institutionSearchQuery) - addProperty("accountNumberMask", src.accountNumberMask) - addProperty("isUpdateMode", src.isUpdateMode) - addProperty("matchReason", src.matchReason) - addProperty("routingNumber", src.routingNumber) - addProperty("selection", src.selection) - addProperty("linkSessionId", src.linkSessionId) - addProperty("mfaType", src.mfaType) - addProperty("requestId", src.requestId) - addProperty("issueId", src.issueId) - addProperty("timestamp", src.timestamp) - addProperty("viewName", src.viewName?.jsonValue ?: "") - addProperty("metadata_json", src.metadataJson) - } - return obj - } -} \ No newline at end of file diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt deleted file mode 100644 index d079b8b4..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.result.LinkInstitution -import java.lang.reflect.Type - -class RNLinkInstitutionAdapter : JsonSerializer { - - override fun serialize( - src: LinkInstitution?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - // Replace "institution_id" with "id" - addProperty("id", src.id) - // Replace "institution_name" with "id" - addProperty("name", src.name) - } - return obj - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/res/layout/plk_embedded_view.xml b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/res/layout/plk_embedded_view.xml deleted file mode 100644 index 457700bc..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/main/res/layout/plk_embedded_view.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java deleted file mode 100644 index 224c1f31..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java +++ /dev/null @@ -1,35 +0,0 @@ -/** -* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). -* -* Do not edit this file as changes may cause incorrect behavior and will be lost -* once the code is regenerated. -* -* @generated by codegen project: GeneratePropsJavaDelegate.js -*/ - -package com.facebook.react.viewmanagers; - -import android.view.View; -import androidx.annotation.Nullable; -import com.facebook.react.uimanager.BaseViewManagerDelegate; -import com.facebook.react.uimanager.BaseViewManager; -import com.facebook.react.uimanager.LayoutShadowNode; - -public class PLKEmbeddedViewManagerDelegate & PLKEmbeddedViewManagerInterface> extends BaseViewManagerDelegate { - public PLKEmbeddedViewManagerDelegate(U viewManager) { - super(viewManager); - } - @Override - public void setProperty(T view, String propName, @Nullable Object value) { - switch (propName) { - case "token": - mViewManager.setToken(view, value == null ? null : (String) value); - break; - case "iOSPresentationStyle": - mViewManager.setIOSPresentationStyle(view, value == null ? null : (String) value); - break; - default: - super.setProperty(view, propName, value); - } - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java deleted file mode 100644 index 45ee7ea3..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java +++ /dev/null @@ -1,18 +0,0 @@ -/** -* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). -* -* Do not edit this file as changes may cause incorrect behavior and will be lost -* once the code is regenerated. -* -* @generated by codegen project: GeneratePropsJavaInterface.js -*/ - -package com.facebook.react.viewmanagers; - -import android.view.View; -import androidx.annotation.Nullable; - -public interface PLKEmbeddedViewManagerInterface { - void setToken(T view, @Nullable String value); - void setIOSPresentationStyle(T view, @Nullable String value); -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java deleted file mode 100644 index ce06814a..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java +++ /dev/null @@ -1,63 +0,0 @@ - -/** - * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). - * - * Do not edit this file as changes may cause incorrect behavior and will be lost - * once the code is regenerated. - * - * @generated by codegen project: GenerateModuleJavaSpec.js - * - * @nolint - */ - -package com.plaid; - -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.turbomodule.core.interfaces.TurboModule; -import javax.annotation.Nonnull; - -public abstract class NativePlaidLinkModuleAndroidSpec extends ReactContextBaseJavaModule implements TurboModule { - public static final String NAME = "PlaidAndroid"; - - public NativePlaidLinkModuleAndroidSpec(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public @Nonnull String getName() { - return NAME; - } - - @ReactMethod - @DoNotStrip - public abstract void createPlaidLink(String token, boolean noLoadingState, String logLevel); - - @ReactMethod - @DoNotStrip - public abstract void open(Callback onSuccess, Callback onExit); - - @ReactMethod - @DoNotStrip - public abstract void destroy(Promise promise); - - @ReactMethod - @DoNotStrip - public abstract void startLinkActivityForResult(String token, boolean noLoadingState, String logLevel, Callback onSuccessCallback, Callback onExitCallback); - - @ReactMethod - @DoNotStrip - public abstract void submit(String phoneNumber, String dateOfBirth); - - @ReactMethod - @DoNotStrip - public abstract void addListener(String eventName); - - @ReactMethod - @DoNotStrip - public abstract void removeListeners(double count); -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java b/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java deleted file mode 100644 index dcf68f66..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java +++ /dev/null @@ -1,58 +0,0 @@ - -/** - * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). - * - * Do not edit this file as changes may cause incorrect behavior and will be lost - * once the code is regenerated. - * - * @generated by codegen project: GenerateModuleJavaSpec.js - * - * @nolint - */ - -package com.plaid; - -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.turbomodule.core.interfaces.TurboModule; -import javax.annotation.Nonnull; - -public abstract class NativePlaidLinkModuleiOSSpec extends ReactContextBaseJavaModule implements TurboModule { - public static final String NAME = "RNLinksdk"; - - public NativePlaidLinkModuleiOSSpec(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public @Nonnull String getName() { - return NAME; - } - - @ReactMethod - @DoNotStrip - public abstract void createPlaidLink(String token, boolean noLoadingState); - - @ReactMethod - @DoNotStrip - public abstract void open(boolean fullScreen, Callback onSuccess, Callback onExit); - - @ReactMethod - @DoNotStrip - public abstract void dismiss(); - - @ReactMethod - @DoNotStrip - public abstract void submit(String phoneNumber); - - @ReactMethod - @DoNotStrip - public abstract void addListener(String eventName); - - @ReactMethod - @DoNotStrip - public abstract void removeListeners(int count); -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.m b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.m deleted file mode 100644 index 01d3adfd..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.m +++ /dev/null @@ -1,7 +0,0 @@ -#import - -@interface RCT_EXTERN_MODULE(PLKEmbeddedViewManager, RCTViewManager) -RCT_EXPORT_VIEW_PROPERTY(token, NSString) -RCT_EXPORT_VIEW_PROPERTY(iOSPresentationStyle, NSString) -RCT_EXPORT_VIEW_PROPERTY(onEmbeddedEvent, RCTDirectEventBlock) -@end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.swift b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.swift deleted file mode 100644 index 141d2b36..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedView.swift +++ /dev/null @@ -1,116 +0,0 @@ -import LinkKit -import UIKit - -@objc public final class PLKEmbeddedView: UIView { - - // Properties exposed to React Native. - - @objc public var iOSPresentationStyle: String = "" { - didSet { - createNativeEmbeddedView() - } - } - - @objc public var token: String = "" { - didSet { - createNativeEmbeddedView() - } - } - - @objc public var onEmbeddedEvent: RCTDirectEventBlock? - - // MARK: Private - - private var linkHandler: Handler? - private let embeddedEventName: String = "embeddedEventName" - - private func makeHandler() throws -> Handler { - var config = LinkTokenConfiguration( - token: token, - onSuccess: { [weak self] success in - guard let self = self else { return } - - let plkLinkSuccess = success.toObjC - var dictionary = RNLinksdk.dictionary(from: plkLinkSuccess) ?? [:] - dictionary[self.embeddedEventName] = "onSuccess" - self.onEmbeddedEvent?(dictionary) - } - ) - - config.onEvent = { [weak self] event in - guard let self = self else { return } - - let plkLinkEvent = event.toObjC - var dictionary = RNLinksdk.dictionary(from: plkLinkEvent) ?? [:] - dictionary[self.embeddedEventName] = "onEvent" - self.onEmbeddedEvent?(dictionary) - } - - config.onExit = { [weak self] exit in - guard let self = self else { return } - - let plkLinkExit = exit.toObjC - var dictionary = RNLinksdk.dictionary(from: plkLinkExit) ?? [:] - dictionary[self.embeddedEventName] = "onExit" - self.onEmbeddedEvent?(dictionary) - } - - let handlerCreationResult = Plaid.create(config) - - switch handlerCreationResult { - case .failure(let error): - throw (error) - case .success(let handler): - return handler - } - } - - private func makeEmbeddedView(rctViewController: UIViewController, handler: Handler) -> UIView { - self.linkHandler = handler - - let presentationMethod: PresentationMethod - - if iOSPresentationStyle.uppercased() == "FULL_SCREEN" { - presentationMethod = .custom({ viewController in - viewController.modalPresentationStyle = .overFullScreen - viewController.modalTransitionStyle = .coverVertical - - rctViewController.present(viewController, animated: true) - }) - } else { - presentationMethod = .viewController(rctViewController) - } - - return handler.createEmbeddedView(presentUsing: presentationMethod) - } - - private func createNativeEmbeddedView() { - guard let rctViewController = RCTPresentedViewController() else { return } - guard !token.isEmpty, !iOSPresentationStyle.isEmpty, linkHandler == nil else { return } - - do { - let handler = try makeHandler() - let embeddedView = makeEmbeddedView(rctViewController: rctViewController, handler: handler) - setup(embeddedView: embeddedView) - } catch { - let dict: [String: Any] = [ - embeddedEventName: "onExit", - "error": "\(error)", - ] - - onEmbeddedEvent?(dict) - } - } - - private func setup(embeddedView: UIView) { - embeddedView.translatesAutoresizingMaskIntoConstraints = false - addSubview(embeddedView) - - NSLayoutConstraint.activate([ - embeddedView.topAnchor.constraint(equalTo: topAnchor), - embeddedView.leadingAnchor.constraint(equalTo: leadingAnchor), - embeddedView.trailingAnchor.constraint(equalTo: trailingAnchor), - embeddedView.bottomAnchor.constraint(equalTo: bottomAnchor), - ]) - } -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.h deleted file mode 100644 index 9cf089aa..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifdef RCT_NEW_ARCH_ENABLED - -#import -#import -#import - -NS_ASSUME_NONNULL_BEGIN - -/** - * This file is required for compatibility with React Native's New Architecture (Fabric Renderer). - * - * - PLKEmbeddedViewComponentView extends `RCTViewComponentView` to define a custom native view - * that works with the Fabric rendering system, improving UI performance and concurrency. - * - The `#ifdef RCT_NEW_ARCH_ENABLED` directive ensures this code is only compiled when the - * New Architecture is enabled, avoiding compatibility issues with older architectures. - * - Custom native views like this are essential when integrating UIKit-based components into - * React Native apps under the New Architecture. - * - `RCTUIManager` handles the interaction between the native view and the React Native bridge, - * enabling updates and commands from the JavaScript side. - * - * Ref - https://github.com/reactwg/react-native-new-architecture/blob/main/docs/backwards-compat-turbo-modules.md - */ -@interface PLKEmbeddedViewComponentView : RCTViewComponentView -@end - -NS_ASSUME_NONNULL_END - -#endif // RCT_NEW_ARCH_ENABLED diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.mm b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.mm deleted file mode 100644 index 155deda7..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewComponentView.mm +++ /dev/null @@ -1,91 +0,0 @@ -#ifdef RCT_NEW_ARCH_ENABLED - -#import "PLKEmbeddedViewComponentView.h" -#import "PLKFabricHelpers.h" - -#import -#import -#import - -#import -#import -#import -#import - -using namespace facebook::react; - -@implementation PLKEmbeddedViewComponentView { - PLKEmbeddedView *_view; -} - -// Needed because of this: https://github.com/facebook/react-native/pull/37274 -+ (void)load -{ - [super load]; -} - -- (instancetype)initWithFrame:(CGRect)frame -{ - if (self = [super initWithFrame:frame]) { - static const auto defaultProps = std::make_shared(); - _props = defaultProps; - [self prepareView]; - } - - return self; -} - -- (void)prepareView -{ - _view = [[PLKEmbeddedView alloc] init]; - - __weak __typeof__(self) weakSelf = self; - - [_view setOnEmbeddedEvent:^(NSDictionary* event) { - __typeof__(self) strongSelf = weakSelf; - - if (strongSelf != nullptr && strongSelf->_eventEmitter != nullptr) { - std::dynamic_pointer_cast(strongSelf->_eventEmitter)->onEmbeddedEvent({ - .embeddedEventName = RCTStringFromNSString(event[@"embeddedEventName"]), - .eventName = RCTStringFromNSString(event[@"eventName"]), - .error = PLKConvertIdToFollyDynamic(event[@"error"]), - .publicToken = RCTStringFromNSString(event[@"publicToken"]), - .metadata = PLKConvertIdToFollyDynamic(event[@"metadata"]), - }); - } - }]; - self.contentView = _view; -} - -#pragma mark - RCTComponentViewProtocol - -+ (ComponentDescriptorProvider)componentDescriptorProvider -{ - return concreteComponentDescriptorProvider(); -} - - -- (void)updateProps:(const Props::Shared &)props oldProps:(const Props::Shared &)oldProps -{ - const auto &newProps = static_cast(*props); - _view.token = RCTNSStringFromStringNilIfEmpty(newProps.token); - _view.iOSPresentationStyle = RCTNSStringFromStringNilIfEmpty(newProps.token); - - [super updateProps:props oldProps:oldProps]; -} - -- (void)prepareForRecycle -{ - [super prepareForRecycle]; - [self prepareView]; -} - - -@end - -Class PLKEmbeddedViewCls(void) -{ - return PLKEmbeddedViewComponentView.class; -} - -#endif // RCT_NEW_ARCH_ENABLED diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewManager.swift b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewManager.swift deleted file mode 100644 index 49e99d66..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKEmbeddedViewManager.swift +++ /dev/null @@ -1,14 +0,0 @@ -import Foundation - -@objc(PLKEmbeddedViewManager) -class PLKEmbeddedViewManager: RCTViewManager { - - override static func requiresMainQueueSetup() -> Bool { - return true - } - - override func view() -> UIView! { - return PLKEmbeddedView() - } - -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKFabricHelpers.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKFabricHelpers.h deleted file mode 100644 index a3c62eae..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/PLKFabricHelpers.h +++ /dev/null @@ -1,116 +0,0 @@ -#import -#import -#import - -// This block checks for the appropriate header file inclusion for the Plaid Link SDK. -// It handles various project configurations such as the presence of `USE_FRAMEWORKS` -// and whether the new architecture (`RCT_NEW_ARCH_ENABLED`) is enabled. - -#if __has_include() -// If the header file is available under the rnplaidlink module, include it. -// This is typically the case when the module is structured with this specific header path. -#import - -#else -// If the header is not found at the above path, check for other configurations. -#if defined(RCT_NEW_ARCH_ENABLED) && defined(USE_FRAMEWORKS) -// Include the header for projects with the new React Native architecture and `use_frameworks!` enabled. -// This path supports modular builds with frameworks. -#import - -#else -#if __has_include() -// Include the header for projects using frameworks (`use_frameworks!` in the Podfile). -// Frameworks are being used (static or dynamic). -#import - -#else -// Default to including the header directly for non-framework builds. -#import -#endif -#endif -#endif - -/* - - ### Notes for Developers: If you experience a compiler error above! - - 1. If you're using frameworks - Ensure your pods are installed with the `USE_FRAMEWORKS=1` environment variable: - USE_FRAMEWORKS=1 bundle exec pod install - - 2. Verify that your `Podfile` includes either: - use_frameworks! :linkage => :dynamic - or - use_frameworks! :linkage => :static - - 3. Refer to these GitHub issues for more details: - - https://github.com/plaid/react-native-plaid-link-sdk/issues/713 - - https://github.com/plaid/react-native-plaid-link-sdk/issues/732 - - https://github.com/plaid/react-native-plaid-link-sdk/issues/747 - - ### Troubleshooting: - - If `USE_FRAMEWORKS` is not working, ensure it is correctly passed as a preprocessor macro in your Xcode build settings. - - For new architecture projects, confirm `RCT_NEW_ARCH_ENABLED` is properly set in your environment. - */ - - -// copied from RCTFollyConvert -folly::dynamic PLKConvertIdToFollyDynamic(id json) -{ - if (json == nil || json == (id)kCFNull) { - return nullptr; - } else if ([json isKindOfClass:[NSNumber class]]) { - const char *objCType = [json objCType]; - switch (objCType[0]) { - // This is a c++ bool or C99 _Bool. On some platforms, BOOL is a bool. - case _C_BOOL: - return (bool)[json boolValue]; - case _C_CHR: - // On some platforms, objc BOOL is a signed char, but it - // might also be a small number. Use the same hack JSC uses - // to distinguish them: - // https://phabricator.intern.facebook.com/diffusion/FBS/browse/master/fbobjc/xplat/third-party/jsc/safari-600-1-4-17/JavaScriptCore/API/JSValue.mm;b8ee03916489f8b12143cd5c0bca546da5014fc9$901 - if ([json isKindOfClass:[@YES class]]) { - return (bool)[json boolValue]; - } else { - return [json longLongValue]; - } - case _C_UCHR: - case _C_SHT: - case _C_USHT: - case _C_INT: - case _C_UINT: - case _C_LNG: - case _C_ULNG: - case _C_LNG_LNG: - case _C_ULNG_LNG: - return [json longLongValue]; - - case _C_FLT: - case _C_DBL: - return [json doubleValue]; - - // default: - // fall through - } - } else if ([json isKindOfClass:[NSString class]]) { - NSData *data = [json dataUsingEncoding:NSUTF8StringEncoding]; - return std::string(reinterpret_cast(data.bytes), data.length); - } else if ([json isKindOfClass:[NSArray class]]) { - folly::dynamic array = folly::dynamic::array; - for (id element in json) { - array.push_back(PLKConvertIdToFollyDynamic(element)); - } - return array; - } else if ([json isKindOfClass:[NSDictionary class]]) { - __block folly::dynamic object = folly::dynamic::object(); - - [json enumerateKeysAndObjectsUsingBlock:^(NSString *key, NSString *value, __unused BOOL *stop) { - object.insert(PLKConvertIdToFollyDynamic(key), PLKConvertIdToFollyDynamic(value)); - }]; - - return object; - } - - return nil; -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk-Bridging-Header.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk-Bridging-Header.h deleted file mode 100644 index 45d7beea..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk-Bridging-Header.h +++ /dev/null @@ -1,8 +0,0 @@ -#import -#import -#import -#import -#import -#import - -#import "RNLinksdk.h" diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.h deleted file mode 100644 index 035b91ce..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.h +++ /dev/null @@ -1,19 +0,0 @@ -#ifdef RCT_NEW_ARCH_ENABLED -#import -#endif -#import -#import "RCTEventEmitter.h" - -#import - -@interface RNLinksdk : RCTEventEmitter -#ifdef RCT_NEW_ARCH_ENABLED - -#else - -#endif - -+ (NSDictionary *)dictionaryFromSuccess:(PLKLinkSuccess *)success; -+ (NSDictionary *)dictionaryFromEvent:(PLKLinkEvent *)event; -+ (NSDictionary *)dictionaryFromExit:(PLKLinkExit *)exit; -@end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.mm b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.mm deleted file mode 100644 index dce2bb42..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNLinksdk.mm +++ /dev/null @@ -1,716 +0,0 @@ -#import "RNLinksdk.h" -#import "RNPlaidHelper.h" - -#import -#import -#import -#import - -static NSString* const kRNLinkKitOnEventEvent = @"onEvent"; -static NSString* const kRNLinkKitEventErrorKey = @"error"; -static NSString* const kRNLinkKitEventNameKey = @"event"; -static NSString* const kRNLinkKitEventMetadataKey = @"metadata"; -static NSString* const kRNLinkKitVersionConstant = @"version"; - -@interface RNLinksdk () -@property (nonatomic, strong) id linkHandler; -@property (nonatomic, strong) UIViewController* presentingViewController; -@property (nonatomic, strong) RCTResponseSenderBlock successCallback; -@property (nonatomic, strong) RCTResponseSenderBlock exitCallback; -@property (nonatomic, assign) BOOL hasObservers; -@property (nonatomic, copy) NSString *institutionID; -@property (nonatomic, nullable, strong) NSError *creationError; -@end - - -@implementation RNLinksdk - -RCT_EXPORT_MODULE(); - -+ (NSString*)sdkVersion { - return @"12.5.0"; // SDK_VERSION -} - -+ (NSString*)objCBridgeVersion { - return @"2.0.0"; -} - -+ (BOOL)requiresMainQueueSetup -{ - // Because LinkKit relies on UIKit. - return YES; -} - -- (dispatch_queue_t)methodQueue -{ - return dispatch_get_main_queue(); -} - -- (NSArray *)supportedEvents -{ - return @[kRNLinkKitOnEventEvent]; -} - -- (NSDictionary *)constantsToExport { - return @{ - kRNLinkKitVersionConstant: [NSString stringWithFormat:@"%s+%.0f", LinkKitVersionString, LinkKitVersionNumber], - }; -} - -- (void)startObserving { - self.hasObservers = YES; - [super startObserving]; -} - -- (void)stopObserving { - [super stopObserving]; - self.hasObservers = NO; -} - -RCT_EXPORT_METHOD(createPlaidLink:(NSString*)token noLoadingState:(BOOL)noLoadingState) { - __weak RNLinksdk *weakSelf = self; - - void (^onSuccess)(PLKLinkSuccess *) = ^(PLKLinkSuccess *success) { - RNLinksdk *strongSelf = weakSelf; - - if (strongSelf.successCallback) { - NSDictionary *jsMetadata = [RNLinksdk dictionaryFromSuccess:success]; - strongSelf.successCallback(@[jsMetadata]); - strongSelf.successCallback = nil; - } - }; - - void (^onExit)(PLKLinkExit *) = ^(PLKLinkExit *exit) { - RNLinksdk *strongSelf = weakSelf; - - if (strongSelf.exitCallback) { - NSDictionary *exitMetadata = [RNLinksdk dictionaryFromExit:exit]; - if (exit.error) { - strongSelf.exitCallback(@[exitMetadata[@"error"], exitMetadata]); - } else { - strongSelf.exitCallback(@[[NSNull null], exitMetadata]); - } - strongSelf.exitCallback = nil; - strongSelf.linkHandler = nil; - } - }; - - void (^onEvent)(PLKLinkEvent *) = ^(PLKLinkEvent *event) { - RNLinksdk *strongSelf = weakSelf; - if (strongSelf.hasObservers) { - NSDictionary *eventDictionary = [RNLinksdk dictionaryFromEvent:event]; - [strongSelf sendEventWithName:kRNLinkKitOnEventEvent - body:eventDictionary]; - - // If this is the HANDOFF event. - if (event.eventName.value == PLKEventNameValueHandoff) { - // If we have dismissed Link. - if (strongSelf.presentingViewController == nil) { - // Deallocate the handler it's no longer needed. - strongSelf.linkHandler = nil; - } - } - } - }; - - PLKLinkTokenConfiguration *config = [PLKLinkTokenConfiguration createWithToken:token onSuccess:onSuccess]; - config.onEvent = onEvent; - config.onExit = onExit; - config.noLoadingState = noLoadingState; - - NSError *creationError = nil; - self.linkHandler = [RNPlaidHelper createWithLinkTokenConfiguration:config error:&creationError]; - self.creationError = creationError; -} - -RCT_EXPORT_METHOD(open:(BOOL)fullScreen onSuccess:(RCTResponseSenderBlock)onSuccess onExit:(RCTResponseSenderBlock)onExit) { - if (self.linkHandler) { - self.successCallback = onSuccess; - self.exitCallback = onExit; - self.presentingViewController = RCTPresentedViewController(); - - // Some link flows do not need to present UI, so track if presentation happened so dismissal isn't - // unnecessarily invoked. - __block bool didPresent = NO; - - __weak RNLinksdk *weakSelf = self; - void(^presentationHandler)(UIViewController *) = ^(UIViewController *linkViewController) { - - if (fullScreen) { - [linkViewController setModalPresentationStyle:UIModalPresentationOverFullScreen]; - [linkViewController setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; - } - - [weakSelf.presentingViewController presentViewController:linkViewController animated:YES completion:nil]; - didPresent = YES; - }; - void(^dismissalHandler)(UIViewController *) = ^(UIViewController *linkViewController) { - if (didPresent) { - [weakSelf dismiss]; - didPresent = NO; - } - }; - [self.linkHandler openWithPresentationHandler:presentationHandler dismissalHandler:dismissalHandler]; - } else { - NSString *errorMessage = self.creationError ? self.creationError.userInfo[@"message"] : @"Create was not called."; - NSString *errorCode = self.creationError ? [@(self.creationError.code) stringValue] : @"-1"; - - NSDictionary *linkExit = @{ - @"displayMessage": errorMessage, - @"errorCode": errorCode, - @"errorType": @"creation error", - @"errorMessage": errorMessage, - @"errorDisplayMessage": errorMessage, - @"errorJson": [NSNull null], - @"metadata": @{ - @"linkSessionId": [NSNull null], - @"institution": [NSNull null], - @"status": [NSNull null], - @"requestId": [NSNull null], - @"metadataJson": [NSNull null], - }, - }; - - onExit(@[linkExit]); - } -} - -RCT_EXPORT_METHOD(dismiss) { - [self.presentingViewController dismissViewControllerAnimated:YES - completion:nil]; - self.presentingViewController = nil; -} - -RCT_EXPORT_METHOD(syncFinanceKit:(NSString *)token - requestAuthorizationIfNeeded:(BOOL)requestAuthorizationIfNeeded - simulatedBehavior:(BOOL)simulatedBehavior - onSuccess:(RCTResponseSenderBlock)onSuccess - onError:(RCTResponseSenderBlock)onError) { - - [RNPlaidHelper syncFinanceKit:token - requestAuthorizationIfNeeded:requestAuthorizationIfNeeded - simulatedBehavior: simulatedBehavior - onSuccess:^{ - onSuccess(@[]); - } - onError:^(NSError *error) { - - NSDictionary *financeKitError = @{ - @"type": [NSNumber numberWithInteger: error.code], - @"message": error.localizedDescription - }; - - onError(@[financeKitError]); - } - ]; -} - -RCT_EXPORT_METHOD(submit:(NSString * _Nullable)phoneNumber dateOfBirth:(NSString * _Nullable)dateOfBirth) { - if (self.linkHandler) { - PLKSubmissionData *submissionData = [[PLKSubmissionData alloc] init]; - submissionData.phoneNumber = phoneNumber; - submissionData.dateOfBirth = dateOfBirth; - [self.linkHandler submit:submissionData]; - } -} - -#pragma mark - Bridging - -+ (PLKEnvironment)environmentFromString:(NSString *)string { - if ([string isEqualToString:@"production"]) { - return PLKEnvironmentProduction; - } - - if ([string isEqualToString:@"sandbox"]) { - return PLKEnvironmentSandbox; - } - - // Default to Sandbox - NSLog(@"Unexpected environment string value: %@. Expected one of: production, sandbox.", string); - return PLKEnvironmentSandbox; -} - -+ (NSDictionary *)dictionaryFromSuccess:(PLKLinkSuccess *)success { - PLKSuccessMetadata *metadata = success.metadata; - - return @{ - @"publicToken": success.publicToken ?: @"", - @"metadata": @{ - @"linkSessionId": metadata.linkSessionID ?: @"", - @"institution": [self dictionaryFromInstitution:metadata.institution] ?: @"", - @"accounts": [self accountsDictionariesFromAccounts:metadata.accounts] ?: @"", - @"metadataJson": metadata.metadataJSON ?: @"", - }, - }; -} - -+ (NSArray *)accountsDictionariesFromAccounts:(NSArray *)accounts { - NSMutableArray *results = [NSMutableArray arrayWithCapacity:accounts.count]; - - for (PLKAccount *account in accounts) { - NSDictionary *accountDictionary = [self dictionaryFromAccount:account]; - [results addObject:accountDictionary]; - } - return [results copy]; -} - -+ (NSDictionary *)dictionaryFromAccount:(PLKAccount *)account { - return @{ - @"id": account.ID ?: @"", - @"name": account.name ?: @"", - @"mask": account.mask ?: @"", - @"subtype": [self subtypeNameForAccountSubtype:account.subtype] ?: @"", - @"type": [self typeNameForAccountSubtype:account.subtype] ?: @"", - @"verificationStatus": [self stringForVerificationStatus:account.verificationStatus] ?: @"", - }; -} - -+ (NSString *)stringForVerificationStatus:(PLKVerificationStatus *)verificationStatus { - if (!verificationStatus) { - return @""; - } - - if (verificationStatus.unknownStringValue) { - return verificationStatus.unknownStringValue; - } - - switch (verificationStatus.value) { - case PLKVerificationStatusValueNone: - return @""; - case PLKVerificationStatusValuePendingAutomaticVerification: - return @"pending_automatic_verification"; - case PLKVerificationStatusValuePendingManualVerification: - return @"pending_manual_verification"; - case PLKVerificationStatusValueManuallyVerified: - return @"manually_verified"; - } - - return @"unknown"; -} - -+ (NSString *)typeNameForAccountSubtype:(id)accountSubtype { - if ([accountSubtype isKindOfClass:[PLKAccountSubtypeUnknown class]]) { - return ((PLKAccountSubtypeUnknown *)accountSubtype).rawStringValue; - } else if ([accountSubtype isKindOfClass:[PLKAccountSubtypeOther class]]) { - return @"other"; - } else if ([accountSubtype isKindOfClass:[PLKAccountSubtypeCredit class]]) { - return @"credit"; - } else if ([accountSubtype isKindOfClass:[PLKAccountSubtypeLoan class]]) { - return @"loan"; - } else if ([accountSubtype isKindOfClass:[PLKAccountSubtypeDepository class]]) { - return @"depository"; - } else if ([accountSubtype isKindOfClass:[PLKAccountSubtypeInvestment class]]) { - return @"investment"; - } - return @"unknown"; -} - -+ (NSString *)subtypeNameForAccountSubtype:(id)accountSubtype { - if ([accountSubtype isKindOfClass:[PLKAccountSubtypeUnknown class]]) { - return ((PLKAccountSubtypeUnknown *)accountSubtype).rawSubtypeStringValue; - } - return accountSubtype.rawStringValue; -} - -+ (NSDictionary *)dictionaryFromInstitution:(PLKInstitution *)institution { - return @{ - @"name": institution.name ?: @"", - @"id": institution.ID ?: @"", - }; -} - -+ (NSDictionary *)dictionaryFromError:(PLKExitError *)error { - return @{ - @"errorType": [self errorTypeStringFromError:error] ?: @"", - @"errorCode": [self errorCodeStringFromError:error] ?: @"", - @"errorMessage": [self errorMessageFromError:error] ?: @"", - // errorDisplayMessage is the deprecated name for displayMessage, both have to be populated - // until errorDisplayMessage is fully removed to avoid breaking the API - @"errorDisplayMessage": [self errorDisplayMessageFromError:error] ?: @"", - @"displayMessage": [self errorDisplayMessageFromError:error] ?: @"", - }; -} - -+ (NSDictionary *)dictionaryFromEvent:(PLKLinkEvent *)event { - PLKEventMetadata *metadata = event.eventMetadata; - - return @{ - @"eventName": [self stringForEventName:event.eventName] ?: @"", - @"metadata": @{ - @"errorType": [self errorTypeStringFromError:metadata.error] ?: @"", - @"errorCode": [self errorCodeStringFromError:metadata.error] ?: @"", - @"errorMessage": [self errorMessageFromError:metadata.error] ?: @"", - @"exitStatus": [self stringForExitStatus:metadata.exitStatus] ?: @"", - @"institutionId": metadata.institutionID ?: @"", - @"institutionName": metadata.institutionName ?: @"", - @"institutionSearchQuery": metadata.institutionSearchQuery ?: @"", - @"accountNumberMask": metadata.accountNumberMask ?: @"", - @"isUpdateMode": metadata.isUpdateMode ?: @"", - @"matchReason": metadata.matchReason ?: @"", - @"routingNumber": metadata.routingNumber ?: @"", - @"selection": metadata.selection ?: @"", - @"linkSessionId": metadata.linkSessionID ?: @"", - @"mfaType": [self stringForMfaType:metadata.mfaType] ?: @"", - @"requestId": metadata.requestID ?: @"", - @"issueId": metadata.issueID ?: @"", - @"timestamp": [self iso8601StringFromDate:metadata.timestamp] ?: @"", - @"viewName": [self stringForViewName:metadata.viewName] ?: @"", - @"metadata_json": metadata.metadataJSON ?: @"", - }, - }; -} - -+ (NSString *)errorDisplayMessageFromError:(PLKExitError *)error { - return error.userInfo[kPLKExitErrorDisplayMessageKey] ?: @""; -} - -+ (NSString *)errorTypeStringFromError:(PLKExitError *)error { - NSString *errorDomain = error.domain; - if (!error || !errorDomain) { - return @""; - } - - NSString *normalizedErrorDomain = errorDomain; - - return @{ - kPLKExitErrorInvalidRequestDomain: @"INVALID_REQUEST", - kPLKExitErrorInvalidInputDomain: @"INVALID_INPUT", - kPLKExitErrorInstitutionErrorDomain: @"INSTITUTION_ERROR", - kPLKExitErrorRateLimitExceededDomain: @"RATE_LIMIT_EXCEEDED", - kPLKExitErrorApiDomain: @"API_ERROR", - kPLKExitErrorItemDomain: @"ITEM_ERROR", - kPLKExitErrorAuthDomain: @"AUTH_ERROR", - kPLKExitErrorAssetReportDomain: @"ASSET_REPORT_ERROR", - kPLKExitErrorInternalDomain: @"INTERNAL", - kPLKExitErrorUnknownDomain: error.userInfo[kPLKExitErrorUnknownTypeKey] ?: @"UNKNOWN", - }[normalizedErrorDomain] ?: @"UNKNOWN"; -} - -+ (NSString *)errorCodeStringFromError:(PLKExitError *)error { - NSString *errorDomain = error.domain; - - if (!error || !errorDomain) { - return @""; - } - return error.userInfo[kPLKExitErrorCodeKey]; -} - -+ (NSString *)errorMessageFromError:(PLKExitError *)error { - return error.userInfo[kPLKExitErrorMessageKey] ?: @""; -} - -+ (NSString *)stringForEventName:(PLKEventName *)eventName { - if (!eventName) { - return @""; - } - - if (eventName.unknownStringValue) { - return eventName.unknownStringValue; - } - - switch (eventName.value) { - case PLKEventNameValueNone: - return @""; - case PLKEventNameValueBankIncomeInsightsCompleted: - return @"BANK_INCOME_INSIGHTS_COMPLETED"; - case PLKEventNameValueCloseOAuth: - return @"CLOSE_OAUTH"; - case PLKEventNameValueError: - return @"ERROR"; - case PLKEventNameValueExit: - return @"EXIT"; - case PLKEventNameValueFailOAuth: - return @"FAIL_OAUTH"; - case PLKEventNameValueHandoff: - return @"HANDOFF"; - case PLKEventNameValueIdentityVerificationStartStep: - return @"IDENTITY_VERIFICATION_START_STEP"; - case PLKEventNameValueIdentityVerificationPassStep: - return @"IDENTITY_VERIFICATION_PASS_STEP"; - case PLKEventNameValueIdentityVerificationFailStep: - return @"IDENTITY_VERIFICATION_FAIL_STEP"; - case PLKEventNameValueIdentityVerificationPendingReviewStep: - return @"IDENTITY_VERIFICATION_PENDING_REVIEW_STEP"; - case PLKEventNameValueIdentityVerificationCreateSession: - return @"IDENTITY_VERIFICATION_CREATE_SESSION"; - case PLKEventNameValueIdentityVerificationResumeSession: - return @"IDENTITY_VERIFICATION_RESUME_SESSION"; - case PLKEventNameValueIdentityVerificationPassSession: - return @"IDENTITY_VERIFICATION_PASS_SESSION"; - case PLKEventNameValueIdentityVerificationFailSession: - return @"IDENTITY_VERIFICATION_FAIL_SESSION"; - case PLKEventNameValueIdentityVerificationOpenUI: - return @"IDENTITY_VERIFICATION_OPEN_UI"; - case PLKEventNameValueIdentityVerificationResumeUI: - return @"IDENTITY_VERIFICATION_RESUME_UI"; - case PLKEventNameValueIdentityVerificationCloseUI: - return @"IDENTITY_VERIFICATION_CLOSE_UI"; - case PLKEventNameValueMatchedSelectInstitution: - return @"MATCHED_SELECT_INSTITUTION"; - case PLKEventNameValueMatchedSelectVerifyMethod: - return @"MATCHED_SELECT_VERIFY_METHOD"; - case PLKEventNameValueOpen: - return @"OPEN"; - case PLKEventNameValueOpenMyPlaid: - return @"OPEN_MY_PLAID"; - case PLKEventNameValueOpenOAuth: - return @"OPEN_OAUTH"; - case PLKEventNameValueProfileEligibilityCheckReady: - return @"PROFILE_ELIGIBILITY_CHECK_READY"; - case PLKEventNameValueProfileEligibilityCheckError: - return @"PROFILE_ELIGIBILITY_CHECK_ERROR"; - case PLKEventNameValueSearchInstitution: - return @"SEARCH_INSTITUTION"; - case PLKEventNameValueSelectDegradedInstitution: - return @"SELECT_DEGRADED_INSTITUTION"; - case PLKEventNameValueSelectDownInstitution: - return @"SELECT_DOWN_INSTITUTION"; - case PLKEventNameValueSelectInstitution: - return @"SELECT_INSTITUTION"; - case PLKEventNameValueSubmitCredentials: - return @"SUBMIT_CREDENTIALS"; - case PLKEventNameValueSubmitMFA: - return @"SUBMIT_MFA"; - case PLKEventNameValueTransitionView: - return @"TRANSITION_VIEW"; - case PLKEventNameValueIdentityVerificationPendingReviewSession: - return @"IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION"; - case PLKEventNameValueSelectFilteredInstitution: - return @"SELECT_FILTERED_INSTITUTION"; - case PLKEventNameValueSelectBrand: - return @"SELECT_BRAND"; - case PLKEventNameValueSelectAuthType: - return @"SELECT_AUTH_TYPE"; - case PLKEventNameValueSubmitAccountNumber: - return @"SUBMIT_ACCOUNT_NUMBER"; - case PLKEventNameValueSubmitDocuments: - return @"SUBMIT_DOCUMENTS"; - case PLKEventNameValueSubmitDocumentsSuccess: - return @"SUBMIT_DOCUMENTS_SUCCESS"; - case PLKEventNameValueSubmitDocumentsError: - return @"SUBMIT_DOCUMENTS_ERROR"; - case PLKEventNameValueSubmitRoutingNumber: - return @"SUBMIT_ROUTING_NUMBER"; - case PLKEventNameValueViewDataTypes: - return @"VIEW_DATA_TYPES"; - case PLKEventNameValueSubmitPhone: - return @"SUBMIT_PHONE"; - case PLKEventNameValueSkipSubmitPhone: - return @"SKIP_SUBMIT_PHONE"; - case PLKEventNameValueVerifyPhone: - return @"VERIFY_PHONE"; - case PLKEventNameValueConnectNewInstitution: - return @"CONNECT_NEW_INSTITUTION"; - case PLKEventNameValueSubmitOTP: - return @"SUBMIT_OTP"; - case PLKEventNameValueLayerReady: - return @"LAYER_READY"; - case PLKEventNameValueLayerNotAvailable: - return @"LAYER_NOT_AVAILABLE"; - case PLKEventNameValueSubmitEmail: - return @"SUBMIT_EMAIL"; - case PLKEventNameValueSkipSubmitEmail: - return @"SKIP_SUBMIT_EMAIL"; - case PLKEventNameValueRememberMeEnabled: - return @"REMEMBER_ME_ENABLED"; - case PLKEventNameValueRememberMeDisabled: - return @"REMEMBER_ME_DISABLED"; - case PLKEventNameValueRememberMeHoldout: - return @"REMEMBER_ME_HOLDOUT"; - case PLKEventNameValueSelectSavedInstitution: - return @"SELECT_SAVED_INSTITUTION"; - case PLKEventNameValueSelectSavedAccount: - return @"SELECT_SAVED_ACCOUNT"; - case PLKEventNameValueAutoSelectSavedInstitution: - return @"AUTO_SELECT_SAVED_INSTITUTION"; - case PLKEventNameValuePlaidCheckPane: - return @"PLAID_CHECK_PANE"; - case PLKEventNameValueAutoSubmitPhone: - return @"AUTO_SUBMIT_PHONE"; - case PLKEventNameValueIdentityMatchPassed: - return @"IDENTITY_MATCH_PASSED"; - case PLKEventNameValueIdentityMatchFailed: - return @"IDENTITY_MATCH_FAILED"; - case PLKEventNameValueIssueFollowed: - return @"ISSUE_FOLLOWED"; - case PLKEventNameValueSelectAccount: - return @"SELECT_ACCOUNT"; - } - return @"unknown"; -} - -+ (NSString *)iso8601StringFromDate:(NSDate *)date { - static NSISO8601DateFormatter *dateFormatter = nil; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - dateFormatter = [[NSISO8601DateFormatter alloc] init]; - dateFormatter.formatOptions |= NSISO8601DateFormatWithFractionalSeconds; - }); - return [dateFormatter stringFromDate:date]; -} - -+ (NSString *)stringForExitStatus:(PLKExitStatus *)exitStatus { - if (!exitStatus) { - return @""; - } - - if (exitStatus.unknownStringValue) { - return exitStatus.unknownStringValue; - } - - switch (exitStatus.value) { - case PLKExitStatusValueNone: - return @""; - case PLKExitStatusValueRequiresQuestions: - return @"requires_questions"; - case PLKExitStatusValueRequiresSelections: - return @"requires_selections"; - case PLKExitStatusValueRequiresCode: - return @"requires_code"; - case PLKExitStatusValueChooseDevice: - return @"choose_device"; - case PLKExitStatusValueRequiresCredentials: - return @"requires_credentials"; - case PLKExitStatusValueInstitutionNotFound: - return @"institution_not_found"; - case PLKExitStatusValueRequiresAccountSelection: - return @"requires_account_selection"; - case PLKExitStatusValueContinueToThridParty: - return @"continue_to_third_party"; - } - return @"unknown"; -} - -+ (NSString *)stringForMfaType:(PLKMFAType)mfaType { - switch (mfaType) { - case PLKMFATypeNone: - return @""; - case PLKMFATypeCode: - return @"code"; - case PLKMFATypeDevice: - return @"device"; - case PLKMFATypeQuestions: - return @"questions"; - case PLKMFATypeSelections: - return @"selections"; - } - - return @"unknown"; -} - -+ (NSString *)stringForViewName:(PLKViewName *)viewName { - if (!viewName) { - return @""; - } - - if (viewName.unknownStringValue) { - return viewName.unknownStringValue; - } - - switch (viewName.value) { - case PLKViewNameValueNone: - return @""; - case PLKViewNameValueConnected: - return @"CONNECTED"; - case PLKViewNameValueConsent: - return @"CONSENT"; - case PLKViewNameValueCredential: - return @"CREDENTIAL"; - case PLKViewNameValueError: - return @"ERROR"; - case PLKViewNameValueExit: - return @"EXIT"; - case PLKViewNameValueLoading: - return @"LOADING"; - case PLKViewNameValueMatchedConsent: - return @"MATCHED_CONSENT"; - case PLKViewNameValueMatchedCredential: - return @"MATCHED_CREDENTIAL"; - case PLKViewNameValueMatchedMFA: - return @"MATCHED_MFA"; - case PLKViewNameValueMFA: - return @"MFA"; - case PLKViewNameValueNumbers: - return @"NUMBERS"; - case PLKViewNameValueRecaptcha: - return @"RECAPTCHA"; - case PLKViewNameValueSelectAccount: - return @"SELECT_ACCOUNT"; - case PLKViewNameValueSelectInstitution: - return @"SELECT_INSTITUTION"; - case PLKViewNameValueUploadDocuments: - return @"UPLOAD_DOCUMENTS"; - case PLKViewNameValueSubmitDocuments: - return @"SUBMIT_DOCUMENTS"; - case PLKViewNameValueSubmitDocumentsSuccess: - return @"SUBMIT_DOCUMENTS_SUCCESS"; - case PLKViewNameValueSubmitDocumentsError: - return @"SUBMIT_DOCUMENTS_ERROR"; - case PLKViewNameValueOauth: - return @"OAUTH"; - case PLKViewNameValueAcceptTOS: - return @"ACCEPT_TOS"; - case PLKViewNameValueDocumentaryVerification: - return @"DOCUMENTARY_VERIFICATION"; - case PLKViewNameValueKYCCheck: - return @"KYC_CHECK"; - case PLKViewNameValueSelfieCheck: - return @"SELFIE_CHECK"; - case PLKViewNameValueRiskCheck: - return @"RISK_CHECK"; - case PLKViewNameValueScreening: - return @"SCREENING"; - case PLKViewNameValueVerifySMS: - return @"VERIFY_SMS"; - case PLKViewNameValueDataTransparency: - return @"DATA_TRANSPARENCY"; - case PLKViewNameValueDataTransparencyConsent: - return @"DATA_TRANSPARENCY_CONSENT"; - case PLKViewNameValueSelectAuthType: - return @"SELECT_AUTH_TYPE"; - case PLKViewNameValueSelectBrand: - return @"SELECT_BRAND"; - case PLKViewNameValueNumbersSelectInstitution: - return @"NUMBERS_SELECT_INSTITUTION"; - case PLKViewNameValueSubmitPhone: - return @"SUBMIT_PHONE"; - case PLKViewNameValueVerifyPhone: - return @"VERIFY_PHONE"; - case PLKViewNameValueSelectSavedInstitution: - return @"SELECT_SAVED_INSTITUTION"; - case PLKViewNameValueSelectSavedAccount: - return @"SELECT_SAVED_ACCOUNT"; - case PLKViewNameValueProfileDataReview: - return @"PROFILE_DATA_REVIEW"; - case PLKViewNameValueSubmitEmail: - return @"SUBMIT_EMAIL"; - case PLKViewNameValueVerifyEmail: - return @"VERIFY_EMAIL"; - } - - return @"unknown"; -} - -+ (NSDictionary *)dictionaryFromExit:(PLKLinkExit *)exit { - PLKExitMetadata *metadata = exit.metadata; - return @{ - @"error": [self dictionaryFromError:exit.error] ?: @{}, - @"metadata": @{ - @"status": [self stringForExitStatus:metadata.status] ?: @"", - @"institution": [self dictionaryFromInstitution:metadata.institution] ?: @"", - @"requestId": metadata.requestID ?: @"", - @"linkSessionId": metadata.linkSessionID ?: @"", - @"metadataJson": metadata.metadataJSON ?: @"", - }, - }; -} - -#if RCT_NEW_ARCH_ENABLED -- (std::shared_ptr)getTurboModule: - (const facebook::react::ObjCTurboModule::InitParams &)params -{ - return std::make_shared(params); -} -#endif - -@end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.h deleted file mode 100644 index 4c899632..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.h +++ /dev/null @@ -1,14 +0,0 @@ -#import - -@interface RNPlaidHelper : NSObject - -+ (id _Nullable)createWithLinkTokenConfiguration:(PLKLinkTokenConfiguration * _Nonnull)linkTokenConfiguration - error:(NSError * _Nullable * _Nullable)error; - -+ (void)syncFinanceKit:(NSString * _Nonnull)token -requestAuthorizationIfNeeded:(BOOL)requestAuthorizationIfNeeded - simulatedBehavior:(BOOL)simulatedBehavior - onSuccess:(void (^_Nonnull)(void))onSuccess - onError:(void (^_Nonnull)(NSError * _Nonnull error))onError; - -@end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.m b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.m deleted file mode 100644 index 60888352..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/RNPlaidHelper.m +++ /dev/null @@ -1,31 +0,0 @@ -#import "RNPlaidHelper.h" - -@implementation RNPlaidHelper - -+ (id _Nullable)createWithLinkTokenConfiguration:(PLKLinkTokenConfiguration * _Nonnull)linkTokenConfiguration - error:(NSError * _Nullable * _Nullable)error -{ - return [PLKPlaid createWithLinkTokenConfiguration:linkTokenConfiguration error:error]; -} - -+ (void)syncFinanceKit:(NSString * _Nonnull)token -requestAuthorizationIfNeeded:(BOOL)requestAuthorizationIfNeeded - simulatedBehavior:(BOOL)simulatedBehavior - onSuccess:(void (^_Nonnull)(void))onSuccess - onError:(void (^_Nonnull)(NSError * _Nonnull error))onError -{ - if (@available(iOS 17.4, *)) { - [PLKPlaid syncFinanceKitWithToken:token - requestAuthorizationIfNeeded:requestAuthorizationIfNeeded - simulatedBehavior:simulatedBehavior - onSuccess:onSuccess - onError:onError]; - } else { - NSError *error = [NSError errorWithDomain:@"com.plaid.financeKit" - code:1001 - userInfo:@{ NSLocalizedDescriptionKey: @"FinanceKit Requires iOS >= 17.4" }]; - onError(error); - } -} - -@end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/react_native_plaid_link_sdk.h b/FabricExample/.yalc/react-native-plaid-link-sdk/ios/react_native_plaid_link_sdk.h deleted file mode 100644 index 92f2c27b..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/ios/react_native_plaid_link_sdk.h +++ /dev/null @@ -1,2 +0,0 @@ -// xcode tries to import this header in the auto-generated swift header -// same as here: https://github.com/rnmapbox/maps/blob/b76c000a237b9757a616982d6c07f6ecfd7d60a9/ios/RNMBX/rnmapbox_maps.h diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/package.json b/FabricExample/.yalc/react-native-plaid-link-sdk/package.json deleted file mode 100644 index 48d75465..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "react-native-plaid-link-sdk", - "version": "12.5.0", - "description": "React Native Plaid Link SDK", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "react-native": "src/index.ts", - "files": [ - "dist/**/*", - "android/**/*", - "ios/**/*", - "react-native-plaid-link-sdk.podspec", - "src/**/*" - ], - "scripts": { - "lint": "eslint \"./**/*.{js,jsx}\" --fix", - "prettier": "prettier \"./**/*.{js,jsx}\" --write", - "test": "jest" - }, - "keywords": [ - "react-native", - "Plaid" - ], - "husky": { - "hooks": { - "pre-commit": "lint-staged" - } - }, - "lint-staged": { - "*.{js,jsx}": [ - "prettier --write", - "eslint --fix", - "git add" - ] - }, - "jest": { - "testPathIgnorePatterns": [ - "/node_modules/", - "/example/" - ] - }, - "author": "Plaid", - "license": "MIT", - "peerDependencies": { - "react": "*", - "react-native": "*" - }, - "codegenConfig": { - "name": "rnplaidlink", - "type": "all", - "jsSrcsDir": "./src/fabric", - "android": { - "javaPackageName": "com.plaid" - }, - "ios": { - "componentProvider": "PLKEmbeddedViewCls" - } - }, - "yalcSig": "983b05ce94ac32b2c50766efb9b552c6" -} diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec b/FabricExample/.yalc/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec deleted file mode 100644 index 44dd4227..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/react-native-plaid-link-sdk.podspec +++ /dev/null @@ -1,39 +0,0 @@ -require 'json' - -package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) - -fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1' - -Pod::Spec.new do |s| - s.name = package['name'] - s.version = package['version'] - s.summary = package['description'] - s.license = package['license'] - - s.authors = package['author'] - s.homepage = "https://plaid.com/docs/link/ios/" - s.platform = :ios, "14.0" - - s.source = { :git => "https://github.com/plaid/react-native-plaid-link-sdk.git", :tag => "v#{s.version}" } - s.source_files = "ios/**/*.{h,m,mm,swift}" - # we need this since Swift generates import for `react_native_plaid_link_sdk/react_native_plaid_link_sdk.h` and we have to fake it - s.header_dir = "react_native_plaid_link_sdk" - # we don't want this to be seen by Swift - s.private_header_files = 'ios/PLKFabricHelpers.h' - - if ENV['USE_FRAMEWORKS'] == '1' - s.pod_target_xcconfig = { - "OTHER_CFLAGS" => "$(inherited) -DUSE_FRAMEWORKS", - "OTHER_CPLUSPLUSFLAGS" => "$(inherited) -DUSE_FRAMEWORKS", - } - end - - if fabric_enabled - install_modules_dependencies(s) - else - s.dependency "React-Core" - end - - s.dependency 'React-Core' - s.dependency 'Plaid', '~> 6.4.0' -end diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx b/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx deleted file mode 100644 index 9c36a223..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.tsx +++ /dev/null @@ -1,95 +0,0 @@ -import React from 'react'; -import { StyleProp, ViewStyle } from 'react-native'; -import NativeEmbeddedLinkView from './NativeEmbeddedLinkView'; -import { - LinkSuccessListener, - LinkSuccess, - LinkExitListener, - LinkExit, - LinkIOSPresentationStyle, - LinkOnEventListener, - LinkEvent, - LinkEventName, - LinkEventMetadata, - LinkError, - LinkExitMetadata, - LinkSuccessMetadata, -} from '../Types'; - -type EmbeddedLinkProps = { - token: string, - iOSPresentationStyle: LinkIOSPresentationStyle, - onEvent: LinkOnEventListener | undefined, - onSuccess: LinkSuccessListener, - onExit: LinkExitListener | undefined, - style: StyleProp | undefined, -} - -class EmbeddedEvent implements LinkEvent { - eventName: LinkEventName; - metadata: LinkEventMetadata; - - constructor(event: any) { - this.eventName = event.eventName - this.metadata = event.metadata - } -} - -class EmbeddedExit implements LinkExit { - error: LinkError | undefined; - metadata: LinkExitMetadata; - - constructor(event: any) { - this.error = event.error; - this.metadata = event.metadata; - } -} - -class EmbeddedSuccess implements LinkSuccess { - publicToken: string; - metadata: LinkSuccessMetadata; - - constructor(event: any) { - this.publicToken = event.publicToken; - this.metadata = event.metadata; - } -} - -export const EmbeddedLinkView: React.FC = (props) => { - - const {token, iOSPresentationStyle, onEvent, onSuccess, onExit, style} = props; - - const onEmbeddedEvent = (event: any) => { - - switch (event.nativeEvent.embeddedEventName) { - case 'onSuccess': { - if (!onSuccess) { return; } - const embeddedSuccess = new EmbeddedSuccess(event.nativeEvent); - onSuccess(embeddedSuccess); - break; - } - case 'onExit': { - if (!onExit) {return; } - const embeddedExit = new EmbeddedExit(event.nativeEvent); - onExit(embeddedExit); - break; - } - case 'onEvent': { - if (!onEvent) { return; } - const embeddedEvent = new EmbeddedEvent(event.nativeEvent); - onEvent(embeddedEvent); - break; - } - default: { - return; - } - } - } - - return -}; \ No newline at end of file diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx b/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx deleted file mode 100644 index 7a716097..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/EmbeddedLinkView.web.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// EmbeddedLinkView.web.tsx is a shim file which causes web bundlers to ignore the EmbeddedLinkView.tsx file -// which imports requireNativeComponent (causing a runtime error with react-native-web). -// Ref - https://github.com/plaid/react-native-plaid-link-sdk/issues/564 -import React from 'react'; -export const EmbeddedLinkView = () => null; diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx b/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx deleted file mode 100644 index 3b37d481..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/EmbeddedLink/NativeEmbeddedLinkView.tsx +++ /dev/null @@ -1,3 +0,0 @@ -import NativeEmbeddedLinkView from '../fabric/EmbeddedLinkViewNativeComponent'; - -export default NativeEmbeddedLinkView; diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/PlaidLink.tsx b/FabricExample/.yalc/react-native-plaid-link-sdk/src/PlaidLink.tsx deleted file mode 100644 index fe6a52c5..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/PlaidLink.tsx +++ /dev/null @@ -1,165 +0,0 @@ -import { useEffect } from 'react'; -import { NativeEventEmitter, Platform } from 'react-native'; -import { - LinkError, - LinkEventListener, - LinkExit, - LinkIOSPresentationStyle, - LinkLogLevel, - LinkOpenProps, - LinkSuccess, - LinkTokenConfiguration, - FinanceKitErrorType, - FinanceKitError, - SubmissionData, -} from './Types'; -import RNLinksdkAndroid from './fabric/NativePlaidLinkModuleAndroid'; -import RNLinksdkiOS from './fabric/NativePlaidLinkModuleiOS'; - -const RNLinksdk = - (Platform.OS === 'android' ? RNLinksdkAndroid : RNLinksdkiOS) ?? undefined; - -/** - * A hook that registers a listener on the Plaid emitter for the 'onEvent' type. - * The listener is cleaned up when this view is unmounted - * - * @param LinkEventListener the listener to call - */ -export const usePlaidEmitter = (linkEventListener: LinkEventListener) => { - useEffect(() => { - const emitter = new NativeEventEmitter(RNLinksdk); - const listener = emitter.addListener('onEvent', linkEventListener); - // Clean up after this effect: - return function cleanup() { - listener.remove(); - }; - }, []); -}; - -export const create = (props: LinkTokenConfiguration) => { - let token = props.token; - let noLoadingState = props.noLoadingState ?? false; - - if (Platform.OS === 'android') { - RNLinksdkAndroid?.createPlaidLink( - token, - noLoadingState, - props.logLevel ?? LinkLogLevel.ERROR, - ); - } else { - RNLinksdkiOS?.createPlaidLink(token, noLoadingState); - } -}; - -export const open = (props: LinkOpenProps) => { - if (Platform.OS === 'android') { - RNLinksdkAndroid?.open( - (result: LinkSuccess) => { - if (props.onSuccess != null) { - props.onSuccess(result); - } - }, - (result: LinkExit) => { - if (props.onExit != null) { - if (result.error != null && result.error.displayMessage != null) { - //TODO(RNSDK-118): Remove errorDisplayMessage field in next major update. - result.error.errorDisplayMessage = result.error.displayMessage; - } - props.onExit(result); - } - }, - ); - } else { - let presentFullScreen = - props.iOSPresentationStyle == LinkIOSPresentationStyle.FULL_SCREEN; - - RNLinksdkiOS?.open( - presentFullScreen, - (result: LinkSuccess) => { - if (props.onSuccess != null) { - props.onSuccess(result); - } - }, - (error: LinkError, result: LinkExit) => { - if (props.onExit != null) { - if (error) { - var data = result || {}; - data.error = error; - props.onExit(data); - } else { - props.onExit(result); - } - } - }, - ); - } -}; - -/** - * Clears any previously created Plaid session and associated resources - * that were captured during a prior call to create(). This method should - * be invoked before starting a new layer session with create() to ensure - * proper cleanup and avoid conflicts from lingering state or resources. - */ -export const destroy = async () => { - if (Platform.OS === 'android') { - await RNLinksdkAndroid?.destroy(); - } -}; - -export const dismissLink = () => { - if (Platform.OS === 'ios') { - RNLinksdkiOS?.dismiss(); - } -}; - -export const submit = (data: SubmissionData): void => { - if (Platform.OS === 'android') { - RNLinksdkAndroid?.submit(data.phoneNumber, data.dateOfBirth); - } else { - RNLinksdkiOS?.submit(data.phoneNumber, data.dateOfBirth); - } -}; - -/** - * Function to sync the user's transactions from their Apple card. - * - * @param {string} token - The `LinkToken` your server retrieved from the /link/token/create endpoint from the Plaid API. - * This token must be associated with an accessToken. - * @param {boolean} requestAuthorizationIfNeeded - Indicates if the user should be prompted to authorize the sync if - * they have not already done so. - * @param {function} completion - A callback function that is called when the sync has completed. - * - * @warning This method only works on iOS >= 17.4. - * @warning This method is not supported on Android or MacCatalyst. - * @warning This method can only be used once the user has granted access to their Apple card via a standard Link Session. - * @warning This method requires that your app has been granted FinanceKit access from Apple. - */ -export const syncFinanceKit = ( - token: string, - requestAuthorizationIfNeeded: boolean, - simulatedBehavior: boolean, - completion: (error?: FinanceKitError) => void -): void => { - if (Platform.OS === 'android') { - completion({ - type: FinanceKitErrorType.Unknown, - message: "FinanceKit is unavailable on Android!", - }) - } else { - RNLinksdkiOS?.syncFinanceKit( - token, - requestAuthorizationIfNeeded, - simulatedBehavior, - () => { - completion() - }, - (error: FinanceKitError) => { - completion({ - type: error.type, - message: error.message, - }) - } - ) - } -}; diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/Types.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/Types.ts deleted file mode 100644 index ca222a1a..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/Types.ts +++ /dev/null @@ -1,629 +0,0 @@ -interface CommonPlaidLinkOptions { - logLevel?: LinkLogLevel; - extras?: Record; -} - -export type LinkTokenConfiguration = (CommonPlaidLinkOptions & { - token: string; - // A `Bool` indicating that Link should skip displaying a loading animation until the Link UI is fully loaded. - // This can be used to display custom loading UI while Link content is loading (and will skip any initial loading UI in Link). - // Note: Dismiss custom loading UI on the OPEN & EXIT events. - // - // Note: This should be set to `true` when setting the `eu_config.headless` field in /link/token/create requests to `true`. - // For reference, see https://plaid.com/docs/api/tokens/#link-token-create-request-eu-config-headless - noLoadingState?: boolean; -}); - -export enum LinkLogLevel { - DEBUG="debug", - INFO="info", - WARN="warn", - ERROR="error", -} - -export enum PlaidEnvironment { - PRODUCTION = 'production', - DEVELOPMENT = 'development', - SANDBOX = 'sandbox', -} - -export enum PlaidProduct { - ASSETS="assets", - AUTH="auth", - DEPOSIT_SWITCH="deposit_switch", - IDENTITY="identity", - INCOME="income", - INVESTMENTS="investments", - LIABILITIES="liabilities", - LIABILITIES_REPORT="liabilities_report", - PAYMENT_INITIATION="payment_initiation", - TRANSACTIONS="transactions", -} - -export enum LinkAccountType { - CREDIT = 'credit', - DEPOSITORY = 'depository', - INVESTMENT = 'investment', - LOAN = 'loan', - OTHER = 'other', -} - -export enum LinkAccountSubtypes { - ALL = 'all', - CREDIT_CARD = 'credit card', - PAYPAL = 'paypal', - AUTO = 'auto', - BUSINESS = 'business', - COMMERCIAL = 'commercial', - CONSTRUCTION = 'construction', - CONSUMER = 'consumer', - HOME_EQUITY = 'home equity', - LINE_OF_CREDIT = 'line of credit', - LOAN = 'loan', - MORTGAGE = 'mortgage', - OVERDRAFT = 'overdraft', - STUDENT = 'student', - CASH_MANAGEMENT = 'cash management', - CD = 'cd', - CHECKING = 'checking', - EBT = 'ebt', - HSA = 'hsa', - MONEY_MARKET = 'money market', - PREPAID = 'prepaid', - SAVINGS = 'savings', - FOUR_0_1_A = '401a', - FOUR_0_1_K = '401k', - FOUR_0_3_B = '403B', - FOUR_5_7_B = '457b', - FIVE_2_9 = '529', - BROKERAGE = 'brokerage', - CASH_ISA = 'cash isa', - EDUCATION_SAVINGS_ACCOUNT = 'education savings account', - FIXED_ANNUNITY = 'fixed annuity', - GIC = 'gic', - HEALTH_REIMBURSEMENT_ARRANGEMENT = 'health reimbursement arrangement', - IRA = 'ira', - ISA = 'isa', - KEOGH = 'keogh', - LIF = 'lif', - LIRA = 'lira', - LRIF = 'lrif', - LRSP = 'lrsp', - MUTUAL_FUND = 'mutual fund', - NON_TAXABLE_BROKERAGE_ACCOUNT = 'non-taxable brokerage account', - PENSION = 'pension', - PLAN = 'plan', - PRIF = 'prif', - PROFIT_SHARING_PLAN = 'profit sharing plan', - RDSP = 'rdsp', - RESP = 'resp', - RETIREMENT = 'retirement', - RLIF = 'rlif', - ROTH_401K = 'roth 401k', - ROTH = 'roth', - RRIF = 'rrif', - RRSP = 'rrsp', - SARSEP = 'sarsep', - SEP_IRA = 'sep ira', - SIMPLE_IRA = 'simple ira', - SIPP = 'sipp', - STOCK_PLAN = 'stock plan', - TFSA = 'tfsa', - THRIFT_SAVINGS_PLAN = 'thrift savings plan', - TRUST = 'trust', - UGMA = 'ugma', - UTMA = 'utma', - VARIABLE_ANNUITY = 'variable annuity' -} - -export interface LinkAccountSubtype { -} - -export class LinkAccountSubtypeCredit implements LinkAccountSubtype { - public static readonly ALL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); - public static readonly CREDIT_CARD = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.CREDIT_CARD); - public static readonly PAYPAL = new LinkAccountSubtypeCredit(LinkAccountType.CREDIT, LinkAccountSubtypes.PAYPAL); - - private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } -} - -export class LinkAccountSubtypeDepository implements LinkAccountSubtype { - public static readonly ALL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.ALL); - public static readonly CASH_MANAGEMENT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CASH_MANAGEMENT); - public static readonly CD = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CD); - public static readonly CHECKING = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.CHECKING); - public static readonly EBT = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.EBT); - public static readonly HSA = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.HSA); - public static readonly MONEY_MARKET = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.MONEY_MARKET); - public static readonly PAYPAL = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PAYPAL); - public static readonly PREPAID = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.PREPAID); - public static readonly SAVINGS = new LinkAccountSubtypeDepository(LinkAccountType.DEPOSITORY, LinkAccountSubtypes.SAVINGS); - - private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } -} - -export class LinkAccountSubtypeInvestment implements LinkAccountSubtype { - public static readonly ALL = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ALL); - public static readonly BROKERAGE = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.BROKERAGE); - public static readonly CASH_ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.CASH_ISA); - public static readonly EDUCATION_SAVINGS_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.EDUCATION_SAVINGS_ACCOUNT); - public static readonly FIXED_ANNUNITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIXED_ANNUNITY); - public static readonly GIC = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.GIC); - public static readonly HEALTH_REIMBURSEMENT_ARRANGEMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HEALTH_REIMBURSEMENT_ARRANGEMENT); - public static readonly HSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.HSA); - public static readonly INVESTMENT_401A = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_A); - public static readonly INVESTMENT_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_1_K); - public static readonly INVESTMENT_403B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_0_3_B); - public static readonly INVESTMENT_457B = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FOUR_5_7_B); - public static readonly INVESTMENT_529 = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.FIVE_2_9); - public static readonly IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.IRA); - public static readonly ISA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ISA); - public static readonly KEOGH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.KEOGH); - public static readonly LIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIF); - public static readonly LIRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LIRA); - public static readonly LRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRIF); - public static readonly LRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.LRSP); - public static readonly MUTUAL_FUND = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.MUTUAL_FUND); - public static readonly NON_TAXABLE_BROKERAGE_ACCOUNT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.NON_TAXABLE_BROKERAGE_ACCOUNT); - public static readonly PENSION = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PENSION); - public static readonly PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PLAN); - public static readonly PRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PRIF); - public static readonly PROFIT_SHARING_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.PROFIT_SHARING_PLAN); - public static readonly RDSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RDSP); - public static readonly RESP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RESP); - public static readonly RETIREMENT = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RETIREMENT); - public static readonly RLIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RLIF); - public static readonly ROTH = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH); - public static readonly ROTH_401K = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.ROTH_401K); - public static readonly RRIF = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRIF); - public static readonly RRSP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.RRSP); - public static readonly SARSEP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SARSEP); - public static readonly SEP_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SEP_IRA); - public static readonly SIMPLE_IRA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIMPLE_IRA); - public static readonly SIIP = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.SIPP); - public static readonly STOCK_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.STOCK_PLAN); - public static readonly TFSA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TFSA); - public static readonly THRIFT_SAVINGS_PLAN = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.THRIFT_SAVINGS_PLAN); - public static readonly TRUST = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.TRUST); - public static readonly UGMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UGMA); - public static readonly UTMA = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.UTMA); - public static readonly VARIABLE_ANNUITY = new LinkAccountSubtypeInvestment(LinkAccountType.INVESTMENT, LinkAccountSubtypes.VARIABLE_ANNUITY); - - private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } -} - -export class LinkAccountSubtypeLoan implements LinkAccountSubtype { - public static readonly ALL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.ALL); - public static readonly AUTO = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.AUTO); - public static readonly BUSINESS = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.BUSINESS); - public static readonly COMMERCIAL = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.COMMERCIAL); - public static readonly CONSTRUCTION = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSTRUCTION); - public static readonly CONSUMER = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.CONSUMER); - public static readonly HOME_EQUITY = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.HOME_EQUITY); - public static readonly LINE_OF_CREDIT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LINE_OF_CREDIT); - public static readonly LOAN = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.LOAN); - public static readonly MORTGAGE = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.MORTGAGE); - public static readonly OVERDRAFT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.OVERDRAFT); - public static readonly STUDENT = new LinkAccountSubtypeLoan(LinkAccountType.CREDIT, LinkAccountSubtypes.STUDENT); - - private constructor(public readonly type: LinkAccountType, public readonly subtype: LinkAccountSubtype) { } -} - -export class LinkAccountSubtypeUnknown implements LinkAccountSubtype { - constructor(public readonly type: string, public readonly subtype: string) { } -} - -export interface LinkSuccess { - publicToken: string; - metadata: LinkSuccessMetadata; -} - -export interface LinkSuccessMetadata { - institution?: LinkInstitution; - accounts: LinkAccount[]; - linkSessionId: string; - metadataJson?: string; -} - -export interface LinkAccount { - id: string; - name?: string; - mask?: string; - type: LinkAccountType; - subtype: LinkAccountSubtype; - verificationStatus?: LinkAccountVerificationStatus; -} - -export enum LinkAccountVerificationStatus { - PENDING_AUTOMATIC_VERIFICATION = 'pending_automatic_verification', - PENDING_MANUAL_VERIFICATION = 'pending_manual_verification', - MANUALLY_VERIFIED = 'manually_verified', -} - -export interface LinkInstitution { - id: string; - name: string; -} - -export interface LinkExit { - error?: LinkError; - metadata: LinkExitMetadata; -} - -export interface LinkExitMetadata { - status?: LinkExitMetadataStatus; - institution?: LinkInstitution; - linkSessionId: string; - requestId: string; - metadataJson?: string; -} - -export enum LinkExitMetadataStatus { - CONNECTED = 'connected', - CHOOSE_DEVICE = 'choose_device', - REQUIRES_ACCOUNT_SELECTION = 'requires_account_selection', - REQUIRES_CODE = 'requires_code', - REQUIRES_CREDENTIALS = 'requires_credentials', - REQUIRES_EXTERNAL_ACTION = 'requires_external_action', - REQUIRES_OAUTH = 'requires_oauth', - REQUIRES_QUESTIONS = 'requires_questions', - REQUIRES_RECAPTCHA = 'requires_recaptcha', - REQUIRES_SELECTIONS = 'requires_selections', - REQUIRES_DEPOSIT_SWITCH_ALLOCATION_CONFIGURATION = 'requires_deposit_switch_allocation_configuration', - REQUIRES_DEPOSIT_SWITCH_ALLOCATION_SELECTION = 'requires_deposit_switch_allocation_selection', -} - -export interface LinkError { - errorCode: LinkErrorCode; - errorType: LinkErrorType; - errorMessage: string; - /** @deprecated DO NOT USE, data not guaranteed. Use `displayMessage` instead */ - errorDisplayMessage?: string; - displayMessage?: string; - errorJson?: string; -} - -export enum LinkErrorCode { - // ITEM_ERROR - INVALID_CREDENTIALS = "INVALID_CREDENTIALS", - INVALID_MFA = "INVALID_MFA", - ITEM_LOGIN_REQUIRED = "ITEM_LOGIN_REQUIRED", - INSUFFICIENT_CREDENTIALS = "INSUFFICIENT_CREDENTIALS", - ITEM_LOCKED = "ITEM_LOCKED", - USER_SETUP_REQUIRED = "USER_SETUP_REQUIRED", - MFA_NOT_SUPPORTED = "MFA_NOT_SUPPORTED", - INVALID_SEND_METHOD = "INVALID_SEND_METHOD", - NO_ACCOUNTS = "NO_ACCOUNTS", - ITEM_NOT_SUPPORTED = "ITEM_NOT_SUPPORTED", - TOO_MANY_VERIFICATION_ATTEMPTS = "TOO_MANY_VERIFICATION_ATTEMPTS", - - INVALD_UPDATED_USERNAME = "INVALD_UPDATED_USERNAME", - INVALID_UPDATED_USERNAME = "INVALID_UPDATED_USERNAME", - - ITEM_NO_ERROR = "ITEM_NO_ERROR", - item_no_error = "item-no-error", - NO_AUTH_ACCOUNTS = "NO_AUTH_ACCOUNTS", - NO_INVESTMENT_ACCOUNTS = "NO_INVESTMENT_ACCOUNTS", - NO_INVESTMENT_AUTH_ACCOUNTS = "NO_INVESTMENT_AUTH_ACCOUNTS", - NO_LIABILITY_ACCOUNTS = "NO_LIABILITY_ACCOUNTS", - PRODUCTS_NOT_SUPPORTED = "PRODUCTS_NOT_SUPPORTED", - ITEM_NOT_FOUND = "ITEM_NOT_FOUND", - ITEM_PRODUCT_NOT_READY = "ITEM_PRODUCT_NOT_READY", - - // INSTITUTION_ERROR - INSTITUTION_DOWN = "INSTITUTION_DOWN", - INSTITUTION_NOT_RESPONDING = "INSTITUTION_NOT_RESPONDING", - INSTITUTION_NOT_AVAILABLE = "INSTITUTION_NOT_AVAILABLE", - INSTITUTION_NO_LONGER_SUPPORTED = "INSTITUTION_NO_LONGER_SUPPORTED", - - // API_ERROR - INTERNAL_SERVER_ERROR = "INTERNAL_SERVER_ERROR", - PLANNED_MAINTENANCE = "PLANNED_MAINTENANCE", - - // ASSET_REPORT_ERROR - PRODUCT_NOT_ENABLED = "PRODUCT_NOT_ENABLED", - DATA_UNAVAILABLE = "DATA_UNAVAILABLE", - ASSET_PRODUCT_NOT_READY = "ASSET_PRODUCT_NOT_READY", - ASSET_REPORT_GENERATION_FAILED = "ASSET_REPORT_GENERATION_FAILED", - INVALID_PARENT = "INVALID_PARENT", - INSIGHTS_NOT_ENABLED = "INSIGHTS_NOT_ENABLED", - INSIGHTS_PREVIOUSLY_NOT_ENABLED = "INSIGHTS_PREVIOUSLY_NOT_ENABLED", - - // BANK_TRANSFER_ERROR - BANK_TRANSFER_LIMIT_EXCEEDED = "BANK_TRANSFER_LIMIT_EXCEEDED", - BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT = "BANK_TRANSFER_MISSING_ORIGINATION_ACCOUNT", - BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT = "BANK_TRANSFER_INVALID_ORIGINATION_ACCOUNT", - BANK_TRANSFER_ACCOUNT_BLOCKED = "BANK_TRANSFER_ACCOUNT_BLOCKED", - BANK_TRANSFER_INSUFFICIENT_FUNDS = "BANK_TRANSFER_INSUFFICIENT_FUNDS", - BANK_TRANSFER_NOT_CANCELLABLE = "BANK_TRANSFER_NOT_CANCELLABLE", - BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE = "BANK_TRANSFER_UNSUPPORTED_ACCOUNT_TYPE", - BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT = "BANK_TRANSFER_UNSUPPORTED_ENVIRONMENT", - - // SANDBOX_ERROR - SANDBOX_PRODUCT_NOT_ENABLED = "SANDBOX_PRODUCT_NOT_ENABLED", - SANDBOX_WEBHOOK_INVALID = "SANDBOX_WEBHOOK_INVALID", - SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID = "SANDBOX_BANK_TRANSFER_EVENT_TRANSITION_INVALID", - - // INVALID_REQUEST - MISSING_FIELDS = "MISSING_FIELDS", - UNKNOWN_FIELDS = "UNKNOWN_FIELDS", - INVALID_FIELD = "INVALID_FIELD", - INCOMPATIBLE_API_VERSION = "INCOMPATIBLE_API_VERSION", - INVALID_BODY = "INVALID_BODY", - INVALID_HEADERS = "INVALID_HEADERS", - NOT_FOUND = "NOT_FOUND", - NO_LONGER_AVAILABLE = "NO_LONGER_AVAILABLE", - SANDBOX_ONLY = "SANDBOX_ONLY", - INVALID_ACCOUNT_NUMBER = "INVALID_ACCOUNT_NUMBER", - - // INVALID_INPUT - // From above ITEM_LOGIN_REQUIRED = "INVALID_CREDENTIALS", - INCORRECT_DEPOSIT_AMOUNTS = "INCORRECT_DEPOSIT_AMOUNTS", - UNAUTHORIZED_ENVIRONMENT = "UNAUTHORIZED_ENVIRONMENT", - INVALID_PRODUCT = "INVALID_PRODUCT", - UNAUTHORIZED_ROUTE_ACCESS = "UNAUTHORIZED_ROUTE_ACCESS", - DIRECT_INTEGRATION_NOT_ENABLED = "DIRECT_INTEGRATION_NOT_ENABLED", - INVALID_API_KEYS = "INVALID_API_KEYS", - INVALID_ACCESS_TOKEN = "INVALID_ACCESS_TOKEN", - INVALID_PUBLIC_TOKEN = "INVALID_PUBLIC_TOKEN", - INVALID_LINK_TOKEN = "INVALID_LINK_TOKEN", - INVALID_PROCESSOR_TOKEN = "INVALID_PROCESSOR_TOKEN", - INVALID_AUDIT_COPY_TOKEN = "INVALID_AUDIT_COPY_TOKEN", - INVALID_ACCOUNT_ID = "INVALID_ACCOUNT_ID", - MICRODEPOSITS_ALREADY_VERIFIED = "MICRODEPOSITS_ALREADY_VERIFIED", - - // INVALID_RESULT - PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA = "PLAID_DIRECT_ITEM_IMPORT_RETURNED_INVALID_MFA", - - // RATE_LIMIT_EXCEEDED - ACCOUNTS_LIMIT = "ACCOUNTS_LIMIT", - ADDITION_LIMIT = "ADDITION_LIMIT", - AUTH_LIMIT = "AUTH_LIMIT", - BALANCE_LIMIT = "BALANCE_LIMIT", - IDENTITY_LIMIT = "IDENTITY_LIMIT", - ITEM_GET_LIMIT = "ITEM_GET_LIMIT", - RATE_LIMIT = "RATE_LIMIT", - TRANSACTIONS_LIMIT = "TRANSACTIONS_LIMIT", - - // RECAPTCHA_ERROR - RECAPTCHA_REQUIRED = "RECAPTCHA_REQUIRED", - RECAPTCHA_BAD = "RECAPTCHA_BAD", - - // OAUTH_ERROR - INCORRECT_OAUTH_NONCE = "INCORRECT_OAUTH_NONCE", - OAUTH_STATE_ID_ALREADY_PROCESSED = "OAUTH_STATE_ID_ALREADY_PROCESSED", -} - -export enum LinkErrorType { - BANK_TRANSFER = 'BANK_TRANSFER_ERROR', - INVALID_REQUEST = 'INVALID_REQUEST', - INVALID_RESULT = 'INVALID_RESULT', - INVALID_INPUT = 'INVALID_INPUT', - INSTITUTION_ERROR = 'INSTITUTION_ERROR', - RATE_LIMIT_EXCEEDED = 'RATE_LIMIT_EXCEEDED', - API_ERROR = 'API_ERROR', - ITEM_ERROR = 'ITEM_ERROR', - AUTH_ERROR = 'AUTH_ERROR', - ASSET_REPORT_ERROR = 'ASSET_REPORT_ERROR', - SANDBOX_ERROR = 'SANDBOX_ERROR', - RECAPTCHA_ERROR = 'RECAPTCHA_ERROR', - OAUTH_ERROR = 'OAUTH_ERROR', -} - -export type LinkEventListener = (linkEvent: LinkEvent) => void - -export interface LinkEvent { - eventName: LinkEventName; - metadata: LinkEventMetadata; -} - -export interface LinkEventMetadata { - accountNumberMask?: string; - linkSessionId: string; - mfaType?: string; - requestId?: string; - viewName: LinkEventViewName; - errorCode?: string; - errorMessage?: string; - errorType?: string; - exitStatus?: string; - institutionId?: string; - institutionName?: string; - institutionSearchQuery?: string; - isUpdateMode?: string; - matchReason?: string; - issueId?: string; - issueDescription?: string; - issueDetectedAt?: string; - // see possible values for selection at https://plaid.com/docs/link/web/#link-web-onevent-selection - selection?: null | string; - timestamp: string; - metadata_json: string; -} - -export enum LinkEventName { - AUTO_SELECT_SAVED_INSTITUTION = 'AUTO_SELECT_SAVED_INSTITUTION', - AUTO_SUBMIT_PHONE = 'AUTO_SUBMIT_PHONE', - BANK_INCOME_INSIGHTS_COMPLETED = 'BANK_INCOME_INSIGHTS_COMPLETED', - CLOSE_OAUTH = 'CLOSE_OAUTH', - CONNECT_NEW_INSTITUTION = 'CONNECT_NEW_INSTITUTION', - ERROR = 'ERROR', - EXIT = 'EXIT', - FAIL_OAUTH = 'FAIL_OAUTH', - HANDOFF = 'HANDOFF', - IDENTITY_MATCH_PASSED = 'IDENTITY_MATCH_PASSED', - IDENTITY_MATCH_FAILED = 'IDENTITY_MATCH_FAILED', - IDENTITY_VERIFICATION_CLOSE_UI = 'IDENTITY_VERIFICATION_CLOSE_UI', - IDENTITY_VERIFICATION_CREATE_SESSION = 'IDENTITY_VERIFICATION_CREATE_SESSION', - IDENTITY_VERIFICATION_FAIL_SESSION = 'IDENTITY_VERIFICATION_FAIL_SESSION', - IDENTITY_VERIFICATION_FAIL_STEP = 'IDENTITY_VERIFICATION_FAIL_STEP', - IDENTITY_VERIFICATION_OPEN_UI = 'IDENTITY_VERIFICATION_OPEN_UI', - IDENTITY_VERIFICATION_PASS_SESSION = 'IDENTITY_VERIFICATION_PASS_SESSION', - IDENTITY_VERIFICATION_PASS_STEP = 'IDENTITY_VERIFICATION_PASS_STEP', - IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION = 'IDENTITY_VERIFICATION_PENDING_REVIEW_SESSION', - IDENTITY_VERIFICATION_PENDING_REVIEW_STEP = 'IDENTITY_VERIFICATION_PENDING_REVIEW_STEP', - IDENTITY_VERIFICATION_RESUME_SESSION = 'IDENTITY_VERIFICATION_RESUME_SESSION', - IDENTITY_VERIFICATION_RESUME_UI = 'IDENTITY_VERIFICATION_RESUME_UI', - IDENTITY_VERIFICATION_START_STEP = 'IDENTITY_VERIFICATION_START_STEP', - ISSUE_FOLLOWED = 'ISSUE_FOLLOWED', - LAYER_AUTOFILL_NOT_AVAILABLE = "LAYER_AUTOFILL_NOT_AVAILABLE", - LAYER_NOT_AVAILABLE = 'LAYER_NOT_AVAILABLE', - LAYER_READY = 'LAYER_READY', - MATCHED_CONSENT = 'MATCHED_CONSENT', - MATCHED_SELECT_INSTITUTION = 'MATCHED_SELECT_INSTITUTION', - MATCHED_SELECT_VERIFY_METHOD = 'MATCHED_SELECT_VERIFY_METHOD', - OPEN = 'OPEN', - OPEN_MY_PLAID = 'OPEN_MY_PLAID', - OPEN_OAUTH = 'OPEN_OAUTH', - PLAID_CHECK_PANE = 'PLAID_CHECK_PANE', - PROFILE_ELIGIBILITY_CHECK_ERROR = 'PROFILE_ELIGIBILITY_CHECK_ERROR', - PROFILE_ELIGIBILITY_CHECK_READY = 'PROFILE_ELIGIBILITY_CHECK_READY', - REMEMBER_ME_DISABLED = 'REMEMBER_ME_DISABLED', - REMEMBER_ME_ENABLED = 'REMEMBER_ME_ENABLED', - REMEMBER_ME_HOLDOUT = 'REMEMBER_ME_HOLDOUT', - SEARCH_INSTITUTION = 'SEARCH_INSTITUTION', - SELECT_ACCOUNT = 'SELECT_ACCOUNT', - SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE', - SELECT_BRAND = 'SELECT_BRAND', - SELECT_DEGRADED_INSTITUTION = 'SELECT_DEGRADED_INSTITUTION', - SELECT_DOWN_INSTITUTION = 'SELECT_DOWN_INSTITUTION', - SELECT_FILTERED_INSTITUTION = 'SELECT_FILTERED_INSTITUTION', - SELECT_INSTITUTION = 'SELECT_INSTITUTION', - SELECT_SAVED_ACCOUNT = 'SELECT_SAVED_ACCOUNT', - SELECT_SAVED_INSTITUTION = 'SELECT_SAVED_INSTITUTION', - SKIP_SUBMIT_EMAIL = 'SKIP_SUBMIT_EMAIL', - SKIP_SUBMIT_PHONE = 'SKIP_SUBMIT_PHONE', - SUBMIT_ACCOUNT_NUMBER = 'SUBMIT_ACCOUNT_NUMBER', - SUBMIT_CREDENTIALS = 'SUBMIT_CREDENTIALS', - SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS', - SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR', - SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS', - SUBMIT_EMAIL = 'SUBMIT_EMAIL', - SUBMIT_MFA = 'SUBMIT_MFA', - SUBMIT_PHONE = 'SUBMIT_PHONE', - SUBMIT_OTP = 'SUBMIT_OTP', - SUBMIT_ROUTING_NUMBER = 'SUBMIT_ROUTING_NUMBER', - TRANSITION_VIEW = 'TRANSITION_VIEW', - VERIFY_PHONE = 'VERIFY_PHONE', - VIEW_DATA_TYPES = 'VIEW_DATA_TYPES', -} - -export enum LinkEventViewName { - ACCEPT_TOS = 'ACCEPT_TOS', - CONNECTED = 'CONNECTED', - CONSENT = 'CONSENT', - CREDENTIAL = 'CREDENTIAL', - DATA_TRANSPARENCY = 'DATA_TRANSPARENCY', - DATA_TRANSPARENCY_CONSENT = 'DATA_TRANSPARENCY_CONSENT', - DOCUMENTARY_VERIFICATION = 'DOCUMENTARY_VERIFICATION', - ERROR = 'ERROR', - EXIT = 'EXIT', - KYC_CHECK = 'KYC_CHECK', - SELFIE_CHECK = 'SELFIE_CHECK', - LOADING = 'LOADING', - MATCHED_CONSENT = 'MATCHED_CONSENT', - MATCHED_CREDENTIAL = 'MATCHED_CREDENTIAL', - MATCHED_MFA = 'MATCHED_MFA', - MFA = 'MFA', - NUMBERS = 'NUMBERS', - NUMBERS_SELECT_INSTITUTION = 'NUMBERS_SELECT_INSTITUTION', - OAUTH = 'OAUTH', - RECAPTCHA = 'RECAPTCHA', - RISK_CHECK = 'RISK_CHECK', - SCREENING = 'SCREENING', - SELECT_ACCOUNT = 'SELECT_ACCOUNT', - SELECT_AUTH_TYPE = 'SELECT_AUTH_TYPE', - SUBMIT_EMAIL = "SUBMIT_EMAIL", - SUBMIT_PHONE = 'SUBMIT_PHONE', - VERIFY_PHONE = 'VERIFY_PHONE', - SELECT_SAVED_INSTITUTION = 'SELECT_SAVED_INSTITUTION', - SELECT_SAVED_ACCOUNT = 'SELECT_SAVED_ACCOUNT', - SELECT_BRAND = 'SELECT_BRAND', - SELECT_INSTITUTION = 'SELECT_INSTITUTION', - SUBMIT_DOCUMENTS = 'SUBMIT_DOCUMENTS', - SUBMIT_DOCUMENTS_SUCCESS = 'SUBMIT_DOCUMENTS_SUCCESS', - SUBMIT_DOCUMENTS_ERROR = 'SUBMIT_DOCUMENTS_ERROR', - UPLOAD_DOCUMENTS = 'UPLOAD_DOCUMENTS', - VERIFY_EMAIL = "VERIFY_EMAIL", - VERIFY_SMS = 'VERIFY_SMS', -} - -/// Methods to present Link on iOS. -/// FULL_SCREEN is the converts to UIModalPresentationOverFullScreen on the native side. -/// MODAL will use the default presentation style for iOS which is UIModalPresentationAutomatic. -export enum LinkIOSPresentationStyle { - FULL_SCREEN = 'FULL_SCREEN', - MODAL = 'MODAL' -} - -export type LinkSuccessListener = (LinkSuccess: LinkSuccess) => void - -export type LinkExitListener = (LinkExit: LinkExit) => void - -export type LinkOnEventListener = (LinkEvent: LinkEvent) => void - -export interface PlaidLinkProps { - tokenConfig: LinkTokenConfiguration - onSuccess: LinkSuccessListener - onExit?: LinkExitListener - iOSPresentationStyle?: LinkIOSPresentationStyle - logLevel?: LinkLogLevel - onPress?(): any -} - -export interface LinkOpenProps { - onSuccess: LinkSuccessListener - onExit?: LinkExitListener - iOSPresentationStyle?: LinkIOSPresentationStyle - logLevel?: LinkLogLevel -} - -export type PlaidLinkComponentProps = (PlaidLinkProps & { - children: React.ReactNode -}); - -export enum FinanceKitErrorType { - InvalidToken = 0, - PermissionError = 1, - LinkApiError = 2, - PermissionAccessError = 3, - Unknown = 4 -} - -interface InvalidTokenError { - type: FinanceKitErrorType.InvalidToken; - message: string; -} - -interface PermissionError { - type: FinanceKitErrorType.PermissionError; - message: string; -} - -interface LinkApiError { - type: FinanceKitErrorType.LinkApiError; - message: string; -} - -interface PermissionAccessError { - type: FinanceKitErrorType.PermissionAccessError; - message: string; -} - -interface UnknownError { - type: FinanceKitErrorType.Unknown; - message: string; -} - -export type FinanceKitError = - | InvalidTokenError - | PermissionError - | LinkApiError - | PermissionAccessError - | UnknownError; - -export interface SubmissionData { - phoneNumber?: string; - dateOfBirth?: string; -}; - diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts deleted file mode 100644 index 2dd7a541..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/__tests__/Types.tests.ts +++ /dev/null @@ -1,15 +0,0 @@ -const Types = require('./../Types'); - -test('test token configuration', () => { - const linkTokenConfiguration = { - token: "test-token", - noLoadingState: false, - logLevel: Types.LinkLogLevel.DEBUG, - extras: null, - }; - - expect(linkTokenConfiguration.noLoadingState).toBe(false); - expect(linkTokenConfiguration.token).toBe("test-token"); - expect(linkTokenConfiguration.logLevel).toBe(Types.LinkLogLevel.DEBUG); - expect(linkTokenConfiguration.extras).toBe(null); -}); \ No newline at end of file diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/EmbeddedLinkViewNativeComponent.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/EmbeddedLinkViewNativeComponent.ts deleted file mode 100644 index 7167025f..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/EmbeddedLinkViewNativeComponent.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { ViewProps } from 'react-native'; -import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent'; -// @ts-ignore getting the types from the codegen -import { DirectEventHandler, UnsafeMixed } from 'react-native/Libraries/Types/CodegenTypes'; - -export interface NativeProps extends ViewProps { - token?: string; - iOSPresentationStyle?: string; - onEmbeddedEvent: DirectEventHandler<{ - embeddedEventName: string; - // for EmbeddedEvent - eventName?: string; - // for EmbeddedExit - error?: UnsafeMixed; - // for EmbeddedSuccess - publicToken?: string; - // for all of them - metadata?: UnsafeMixed; - }>; -} - -export default codegenNativeComponent( - 'PLKEmbeddedView', -); diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts deleted file mode 100644 index bee153ad..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleAndroid.ts +++ /dev/null @@ -1,31 +0,0 @@ -// we use Object type because methods on the native side use NSDictionary and ReadableMap -// and we want to stay compatible with those -import {TurboModuleRegistry, TurboModule} from 'react-native'; -import {Double} from 'react-native/Libraries/Types/CodegenTypes'; -import {UnsafeObject} from './fabricUtils'; -import {LinkSuccess, LinkExit} from '../Types'; - -export interface Spec extends TurboModule { - createPlaidLink(token: string, noLoadingState: boolean, logLevel: string): void; - open( - onSuccess: (result: UnsafeObject) => void, - onExit: (result: UnsafeObject) => void, - ): void; - destroy(): Promise; - startLinkActivityForResult( - token: string, - noLoadingState: boolean, - logLevel: string, - onSuccessCallback: (result: UnsafeObject) => void, - onExitCallback: (result: UnsafeObject) => void - ): void; - submit( - phoneNumber: string | undefined, - dateOfBirth: string | undefined - ): void; - // those two are here for event emitter methods - addListener(eventName: string): void; - removeListeners(count: Double): void; -} - -export default TurboModuleRegistry.get('PlaidAndroid'); diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts deleted file mode 100644 index a783aa9d..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/NativePlaidLinkModuleiOS.ts +++ /dev/null @@ -1,32 +0,0 @@ -// we use Object type because methods on the native side use NSDictionary and ReadableMap -// and we want to stay compatible with those -import {TurboModuleRegistry, TurboModule} from 'react-native'; -import {Int32} from 'react-native/Libraries/Types/CodegenTypes'; -import {UnsafeObject} from './fabricUtils'; -import {LinkSuccess, LinkExit, LinkError, FinanceKitError} from '../Types'; - -export interface Spec extends TurboModule { - createPlaidLink(token: string, noLoadingState: boolean): void; - open( - fullScreen: boolean, - onSuccess: (result: UnsafeObject) => void, - onExit: (error: UnsafeObject, result: UnsafeObject) => void, - ): void; - dismiss(): void; - submit( - phoneNumber: string | undefined, - dateOfBirth: string | undefined - ): void; - // those two are here for event emitter methods - addListener(eventName: string): void; - removeListeners(count: Int32): void; - syncFinanceKit( - token: string, - requestAuthorizationIfNeeded: boolean, - simulatedBehavior: boolean, - onSuccess: (success: boolean) => void, - onError: (error: UnsafeObject) => void - ): void -} - -export default TurboModuleRegistry.get('RNLinksdk'); diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/fabricUtils.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/fabricUtils.ts deleted file mode 100644 index c420ec2a..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/fabric/fabricUtils.ts +++ /dev/null @@ -1,2 +0,0 @@ -// codegen treats UnsafeObject as a special type for just plain object and we need to use it for callbacks -export type UnsafeObject = T; diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/src/index.ts b/FabricExample/.yalc/react-native-plaid-link-sdk/src/index.ts deleted file mode 100644 index bf0a4abf..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/src/index.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - create, - open, - destroy, - dismissLink, - usePlaidEmitter, - syncFinanceKit, - submit, -} from './PlaidLink'; - -export * from './Types'; -export { - create, - open, - destroy, - dismissLink, - usePlaidEmitter, - syncFinanceKit, - submit, -}; - -// Components - -export { EmbeddedLinkView } from './EmbeddedLink/EmbeddedLinkView'; diff --git a/FabricExample/.yalc/react-native-plaid-link-sdk/yalc.sig b/FabricExample/.yalc/react-native-plaid-link-sdk/yalc.sig deleted file mode 100644 index a1ee9a3b..00000000 --- a/FabricExample/.yalc/react-native-plaid-link-sdk/yalc.sig +++ /dev/null @@ -1 +0,0 @@ -983b05ce94ac32b2c50766efb9b552c6 \ No newline at end of file diff --git a/FabricExample/App.tsx b/FabricExample/App.tsx deleted file mode 100644 index 834a527f..00000000 --- a/FabricExample/App.tsx +++ /dev/null @@ -1 +0,0 @@ -export { default } from './src/App'; diff --git a/FabricExample/Gemfile b/FabricExample/Gemfile deleted file mode 100644 index 6a4c5f17..00000000 --- a/FabricExample/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Exclude problematic versions of cocoapods and activesupport that causes build failures. -gem 'cocoapods', '>= 1.13', '!= 1.15.0', '!= 1.15.1' -gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' -gem 'xcodeproj', '< 1.26.0' -gem 'concurrent-ruby', '< 1.3.4' - -# Ruby 3.4.0 has removed some libraries from the standard library. -gem 'bigdecimal' -gem 'logger' -gem 'benchmark' -gem 'mutex_m' diff --git a/FabricExample/README.md b/FabricExample/README.md deleted file mode 100644 index 3e2c3f85..00000000 --- a/FabricExample/README.md +++ /dev/null @@ -1,97 +0,0 @@ -This is a new [**React Native**](https://reactnative.dev) project, bootstrapped using [`@react-native-community/cli`](https://github.com/react-native-community/cli). - -# Getting Started - -> **Note**: Make sure you have completed the [Set Up Your Environment](https://reactnative.dev/docs/set-up-your-environment) guide before proceeding. - -## Step 1: Start Metro - -First, you will need to run **Metro**, the JavaScript build tool for React Native. - -To start the Metro dev server, run the following command from the root of your React Native project: - -```sh -# Using npm -npm start - -# OR using Yarn -yarn start -``` - -## Step 2: Build and run your app - -With Metro running, open a new terminal window/pane from the root of your React Native project, and use one of the following commands to build and run your Android or iOS app: - -### Android - -```sh -# Using npm -npm run android - -# OR using Yarn -yarn android -``` - -### iOS - -For iOS, remember to install CocoaPods dependencies (this only needs to be run on first clone or after updating native deps). - -The first time you create a new project, run the Ruby bundler to install CocoaPods itself: - -```sh -bundle install -``` - -Then, and every time you update your native dependencies, run: - -```sh -bundle exec pod install -``` - -For more information, please visit [CocoaPods Getting Started guide](https://guides.cocoapods.org/using/getting-started.html). - -```sh -# Using npm -npm run ios - -# OR using Yarn -yarn ios -``` - -If everything is set up correctly, you should see your new app running in the Android Emulator, iOS Simulator, or your connected device. - -This is one way to run your app β€” you can also build it directly from Android Studio or Xcode. - -## Step 3: Modify your app - -Now that you have successfully run the app, let's make changes! - -Open `App.tsx` in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes β€”Β this is powered by [Fast Refresh](https://reactnative.dev/docs/fast-refresh). - -When you want to forcefully reload, for example to reset the state of your app, you can perform a full reload: - -- **Android**: Press the R key twice or select **"Reload"** from the **Dev Menu**, accessed via Ctrl + M (Windows/Linux) or Cmd ⌘ + M (macOS). -- **iOS**: Press R in iOS Simulator. - -## Congratulations! :tada: - -You've successfully run and modified your React Native App. :partying_face: - -### Now what? - -- If you want to add this new React Native code to an existing application, check out the [Integration guide](https://reactnative.dev/docs/integration-with-existing-apps). -- If you're curious to learn more about React Native, check out the [docs](https://reactnative.dev/docs/getting-started). - -# Troubleshooting - -If you're having issues getting the above steps to work, see the [Troubleshooting](https://reactnative.dev/docs/troubleshooting) page. - -# Learn More - -To learn more about React Native, take a look at the following resources: - -- [React Native Website](https://reactnative.dev) - learn more about React Native. -- [Getting Started](https://reactnative.dev/docs/environment-setup) - an **overview** of React Native and how setup your environment. -- [Learn the Basics](https://reactnative.dev/docs/getting-started) - a **guided tour** of the React Native **basics**. -- [Blog](https://reactnative.dev/blog) - read the latest official React Native **Blog** posts. -- [`@facebook/react-native`](https://github.com/facebook/react-native) - the Open Source; GitHub **repository** for React Native. diff --git a/FabricExample/__tests__/App.test.tsx b/FabricExample/__tests__/App.test.tsx deleted file mode 100644 index e532f701..00000000 --- a/FabricExample/__tests__/App.test.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @format - */ - -import React from 'react'; -import ReactTestRenderer from 'react-test-renderer'; -import App from '../App'; - -test('renders correctly', async () => { - await ReactTestRenderer.act(() => { - ReactTestRenderer.create(); - }); -}); diff --git a/FabricExample/android/app/build.gradle b/FabricExample/android/app/build.gradle deleted file mode 100644 index 00ef3a8d..00000000 --- a/FabricExample/android/app/build.gradle +++ /dev/null @@ -1,119 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '../..' - // root = file("../../") - // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - // reactNativeDir = file("../../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen - // codegenDir = file("../../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - // cliFile = file("../../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - - /* Autolinking */ - autolinkLibrariesWithApp() -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.fabricexample" - defaultConfig { - applicationId "com.fabricexample" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} diff --git a/FabricExample/android/app/debug.keystore b/FabricExample/android/app/debug.keystore deleted file mode 100644 index 364e105e..00000000 Binary files a/FabricExample/android/app/debug.keystore and /dev/null differ diff --git a/FabricExample/android/app/proguard-rules.pro b/FabricExample/android/app/proguard-rules.pro deleted file mode 100644 index 11b02572..00000000 --- a/FabricExample/android/app/proguard-rules.pro +++ /dev/null @@ -1,10 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: diff --git a/FabricExample/android/app/src/debug/AndroidManifest.xml b/FabricExample/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index eb98c01a..00000000 --- a/FabricExample/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/FabricExample/android/app/src/main/AndroidManifest.xml b/FabricExample/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index e1892528..00000000 --- a/FabricExample/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - diff --git a/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.kt b/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.kt deleted file mode 100644 index 235fa3d4..00000000 --- a/FabricExample/android/app/src/main/java/com/fabricexample/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.fabricexample - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "FabricExample" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/FabricExample/android/app/src/main/java/com/fabricexample/MainApplication.kt b/FabricExample/android/app/src/main/java/com/fabricexample/MainApplication.kt deleted file mode 100644 index 8f1dd17c..00000000 --- a/FabricExample/android/app/src/main/java/com/fabricexample/MainApplication.kt +++ /dev/null @@ -1,38 +0,0 @@ -package com.fabricexample - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - loadReactNative(this) - } -} diff --git a/FabricExample/android/app/src/main/res/drawable/rn_edit_text_material.xml b/FabricExample/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 5c25e728..00000000 --- a/FabricExample/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f59082..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b523998..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd6..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c76..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd80..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe0..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebdd..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c..00000000 Binary files a/FabricExample/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/FabricExample/android/app/src/main/res/values/strings.xml b/FabricExample/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 30038583..00000000 --- a/FabricExample/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - FabricExample - diff --git a/FabricExample/android/app/src/main/res/values/styles.xml b/FabricExample/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 7ba83a2a..00000000 --- a/FabricExample/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/FabricExample/android/build.gradle b/FabricExample/android/build.gradle deleted file mode 100644 index dad99b02..00000000 --- a/FabricExample/android/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "36.0.0" - minSdkVersion = 24 - compileSdkVersion = 36 - targetSdkVersion = 36 - ndkVersion = "27.1.12297006" - kotlinVersion = "2.1.20" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/FabricExample/android/gradle.properties b/FabricExample/android/gradle.properties deleted file mode 100644 index 79603f50..00000000 --- a/FabricExample/android/gradle.properties +++ /dev/null @@ -1,45 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=true - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true - -# Use this property to enable edge-to-edge display support. -# This allows your app to draw behind system bars for an immersive UI. -# Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=false -newArchEnabled=true diff --git a/FabricExample/android/gradle/wrapper/gradle-wrapper.jar b/FabricExample/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 1b33c55b..00000000 Binary files a/FabricExample/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/FabricExample/android/gradle/wrapper/gradle-wrapper.properties b/FabricExample/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d4081da4..00000000 --- a/FabricExample/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/FabricExample/android/gradlew b/FabricExample/android/gradlew deleted file mode 100755 index 23d15a93..00000000 --- a/FabricExample/android/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright Β© 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions Β«$varΒ», Β«${var}Β», Β«${var:-default}Β», Β«${var+SET}Β», -# Β«${var#prefix}Β», Β«${var%suffix}Β», and Β«$( cmd )Β»; -# * compound commands having a testable exit status, especially Β«caseΒ»; -# * various built-in commands including Β«commandΒ», Β«setΒ», and Β«ulimitΒ». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/FabricExample/android/gradlew.bat b/FabricExample/android/gradlew.bat deleted file mode 100644 index dd2b8eed..00000000 --- a/FabricExample/android/gradlew.bat +++ /dev/null @@ -1,99 +0,0 @@ -@REM Copyright (c) Meta Platforms, Inc. and affiliates. -@REM -@REM This source code is licensed under the MIT license found in the -@REM LICENSE file in the root directory of this source tree. - -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/FabricExample/android/settings.gradle b/FabricExample/android/settings.gradle deleted file mode 100644 index 4418a4c9..00000000 --- a/FabricExample/android/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> ex.autolinkLibrariesFromCommand() } -rootProject.name = 'FabricExample' -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/FabricExample/app.json b/FabricExample/app.json deleted file mode 100644 index cd6bd13f..00000000 --- a/FabricExample/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "FabricExample", - "displayName": "FabricExample" -} diff --git a/FabricExample/babel.config.js b/FabricExample/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/FabricExample/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/FabricExample/index.js b/FabricExample/index.js deleted file mode 100644 index 9b739329..00000000 --- a/FabricExample/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @format - */ - -import { AppRegistry } from 'react-native'; -import App from './App'; -import { name as appName } from './app.json'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/FabricExample/ios/.xcode.env b/FabricExample/ios/.xcode.env deleted file mode 100644 index 3d5782c7..00000000 --- a/FabricExample/ios/.xcode.env +++ /dev/null @@ -1,11 +0,0 @@ -# This `.xcode.env` file is versioned and is used to source the environment -# used when running script phases inside Xcode. -# To customize your local environment, you can create an `.xcode.env.local` -# file that is not versioned. - -# NODE_BINARY variable contains the PATH to the node executable. -# -# Customize the NODE_BINARY variable here. -# For example, to use nvm with brew, add the following line -# . "$(brew --prefix nvm)/nvm.sh" --no-use -export NODE_BINARY=$(command -v node) diff --git a/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj b/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj deleted file mode 100644 index 6d8dcec8..00000000 --- a/FabricExample/ios/FabricExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,480 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 0C80B921A6F3F58F76C31292 /* libPods-FabricExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; - 9501A3D48C58FB8099602693 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 13B07F961A680F5B00A75B9A /* FabricExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FabricExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = FabricExample/Images.xcassets; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = FabricExample/Info.plist; sourceTree = ""; }; - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = FabricExample/PrivacyInfo.xcprivacy; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.debug.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-FabricExample.release.xcconfig"; path = "Target Support Files/Pods-FabricExample/Pods-FabricExample.release.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-FabricExample.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = FabricExample/AppDelegate.swift; sourceTree = ""; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = FabricExample/LaunchScreen.storyboard; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-FabricExample.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* FabricExample */ = { - isa = PBXGroup; - children = ( - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 761780EC2CA45674006654EE /* AppDelegate.swift */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, - ); - name = FabricExample; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-FabricExample.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* FabricExample */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* FabricExample.app */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* FabricExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FabricExample" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = FabricExample; - productName = FabricExample; - productReference = 13B07F961A680F5B00A75B9A /* FabricExample.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FabricExample" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* FabricExample */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 9501A3D48C58FB8099602693 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-FabricExample-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - 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"; - showEnvVarsInLog = 0; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-FabricExample/Pods-FabricExample-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-FabricExample.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Z2P2MSMY87; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = FabricExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = FabricExample; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-FabricExample.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = Z2P2MSMY87; - INFOPLIST_FILE = FabricExample/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = FabricExample; - SWIFT_VERSION = 5.0; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 15.1; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "FabricExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "FabricExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/FabricExample/ios/FabricExample.xcodeproj/xcshareddata/xcschemes/FabricExample.xcscheme b/FabricExample/ios/FabricExample.xcodeproj/xcshareddata/xcschemes/FabricExample.xcscheme deleted file mode 100644 index bc4aae22..00000000 --- a/FabricExample/ios/FabricExample.xcodeproj/xcshareddata/xcschemes/FabricExample.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FabricExample/ios/FabricExample.xcworkspace/contents.xcworkspacedata b/FabricExample/ios/FabricExample.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 3e9ae53e..00000000 --- a/FabricExample/ios/FabricExample.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/FabricExample/ios/FabricExample/AppDelegate.swift b/FabricExample/ios/FabricExample/AppDelegate.swift deleted file mode 100644 index 6caac08f..00000000 --- a/FabricExample/ios/FabricExample/AppDelegate.swift +++ /dev/null @@ -1,48 +0,0 @@ -import React -import ReactAppDependencyProvider -import React_RCTAppDelegate -import UIKit - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() - - reactNativeDelegate = delegate - reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "FabricExample", - in: window, - launchOptions: launchOptions - ) - - return true - } -} - -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { - override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() - } - - override func bundleURL() -> URL? { - #if DEBUG - RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") - #else - Bundle.main.url(forResource: "main", withExtension: "jsbundle") - #endif - } -} diff --git a/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/Contents.json b/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 81213230..00000000 --- a/FabricExample/ios/FabricExample/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images" : [ - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "idiom" : "ios-marketing", - "scale" : "1x", - "size" : "1024x1024" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/FabricExample/ios/FabricExample/Images.xcassets/Contents.json b/FabricExample/ios/FabricExample/Images.xcassets/Contents.json deleted file mode 100644 index 2d92bd53..00000000 --- a/FabricExample/ios/FabricExample/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "version" : 1, - "author" : "xcode" - } -} diff --git a/FabricExample/ios/FabricExample/Info.plist b/FabricExample/ios/FabricExample/Info.plist deleted file mode 100644 index ffa9e590..00000000 --- a/FabricExample/ios/FabricExample/Info.plist +++ /dev/null @@ -1,53 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - FabricExample - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSLocationWhenInUseUsageDescription - - RCTNewArchEnabled - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/FabricExample/ios/FabricExample/LaunchScreen.storyboard b/FabricExample/ios/FabricExample/LaunchScreen.storyboard deleted file mode 100644 index c4f28caf..00000000 --- a/FabricExample/ios/FabricExample/LaunchScreen.storyboard +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/FabricExample/ios/Podfile b/FabricExample/ios/Podfile deleted file mode 100644 index d754ce94..00000000 --- a/FabricExample/ios/Podfile +++ /dev/null @@ -1,35 +0,0 @@ -# Resolve react_native_pods.rb with node to allow for hoisting -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, min_ios_version_supported -prepare_react_native_project! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'FabricExample' do - config = use_native_modules! - - use_react_native!( - :path => config[:reactNativePath], - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - post_install do |installer| - # https://github.com/facebook/react-native/blob/main/packages/react-native/scripts/react_native_pods.rb#L197-L202 - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - # :ccache_enabled => true - ) - end -end diff --git a/FabricExample/ios/Podfile.lock b/FabricExample/ios/Podfile.lock deleted file mode 100644 index 97f41df6..00000000 --- a/FabricExample/ios/Podfile.lock +++ /dev/null @@ -1,2595 +0,0 @@ -PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - - fast_float (8.0.0) - - FBLazyVector (0.81.1) - - fmt (11.0.2) - - glog (0.3.5) - - hermes-engine (0.81.1): - - hermes-engine/Pre-built (= 0.81.1) - - hermes-engine/Pre-built (0.81.1) - - Plaid (6.4.2) - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCTDeprecation (0.81.1) - - RCTRequired (0.81.1) - - RCTTypeSafety (0.81.1): - - FBLazyVector (= 0.81.1) - - RCTRequired (= 0.81.1) - - React-Core (= 0.81.1) - - React (0.81.1): - - React-Core (= 0.81.1) - - React-Core/DevSupport (= 0.81.1) - - React-Core/RCTWebSocket (= 0.81.1) - - React-RCTActionSheet (= 0.81.1) - - React-RCTAnimation (= 0.81.1) - - React-RCTBlob (= 0.81.1) - - React-RCTImage (= 0.81.1) - - React-RCTLinking (= 0.81.1) - - React-RCTNetwork (= 0.81.1) - - React-RCTSettings (= 0.81.1) - - React-RCTText (= 0.81.1) - - React-RCTVibration (= 0.81.1) - - React-callinvoker (0.81.1) - - React-Core (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/CoreModulesHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/Default (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/DevSupport (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.1) - - React-Core/RCTWebSocket (= 0.81.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTActionSheetHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTAnimationHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTBlobHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTImageHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTLinkingHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTNetworkHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTSettingsHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTTextHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTVibrationHeaders (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTWebSocket (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.1) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-CoreModules (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.1) - - React-Core/CoreModulesHeaders (= 0.81.1) - - React-jsi (= 0.81.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.1) - - React-runtimeexecutor - - ReactCommon - - SocketRocket - - React-cxxreact (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-debug (= 0.81.1) - - React-jsi (= 0.81.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - React-runtimeexecutor - - React-timing (= 0.81.1) - - SocketRocket - - React-debug (0.81.1) - - React-defaultsnativemodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-domnativemodule - - React-featureflagsnativemodule - - React-idlecallbacksnativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-RCTFBReactNativeSpec - - SocketRocket - - React-domnativemodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Fabric - - React-Fabric/bridging - - React-FabricComponents - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/animations (= 0.81.1) - - React-Fabric/attributedstring (= 0.81.1) - - React-Fabric/bridging (= 0.81.1) - - React-Fabric/componentregistry (= 0.81.1) - - React-Fabric/componentregistrynative (= 0.81.1) - - React-Fabric/components (= 0.81.1) - - React-Fabric/consistency (= 0.81.1) - - React-Fabric/core (= 0.81.1) - - React-Fabric/dom (= 0.81.1) - - React-Fabric/imagemanager (= 0.81.1) - - React-Fabric/leakchecker (= 0.81.1) - - React-Fabric/mounting (= 0.81.1) - - React-Fabric/observers (= 0.81.1) - - React-Fabric/scheduler (= 0.81.1) - - React-Fabric/telemetry (= 0.81.1) - - React-Fabric/templateprocessor (= 0.81.1) - - React-Fabric/uimanager (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animations (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/attributedstring (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/bridging (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistry (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistrynative (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.1) - - React-Fabric/components/root (= 0.81.1) - - React-Fabric/components/scrollview (= 0.81.1) - - React-Fabric/components/view (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/root (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/scrollview (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/view (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric/consistency (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/core (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/dom (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/imagemanager (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/leakchecker (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/mounting (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/events (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/scheduler (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancetimeline - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/telemetry (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/templateprocessor (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager/consistency (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-FabricComponents (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.81.1) - - React-FabricComponents/textlayoutmanager (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.1) - - React-FabricComponents/components/iostextinput (= 0.81.1) - - React-FabricComponents/components/modal (= 0.81.1) - - React-FabricComponents/components/rncore (= 0.81.1) - - React-FabricComponents/components/safeareaview (= 0.81.1) - - React-FabricComponents/components/scrollview (= 0.81.1) - - React-FabricComponents/components/switch (= 0.81.1) - - React-FabricComponents/components/text (= 0.81.1) - - React-FabricComponents/components/textinput (= 0.81.1) - - React-FabricComponents/components/unimplementedview (= 0.81.1) - - React-FabricComponents/components/virtualview (= 0.81.1) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/inputaccessory (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/iostextinput (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/modal (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/rncore (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/safeareaview (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/scrollview (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/switch (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/text (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/textinput (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/unimplementedview (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/virtualview (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/textlayoutmanager (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricImage (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired (= 0.81.1) - - RCTTypeSafety (= 0.81.1) - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.81.1) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - SocketRocket - - Yoga - - React-featureflags (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-featureflagsnativemodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - React-graphics (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-utils - - SocketRocket - - React-hermes (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) - - React-jsi - - React-jsiexecutor (= 0.81.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.81.1) - - React-runtimeexecutor - - SocketRocket - - React-idlecallbacksnativemodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - SocketRocket - - React-ImageManager (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - SocketRocket - - React-jserrorhandler (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - ReactCommon/turbomodule/bridging - - SocketRocket - - React-jsi (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsiexecutor (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.81.1) - - React-runtimeexecutor - - SocketRocket - - React-jsinspector (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-oscompat - - React-perflogger (= 0.81.1) - - React-runtimeexecutor - - SocketRocket - - React-jsinspectorcdp (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsinspectornetwork (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsinspectorcdp - - React-performancetimeline - - React-timing - - SocketRocket - - React-jsinspectortracing (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-oscompat - - React-timing - - SocketRocket - - React-jsitooling (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-runtimeexecutor - - SocketRocket - - React-jsitracing (0.81.1): - - React-jsi - - React-logger (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-Mapbuffer (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-microtasksnativemodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - react-native-plaid-link-sdk (12.7.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - Plaid (~> 6.4.2) - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-NativeModulesApple (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core - - React-cxxreact - - React-featureflags - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - React-oscompat (0.81.1) - - React-perflogger (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-performancetimeline (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsinspectortracing - - React-perflogger - - React-timing - - SocketRocket - - React-RCTActionSheet (0.81.1): - - React-Core/RCTActionSheetHeaders (= 0.81.1) - - React-RCTAnimation (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTAnimationHeaders - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTAppDelegate (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon - - SocketRocket - - React-RCTBlob (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTFabric (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-RCTAnimation - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-RCTFBReactNativeSpec (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.1) - - ReactCommon - - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon - - SocketRocket - - Yoga - - React-RCTImage (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTLinking (0.81.1): - - React-Core/RCTLinkingHeaders (= 0.81.1) - - React-jsi (= 0.81.1) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.1) - - React-RCTNetwork (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTNetworkHeaders - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTRuntime (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - SocketRocket - - React-RCTSettings (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTText (0.81.1): - - React-Core/RCTTextHeaders (= 0.81.1) - - Yoga - - React-RCTVibration (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-rendererconsistency (0.81.1) - - React-renderercss (0.81.1): - - React-debug - - React-utils - - React-rendererdebug (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-RuntimeApple (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - SocketRocket - - React-RuntimeCore (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-Fabric - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - React-runtimeexecutor (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - React-featureflags - - React-jsi (= 0.81.1) - - React-utils - - SocketRocket - - React-RuntimeHermes (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-runtimeexecutor - - React-utils - - SocketRocket - - React-runtimescheduler (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - SocketRocket - - React-timing (0.81.1): - - React-debug - - React-utils (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - React-jsi (= 0.81.1) - - SocketRocket - - ReactAppDependencyProvider (0.81.1): - - ReactCodegen - - ReactCodegen (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - ReactCommon (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.1) - - SocketRocket - - ReactCommon/turbomodule (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - ReactCommon/turbomodule/bridging (= 0.81.1) - - ReactCommon/turbomodule/core (= 0.81.1) - - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - SocketRocket - - ReactCommon/turbomodule/core (0.81.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.1) - - React-cxxreact (= 0.81.1) - - React-debug (= 0.81.1) - - React-featureflags (= 0.81.1) - - React-jsi (= 0.81.1) - - React-logger (= 0.81.1) - - React-perflogger (= 0.81.1) - - React-utils (= 0.81.1) - - SocketRocket - - SocketRocket (0.7.1) - - Yoga (0.0.0) - -DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) - - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - react-native-plaid-link-sdk (from `../node_modules/react-native-plaid-link-sdk`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - ReactAppDependencyProvider (from `build/generated/ios`) - - ReactCodegen (from `build/generated/ios`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - SocketRocket (~> 0.7.1) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - Plaid - - SocketRocket - -EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsinspectorcdp: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" - React-jsinspectornetwork: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" - React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" - React-jsitooling: - :path: "../node_modules/react-native/ReactCommon/jsitooling" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - react-native-plaid-link-sdk: - :path: "../node_modules/react-native-plaid-link-sdk" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-oscompat: - :path: "../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTRuntime: - :path: "../node_modules/react-native/React/Runtime" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-renderercss: - :path: "../node_modules/react-native/ReactCommon/react/renderer/css" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - ReactAppDependencyProvider: - :path: build/generated/ios - ReactCodegen: - :path: build/generated/ios - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: b8f1312d48447cca7b4abc21ed155db14742bd03 - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 4f8246b1f6d79f625e0d99472d1f3a71da4d28ca - Plaid: 8a212ed955d480364e0deb7fed93625b29811e9d - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: c4b9e2fd0ab200e3af72b013ed6113187c607077 - RCTRequired: e97dd5dafc1db8094e63bc5031e0371f092ae92a - RCTTypeSafety: 720403058b7c1380c6a3ae5706981d6362962c89 - React: f1486d005993b0af01943af1850d3d4f3b597545 - React-callinvoker: 133f69368c8559e744efa345223625d412f5dfbe - React-Core: 559823921b4f294c2840fa8238ca958a29ddc211 - React-CoreModules: c41e7bbfabbc420783bb926f45837a0d5e53341e - React-cxxreact: 9cb9fa738274a1b36b97ede09c8a6717dec1a20b - React-debug: e01581e1589f329e61c95b332bf7f4969b10564b - React-defaultsnativemodule: bbb39447caa6b6cf9405fa0099f828c083640faa - React-domnativemodule: 03744d12b6d56d098531a933730bf1d4cb79bdfb - React-Fabric: 530b3993a12a96e8a7cdb9f0ef48e605277b572e - React-FabricComponents: 271ec2a9b2c00ac66fd6d1fd24e9e964d907751d - React-FabricImage: d0af66e976dbab7f8b81e36dd369fc70727d2695 - React-featureflags: 269704c8eff86e0485c9d384e286350fcda6eb70 - React-featureflagsnativemodule: db1e5d88a912fb08a5ece33fcf64e1b732da8467 - React-graphics: b19d03a01b0722b4dc82f47acb56dc3ed41937e7 - React-hermes: 811606c0aca5a3f9c6fa8e4994e02ca8f677e68e - React-idlecallbacksnativemodule: 3a3df629cd50046c7e4354f9025aefe8f2c84601 - React-ImageManager: 0d53866c63132791e37bb2373f93044fdef14aa3 - React-jserrorhandler: d5700d6ab7162fd575287502a3c5d601d98e7f09 - React-jsi: ece95417fedbed0e7153a855cb8342b7c72ab75e - React-jsiexecutor: 2b0bb644b533df2f5c0cd6ade9a4560d0bf1dd84 - React-jsinspector: 0c160f8510a8852bdf2dac12f0b1949efc18200b - React-jsinspectorcdp: f4b84409f453f61ddd8614ad45139bc594ec6bb5 - React-jsinspectornetwork: 8f2f0ca8c871ca19b571f426002c0012e7fb2aee - React-jsinspectortracing: 33f6b977eb8a4bc1e3d1a4b948809aca083143f9 - React-jsitooling: 2c61529b589e17229a9f0a4a4fc35aa7ad495850 - React-jsitracing: 838a7b0c013c4aff7d382d7fdc78cf442013ba1d - React-logger: 7aef4d74123e5e3d267e5af1fbf5135b5a0d8381 - React-Mapbuffer: 91e0eab42a6ae7f3e34091a126d70fc53bd3823e - React-microtasksnativemodule: 1ead4fe154df3b1ba34b5a9e35ef3c4bdfa72ccb - react-native-plaid-link-sdk: f294b5737e57e6c5368bb293deeca5c0070f51ed - React-NativeModulesApple: eff2eba56030eb0d107b1642b8f853bc36a833ac - React-oscompat: b12c633e9c00f1f99467b1e0e0b8038895dae436 - React-perflogger: 58d12c4e5df1403030c97b9c621375c312cca454 - React-performancetimeline: 0ee0a3236c77a4ee6d8a6189089e41e4003d292e - React-RCTActionSheet: 3f741a3712653611a6bfc5abceb8260af9d0b218 - React-RCTAnimation: 408ad69ea136e99a463dd33eadecc29e586b3d72 - React-RCTAppDelegate: f03b46e80b8a3dbfa84b35abfe123e02f3ceef83 - React-RCTBlob: bd42e92a00ad22eaab92ffe5c137e7a2f725887a - React-RCTFabric: b99ab638c73cf2d57b886eafdbfb2e4909b0eb9a - React-RCTFBReactNativeSpec: 7ad9aba0e0655e3f29be0a1c3fd4a888fab04dcf - React-RCTImage: 0f1c74f7cd20027f8c34976a211b35d4263a0add - React-RCTLinking: 6d7dfc3a74110df56c3a73cc7626bf4415656542 - React-RCTNetwork: 6a25d8645a80d5b86098675ca39bf8fcf1afa08b - React-RCTRuntime: 38bfe9766565ae3293ca230bc51c9c020a8bc98a - React-RCTSettings: 651d9ae2cdd32f547ad0d225a2c13886d6ad2358 - React-RCTText: 9bc66cd288478e23195e01f5cb45eba79986b2b4 - React-RCTVibration: 371226f5667a00c76d792dcdb5c2e0fcbcde0c3b - React-rendererconsistency: a05f6c37f9389c53213d1e28798e441fa6fbdbcd - React-renderercss: 6e4febfa014b0f53bc171a62b0f713ddbdbb9860 - React-rendererdebug: e94bf27b9d55ef2795caa8e43aa92abc4a373b8b - React-RuntimeApple: 723be5159519eba1cd92449acb29436d21571b82 - React-RuntimeCore: f58eb0f01065c9d27d91de10b2e4ab4c76d83b0e - React-runtimeexecutor: f615ec8742d0b5820170f7c8b4d2c7cb75d93ac9 - React-RuntimeHermes: fddb258e03d330d1132bb19e78fe51ac2f3f41ac - React-runtimescheduler: e92a31460e654ced8587debeec37553315e1b6a5 - React-timing: 97ada2c47b4c5932e7f773c7d239c52b90d6ca68 - React-utils: f0949d247a46b4c09f03e5a3cb1167602d0b729a - ReactAppDependencyProvider: 3eb9096cb139eb433965693bbe541d96eb3d3ec9 - ReactCodegen: 4d203eddf6f977caa324640a20f92e70408d648b - ReactCommon: ce5d4226dfaf9d5dacbef57b4528819e39d3a120 - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: fa23995c18b65978347b096d0836f4f5093df545 - -PODFILE CHECKSUM: 25c4a61a446ea222280eb1884fb8614b5e062b6e - -COCOAPODS: 1.16.2 diff --git a/FabricExample/jest.config.js b/FabricExample/jest.config.js deleted file mode 100644 index 8eb675e9..00000000 --- a/FabricExample/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - preset: 'react-native', -}; diff --git a/FabricExample/metro.config.js b/FabricExample/metro.config.js deleted file mode 100644 index 2a0a21ce..00000000 --- a/FabricExample/metro.config.js +++ /dev/null @@ -1,11 +0,0 @@ -const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); - -/** - * Metro configuration - * https://reactnative.dev/docs/metro - * - * @type {import('@react-native/metro-config').MetroConfig} - */ -const config = {}; - -module.exports = mergeConfig(getDefaultConfig(__dirname), config); diff --git a/FabricExample/package-lock.json b/FabricExample/package-lock.json deleted file mode 100644 index a96a0329..00000000 --- a/FabricExample/package-lock.json +++ /dev/null @@ -1,10221 +0,0 @@ -{ - "name": "FabricExample", - "version": "0.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "FabricExample", - "version": "0.0.1", - "dependencies": { - "@react-native/new-app-screen": "0.81.1", - "react": "19.1.0", - "react-native": "0.81.1", - "react-native-plaid-link-sdk": "^12.7.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.81.1", - "@react-native/eslint-config": "0.81.1", - "@react-native/metro-config": "0.81.1", - "@react-native/typescript-config": "0.81.1", - "@types/jest": "^29.5.13", - "@types/react": "^19.1.0", - "@types/react-test-renderer": "^19.1.0", - "eslint": "^8.19.0", - "jest": "^29.6.3", - "prettier": "2.8.8", - "react-test-renderer": "19.1.0", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.28.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helpers": "^7.28.4", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/eslint-parser": { - "version": "7.28.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nicolo-ribaudo/eslint-scope-5-internals": "5.1.1-v1", - "eslint-visitor-keys": "^2.1.0", - "semver": "^6.3.1" - }, - "engines": { - "node": "^10.13.0 || ^12.13.0 || >=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0", - "eslint": "^7.5.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/@babel/generator": { - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.28.5", - "@babel/types": "^7.28.5", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.3" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.27.2", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.2", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "regexpu-core": "^6.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.6.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "debug": "^4.4.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.22.10" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.27.1", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.3", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-validator-identifier": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.27.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.27.1", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.28.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/traverse": "^7.28.3", - "@babel/types": "^7.28.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.28.4", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.5" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.28.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-proposal-export-default-from": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-default-from": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.27.1", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.28.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-remap-async-to-generator": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1", - "@babel/traverse": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/template": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-flow": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.28.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.28.3", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.0", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-create-class-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.28.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.27.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.28.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.5", - "@babel/helper-compilation-targets": "^7.27.2", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.3", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.27.1", - "@babel/plugin-syntax-import-attributes": "^7.27.1", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.28.0", - "@babel/plugin-transform-async-to-generator": "^7.27.1", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.5", - "@babel/plugin-transform-class-properties": "^7.27.1", - "@babel/plugin-transform-class-static-block": "^7.28.3", - "@babel/plugin-transform-classes": "^7.28.4", - "@babel/plugin-transform-computed-properties": "^7.27.1", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.27.1", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.0", - "@babel/plugin-transform-exponentiation-operator": "^7.28.5", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.27.1", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.5", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-modules-systemjs": "^7.28.5", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.27.1", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1", - "@babel/plugin-transform-numeric-separator": "^7.27.1", - "@babel/plugin-transform-object-rest-spread": "^7.28.4", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.28.5", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.27.1", - "@babel/plugin-transform-private-property-in-object": "^7.27.1", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.28.4", - "@babel/plugin-transform-regexp-modifiers": "^7.27.1", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.27.1", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.27.1", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.27.1", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.14", - "babel-plugin-polyfill-corejs3": "^0.13.0", - "babel-plugin-polyfill-regenerator": "^0.6.5", - "core-js-compat": "^3.43.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/runtime": { - "version": "7.28.4", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.27.2", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/parser": "^7.27.2", - "@babel/types": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse--for-generate-function-map": { - "name": "@babel/traverse", - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.28.5", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.28.5", - "@babel/template": "^7.27.2", - "@babel/types": "^7.28.5", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.28.5", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@isaacs/ttlcache": { - "version": "1.4.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/create-cache-key-function": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/types": "^29.6.3", - "jest-mock": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.11", - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nicolo-ribaudo/eslint-scope-5-internals": { - "version": "5.1.1-v1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-scope": "5.1.1" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@react-native-community/cli": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-clean": "20.0.0", - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-doctor": "20.0.0", - "@react-native-community/cli-server-api": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "@react-native-community/cli-types": "20.0.0", - "chalk": "^4.1.2", - "commander": "^9.4.1", - "deepmerge": "^4.3.0", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "fs-extra": "^8.1.0", - "graceful-fs": "^4.1.3", - "prompts": "^2.4.2", - "semver": "^7.5.2" - }, - "bin": { - "rnc-cli": "build/bin.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@react-native-community/cli-clean": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "node_modules/@react-native-community/cli-config": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "cosmiconfig": "^9.0.0", - "deepmerge": "^4.3.0", - "fast-glob": "^3.3.2", - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli-config-android": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "fast-glob": "^3.3.2", - "fast-xml-parser": "^4.4.1" - } - }, - "node_modules/@react-native-community/cli-config-apple": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-glob": "^3.3.2" - } - }, - "node_modules/@react-native-community/cli-doctor": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-apple": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "command-exists": "^1.2.8", - "deepmerge": "^4.3.0", - "envinfo": "^7.13.0", - "execa": "^5.0.0", - "node-stream-zip": "^1.9.1", - "ora": "^5.4.1", - "semver": "^7.5.2", - "wcwidth": "^1.0.1", - "yaml": "^2.2.1" - } - }, - "node_modules/@react-native-community/cli-doctor/node_modules/semver": { - "version": "7.7.3", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-platform-android": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config-android": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "logkitty": "^0.7.1" - } - }, - "node_modules/@react-native-community/cli-platform-apple": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-config-apple": "20.0.0", - "@react-native-community/cli-tools": "20.0.0", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "fast-xml-parser": "^4.4.1" - } - }, - "node_modules/@react-native-community/cli-platform-ios": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-platform-apple": "20.0.0" - } - }, - "node_modules/@react-native-community/cli-server-api": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native-community/cli-tools": "20.0.0", - "body-parser": "^1.20.3", - "compression": "^1.7.1", - "connect": "^3.6.5", - "errorhandler": "^1.5.1", - "nocache": "^3.0.1", - "open": "^6.2.0", - "pretty-format": "^29.7.0", - "serve-static": "^1.13.1", - "ws": "^6.2.3" - } - }, - "node_modules/@react-native-community/cli-tools": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@vscode/sudo-prompt": "^9.0.0", - "appdirsjs": "^1.2.4", - "chalk": "^4.1.2", - "execa": "^5.0.0", - "find-up": "^5.0.0", - "launch-editor": "^2.9.1", - "mime": "^2.4.1", - "ora": "^5.4.1", - "prompts": "^2.4.2", - "semver": "^7.5.2" - } - }, - "node_modules/@react-native-community/cli-tools/node_modules/semver": { - "version": "7.7.3", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native-community/cli-types": { - "version": "20.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "joi": "^17.2.1" - } - }, - "node_modules/@react-native-community/cli/node_modules/semver": { - "version": "7.7.3", - "devOptional": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native/assets-registry": { - "version": "0.81.1", - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/babel-plugin-codegen": { - "version": "0.81.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@react-native/codegen": "0.81.1" - }, - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/babel-preset": { - "version": "0.81.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-proposal-export-default-from": "^7.24.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-default-from": "^7.24.7", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-flow-strip-types": "^7.25.2", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.24.7", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-react-display-name": "^7.24.7", - "@babel/plugin-transform-react-jsx": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-runtime": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-typescript": "^7.25.2", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/template": "^7.25.0", - "@react-native/babel-plugin-codegen": "0.81.1", - "babel-plugin-syntax-hermes-parser": "0.29.1", - "babel-plugin-transform-flow-enums": "^0.0.2", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/codegen": { - "version": "0.81.1", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/parser": "^7.25.3", - "glob": "^7.1.1", - "hermes-parser": "0.29.1", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "yargs": "^17.6.2" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/community-cli-plugin": { - "version": "0.81.1", - "license": "MIT", - "dependencies": { - "@react-native/dev-middleware": "0.81.1", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "metro": "^0.83.1", - "metro-config": "^0.83.1", - "metro-core": "^0.83.1", - "semver": "^7.1.3" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@react-native-community/cli": "*", - "@react-native/metro-config": "*" - }, - "peerDependenciesMeta": { - "@react-native-community/cli": { - "optional": true - }, - "@react-native/metro-config": { - "optional": true - } - } - }, - "node_modules/@react-native/community-cli-plugin/node_modules/semver": { - "version": "7.7.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@react-native/debugger-frontend": { - "version": "0.81.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/dev-middleware": { - "version": "0.81.1", - "license": "MIT", - "dependencies": { - "@isaacs/ttlcache": "^1.4.1", - "@react-native/debugger-frontend": "0.81.1", - "chrome-launcher": "^0.15.2", - "chromium-edge-launcher": "^0.2.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "invariant": "^2.2.4", - "nullthrows": "^1.1.1", - "open": "^7.0.3", - "serve-static": "^1.16.2", - "ws": "^6.2.3" - }, - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@react-native/dev-middleware/node_modules/open": { - "version": "7.4.2", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0", - "is-wsl": "^2.1.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@react-native/eslint-config": { - "version": "0.81.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/eslint-parser": "^7.25.1", - "@react-native/eslint-plugin": "0.81.1", - "@typescript-eslint/eslint-plugin": "^7.1.1", - "@typescript-eslint/parser": "^7.1.1", - "eslint-config-prettier": "^8.5.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-ft-flow": "^2.0.1", - "eslint-plugin-jest": "^27.9.0", - "eslint-plugin-react": "^7.30.1", - "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-react-native": "^4.0.0" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "eslint": ">=8", - "prettier": ">=2" - } - }, - "node_modules/@react-native/eslint-plugin": { - "version": "0.81.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/gradle-plugin": { - "version": "0.81.1", - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/js-polyfills": { - "version": "0.81.1", - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/metro-babel-transformer": { - "version": "0.81.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@react-native/babel-preset": "0.81.1", - "hermes-parser": "0.29.1", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@babel/core": "*" - } - }, - "node_modules/@react-native/metro-config": { - "version": "0.81.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@react-native/js-polyfills": "0.81.1", - "@react-native/metro-babel-transformer": "0.81.1", - "metro-config": "^0.83.1", - "metro-runtime": "^0.83.1" - }, - "engines": { - "node": ">= 20.19.4" - } - }, - "node_modules/@react-native/new-app-screen": { - "version": "0.81.1", - "license": "MIT", - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/@react-native/normalize-colors": { - "version": "0.81.1", - "license": "MIT" - }, - "node_modules/@react-native/typescript-config": { - "version": "0.81.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@sideway/address": { - "version": "4.1.5", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "devOptional": true, - "license": "BSD-3-Clause" - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.9", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jest": { - "version": "29.5.14", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "24.10.0", - "license": "MIT", - "dependencies": { - "undici-types": "~7.16.0" - } - }, - "node_modules/@types/react": { - "version": "19.2.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-test-renderer": { - "version": "19.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/semver": { - "version": "7.7.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.34", - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/type-utils": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "graphemer": "^1.4.0", - "ignore": "^5.3.1", - "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^7.0.0", - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "7.18.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "7.18.0", - "@typescript-eslint/utils": "7.18.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.18.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/visitor-keys": "7.18.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.18.0", - "@typescript-eslint/types": "7.18.0", - "@typescript-eslint/typescript-estree": "7.18.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.18.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.18.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@vscode/sudo-prompt": { - "version": "9.3.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/accepts": { - "version": "1.3.8", - "license": "MIT", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/negotiator": { - "version": "0.6.3", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.15.0", - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.4", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/anser": { - "version": "1.4.10", - "license": "MIT" - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-fragments": { - "version": "0.2.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "colorette": "^1.0.7", - "slice-ansi": "^2.0.0", - "strip-ansi": "^5.0.0" - } - }, - "node_modules/ansi-fragments/node_modules/ansi-regex": { - "version": "4.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-fragments/node_modules/strip-ansi": { - "version": "5.2.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/appdirsjs": { - "version": "1.2.7", - "devOptional": true, - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "devOptional": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.0", - "es-object-atoms": "^1.1.1", - "get-intrinsic": "^1.3.0", - "is-string": "^1.1.1", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlast": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.tosorted": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.3", - "es-errors": "^1.3.0", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/astral-regex": { - "version": "1.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/async-limiter": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/babel-jest": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/transform": "^29.7.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.14", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.27.7", - "@babel/helper-define-polyfill-provider": "^0.6.5", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.13.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5", - "core-js-compat": "^3.43.0" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.6.5", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.6.5" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-syntax-hermes-parser": { - "version": "0.29.1", - "license": "MIT", - "dependencies": { - "hermes-parser": "0.29.1" - } - }, - "node_modules/babel-plugin-transform-flow-enums": { - "version": "0.0.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-flow": "^7.12.1" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.8.24", - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.js" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", - "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "~1.2.0", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "on-finished": "~2.4.1", - "qs": "~6.14.0", - "raw-body": "~2.5.3", - "type-is": "~1.6.18", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/brace-expansion": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.27.0", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.8.19", - "caniuse-lite": "^1.0.30001751", - "electron-to-chromium": "^1.5.238", - "node-releases": "^2.0.26", - "update-browserslist-db": "^1.1.4" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "license": "MIT" - }, - "node_modules/bytes": { - "version": "3.1.2", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001753", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chrome-launcher": { - "version": "0.15.2", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0" - }, - "bin": { - "print-chrome-path": "bin/print-chrome-path.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/chrome-launcher/node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chromium-edge-launcher": { - "version": "0.2.0", - "license": "Apache-2.0", - "dependencies": { - "@types/node": "*", - "escape-string-regexp": "^4.0.0", - "is-wsl": "^2.2.0", - "lighthouse-logger": "^1.0.0", - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "node_modules/chromium-edge-launcher/node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.4.3", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/co": { - "version": "4.6.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/colorette": { - "version": "1.4.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/command-exists": { - "version": "1.2.9", - "devOptional": true, - "license": "MIT" - }, - "node_modules/commander": { - "version": "9.5.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || >=14" - } - }, - "node_modules/compressible": { - "version": "2.0.18", - "devOptional": true, - "license": "MIT", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.8.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "compressible": "~2.0.18", - "debug": "2.6.9", - "negotiator": "~0.6.4", - "on-headers": "~1.1.0", - "safe-buffer": "5.2.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/connect": { - "version": "3.7.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "finalhandler": "1.1.2", - "parseurl": "~1.3.3", - "utils-merge": "1.0.1" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/connect/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/connect/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/content-type": { - "version": "1.0.5", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/core-js-compat": { - "version": "3.46.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "browserslist": "^4.26.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cosmiconfig": { - "version": "9.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.1", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/create-jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "prompts": "^2.0.1" - }, - "bin": { - "create-jest": "bin/create-jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "devOptional": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/csstype": { - "version": "3.1.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/dayjs": { - "version": "1.11.19", - "devOptional": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dedent": { - "version": "1.7.0", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.5.244", - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/envinfo": { - "version": "7.20.0", - "devOptional": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" - } - }, - "node_modules/errorhandler": { - "version": "1.5.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "accepts": "~1.3.7", - "escape-html": "~1.0.3" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-abstract": { - "version": "1.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.3.0", - "get-proto": "^1.0.1", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-negative-zero": "^2.0.3", - "is-regex": "^1.2.1", - "is-set": "^2.0.3", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.1", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.4", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.4", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "stop-iteration-iterator": "^1.1.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.19" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-iterator-helpers": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-set-tostringtag": "^2.0.3", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.6", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "iterator.prototype": "^1.1.4", - "safe-array-concat": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "8.10.2", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-ft-flow": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "string-natural-compare": "^3.0.1" - }, - "engines": { - "node": ">=12.22.0" - }, - "peerDependencies": { - "@babel/eslint-parser": "^7.12.0", - "eslint": "^8.1.0" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint-plugin-react": { - "version": "7.37.5", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.8", - "array.prototype.findlast": "^1.2.5", - "array.prototype.flatmap": "^1.3.3", - "array.prototype.tosorted": "^1.1.4", - "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.2.1", - "estraverse": "^5.3.0", - "hasown": "^2.0.2", - "jsx-ast-utils": "^2.4.1 || ^3.0.0", - "minimatch": "^3.1.2", - "object.entries": "^1.1.9", - "object.fromentries": "^2.0.8", - "object.values": "^1.2.1", - "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.5", - "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.12", - "string.prototype.repeat": "^1.0.0" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" - } - }, - "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-react-native": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-react-native-globals": "^0.1.1" - }, - "peerDependencies": { - "eslint": "^3.17.0 || ^4 || ^5 || ^6 || ^7 || ^8" - } - }, - "node_modules/eslint-plugin-react-native-globals": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-plugin-react/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-react/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.12", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/exponential-backoff": { - "version": "3.1.3", - "license": "Apache-2.0" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-xml-parser": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.4.tgz", - "integrity": "sha512-jE8ugADnYOBsu1uaoayVl1tVKAMNOXyjwvv2U6udEA2ORBhDooJDWoGxTkhd4Qn4yh59JVVt/pKXtjPwx9OguQ==", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "strnum": "^1.0.5" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "devOptional": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/finalhandler/node_modules/on-finished": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/flow-enums-runtime": { - "version": "0.0.6", - "license": "MIT" - }, - "node_modules/for-each": { - "version": "0.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "devOptional": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.12", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hermes-estree": { - "version": "0.29.1", - "license": "MIT" - }, - "node_modules/hermes-parser": { - "version": "0.29.1", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.29.1" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-errors/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "devOptional": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=16.x" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-local": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.4", - "generator-function": "^2.0.0", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/iterator.prototype": { - "version": "1.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "get-proto": "^1.0.0", - "has-symbols": "^1.1.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/expect": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.7.0", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.7.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "create-jest": "^29.7.0", - "exit": "^0.1.2", - "import-local": "^3.0.2", - "jest-config": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-jest": "^29.7.0", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.7.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/environment": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.7.0", - "jest-environment-node": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-leak-detector": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-resolve": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-util": "^29.7.0", - "jest-watcher": "^29.7.0", - "jest-worker": "^29.7.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.7.0", - "@jest/fake-timers": "^29.7.0", - "@jest/globals": "^29.7.0", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.7.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.7.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.7.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.13.3", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.3.0", - "@hapi/topo": "^5.1.0", - "@sideway/address": "^4.1.5", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsc-safe-url": { - "version": "0.2.4", - "license": "0BSD" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "devOptional": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "devOptional": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsx-ast-utils": { - "version": "3.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flat": "^1.3.1", - "object.assign": "^4.1.4", - "object.values": "^1.1.6" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/launch-editor": { - "version": "2.12.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lighthouse-logger": { - "version": "1.4.2", - "license": "Apache-2.0", - "dependencies": { - "debug": "^2.6.9", - "marky": "^1.2.2" - } - }, - "node_modules/lighthouse-logger/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/lighthouse-logger/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "devOptional": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "6.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", - "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "devOptional": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.throttle": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty": { - "version": "0.7.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-fragments": "^0.2.1", - "dayjs": "^1.8.15", - "yargs": "^15.1.0" - }, - "bin": { - "logkitty": "bin/logkitty.js" - } - }, - "node_modules/logkitty/node_modules/cliui": { - "version": "6.0.0", - "devOptional": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/logkitty/node_modules/find-up": { - "version": "4.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/locate-path": { - "version": "5.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/p-limit": { - "version": "2.3.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logkitty/node_modules/p-locate": { - "version": "4.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/wrap-ansi": { - "version": "6.2.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/y18n": { - "version": "4.0.3", - "devOptional": true, - "license": "ISC" - }, - "node_modules/logkitty/node_modules/yargs": { - "version": "15.4.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/logkitty/node_modules/yargs-parser": { - "version": "18.1.3", - "devOptional": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.7.3", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/marky": { - "version": "1.3.0", - "license": "Apache-2.0" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memoize-one": { - "version": "5.2.1", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/metro": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "accepts": "^1.3.7", - "chalk": "^4.0.0", - "ci-info": "^2.0.0", - "connect": "^3.6.5", - "debug": "^4.4.0", - "error-stack-parser": "^2.0.6", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "hermes-parser": "0.32.0", - "image-size": "^1.0.2", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "jsc-safe-url": "^0.2.2", - "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-config": "0.83.3", - "metro-core": "0.83.3", - "metro-file-map": "0.83.3", - "metro-resolver": "0.83.3", - "metro-runtime": "0.83.3", - "metro-source-map": "0.83.3", - "metro-symbolicate": "0.83.3", - "metro-transform-plugins": "0.83.3", - "metro-transform-worker": "0.83.3", - "mime-types": "^2.1.27", - "nullthrows": "^1.1.1", - "serialize-error": "^2.1.0", - "source-map": "^0.5.6", - "throat": "^5.0.0", - "ws": "^7.5.10", - "yargs": "^17.6.2" - }, - "bin": { - "metro": "src/cli.js" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-babel-transformer": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.32.0", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.32.0", - "license": "MIT" - }, - "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.32.0", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.32.0" - } - }, - "node_modules/metro-cache": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "exponential-backoff": "^3.1.1", - "flow-enums-runtime": "^0.0.6", - "https-proxy-agent": "^7.0.5", - "metro-core": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-cache-key": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-config": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "connect": "^3.6.5", - "flow-enums-runtime": "^0.0.6", - "jest-validate": "^29.7.0", - "metro": "0.83.3", - "metro-cache": "0.83.3", - "metro-core": "0.83.3", - "metro-runtime": "0.83.3", - "yaml": "^2.6.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-core": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "lodash.throttle": "^4.1.1", - "metro-resolver": "0.83.3" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-file-map": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "fb-watchman": "^2.0.0", - "flow-enums-runtime": "^0.0.6", - "graceful-fs": "^4.2.4", - "invariant": "^2.2.4", - "jest-worker": "^29.7.0", - "micromatch": "^4.0.4", - "nullthrows": "^1.1.1", - "walker": "^1.0.7" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-minify-terser": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "terser": "^5.15.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-resolver": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-runtime": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.25.0", - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-source-map": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.25.3", - "@babel/traverse--for-generate-function-map": "npm:@babel/traverse@^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-symbolicate": "0.83.3", - "nullthrows": "^1.1.1", - "ob1": "0.83.3", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-source-map/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-symbolicate": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6", - "invariant": "^2.2.4", - "metro-source-map": "0.83.3", - "nullthrows": "^1.1.1", - "source-map": "^0.5.6", - "vlq": "^1.0.0" - }, - "bin": { - "metro-symbolicate": "src/index.js" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-symbolicate/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro-transform-plugins": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "flow-enums-runtime": "^0.0.6", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro-transform-worker": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", - "@babel/types": "^7.25.2", - "flow-enums-runtime": "^0.0.6", - "metro": "0.83.3", - "metro-babel-transformer": "0.83.3", - "metro-cache": "0.83.3", - "metro-cache-key": "0.83.3", - "metro-minify-terser": "0.83.3", - "metro-source-map": "0.83.3", - "metro-transform-plugins": "0.83.3", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/metro/node_modules/ci-info": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/metro/node_modules/hermes-estree": { - "version": "0.32.0", - "license": "MIT" - }, - "node_modules/metro/node_modules/hermes-parser": { - "version": "0.32.0", - "license": "MIT", - "dependencies": { - "hermes-estree": "0.32.0" - } - }, - "node_modules/metro/node_modules/source-map": { - "version": "0.5.7", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/metro/node_modules/ws": { - "version": "7.5.10", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "2.6.0", - "devOptional": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mime-db": { - "version": "1.54.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types/node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.4", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nocache": { - "version": "3.0.4", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.27", - "license": "MIT" - }, - "node_modules/node-stream-zip": { - "version": "1.15.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nullthrows": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/ob1": { - "version": "0.83.3", - "license": "MIT", - "dependencies": { - "flow-enums-runtime": "^0.0.6" - }, - "engines": { - "node": ">=20.19.4" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.entries": { - "version": "1.1.9", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "6.4.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-wsl": "^1.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/ora": { - "version": "5.4.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "devOptional": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/prettier": { - "version": "2.8.8", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/promise": { - "version": "8.3.0", - "license": "MIT", - "dependencies": { - "asap": "~2.0.6" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/prop-types/node_modules/react-is": { - "version": "16.13.1", - "dev": true, - "license": "MIT" - }, - "node_modules/punycode": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pure-rand": { - "version": "6.1.0", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", - "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", - "devOptional": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/range-parser": { - "version": "1.2.1", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", - "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.4.24", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "depd": "~2.0.0", - "inherits": "~2.0.4", - "setprototypeof": "~1.2.0", - "statuses": "~2.0.2", - "toidentifier": "~1.0.1" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body/node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/react": { - "version": "19.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-devtools-core": { - "version": "6.1.5", - "license": "MIT", - "dependencies": { - "shell-quote": "^1.6.1", - "ws": "^7" - } - }, - "node_modules/react-devtools-core/node_modules/ws": { - "version": "7.5.10", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "license": "MIT" - }, - "node_modules/react-native": { - "version": "0.81.1", - "license": "MIT", - "dependencies": { - "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.81.1", - "@react-native/codegen": "0.81.1", - "@react-native/community-cli-plugin": "0.81.1", - "@react-native/gradle-plugin": "0.81.1", - "@react-native/js-polyfills": "0.81.1", - "@react-native/normalize-colors": "0.81.1", - "@react-native/virtualized-lists": "0.81.1", - "abort-controller": "^3.0.0", - "anser": "^1.4.9", - "ansi-regex": "^5.0.0", - "babel-jest": "^29.7.0", - "babel-plugin-syntax-hermes-parser": "0.29.1", - "base64-js": "^1.5.1", - "commander": "^12.0.0", - "flow-enums-runtime": "^0.0.6", - "glob": "^7.1.1", - "invariant": "^2.2.4", - "jest-environment-node": "^29.7.0", - "memoize-one": "^5.0.0", - "metro-runtime": "^0.83.1", - "metro-source-map": "^0.83.1", - "nullthrows": "^1.1.1", - "pretty-format": "^29.7.0", - "promise": "^8.3.0", - "react-devtools-core": "^6.1.5", - "react-refresh": "^0.14.0", - "regenerator-runtime": "^0.13.2", - "scheduler": "0.26.0", - "semver": "^7.1.3", - "stacktrace-parser": "^0.1.10", - "whatwg-fetch": "^3.0.0", - "ws": "^6.2.3", - "yargs": "^17.6.2" - }, - "bin": { - "react-native": "cli.js" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "^19.1.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-native-plaid-link-sdk": { - "version": "12.7.0", - "resolved": "https://registry.npmjs.org/react-native-plaid-link-sdk/-/react-native-plaid-link-sdk-12.7.0.tgz", - "integrity": "sha512-sqzrnqqwQeB2KAgOuRp6GZS2HZqHfOyxj6hUW4LqZaK/Q4xI31+uVot3JR1HAP+GZoAo4uHZ8BSBTftWVv7bIA==", - "peerDependencies": { - "react": "*", - "react-native": "*" - } - }, - "node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.81.1", - "license": "MIT", - "dependencies": { - "invariant": "^2.2.4", - "nullthrows": "^1.1.1" - }, - "engines": { - "node": ">= 20.19.4" - }, - "peerDependencies": { - "@types/react": "^19.1.0", - "react": "*", - "react-native": "*" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/react-native/node_modules/commander": { - "version": "12.1.0", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/react-native/node_modules/semver": { - "version": "7.7.3", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/react-refresh": { - "version": "0.14.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-test-renderer": { - "version": "19.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "react-is": "^19.1.0", - "scheduler": "^0.26.0" - }, - "peerDependencies": { - "react": "^19.1.0" - } - }, - "node_modules/react-test-renderer/node_modules/react-is": { - "version": "19.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.2.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "license": "MIT" - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "6.4.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.2.2", - "regjsgen": "^0.8.0", - "regjsparser": "^0.13.0", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.2.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsgen": { - "version": "0.8.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.13.0", - "devOptional": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~3.1.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/resolve": { - "version": "1.22.11", - "devOptional": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/scheduler": { - "version": "0.26.0", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.19.0", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/send/node_modules/mime": { - "version": "1.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/send/node_modules/statuses": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/serialize-error": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/serve-static": { - "version": "1.16.2", - "license": "MIT", - "dependencies": { - "encodeurl": "~2.0.0", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.19.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-static/node_modules/encodeurl": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "devOptional": true, - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "devOptional": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "2.1.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.0", - "astral-regex": "^1.0.0", - "is-fullwidth-code-point": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "devOptional": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "devOptional": true, - "license": "MIT" - }, - "node_modules/source-map": { - "version": "0.6.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/stackframe": { - "version": "1.3.4", - "license": "MIT" - }, - "node_modules/stacktrace-parser": { - "version": "0.1.11", - "license": "MIT", - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-natural-compare": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.matchall": { - "version": "4.0.12", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.6", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.6", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "internal-slot": "^1.1.0", - "regexp.prototype.flags": "^1.5.3", - "set-function-name": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.repeat": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "1.1.2", - "devOptional": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/terser": { - "version": "5.44.0", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.15.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "license": "MIT" - }, - "node_modules/terser/node_modules/source-map-support": { - "version": "0.5.21", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.12", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/throat": { - "version": "5.0.0", - "license": "MIT" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "license": "BSD-3-Clause" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "devOptional": true, - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "7.16.0", - "license": "MIT" - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "devOptional": true, - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.2.1", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.2.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.1.4", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vlq": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/walker": { - "version": "1.0.8", - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "devOptional": true, - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/whatwg-fetch": { - "version": "3.6.20", - "license": "MIT" - }, - "node_modules/which": { - "version": "2.0.2", - "devOptional": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "devOptional": true, - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.19", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/ws": { - "version": "6.2.3", - "license": "MIT", - "dependencies": { - "async-limiter": "~1.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/FabricExample/package.json b/FabricExample/package.json deleted file mode 100644 index aeb516d7..00000000 --- a/FabricExample/package.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "FabricExample", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios --simulator=\"iPhone 16 Pro (18.1)\"", - "lint": "eslint .", - "start": "react-native start", - "test": "jest" - }, - "dependencies": { - "@react-native/new-app-screen": "0.81.1", - "react": "19.1.0", - "react-native": "0.81.1", - "react-native-plaid-link-sdk": "^12.7.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.81.1", - "@react-native/eslint-config": "0.81.1", - "@react-native/metro-config": "0.81.1", - "@react-native/typescript-config": "0.81.1", - "@types/jest": "^29.5.13", - "@types/react": "^19.1.0", - "@types/react-test-renderer": "^19.1.0", - "eslint": "^8.19.0", - "jest": "^29.6.3", - "prettier": "2.8.8", - "react-test-renderer": "19.1.0", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=20" - } -} diff --git a/FabricExample/src/App.tsx b/FabricExample/src/App.tsx deleted file mode 100644 index 4a837d14..00000000 --- a/FabricExample/src/App.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import React, { useState } from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - Text, - View, - TouchableOpacity, - Alert, - StyleSheet, - TextInput, -} from 'react-native'; - -import { - create, - open, - LinkExit, - LinkSuccess, - LinkTokenConfiguration, - LinkOpenProps, - LinkIOSPresentationStyle, - LinkLogLevel, -} from 'react-native-plaid-link-sdk'; - -import EmbeddedScreen from './EmbeddedScreen'; - -function isValidString(str: string): boolean { - return str?.trim() !== ''; -} - -function createLinkTokenConfiguration( - token: string, - noLoadingState: boolean = false, -): LinkTokenConfiguration { - console.log(`token: ${token}`); - return { - token, - noLoadingState, - onLoad: () => { - console.log('Link onLoad: finished loading'); - }, - }; -} - -function createLinkOpenProps(): LinkOpenProps { - return { - onSuccess: (success: LinkSuccess) => { - Alert.alert('Success', `Link successful: ${JSON.stringify(success, null, 2)}`); - console.log('Success: ', success); - success.metadata.accounts.forEach(account => console.log('accounts', account)); - }, - onExit: (linkExit: LinkExit) => { - Alert.alert('Exit', `Link exited: ${JSON.stringify(linkExit, null, 2)}`); - console.log('Exit: ', linkExit); - }, - iOSPresentationStyle: LinkIOSPresentationStyle.MODAL, - logLevel: LinkLogLevel.ERROR, - }; -} - -function App(): React.JSX.Element { - const [linkToken, setLinkToken] = useState(''); - const [disabled, setDisabled] = useState(true); - const [currentScreen, setCurrentScreen] = useState('main'); - - const handleCreateLink = () => { - try { - if (isValidString(linkToken)) { - const tokenConfiguration = createLinkTokenConfiguration(linkToken); - create(tokenConfiguration); - setDisabled(false); - Alert.alert('Success', 'Link created successfully!'); - } else { - Alert.alert('Error', 'Please enter a valid link token'); - } - } catch (error) { - Alert.alert('Error', `Failed to create Link: ${error}`); - } - }; - - const handleOpenLink = () => { - try { - const openProps = createLinkOpenProps(); - open(openProps); - setDisabled(true); - } catch (error) { - Alert.alert('Error', `Failed to open Link: ${error}`); - } - }; - - const showEmbeddedScreen = () => { - setCurrentScreen('embedded'); - }; - - const goBackToMain = () => { - setCurrentScreen('main'); - }; - - if (currentScreen === 'embedded') { - return ; - } - - return ( - - - - - - Plaid Link SDK Test - React Native 0.81.1 + New Architecture - - - - Paste a valid Link token and press "Create Link" to initialize Link. - Once created, press "Open Link" to launch the flow. - - - { - setLinkToken(newText); - setDisabled(true); // Reset disabled state when token changes - }} - value={linkToken} - placeholder="link-sandbox-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - placeholderTextColor={'#999999'} - multiline={false} - autoCapitalize="none" - autoCorrect={false} - /> - - - - Create Link - - Creates a Plaid Link handler - must be called before open - - - - - Open Link - - Opens Plaid Link flow - - - - - Test Embedded Link - - Navigate to embedded Link component test screen - - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#ffffff', - }, - body: { - backgroundColor: '#ffffff', - padding: 20, - }, - sectionTitle: { - fontSize: 24, - fontWeight: '600', - color: '#000000', - textAlign: 'center', - marginBottom: 10, - }, - sectionDescription: { - marginTop: 8, - fontSize: 14, - fontWeight: '400', - color: '#666666', - textAlign: 'center', - marginBottom: 20, - paddingHorizontal: 20, - }, - input: { - height: 50, - marginHorizontal: 20, - marginBottom: 20, - borderWidth: 1, - borderColor: '#cccccc', - borderRadius: 8, - paddingHorizontal: 15, - fontSize: 16, - backgroundColor: '#ffffff', - }, - disabledButton: { - backgroundColor: '#cccccc', - opacity: 0.6, - }, - buttonContainer: { - marginVertical: 20, - }, - button: { - backgroundColor: '#0066cc', - padding: 20, - borderRadius: 8, - marginVertical: 8, - alignItems: 'center', - }, - embeddedButton: { - backgroundColor: '#28a745', - }, - buttonText: { - color: '#ffffff', - fontSize: 18, - fontWeight: '600', - marginBottom: 4, - }, - buttonSubtext: { - color: '#ccddff', - fontSize: 14, - textAlign: 'center', - }, -}); - -export default App; \ No newline at end of file diff --git a/FabricExample/src/EmbeddedScreen.tsx b/FabricExample/src/EmbeddedScreen.tsx deleted file mode 100644 index de4ed453..00000000 --- a/FabricExample/src/EmbeddedScreen.tsx +++ /dev/null @@ -1,274 +0,0 @@ -import React, { useState } from 'react'; -import { - SafeAreaView, - ScrollView, - StatusBar, - Text, - View, - TouchableOpacity, - Alert, - StyleSheet, - TextInput, - Dimensions, -} from 'react-native'; - -import { - EmbeddedLinkView, - LinkExit, - LinkSuccess, - LinkEvent, - LinkIOSPresentationStyle, -} from 'react-native-plaid-link-sdk'; - -type EmbeddedScreenProps = { - onGoBack: () => void; - linkToken: string; -}; - -function isValidString(str: string): boolean { - return str?.trim() !== ''; -} - -const { width } = Dimensions.get('window'); - -const EmbeddedScreen: React.FC = ({ onGoBack, linkToken: initialToken }) => { - const [linkToken, setLinkToken] = useState(initialToken); - const [showEmbeddedLink, setShowEmbeddedLink] = useState(false); - - const onSuccess = (success: LinkSuccess) => { - Alert.alert('Success', `Link successful: ${JSON.stringify(success, null, 2)}`); - console.log('Success: ', success); - success.metadata.accounts.forEach(account => console.log('accounts', account)); - setShowEmbeddedLink(false); // Hide the embedded link after success - }; - - const onExit = (linkExit: LinkExit) => { - Alert.alert('Exit', `Link exited: ${JSON.stringify(linkExit, null, 2)}`); - console.log('Exit: ', linkExit); - setShowEmbeddedLink(false); // Hide the embedded link after exit - }; - - const onEvent = (linkEvent: LinkEvent) => { - console.log('Event: ', linkEvent); - }; - - const handleShowEmbeddedLink = () => { - if (isValidString(linkToken)) { - setShowEmbeddedLink(true); - } else { - Alert.alert('Error', 'Please enter a valid link token'); - } - }; - - const handleHideEmbeddedLink = () => { - setShowEmbeddedLink(false); - }; - - return ( - - - - - - ← Back to Main - - - - Embedded Link Test - React Native 0.81.1 + New Architecture (Fabric) - - - - This screen demonstrates the EmbeddedLinkView component working with React Native's New Architecture (Fabric). - Paste a valid Link token and press "Show Embedded Link" to display the embedded flow. - - - {!showEmbeddedLink && ( - <> - { - setLinkToken(newText); - }} - value={linkToken} - placeholder="link-sandbox-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - placeholderTextColor={'#999999'} - multiline={false} - autoCapitalize="none" - autoCorrect={false} - /> - - - - Show Embedded Link - - Displays the embedded Plaid Link component using Fabric - - - - - )} - - {showEmbeddedLink && ( - <> - - Embedded Plaid Link - - Close - - - - - - - - - βœ… EmbeddedLinkView is now running with Fabric (New Architecture)! - - - )} - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#ffffff', - }, - body: { - backgroundColor: '#ffffff', - padding: 20, - flex: 1, - }, - backButton: { - backgroundColor: '#f8f9fa', - padding: 12, - borderRadius: 8, - marginBottom: 20, - alignSelf: 'flex-start', - borderWidth: 1, - borderColor: '#dee2e6', - }, - backButtonText: { - color: '#495057', - fontSize: 16, - fontWeight: '500', - }, - sectionTitle: { - fontSize: 22, - fontWeight: '600', - color: '#000000', - textAlign: 'center', - marginBottom: 10, - }, - sectionDescription: { - marginTop: 8, - fontSize: 14, - fontWeight: '400', - color: '#666666', - textAlign: 'center', - marginBottom: 20, - paddingHorizontal: 20, - }, - input: { - height: 50, - marginHorizontal: 20, - marginBottom: 20, - borderWidth: 1, - borderColor: '#cccccc', - borderRadius: 8, - paddingHorizontal: 15, - fontSize: 16, - backgroundColor: '#ffffff', - }, - disabledButton: { - backgroundColor: '#cccccc', - opacity: 0.6, - }, - buttonContainer: { - marginVertical: 20, - }, - button: { - backgroundColor: '#0066cc', - padding: 20, - borderRadius: 8, - marginVertical: 8, - alignItems: 'center', - }, - buttonText: { - color: '#ffffff', - fontSize: 18, - fontWeight: '600', - marginBottom: 4, - }, - buttonSubtext: { - color: '#ccddff', - fontSize: 14, - textAlign: 'center', - }, - embeddedLinkHeader: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - marginBottom: 20, - paddingHorizontal: 20, - }, - embeddedLinkTitle: { - fontSize: 20, - fontWeight: '600', - color: '#000000', - }, - closeButton: { - backgroundColor: '#ff4444', - paddingHorizontal: 15, - paddingVertical: 8, - borderRadius: 6, - }, - closeButtonText: { - color: '#ffffff', - fontSize: 14, - fontWeight: '600', - }, - embeddedLinkContainer: { - marginHorizontal: 20, - marginBottom: 20, - borderRadius: 12, - overflow: 'hidden', - backgroundColor: '#f8f9fa', - borderWidth: 1, - borderColor: '#e9ecef', - }, - embeddedLink: { - height: 500, - width: '100%', - }, - footer: { - marginTop: 20, - fontSize: 16, - fontWeight: '500', - color: '#008800', - textAlign: 'center', - padding: 20, - backgroundColor: '#f0fff0', - borderRadius: 8, - marginHorizontal: 20, - }, -}); - -export default EmbeddedScreen; diff --git a/FabricExample/src/Styles.js b/FabricExample/src/Styles.js deleted file mode 100644 index 81d555f4..00000000 --- a/FabricExample/src/Styles.js +++ /dev/null @@ -1,59 +0,0 @@ -import { StyleSheet } from 'react-native'; - -export const styles = StyleSheet.create({ - button: { - backgroundColor: '#2196F3', - width: '90%', - marginVertical: 6, - paddingVertical: 10, - alignSelf: 'center', - alignItems: 'center', - borderRadius: 6, - }, - disabledButton: { - backgroundColor: '#2196F3', - width: '90%', - marginVertical: 6, - paddingVertical: 10, - alignSelf: 'center', - alignItems: 'center', - borderRadius: 6, - opacity: 0.5, - }, - buttonText: { - color: 'white', - fontSize: 16, - textTransform: 'uppercase', - }, - input: { - height: 40, - marginVertical: 12, - width: '90%', - alignSelf: 'center', - borderWidth: 1, - paddingHorizontal: 10, - borderColor: '#000', - borderRadius: 4, - }, - label: { - marginLeft: '5%', - marginTop: 12, - fontSize: 14, - fontWeight: '600', - color: '#000000', - }, - embedded: { - width: '95%', - alignSelf: 'center', - height: 360, - }, - loadingContainer: { - marginTop: 20, - alignItems: 'center', - }, - loadingText: { - marginTop: 10, - fontSize: 16, - color: '#000000', - }, -}); diff --git a/FabricExample/tsconfig.json b/FabricExample/tsconfig.json deleted file mode 100644 index c41b7e20..00000000 --- a/FabricExample/tsconfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": "@react-native/typescript-config", - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods"] -} diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 131a94dd..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2019 Plaid - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/README.md b/README.md index 86fa51b3..2cae8b1a 100644 --- a/README.md +++ b/README.md @@ -1,297 +1,37 @@ -# Plaid React Native SDK +# react-native-plaid-link-sdk -![version](https://img.shields.io/npm/v/react-native-plaid-link-sdk) -[![License](https://img.shields.io/github/license/plaid/react-native-plaid-link-sdk)](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/LICENSE) +React Native Plaid Link SDK (New Architecture & Expo) -The Plaid React Native SDK provides the client-side component that your users will interact with in order to link their accounts to Plaid and allow you access to their accounts via the Plaid API. -For more information about Plaid Link check out our -[introduction documentation](https://plaid.com/docs/link/#introduction-to-link). +# API documentation -Plaid currently supports two versions of the Plaid React Native SDK v10.x and v11.x. You can find v10 on the [master-v10](https://github.com/plaid/react-native-plaid-link-sdk/tree/master-v10) branch. +- [Documentation for the latest stable release](https://docs.expo.dev/versions/latest/sdk/react-native-plaid-link-sdk/) +- [Documentation for the main branch](https://docs.expo.dev/versions/unversioned/sdk/react-native-plaid-link-sdk/) -## Features +# Installation in managed Expo projects -The SDK provides: +For [managed](https://docs.expo.dev/archive/managed-vs-bare/) Expo projects, please follow the installation instructions in the [API documentation for the latest stable release](#api-documentation). If you follow the link and there is no documentation available then this library is not yet usable within managed projects — it is likely to be included in an upcoming Expo SDK release. -- A PlaidLink functional component. -- A function to open Link. -- A hook to handle [onEvent](https://plaid.com/docs/link/react-native/#onevent) callbacks. -- A function to dismiss link on iOS. -## Getting Started +# Installation in bare React Native projects -Get started with our πŸ“ [documentation](https://plaid.com/docs/link/react-native/) and the πŸ“±[example project](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/example/README.md), or ↔️ [Tiny Quickstart (React Native)](https://github.com/plaid/tiny-quickstart/tree/main/react_native) which is an end to end example demonstrating a minimal integration with this SDK. +For bare React Native projects, you must ensure that you have [installed and configured the `expo` package](https://docs.expo.dev/bare/installing-expo-modules/) before continuing. -If you're unfamiliar with React Native we recommend starting with the [environment setup instructions](https://reactnative.dev/docs/environment-setup). +### Add the package to your npm dependencies -In your React Native project directory: - -```sh -npm install --save react-native-plaid-link-sdk ``` - -### iOS Setup - -Autolinking should install the CocoaPods dependencies for iOS project. If it fails you can run - -```sh -cd ios && bundle install && bundle exec pod install +npm install react-native-plaid-link-sdk ``` -### Android Setup - -- Android 5.0 (API level 21) and above. - - Your `compileSdkVersion` must be `33`. -- Android gradle plugin `4.x` and above. - -AutoLinking should handle all of the Android setup. - -Remember to register your Android package name in the [Dashboard](https://dashboard.plaid.com/developers/api). This is required in order to connect to OAuth institutions (which includes most major banks). - -### React Native Setup - -- To initialize `PlaidLink`, you will need to first create a `link_token` at [/link/token/create](https://plaid.com/docs/api/link/#linktokencreate). Check out our [QuickStart guide](https://plaid.com/docs/quickstart/#introduction) for additional API information. - -#### Version >= 11.6.0 - -Starting from version `11.6.0`, we introduced the ability to preload part of the Link experience. You can initiate the preloading process by invoking the `create` function. - -```typescript -function createLinkTokenConfiguration( - token: string, - noLoadingState: boolean = false, -): LinkTokenConfiguration { - return { - token: token, - // Hides native activity indicator if true. - noLoadingState: noLoadingState, - }; -} - -const tokenConfiguration = createLinkTokenConfiguration("#GENERATED_LINK_TOKEN#"); -create(tokenConfiguration); -``` - -After calling `create`, you can subsequently invoke the `open` function. Note that maximizing the delay between these two calls will reduce latency for your users by allowing Link more time to load. - -```typescript -function createLinkOpenProps(): LinkOpenProps { - return { - onSuccess: (success: LinkSuccess) => { - // User was able to successfully link their account. - console.log('Success: ', success); - }, - onExit: (linkExit: LinkExit) => { - // User exited Link session. There may or may not be an error depending on what occured. - console.log('Exit: ', linkExit); - dismissLink(); - }, - // MODAL or FULL_SCREEEN presentation on iOS. Defaults to MODAL. - iOSPresentationStyle: LinkIOSPresentationStyle.MODAL, - logLevel: LinkLogLevel.ERROR, - }; -} - -const openProps = createLinkOpenProps(); -open(openProps); -``` - -#### Version < 11.6.0 - -In versions prior to `11.6.0`, you can open a link by calling the `openLink` function. - -```typescript -// Create PlaidLinkProps from the provided token string. -function makeLinkTokenProps(token: string): PlaidLinkProps { - return { - tokenConfig: { - token: token, - logLevel: LinkLogLevel.ERROR, - // Hides native activity indicator if true. - noLoadingState: false, - }, - onSuccess: (success: LinkSuccess) => { - // User was able to successfully link their account. - console.log('Success: ', success); - success.metadata.accounts.forEach(it => console.log('accounts', it)); - }, - onExit: (linkExit: LinkExit) => { - // User exited Link session. There may or may not be an error depending on what occured. - console.log('Exit: ', linkExit); - dismissLink(); - }, - // MODAL or FULL_SCREEEN presentation on iOS. Defaults to MODAL. - iOSPresentationStyle: LinkIOSPresentationStyle.MODAL, - }; -} - -const linkTokenProps = makeLinkTokenProps("#GENERATED_LINK_TOKEN#"); -openLink(linkTokenProps); -``` - -#### OAuth requirements - -:warning: All integrations must use version 9.0.0 or later of the React Native SDK (requires version 4.1.0 or later of the iOS LinkKit SDK) to maintain support for Chase OAuth on iOS. - -##### Android OAuth Requirements - -###### Register your app package name -1. Log into your [Plaid Dashboard](https://dashboard.plaid.com/developers/api) and navigate to the API page under the Developers tab. -2. Next to Allowed Android package names click "Configure" then "Add New Android Package Name". -3. Enter your package name, for example `com.plaid.example`. -4. Click "Save Changes", you may be prompted to re-enter your password. - -##### iOS OAuth Requirements - -For iOS OAuth to work, specific requirements must be met. -1. Redirect URIs must be [registered](https://plaid.com/docs/link/ios/#register-your-redirect-uri), and set up as [universal links](https://developer.apple.com/documentation/xcode/supporting-associated-domains). -2. Your native iOS application, must be configured with your associated domain. See your iOS [set up universal links](https://plaid.com/docs/link/ios/#set-up-universal-links) for more information. - - -##### Link Token OAuth Requirements - -- On iOS you must configure your `link_token` with a [redirect_uri](https://plaid.com/docs/api/tokens/#link-token-create-request-redirect-uri) to support OAuth. When creating a `link_token` for initializing Link on Android, `android_package_name` must be specified and `redirect_uri` must be left blank. - -- On Android you must configure your `link_token` with an [android_package_name](https://plaid.com/docs/api/tokens/#link-token-create-request-android-package-name) to support OAuth. When creating a `link_token` for initializing Link on iOS, `android_package_name` must be left blank and `redirect_uri` should be used instead. - - -#### To receive onEvent callbacks: - -The React Native Plaid module emits `onEvent` events throughout the account linking process β€” see [details here](https://plaid.com/docs/link/react-native/#onevent). To receive these events in your React Native app, use the `usePlaidEmitter` hook in react functional components: - -```javascript - usePlaidEmitter((event: LinkEvent) => { - console.log(event) - }) -``` - -#### Clearing Previous Session State with `destroy()` - -The `destroy()` method clears state and resources from a previously opened session. -It's especially useful if you're seeing unexpected behavior when calling `create()` multiple times β€” for example, if the phone number isn't submitting properly after multiple `create()` calls. - -#### Problem scenario: -```ts -create(tokenConfiguration1) -create(tokenConfiguration2) -submit(phoneNumber) // <-- might not submit correctly -``` - -#### Solution: -```ts -create(tokenConfiguration1) -async () => { - try { - await destroy(); // Clear previous session state - create(tokenConfiguration2); - submit(phoneNumber); - } catch (e) { - console.error('Error during flow:', e); - } -} -``` - -By calling destroy() before the second create(), you ensure a clean state, preventing issues like failed phone number submissions. - -## Upgrading - -Plaid releases updates to the SDK approximately every few months. For the best user experience, we recommend using the latest version of the SDK. - -Major SDK versions are released annually. SDK versions are supported for two years; with each major SDK release, Plaid will stop officially supporting any previous SDK versions that are more than two years old. - -While these older versions are expected to continue to work without disruption, Plaid will not provide assistance with unsupported SDK versions. - -## Migration guides +### Configure for Android -11.x->12.x: - - Removed the `PlaidLink` component and `openLink` function, which were deprecated in version 11.6.0. If you are using this method of opening Link, replace it with the new process that uses `create` and then `open`. For sample code, see [Version 11.6](https://github.com/plaid/react-native-plaid-link-sdk?tab=readme-ov-file#version--1160) or the [Plaid React Native Link docs](https://plaid.com/docs/link/react-native). - - Also see [Version compatibility table](#version-compatibility) for required toolchain updates. -9.x/10.x-> 11.x: See [React Native SDK 11 Migration Guide](https://github.com/plaid/react-native-plaid-link-sdk/blob/master/v11-migration-guide.md) -If migrating from older versions, see the [docs](https://plaid.com/docs/link/react-native/#migration-guides) for more information. -## Version compatibility -| Plaid SDK Version | Min React Native Version | Android SDK | Android Min Version | Android Compile Version| iOS SDK | iOS Min Version | Status | -|-------------------|--------------------------|-------------|---------------------|------------------------|---------|-----------------|-------------------------------| -| 12.8.0 | * | [5.5.1+] | 21 | 34 | >=6.4.3 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.7.0 | * | [5.5.0+] | 21 | 34 | >=6.4.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.6.1 | * | [5.4.0+] | 21 | 34 | >=6.4.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.6.0 | * | [5.4.0+] | 21 | 34 | >=6.4.1 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.5.3 | * | [5.3.4+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.5.2 | * | [5.3.3+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.5.1 | * | [5.3.2+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.5.0 | * | [5.3.2+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.4.0 | * | [5.3.0+] | 21 | 34 | >=6.4.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.3.2 | * | [5.2.0+] | 21 | 34 | >=6.3.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.3.1 | * | [5.2.0+] | 21 | 34 | >=6.3.1 | 14.0 | **Deprecated** | -| 12.3.0 | * | [5.2.0+] | 21 | 34 | >=6.3.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.2.1 | * | [5.1.1+] | 21 | 34 | >=6.2.1 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.2.0 | * | [5.1.1+] | 21 | 34 | >=6.2.1 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.1.1 | * | [5.0.0+] | 21 | 34 | >=6.1.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.1.0 | * | [5.0.0+] | 21 | 34 | >=6.1.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.3 | * | [5.0.0+] | 21 | 34 | >=6.0.4 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.2 | * | [5.0.0+] | 21 | 34 | >=6.0.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.1 | * | [5.0.0+] | 21 | 34 | >=6.0.2 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.0 | * | [5.0.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 16.1.0 | -| 12.0.0-beta.3 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 15.3.0 | -| 12.0.0-beta.2 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | Active, supports Xcode 15.3.0 | -| 12.0.0-beta.1 | * | [4.4.0+] | 21 | 34 | >=6.0.0 | 14.0 | **Deprecated** | -| 11.13.3 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.2 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.1 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.13.0 | * | [4.6.1+] | 21 | 34 | >=5.6.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.12.1 | * | [4.6.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.12.0 | * | [4.6.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.2 | * | [4.5.1+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.1 | * | [4.5.1+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.11.0 | * | [4.5.0+] | 21 | 34 | >=5.6.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.3 | * | [4.4.2+] | 21 | 34 | >=5.5.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.2 | * | [4.3.1+] | 21 | 34 | >=5.5.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.1 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.10.0 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.9.0 | * | [4.3.1+] | 21 | 34 | >=5.5.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.2 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.1 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.8.0 | * | [4.3.1+] | 21 | 34 | >=5.4.2 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.7.1 | * | [4.3.0+] | 21 | 34 | >=5.4.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.7.0 | * | [4.3.0+] | 21 | 34 | >=5.4.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.6.0 | * | [4.2.0+] | 21 | 34 | >=5.3.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.2 | * | [4.1.1+] | 21 | 34 | >=5.2.1 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.1 | * | [4.1.1+] | 21 | 34 | >=5.2.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.5.0 | * | [4.1.1+] | 21 | 34 | >=5.2.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.4.0 | * | [4.1.1+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.3.0 | * | [4.0.0+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| ~11.2.0~ | * | [4.1.0+] | 21 | 34 | >=5.1.0 | 14.0 | **Deprecated** | -| 11.1.0 | * | [4.0.0+] | 21 | 34 | >=5.1.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.3 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.2 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.1 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 11.0.0 | * | [4.0.0+] | 21 | 34 | >=5.0.0 | 14.0 | Active, supports Xcode 15.0.1 | -| 10.13.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.2 | 11.0 | Active, supports Xcode 14 | -| 10.12.0 | >= 0.66.0 | [3.14.3+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | -| 10.11.0 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.1 | 11.0 | Active, supports Xcode 14 | -| ~10.10.0~ | >= 0.66.0 | [3.14.2+] | 21 | 33 | >=4.7.1 | 11.0 | **Deprecated** | -| 10.9.1 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.9.0 | >= 0.66.0 | [3.14.1+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.8.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.7.0 | 11.0 | Active, supports Xcode 14 | -| 10.7.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.4 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.3 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Active, supports Xcode 14 | -| 10.6.2 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Deprecated, supports Xcode 14 | -| 10.6.0 | >= 0.66.0 | [3.14.0+] | 21 | 33 | >=4.6.4 | 11.0 | Deprecated, supports Xcode 14 | -| 10.5.0 | >= 0.66.0 | [3.13.2+] | 21 | 33 | >=4.5.1 | 11.0 | Deprecated, supports Xcode 14 | -| 10.4.0 | >= 0.66.0 | [3.13.2+] | 21 | 33 | >=4.4.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.3.0 | >= 0.66.0 | [3.12.1+] | 21 | 33 | >=4.3.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.2.0 | >= 0.66.0 | [3.12.0+] | 21 | 33 | >=4.3.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.1.0 | >= 0.66.0 | [3.11.0+] | 21 | 33 | >=4.2.0 | 11.0 | Deprecated, supports Xcode 14 | -| 10.0.0 | >= 0.66.0 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.1.0 | >= 0.65.3 | [3.13.2+] | 21 | 33 | >=4.4.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.0.1 | >= 0.65.3 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | -| 9.0.0 | >= 0.65.3 | [3.10.1+] | 21 | 33 | >=4.1.0 | 11.0 | Deprecated, supports Xcode 14 | +### Configure for iOS +Run `npx pod-install` after installing the npm package. -## Contributing +# Contributing -See the [contributor guidelines](CONTRIBUTING.md) to learn how to contribute to the repository. +Contributions are very welcome! Please refer to guidelines described in the [contributing guide]( https://github.com/expo/expo#contributing). diff --git a/android/build.gradle b/android/build.gradle index 88fec593..58d6391d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -1,111 +1,18 @@ -allprojects { - repositories { - mavenLocal() - mavenCentral() - maven { - // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm - url "$rootDir/../node_modules/react-native/android" - } - google() - } +plugins { + id 'com.android.library' + id 'expo-module-gradle-plugin' } - -buildscript { - ext { - kotlin_version = '1.8.22' - } - ext.safeExtGet = {prop, fallback -> - rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback - } - repositories { - google() - mavenCentral() - } - - dependencies { - classpath 'com.android.tools.build:gradle:8.1.1' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.10' - } -} - -def isNewArchitectureEnabled() { - // To opt-in for the New Architecture, you can either: - // - Set `newArchEnabled` to true inside the `gradle.properties` file - // - Invoke gradle with `-newArchEnabled=true` - // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` - return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" -} - -if (isNewArchitectureEnabled()) { - apply plugin: "com.facebook.react" -} - -apply plugin: 'com.android.library' -apply plugin: "kotlin-android" +group = 'expo.modules.plaidlinksdk' +version = '0.1.0' android { - - // Used to override the NDK path/version on internal CI or by allowing - // users to customize the NDK path/version from their root project (e.g. for M1 support) - if (rootProject.hasProperty("ndkPath")) { - ndkPath rootProject.ext.ndkPath - } - if (rootProject.hasProperty("ndkVersion")) { - ndkVersion rootProject.ext.ndkVersion - } - - def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger() - if (agpVersion >= 7) { - namespace 'com.plaid' - } - compileSdkVersion 34 - - defaultConfig { - minSdkVersion rootProject.ext.has("minSdkVersion") ? rootProject.ext.minSdkVersion : 21 - targetSdkVersion 34 - versionCode 1 - versionName "0.0.1" - buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() - } - lintOptions { - abortOnError false - } - - if (agpVersion < 8) { - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - } - - sourceSets.main { - java { - if (!isNewArchitectureEnabled()) { - srcDirs += 'src/paper/java' - } - } - } - - buildTypes { - release { - debuggable = false - } - debug { - debuggable = true - } - } -} - -repositories { - google() - mavenCentral() - maven { url "$rootDir/../node_modules/react-native/android" } -} - -dependencies { - implementation "com.facebook.react:react-native:+" - implementation "com.plaid.link:sdk-core:5.5.1" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" + namespace "expo.modules.plaidlinksdk" + defaultConfig { + versionCode 1 + versionName "0.1.0" + } + lintOptions { + abortOnError false + } } diff --git a/android/gradle.properties b/android/gradle.properties deleted file mode 100644 index ca0bd104..00000000 --- a/android/gradle.properties +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (c) 2020 Plaid Technologies, Inc. -# - -# Project-wide Gradle settings. -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -org.gradle.jvmargs=-Xmx1536m -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true -# Kotlin code style for this project: "official" or "obsolete": -kotlin.code.style=official - -org.gradle.parallel=true -org.gradle.configureondemand=true - -# Version of flipper SDK to use with React Native -FLIPPER_VERSION=0.99.0 diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index f6b961fd..00000000 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 9c7cc56c..00000000 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Thu Nov 09 09:41:09 PST 2023 -distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-all.zip -distributionPath=wrapper/dists -zipStorePath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME diff --git a/android/gradlew b/android/gradlew deleted file mode 100755 index a5202089..00000000 --- a/android/gradlew +++ /dev/null @@ -1,174 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat deleted file mode 100644 index 107acd32..00000000 --- a/android/gradlew.bat +++ /dev/null @@ -1,89 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 1f2eb5c7..bdae66c8 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -1,10 +1,2 @@ - - - - - - + diff --git a/android/src/main/java/com/plaid/ActivityResultHandler.java b/android/src/main/java/com/plaid/ActivityResultHandler.java deleted file mode 100644 index facbaabf..00000000 --- a/android/src/main/java/com/plaid/ActivityResultHandler.java +++ /dev/null @@ -1,7 +0,0 @@ -package com.plaid; - -import android.content.Intent; - -public interface ActivityResultHandler { - void handleActivityResult(int requestCode, int resultCode, Intent data); -} \ No newline at end of file diff --git a/android/src/main/java/com/plaid/ActivityResultManager.java b/android/src/main/java/com/plaid/ActivityResultManager.java deleted file mode 100644 index ab6014dc..00000000 --- a/android/src/main/java/com/plaid/ActivityResultManager.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.plaid; - -import android.content.Intent; - -import java.util.HashMap; - -public class ActivityResultManager extends HashMap { - - public void dispatch(int requestCode, int resultCode, Intent data) { - ActivityResultHandler handler = get(requestCode); - if (handler != null) { - handler.handleActivityResult(requestCode, resultCode, data); - } - } -} \ No newline at end of file diff --git a/android/src/main/java/com/plaid/GlobalFunctions.kt b/android/src/main/java/com/plaid/GlobalFunctions.kt deleted file mode 100644 index e1033082..00000000 --- a/android/src/main/java/com/plaid/GlobalFunctions.kt +++ /dev/null @@ -1,42 +0,0 @@ -package com.plaid - -import com.facebook.react.bridge.WritableArray -import com.facebook.react.bridge.WritableMap -import com.facebook.react.bridge.WritableNativeArray -import com.facebook.react.bridge.WritableNativeMap -import org.json.JSONArray -import org.json.JSONObject - -fun convertJsonToMap(jsonObject: JSONObject): WritableMap { - val map: WritableMap = WritableNativeMap() - val iterator = jsonObject.keys() - while (iterator.hasNext()) { - val key = iterator.next() - when (val value = jsonObject[key]) { - is JSONObject -> map.putMap(key, convertJsonToMap(value)) - is JSONArray -> map.putArray(key, convertJsonToArray(value)) - is Boolean -> map.putBoolean(key, value) - is Int -> map.putInt(key, value) - is Double -> map.putDouble(key, value) - is String -> map.putString(key, value) - else -> map.putString(key, value.toString()) - } - } - return map -} - -fun convertJsonToArray(jsonArray: JSONArray): WritableArray { - val array: WritableArray = WritableNativeArray() - for (i in 0 until jsonArray.length()) { - when (val value = jsonArray[i]) { - is JSONObject -> array.pushMap(convertJsonToMap(value)) - is JSONArray -> array.pushArray(convertJsonToArray(value)) - is Boolean -> array.pushBoolean(value) - is Int -> array.pushInt(value) - is Double -> array.pushDouble(value) - is String -> array.pushString(value) - else -> array.pushString(value.toString()) - } - } - return array -} diff --git a/android/src/main/java/com/plaid/PLKEmbeddedView.kt b/android/src/main/java/com/plaid/PLKEmbeddedView.kt deleted file mode 100644 index 6a80de03..00000000 --- a/android/src/main/java/com/plaid/PLKEmbeddedView.kt +++ /dev/null @@ -1,161 +0,0 @@ -package com.plaid - -import android.app.Application -import android.content.Context -import android.content.Intent -import android.util.AttributeSet -import android.util.Log -import android.view.View -import android.widget.FrameLayout -import com.facebook.react.bridge.Arguments -import com.facebook.react.bridge.NativeModule -import com.facebook.react.bridge.ReactContext -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.events.RCTEventEmitter -import com.plaid.gson.PlaidJsonConverter -import com.plaid.link.OpenPlaidLink -import com.plaid.link.Plaid.create -import com.plaid.link.Plaid.createLinkEmbeddedView -import com.plaid.link.Plaid.setLinkEventListener -import com.plaid.link.configuration.LinkTokenConfiguration -import com.plaid.link.configuration.LinkTokenConfiguration.Builder -import com.plaid.link.event.LinkEvent -import com.plaid.link.result.LinkExit -import com.plaid.link.result.LinkSuccess -import org.json.JSONException -import org.json.JSONObject - -class PLKEmbeddedView @JvmOverloads constructor( - context: Context, - attrs: AttributeSet? = null -) : FrameLayout(context, attrs), ActivityResultHandler { - private val themedReactContext: ThemedReactContext = context as ThemedReactContext - private val TAG = "EmbeddedSearch" - private val LINK_ACTIVITY_REQUEST_CODE = 3364 - private val EVENT_NAME = "OnEmbeddedEvent" - private val jsonConverter = PlaidJsonConverter() - - init { - inflate(context, R.layout.plk_embedded_view, this) - setupOnEventListener() - } - - fun setToken(token: String) { - val embeddedView = createEmbedded(token) - val frameLayout = findViewById(R.id.embedded_frame_layout) - frameLayout.addView(embeddedView) - } - - override fun onAttachedToWindow() { - super.onAttachedToWindow() - val nativeModule: NativeModule? = themedReactContext.getNativeModule(PlaidModule::class.java) - if (nativeModule is PlaidModule) { - // Add our handler so we can get the callback result. - nativeModule.mActivityResultManager[LINK_ACTIVITY_REQUEST_CODE] = this - } - } - - override fun onDetachedFromWindow() { - super.onDetachedFromWindow() - val nativeModule: NativeModule? = themedReactContext.getNativeModule(PlaidModule::class.java) - if (nativeModule is PlaidModule) { - // Remove the handler so the module can handle it. - nativeModule.mActivityResultManager.remove(LINK_ACTIVITY_REQUEST_CODE) - } - } - - private fun createEmbedded(token: String): View? { - val linkTokenConfiguration: LinkTokenConfiguration = Builder().token(token).build() - val activity = themedReactContext.currentActivity ?: return null - return createLinkEmbeddedView(activity, linkTokenConfiguration, { config: LinkTokenConfiguration? -> - val plaidHandler = create((themedReactContext.applicationContext as Application), config!!) - val currentActivity = themedReactContext.currentActivity - if (currentActivity != null) { - plaidHandler.open(currentActivity) - } - }) { linkExit: LinkExit -> - handleLinkExit(linkExit) - } - } - - private fun setupOnEventListener() { - setLinkEventListener { event: LinkEvent -> - try { - val jsonString = jsonConverter.convert(event) - val jsonObject = JSONObject(jsonString) - val eventMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - eventMap.putString("embeddedEventName", "onEvent") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, eventMap) - return@setLinkEventListener - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception: $e") - return@setLinkEventListener - } - } - } - - override fun handleActivityResult(requestCode: Int, resultCode: Int, data: Intent) { - if (requestCode == LINK_ACTIVITY_REQUEST_CODE) { - val openPlaidLink = OpenPlaidLink() - when (val linkResult = openPlaidLink.parseResult(resultCode, data)) { - is LinkSuccess -> { - try { - val jsonString = jsonConverter.convert(linkResult) - val jsonObject = JSONObject(jsonString) - val successMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - successMap.putString("embeddedEventName", "onSuccess") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, successMap) - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception parsing LinkSuccess") - sendLinkExitFrom(e) - } - } - is LinkExit -> { - handleLinkExit(linkResult) - } - else -> { - Log.e(TAG, "Unhandled LinkResult") - } - } - } - } - - private fun handleLinkExit(linkExit: LinkExit) { - try { - val jsonString = jsonConverter.convert(linkExit) - val jsonObject = JSONObject(jsonString) - val exitMap = convertJsonToMap(jsonObject) - val eventName = PLKEmbeddedViewManager.EVENT_NAME - exitMap.putString("embeddedEventName", "onExit") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, eventName, exitMap) - } catch (e: JSONException) { - Log.e(TAG, "JSON Exception: $e") - sendLinkExitFrom(e) - } - } - - private fun sendLinkExitFrom(e: JSONException) { - val map = Arguments.createMap() - val errorMap = Arguments.createMap() - val exitMetadataMap = Arguments.createMap() - errorMap.putString("error_message", e.message) - errorMap.putString("json", e.message) - errorMap.putString("error_type", "JSONException") - errorMap.putInt("error_code", 499) - exitMetadataMap.putString("error_message", e.message) - exitMetadataMap.putString("json", e.message) - exitMetadataMap.putString("error_type", "JSONException") - exitMetadataMap.putInt("error_code", 499) - map.putString("eventName", "EXIT") - map.putMap("metadata", exitMetadataMap) - map.putMap("error", errorMap) - map.putString("embeddedEventName", "onExit") - val reactContext = context as ReactContext - reactContext.getJSModule(RCTEventEmitter::class.java).receiveEvent(id, PLKEmbeddedViewManager.EVENT_NAME, map) - } -} diff --git a/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt b/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt deleted file mode 100644 index bf443aa5..00000000 --- a/android/src/main/java/com/plaid/PLKEmbeddedViewManager.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.plaid - -import com.facebook.react.module.annotations.ReactModule -import com.facebook.react.uimanager.SimpleViewManager -import com.facebook.react.uimanager.ThemedReactContext -import com.facebook.react.uimanager.ViewManagerDelegate -import com.facebook.react.uimanager.annotations.ReactProp -import com.facebook.react.viewmanagers.PLKEmbeddedViewManagerDelegate -import com.facebook.react.viewmanagers.PLKEmbeddedViewManagerInterface - -@ReactModule(name = PLKEmbeddedViewManager.REACT_CLASS) -class PLKEmbeddedViewManager : SimpleViewManager(), - PLKEmbeddedViewManagerInterface { - private val delegate: ViewManagerDelegate - - init { - delegate = PLKEmbeddedViewManagerDelegate(this) - } - - override fun getName(): String { - return REACT_CLASS - } - - public override fun createViewInstance(context: ThemedReactContext): PLKEmbeddedView { - return PLKEmbeddedView(context) - } - - @ReactProp(name = "token") - override fun setToken(view: PLKEmbeddedView, token: String?) { - view.setToken(token ?: "") - } - - override fun setIOSPresentationStyle(view: PLKEmbeddedView, value: String?) { - // Unsupported on Android - } - - override fun getExportedCustomBubblingEventTypeConstants(): Map { - return mutableMapOf( - EVENT_NAME to mutableMapOf( - "phasedRegistrationNames" to mutableMapOf( - "bubbled" to EVENT_NAME - ) - )) - } - - companion object { - const val REACT_CLASS = "PLKEmbeddedView" - const val EVENT_NAME = "onEmbeddedEvent" - } -} diff --git a/android/src/main/java/com/plaid/PlaidModule.kt b/android/src/main/java/com/plaid/PlaidModule.kt deleted file mode 100644 index 1b9c31a8..00000000 --- a/android/src/main/java/com/plaid/PlaidModule.kt +++ /dev/null @@ -1,291 +0,0 @@ -package com.plaid - -import android.app.Activity -import android.app.Application -import android.content.Intent -import android.os.Handler -import android.os.Looper -import android.text.TextUtils -import android.util.Log -import com.facebook.react.bridge.ActivityEventListener -import com.facebook.react.bridge.Callback -import com.facebook.react.bridge.Promise -import com.facebook.react.bridge.ReactApplicationContext -import com.facebook.react.bridge.ReactMethod -import com.facebook.react.bridge.ReadableMap -import com.facebook.react.module.annotations.ReactModule -import com.facebook.react.modules.core.DeviceEventManagerModule -import com.plaid.gson.PlaidJsonConverter -import com.plaid.link.Plaid -import com.plaid.link.PlaidHandler -import com.plaid.link.OnLoadCallback -import com.plaid.link.configuration.LinkLogLevel -import com.plaid.link.configuration.LinkTokenConfiguration -import com.plaid.link.event.LinkEvent -import com.plaid.link.exception.LinkException -import com.plaid.link.result.LinkResultHandler -import com.plaid.link.SubmissionData -import org.json.JSONException -import org.json.JSONObject -import java.util.concurrent.CountDownLatch -import java.util.concurrent.TimeUnit - -@ReactModule(name = PlaidModule.NAME) -class PlaidModule internal constructor(reactContext: ReactApplicationContext) : - NativePlaidLinkModuleAndroidSpec(reactContext), ActivityEventListener { - - val mActivityResultManager by lazy { ActivityResultManager() } - - private val jsonConverter by lazy { PlaidJsonConverter() } - - private var onSuccessCallback: Callback? = null - private var onExitCallback: Callback? = null - - private var plaidHandler: PlaidHandler? = null - - companion object { - private const val LINK_TOKEN_PREFIX = "link" - - const val NAME = "PlaidAndroid" - } - - override fun getName(): String { - return NAME - } - - override fun initialize() { - super.initialize() - reactApplicationContext.addActivityEventListener(this) - } - - override fun invalidate() { - super.invalidate() - reactApplicationContext.removeActivityEventListener(this) - } - - private fun getLinkTokenConfiguration( - token: String, - noLoadingState: Boolean, - logLevel: LinkLogLevel, - ): LinkTokenConfiguration? { - if (token == null) { - return null - } - - if (!token.startsWith(LINK_TOKEN_PREFIX)) { - return null - } - - val builder = LinkTokenConfiguration.Builder() - .token(token) - .logLevel(logLevel) - .noLoadingState(noLoadingState) - - return builder.build() - } - - @ReactMethod - override fun submit(phoneNumber: String?, dateOfBirth: String?, params: ReadableMap?) { - if (plaidHandler != null) { - val paramsMap: Map? = params?.let { map -> - map.toHashMap().mapNotNull { (key, value) -> - if (value is String) key to value else null - }.toMap() - } - - val submissionData = SubmissionData( - phoneNumber = phoneNumber, - dateOfBirth = dateOfBirth, - params = paramsMap - ) - plaidHandler?.submit(submissionData) - } - } - - @ReactMethod - override fun createPlaidLink( - token: String, - noLoadingState: Boolean, - logLevel: String, - onLoad: Callback, - ) { - val tokenConfiguration = getLinkTokenConfiguration(token, noLoadingState, getLogLevel(logLevel)) - if (tokenConfiguration == null) { - throw LinkException("Unable to open link, please check that your configuration is valid") - } - - // Set the event listener here instead of in open for Layer use cases. - try { - Plaid.setLinkEventListener { linkEvent: LinkEvent -> - var json = jsonConverter.convert(linkEvent) - val eventMap = convertJsonToMap(JSONObject(json)) - reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) - .emit("onEvent", eventMap) - } - } catch (ex: JSONException) { - Log.e("PlaidModule", ex.toString()) - throw ex - } - - // Create Plaid handler. - this.plaidHandler = Plaid.create( - reactApplicationContext.getApplicationContext() as Application, - tokenConfiguration, - onLoad = OnLoadCallback { - try { - onLoad.invoke() - } catch (e: Exception) { - Log.e("PlaidModule", "onLoad callback failed", e) - } - } - ) - } - - @ReactMethod - override fun open(onSuccessCallback: Callback, onExitCallback: Callback) { - val activity = reactApplicationContext.currentActivity ?: throw IllegalStateException("Current activity is null") - - plaidHandler?.let { handler -> - // Work with nonNullValue here - this.onSuccessCallback = onSuccessCallback - this.onExitCallback = onExitCallback - handler.open(activity) - } ?: run { - // Handler is nil. - throw LinkException("Create must be called before open.") - } - } - - @ReactMethod - override fun destroy(promise: Promise) { - val latch = CountDownLatch(1) - - Handler(Looper.getMainLooper()).post { - try { - Plaid.destroy() - } catch (e: Exception) { - promise.reject("DESTROY_FAILED", "Failed to destroy Plaid", e) - latch.countDown() - return@post - } - latch.countDown() - } - - try { - // Wait for main-thread work to finish (max 5 seconds) - if (!latch.await(5, TimeUnit.SECONDS)) { - promise.reject("TIMEOUT", "Timed out waiting for destroy() to complete.") - } else { - promise.resolve(null) - } - } catch (e: InterruptedException) { - promise.reject("INTERRUPTED", "Thread was interrupted", e) - } - } - - - @ReactMethod - @Suppress("unused") - override fun startLinkActivityForResult( - token: String, - noLoadingState: Boolean, - logLevel: String, - onSuccessCallback: Callback, - onExitCallback: Callback - ) { - val activity = reactApplicationContext.currentActivity ?: throw IllegalStateException("Current activity is null") - this.onSuccessCallback = onSuccessCallback - this.onExitCallback = onExitCallback - - try { - Plaid.setLinkEventListener { linkEvent: LinkEvent -> - var json = jsonConverter.convert(linkEvent) - val eventMap = convertJsonToMap(JSONObject(json)) - reactApplicationContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) - .emit("onEvent", eventMap) - } - - val tokenConfiguration = getLinkTokenConfiguration(token, noLoadingState, getLogLevel(logLevel)) - tokenConfiguration?.let { - Plaid.create( - reactApplicationContext.getApplicationContext() as Application, - it - ).open(activity) - return - } - - throw LinkException("Unable to open link, please check that your configuration is valid") - } catch (ex: JSONException) { - Log.e("PlaidModule", ex.toString()) - throw ex - } - } - - override fun addListener(eventName: String?) = Unit - - override fun removeListeners(count: Double) = Unit - - private fun maybeGetStringField(obj: JSONObject, fieldName: String): String? { - if (obj.has(fieldName) && !TextUtils.isEmpty(obj.getString(fieldName))) { - return obj.getString(fieldName) - } - return null - } - - private fun maybeGetBooleanField(obj: JSONObject, fieldName: String): Boolean? { - if (obj.has(fieldName)) { - return obj.getBoolean(fieldName); - } - return null - } - - private fun getLogLevel(string: String): LinkLogLevel { - when (string) { - "debug" -> return LinkLogLevel.DEBUG - "info" -> return LinkLogLevel.INFO - "warn" -> return LinkLogLevel.WARN - "error" -> return LinkLogLevel.ERROR - else -> { - return LinkLogLevel.ASSERT - } - } - } - - override fun onActivityResult( - activity: Activity, - requestCode: Int, - resultCode: Int, - data: Intent? - ) { - - // Dispath to embedded to handle the callback. - if (mActivityResultManager[requestCode] != null) { - mActivityResultManager.dispatch(requestCode, resultCode, data) - return - } - - val linkHandler = LinkResultHandler( - onSuccess = { success -> - val result = convertJsonToMap(JSONObject(jsonConverter.convert(success))) - print(result) - this.onSuccessCallback?.invoke(result) - }, - onExit = { exit -> - val result = convertJsonToMap(JSONObject(jsonConverter.convert(exit))) - print(result) - this.onExitCallback?.invoke(result) - } - ) - - if (linkHandler.onActivityResult(requestCode, resultCode, data)) { - return - } else { - Log.i("PlaidModule", "Result code not handled.") - } - return - } - - override fun onNewIntent(intent: Intent) { - // Do Nothing - } -} diff --git a/android/src/main/java/com/plaid/PlaidPackage.java b/android/src/main/java/com/plaid/PlaidPackage.java deleted file mode 100644 index 7a259163..00000000 --- a/android/src/main/java/com/plaid/PlaidPackage.java +++ /dev/null @@ -1,117 +0,0 @@ -package com.plaid; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import com.facebook.react.TurboReactPackage; -import com.facebook.react.ViewManagerOnDemandReactPackage; -import com.facebook.react.bridge.ModuleSpec; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.common.MapBuilder; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.module.annotations.ReactModuleList; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; -import com.facebook.react.uimanager.ViewManager; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.inject.Provider; - -@ReactModuleList(nativeModules = {PlaidModule.class}) -public class PlaidPackage extends TurboReactPackage implements ViewManagerOnDemandReactPackage { - - private @Nullable Map mViewManagers; - - private Map getViewManagersMap(final ReactApplicationContext reactContext) { - if (mViewManagers == null) { - Map specs = MapBuilder.newHashMap(); - specs.put( - PLKEmbeddedViewManager.REACT_CLASS, - ModuleSpec.viewManagerSpec( - new Provider() { - @Override - public NativeModule get() { - return new PLKEmbeddedViewManager(); - } - })); - mViewManagers = specs; - } - return mViewManagers; - } - - /** {@inheritDoc} */ - @Override - public List getViewManagerNames(ReactApplicationContext reactContext) { - return new ArrayList<>(getViewManagersMap(reactContext).keySet()); - } - - @Override - protected List getViewManagers(ReactApplicationContext reactContext) { - return new ArrayList<>(getViewManagersMap(reactContext).values()); - } - - /** {@inheritDoc} */ - @Override - public @Nullable ViewManager createViewManager( - ReactApplicationContext reactContext, String viewManagerName) { - ModuleSpec spec = getViewManagersMap(reactContext).get(viewManagerName); - return spec != null ? (ViewManager) spec.getProvider().get() : null; - } - - @Override - public NativeModule getModule(String name, @Nonnull ReactApplicationContext reactContext) { - switch (name) { - case PlaidModule.NAME: - return new PlaidModule(reactContext); - default: - return null; - } - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - try { - Class reactModuleInfoProviderClass = - Class.forName("com.plaid.PlaidPackage$$ReactModuleInfoProvider"); - return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); - } catch (ClassNotFoundException e) { - // ReactModuleSpecProcessor does not run at build-time. Create this ReactModuleInfoProvider by - // hand. - return new ReactModuleInfoProvider() { - @Override - public Map getReactModuleInfos() { - final Map reactModuleInfoMap = new HashMap<>(); - - Class[] moduleList = - new Class[]{ - PlaidModule.class, - }; - - for (Class moduleClass : moduleList) { - ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); - - reactModuleInfoMap.put( - reactModule.name(), - new ReactModuleInfo( - reactModule.name(), - moduleClass.getName(), - reactModule.canOverrideExistingModule(), - reactModule.needsEagerInit(), - reactModule.hasConstants(), - reactModule.isCxxModule(), - BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)); - } - - return reactModuleInfoMap; - } - }; - } catch (InstantiationException | IllegalAccessException e) { - throw new RuntimeException( - "No ReactModuleInfoProvider for com.plaid.PlaidPackage$$ReactModuleInfoProvider", e); - } - } -} diff --git a/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt b/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt deleted file mode 100644 index f476cc7d..00000000 --- a/android/src/main/java/com/plaid/gson/PlaidJsonConverter.kt +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.Gson -import com.google.gson.GsonBuilder -import com.plaid.internal.classic.networking.adapter.AccountSubtypeAdapter -import com.plaid.internal.classic.networking.adapter.AccountTypeAdapter -import com.plaid.internal.classic.networking.adapter.LinkAccountVerificationStatusAdapter -import com.plaid.internal.classic.networking.adapter.LinkEventNameAdapter -import com.plaid.internal.classic.networking.adapter.LinkEventViewNameAdapter -import com.plaid.internal.classic.networking.adapter.LinkExitMetadataStatusAdapter -import com.plaid.internal.classic.networking.adapter.PlaidErrorCodeAdapter -import com.plaid.internal.classic.networking.adapter.PlaidErrorTypeAdapter -import com.plaid.link.event.LinkEvent -import com.plaid.link.event.LinkEventMetadata -import com.plaid.link.event.LinkEventName -import com.plaid.link.event.LinkEventViewName -import com.plaid.link.result.LinkAccount -import com.plaid.link.result.LinkAccountSubtype -import com.plaid.link.result.LinkAccountType -import com.plaid.link.result.LinkAccountVerificationStatus -import com.plaid.link.result.LinkErrorCode -import com.plaid.link.result.LinkErrorType -import com.plaid.link.result.LinkExit -import com.plaid.link.result.LinkExitMetadataStatus -import com.plaid.link.result.LinkInstitution -import com.plaid.link.result.LinkSuccess - -class PlaidJsonConverter { - - private val gson: Gson by lazy { - GsonBuilder().apply { - this.registerTypeAdapter( - LinkAccount::class.java, - RNAccountAdapter() - ) - this.registerTypeAdapter( - LinkInstitution::class.java, - RNLinkInstitutionAdapter() - ) - this.registerTypeAdapter( - LinkAccountType::class.java, - AccountTypeAdapter() - ) - this.registerTypeAdapter( - LinkAccountSubtype::class.java, - AccountSubtypeAdapter() - ) - this.registerTypeAdapter( - LinkAccountVerificationStatus::class.java, - LinkAccountVerificationStatusAdapter() - ) - this.registerTypeAdapter( - LinkEventViewName::class.java, - LinkEventViewNameAdapter() - ) - this.registerTypeAdapter( - LinkEventName::class.java, - LinkEventNameAdapter() - ) - this.registerTypeAdapter( - LinkEventMetadata::class.java, - RNEventMetadataAdapter() - ) - this.registerTypeAdapter( - LinkErrorCode::class.java, - PlaidErrorCodeAdapter() - ) - this.registerTypeAdapter( - LinkErrorType::class.java, - PlaidErrorTypeAdapter() - ) - this.registerTypeAdapter( - LinkExitMetadataStatus::class.java, - LinkExitMetadataStatusAdapter() - ) - }.create() - } - - fun convert(linkSuccess: LinkSuccess): String { - return gson.toJson(linkSuccess) - } - - fun convert(linkExit: LinkExit): String { - return gson.toJson(linkExit) - } - - fun convert(linkEvent: LinkEvent): String { - return gson.toJson(linkEvent) - .replace("event_name", "event") - } -} diff --git a/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt b/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt deleted file mode 100644 index 45a3665f..00000000 --- a/android/src/main/java/com/plaid/gson/RNAccountAdapter.kt +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.result.LinkAccount -import java.lang.reflect.Type - -class RNAccountAdapter : JsonSerializer { - - override fun serialize( - src: LinkAccount?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - addProperty("id", src.id) - addProperty("name", src.name) - src.mask?.let { - addProperty("mask", it) - } - src.verificationStatus?.let { status -> - context?.serialize(status)?.asJsonObject?.let { - addProperty("verification_status", it.get("json").asString) - addProperty("verificationStatus", it.get("json").asString) - } - } - - // Special handling around account subtype - val subtype = context?.serialize(src.subtype)?.asJsonObject - subtype?.let { - addProperty("type", it.get("accountType")?.asString) - addProperty("subtype", it.get("json")?.asString) - } - } - return obj - } -} diff --git a/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt b/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt deleted file mode 100644 index 8e7b0ccc..00000000 --- a/android/src/main/java/com/plaid/gson/RNEventMetadataAdapter.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.event.LinkEventMetadata -import java.lang.reflect.Type - -class RNEventMetadataAdapter : JsonSerializer { - - override fun serialize( - src: LinkEventMetadata?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - addProperty("errorType", src.errorType) - addProperty("errorCode", src.errorCode) - addProperty("errorMessage", src.errorMessage) - addProperty("exitStatus", src.exitStatus) - addProperty("institutionId", src.institutionId) - addProperty("institutionName", src.institutionName) - addProperty("institutionSearchQuery", src.institutionSearchQuery) - addProperty("accountNumberMask", src.accountNumberMask) - addProperty("isUpdateMode", src.isUpdateMode) - addProperty("matchReason", src.matchReason) - addProperty("routingNumber", src.routingNumber) - addProperty("selection", src.selection) - addProperty("linkSessionId", src.linkSessionId) - addProperty("mfaType", src.mfaType) - addProperty("requestId", src.requestId) - addProperty("issueId", src.issueId) - addProperty("issueDescription", src.issueDescription) - addProperty("issueDetectedAt", src.issueDetectedAt) - addProperty("timestamp", src.timestamp) - addProperty("viewName", src.viewName?.jsonValue ?: "") - addProperty("metadata_json", src.metadataJson) // deprecated - addProperty("metadataJson", src.metadataJson) - } - return obj - } -} \ No newline at end of file diff --git a/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt b/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt deleted file mode 100644 index d079b8b4..00000000 --- a/android/src/main/java/com/plaid/gson/RNLinkInstitutionAdapter.kt +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020 Plaid Technologies, Inc. - */ -package com.plaid.gson - -import com.google.gson.JsonDeserializationContext -import com.google.gson.JsonDeserializer -import com.google.gson.JsonElement -import com.google.gson.JsonObject -import com.google.gson.JsonPrimitive -import com.google.gson.JsonSerializationContext -import com.google.gson.JsonSerializer -import com.plaid.link.result.LinkInstitution -import java.lang.reflect.Type - -class RNLinkInstitutionAdapter : JsonSerializer { - - override fun serialize( - src: LinkInstitution?, - typeOfSrc: Type?, - context: JsonSerializationContext? - ): JsonElement { - if (src == null) { - return JsonObject() - } - val obj = JsonObject().apply { - // Replace "institution_id" with "id" - addProperty("id", src.id) - // Replace "institution_name" with "id" - addProperty("name", src.name) - } - return obj - } -} diff --git a/android/src/main/java/expo/modules/plaidlinksdk/ReactNativePlaidLinkSdkModule.kt b/android/src/main/java/expo/modules/plaidlinksdk/ReactNativePlaidLinkSdkModule.kt new file mode 100644 index 00000000..01f7a9c8 --- /dev/null +++ b/android/src/main/java/expo/modules/plaidlinksdk/ReactNativePlaidLinkSdkModule.kt @@ -0,0 +1,14 @@ +package expo.modules.plaidlinksdk + +import expo.modules.kotlin.modules.Module +import expo.modules.kotlin.modules.ModuleDefinition + +class ReactNativePlaidLinkSdkModule : Module() { + override fun definition() = ModuleDefinition { + Name("ReactNativePlaidLinkSdk") + + // TODO: Implement Android Plaid Link SDK integration + // This module currently contains only the basic structure + // The iOS implementation is complete - see ios/src/ReactNativePlaidLinkSdkModule.swift + } +} diff --git a/android/src/main/res/layout/plk_embedded_view.xml b/android/src/main/res/layout/plk_embedded_view.xml deleted file mode 100644 index 457700bc..00000000 --- a/android/src/main/res/layout/plk_embedded_view.xml +++ /dev/null @@ -1,5 +0,0 @@ - - diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java b/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java deleted file mode 100644 index 224c1f31..00000000 --- a/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerDelegate.java +++ /dev/null @@ -1,35 +0,0 @@ -/** -* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). -* -* Do not edit this file as changes may cause incorrect behavior and will be lost -* once the code is regenerated. -* -* @generated by codegen project: GeneratePropsJavaDelegate.js -*/ - -package com.facebook.react.viewmanagers; - -import android.view.View; -import androidx.annotation.Nullable; -import com.facebook.react.uimanager.BaseViewManagerDelegate; -import com.facebook.react.uimanager.BaseViewManager; -import com.facebook.react.uimanager.LayoutShadowNode; - -public class PLKEmbeddedViewManagerDelegate & PLKEmbeddedViewManagerInterface> extends BaseViewManagerDelegate { - public PLKEmbeddedViewManagerDelegate(U viewManager) { - super(viewManager); - } - @Override - public void setProperty(T view, String propName, @Nullable Object value) { - switch (propName) { - case "token": - mViewManager.setToken(view, value == null ? null : (String) value); - break; - case "iOSPresentationStyle": - mViewManager.setIOSPresentationStyle(view, value == null ? null : (String) value); - break; - default: - super.setProperty(view, propName, value); - } - } -} diff --git a/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java b/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java deleted file mode 100644 index 45ee7ea3..00000000 --- a/android/src/paper/java/com/facebook/react/viewmanagers/PLKEmbeddedViewManagerInterface.java +++ /dev/null @@ -1,18 +0,0 @@ -/** -* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). -* -* Do not edit this file as changes may cause incorrect behavior and will be lost -* once the code is regenerated. -* -* @generated by codegen project: GeneratePropsJavaInterface.js -*/ - -package com.facebook.react.viewmanagers; - -import android.view.View; -import androidx.annotation.Nullable; - -public interface PLKEmbeddedViewManagerInterface { - void setToken(T view, @Nullable String value); - void setIOSPresentationStyle(T view, @Nullable String value); -} diff --git a/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java b/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java deleted file mode 100644 index 1641d478..00000000 --- a/android/src/paper/java/com/plaid/NativePlaidLinkModuleAndroidSpec.java +++ /dev/null @@ -1,64 +0,0 @@ - -/** - * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). - * - * Do not edit this file as changes may cause incorrect behavior and will be lost - * once the code is regenerated. - * - * @generated by codegen project: GenerateModuleJavaSpec.js - * - * @nolint - */ - -package com.plaid; - -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.turbomodule.core.interfaces.TurboModule; -import javax.annotation.Nonnull; - -public abstract class NativePlaidLinkModuleAndroidSpec extends ReactContextBaseJavaModule implements TurboModule { - public static final String NAME = "PlaidAndroid"; - - public NativePlaidLinkModuleAndroidSpec(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public @Nonnull String getName() { - return NAME; - } - - @ReactMethod - @DoNotStrip - public abstract void createPlaidLink(String token, boolean noLoadingState, String logLevel, Callback onLoad); - - @ReactMethod - @DoNotStrip - public abstract void open(Callback onSuccess, Callback onExit); - - @ReactMethod - @DoNotStrip - public abstract void destroy(Promise promise); - - @ReactMethod - @DoNotStrip - public abstract void startLinkActivityForResult(String token, boolean noLoadingState, String logLevel, Callback onSuccessCallback, Callback onExitCallback); - - @ReactMethod - @DoNotStrip - public abstract void submit(String phoneNumber, String dateOfBirth, ReadableMap params); - - @ReactMethod - @DoNotStrip - public abstract void addListener(String eventName); - - @ReactMethod - @DoNotStrip - public abstract void removeListeners(double count); -} diff --git a/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java b/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java deleted file mode 100644 index 9a1eb851..00000000 --- a/android/src/paper/java/com/plaid/NativePlaidLinkModuleiOSSpec.java +++ /dev/null @@ -1,59 +0,0 @@ - -/** - * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen). - * - * Do not edit this file as changes may cause incorrect behavior and will be lost - * once the code is regenerated. - * - * @generated by codegen project: GenerateModuleJavaSpec.js - * - * @nolint - */ - -package com.plaid; - -import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.bridge.ReactContextBaseJavaModule; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; -import com.facebook.react.turbomodule.core.interfaces.TurboModule; -import javax.annotation.Nonnull; - -public abstract class NativePlaidLinkModuleiOSSpec extends ReactContextBaseJavaModule implements TurboModule { - public static final String NAME = "RNLinksdk"; - - public NativePlaidLinkModuleiOSSpec(ReactApplicationContext reactContext) { - super(reactContext); - } - - @Override - public @Nonnull String getName() { - return NAME; - } - - @ReactMethod - @DoNotStrip - public abstract void createPlaidLink(String token, boolean noLoadingState); - - @ReactMethod - @DoNotStrip - public abstract void open(boolean fullScreen, Callback onSuccess, Callback onExit); - - @ReactMethod - @DoNotStrip - public abstract void dismiss(); - - @ReactMethod - @DoNotStrip - public abstract void submit(String phoneNumber, String dateOfBirth, ReadableMap params); - - @ReactMethod - @DoNotStrip - public abstract void addListener(String eventName); - - @ReactMethod - @DoNotStrip - public abstract void removeListeners(int count); -} diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index f7b3da3b..00000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], -}; diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..a369633c --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,3 @@ +const config = require('eslint-config-universe/flat/native'); + +module.exports = config; diff --git a/example/.bundle/config b/example/.bundle/config deleted file mode 100644 index 848943bb..00000000 --- a/example/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/example/.eslintrc.js b/example/.eslintrc.js deleted file mode 100644 index 187894b6..00000000 --- a/example/.eslintrc.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - root: true, - extends: '@react-native', -}; diff --git a/example/.gitignore b/example/.gitignore index 0cab2ac6..d914c328 100644 --- a/example/.gitignore +++ b/example/.gitignore @@ -1,66 +1,41 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -ios/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files -# node.js -# +# dependencies node_modules/ -npm-debug.log -yarn-error.log -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +.kotlin/ +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output +# debug +npm-debug.* +yarn-debug.* +yarn-error.* -# Bundle artifact -*.jsbundle +# macOS +.DS_Store +*.pem -# Ruby / CocoaPods -/ios/Pods/ -/vendor/bundle/ +# local env files +.env*.local -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* +# typescript +*.tsbuildinfo -# testing -/coverage +# generated native folders +/ios +/android diff --git a/example/.npmrc b/example/.npmrc deleted file mode 100644 index ef0ca82a..00000000 --- a/example/.npmrc +++ /dev/null @@ -1,2 +0,0 @@ -registry=https://registry.npmjs.org/ -always-auth=false diff --git a/FabricExample/.nvmrc b/example/.nvmrc similarity index 100% rename from FabricExample/.nvmrc rename to example/.nvmrc diff --git a/example/.prettierrc.js b/example/.prettierrc.js deleted file mode 100644 index 2b540746..00000000 --- a/example/.prettierrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - bracketSameLine: true, - bracketSpacing: false, - singleQuote: true, - trailingComma: 'all', -}; diff --git a/example/.watchmanconfig b/example/.watchmanconfig deleted file mode 100644 index 0967ef42..00000000 --- a/example/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/example/App.tsx b/example/App.tsx new file mode 100644 index 00000000..7964bd8a --- /dev/null +++ b/example/App.tsx @@ -0,0 +1,55 @@ +// app/index.tsx +import { useState } from "react"; +import { + SafeAreaView, + ScrollView, + Text, + TouchableOpacity, + View, + StyleSheet, +} from "react-native"; +import ReactNativePlaidLinkSdk from "react-native-plaid-link-sdk"; + +import { styles } from "./styles/common"; +import { Screen, SCREENS } from "./types/types"; +import { PlaidLinkSessionScreen } from "./screens/PlaidLinkSessionScreen"; +import { PlaidLinkHeadlessSessionScreen } from "./screens/PlaidLinkHeadlessSessionScreen"; +import { PlaidLayerSessionScreen } from "./screens/PlaidLayerSessionScreen"; +import { PlaidEmbeddedSearchScreen } from "./screens/PlaidEmbeddedSearchScreen"; +import { SyncFinanceKitScreen } from "./screens/SyncFinanceKitScreen"; + +export default function App() { + const [screen, setScreen] = useState("list"); + + if (screen === "plaidLinkSession") + return setScreen("list")} />; + if (screen === "plaidLinkHeadlessSession") + return setScreen("list")} />; + if (screen === "plaidLayerSession") + return setScreen("list")} />; + if (screen === "plaidEmbeddedSearch") + return setScreen("list")} />; + if (screen === "syncFinanceKit") + return setScreen("list")} />; + + return ( + + + LinkKit Examples + + SDK: {ReactNativePlaidLinkSdk.sdkVersion} + + {SCREENS.map((s) => ( + setScreen(s.key)} + > + {s.title} + {s.description} + + ))} + + + ); +} diff --git a/example/Gemfile b/example/Gemfile deleted file mode 100644 index 8e2dfb58..00000000 --- a/example/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Cocoapods 1.15 introduced a bug which break the build. We will remove the upper -# bound in the template on Cocoapods with next React Native release. -gem 'cocoapods', '>= 1.13', '< 1.15' -gem 'activesupport', '>= 6.1.7.5', '< 7.3.0' diff --git a/example/Gemfile.lock b/example/Gemfile.lock deleted file mode 100644 index 5ef0e6a7..00000000 --- a/example/Gemfile.lock +++ /dev/null @@ -1,116 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.7) - base64 - nkf - rexml - activesupport (7.2.3.1) - base64 - benchmark (>= 0.3) - bigdecimal - concurrent-ruby (~> 1.0, >= 1.3.1) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - logger (>= 1.4.2) - minitest (>= 5.1, < 6) - securerandom (>= 0.3) - tzinfo (~> 2.0, >= 2.0.5) - addressable (2.8.7) - public_suffix (>= 2.0.2, < 7.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.2.0) - benchmark (0.5.0) - bigdecimal (4.0.1) - claide (1.1.0) - cocoapods (1.14.3) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.14.3) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.23.0, < 2.0) - cocoapods-core (1.14.3) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.3.6) - connection_pool (3.0.2) - drb (2.2.3) - escape (0.0.4) - ethon (0.16.0) - ffi (>= 1.15.0) - ffi (1.17.0) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.8.3) - i18n (1.14.8) - concurrent-ruby (~> 1.0) - json (2.8.2) - logger (1.7.0) - minitest (5.27.0) - molinillo (0.8.0) - nanaimo (0.4.0) - nap (1.1.0) - netrc (0.11.0) - nkf (0.2.0) - public_suffix (4.0.7) - rexml (3.4.2) - ruby-macho (2.5.1) - securerandom (0.4.1) - typhoeus (1.4.1) - ethon (>= 0.9.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.27.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.4.0) - rexml (>= 3.3.6, < 4.0) - -PLATFORMS - ruby - -DEPENDENCIES - activesupport (>= 6.1.7.5, < 7.3.0) - cocoapods (>= 1.13, < 1.15) - -RUBY VERSION - ruby 2.7.8p225 - -BUNDLED WITH - 2.1.4 diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 28db8aac..00000000 --- a/example/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Example App - -Our example app provides a minimal React Native app that implements Plaid Link. This app allows you to link a sample bank account. - -In order to test Plaid Link using this example app you'll need the following: - -- A [Plaid Account](https://dashboard.plaid.com/signup) to get API keys. -- A [Link Token](https://plaid.com/docs/api/tokens/#linktokencreate) - you can quickly fetch one using your API keys and our [Postman collection](https://github.com/plaid/plaid-postman). - -## Running the example app - -> Note: This setup assumes you've already setup your React Native [development environment](https://reactnative.dev/docs/environment-setup). - -From the root directory of our SDK. - -1. `cd example` -2. `npm install` -3. `cd ios` -4. `bundle install` -5. `bundle exec pod install` -6. `cd ..` -7. `npx react-native start` -8. `npx react-native run-ios` or `npx react-native run-android` - -[Running on simulator](https://reactnative.dev/docs/running-on-simulator-ios) - -[Running on emulator](https://stackoverflow.com/a/63994477/7245977) - -## Testing Plaid Link - -1. Fetch a [Link Token](https://plaid.com/docs/api/tokens/#linktokencreate). -2. Paste your token into the `TextField` in the example app. -3. Press "OPEN LINK" -4. If you testing in our Sandbox you can use our provided [test credentials](https://plaid.com/docs/sandbox/test-credentials/) for any financial institution. - - > username: user_good - - > password: pass_good - -### Screenshots - -| Android | iOS | -| --------------------------------------------------- | ----------------------------------------------- | -| | | - - diff --git a/example/__tests__/App.test.tsx b/example/__tests__/App.test.tsx deleted file mode 100644 index 9eac6fbc..00000000 --- a/example/__tests__/App.test.tsx +++ /dev/null @@ -1,17 +0,0 @@ -/** - * @format - */ - -import 'react-native'; -import React from 'react'; -import App from '../App'; - -// Note: import explicitly to use the types shipped with jest. -import {it} from '@jest/globals'; - -// Note: test renderer must be required after react-native. -import renderer from 'react-test-renderer'; - -it('renders correctly', () => { - renderer.create(); -}); diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle deleted file mode 100644 index a2f6ed79..00000000 --- a/example/android/app/build.gradle +++ /dev/null @@ -1,119 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '..' - // root = file("../") - // The folder where the react-native NPM package is. Default is ../node_modules/react-native - // reactNativeDir = file("../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../node_modules/@react-native/codegen - // codegenDir = file("../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../node_modules/react-native/cli.js - // cliFile = file("../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. By default is just 'debug'. - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "prodDebug"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = 'org.webkit:android-jsc-intl:+'` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'org.webkit:android-jsc:+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.plaidreactnativedemo" - defaultConfig { - applicationId "com.plaidreactnativedemo" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - implementation("com.facebook.react:flipper-integration") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} - -apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project) diff --git a/example/android/app/debug.keystore b/example/android/app/debug.keystore deleted file mode 100644 index 364e105e..00000000 Binary files a/example/android/app/debug.keystore and /dev/null differ diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro deleted file mode 100644 index 11b02572..00000000 --- a/example/android/app/proguard-rules.pro +++ /dev/null @@ -1,10 +0,0 @@ -# Add project specific ProGuard rules here. -# By default, the flags in this file are appended to flags specified -# in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt -# You can edit the include path and order by changing the proguardFiles -# directive in build.gradle. -# -# For more details, see -# http://developer.android.com/guide/developing/tools/proguard.html - -# Add any project specific keep options here: diff --git a/example/android/app/src/debug/AndroidManifest.xml b/example/android/app/src/debug/AndroidManifest.xml deleted file mode 100644 index eb98c01a..00000000 --- a/example/android/app/src/debug/AndroidManifest.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml deleted file mode 100644 index 4122f36a..00000000 --- a/example/android/app/src/main/AndroidManifest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - diff --git a/example/android/app/src/main/java/com/plaidreactnativedemo/MainActivity.kt b/example/android/app/src/main/java/com/plaidreactnativedemo/MainActivity.kt deleted file mode 100644 index 049930ed..00000000 --- a/example/android/app/src/main/java/com/plaidreactnativedemo/MainActivity.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.plaidreactnativedemo - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "PlaidReactNativeDemo" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = - DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/example/android/app/src/main/java/com/plaidreactnativedemo/MainApplication.kt b/example/android/app/src/main/java/com/plaidreactnativedemo/MainApplication.kt deleted file mode 100644 index 50ed3afb..00000000 --- a/example/android/app/src/main/java/com/plaidreactnativedemo/MainApplication.kt +++ /dev/null @@ -1,45 +0,0 @@ -package com.plaidreactnativedemo - -import android.app.Application -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeHost -import com.facebook.react.ReactPackage -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.load -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.flipper.ReactNativeFlipper -import com.facebook.soloader.SoLoader - -class MainApplication : Application(), ReactApplication { - - override val reactNativeHost: ReactNativeHost = - object : DefaultReactNativeHost(this) { - override fun getPackages(): List = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here, for example: - // add(MyReactNativePackage()) - } - - override fun getJSMainModuleName(): String = "index" - - override fun getUseDeveloperSupport(): Boolean = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED - override val isHermesEnabled: Boolean = BuildConfig.IS_HERMES_ENABLED - } - - override val reactHost: ReactHost - get() = getDefaultReactHost(this.applicationContext, reactNativeHost) - - override fun onCreate() { - super.onCreate() - SoLoader.init(this, false) - if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { - // If you opted-in for the New Architecture, we load the native entry point for this app. - load() - } - ReactNativeFlipper.initializeFlipper(this, reactNativeHost.reactInstanceManager) - } -} diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/example/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 73b37e4d..00000000 --- a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f59082..00000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png deleted file mode 100644 index 1b523998..00000000 Binary files a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png deleted file mode 100644 index ff10afd6..00000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png deleted file mode 100644 index 115a4c76..00000000 Binary files a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png deleted file mode 100644 index dcd3cd80..00000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609..00000000 Binary files a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe0..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png deleted file mode 100644 index b824ebdd..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c..00000000 Binary files a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 403ecdd5..00000000 --- a/example/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - PlaidReactNativeDemo - diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 7ba83a2a..00000000 --- a/example/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/example/android/build.gradle b/example/android/build.gradle deleted file mode 100644 index f159895a..00000000 --- a/example/android/build.gradle +++ /dev/null @@ -1,31 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "34.0.0" - minSdkVersion = 21 - compileSdkVersion = 34 - targetSdkVersion = 34 - ndkVersion = "25.1.8937393" - kotlinVersion = "1.8.0" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -apply plugin: "com.facebook.react.rootproject" - -allprojects { - configurations.all { - resolutionStrategy { - // Force a version compatible with Compile SDK 34 - force 'androidx.core:core:1.13.1' - force 'androidx.core:core-ktx:1.13.1' - } - } -} \ No newline at end of file diff --git a/example/android/gradle.properties b/example/android/gradle.properties deleted file mode 100644 index a46a5b90..00000000 --- a/example/android/gradle.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true -# Automatically convert third-party libraries to use AndroidX -android.enableJetifier=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=false - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 7f93135c..00000000 Binary files a/example/android/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index d11cdd90..00000000 --- a/example/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.3-all.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/example/android/gradlew b/example/android/gradlew deleted file mode 100755 index 0adc8e1a..00000000 --- a/example/android/gradlew +++ /dev/null @@ -1,249 +0,0 @@ -#!/bin/sh - -# -# Copyright Β© 2015-2021 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions Β«$varΒ», Β«${var}Β», Β«${var:-default}Β», Β«${var+SET}Β», -# Β«${var#prefix}Β», Β«${var%suffix}Β», and Β«$( cmd )Β»; -# * compound commands having a testable exit status, especially Β«caseΒ»; -# * various built-in commands including Β«commandΒ», Β«setΒ», and Β«ulimitΒ». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat deleted file mode 100644 index 93e3f59f..00000000 --- a/example/android/gradlew.bat +++ /dev/null @@ -1,92 +0,0 @@ -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/example/android/settings.gradle b/example/android/settings.gradle deleted file mode 100644 index c331f563..00000000 --- a/example/android/settings.gradle +++ /dev/null @@ -1,4 +0,0 @@ -rootProject.name = 'PlaidReactNativeDemo' -apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/example/app.json b/example/app.json index d19b67ce..eace2130 100644 --- a/example/app.json +++ b/example/app.json @@ -1,4 +1,32 @@ { - "name": "PlaidReactNativeDemo", - "displayName": "PlaidReactNativeDemo" -} + "expo": { + "name": "react-native-plaid-link-sdk-example", + "slug": "react-native-plaid-link-sdk-example", + "version": "1.0.0", + "orientation": "portrait", + "icon": "./assets/icon.png", + "userInterfaceStyle": "light", + "splash": { + "image": "./assets/splash-icon.png", + "resizeMode": "contain", + "backgroundColor": "#ffffff" + }, + "ios": { + "supportsTablet": true, + "bundleIdentifier": "expo.modules.plaidlinksdk.example" + }, + "android": { + "adaptiveIcon": { + "backgroundColor": "#E6F4FE", + "foregroundImage": "./assets/android-icon-foreground.png", + "backgroundImage": "./assets/android-icon-background.png", + "monochromeImage": "./assets/android-icon-monochrome.png" + }, + "predictiveBackGestureEnabled": false, + "package": "expo.modules.plaidlinksdk.example" + }, + "web": { + "favicon": "./assets/favicon.png" + } + } +} \ No newline at end of file diff --git a/example/assets/android-icon-background.png b/example/assets/android-icon-background.png new file mode 100644 index 00000000..5ffefc5b Binary files /dev/null and b/example/assets/android-icon-background.png differ diff --git a/example/assets/android-icon-foreground.png b/example/assets/android-icon-foreground.png new file mode 100644 index 00000000..3a9e5016 Binary files /dev/null and b/example/assets/android-icon-foreground.png differ diff --git a/example/assets/android-icon-monochrome.png b/example/assets/android-icon-monochrome.png new file mode 100644 index 00000000..77484ebd Binary files /dev/null and b/example/assets/android-icon-monochrome.png differ diff --git a/example/assets/favicon.png b/example/assets/favicon.png new file mode 100644 index 00000000..408bd746 Binary files /dev/null and b/example/assets/favicon.png differ diff --git a/example/assets/icon.png b/example/assets/icon.png new file mode 100644 index 00000000..7165a53c Binary files /dev/null and b/example/assets/icon.png differ diff --git a/example/assets/splash-icon.png b/example/assets/splash-icon.png new file mode 100644 index 00000000..03d6f6b6 Binary files /dev/null and b/example/assets/splash-icon.png differ diff --git a/example/babel.config.js b/example/babel.config.js index f7b3da3b..9d89e131 100644 --- a/example/babel.config.js +++ b/example/babel.config.js @@ -1,3 +1,6 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], +module.exports = function (api) { + api.cache(true); + return { + presets: ['babel-preset-expo'], + }; }; diff --git a/example/components/components.tsx b/example/components/components.tsx new file mode 100644 index 00000000..e75586e9 --- /dev/null +++ b/example/components/components.tsx @@ -0,0 +1,174 @@ +import { + Button, + View, + Text, + ActivityIndicator, + TextInput, + TouchableOpacity, + StyleSheet, + Clipboard, +} from "react-native"; +import { styles } from "../styles/common"; +import { SessionState } from "../types/types"; +import { getTokenValidationError } from "../utils/validation"; + +export function SdkVersionView({ version }: { version: string }) { + return LinkKit {version}; +} + +export function ErrorView({ message }: { message: string }) { + return ( + + ⚠️ + {message} + + ); +} + +export function TokenInputView({ + token, + onTokenChange, +}: { + token: string; + onTokenChange: (token: string) => void; +}) { + const handlePaste = async () => { + const clipboardText = await Clipboard.getString(); + onTokenChange(clipboardText.trim()); + }; + + const handleClear = () => { + onTokenChange(""); + }; + + const validationError = getTokenValidationError(token); + + return ( + + Link token + + + + {token.length === 0 ? ( + + πŸ“‹ + + ) : ( + + βœ• + + )} + + + {validationError && ( + {validationError} + )} + + ); +} + +export function ConnectButton({ + state, + onRetry, + onOpen, + hasValidToken, +}: { + state: SessionState; + onRetry: () => void; + onOpen: () => void; + hasValidToken: boolean; +}) { + const isLoading = state === "loading"; + const isReady = state === "ready"; + const isIdle = state === "idle" || state === "error"; + const canCreateSession = isIdle && hasValidToken; + const isEnabled = canCreateSession || isReady; + + let buttonTitle = "Connect Bank Account"; + if (isLoading) { + buttonTitle = "Initializing..."; + } else if (isIdle) { + buttonTitle = "Create Link Session"; + } + + return ( + +