puyu-pe / sipro-internal-api-laravel
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
Requires
- php: >=8.2
- illuminate/cache: ^12.0
- illuminate/database: ^12.0
- illuminate/http: ^12.0
- illuminate/routing: ^12.0
- illuminate/support: ^12.0
- puyu-pe/sipro-internal-api-core: ^2.0.0
Requires (Dev)
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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
- Instalar
puyu-pe/sipro-internal-api-laravel:^2.0. - Publicar configuración con
php artisan vendor:publish --tag=sipro-internal-api-laravel-config. - Implementar las cuatro interfaces de core:
TenantProvisioningAdapterInterface,TenantLifecycleAdapterInterface,TenantCloneAdapterInterfaceyTenantImpersonationAdapterInterface. - Configurar sus clases en
adapter.provisioning_class,lifecycle_class,clone_classeimpersonation_class. Una clase puede implementar varias interfaces, pero cada capacidad se configura explícitamente. - Configurar
hmac.keyscomo 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
appKeyni 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 middlewareVerifyHmacy 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, nohas/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.