PHPackages                             azaharizaman/nexus-procurement-operations - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. azaharizaman/nexus-procurement-operations

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

azaharizaman/nexus-procurement-operations
=========================================

Nexus ProcurementOperations Orchestrator - Cross-package workflow coordination for Procure-to-Pay (P2P) processes

v0.1.0-alpha1(2mo ago)02MITPHPPHP ^8.3

Since May 5Pushed 2mo agoCompare

[ Source](https://github.com/azaharizaman/nexus-procurement-operations)[ Packagist](https://packagist.org/packages/azaharizaman/nexus-procurement-operations)[ RSS](/packages/azaharizaman-nexus-procurement-operations/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (18)Versions (2)Used By (0)

Nexus ProcurementOperations Orchestrator
========================================

[](#nexus-procurementoperations-orchestrator)

**Package:** `azaharizaman/nexus-procurement-operations`
**Namespace:** `Nexus\ProcurementOperations`
**Type:** Orchestrator (Pure PHP)
**Version:** 2.0.0-phase-c

---

Overview
--------

[](#overview)

The `ProcurementOperations` orchestrator coordinates the complete **Procure-to-Pay (P2P)** cycle across multiple atomic Nexus packages. It provides enterprise-grade procurement capabilities with full **SOX 404 compliance** support.

### Core Capabilities

[](#core-capabilities)

1. **Requisition Workflow** - Create, validate, approve/reject purchase requisitions
2. **Purchase Order Workflow** - Convert requisitions to POs, manage amendments and blanket POs
3. **Goods Receipt Workflow** - Record partial/full receipts, quality inspection integration
4. **Three-Way Matching** - Match PO ↔ GR ↔ Invoice with configurable tolerances
5. **Payment Processing** - Schedule, batch, and execute vendor payments with early payment discounts
6. **SOX 404 Compliance** - Full compliance framework with control testing and evidence management
7. **Vendor Portal** - Self-service vendor registration, onboarding, and performance management
8. **Spend Analytics** - Real-time spend analysis, policy compliance, and maverick detection
9. **Multi-Entity Operations** - Shared services center and intercompany procurement
10. **Document Retention** - Regulatory-compliant document lifecycle management

---

⚠️ Stability &amp; Compatibility Notice
---------------------------------------

[](#️-stability--compatibility-notice)

**Pre-Production Status:** This orchestrator is under active development and has **not yet reached production state**. As such:

- **Breaking changes may occur** between minor versions without deprecation notices
- **API signatures may change** as the design evolves based on real-world usage
- **Backward compatibility is not guaranteed** until v1.0.0 stable release
- Some dependencies (e.g., `CryptoManagerInterface` in `HashingService`) are **mandatory** rather than optional, as they are core to the service's functionality

Please pin to specific versions in non-production environments and review the [CHANGELOG](CHANGELOG.md) before upgrading.

---

Architecture
------------

[](#architecture)

This orchestrator follows the **Advanced Orchestrator Pattern v1.1** with strict component separation:

```
src/
├── Contracts/        # 28 interfaces for coordinators, services, and workflows
├── Coordinators/     # 12 stateless traffic cops
├── DataProviders/    # 8 cross-package data aggregation providers
├── DTOs/             # 90+ data transfer objects organized by domain
│   ├── Audit/        # Audit and retention DTOs
│   ├── Financial/    # Payment, matching, invoicing DTOs
│   ├── MultiEntity/  # Shared services and intercompany DTOs
│   ├── Sox/          # SOX 404 compliance DTOs
│   ├── SpendPolicy/  # Spend analysis and policy DTOs
│   └── Vendor/       # Vendor portal and onboarding DTOs
├── Enums/            # 22 domain enums
├── Events/           # 30+ domain events
├── Exceptions/       # Domain-specific error scenarios
├── Listeners/        # 15 event reactors
├── Rules/            # 25 business constraint validators
├── Services/         # 25+ pure calculation/formatting services
└── Workflows/        # 8 stateful long-running processes (Sagas)

```

### Component Count Summary

[](#component-count-summary)

Component TypeCountDescriptionContracts28Interface definitionsDTOs90+Data transfer objectsEnums22Type-safe enumerationsEvents30+Domain eventsServices25+Business logic servicesRules25Validation rulesCoordinators12Flow orchestratorsDataProviders8Data aggregationWorkflows8Stateful processesListeners15Event handlers**Total****~250+**Production-ready components---

Package Dependencies
--------------------

[](#package-dependencies)

PackagePurpose`Nexus\Procurement`Requisition, PO, Goods Receipt management`Nexus\Payable`Vendor bills, invoice matching, payments`Nexus\Inventory`Stock receipt and management`Nexus\JournalEntry`GL posting for accruals and payments`Nexus\Budget`Budget commitment and release`Nexus\Workflow`Approval workflows`Nexus\Party`Vendor management`Nexus\Period`Fiscal period validation`Nexus\Currency`Multi-currency support`Nexus\Tax`Tax calculation and withholding`Nexus\Notifier`Notifications`Nexus\AuditLogger`Audit trail`Nexus\MachineLearning`Anomaly detection`Nexus\Connector`External integrations`Nexus\Setting`Configuration---

Quick Start
-----------

[](#quick-start)

### 1. Requisition Workflow

[](#1-requisition-workflow)

```
use Nexus\ProcurementOperations\Coordinators\RequisitionCoordinator;
use Nexus\ProcurementOperations\DTOs\CreateRequisitionRequest;

$coordinator = $container->get(RequisitionCoordinator::class);

$result = $coordinator->create(new CreateRequisitionRequest(
    tenantId: 'tenant-123',
    requestedBy: 'user-456',
    departmentId: 'dept-789',
    lineItems: [
        [
            'productId' => 'prod-001',
            'description' => 'Office Supplies',
            'quantity' => 100,
            'estimatedUnitPriceCents' => 1500,
            'uom' => 'EA',
        ],
    ],
    justification: 'Monthly office supplies replenishment',
));

if ($result->success) {
    echo "Requisition created: {$result->requisitionId}";
}
```

### 2. Three-Way Matching

[](#2-three-way-matching)

```
use Nexus\ProcurementOperations\Coordinators\InvoiceMatchingCoordinator;
use Nexus\ProcurementOperations\DTOs\MatchInvoiceRequest;

$coordinator = $container->get(InvoiceMatchingCoordinator::class);

$result = $coordinator->match(new MatchInvoiceRequest(
    tenantId: 'tenant-123',
    vendorBillId: 'bill-001',
    purchaseOrderId: 'po-001',
    goodsReceiptIds: ['gr-001', 'gr-002'],
    performedBy: 'user-456',
));

if ($result->matched) {
    echo "Invoice matched successfully!";
} else {
    echo "Match failed: {$result->failureReason}";
    print_r($result->variances);
}
```

### 3. Payment Processing with Early Payment Discount

[](#3-payment-processing-with-early-payment-discount)

```
use Nexus\ProcurementOperations\Coordinators\PaymentProcessingCoordinator;
use Nexus\ProcurementOperations\DTOs\Financial\ProcessPaymentRequest;

$coordinator = $container->get(PaymentProcessingCoordinator::class);

$result = $coordinator->process(new ProcessPaymentRequest(
    tenantId: 'tenant-123',
    vendorBillIds: ['bill-001', 'bill-002'],
    paymentMethod: 'ACH',
    bankAccountId: 'bank-001',
    scheduledDate: new \DateTimeImmutable('+3 days'),
    processedBy: 'user-456',
    captureEarlyPaymentDiscount: true,
));

if ($result->success) {
    echo "Payment scheduled: {$result->paymentReference}";
    echo "Discount captured: {$result->discountCaptured->format()}";
}
```

### 4. SOX 404 Compliance Validation

[](#4-sox-404-compliance-validation)

```
use Nexus\ProcurementOperations\Coordinators\SoxComplianceCoordinator;
use Nexus\ProcurementOperations\DTOs\Sox\SoxComplianceRequest;

$coordinator = $container->get(SoxComplianceCoordinator::class);

$result = $coordinator->validateCompliance(new SoxComplianceRequest(
    tenantId: 'tenant-123',
    period: '2024-Q4',
    controlAreas: ['PROCUREMENT', 'PAYMENTS', 'VENDOR_MANAGEMENT'],
    includeEvidencePackage: true,
));

if ($result->isCompliant) {
    echo "SOX 404 Compliant - Score: {$result->complianceScore}%";
} else {
    foreach ($result->findings as $finding) {
        echo "{$finding->severity}: {$finding->description}";
    }
}
```

### 5. Vendor Onboarding

[](#5-vendor-onboarding)

```
use Nexus\ProcurementOperations\Workflows\VendorOnboardingWorkflow;
use Nexus\ProcurementOperations\DTOs\Vendor\VendorOnboardingRequest;

$workflow = $container->get(VendorOnboardingWorkflow::class);

$result = $workflow->start(new VendorOnboardingRequest(
    tenantId: 'tenant-123',
    vendorName: 'Acme Supplies Ltd',
    registrationNumber: 'REG-12345',
    taxId: 'TAX-67890',
    primaryContact: [
        'name' => 'John Smith',
        'email' => 'john@acme.com',
        'phone' => '+1-555-0100',
    ],
    bankDetails: [
        'bankName' => 'First National Bank',
        'accountNumber' => '****1234',
        'routingNumber' => '021000021',
    ],
    complianceCertifications: ['ISO9001', 'SOC2'],
));

echo "Onboarding workflow started: {$result->workflowId}";
echo "Status: {$result->status->value}"; // PENDING_VERIFICATION
```

### 6. Spend Analytics

[](#6-spend-analytics)

```
use Nexus\ProcurementOperations\Coordinators\SpendAnalyticsCoordinator;
use Nexus\ProcurementOperations\DTOs\SpendPolicy\SpendAnalysisRequest;

$coordinator = $container->get(SpendAnalyticsCoordinator::class);

$result = $coordinator->analyze(new SpendAnalysisRequest(
    tenantId: 'tenant-123',
    periodStart: new \DateTimeImmutable('2024-01-01'),
    periodEnd: new \DateTimeImmutable('2024-12-31'),
    dimensions: ['category', 'vendor', 'department'],
    includeMaverickAnalysis: true,
));

echo "Total Spend: {$result->totalSpend->format()}";
echo "Contract Compliance: {$result->contractComplianceRate}%";
echo "Maverick Spend: {$result->maverickSpend->format()} ({$result->maverickRate}%)";
```

### 7. Multi-Entity Shared Services

[](#7-multi-entity-shared-services)

```
use Nexus\ProcurementOperations\Services\SharedServicesCenter;
use Nexus\ProcurementOperations\DTOs\MultiEntity\SharedProcurementRequest;

$sharedServices = $container->get(SharedServicesCenter::class);

$result = $sharedServices->processRequest(new SharedProcurementRequest(
    requestingEntityId: 'entity-001',
    serviceType: 'PROCUREMENT',
    items: [
        ['productId' => 'prod-001', 'quantity' => 1000],
    ],
    deliveryEntities: ['entity-001', 'entity-002'],
));

echo "Shared request ID: {$result->requestId}";
echo "Allocated to entities: " . implode(', ', $result->allocations);
```

---

SOX 404 Compliance Framework
----------------------------

[](#sox-404-compliance-framework)

### COSO Framework Mapping

[](#coso-framework-mapping)

The orchestrator maps all controls to COSO framework components:

COSO ComponentControl AreasControl EnvironmentVendor Management, User AccessRisk AssessmentBudget Control, Spend PoliciesControl ActivitiesApprovals, Matching, Segregation of DutiesInformation &amp; CommunicationAudit Trail, NotificationsMonitoring ActivitiesControl Testing, Analytics### Control Testing

[](#control-testing)

```
use Nexus\ProcurementOperations\Services\ControlTestingService;
use Nexus\ProcurementOperations\DTOs\Sox\ControlTestRequest;

$testingService = $container->get(ControlTestingService::class);

$result = $testingService->executeTest(new ControlTestRequest(
    tenantId: 'tenant-123',
    controlId: 'CTRL-PR-001',
    testingPeriod: '2024-Q4',
    sampleSize: 25, // PCAOB standard
    testProcedures: ['vouching', 'recalculation', 'observation'],
));

if ($result->isEffective) {
    echo "Control is operating effectively";
    echo "Exceptions: {$result->exceptionCount}/{$result->sampleSize}";
} else {
    echo "Control deficiency detected: {$result->deficiencyType}";
}
```

### Evidence Package Generation

[](#evidence-package-generation)

```
use Nexus\ProcurementOperations\Services\Sox404EvidenceService;
use Nexus\ProcurementOperations\DTOs\Sox\EvidencePackageRequest;

$evidenceService = $container->get(Sox404EvidenceService::class);

$package = $evidenceService->generatePackage(new EvidencePackageRequest(
    tenantId: 'tenant-123',
    auditPeriod: '2024',
    controlAreas: ['ALL'],
    format: 'PDF',
));

echo "Evidence package generated: {$package->packageId}";
echo "Total documents: {$package->documentCount}";
echo "Ready for external audit: " . ($package->isComplete ? 'Yes' : 'No');
```

---

Segregation of Duties (SoD)
---------------------------

[](#segregation-of-duties-sod)

### Enforced Conflicts

[](#enforced-conflicts)

Duty 1Duty 2Conflict TypeCreate RequisitionApprove RequisitionSame person cannot approve their own requestCreate POApprove POSame person cannot approve their own POReceive GoodsApprove InvoicePrevents collusionCreate VendorApprove VendorPrevents ghost vendorsProcess PaymentApprove PaymentPrevents unauthorized payments### SoD Validation

[](#sod-validation)

```
use Nexus\ProcurementOperations\Rules\SegregationOfDutiesRule;
use Nexus\ProcurementOperations\DTOs\Sox\SodCheckRequest;

$sodRule = $container->get(SegregationOfDutiesRule::class);

$result = $sodRule->validate(new SodCheckRequest(
    userId: 'user-123',
    action: 'APPROVE_PAYMENT',
    relatedActions: [
        ['action' => 'CREATE_INVOICE', 'performedBy' => 'user-123'],
    ],
));

if (!$result->passed) {
    throw new SodViolationException($result->conflictDetails);
}
```

---

Document Retention
------------------

[](#document-retention)

### Retention Categories

[](#retention-categories)

CategoryRetention PeriodDisposal MethodSOX Financial Data7 yearsSecure ShredTax Records7 yearsSecure DeletionVendor Contracts7 years post-expiryArchivePurchase Orders7 yearsArchiveInvoices7 yearsArchiveGoods Receipts7 yearsArchiveVendor Correspondence3 yearsStandardRFQ/RFP Documents5 yearsArchive### Legal Hold Management

[](#legal-hold-management)

```
use Nexus\ProcurementOperations\Services\DocumentRetentionService;
use Nexus\ProcurementOperations\DTOs\Audit\LegalHoldRequest;

$retentionService = $container->get(DocumentRetentionService::class);

// Place documents on legal hold
$holdResult = $retentionService->placeLegalHold(new LegalHoldRequest(
    tenantId: 'tenant-123',
    matterReference: 'Litigation #2024-001',
    documentTypes: ['VENDOR_CONTRACTS', 'PURCHASE_ORDERS'],
    vendorIds: ['vendor-456'],
    initiatedBy: 'legal-counsel',
    reason: 'Ongoing vendor dispute litigation',
));

echo "Legal hold placed: {$holdResult->holdId}";
echo "Documents affected: {$holdResult->documentCount}";
```

---

Compliance Services (Phase B)
-----------------------------

[](#compliance-services-phase-b)

### ApprovalLimitsManager

[](#approvallimitsmanager)

Manages configurable approval thresholds by role, department, and user.

```
use Nexus\ProcurementOperations\Services\Approval\ApprovalLimitsManager;
use Nexus\ProcurementOperations\DTOs\ApprovalLimitCheckRequest;

$manager = $container->get(ApprovalLimitsManager::class);

// Check if user can approve a requisition
$result = $manager->checkApprovalLimit(new ApprovalLimitCheckRequest(
    tenantId: 'tenant-123',
    approverId: 'user-456',
    documentType: 'requisition',
    amountCents: 500000, // $5,000
    currency: 'USD',
));

if ($result->canApprove) {
    echo "User authorized to approve";
    echo "Authority level: {$result->authorityLevel}";
} else {
    echo "Approval limit exceeded: {$result->reason}";
}

// Get user's approval authority
$authority = $manager->getApprovalAuthority('tenant-123', 'user-456');
echo "Max requisition: {$authority->getMaxAmountForType('requisition')} cents";
```

### DocumentRetentionService

[](#documentretentionservice)

Manages document lifecycle with regulatory compliance.

```
use Nexus\ProcurementOperations\Services\Compliance\DocumentRetentionService;

$service = $container->get(DocumentRetentionService::class);

// Apply retention policy to a document
$result = $service->applyRetentionPolicy(
    tenantId: 'tenant-123',
    documentId: 'doc-001',
    documentType: 'purchase_order',
    createdDate: new \DateTimeImmutable('2024-01-15'),
);

echo "Retention expires: {$result['expiresAt']->format('Y-m-d')}";

// Check disposal eligibility (respects legal holds)
$eligibility = $service->checkDisposalEligibility(
    tenantId: 'tenant-123',
    documentId: 'doc-001',
);

if ($eligibility['eligible']) {
    echo "Document can be disposed";
} else {
    echo "Blocked: {$eligibility['reason']}";
    // e.g., "Document is under legal hold: LH-2024-001"
}

// Apply legal hold
$service->applyLegalHold(
    tenantId: 'tenant-123',
    legalHoldId: 'LH-2024-002',
    documentIds: ['doc-001', 'doc-002', 'doc-003'],
    reason: 'Pending litigation - Jones v. Acme Corp',
);
```

### ProcurementAuditService

[](#procurementauditservice)

SOX 404 compliance audit and evidence generation.

```
use Nexus\ProcurementOperations\Services\Compliance\ProcurementAuditService;

$service = $container->get(ProcurementAuditService::class);

// Generate SOX 404 evidence package
$evidence = $service->generateSox404EvidencePackage(
    tenantId: 'tenant-123',
    periodStart: new \DateTimeImmutable('2024-01-01'),
    periodEnd: new \DateTimeImmutable('2024-12-31'),
);

echo "Control areas covered: " . implode(', ', $evidence['controlAreas']);
echo "Evidence items: {$evidence['evidenceCount']}";
echo "Compliant: " . ($evidence['overallCompliant'] ? 'Yes' : 'No');

// Get Segregation of Duties report
$sodReport = $service->getSegregationOfDutiesReport('tenant-123');

foreach ($sodReport['conflictGroups'] as $group) {
    echo "Users with conflicts in {$group['conflictType']}: ";
    echo implode(', ', $group['users']);
}

// Perform control test
$testResult = $service->performControlTest(
    tenantId: 'tenant-123',
    controlId: 'CTRL-PR-001',
    sampleSize: 25,
    testProcedures: ['vouching', 'recalculation'],
);

echo "Control effective: " . ($testResult['isEffective'] ? 'Yes' : 'No');
echo "Exceptions found: {$testResult['exceptionsFound']}";
```

---

Event-Driven Integration
------------------------

[](#event-driven-integration)

### Published Events

[](#published-events)

EventDescription`RequisitionCreatedEvent`New requisition submitted`RequisitionApprovedEvent`Requisition approved`PurchaseOrderIssuedEvent`PO sent to vendor`GoodsReceiptCompletedEvent`Goods received`InvoiceMatchedEvent`3-way match successful`PaymentExecutedEvent`Payment processed`SoxControlTestedEvent`Control test completed`SodViolationDetectedEvent`SoD conflict found`SpendPolicyViolatedEvent`Policy breach detected`MaverickSpendDetectedEvent`Off-contract spend identified`VendorOnboardedEvent`Vendor activated`VendorSuspendedEvent`Vendor put on hold### Event Listeners

[](#event-listeners)

EventListenerAction`RequisitionApprovedEvent``CreatePurchaseOrderListener`Auto-create PO`GoodsReceiptCompletedEvent``TriggerMatchingListener`Initiate 3-way match`InvoiceMatchedEvent``SchedulePaymentListener`Queue for payment`PaymentExecutedEvent``PostJournalEntryListener`Post GL entries`SpendPolicyViolatedEvent``NotifyComplianceTeamListener`Send alerts`SodViolationDetectedEvent``CreateAuditFindingListener`Log for audit---

Configuration
-------------

[](#configuration)

Configure via `Nexus\Setting`:

Setting KeyDefaultDescription`procurement.matching.price_tolerance_percent``5.0`Max price variance (%)`procurement.matching.quantity_tolerance_percent``2.0`Max quantity variance (%)`procurement.matching.auto_match_enabled``true`Auto-match on GR complete`procurement.payment.batch_size``50`Max invoices per payment batch`procurement.payment.default_method``ACH`Default payment method`procurement.payment.early_discount_enabled``true`Capture early payment discounts`procurement.sox.control_test_sample_size``25`PCAOB standard sample size`procurement.sox.evidence_retention_years``7`Evidence retention period`procurement.vendor.onboarding_auto_approve``false`Auto-approve vendors`procurement.spend.maverick_threshold_percent``5.0`Maverick spend alert threshold---

Testing
-------

[](#testing)

Run the test suite:

```
# Run all tests
./vendor/bin/phpunit orchestrators/ProcurementOperations/tests

# Run specific test category
./vendor/bin/phpunit orchestrators/ProcurementOperations/tests/Unit/Rules

# Run with coverage
./vendor/bin/phpunit --coverage-html coverage orchestrators/ProcurementOperations/tests
```

### Test Coverage Summary

[](#test-coverage-summary)

ComponentTest FilesTest CasesRules25200+Services20+150+Coordinators1280+Workflows860+DTOs20+100+**Total****85+****590+**---

Migration from v1.x
-------------------

[](#migration-from-v1x)

If upgrading from ProcurementOperations v1.x:

1. **Namespace changes**: No breaking namespace changes
2. **New dependencies**: Add `Nexus\MachineLearning` for anomaly detection
3. **Configuration migration**: See `docs/MIGRATION_GUIDE.md`
4. **Database migrations**: Run new migrations for audit tables

---

Contributing
------------

[](#contributing)

See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.

---

License
-------

[](#license)

MIT License - see [LICENSE](LICENSE) file.

###  Health Score

33

—

LowBetter than 72% of packages

Maintenance84

Actively maintained with recent releases

Popularity2

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity35

Early-stage or recently created project

 Bus Factor1

Top contributor holds 67.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

81d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/117408?v=4)[Azahari Zaman](/maintainers/azaharizaman)[@azaharizaman](https://github.com/azaharizaman)

---

Top Contributors

[![azaharizaman](https://avatars.githubusercontent.com/u/117408?v=4)](https://github.com/azaharizaman "azaharizaman (83 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (38 commits)")[![cursoragent](https://avatars.githubusercontent.com/u/199161495?v=4)](https://github.com/cursoragent "cursoragent (2 commits)")

---

Tags

p2porchestratornexusprocurementpurchase orderprocure-to-paygoods-receiptinvoice-matching3-way-match

### Embed Badge

![Health badge](/badges/azaharizaman-nexus-procurement-operations/health.svg)

```
[![Health](https://phpackages.com/badges/azaharizaman-nexus-procurement-operations/health.svg)](https://phpackages.com/packages/azaharizaman-nexus-procurement-operations)
```

###  Alternatives

[symfony/symfony

The Symfony PHP framework

31.4k87.2M2.2k](/packages/symfony-symfony)[symfony/mailer

Helps sending emails

1.6k409.1M1.5k](/packages/symfony-mailer)[phpro/soap-client

A general purpose SoapClient library

8896.1M54](/packages/phpro-soap-client)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6942.5M425](/packages/drupal-core-recommended)[web-auth/webauthn-lib

FIDO2/Webauthn Support For PHP

12510.5M141](/packages/web-auth-webauthn-lib)[web-auth/webauthn-framework

FIDO2/Webauthn library for PHP and Symfony Bundle.

515100.5k3](/packages/web-auth-webauthn-framework)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
