Search by

puyu-pe / sipro-internal-api-laravel

PuyuPe

Laravel bridge package for the internal /internal/v1 API.

Package info

github.com/puyu-pe/sipro-internal-api-laravel

pkg:composer/puyu-pe/sipro-internal-api-laravel

Statistics

Installs: 62

Dependents: 0

Suggesters: 0

Stars: 1

Open Issues: 0

2.0.0 2026-10-12 23:09 UTC

README

Bridge para Laravel 12 / PHP >=8.2 con core ^2.0.0. Expone las diez operaciones de /internal/v1 con el mismo contrato que CI3: provisioning, cinco acciones de lifecycle, export/import, búsqueda de usuarios e impersonación.

Instalación y configuración

  1. Instalar puyu-pe/sipro-internal-api-laravel:^2.0.
  2. Publicar configuración con php artisan vendor:publish --tag=sipro-internal-api-laravel-config.
  3. Implementar las cuatro interfaces de core: TenantProvisioningAdapterInterface, TenantLifecycleAdapterInterface, TenantCloneAdapterInterface y TenantImpersonationAdapterInterface.
  4. Configurar sus clases en adapter.provisioning_class, lifecycle_class, clone_class e impersonation_class. Una clase puede implementar varias interfaces, pero cada capacidad se configura explícitamente.
  5. Configurar hmac.keys como mapa de key ID a secreto, por ejemplo:
'keys' => ['sipro-current' => env('SIPRO_INTERNAL_API_HMAC_SECRET')],

Autodiscovery registra el provider. No es necesario modificar bootstrap/app.php. La configuración se combina recursivamente con los valores predeterminados: la aplicación puede definir solo sus secretos/adaptadores sin repetir todos los ajustes anidados. Los valores explícitos, incluidos false y cero, se conservan. enabled=false devuelve 404 dentro del prefijo. Una capacidad sin adaptador válido produce 500 ADAPTER_NOT_CONFIGURED al resolverla.

HMAC y nonce

hmac.allowed_clock_skew_seconds configura realmente el verificador; valor predeterminado 300. La firma requiere los cuatro headers de core y utiliza el cuerpo y path exactos. Query strings y slash final se rechazan.

Para hmac.nonce.enabled=true, use hmac.nonce.cache_store con driver database, Redis o file y almacenamiento compartido por todos los workers. El store debe soportar reservas atómicas; array/null y otros drivers no verificados se rechazan. El TTL se deriva de la ventana temporal y la firma se comprueba antes de consumir el nonce. El header nonce sigue siendo obligatorio si la persistencia se desactiva.

Adaptadores

Las solicitudes y argumentos PHP utilizan resolveKey. Provisioning responde resolve_key dentro de su esquema snake_case; los demás DTOs responden resolveKey. Los errores son {ok:false,error:{code,message,details?}}.

use PuyuPe\SiproInternalApiCore\Errors\ErrorFactory;
use PuyuPe\SiproInternalApiCore\Errors\InternalApiException;

throw new InternalApiException(ErrorFactory::tenantNotFound($resolveKey));

Para clonado, la aplicación puede extender AbstractTenantCloneAdapter del paquete puyu-pe/sipro-internal-api-clone-db:^2.0. El bridge depende de la interfaz de core y permite otras implementaciones.

AbstractTenantProvisioningAdapter ofrece creación de DB, búsqueda de servicios, upsert de parámetros y usingDatabase($dbName, $operation) con restauración en finally. La aplicación define databasePrefix() cuando utiliza el generador predeterminado, o sobrescribe buildDatabaseName(). Los demás helpers no obligan a implementar esa política. Puede personalizar connectionName() y environmentSuffix().

Cambios incompatibles

  • Identidad canónica obligatoria; sin traducción de appKey ni parámetros legacy.
  • La excepción de adaptador pertenece a core: InternalApiException.
  • El controlador de transporte es invocable y delega en Core\Http\InternalApi; el antiguo middleware VerifyHmac y los métodos de controller por operación dejan de ser puntos de extensión.
  • Configurar cada capacidad; se elimina el fallback SIPRO_INTERNAL_API_ADAPTER_CLASS.
  • Nonce stores implementan consume, no has/put.
  • Duración efectiva predeterminada de impersonación: 5 minutos; límites 5–60, configurables mediante impersonation.duration.

Pruebas

composer test ejecuta Testbench y la matriz compartida de core. Para las pruebas de DB use SIPRO_TEST_DB_HOST apuntando a una MariaDB desechable. Para el round trip HTTP de clone-db, configure además SIPRO_CLONE_DB_ROOT con su checkout 2.0. El workspace coordinador automatiza el montaje y la resolución local de paquetes.

El bridge se verifica en PHP 8.2, 8.3 y 8.4 con Laravel 12. Estos requisitos cubren los entornos declarados de Yures y Yubus; el mínimo PHP 8.2 pertenece a Laravel 12. PHPUnit y Testbench son dependencias de desarrollo y no se imponen al consumidor. Después de actualizar una instalación con configuración cacheada, regenere su cache de configuración para incorporar los valores predeterminados de la versión 2.