feat(cloudron): add tirreno package artifacts

- Add CloudronStack/output/CloudronPackages-Artifacts/tirreno/ directory and its contents
- Includes package manifest, Dockerfile, source code, documentation, and build artifacts
- Add tirreno-1761840148.tar.gz as a build artifact
- Add tirreno-cloudron-package-1761841304.tar.gz as the Cloudron package
- Include all necessary files for the tirreno Cloudron package

This adds the complete tirreno Cloudron package artifacts to the repository.
This commit is contained in:
2025-10-30 11:43:06 -05:00
parent 0ce353ea9d
commit 91d52d2de5
1692 changed files with 202851 additions and 0 deletions

View File

@@ -0,0 +1,32 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class AccountEntity {
public function __construct(
public int $apiKeyId,
public string $userName,
public string $lastIp,
public ?string $fullName,
public ?string $firstName,
public ?string $lastName,
public \DateTimeImmutable $lastSeen,
public ?\DateTimeImmutable $userCreated,
) {
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class CountryEntity {
public function __construct(
public int $apiKeyId,
public int $countryId,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class DeviceEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public UserAgentEntity|UserAgentEnrichedEntity|null $userAgent,
public ?string $lang,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,46 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class DomainEnrichedEntity {
public function __construct(
public int $apiKeyId,
public string $domain,
public bool $blockdomains,
public bool $disposableDomains,
public bool $freeEmailProvider,
public ?string $ip,
public ?string $geoIp,
public ?string $geoHtml,
public ?string $webServer,
public ?string $hostname,
public ?string $emails,
public ?string $phone,
public string $discoveryDate,
public ?int $trancoRank,
public ?string $creationDate,
public ?string $expirationDate,
public ?int $returnCode,
public bool $disabled,
public ?string $closestSnapshot,
public bool $mxRecord,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class DomainEntity {
public function __construct(
public int $apiKeyId,
public string $domain,
public ?bool $checked, // null if was not sent to enrichment
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,37 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class DomainNotFoundEntity {
public function __construct(
public int $apiKeyId,
public string $domain,
public bool $blockdomains,
public bool $disposableDomains,
public bool $freeEmailProvider,
public ?string $creationDate,
public ?string $expirationDate,
public ?int $returnCode,
public bool $disabled,
public ?string $closestSnapshot,
public bool $mxRecord,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class EmailEnrichedEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public string $email,
public ?string $hash,
public DomainEntity|DomainEnrichedEntity|DomainNotFoundEntity $domain,
public bool $blockEmails,
public bool $dataBreach,
public int $dataBreaches,
public ?\DateTimeImmutable $earliestBreach,
public int $profiles,
public bool $domainContactEmail,
public ?bool $alertList,
public bool $fraudDetected,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class EmailEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public string $email,
public ?string $hash,
public DomainEntity|DomainEnrichedEntity|DomainNotFoundEntity $domain,
public bool $fraudDetected,
public ?bool $checked, // null if was not sent to enrichment
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,43 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class EventEntity {
/**
* @param array<mixed, mixed>|null $payload
*/
public function __construct(
public int $accountId,
public SessionEntity $session,
public int $apiKeyId,
public IpAddressEntity|IpAddressEnrichedEntity|IpAddressLocalhostEnrichedEntity $ipAddress,
public UrlEntity $url,
public ?string $eventType,
public ?string $httpMethod,
public DeviceEntity $device,
public ?RefererEntity $referer,
public EmailEntity|EmailEnrichedEntity|null $email,
public PhoneEntity|PhoneEnrichedEntity|PhoneInvalidEntity|null $phone,
public ?int $httpCode,
public \DateTimeImmutable $eventTime,
public ?string $traceId,
public ?PayloadEntity $payload,
public CountryEntity $country,
) {
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IpAddressEnrichedEntity {
/**
* @param string[] $domainsCount
*/
public function __construct(
public int $apiKeyId,
public string $ipAddress,
public ?string $hash,
public int $countryId,
public bool $hosting,
public bool $vpn,
public bool $tor,
public bool $relay,
public bool $starlink,
public bool $blocklist,
public array $domainsCount,
public ?string $cidr,
public ?bool $alertList,
public bool $fraudDetected,
public ?IspEnrichedEntity $isp,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,31 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IpAddressEntity {
public function __construct(
public int $apiKeyId,
public string $ipAddress,
public ?string $hash,
public bool $fraudDetected,
public IspEntity|IspLocalhostEntity|IspEnrichedEntity $isp,
public ?bool $checked, // null if was not sent to enrichment
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,44 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IpAddressLocalhostEnrichedEntity {
/**
* @param string[] $domainsCount
*/
public function __construct(
public int $apiKeyId,
public string $ipAddress,
public ?string $hash,
public bool $fraudDetected,
public ?IspLocalhostEntity $isp,
public \DateTimeImmutable $lastSeen,
public int $countryId = 0,
public bool $hosting = false,
public bool $vpn = false,
public bool $tor = false,
public bool $relay = false,
public bool $starlink = false,
public bool $blocklist = false,
public array $domainsCount = [],
public ?string $cidr = null,
public ?bool $alertList = null,
public bool $checked = true,
) {
}
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IspEnrichedEntity {
public function __construct(
public int $apiKeyId,
public int $asn,
public ?string $name,
public ?string $description,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IspEntity {
public function __construct(
public int $apiKeyId,
public \DateTimeImmutable $lastSeen,
public int $asn = 64496,
public string $name = 'N/A',
public ?string $description = null,
) {
}
}

View File

@@ -0,0 +1,29 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class IspLocalhostEntity {
public function __construct(
public int $apiKeyId,
public \DateTimeImmutable $lastSeen,
public int $asn = 0,
public string $name = 'Local area network',
public ?string $description = null,
) {
}
}

View File

@@ -0,0 +1,36 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class LogbookEntity {
public const ERROR_TYPE_SUCCESS = 0;
public const ERROR_TYPE_VALIDATION_ERROR = 1;
public const ERROR_TYPE_CRITICAL_VALIDATION_ERROR = 2;
public const ERROR_TYPE_CRITICAL_ERROR = 3;
public function __construct(
public int $apiKeyId,
public string $ip,
public ?int $eventId,
public int $errorType,
public ?string $errorText,
public string $raw,
public ?string $started,
) {
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class PayloadEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public array|string $payload,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class PhoneEnrichedEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public string $phoneNumber,
public ?string $hash,
public int $profiles,
public ?int $countryId,
public int $callingCountryCode,
public string $nationalFormat,
public bool $invalid,
public ?string $validationErrors,
public ?string $carrierName,
public string $type,
public ?bool $alertList,
public bool $fraudDetected,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,32 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class PhoneEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public string $phoneNumber,
public ?string $hash,
public ?int $countryId,
public bool $fraudDetected,
public ?bool $checked, // null if was not sent to enrichment
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,33 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class PhoneInvalidEntity {
public function __construct(
public int $accountId,
public int $apiKeyId,
public string $phoneNumber,
public ?string $hash,
public int $countryId,
public bool $fraudDetected,
public string $validationErrors,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class RefererEntity {
public function __construct(
public int $apiKeyId,
public string $referer,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class SessionEntity {
public function __construct(
public int $id,
public int $accountId,
public int $apiKeyId,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,30 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class UrlEntity {
public function __construct(
public int $apiKeyId,
public string $url,
public ?UrlQueryEntity $query,
public ?string $title,
public ?int $httpCode,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,27 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class UrlQueryEntity {
public function __construct(
public int $apiKeyId,
public string $query,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,34 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class UserAgentEnrichedEntity {
public function __construct(
public int $apiKeyId,
public string $userAgent,
public ?string $device,
public ?string $browserName,
public ?string $browserVersion,
public ?string $osName,
public ?string $osVersion,
public bool $modified,
public bool $checked,
public \DateTimeImmutable $lastSeen,
) {
}
}

View File

@@ -0,0 +1,28 @@
<?php
/**
* Tirreno ~ Open source user analytics
* Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
*
* Licensed under GNU Affero General Public License version 3 of the or any later version.
* For full copyright and license information, please see the LICENSE
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Tirreno Technologies Sàrl (https://www.tirreno.com)
* @license https://opensource.org/licenses/AGPL-3.0 AGPL License
* @link https://www.tirreno.com Tirreno(tm)
*/
declare(strict_types=1);
namespace Sensor\Entity;
class UserAgentEntity {
public function __construct(
public int $apiKeyId,
public ?string $userAgent,
public ?bool $checked, // null if was not sent to enrichment
public \DateTimeImmutable $lastSeen,
) {
}
}