Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [5.3.0] - 2026-09-30

- Android SDK version: 19.3.1
- iOS SDK version: 7.1.4

### React Native

#### Changed

- Android builds now request a license token from Talsec through the `app.talsec.plugin` Gradle plugin, applied by freeRASP automatically

#### Fixed

- Expo config plugin no longer fails when added to `app.json` without options

### Android

#### Changed

- Changed Talsec integration from Maven dependency to the `app.talsec.plugin` Gradle plugin with `talsec { }` configuration block

#### Fixed

- Root detection related bugs causing false positives

## [5.2.2] - 2026-09-29

- Android SDK version: 19.2.3
Expand Down
8 changes: 7 additions & 1 deletion android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,16 @@ buildscript {
repositories {
google()
mavenCentral()
maven { url 'https://europe-west3-maven.pkg.dev/talsec-artifact-repository/plugin' }
}

dependencies {
classpath "com.android.tools.build:gradle:7.2.1"
// noinspection DifferentKotlinGradleVersion
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
// TODO: set the real version once app.talsec.plugin with wrapper support is released
classpath 'app.talsec.plugin:talsec-security-plugin:1.1.0'
}
}

Expand All @@ -23,6 +26,7 @@ def isNewArchitectureEnabled() {
apply plugin: "com.android.library"
apply plugin: "kotlin-android"
apply plugin: 'kotlinx-serialization'
apply plugin: 'app.talsec.plugin'

if (isNewArchitectureEnabled()) {
apply plugin: "com.facebook.react"
Expand Down Expand Up @@ -53,6 +57,8 @@ def getMaxVersion(name) {
android {
compileSdk getMaxVersion("compileSdk")

talsec { hostAppIdentity = true }

defaultConfig {
minSdkVersion getIntegerDefault("minSdkVersion")
targetSdkVersion getIntegerDefault("targetSdkVersion")
Expand Down Expand Up @@ -105,7 +111,7 @@ dependencies {
implementation "com.facebook.react:react-native:$react_native_version"
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.4.1"
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:19.2.3"
implementation "com.aheaditec.talsec.security:TalsecSecurity-Community-ReactNative:19.3.1"
}

if (isNewArchitectureEnabled()) {
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "freerasp-react-native",
"version": "5.2.2",
"version": "5.3.0",
"description": "React Native plugin for improving app security and threat monitoring on Android and iOS mobile devices.",
"main": "lib/commonjs/index",
"module": "lib/module/index",
Expand All @@ -14,7 +14,7 @@
"prettier": "prettier \"**/*.{ts,js}\"",
"prepack": "bob build && yarn build:plugin",
"build": "bob build",
"test:plugin": "yarn build:plugin && node plugin/tests/iosSpm.test.js",
"test:plugin": "yarn build:plugin && node plugin/tests/iosSpm.test.js && node plugin/tests/pluginProps.test.js",
"example": "yarn --cwd example",
"bootstrap": "yarn example && yarn install && yarn example pods",
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build",
Expand Down
2 changes: 1 addition & 1 deletion plugin/build/index.d.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { type ConfigPlugin } from '@expo/config-plugins';
import { type PluginConfigType } from './pluginConfig';
declare const _default: ConfigPlugin<PluginConfigType>;
declare const _default: ConfigPlugin<PluginConfigType | undefined>;
export default _default;
2 changes: 1 addition & 1 deletion plugin/build/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ const withRnTalsecIos = (config, props) => {
config = withFreeraspIosPodfile(config, { spmEnabled });
return config;
};
const withRnTalsecApp = (config, props) => {
const withRnTalsecApp = (config, props = {}) => {
config = withBuildscriptDependency(config);
config = withAndroidMinSdkVersion(config, props);
config = withAndroidR8Version(config, props);
Expand Down
5 changes: 4 additions & 1 deletion plugin/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,10 @@ const withRnTalsecIos: ConfigPlugin<PluginConfigType> = (config, props) => {
return config;
};

const withRnTalsecApp: ConfigPlugin<PluginConfigType> = (config, props) => {
const withRnTalsecApp: ConfigPlugin<PluginConfigType | undefined> = (
config,
props: PluginConfigType = {}
) => {
config = withBuildscriptDependency(config);
config = withAndroidMinSdkVersion(config, props);
config = withAndroidR8Version(config, props);
Expand Down
15 changes: 15 additions & 0 deletions plugin/tests/pluginProps.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
/* eslint-env node */

const assert = require('assert').strict;
const withRnTalsecApp = require('../build').default;

const expoConfig = () => ({ name: 'example', slug: 'example' });

assert.doesNotThrow(() => withRnTalsecApp(expoConfig()));
assert.doesNotThrow(() => withRnTalsecApp(expoConfig(), undefined));
assert.doesNotThrow(() => withRnTalsecApp(expoConfig(), {}));
assert.doesNotThrow(() =>
withRnTalsecApp(expoConfig(), { android: { minSdkVersion: 26 } })
);

console.log('pluginProps tests passed');
Loading