Search by

jooservices / laravel-activities

jooservices

Append-only MongoDB-backed activity timeline for Laravel applications.

Package info

github.com/jooservices/laravel-activities

pkg:composer/jooservices/laravel-activities

Statistics

Installs: 436

Dependents: 1

Suggesters: 0

Stars: 0

Open Issues: 0

v4.0.0 2026-09-06 13:45 UTC

This package is auto-updated.

Last update: 2026-09-06 14:32:30 UTC


README

codecov CI OpenSSF Scorecard PHP Version Release License: MIT Packagist Version

Append-only MongoDB-backed activity timeline for Laravel 12 and 13 applications.

v4.0.0 requires jooservices/dto ^3.2, jooservices/laravel-repository ^4, and jooservices/exceptions ^4. See UPGRADE.md.

Features

  • Record subject-scoped activities with optional actor, tenant, description, payload, and context
  • Query by subject, actor, tenant, activity prefix, correlation, and date range
  • Honest cursor pagination (hasMore / nextCursor) and explicit offset mode
  • Sanitization plus payload limits for data and context
  • Retention pruning via php artisan activities:prune (deleteMany)
  • JSONL and CSV export via php artisan activities:export
  • Official in-memory store for consumer tests (ACTIVITIES_STORE=array, not production)
  • DTO-first API using jooservices/dto ^3
  • Repository layer using jooservices/laravel-repository ^4

Requirements

  • PHP 8.5+
  • Laravel 12 or 13
  • MongoDB 6+
  • mongodb/laravel-mongodb ^5.10

Installation

composer require jooservices/laravel-activities

Publish config:

php artisan vendor:publish --tag=activities-config

Ensure indexes:

php artisan activities:ensure-indexes

Usage

use JOOservices\LaravelActivities\Contracts\ActivityRecorderInterface;

$activities->recordFor(
    subject: $target,
    activity: 'crawl_target.created',
    actor: $actor,
    description: 'Created crawl target',
    data: ['url' => $url],
    context: ['plugin_slug' => $slug],
    correlationId: $correlationId,
    tenantId: $tenantId,
);

Query:

use JOOservices\LaravelActivities\Dto\ActivityFilterDto;

$timeline = $query->list(new ActivityFilterDto(
    contextKey: 'plugin_slug',
    contextValue: $slug,
    tenantId: $tenantId,
    limit: 50,
));

$next = $timeline->nextCursor;
$hasMore = $timeline->hasMore;

Offset pagination (when a total is required):

$list = $query->list(new ActivityFilterDto(
    pagination: 'offset',
    page: 2,
    limit: 50,
));

Relationship to audit systems

This package stores product timeline activities only. Ops logs belong in jooservices/laravel-logging. Compliance events belong in jooservices/laravel-events.

Documentation

Quality

composer ci

Coverage gate: 90% minimum (composer test:coverage).

License

MIT