From 292d8f4dd17bbeb60bbc81b4138d67228c5cd40b Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:21:28 -0300 Subject: [PATCH 01/14] ci: certify Camera and PAM Native 0.8 on Android --- .github/workflows/publish-ecosystem.yml | 1 + certification/android-ecosystem/composer.json | 1 + certification/android-ecosystem/composer.lock | 402 ++++++++++-------- 3 files changed, 231 insertions(+), 173 deletions(-) diff --git a/.github/workflows/publish-ecosystem.yml b/.github/workflows/publish-ecosystem.yml index 1858b97..2a4ba88 100644 --- a/.github/workflows/publish-ecosystem.yml +++ b/.github/workflows/publish-ecosystem.yml @@ -36,6 +36,7 @@ jobs: pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets pam-native-firebase pam-native-laravel-sync + pam-native-sync-laravel pam-native-camera ) if [[ "${SELECTED_PACKAGE}" != all ]]; then diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index fd30458..ba6cff4 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -9,6 +9,7 @@ "pushinbr/pam-native-auth": ">=0.1.0 <1.0.0", "pushinbr/pam-native-background-transfer": ">=0.1.0 <1.0.0", "pushinbr/pam-native-bluetooth": ">=0.1.0 <1.0.0", + "pushinbr/pam-native-camera": "^0.1.0", "pushinbr/pam-native-feature-flags": ">=0.1.0 <1.0.0", "pushinbr/pam-native-firebase": ">=0.1.0 <1.0.0", "pushinbr/pam-native-health": ">=0.1.0 <1.0.0", diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index e3bc34b..b0cf5c1 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "94334afeb7fd25ed4e43823268a43aa1", + "content-hash": "c63d56470094715f1cff952d36b118b7", "packages": [ { "name": "pushinbr/pam-native", - "version": "v0.6.78", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-php.git", - "reference": "749f07974ae419826fc619005c7e88bb68d73b6d" + "reference": "19c8bd57064c62d776dd6e3a672b56c36405ce66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-php/zipball/749f07974ae419826fc619005c7e88bb68d73b6d", - "reference": "749f07974ae419826fc619005c7e88bb68d73b6d", + "url": "https://api.github.com/repos/push-in/pam-native-php/zipball/19c8bd57064c62d776dd6e3a672b56c36405ce66", + "reference": "19c8bd57064c62d776dd6e3a672b56c36405ce66", "shasum": "" }, "require": { @@ -25,6 +25,7 @@ }, "bin": [ "bin/pam-native", + "bin/pam-native-contracts", "bin/pam-native-format", "bin/pam-native-language-server", "bin/pam-native-optimize", @@ -144,6 +145,13 @@ ], "description": "Profile the PAM Native application" }, + "release": { + "bin": "bin/pam-native", + "arguments": [ + "release" + ], + "description": "Certify, sign and package a PAM Native release" + }, "devtools": { "bin": "bin/pam-native", "arguments": [ @@ -172,6 +180,10 @@ ], "description": "Benchmark the PAM Native application" }, + "contracts": { + "script": "bin/pam-native-contracts", + "description": "Generate typed PHP, Kotlin and Swift contracts" + }, "ios:build": { "bin": "bin/pam-native", "arguments": [ @@ -366,25 +378,25 @@ "issues": "https://github.com/push-in/pam-native/issues", "source": "https://github.com/push-in/pam-native" }, - "time": "2026-08-23T02:45:09+00:00" + "time": "2026-08-23T16:32:04+00:00" }, { "name": "pushinbr/pam-native-auth", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-auth.git", - "reference": "c569ae91bbd8f546cd62e4f4c2d5ea80a9e3c0ab" + "reference": "55f8b8919a09673f29a9607b54dc3f216f84f331" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-auth/zipball/c569ae91bbd8f546cd62e4f4c2d5ea80a9e3c0ab", - "reference": "c569ae91bbd8f546cd62e4f4c2d5ea80a9e3c0ab", + "url": "https://api.github.com/repos/push-in/pam-native-auth/zipball/55f8b8919a09673f29a9607b54dc3f216f84f331", + "reference": "55f8b8919a09673f29a9607b54dc3f216f84f331", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -399,35 +411,35 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Secure sessions, encrypted credential vaults and OAuth 2.1/PKCE primitives for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-auth/issues", - "source": "https://github.com/push-in/pam-native-auth/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-auth/tree/v0.2.0" }, - "time": "2026-08-01T03:52:45+00:00" + "time": "2026-08-23T18:02:25+00:00" }, { "name": "pushinbr/pam-native-background-transfer", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-background-transfer.git", - "reference": "903610a65e3f0bc4525794499e6066b3b04b7abf" + "reference": "e4e3c03096354e709301466ee7cf4a4fc2687f2e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-background-transfer/zipball/903610a65e3f0bc4525794499e6066b3b04b7abf", - "reference": "903610a65e3f0bc4525794499e6066b3b04b7abf", + "url": "https://api.github.com/repos/push-in/pam-native-background-transfer/zipball/e4e3c03096354e709301466ee7cf4a4fc2687f2e", + "reference": "e4e3c03096354e709301466ee7cf4a4fc2687f2e", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "require-dev": { - "pushinbr/pam-native-testing": "^0.1.0" + "pushinbr/pam-native-testing": "^0.2.0" }, "type": "pam-native-plugin", "extra": { @@ -442,32 +454,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Durable background uploads and downloads for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-background-transfer/issues", - "source": "https://github.com/push-in/pam-native-background-transfer/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-background-transfer/tree/v0.2.0" }, - "time": "2026-08-01T03:52:45+00:00" + "time": "2026-08-23T18:12:43+00:00" }, { "name": "pushinbr/pam-native-bluetooth", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-bluetooth.git", - "reference": "ee880294979f59f9e1941ab9b47bd50b849df37c" + "reference": "21e0581e990218daa6332548f91fb2827491bf89" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-bluetooth/zipball/ee880294979f59f9e1941ab9b47bd50b849df37c", - "reference": "ee880294979f59f9e1941ab9b47bd50b849df37c", + "url": "https://api.github.com/repos/push-in/pam-native-bluetooth/zipball/21e0581e990218daa6332548f91fb2827491bf89", + "reference": "21e0581e990218daa6332548f91fb2827491bf89", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -482,35 +494,79 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Lifecycle-safe Bluetooth LE scanning, GATT and notifications for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-bluetooth/issues", - "source": "https://github.com/push-in/pam-native-bluetooth/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-bluetooth/tree/v0.2.0" + }, + "time": "2026-08-23T18:02:29+00:00" + }, + { + "name": "pushinbr/pam-native-camera", + "version": "v0.1.0", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-camera.git", + "reference": "71600689ac1057387d2c16900f859291a7e6c1ba" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-camera/zipball/71600689ac1057387d2c16900f859291a7e6c1ba", + "reference": "71600689ac1057387d2c16900f859291a7e6c1ba", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\Camera\\": "src/" + } }, - "time": "2026-08-01T05:31:40+00:00" + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "description": "Professional zero-copy camera, capture and native frame processors for PAM Native.", + "support": { + "issues": "https://github.com/push-in/pam-native-camera/issues", + "source": "https://github.com/push-in/pam-native-camera/tree/v0.1.0" + }, + "time": "2026-08-23T17:41:22+00:00" }, { "name": "pushinbr/pam-native-feature-flags", - "version": "v0.1.1", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-feature-flags.git", - "reference": "3c9eddafca19d016f4e2996a7ebbc833e05e760c" + "reference": "d24ced8639f4a7339a918fffc7ee147fe0a56e22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-feature-flags/zipball/3c9eddafca19d016f4e2996a7ebbc833e05e760c", - "reference": "3c9eddafca19d016f4e2996a7ebbc833e05e760c", + "url": "https://api.github.com/repos/push-in/pam-native-feature-flags/zipball/d24ced8639f4a7339a918fffc7ee147fe0a56e22", + "reference": "d24ced8639f4a7339a918fffc7ee147fe0a56e22", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "require-dev": { - "pushinbr/pam-native-testing": "^0.1.0" + "pushinbr/pam-native-testing": "^0.2.0" }, "type": "pam-native-plugin", "extra": { @@ -525,36 +581,36 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Typed targeting, deterministic rollouts and offline feature-flag snapshots for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-feature-flags/issues", - "source": "https://github.com/push-in/pam-native-feature-flags/tree/v0.1.1" + "source": "https://github.com/push-in/pam-native-feature-flags/tree/v0.2.0" }, - "time": "2026-08-01T04:08:55+00:00" + "time": "2026-08-23T18:12:44+00:00" }, { "name": "pushinbr/pam-native-firebase", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-firebase.git", - "reference": "f8894429568022a50900b8ff271b997259a7f607" + "reference": "01db373be2e81986c4a9ecf4804c7ed29b342f61" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-firebase/zipball/f8894429568022a50900b8ff271b997259a7f607", - "reference": "f8894429568022a50900b8ff271b997259a7f607", + "url": "https://api.github.com/repos/push-in/pam-native-firebase/zipball/01db373be2e81986c4a9ecf4804c7ed29b342f61", + "reference": "01db373be2e81986c4a9ecf4804c7ed29b342f61", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1", - "pushinbr/pam-native-feature-flags": "^0.1.0" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0", + "pushinbr/pam-native-feature-flags": "^0.2.0" }, "require-dev": { - "pushinbr/pam-native-testing": "^0.1.0" + "pushinbr/pam-native-testing": "^0.2.0" }, "type": "pam-native-plugin", "extra": { @@ -569,32 +625,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Production Firebase Analytics, Remote Config, Messaging, Crashlytics and multi-app integration for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-firebase/issues", - "source": "https://github.com/push-in/pam-native-firebase/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-firebase/tree/v0.2.0" }, - "time": "2026-08-01T05:54:23+00:00" + "time": "2026-08-23T18:12:46+00:00" }, { "name": "pushinbr/pam-native-health", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-health.git", - "reference": "65f57a70799b7ea7c3e5d58827d52bfc7e204ab4" + "reference": "4f93f2d06ba27b949bb031700ed5e94c59281a9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-health/zipball/65f57a70799b7ea7c3e5d58827d52bfc7e204ab4", - "reference": "65f57a70799b7ea7c3e5d58827d52bfc7e204ab4", + "url": "https://api.github.com/repos/push-in/pam-native-health/zipball/4f93f2d06ba27b949bb031700ed5e94c59281a9e", + "reference": "4f93f2d06ba27b949bb031700ed5e94c59281a9e", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -609,32 +665,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Health Connect and HealthKit authorization, reads and writes for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-health/issues", - "source": "https://github.com/push-in/pam-native-health/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-health/tree/v0.2.0" }, - "time": "2026-08-01T05:17:58+00:00" + "time": "2026-08-23T18:02:35+00:00" }, { "name": "pushinbr/pam-native-intents", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-intents.git", - "reference": "67e05c9e1d9097548f498feb37a88c1f55ec8a23" + "reference": "c4712fe103437c3244f72859724fe9b6db3d3459" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-intents/zipball/67e05c9e1d9097548f498feb37a88c1f55ec8a23", - "reference": "67e05c9e1d9097548f498feb37a88c1f55ec8a23", + "url": "https://api.github.com/repos/push-in/pam-native-intents/zipball/c4712fe103437c3244f72859724fe9b6db3d3459", + "reference": "c4712fe103437c3244f72859724fe9b6db3d3459", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -649,32 +705,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Android dynamic shortcuts and Apple App Intents for PAM Native routes.", "support": { "issues": "https://github.com/push-in/pam-native-intents/issues", - "source": "https://github.com/push-in/pam-native-intents/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-intents/tree/v0.2.0" }, - "time": "2026-08-01T05:10:48+00:00" + "time": "2026-08-23T18:02:37+00:00" }, { "name": "pushinbr/pam-native-live-activities", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-live-activities.git", - "reference": "61e8b93f419c734cb23b20fd23904263ac3e9057" + "reference": "dee003b1906b9df77b0b510b5b87922d298c488a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-live-activities/zipball/61e8b93f419c734cb23b20fd23904263ac3e9057", - "reference": "61e8b93f419c734cb23b20fd23904263ac3e9057", + "url": "https://api.github.com/repos/push-in/pam-native-live-activities/zipball/dee003b1906b9df77b0b510b5b87922d298c488a", + "reference": "dee003b1906b9df77b0b510b5b87922d298c488a", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -689,32 +745,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "ActivityKit Live Activities and Android ongoing live notifications for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-live-activities/issues", - "source": "https://github.com/push-in/pam-native-live-activities/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-live-activities/tree/v0.2.0" }, - "time": "2026-08-01T05:03:34+00:00" + "time": "2026-08-23T18:02:38+00:00" }, { "name": "pushinbr/pam-native-maps", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-maps.git", - "reference": "6b931aca2b2b653c03f39b2a388e11cd21f1ea56" + "reference": "e2a65f29d809e13bf77e1216df49e2e5aac39fe9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-maps/zipball/6b931aca2b2b653c03f39b2a388e11cd21f1ea56", - "reference": "6b931aca2b2b653c03f39b2a388e11cd21f1ea56", + "url": "https://api.github.com/repos/push-in/pam-native-maps/zipball/e2a65f29d809e13bf77e1216df49e2e5aac39fe9", + "reference": "e2a65f29d809e13bf77e1216df49e2e5aac39fe9", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -729,35 +785,35 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Declarative native maps, cameras, markers and overlays for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-maps/issues", - "source": "https://github.com/push-in/pam-native-maps/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-maps/tree/v0.2.0" }, - "time": "2026-08-01T04:21:58+00:00" + "time": "2026-08-23T18:02:40+00:00" }, { "name": "pushinbr/pam-native-media", - "version": "v0.2.3", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-media.git", - "reference": "8e08f77e90f9b6f91c04697546bf233011c1bf85" + "reference": "35d9e16514969c1352977a9af767e59e449608f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-media/zipball/8e08f77e90f9b6f91c04697546bf233011c1bf85", - "reference": "8e08f77e90f9b6f91c04697546bf233011c1bf85", + "url": "https://api.github.com/repos/push-in/pam-native-media/zipball/35d9e16514969c1352977a9af767e59e449608f0", + "reference": "35d9e16514969c1352977a9af767e59e449608f0", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "require-dev": { - "pushinbr/pam-native-testing": "^0.1.0" + "pushinbr/pam-native-testing": "^0.2.0" }, "type": "pam-native-plugin", "extra": { @@ -777,27 +833,27 @@ "description": "Native media inspection, thumbnails and embedded camera capture for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-media/issues", - "source": "https://github.com/push-in/pam-native-media/tree/v0.2.3" + "source": "https://github.com/push-in/pam-native-media/tree/v0.3.0" }, - "time": "2026-08-07T11:53:19+00:00" + "time": "2026-08-23T18:12:48+00:00" }, { "name": "pushinbr/pam-native-nfc", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-nfc.git", - "reference": "ca02141265a755a352ad88fc6447cd23249a69d2" + "reference": "fe9ec73cd1272ced3d6c8b92b8d7fcac5d7c509d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-nfc/zipball/ca02141265a755a352ad88fc6447cd23249a69d2", - "reference": "ca02141265a755a352ad88fc6447cd23249a69d2", + "url": "https://api.github.com/repos/push-in/pam-native-nfc/zipball/fe9ec73cd1272ced3d6c8b92b8d7fcac5d7c509d", + "reference": "fe9ec73cd1272ced3d6c8b92b8d7fcac5d7c509d", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -812,32 +868,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Lifecycle-safe NDEF reading and writing for PAM Native on Android and iOS.", "support": { "issues": "https://github.com/push-in/pam-native-nfc/issues", - "source": "https://github.com/push-in/pam-native-nfc/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-nfc/tree/v0.2.0" }, - "time": "2026-08-01T05:24:38+00:00" + "time": "2026-08-23T18:02:43+00:00" }, { "name": "pushinbr/pam-native-payments", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-payments.git", - "reference": "ec20893ae5bf607a6e6f3ecc4b5b8c8ea499f562" + "reference": "25a58a66c50d4c00e5a4ad626f15b0930c2785a9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-payments/zipball/ec20893ae5bf607a6e6f3ecc4b5b8c8ea499f562", - "reference": "ec20893ae5bf607a6e6f3ecc4b5b8c8ea499f562", + "url": "https://api.github.com/repos/push-in/pam-native-payments/zipball/25a58a66c50d4c00e5a4ad626f15b0930c2785a9", + "reference": "25a58a66c50d4c00e5a4ad626f15b0930c2785a9", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -852,35 +908,35 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "PCI-conscious Stripe PaymentSheet payments for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-payments/issues", - "source": "https://github.com/push-in/pam-native-payments/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-payments/tree/v0.2.0" }, - "time": "2026-08-01T04:49:51+00:00" + "time": "2026-08-23T18:02:46+00:00" }, { "name": "pushinbr/pam-native-realtime", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-realtime.git", - "reference": "ce38847b10e35fa530341242f8f37b99de6e63aa" + "reference": "2727b1dd64f898f04ceede3dcb557b84eee35aac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-realtime/zipball/ce38847b10e35fa530341242f8f37b99de6e63aa", - "reference": "ce38847b10e35fa530341242f8f37b99de6e63aa", + "url": "https://api.github.com/repos/push-in/pam-native-realtime/zipball/2727b1dd64f898f04ceede3dcb557b84eee35aac", + "reference": "2727b1dd64f898f04ceede3dcb557b84eee35aac", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "require-dev": { - "pushinbr/pam-native-testing": "^0.1.0" + "pushinbr/pam-native-testing": "^0.2.0" }, "type": "pam-native-plugin", "extra": { @@ -895,32 +951,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Persistent native WebSocket connections with bounded event queues for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-realtime/issues", - "source": "https://github.com/push-in/pam-native-realtime/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-realtime/tree/v0.2.0" }, - "time": "2026-08-01T05:46:09+00:00" + "time": "2026-08-23T18:12:49+00:00" }, { "name": "pushinbr/pam-native-scanner", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-scanner.git", - "reference": "d487f1af484f7203f210d3733e6952e19def6288" + "reference": "1789bf3cbc22bd1ad63d11878e494a86c87a995d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-scanner/zipball/d487f1af484f7203f210d3733e6952e19def6288", - "reference": "d487f1af484f7203f210d3733e6952e19def6288", + "url": "https://api.github.com/repos/push-in/pam-native-scanner/zipball/1789bf3cbc22bd1ad63d11878e494a86c87a995d", + "reference": "1789bf3cbc22bd1ad63d11878e494a86c87a995d", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -935,32 +991,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Real-time QR and barcode scanning with native camera previews for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-scanner/issues", - "source": "https://github.com/push-in/pam-native-scanner/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-scanner/tree/v0.2.0" }, - "time": "2026-08-01T04:27:48+00:00" + "time": "2026-08-23T18:02:49+00:00" }, { "name": "pushinbr/pam-native-share-extension", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-share-extension.git", - "reference": "192823dad7594af056a0a22ebbc5434ed741c4d5" + "reference": "e3098097196ba2cfa3c47654ef5b69bfd9be3180" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-share-extension/zipball/192823dad7594af056a0a22ebbc5434ed741c4d5", - "reference": "192823dad7594af056a0a22ebbc5434ed741c4d5", + "url": "https://api.github.com/repos/push-in/pam-native-share-extension/zipball/e3098097196ba2cfa3c47654ef5b69bfd9be3180", + "reference": "e3098097196ba2cfa3c47654ef5b69bfd9be3180", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -975,32 +1031,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Receive text, URLs and files through native Android shares and an iOS Share Extension.", "support": { "issues": "https://github.com/push-in/pam-native-share-extension/issues", - "source": "https://github.com/push-in/pam-native-share-extension/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-share-extension/tree/v0.2.0" }, - "time": "2026-08-01T03:52:47+00:00" + "time": "2026-08-23T18:02:51+00:00" }, { "name": "pushinbr/pam-native-subscriptions", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-subscriptions.git", - "reference": "395eae6df2345b7ce823a5e8813a5d0024fb2c0a" + "reference": "cb970b9c62d5c8a199c2ba24b49242d4130f266b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-subscriptions/zipball/395eae6df2345b7ce823a5e8813a5d0024fb2c0a", - "reference": "395eae6df2345b7ce823a5e8813a5d0024fb2c0a", + "url": "https://api.github.com/repos/push-in/pam-native-subscriptions/zipball/cb970b9c62d5c8a199c2ba24b49242d4130f266b", + "reference": "cb970b9c62d5c8a199c2ba24b49242d4130f266b", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -1015,32 +1071,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "StoreKit 2 and Google Play Billing subscriptions for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-subscriptions/issues", - "source": "https://github.com/push-in/pam-native-subscriptions/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-subscriptions/tree/v0.2.0" }, - "time": "2026-08-01T05:38:29+00:00" + "time": "2026-08-23T18:02:52+00:00" }, { "name": "pushinbr/pam-native-video", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-video.git", - "reference": "3f1c3d9ffaacd20c5bc97704c7b3107cce36c9d2" + "reference": "589f934215b15ba4be175192964fc73f9d68b734" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/3f1c3d9ffaacd20c5bc97704c7b3107cce36c9d2", - "reference": "3f1c3d9ffaacd20c5bc97704c7b3107cce36c9d2", + "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/589f934215b15ba4be175192964fc73f9d68b734", + "reference": "589f934215b15ba4be175192964fc73f9d68b734", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -1055,32 +1111,32 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Adaptive streaming, subtitles and native Media3/AVPlayer playback for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-video/issues", - "source": "https://github.com/push-in/pam-native-video/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-video/tree/v0.2.0" }, - "time": "2026-08-01T03:52:48+00:00" + "time": "2026-08-23T18:04:21+00:00" }, { "name": "pushinbr/pam-native-widgets", - "version": "v0.1.0", + "version": "v0.2.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-widgets.git", - "reference": "d59e5a563838ad344ebc67005eb165dd9753c078" + "reference": "3df0454e083b0d3591c960b423ea657a6dd547e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-widgets/zipball/d59e5a563838ad344ebc67005eb165dd9753c078", - "reference": "d59e5a563838ad344ebc67005eb165dd9753c078", + "url": "https://api.github.com/repos/push-in/pam-native-widgets/zipball/3df0454e083b0d3591c960b423ea657a6dd547e7", + "reference": "3df0454e083b0d3591c960b423ea657a6dd547e7", "shasum": "" }, "require": { - "php": "^8.4", - "pushinbr/pam-native": "^0.6.1" + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" }, "type": "pam-native-plugin", "extra": { @@ -1095,14 +1151,14 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BUSL-1.1" + "Apache-2.0" ], "description": "Android App Widgets and iOS WidgetKit timelines for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-widgets/issues", - "source": "https://github.com/push-in/pam-native-widgets/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-widgets/tree/v0.2.0" }, - "time": "2026-08-01T03:52:48+00:00" + "time": "2026-08-23T18:04:23+00:00" } ], "packages-dev": [], From 23aedb298351cba462ad78c5339cc0894340c383 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:37:00 -0300 Subject: [PATCH 02/14] test: certify protected native video playback --- .github/workflows/ecosystem-ios.yml | 6 ++- certification/android-ecosystem/composer.json | 8 +++- certification/android-ecosystem/composer.lock | 39 +++++++++++++------ 3 files changed, 40 insertions(+), 13 deletions(-) diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index 71a6384..cf505a5 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -42,7 +42,11 @@ jobs: pam-native-camera ) for repo in "${repos[@]}"; do - git clone --depth 1 --branch main \ + branch=main + if [[ "${repo}" == pam-native-video ]]; then + branch=feat/protected-playback + fi + git clone --depth 1 --branch "${branch}" \ "https://github.com/push-in/${repo}.git" \ "${RUNNER_TEMP}/${repo}" done diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index ba6cff4..e2aa104 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -3,6 +3,12 @@ "description": "Public aggregate Android build for the official PAM Native plugins.", "type": "project", "license": "Apache-2.0", + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/push-in/pam-native-video.git" + } + ], "require": { "php": "^8.5", "pushinbr/pam-native": ">=0.6.1 <1.0.0", @@ -23,7 +29,7 @@ "pushinbr/pam-native-scanner": ">=0.1.0 <1.0.0", "pushinbr/pam-native-share-extension": ">=0.1.0 <1.0.0", "pushinbr/pam-native-subscriptions": ">=0.1.0 <1.0.0", - "pushinbr/pam-native-video": ">=0.1.0 <1.0.0", + "pushinbr/pam-native-video": "dev-feat/protected-playback as 0.3.0", "pushinbr/pam-native-widgets": ">=0.1.0 <1.0.0" }, "config": { diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index b0cf5c1..9c7fd91 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "c63d56470094715f1cff952d36b118b7", + "content-hash": "5783f3f4f18546072eec0bc42be4b058", "packages": [ { "name": "pushinbr/pam-native", @@ -1082,22 +1082,26 @@ }, { "name": "pushinbr/pam-native-video", - "version": "v0.2.0", + "version": "dev-feat/protected-playback", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-video.git", - "reference": "589f934215b15ba4be175192964fc73f9d68b734" + "reference": "f5bf7e021c37745efe0933791efbf29fd2b5ad53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/589f934215b15ba4be175192964fc73f9d68b734", - "reference": "589f934215b15ba4be175192964fc73f9d68b734", + "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/f5bf7e021c37745efe0933791efbf29fd2b5ad53", + "reference": "f5bf7e021c37745efe0933791efbf29fd2b5ad53", "shasum": "" }, "require": { "php": "^8.5", "pushinbr/pam-native": "^0.8.0" }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -1109,16 +1113,20 @@ "Pam\\Native\\Video\\": "src/" } }, - "notification-url": "https://packagist.org/downloads/", + "scripts": { + "test": [ + "php tests/run.php" + ] + }, "license": [ "Apache-2.0" ], "description": "Adaptive streaming, subtitles and native Media3/AVPlayer playback for PAM Native.", "support": { - "issues": "https://github.com/push-in/pam-native-video/issues", - "source": "https://github.com/push-in/pam-native-video/tree/v0.2.0" + "source": "https://github.com/push-in/pam-native-video/tree/feat/protected-playback", + "issues": "https://github.com/push-in/pam-native-video/issues" }, - "time": "2026-08-23T18:04:21+00:00" + "time": "2026-08-23T18:36:13+00:00" }, { "name": "pushinbr/pam-native-widgets", @@ -1162,9 +1170,18 @@ } ], "packages-dev": [], - "aliases": [], + "aliases": [ + { + "package": "pushinbr/pam-native-video", + "version": "dev-feat/protected-playback", + "alias": "0.3.0", + "alias_normalized": "0.3.0.0" + } + ], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": { + "pushinbr/pam-native-video": 20 + }, "prefer-stable": false, "prefer-lowest": false, "platform": { From 17d282460719e7457b09567e0c64bd46b9e13f69 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:47:25 -0300 Subject: [PATCH 03/14] test: certify camera Android compiler fix --- certification/android-ecosystem/composer.lock | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index 9c7fd91..d8acc5d 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -505,16 +505,16 @@ }, { "name": "pushinbr/pam-native-camera", - "version": "v0.1.0", + "version": "v0.1.1", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-camera.git", - "reference": "71600689ac1057387d2c16900f859291a7e6c1ba" + "reference": "3a3da84c994457895164049798458374aaf49de6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-camera/zipball/71600689ac1057387d2c16900f859291a7e6c1ba", - "reference": "71600689ac1057387d2c16900f859291a7e6c1ba", + "url": "https://api.github.com/repos/push-in/pam-native-camera/zipball/3a3da84c994457895164049798458374aaf49de6", + "reference": "3a3da84c994457895164049798458374aaf49de6", "shasum": "" }, "require": { @@ -543,9 +543,9 @@ "description": "Professional zero-copy camera, capture and native frame processors for PAM Native.", "support": { "issues": "https://github.com/push-in/pam-native-camera/issues", - "source": "https://github.com/push-in/pam-native-camera/tree/v0.1.0" + "source": "https://github.com/push-in/pam-native-camera/tree/v0.1.1" }, - "time": "2026-08-23T17:41:22+00:00" + "time": "2026-08-23T18:46:12+00:00" }, { "name": "pushinbr/pam-native-feature-flags", From 0a184e47f6ed2f0934660b4467addb7d1d6b77d3 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:49:16 -0300 Subject: [PATCH 04/14] test: add media editor to native aggregate gates --- .github/workflows/ecosystem-ios.yml | 23 ++++---- certification/android-ecosystem/composer.json | 5 ++ certification/android-ecosystem/composer.lock | 58 ++++++++++++++++++- certification/ios-ecosystem/Package.swift | 44 ++++++++------ 4 files changed, 99 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index cf505a5..bebe109 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -36,7 +36,7 @@ jobs: pam-native-auth pam-native-background-transfer pam-native-bluetooth pam-native-feature-flags pam-native-firebase pam-native-health pam-native-intents pam-native-live-activities pam-native-maps - pam-native-media pam-native-nfc pam-native-payments + pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets pam-native-camera @@ -58,7 +58,7 @@ jobs: pam-native-auth pam-native-background-transfer pam-native-bluetooth pam-native-feature-flags pam-native-firebase pam-native-health pam-native-intents pam-native-live-activities pam-native-maps - pam-native-media pam-native-nfc pam-native-payments + pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets pam-native-camera @@ -74,15 +74,16 @@ jobs: PamPlugin7PushinbrPamNativeLiveActivities PamPlugin8PushinbrPamNativeMaps PamPlugin9PushinbrPamNativeMedia - PamPlugin10PushinbrPamNativeNfc - PamPlugin11PushinbrPamNativePayments - PamPlugin12PushinbrPamNativeRealtime - PamPlugin13PushinbrPamNativeScanner - PamPlugin14PushinbrPamNativeShareExtension - PamPlugin15PushinbrPamNativeSubscriptions - PamPlugin16PushinbrPamNativeVideo - PamPlugin17PushinbrPamNativeWidgets - PamPlugin18PushinbrPamNativeCamera + PamPlugin10PushinbrPamNativeMediaEditor + PamPlugin11PushinbrPamNativeNfc + PamPlugin12PushinbrPamNativePayments + PamPlugin13PushinbrPamNativeRealtime + PamPlugin14PushinbrPamNativeScanner + PamPlugin15PushinbrPamNativeShareExtension + PamPlugin16PushinbrPamNativeSubscriptions + PamPlugin17PushinbrPamNativeVideo + PamPlugin18PushinbrPamNativeWidgets + PamPlugin19PushinbrPamNativeCamera ) for index in "${!repos[@]}"; do source="${RUNNER_TEMP}/${repos[$index]}/ios/Sources" diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index e2aa104..5891112 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -7,6 +7,10 @@ { "type": "vcs", "url": "https://github.com/push-in/pam-native-video.git" + }, + { + "type": "vcs", + "url": "https://github.com/push-in/pam-native-media-editor.git" } ], "require": { @@ -23,6 +27,7 @@ "pushinbr/pam-native-live-activities": ">=0.1.0 <1.0.0", "pushinbr/pam-native-maps": ">=0.1.0 <1.0.0", "pushinbr/pam-native-media": ">=0.1.0 <1.0.0", + "pushinbr/pam-native-media-editor": "dev-main as 0.1.0", "pushinbr/pam-native-nfc": ">=0.1.0 <1.0.0", "pushinbr/pam-native-payments": ">=0.1.0 <1.0.0", "pushinbr/pam-native-realtime": ">=0.1.0 <1.0.0", diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index d8acc5d..20bebc2 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "5783f3f4f18546072eec0bc42be4b058", + "content-hash": "fb787cf08a7b733ffc7e2ea6c27bbf47", "packages": [ { "name": "pushinbr/pam-native", @@ -837,6 +837,55 @@ }, "time": "2026-08-23T18:12:48+00:00" }, + { + "name": "pushinbr/pam-native-media-editor", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-media-editor.git", + "reference": "5668c81f1d95412b9f8f3ff150a87bd550ce610b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-media-editor/zipball/5668c81f1d95412b9f8f3ff150a87bd550ce610b", + "reference": "5668c81f1d95412b9f8f3ff150a87bd550ce610b", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "default-branch": true, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\MediaEditor\\": "src/" + } + }, + "scripts": { + "test": [ + "php tests/run.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "description": "Non-destructive native media timelines, effects and export for PAM Native.", + "support": { + "source": "https://github.com/push-in/pam-native-media-editor/tree/main", + "issues": "https://github.com/push-in/pam-native-media-editor/issues" + }, + "time": "2026-08-23T18:47:52+00:00" + }, { "name": "pushinbr/pam-native-nfc", "version": "v0.2.0", @@ -1171,6 +1220,12 @@ ], "packages-dev": [], "aliases": [ + { + "package": "pushinbr/pam-native-media-editor", + "version": "dev-main", + "alias": "0.1.0", + "alias_normalized": "0.1.0.0" + }, { "package": "pushinbr/pam-native-video", "version": "dev-feat/protected-playback", @@ -1180,6 +1235,7 @@ ], "minimum-stability": "stable", "stability-flags": { + "pushinbr/pam-native-media-editor": 20, "pushinbr/pam-native-video": 20 }, "prefer-stable": false, diff --git a/certification/ios-ecosystem/Package.swift b/certification/ios-ecosystem/Package.swift index 8d40575..3b20c0c 100644 --- a/certification/ios-ecosystem/Package.swift +++ b/certification/ios-ecosystem/Package.swift @@ -71,55 +71,61 @@ let package = Package( linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("ImageIO"), .linkedFramework("UniformTypeIdentifiers")], ), .target( - name: "PamPlugin10PushinbrPamNativeNfc", + name: "PamPlugin10PushinbrPamNativeMediaEditor", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin10PushinbrPamNativeNfc", + path: "Sources/PamPlugin10PushinbrPamNativeMediaEditor", + linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("CoreImage"), .linkedFramework("CoreMedia"), .linkedFramework("CoreVideo")], + ), + .target( + name: "PamPlugin11PushinbrPamNativeNfc", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin11PushinbrPamNativeNfc", linkerSettings: [.linkedFramework("CoreNFC")], ), .target( - name: "PamPlugin11PushinbrPamNativePayments", + name: "PamPlugin12PushinbrPamNativePayments", dependencies: [.product(name: "PamNative", package: "ios"), .product(name: "StripePaymentSheet", package: "stripe-ios")], - path: "Sources/PamPlugin11PushinbrPamNativePayments", + path: "Sources/PamPlugin12PushinbrPamNativePayments", ), .target( - name: "PamPlugin12PushinbrPamNativeRealtime", + name: "PamPlugin13PushinbrPamNativeRealtime", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin12PushinbrPamNativeRealtime", + path: "Sources/PamPlugin13PushinbrPamNativeRealtime", ), .target( - name: "PamPlugin13PushinbrPamNativeScanner", + name: "PamPlugin14PushinbrPamNativeScanner", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin13PushinbrPamNativeScanner", + path: "Sources/PamPlugin14PushinbrPamNativeScanner", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("Vision")], ), .target( - name: "PamPlugin14PushinbrPamNativeShareExtension", + name: "PamPlugin15PushinbrPamNativeShareExtension", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin14PushinbrPamNativeShareExtension", + path: "Sources/PamPlugin15PushinbrPamNativeShareExtension", linkerSettings: [.linkedFramework("UniformTypeIdentifiers")], ), .target( - name: "PamPlugin15PushinbrPamNativeSubscriptions", + name: "PamPlugin16PushinbrPamNativeSubscriptions", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin15PushinbrPamNativeSubscriptions", + path: "Sources/PamPlugin16PushinbrPamNativeSubscriptions", linkerSettings: [.linkedFramework("StoreKit")], ), .target( - name: "PamPlugin16PushinbrPamNativeVideo", + name: "PamPlugin17PushinbrPamNativeVideo", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin16PushinbrPamNativeVideo", + path: "Sources/PamPlugin17PushinbrPamNativeVideo", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("AVKit")], ), .target( - name: "PamPlugin17PushinbrPamNativeWidgets", + name: "PamPlugin18PushinbrPamNativeWidgets", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin17PushinbrPamNativeWidgets", + path: "Sources/PamPlugin18PushinbrPamNativeWidgets", linkerSettings: [.linkedFramework("WidgetKit"), .linkedFramework("SwiftUI")], ), .target( - name: "PamPlugin18PushinbrPamNativeCamera", + name: "PamPlugin19PushinbrPamNativeCamera", dependencies: [.product(name: "PamNative", package: "ios")], - path: "Sources/PamPlugin18PushinbrPamNativeCamera", + path: "Sources/PamPlugin19PushinbrPamNativeCamera", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("CoreImage"), .linkedFramework("CoreMedia"), .linkedFramework("CoreVideo"), .linkedFramework("Metal"), .linkedFramework("Vision")], ), .target( @@ -144,7 +150,7 @@ let package = Package( ), .target( name: "PamNativePlugins", - dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeNfc", "PamPlugin11PushinbrPamNativePayments", "PamPlugin12PushinbrPamNativeRealtime", "PamPlugin13PushinbrPamNativeScanner", "PamPlugin14PushinbrPamNativeShareExtension", "PamPlugin15PushinbrPamNativeSubscriptions", "PamPlugin16PushinbrPamNativeVideo", "PamPlugin17PushinbrPamNativeWidgets", "PamPlugin18PushinbrPamNativeCamera", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], + dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], path: "Sources/PamNativePlugins" ), ] From 6384dbc2e0d507a3d99683656c72ab9791038f52 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:53:26 -0300 Subject: [PATCH 05/14] test: consume released protected video package --- .github/workflows/ecosystem-ios.yml | 6 +--- certification/android-ecosystem/composer.json | 6 +--- certification/android-ecosystem/composer.lock | 31 ++++++------------- 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index bebe109..2c02124 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -42,11 +42,7 @@ jobs: pam-native-camera ) for repo in "${repos[@]}"; do - branch=main - if [[ "${repo}" == pam-native-video ]]; then - branch=feat/protected-playback - fi - git clone --depth 1 --branch "${branch}" \ + git clone --depth 1 --branch main \ "https://github.com/push-in/${repo}.git" \ "${RUNNER_TEMP}/${repo}" done diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index 5891112..2af7f28 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -4,10 +4,6 @@ "type": "project", "license": "Apache-2.0", "repositories": [ - { - "type": "vcs", - "url": "https://github.com/push-in/pam-native-video.git" - }, { "type": "vcs", "url": "https://github.com/push-in/pam-native-media-editor.git" @@ -34,7 +30,7 @@ "pushinbr/pam-native-scanner": ">=0.1.0 <1.0.0", "pushinbr/pam-native-share-extension": ">=0.1.0 <1.0.0", "pushinbr/pam-native-subscriptions": ">=0.1.0 <1.0.0", - "pushinbr/pam-native-video": "dev-feat/protected-playback as 0.3.0", + "pushinbr/pam-native-video": "^0.3.0", "pushinbr/pam-native-widgets": ">=0.1.0 <1.0.0" }, "config": { diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index 20bebc2..b3825dd 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "fb787cf08a7b733ffc7e2ea6c27bbf47", + "content-hash": "e4da2f672717f4d96fde4c151444c087", "packages": [ { "name": "pushinbr/pam-native", @@ -1131,16 +1131,16 @@ }, { "name": "pushinbr/pam-native-video", - "version": "dev-feat/protected-playback", + "version": "v0.3.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-video.git", - "reference": "f5bf7e021c37745efe0933791efbf29fd2b5ad53" + "reference": "2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/f5bf7e021c37745efe0933791efbf29fd2b5ad53", - "reference": "f5bf7e021c37745efe0933791efbf29fd2b5ad53", + "url": "https://api.github.com/repos/push-in/pam-native-video/zipball/2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42", + "reference": "2ef0ef111dc5bada87c96b83cf9b3b40d7d6ed42", "shasum": "" }, "require": { @@ -1162,20 +1162,16 @@ "Pam\\Native\\Video\\": "src/" } }, - "scripts": { - "test": [ - "php tests/run.php" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Adaptive streaming, subtitles and native Media3/AVPlayer playback for PAM Native.", "support": { - "source": "https://github.com/push-in/pam-native-video/tree/feat/protected-playback", - "issues": "https://github.com/push-in/pam-native-video/issues" + "issues": "https://github.com/push-in/pam-native-video/issues", + "source": "https://github.com/push-in/pam-native-video/tree/v0.3.0" }, - "time": "2026-08-23T18:36:13+00:00" + "time": "2026-08-23T18:52:35+00:00" }, { "name": "pushinbr/pam-native-widgets", @@ -1225,18 +1221,11 @@ "version": "dev-main", "alias": "0.1.0", "alias_normalized": "0.1.0.0" - }, - { - "package": "pushinbr/pam-native-video", - "version": "dev-feat/protected-playback", - "alias": "0.3.0", - "alias_normalized": "0.3.0.0" } ], "minimum-stability": "stable", "stability-flags": { - "pushinbr/pam-native-media-editor": 20, - "pushinbr/pam-native-video": 20 + "pushinbr/pam-native-media-editor": 20 }, "prefer-stable": false, "prefer-lowest": false, From 9878611d95205b1c9447b3c3658ee5ef4716f130 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:56:29 -0300 Subject: [PATCH 06/14] test: certify media editor iOS render size fix --- certification/android-ecosystem/composer.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index b3825dd..4657fe2 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -843,12 +843,12 @@ "source": { "type": "git", "url": "https://github.com/push-in/pam-native-media-editor.git", - "reference": "5668c81f1d95412b9f8f3ff150a87bd550ce610b" + "reference": "b978afc7cedfb9ea3587ca69112c08e6f81c0273" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-media-editor/zipball/5668c81f1d95412b9f8f3ff150a87bd550ce610b", - "reference": "5668c81f1d95412b9f8f3ff150a87bd550ce610b", + "url": "https://api.github.com/repos/push-in/pam-native-media-editor/zipball/b978afc7cedfb9ea3587ca69112c08e6f81c0273", + "reference": "b978afc7cedfb9ea3587ca69112c08e6f81c0273", "shasum": "" }, "require": { @@ -884,7 +884,7 @@ "source": "https://github.com/push-in/pam-native-media-editor/tree/main", "issues": "https://github.com/push-in/pam-native-media-editor/issues" }, - "time": "2026-08-23T18:47:52+00:00" + "time": "2026-08-23T18:56:08+00:00" }, { "name": "pushinbr/pam-native-nfc", From 274145401cf276ca07a0223e6dc3b2e31af509ff Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 15:58:17 -0300 Subject: [PATCH 07/14] test: add native canvas to aggregate gates --- .github/workflows/ecosystem-ios.yml | 5 +- certification/android-ecosystem/composer.json | 5 ++ certification/android-ecosystem/composer.lock | 58 ++++++++++++++++++- certification/ios-ecosystem/Package.swift | 8 ++- 4 files changed, 72 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index 2c02124..35a5a81 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -39,7 +39,7 @@ jobs: pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera + pam-native-camera pam-native-canvas ) for repo in "${repos[@]}"; do git clone --depth 1 --branch main \ @@ -57,7 +57,7 @@ jobs: pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera + pam-native-camera pam-native-canvas ) targets=( PamPlugin0PushinbrPamNativeAuth @@ -80,6 +80,7 @@ jobs: PamPlugin17PushinbrPamNativeVideo PamPlugin18PushinbrPamNativeWidgets PamPlugin19PushinbrPamNativeCamera + PamPlugin20PushinbrPamNativeCanvas ) for index in "${!repos[@]}"; do source="${RUNNER_TEMP}/${repos[$index]}/ios/Sources" diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index 2af7f28..5b1a325 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -7,6 +7,10 @@ { "type": "vcs", "url": "https://github.com/push-in/pam-native-media-editor.git" + }, + { + "type": "vcs", + "url": "https://github.com/push-in/pam-native-canvas.git" } ], "require": { @@ -16,6 +20,7 @@ "pushinbr/pam-native-background-transfer": ">=0.1.0 <1.0.0", "pushinbr/pam-native-bluetooth": ">=0.1.0 <1.0.0", "pushinbr/pam-native-camera": "^0.1.0", + "pushinbr/pam-native-canvas": "dev-main as 0.1.0", "pushinbr/pam-native-feature-flags": ">=0.1.0 <1.0.0", "pushinbr/pam-native-firebase": ">=0.1.0 <1.0.0", "pushinbr/pam-native-health": ">=0.1.0 <1.0.0", diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index 4657fe2..a7bdab4 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e4da2f672717f4d96fde4c151444c087", + "content-hash": "d84ed597f6894ca8cd6631188f4e49a5", "packages": [ { "name": "pushinbr/pam-native", @@ -547,6 +547,55 @@ }, "time": "2026-08-23T18:46:12+00:00" }, + { + "name": "pushinbr/pam-native-canvas", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-canvas.git", + "reference": "07d98cf3dd1380d54a3619106318acb64f63aa1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-canvas/zipball/07d98cf3dd1380d54a3619106318acb64f63aa1e", + "reference": "07d98cf3dd1380d54a3619106318acb64f63aa1e", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "default-branch": true, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\Canvas\\": "src/" + } + }, + "scripts": { + "test": [ + "php tests/run.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "description": "Retained-mode native 2D canvas for PAM Native.", + "support": { + "source": "https://github.com/push-in/pam-native-canvas/tree/main", + "issues": "https://github.com/push-in/pam-native-canvas/issues" + }, + "time": "2026-08-23T18:55:40+00:00" + }, { "name": "pushinbr/pam-native-feature-flags", "version": "v0.2.0", @@ -1216,6 +1265,12 @@ ], "packages-dev": [], "aliases": [ + { + "package": "pushinbr/pam-native-canvas", + "version": "dev-main", + "alias": "0.1.0", + "alias_normalized": "0.1.0.0" + }, { "package": "pushinbr/pam-native-media-editor", "version": "dev-main", @@ -1225,6 +1280,7 @@ ], "minimum-stability": "stable", "stability-flags": { + "pushinbr/pam-native-canvas": 20, "pushinbr/pam-native-media-editor": 20 }, "prefer-stable": false, diff --git a/certification/ios-ecosystem/Package.swift b/certification/ios-ecosystem/Package.swift index 3b20c0c..3f190e9 100644 --- a/certification/ios-ecosystem/Package.swift +++ b/certification/ios-ecosystem/Package.swift @@ -128,6 +128,12 @@ let package = Package( path: "Sources/PamPlugin19PushinbrPamNativeCamera", linkerSettings: [.linkedFramework("AVFoundation"), .linkedFramework("CoreImage"), .linkedFramework("CoreMedia"), .linkedFramework("CoreVideo"), .linkedFramework("Metal"), .linkedFramework("Vision")], ), + .target( + name: "PamPlugin20PushinbrPamNativeCanvas", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin20PushinbrPamNativeCanvas", + linkerSettings: [.linkedFramework("CoreGraphics"), .linkedFramework("UIKit")], + ), .target( name: "PamExtensionIntents", path: "Sources/PamExtensionIntents", @@ -150,7 +156,7 @@ let package = Package( ), .target( name: "PamNativePlugins", - dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], + dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamPlugin20PushinbrPamNativeCanvas", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], path: "Sources/PamNativePlugins" ), ] From cbf38074b61a27b2bc1e6ca4530bbf961d7dda85 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 16:09:42 -0300 Subject: [PATCH 08/14] test: certify canvas GPU and 3D modules --- .github/workflows/ecosystem-ios.yml | 6 +- certification/android-ecosystem/composer.json | 10 ++ certification/android-ecosystem/composer.lock | 122 +++++++++++++++++- certification/ios-ecosystem/Package.swift | 14 +- 4 files changed, 144 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ecosystem-ios.yml b/.github/workflows/ecosystem-ios.yml index 35a5a81..bc9e2a5 100644 --- a/.github/workflows/ecosystem-ios.yml +++ b/.github/workflows/ecosystem-ios.yml @@ -39,7 +39,7 @@ jobs: pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera pam-native-canvas + pam-native-camera pam-native-canvas pam-native-gpu pam-native-3d ) for repo in "${repos[@]}"; do git clone --depth 1 --branch main \ @@ -57,7 +57,7 @@ jobs: pam-native-media pam-native-media-editor pam-native-nfc pam-native-payments pam-native-realtime pam-native-scanner pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets - pam-native-camera pam-native-canvas + pam-native-camera pam-native-canvas pam-native-gpu pam-native-3d ) targets=( PamPlugin0PushinbrPamNativeAuth @@ -81,6 +81,8 @@ jobs: PamPlugin18PushinbrPamNativeWidgets PamPlugin19PushinbrPamNativeCamera PamPlugin20PushinbrPamNativeCanvas + PamPlugin21PushinbrPamNativeGpu + PamPlugin22PushinbrPamNative3d ) for index in "${!repos[@]}"; do source="${RUNNER_TEMP}/${repos[$index]}/ios/Sources" diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index 5b1a325..0355c09 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -11,6 +11,14 @@ { "type": "vcs", "url": "https://github.com/push-in/pam-native-canvas.git" + }, + { + "type": "vcs", + "url": "https://github.com/push-in/pam-native-gpu.git" + }, + { + "type": "vcs", + "url": "https://github.com/push-in/pam-native-3d.git" } ], "require": { @@ -21,6 +29,8 @@ "pushinbr/pam-native-bluetooth": ">=0.1.0 <1.0.0", "pushinbr/pam-native-camera": "^0.1.0", "pushinbr/pam-native-canvas": "dev-main as 0.1.0", + "pushinbr/pam-native-gpu": "dev-main as 0.1.0", + "pushinbr/pam-native-3d": "dev-main as 0.1.0", "pushinbr/pam-native-feature-flags": ">=0.1.0 <1.0.0", "pushinbr/pam-native-firebase": ">=0.1.0 <1.0.0", "pushinbr/pam-native-health": ">=0.1.0 <1.0.0", diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index a7bdab4..c751767 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d84ed597f6894ca8cd6631188f4e49a5", + "content-hash": "d72e0efefa06e0ea3046750b7592ab33", "packages": [ { "name": "pushinbr/pam-native", @@ -380,6 +380,55 @@ }, "time": "2026-08-23T16:32:04+00:00" }, + { + "name": "pushinbr/pam-native-3d", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-3d.git", + "reference": "71f3e51703d3b7426c58a402c097ea99008ce7eb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/71f3e51703d3b7426c58a402c097ea99008ce7eb", + "reference": "71f3e51703d3b7426c58a402c097ea99008ce7eb", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "default-branch": true, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\ThreeD\\": "src/" + } + }, + "scripts": { + "test": [ + "php tests/run.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "description": "Native Filament and RealityKit real-time 3D scenes for PAM Native.", + "support": { + "source": "https://github.com/push-in/pam-native-3d/tree/main", + "issues": "https://github.com/push-in/pam-native-3d/issues" + }, + "time": "2026-08-23T19:05:43+00:00" + }, { "name": "pushinbr/pam-native-auth", "version": "v0.2.0", @@ -553,12 +602,12 @@ "source": { "type": "git", "url": "https://github.com/push-in/pam-native-canvas.git", - "reference": "07d98cf3dd1380d54a3619106318acb64f63aa1e" + "reference": "b6dea0a4c35f941fb2345382d9df0bf916f93c94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-canvas/zipball/07d98cf3dd1380d54a3619106318acb64f63aa1e", - "reference": "07d98cf3dd1380d54a3619106318acb64f63aa1e", + "url": "https://api.github.com/repos/push-in/pam-native-canvas/zipball/b6dea0a4c35f941fb2345382d9df0bf916f93c94", + "reference": "b6dea0a4c35f941fb2345382d9df0bf916f93c94", "shasum": "" }, "require": { @@ -594,7 +643,7 @@ "source": "https://github.com/push-in/pam-native-canvas/tree/main", "issues": "https://github.com/push-in/pam-native-canvas/issues" }, - "time": "2026-08-23T18:55:40+00:00" + "time": "2026-08-23T19:08:37+00:00" }, { "name": "pushinbr/pam-native-feature-flags", @@ -683,6 +732,55 @@ }, "time": "2026-08-23T18:12:46+00:00" }, + { + "name": "pushinbr/pam-native-gpu", + "version": "dev-main", + "source": { + "type": "git", + "url": "https://github.com/push-in/pam-native-gpu.git", + "reference": "0ef89c17ed125ccf7335751322450d9a90ca6410" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/push-in/pam-native-gpu/zipball/0ef89c17ed125ccf7335751322450d9a90ca6410", + "reference": "0ef89c17ed125ccf7335751322450d9a90ca6410", + "shasum": "" + }, + "require": { + "php": "^8.5", + "pushinbr/pam-native": "^0.8.0" + }, + "require-dev": { + "phpstan/phpstan": "^2.1", + "pushinbr/pam-native-plugin-kit": "^0.2.0" + }, + "default-branch": true, + "type": "pam-native-plugin", + "extra": { + "pam-native": { + "plugin": "pam-native.plugin.json" + } + }, + "autoload": { + "psr-4": { + "Pam\\Native\\Gpu\\": "src/" + } + }, + "scripts": { + "test": [ + "php tests/run.php" + ] + }, + "license": [ + "Apache-2.0" + ], + "description": "Native Metal and OpenGL ES GPU surfaces for PAM Native.", + "support": { + "source": "https://github.com/push-in/pam-native-gpu/tree/main", + "issues": "https://github.com/push-in/pam-native-gpu/issues" + }, + "time": "2026-08-23T19:02:18+00:00" + }, { "name": "pushinbr/pam-native-health", "version": "v0.2.0", @@ -1265,12 +1363,24 @@ ], "packages-dev": [], "aliases": [ + { + "package": "pushinbr/pam-native-3d", + "version": "dev-main", + "alias": "0.1.0", + "alias_normalized": "0.1.0.0" + }, { "package": "pushinbr/pam-native-canvas", "version": "dev-main", "alias": "0.1.0", "alias_normalized": "0.1.0.0" }, + { + "package": "pushinbr/pam-native-gpu", + "version": "dev-main", + "alias": "0.1.0", + "alias_normalized": "0.1.0.0" + }, { "package": "pushinbr/pam-native-media-editor", "version": "dev-main", @@ -1280,7 +1390,9 @@ ], "minimum-stability": "stable", "stability-flags": { + "pushinbr/pam-native-3d": 20, "pushinbr/pam-native-canvas": 20, + "pushinbr/pam-native-gpu": 20, "pushinbr/pam-native-media-editor": 20 }, "prefer-stable": false, diff --git a/certification/ios-ecosystem/Package.swift b/certification/ios-ecosystem/Package.swift index 3f190e9..d851051 100644 --- a/certification/ios-ecosystem/Package.swift +++ b/certification/ios-ecosystem/Package.swift @@ -134,6 +134,18 @@ let package = Package( path: "Sources/PamPlugin20PushinbrPamNativeCanvas", linkerSettings: [.linkedFramework("CoreGraphics"), .linkedFramework("UIKit")], ), + .target( + name: "PamPlugin21PushinbrPamNativeGpu", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin21PushinbrPamNativeGpu", + linkerSettings: [.linkedFramework("Metal"), .linkedFramework("MetalKit"), .linkedFramework("QuartzCore")], + ), + .target( + name: "PamPlugin22PushinbrPamNative3d", + dependencies: [.product(name: "PamNative", package: "ios")], + path: "Sources/PamPlugin22PushinbrPamNative3d", + linkerSettings: [.linkedFramework("RealityKit"), .linkedFramework("Metal"), .linkedFramework("QuartzCore")], + ), .target( name: "PamExtensionIntents", path: "Sources/PamExtensionIntents", @@ -156,7 +168,7 @@ let package = Package( ), .target( name: "PamNativePlugins", - dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamPlugin20PushinbrPamNativeCanvas", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], + dependencies: ["PamPlugin0PushinbrPamNativeAuth", "PamPlugin1PushinbrPamNativeBackgroundTransfer", "PamPlugin2PushinbrPamNativeBluetooth", "PamPlugin3PushinbrPamNativeFeatureFlags", "PamPlugin4PushinbrPamNativeFirebase", "PamPlugin5PushinbrPamNativeHealth", "PamPlugin6PushinbrPamNativeIntents", "PamPlugin7PushinbrPamNativeLiveActivities", "PamPlugin8PushinbrPamNativeMaps", "PamPlugin9PushinbrPamNativeMedia", "PamPlugin10PushinbrPamNativeMediaEditor", "PamPlugin11PushinbrPamNativeNfc", "PamPlugin12PushinbrPamNativePayments", "PamPlugin13PushinbrPamNativeRealtime", "PamPlugin14PushinbrPamNativeScanner", "PamPlugin15PushinbrPamNativeShareExtension", "PamPlugin16PushinbrPamNativeSubscriptions", "PamPlugin17PushinbrPamNativeVideo", "PamPlugin18PushinbrPamNativeWidgets", "PamPlugin19PushinbrPamNativeCamera", "PamPlugin20PushinbrPamNativeCanvas", "PamPlugin21PushinbrPamNativeGpu", "PamPlugin22PushinbrPamNative3d", "PamExtensionIntents", "PamExtensionLiveActivities", "PamExtensionShare", "PamExtensionWidgets"], path: "Sources/PamNativePlugins" ), ] From 637856767a7216cb6773e220b1e83257789c379c Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 16:17:51 -0300 Subject: [PATCH 09/14] fix: certify Filament clear color type --- certification/android-ecosystem/composer.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index c751767..9a2dee2 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -386,12 +386,12 @@ "source": { "type": "git", "url": "https://github.com/push-in/pam-native-3d.git", - "reference": "71f3e51703d3b7426c58a402c097ea99008ce7eb" + "reference": "784b6c10525084be60a21e6257b83a0794f689dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/71f3e51703d3b7426c58a402c097ea99008ce7eb", - "reference": "71f3e51703d3b7426c58a402c097ea99008ce7eb", + "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/784b6c10525084be60a21e6257b83a0794f689dd", + "reference": "784b6c10525084be60a21e6257b83a0794f689dd", "shasum": "" }, "require": { @@ -427,7 +427,7 @@ "source": "https://github.com/push-in/pam-native-3d/tree/main", "issues": "https://github.com/push-in/pam-native-3d/issues" }, - "time": "2026-08-23T19:05:43+00:00" + "time": "2026-08-23T19:17:04+00:00" }, { "name": "pushinbr/pam-native-auth", From f3232a59ddbe432abd69e995ceb6445dd698836b Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 16:39:54 -0300 Subject: [PATCH 10/14] build: register modular media and graphics ecosystem --- .github/workflows/publish-ecosystem.yml | 3 ++- .../PamNativePlugins/PamNativePlugins.swift | 27 +++++++++++++------ docs/ecosystem-architecture.md | 5 ++++ 3 files changed, 26 insertions(+), 9 deletions(-) diff --git a/.github/workflows/publish-ecosystem.yml b/.github/workflows/publish-ecosystem.yml index 2a4ba88..ac10104 100644 --- a/.github/workflows/publish-ecosystem.yml +++ b/.github/workflows/publish-ecosystem.yml @@ -37,7 +37,8 @@ jobs: pam-native-share-extension pam-native-subscriptions pam-native-video pam-native-widgets pam-native-firebase pam-native-laravel-sync pam-native-sync-laravel - pam-native-camera + pam-native-camera pam-native-media-editor pam-native-canvas + pam-native-gpu pam-native-3d ) if [[ "${SELECTED_PACKAGE}" != all ]]; then valid=false diff --git a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift index a183559..ac151ec 100644 --- a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift +++ b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift @@ -9,14 +9,19 @@ import PamPlugin6PushinbrPamNativeIntents import PamPlugin7PushinbrPamNativeLiveActivities import PamPlugin8PushinbrPamNativeMaps import PamPlugin9PushinbrPamNativeMedia -import PamPlugin10PushinbrPamNativeNfc -import PamPlugin11PushinbrPamNativePayments -import PamPlugin12PushinbrPamNativeRealtime -import PamPlugin13PushinbrPamNativeScanner -import PamPlugin14PushinbrPamNativeShareExtension -import PamPlugin15PushinbrPamNativeSubscriptions -import PamPlugin16PushinbrPamNativeVideo -import PamPlugin17PushinbrPamNativeWidgets +import PamPlugin10PushinbrPamNativeMediaEditor +import PamPlugin11PushinbrPamNativeNfc +import PamPlugin12PushinbrPamNativePayments +import PamPlugin13PushinbrPamNativeRealtime +import PamPlugin14PushinbrPamNativeScanner +import PamPlugin15PushinbrPamNativeShareExtension +import PamPlugin16PushinbrPamNativeSubscriptions +import PamPlugin17PushinbrPamNativeVideo +import PamPlugin18PushinbrPamNativeWidgets +import PamPlugin19PushinbrPamNativeCamera +import PamPlugin20PushinbrPamNativeCanvas +import PamPlugin21PushinbrPamNativeGpu +import PamPlugin22PushinbrPamNative3d public enum PamNativePluginRegistry { public static func modules() -> [String: NativeModule] { @@ -30,11 +35,13 @@ public enum PamNativePluginRegistry { "intents": IntentsModule(), "live-activities": LiveActivitiesModule(), "media": MediaModule(), + "media-editor": MediaEditorModule(), "nfc": NfcModule(), "realtime": RealtimeModule(), "share-extension": ShareExtensionModule(), "subscriptions": SubscriptionsModule(), "widgets": WidgetsModule(), + "camera": CameraModule(), ] } @@ -44,6 +51,10 @@ public enum PamNativePluginRegistry { "payments.sheet": PamPaymentSheetFactory(), "scanner.camera": ScannerViewFactory(), "video.player": VideoPlayerFactory(), + "camera.preview": CameraViewFactory(), + "canvas.view": CanvasViewFactory(), + "gpu.surface": GpuViewFactory(), + "three-d.scene": SceneViewFactory(), ] } } diff --git a/docs/ecosystem-architecture.md b/docs/ecosystem-architecture.md index 68a8f7c..33cd9f7 100644 --- a/docs/ecosystem-architecture.md +++ b/docs/ecosystem-architecture.md @@ -34,6 +34,11 @@ matrix, changelog, CI, and signed release evidence. | 22 | `pushinbr/pam-native-devtools` | Event timeline, state snapshots, network diagnostics, performance marks, redaction and JSON export | PHP | None; entirely certifiable in CI | | 23 | `pushinbr/pam-native-plugin-kit` | Scaffolding, manifest validation, IDL codegen and compatibility certification | PHP + CLI templates | None; entirely certifiable in CI | | 24 | `pushinbr/pam-native-sync-laravel` | Laravel delta API, mutation ingestion, auth, conflicts and retention | Laravel package | Supported Laravel/database matrix | +| 25 | `pushinbr/pam-native-camera` | Low-latency photo/video capture, device/format selection, focus, zoom, torch and frame processors | PHP + Kotlin + Swift | Camera, thermal and interruption matrix on physical devices | +| 26 | `pushinbr/pam-native-media-editor` | Immutable media timelines, trim, composition, filters, audio mix, HDR and export | PHP + Kotlin + Swift | Codec/export matrix and long-running device jobs | +| 27 | `pushinbr/pam-native-canvas` | Retained 2D paths, text, images, transforms and pointer input | PHP + Kotlin + Swift views | Golden images and touch latency on devices | +| 28 | `pushinbr/pam-native-gpu` | Bounded programmable OpenGL ES 3 and Metal fragment rendering | PHP + Kotlin + Swift views | GPU/thermal matrix and shader golden images | +| 29 | `pushinbr/pam-native-3d` | Sandboxed GLB/USDZ scenes, animation, transforms and orbit controls | PHP + Filament + RealityKit views | Asset, memory, GPU and thermal matrix on devices | ## Mandatory release gates From 0d317dbd7f441db4a8436147f2bf486e2bde5863 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 16:50:48 -0300 Subject: [PATCH 11/14] fix: qualify modular native view factories --- .../Sources/PamNativePlugins/PamNativePlugins.swift | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift index ac151ec..30ee461 100644 --- a/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift +++ b/certification/ios-ecosystem/Sources/PamNativePlugins/PamNativePlugins.swift @@ -51,10 +51,10 @@ public enum PamNativePluginRegistry { "payments.sheet": PamPaymentSheetFactory(), "scanner.camera": ScannerViewFactory(), "video.player": VideoPlayerFactory(), - "camera.preview": CameraViewFactory(), - "canvas.view": CanvasViewFactory(), - "gpu.surface": GpuViewFactory(), - "three-d.scene": SceneViewFactory(), + "camera.preview": PamPlugin19PushinbrPamNativeCamera.CameraViewFactory(), + "canvas.view": PamPlugin20PushinbrPamNativeCanvas.CanvasViewFactory(), + "gpu.surface": PamPlugin21PushinbrPamNativeGpu.GpuViewFactory(), + "three-d.scene": PamPlugin22PushinbrPamNative3d.SceneViewFactory(), ] } } From dac175a46af06f0bece3e83309e82901b748e42f Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 17:02:38 -0300 Subject: [PATCH 12/14] build: certify stable modular graphics releases --- certification/android-ecosystem/composer.json | 26 +---- certification/android-ecosystem/composer.lock | 96 +++++-------------- 2 files changed, 27 insertions(+), 95 deletions(-) diff --git a/certification/android-ecosystem/composer.json b/certification/android-ecosystem/composer.json index 0355c09..e8596b5 100644 --- a/certification/android-ecosystem/composer.json +++ b/certification/android-ecosystem/composer.json @@ -3,24 +3,6 @@ "description": "Public aggregate Android build for the official PAM Native plugins.", "type": "project", "license": "Apache-2.0", - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/push-in/pam-native-media-editor.git" - }, - { - "type": "vcs", - "url": "https://github.com/push-in/pam-native-canvas.git" - }, - { - "type": "vcs", - "url": "https://github.com/push-in/pam-native-gpu.git" - }, - { - "type": "vcs", - "url": "https://github.com/push-in/pam-native-3d.git" - } - ], "require": { "php": "^8.5", "pushinbr/pam-native": ">=0.6.1 <1.0.0", @@ -28,9 +10,9 @@ "pushinbr/pam-native-background-transfer": ">=0.1.0 <1.0.0", "pushinbr/pam-native-bluetooth": ">=0.1.0 <1.0.0", "pushinbr/pam-native-camera": "^0.1.0", - "pushinbr/pam-native-canvas": "dev-main as 0.1.0", - "pushinbr/pam-native-gpu": "dev-main as 0.1.0", - "pushinbr/pam-native-3d": "dev-main as 0.1.0", + "pushinbr/pam-native-canvas": "^0.1.0", + "pushinbr/pam-native-gpu": "^0.1.0", + "pushinbr/pam-native-3d": "^0.1.0", "pushinbr/pam-native-feature-flags": ">=0.1.0 <1.0.0", "pushinbr/pam-native-firebase": ">=0.1.0 <1.0.0", "pushinbr/pam-native-health": ">=0.1.0 <1.0.0", @@ -38,7 +20,7 @@ "pushinbr/pam-native-live-activities": ">=0.1.0 <1.0.0", "pushinbr/pam-native-maps": ">=0.1.0 <1.0.0", "pushinbr/pam-native-media": ">=0.1.0 <1.0.0", - "pushinbr/pam-native-media-editor": "dev-main as 0.1.0", + "pushinbr/pam-native-media-editor": "^0.1.0", "pushinbr/pam-native-nfc": ">=0.1.0 <1.0.0", "pushinbr/pam-native-payments": ">=0.1.0 <1.0.0", "pushinbr/pam-native-realtime": ">=0.1.0 <1.0.0", diff --git a/certification/android-ecosystem/composer.lock b/certification/android-ecosystem/composer.lock index 9a2dee2..6bb70d1 100644 --- a/certification/android-ecosystem/composer.lock +++ b/certification/android-ecosystem/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d72e0efefa06e0ea3046750b7592ab33", + "content-hash": "f00002c32ae1585d26e9ee067bf758b9", "packages": [ { "name": "pushinbr/pam-native", @@ -382,16 +382,16 @@ }, { "name": "pushinbr/pam-native-3d", - "version": "dev-main", + "version": "v0.1.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-3d.git", - "reference": "784b6c10525084be60a21e6257b83a0794f689dd" + "reference": "b55d3cf5abdea571c56cd2e33c04823315e922ab" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/784b6c10525084be60a21e6257b83a0794f689dd", - "reference": "784b6c10525084be60a21e6257b83a0794f689dd", + "url": "https://api.github.com/repos/push-in/pam-native-3d/zipball/b55d3cf5abdea571c56cd2e33c04823315e922ab", + "reference": "b55d3cf5abdea571c56cd2e33c04823315e922ab", "shasum": "" }, "require": { @@ -402,7 +402,6 @@ "phpstan/phpstan": "^2.1", "pushinbr/pam-native-plugin-kit": "^0.2.0" }, - "default-branch": true, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -414,20 +413,16 @@ "Pam\\Native\\ThreeD\\": "src/" } }, - "scripts": { - "test": [ - "php tests/run.php" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Native Filament and RealityKit real-time 3D scenes for PAM Native.", "support": { - "source": "https://github.com/push-in/pam-native-3d/tree/main", - "issues": "https://github.com/push-in/pam-native-3d/issues" + "issues": "https://github.com/push-in/pam-native-3d/issues", + "source": "https://github.com/push-in/pam-native-3d/tree/v0.1.0" }, - "time": "2026-08-23T19:17:04+00:00" + "time": "2026-08-23T19:28:23+00:00" }, { "name": "pushinbr/pam-native-auth", @@ -598,7 +593,7 @@ }, { "name": "pushinbr/pam-native-canvas", - "version": "dev-main", + "version": "v0.1.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-canvas.git", @@ -618,7 +613,6 @@ "phpstan/phpstan": "^2.1", "pushinbr/pam-native-plugin-kit": "^0.2.0" }, - "default-branch": true, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -630,18 +624,14 @@ "Pam\\Native\\Canvas\\": "src/" } }, - "scripts": { - "test": [ - "php tests/run.php" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Retained-mode native 2D canvas for PAM Native.", "support": { - "source": "https://github.com/push-in/pam-native-canvas/tree/main", - "issues": "https://github.com/push-in/pam-native-canvas/issues" + "issues": "https://github.com/push-in/pam-native-canvas/issues", + "source": "https://github.com/push-in/pam-native-canvas/tree/v0.1.0" }, "time": "2026-08-23T19:08:37+00:00" }, @@ -734,7 +724,7 @@ }, { "name": "pushinbr/pam-native-gpu", - "version": "dev-main", + "version": "v0.1.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-gpu.git", @@ -754,7 +744,6 @@ "phpstan/phpstan": "^2.1", "pushinbr/pam-native-plugin-kit": "^0.2.0" }, - "default-branch": true, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -766,18 +755,14 @@ "Pam\\Native\\Gpu\\": "src/" } }, - "scripts": { - "test": [ - "php tests/run.php" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Native Metal and OpenGL ES GPU surfaces for PAM Native.", "support": { - "source": "https://github.com/push-in/pam-native-gpu/tree/main", - "issues": "https://github.com/push-in/pam-native-gpu/issues" + "issues": "https://github.com/push-in/pam-native-gpu/issues", + "source": "https://github.com/push-in/pam-native-gpu/tree/v0.1.0" }, "time": "2026-08-23T19:02:18+00:00" }, @@ -986,7 +971,7 @@ }, { "name": "pushinbr/pam-native-media-editor", - "version": "dev-main", + "version": "v0.1.0", "source": { "type": "git", "url": "https://github.com/push-in/pam-native-media-editor.git", @@ -1006,7 +991,6 @@ "phpstan/phpstan": "^2.1", "pushinbr/pam-native-plugin-kit": "^0.2.0" }, - "default-branch": true, "type": "pam-native-plugin", "extra": { "pam-native": { @@ -1018,18 +1002,14 @@ "Pam\\Native\\MediaEditor\\": "src/" } }, - "scripts": { - "test": [ - "php tests/run.php" - ] - }, + "notification-url": "https://packagist.org/downloads/", "license": [ "Apache-2.0" ], "description": "Non-destructive native media timelines, effects and export for PAM Native.", "support": { - "source": "https://github.com/push-in/pam-native-media-editor/tree/main", - "issues": "https://github.com/push-in/pam-native-media-editor/issues" + "issues": "https://github.com/push-in/pam-native-media-editor/issues", + "source": "https://github.com/push-in/pam-native-media-editor/tree/v0.1.0" }, "time": "2026-08-23T18:56:08+00:00" }, @@ -1362,39 +1342,9 @@ } ], "packages-dev": [], - "aliases": [ - { - "package": "pushinbr/pam-native-3d", - "version": "dev-main", - "alias": "0.1.0", - "alias_normalized": "0.1.0.0" - }, - { - "package": "pushinbr/pam-native-canvas", - "version": "dev-main", - "alias": "0.1.0", - "alias_normalized": "0.1.0.0" - }, - { - "package": "pushinbr/pam-native-gpu", - "version": "dev-main", - "alias": "0.1.0", - "alias_normalized": "0.1.0.0" - }, - { - "package": "pushinbr/pam-native-media-editor", - "version": "dev-main", - "alias": "0.1.0", - "alias_normalized": "0.1.0.0" - } - ], + "aliases": [], "minimum-stability": "stable", - "stability-flags": { - "pushinbr/pam-native-3d": 20, - "pushinbr/pam-native-canvas": 20, - "pushinbr/pam-native-gpu": 20, - "pushinbr/pam-native-media-editor": 20 - }, + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { From 82eda13eadfb032996dcc36ae874439bf1dbfa32 Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 17:06:05 -0300 Subject: [PATCH 13/14] fix: build Linux CLI on portable glibc baseline --- .github/workflows/release.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7d06427..94b168b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -273,7 +273,9 @@ jobs: fail-fast: false matrix: include: - - runner: ubuntu-24.04 + # Build on the oldest supported glibc baseline so the published CLI + # runs on Ubuntu 22.04/Pop!_OS-era distributions as well as newer ones. + - runner: ubuntu-22.04 target: x86_64-unknown-linux-gnu platform: linux-x86_64 extension: '' From db1a8fa55dbb529111cdacb69726dbe4496c52ce Mon Sep 17 00:00:00 2001 From: davidbalbino Date: Sun, 23 Aug 2026 17:08:02 -0300 Subject: [PATCH 14/14] chore: prepare PAM Native 0.8.1 --- CHANGELOG.md | 8 ++++++++ Cargo.lock | 6 +++--- Cargo.toml | 2 +- packages/native/src/Protocol.php | 2 +- packages/native/tests/run.php | 4 ++-- 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 125cd06..2fb8d1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 0.8.1 - 2026-08-23 + +- Added production-grade camera, media editing, retained canvas, GPU shader and + 3D scene plugins to the independently installable official ecosystem. +- Certified every public plugin together in aggregate Android and iOS hosts. +- Build the Linux Native CLI on the Ubuntu 22.04 glibc baseline so published + binaries run on supported LTS and Pop!_OS-era distributions. + ## 0.8.0 - 2026-08-23 - Added opt-in PAM Native UI Language 2 with a stable, integer-capability UI IR. diff --git a/Cargo.lock b/Cargo.lock index d1a24e3..ef51165 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -76,7 +76,7 @@ checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98" [[package]] name = "pam-native-cli" -version = "0.8.0" +version = "0.8.1" dependencies = [ "serde", "serde_json", @@ -85,7 +85,7 @@ dependencies = [ [[package]] name = "pam-native-engine" -version = "0.8.0" +version = "0.8.1" dependencies = [ "pam-native-protocol", "ttf-parser", @@ -93,7 +93,7 @@ dependencies = [ [[package]] name = "pam-native-protocol" -version = "0.8.0" +version = "0.8.1" [[package]] name = "proc-macro2" diff --git a/Cargo.toml b/Cargo.toml index 8ea1d69..43551da 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ ] [workspace.package] -version = "0.8.0" +version = "0.8.1" edition = "2024" rust-version = "1.88" license = "Apache-2.0" diff --git a/packages/native/src/Protocol.php b/packages/native/src/Protocol.php index 14434f8..715603d 100644 --- a/packages/native/src/Protocol.php +++ b/packages/native/src/Protocol.php @@ -6,7 +6,7 @@ final class Protocol { - public const string SDK_VERSION = '0.8.0'; + public const string SDK_VERSION = '0.8.1'; public const int VERSION = 1; public const string TREE_MAGIC = 'PNT1'; public const string PATCH_MAGIC = 'PNP1'; diff --git a/packages/native/tests/run.php b/packages/native/tests/run.php index f4ef0f4..e136a36 100644 --- a/packages/native/tests/run.php +++ b/packages/native/tests/run.php @@ -6215,8 +6215,8 @@ static function () use (&$nestedStateEvents): void { 'Grouped drawer state must restore selection and expanded sections.', ); $assert( - \Pam\Native\Protocol::SDK_VERSION === '0.8.0', - 'The runtime SDK contract must match the 0.8.0 package release.', + \Pam\Native\Protocol::SDK_VERSION === '0.8.1', + 'The runtime SDK contract must match the 0.8.1 package release.', ); $imageEditorParameters = (new ReflectionMethod( \Pam\Native\System\ImageEditor::class,