endroid/google-api-bundle
Symfony bundle that integrates google/google-api-php-client into your app, letting you configure your application name and API key once and inject the ready-to-use client via the endroid.google_api_client service to access any Google API.
Architecture fit — reject on inspection. The request frames this as a Laravel/PHP package; the artefact is a Symfony bundle. Its integration contract is AppKernel::registerBundles() and YAML service configuration — the Symfony 2.x/3.x application model that was superseded by Symfony Flex. There is no service provider, no facade, no publishable config, no package-discovery entry, and no Laravel-facing API of any kind. Importing it into a Laravel application would mean hand-wiring a foreign container's assumptions into ours, which is strictly more work than using the underlying SDK directly. The bundle's entire functional contribution is registering google/google-api-php-client as a container service with two config values (application_name, api_key) — roughly 50–150 lines of dependency-injection sugar a mid-level Laravel developer reproduces in an afternoon.
Integration feasibility — effectively nil for new work; low only as a historical artefact. The package is archived, has 2 stars, 0 dependents, and a maturity rating of "readme" — no evidence of tests, CI, release discipline, or production use. The 0.02 score is consistent with something that should not enter a dependency graph. One further flag a TPM must escalate: the repository URL resolves to a personal account (abandroid/google-api-bundle) while the README credits endroid. An archived personal mirror of an abandoned bundle is a known supply-chain shape, and Composer installs whatever name it is published under. Even if byte-identical to upstream, the trust signal is negative and the provenance question must be answered before any code review occurs.
Technical risk — high and compounding across three independent axes. Abandonment: archived means no CVE response, no PHP 8 compatibility work, no Symfony 5/6 support, and no adaptation to Google API changes. Auth surface: every Google integration carries OAuth2 refresh-token handling, service-account key custody, and scope management — here that security-critical path is the part nobody has reviewed or patched in years, and the wrapper predates the google/apiclient rename and the current token/credential model. Version resolution: an old bundle's composer.json constraints (Symfony 2/3 components, hard PHP upper bounds, legacy PSR/Guzzle pins) will typically conflict with a modern Laravel lockfile, forcing unrelated downgrades elsewhere in the tree — a hidden cost that surfaces weeks later.
Key questions for the requester:
google/apiclient, laravel/socialite, a google-cloud-* library, or a thin HTTP client.Stack fit — none, and the deliverable is a replacement design, not a migration. No configuration exists under which this bundle is the correct dependency in a Laravel application. The correct framing for the ticket is "we need Google API access; here is the supported path," with the bundle recorded as evaluated-and-rejected so the same question does not resurface next quarter.
Recommended path (greenfield Laravel):
google/apiclient directly, or the specific google-cloud-* package when the workload is GCS/PubSub/FCM. Wrap it in an application-owned service class resolved from Laravel's container — one binding, one interface, one fake for tests.config/google.php reading credentials from environment or a secret manager. Never a committed JSON key. Enable config caching from day one so the binding is not re-resolved per request.laravel/socialite for the sign-in flow, refresh tokens persisted encrypted via an Eloquent model and refreshed on a schedule, not inline in request handlers.If we inherit a legacy Symfony system already running this bundle: pin the exact version, isolate it behind an application interface so call sites do not reference the bundle's service ID, add a smoke test that exercises a real API call (not a mock), and file a replacement ticket against the next planned upgrade rather than an emergency one. Do not fork it. MIT makes forking legally trivial, which is exactly why the decision should be about maintenance cost, not legal exposure — and the maintenance cost argues for scheduling replacement on normal cadence, not panic-migrating.
Sequencing: (1) confirm the requirement and auth model with the requester — one conversation, not a spike; (2) prototype the service-account or Socialite path in a day to validate quotas and credential flow; (3) land the provider, config, and interface before any feature work depends on it; (4) build the first consuming feature against the interface; (5) only then, if a legacy system exists, migrate its call sites behind the same interface so both paths converge.
Compatibility note: treat any attempt to install this alongside a current Laravel lockfile as a red flag. If composer require forces downgrades in Symfony components, Guzzle, or PHP constraints, stop — the blast radius extends well beyond the Google integration.
Maintenance — we own it entirely from day one. Zero upstream activity means no PHP version bumps, no security patches, no response to Google's API or credential-model changes. Practically: the dependency's half-life is bounded by the next PHP major or the next Google auth deprecation, whichever lands first. Budget the replacement as scheduled work, not as a surprise.
Support — there is no support surface. Documentation is a README. There is no issue tracker activity, no maintainer to escalate to, and no version history to reason about regressions from. Any incident debugs down to reading vendor source. For a TPM this means the on-call runbook must be written by us, and it must include the "pin and patch locally" procedure.
Scaling — the wrapper is not the bottleneck, but it hides the one that is. Throughput is governed by Google's per-project quotas and by the SDK's HTTP client behaviour, neither of which this bundle configures. There is no retry policy, no exponential backoff, no rate-limit awareness, no circuit breaking, and no structured logging — we would build all of it anyway, at which point the wrapper is pure overhead on top of work we cannot avoid.
Failure modes to plan for:
Ramp-up — deceptively small and then not. Learning the bundle takes minutes because there is nothing to learn; learning to run Google integrations safely — credential custody, scope minimisation, quota management, retry semantics, observability — is the actual onboarding cost and is incurred regardless of which library sits underneath. Do not let the bundle's simplicity argue for it. The honest estimate for the replacement path is roughly one engineer-day for the provider, config, and tests, plus the feature work that was always in scope.
Recommendation: no adoption. If a legacy system already depends on it, isolate, pin, and schedule replacement alongside the next planned upgrade. The build cost is measured in hours; the risk horizon is unbounded.
How can I help you explore Laravel packages today?