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

Adobe Campaign Client Bundle Laravel Package

lafourchette/adobe-campaign-client-bundle

Symfony bundle that integrates the Adobe Campaign client into your application, providing configuration and services for connecting to and interacting with Adobe Campaign APIs.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — primary finding: this is not a Laravel package. The name is literal: adobe-campaign-client-bundle is a Symfony bundle, published by Lafourchette (Accor group). Bundles integrate through Symfony's DependencyInjection component — an Extension class for semantic config, services.yaml/XML definitions, autowiring, and event dispatcher hooks. Laravel's container is a different implementation with different autowiring semantics and no bundle registration concept. Consequences:

  • composer require will succeed, but nothing auto-registers. There is no ServiceProvider, no publishable config, no facade.
  • The package will pull symfony/dependency-injection and symfony/config into the dependency graph even though Laravel doesn't use them for bootstrapping — dead weight unless manually driven.
  • Realistically the value is the client code underneath the bundle layer (SOAP transport, session/auth handling, query and delivery calls against Adobe Campaign's xtk schema), not the bundle wiring.

Integration feasibility: medium-low, but not blocking. The extraction path is well understood: fork the repo, keep the client/transport classes, discard the DependencyInjection/ and Resources/config/ directories, and write a thin Laravel ServiceProvider plus a config/adobe-campaign.php. That yields a package you own. The alternative — a Symfony-bundle-to-Laravel bridge package — is a hard no for a production marketing integration; it adds an unmaintained shim between two frameworks for no benefit.

Technical risk — mostly supply chain, not code.

  • Zero social proof. 0 stars, 0 dependents, score 0. No community validation, no external bug reports, no evidence of CI, test coverage, or a security disclosure channel. Assume you are the only consumer.
  • Single-vendor, low bus factor. Published as a byproduct of an internal Accor integration. Version bumps likely track their own needs; PHP 8.2/8.3 compatibility and PSR-18/PSR-7 modernization are not guaranteed.
  • Protocol risk. Adobe Campaign's classic API is SOAP with session-token auth (xtk:session logon, token passed on every subsequent call). It works, but it is legacy; Adobe's roadmap steers toward Campaign v8 / ACC cloud with different surfaces. The ext-soap requirement is a hard hosting constraint and generates noisy deprecations on modern PHP.
  • Testability. The client is coupled to live SOAP endpoints. Unit-mocking the xtk schema is painful; confident integration tests require a non-production Campaign instance, which is often gated behind Adobe partner/support entitlement.

Key questions before any commitment

  1. Which Adobe Campaign deployment (v7 on-prem, v8 hybrid, ACC) and which API version does this client target? Does our instance expose the same endpoint and schema?
  2. Is ext-soap available and permitted in our runtime (containers, platform limits, security policy)?
  3. Who owns the fork? Do we have budget for one engineer to own it for the life of the integration?
  4. Do we hold Adobe support entitlement or partner docs access to debug API-level errors?
  5. What is our exit strategy if Adobe deprecates this API surface — is the client isolated behind an interface so the transport can be swapped?
  6. What is the actual scope — campaign sends, query/audience extraction, or workflow triggers? Different scopes carry very different risk profiles.

Integration Approach

Stack fit. Laravel 10/11 already ships several Symfony components (console, http-foundation, process), but not the DI Extension/bundle machinery this package relies on. Treat the package as a source library to vendor, not a dependency to install-and-go.

Recommended path — fork-and-adapter, in sequence:

  1. Fork and pin. Fork to our org, pin to a specific commit SHA, tag an internal release. Add composer.json metadata for our PHP constraint and run static analysis (PHPStan) to surface PHP 8.x breakage immediately.
  2. Strip the bundle layer. Remove DependencyInjection/, Resources/config/, and any Symfony event subscriber wiring. Keep the client, DTOs, and exception types.
  3. Write a ServiceProvider. Register the client as a singleton with config injected from config/adobe-campaign.php, reading credentials from env/secret manager. Publish the config with sane defaults (endpoint, login, password, session TTL, timeout).
  4. Abstract behind our own interface. Define AdobeCampaignClient in our domain layer with only the methods we actually use. The package becomes one implementation. This is the single highest-value decision — it caps the blast radius of abandonment and gives a clean swap path to a REST-based client later.
  5. Contract tests. Record SOAP request/response fixtures from a sandbox instance; assert against those in CI. Don't try to mock the transport abstractly — fixture-based is cheaper and catches schema drift.

Compatibility checks to run in week one: composer.json PHP and symfony/* version constraints, ext-soap presence, Guzzle/HTTP client version alignment with Laravel's existing dependencies, and any mcrypt or other removed-extension references in older SOAP tooling.

Sequencing to first production call. Proof of concept against non-production (~1 sprint) → interface + provider + config (~3 days) → queue integration and error taxonomy (~1 sprint) → load test with realistic audience sizes → cutover behind a feature flag. Do not parallelize the POC with the abstraction work; the POC tells you whether the client is even viable against your instance version.

Operational Impact

Maintenance — you own it outright. With no upstream maintenance and no dependents, there is no upgrade path and no one to escalate to. Budget explicitly: one engineer maintaining the fork, dependency updates reviewed quarterly, and a documented upgrade procedure for major PHP versions. The mitigating factor is that SOAP against a stable vendor API has a shallow dependency tree — ext-soap does most of the work — so the ongoing surface is smaller than a typical Guzzle-based package.

Support. No README-level operational guidance, no issue activity, no security contact. Adobe Campaign errors surface as opaque SOAP faults; without Adobe support entitlement or partner documentation access, debugging stalls at the API boundary. Confirm entitlement before the POC, not after — it is a genuine gating item, not a formality.

Scaling. The binding constraints are on the Campaign side, not the Laravel side:

  • Session tokens expire and are per-instance. Implement refresh-on-fault and never share a token across concurrent workers without a lock.
  • Concurrency limits are enforced by Campaign instances; assume aggressive rate limits and design for it.
  • Long-running queries are expensive and can time out server-side. Run all sends and extractions through queued jobs (Horizon), with chunked batches and idempotency keys so retries don't double-send.
  • Payload memory — large queryDef results serialize fully into memory. Stream or paginate at the domain layer.

Failure modes to design for explicitly:

Failure Detection Mitigation
Session expiry mid-batch SOAP auth fault Re-logon + resume at checkpoint
Throttling / 429-equivalent Fault codes Exponential backoff, per-instance rate limiter
Partial success in bulk send Per-record response codes Idempotency keys, reconciliation job
Schema drift after Campaign upgrade Fixture contract tests in CI Pin and retest on every AC upgrade
Credential rotation Auth faults Secret manager + zero-downtime reload
Silent send failures Absent delivery logs Reconcile against Campaign delivery status API

The last row is the one that burns marketing teams: a batch that returns success but doesn't deliver. Build a reconciliation job before go-live, not after the first incident.

Ramp-up. Expect 1–2 weeks for a competent Laravel engineer to become productive, dominated by Adobe Campaign's xtk schema rather than by the package itself. Add onboarding docs to the fork — the original repo has none, and the knowledge will otherwise live in one person's head.

Recommendation. Feasible, but only as a vendor-and-own exercise behind a first-party interface. The abandonment signals (0 stars, 0 dependents, zero support surface) are the dominant risk, not the code quality. If our Campaign scope is send-side only and small, a direct POC of the extracted client is worth one sprint. If the integration is strategic or long-lived, budget for replacing the SOAP client within 18–24 months as Adobe's roadmap moves away from this API surface.

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.
oxygen/auth
relicsoftware/barakah-payment-gateway
tobya/work-with-composer
equipc/laravel-email-validator
equipc/laravel-email-database-log
adedsec/nova-translated-labels
wazza/laravel-db-encryption
hokny/laravel-generator
vonsogt/backup
jengo/queues
jeremykenedy/laravel-observability
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names