Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Coolrunner Bundle Laravel Package

setono/coolrunner-bundle

Symfony bundle that integrates the CoolRunner shipping API, letting your application create shipments, print labels, and track parcel deliveries. Provides ready-made services and configuration for connecting to CoolRunner from your Symfony app.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor as advertised, possibly salvageable. The package is a Symfony bundle (Setono\CoolRunnerBundle), not a Laravel package. It relies on Symfony's kernel, Bundle registration, DI extension, Configuration tree, tagged services, and event subscribers — none of which Laravel's container consumes natively. Laravel borrows Symfony components (HttpFoundation, Console, Routing) but has no bundle runtime, so the package cannot be composer required and booted in a Laravel app without an adapter layer.

Metadata integrity is the first red flag. The description reads "Use Google Analytics in your Symfony application," which does not match a repository named CoolRunnerBundle (CoolRunner is a Danish shipping/fulfillment API for parcel label creation, order capture, and tracking). This looks like a copy-paste error in the package registry entry, or a mis-tagged repo. A TPM should not size an integration until the actual scope — CoolRunner logistics API vs. GA — is confirmed. Zero stars, zero dependents, and a score of 0 reinforce that this is effectively unreviewed code.

Integration feasibility — moderate only via extraction. The viable path is to treat the bundle as a reference implementation: pull out the underlying HTTP client calls (likely a CoolRunner API client wrapped in Guzzle/PSR-18) and re-implement them behind a Laravel service provider and facade. Do not attempt to boot the bundle. Feasibility depends on whether the bundle delegates to a standalone SDK (setono/coolrunner-php-sdk or similar) that is framework-agnostic — if so, integration cost is low. If the HTTP logic is inlined in Symfony services, expect to reimplement auth, pagination, error mapping, and DTO hydration by hand.

Technical risk — high. Single-maintainer Setono package, no dependents, no visible community validation, last release March 2024. Undocumented API version support, unknown retry/idempotency behavior on shipment creation (a money-losing failure mode if labels are double-created), no Laravel test coverage. Adopting this as a dependency transfers upstream abandonment risk onto your fulfillment path.

Key questions to resolve before committing:

  1. What does this package actually do — CoolRunner logistics or Google Analytics? Confirm against the repo, not the registry description.
  2. Is there a framework-agnostic CoolRunner SDK underneath that we can depend on directly?
  3. Which CoolRunner API version does it target, and is that version current?
  4. Does it support sandbox/test credentials for pre-production validation?
  5. What is the auth model (API key, OAuth, per-merchant tokens) and does it support multi-tenant credential storage?
  6. Are shipment creation calls idempotent / do they accept client-supplied references?
  7. Is there any test suite, and what is the maintainer's responsiveness on issues?
  8. Does it handle webhooks (tracking updates, status changes), and is signature verification implemented?

Integration Approach

Stack fit. Direct composer require into a Laravel app is a non-starter. Three options, in order of preference:

  1. Direct SDK dependency (preferred). If setono/coolrunner-* exposes a PSR-18-based client, depend on that instead. Bind it in a CoolRunnerServiceProvider, resolve credentials from config/services.php and .env, expose a thin CoolRunner facade, and wrap responses in Laravel-native DTOs or JsonResource objects.
  2. Adapter over bundle internals. Instantiate the bundle's service classes manually in a provider, stubbing the Symfony ContainerInterface/EventDispatcherInterface where required. Workable but brittle — internal constructors are not a public API contract.
  3. Sidecar / microservice. Run a minimal Symfony app hosting the bundle, expose it over HTTP, and call from Laravel via Http:: client. Highest operational overhead; only justified if the bundle contains substantial business logic you cannot replicate.

Reject laravel-symfony-bundle-style bridge packages for a zero-adoption dependency; the bridge adds more risk than the bundle.

Migration path. Treat the bundle as a specification, not a dependency. Read the service definitions and DTOs, port them to Eloquent models and Laravel jobs, and write contract tests against CoolRunner's sandbox. Budget 3–5 engineering days for a thin surface (create shipment, get label, track parcel) if a clean SDK exists; 10–15 days if you are reverse-engineering HTTP calls from Symfony services.

Compatibility. PHP version constraints and Symfony component versions (symfony/http-client, symfony/serializer) must be reconciled with your Laravel version's locked Symfony component versions — version conflicts are likely and will force composer constraint juggling if you attempt option 2.

Sequencing.

  1. Due diligence on repo contents and actual API scope (0.5 day).
  2. Sandbox credential provisioning with CoolRunner and a manual API smoke test (1 day).
  3. Decide SDK-direct vs. adapter vs. rebuild (go/no-go gate).
  4. Build provider + facade + DTO layer behind an interface (ShippingProvider) so CoolRunner is swappable.
  5. Implement shipment creation with idempotency keys, then tracking/webhook ingestion.
  6. Contract + integration tests against sandbox before production credentials.

Design the abstraction first — the biggest risk here is coupling your order fulfillment flow to an unmaintained third-party package shape.

Operational Impact

Maintenance. You own it. With zero dependents and a single maintainer, upstream fixes for CoolRunner API changes will arrive slowly or not at all. Assume you will fork or vendor the relevant client code within 12 months. Budget ~0.1 FTE ongoing for dependency tracking plus reactive work on API version bumps.

Support. No commercial support, no SLA, no meaningful issue history to gauge response times. Escalation path is the maintainer's GitHub issues — unacceptable as the sole support channel for a revenue-touching fulfillment integration. Pair with a direct CoolRunner account/support relationship covering API changes, deprecations, and outage notifications.

Scaling. Shipping API calls are low-volume relative to storefront traffic (order-rate, not request-rate), so throughput is unlikely to be the constraint. Real scaling concerns are: (a) queue your label creation via Laravel jobs with exponential backoff so CoolRunner latency or rate limits never block checkout; (b) enforce per-merchant rate limiting if multi-tenant; (c) store labels (PDFs) in object storage rather than fetching on demand — CoolRunner may not guarantee permanent label URLs.

Failure modes to design for.

  • Duplicate label creation — the expensive failure. Require client-supplied order references or idempotency keys; never blind-retry a POST /shipments.
  • Credential expiry/rotation — surface as a distinguishable exception and alert, not a generic 500 in the order pipeline.
  • Partial failures — order captured but label creation failed. Model this as an explicit state on your order record with a reconciliation job, not a silent rollback.
  • Webhook loss or replay — implement signature verification, idempotent handlers, and a polling reconciliation job for stale shipments.
  • Silent schema drift — CoolRunner adds fields or changes enums; without contract tests, DTO hydration breaks quietly. Add a scheduled smoke test against sandbox.
  • Package abandonment — mitigate by vendoring the client code under your namespace with license attribution (MIT permits this) rather than depending on Packagist.

Ramp-up. Low learning curve for the domain (shipping labels are well-understood), but the package itself offers no documentation advantage — engineers will read source. Allocate 1–2 days for a developer unfamiliar with CoolRunner to ramp on the API; add 1 day if they must also untangle Symfony DI internals.

Recommendation. Do not adopt this package as a runtime dependency. Confirm its actual scope first — the GA description mismatch alone disqualifies it from blind adoption. If a clean, framework-agnostic CoolRunner SDK exists underneath, depend on that directly and wrap it in a Laravel provider behind a ShippingProvider interface. If not, treat this bundle as a reference implementation and rebuild the thin client in-house. Either way, isolate the integration behind your own abstraction so an unmaintained dependency is a swap, not a migration.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib