mpp/apicil-client-bundle
MPP Apicil Client Bundle integrates the Apicil API client into Symfony applications, offering service configuration, dependency injection, and a convenient setup for connecting PHP projects to Apicil services.
Architecture fit. Unchanged. The -bundle suffix still points to a Symfony bundle (DI extension, service definitions, configuration tree) rather than a Laravel package; there is still no evidence of a service provider, facade, or publishable config. The integration shape remains: consume the framework-agnostic core client if it exists, wrap it in an adapter, and keep Apicil types out of your domain. What the release does confirm is scope: an "arbitrage" is a contractual operation on a policy (reallocating/switch of investment supports on a life-insurance or capitalisation contract), not a read. The package therefore exposes write/transactional endpoints, which raises the architectural bar — the adapter now needs idempotency, confirmation, and audit semantics, not just HTTP plumbing.
Integration feasibility. Still gated by partner access, not code. The release adds one useful data point for diligence: the write path was broken and is only now fixed in a patch version, which suggests thin end-to-end coverage of at least the arbitrage flow. Verify (a) composer require bounds for PHP/Symfony/PSR versions, (b) PSR-18 compliance versus a hard-coded Symfony HttpClient, (c) the auth model (OAuth2 client credentials, API key, mTLS), (d) whether arbitrage creation is idempotent or exposes a client-supplied reference, and (e) what else is covered beyond arbitrage — a single documented write fix implies the surrounding surface may be broader but unevenly exercised.
Technical risk. Still very high on supply-chain grounds: 0 stars, 0 dependents, a score of 0.03, single originating organization (Mon Petit Placement). The release is a mild positive: a merged community PR (#51), a patch-version bump, and evidence of an active repository with a non-trivial PR history (~50 PRs). That demonstrates the maintainer still touches the code, but it is not a support commitment, SLA, or adoption signal — bus-factor-one still stands. It does partially answer one previously open question: the project appears to follow patch-level semantic versioning, which reduces the odds of silent breaking changes arriving in a 3.3.x bump. Test coverage, CI status, changelog, and security posture remain unproven.
Key questions.
Stack fit. Unchanged. Treat it as a third-party SDK in Laravel: bind as a singleton in a service provider, configure via config/services.php and .env, expose only through your own ApicilGateway interface. With a write operation now in scope, the interface should model the arbitrage as a domain command with an explicit result/status object — never let an Apicil DTO or Symfony exception cross the boundary.
Migration path. Still greenfield with no incumbent. The release reinforces the reversibility argument: a bug in the write client was fixed only in 3.3.2, so the cost of being wrong about this dependency is now higher than a read-only integration would imply. Keep the package confined to a single adapter directory and keep the arbitrage business rules (eligibility, limits, effective dates) in your own layer, not in the vendor call site.
Compatibility. Pin to 3.3.2 or later within 3.3.x; do not float. Audit transitive constraints against your PHP version, Symfony components, and PSR-18/PSR-7/PSR-17 implementations, and watch for a Symfony major constraint that clashes with the rest of your tree. Do a throwaway composer require on a scratch branch and inspect the resolved lockfile. Because a patch release changed behavior on a write path, treat every bump as potentially behavior-changing despite the version number and re-run the arbitrage scenario against the sandbox.
Sequencing.
Maintenance. Assume you own it. The release shows upstream is not dead, which improves the odds of occasional fixes but does not constitute a schedule you can plan against. Keep a fork or VCS pin, assign a named owner, and monitor upstream releases opportunistically. Log 3.3.2 in your dependency ledger with a note that it changes arbitrage behavior, so a future bisect lands quickly.
Support. No SLA. Escalation is to Mon Petit Placement maintainers (responsiveness for external users unknown, though PR #51 suggests review does happen) and, more practically, to your Apicil partner for API-side issues. Documentation is likely thin; expect to reverse-engineer the arbitrage contract from the code plus Apicil's own specs.
Scaling. Bounded by Apicil rate limits and quotas, not this package. Cache reference data, queue arbitrage submissions where latency is tolerable, and centralize rate limiting and backoff in the adapter. A write path makes throughput more consequential: bursts now consume quota on non-idempotent operations, so enforce a client-side concurrency cap per policy.
Failure modes.
Ramp-up. Still days of code reading, but the write path raises the domain bar: whoever implements arbitrage must understand Apicil's contract and support-allocation model, effective-date rules, and the eligibility constraints that sit upstream of the API. Allocate a discovery spike that explicitly includes a sandbox arbitrage run, and involve legal/compliance early — health and insurance data means GDPR, data residency, and DPA obligations apply regardless of the package's merits, and executing contractual movements makes auditability and record-keeping non-negotiable.
How can I help you explore Laravel packages today?