1 Commits

Author SHA1 Message Date
Sebastian 52fe5194d7 chore(deps): update dependency phpunit/phpunit to v12.5.32
Build Test / test (pull_request) Successful in 47s
JS Unit Tests / test (pull_request) Successful in 48s
PHP Integration Tests / Integration Tests (pull_request) Failing after 1m36s
PHP Unit Tests / test (pull_request) Successful in 1m39s
2026-07-26 03:04:47 +00:00
10 changed files with 66 additions and 75 deletions
Generated
+7 -7
View File
@@ -1201,16 +1201,16 @@
}, },
{ {
"name": "phpunit/phpunit", "name": "phpunit/phpunit",
"version": "12.5.31", "version": "12.5.32",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git", "url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "0608d157a284f15cc73b99a3327eff06b66a176d" "reference": "c02591dd7840ed124a98d7770753329ad28e9f8f"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/0608d157a284f15cc73b99a3327eff06b66a176d", "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c02591dd7840ed124a98d7770753329ad28e9f8f",
"reference": "0608d157a284f15cc73b99a3327eff06b66a176d", "reference": "c02591dd7840ed124a98d7770753329ad28e9f8f",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@@ -1279,7 +1279,7 @@
"support": { "support": {
"issues": "https://github.com/sebastianbergmann/phpunit/issues", "issues": "https://github.com/sebastianbergmann/phpunit/issues",
"security": "https://github.com/sebastianbergmann/phpunit/security/policy", "security": "https://github.com/sebastianbergmann/phpunit/security/policy",
"source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.31" "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.32"
}, },
"funding": [ "funding": [
{ {
@@ -1287,7 +1287,7 @@
"type": "other" "type": "other"
} }
], ],
"time": "2026-07-06T14:54:16+00:00" "time": "2026-07-25T06:54:13+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@@ -2315,5 +2315,5 @@
"platform-overrides": { "platform-overrides": {
"php": "8.3" "php": "8.3"
}, },
"plugin-api-version": "2.6.0" "plugin-api-version": "2.9.0"
} }
+3 -3
View File
@@ -13,7 +13,7 @@ use KTXM\ProviderImap\Providers\Provider;
use KTXM\ProviderImap\Providers\Service; use KTXM\ProviderImap\Providers\Service;
use KTXM\ProviderImap\Providers\ServiceIdentityBasic; use KTXM\ProviderImap\Providers\ServiceIdentityBasic;
use KTXM\ProviderImap\Providers\ServiceLocation; use KTXM\ProviderImap\Providers\ServiceLocation;
use KTXC\Context\TenantContext; use KTXC\SessionTenant;
use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@@ -41,7 +41,7 @@ class ConnectCommand extends Command
{ {
public function __construct( public function __construct(
private readonly Provider $provider, private readonly Provider $provider,
private readonly TenantContext $tenantContext, private readonly SessionTenant $sessionTenant,
) { ) {
parent::__construct(); parent::__construct();
} }
@@ -186,7 +186,7 @@ class ConnectCommand extends Command
// ── Persist ────────────────────────────────────────────────────────── // ── Persist ──────────────────────────────────────────────────────────
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$label = $io->ask('Service label', $username); $label = $io->ask('Service label', $username);
if ($label) { if ($label) {
+4 -4
View File
@@ -11,7 +11,7 @@ namespace KTXM\ProviderImap\Console;
use KTXM\ProviderImap\Providers\Provider; use KTXM\ProviderImap\Providers\Provider;
use KTXM\ProviderImap\Providers\Service; use KTXM\ProviderImap\Providers\Service;
use KTXC\Context\TenantContext; use KTXC\SessionTenant;
use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@@ -37,7 +37,7 @@ class DisconnectCommand extends Command
{ {
public function __construct( public function __construct(
private readonly Provider $provider, private readonly Provider $provider,
private readonly TenantContext $tenantContext, private readonly SessionTenant $sessionTenant,
) { ) {
parent::__construct(); parent::__construct();
} }
@@ -86,7 +86,7 @@ class DisconnectCommand extends Command
$userId = (string) ($input->getOption('user') ?? ''); $userId = (string) ($input->getOption('user') ?? '');
if ($tenantId !== '' && $userId !== '') { if ($tenantId !== '' && $userId !== '') {
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$services = $this->provider->serviceList($tenantId, $userId); $services = $this->provider->serviceList($tenantId, $userId);
if (empty($services)) { if (empty($services)) {
@@ -130,7 +130,7 @@ class DisconnectCommand extends Command
} }
// ── Fetch service for display ──────────────────────────────────────── // ── Fetch service for display ────────────────────────────────────────
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$service = $this->provider->serviceFetch($tenantId, $userId, $serviceId); $service = $this->provider->serviceFetch($tenantId, $userId, $serviceId);
if ($service === null) { if ($service === null) {
+3 -3
View File
@@ -14,7 +14,7 @@ use KTXM\ProviderImap\Providers\Service;
use KTXM\ProviderImap\Providers\ServiceIdentityBasic; use KTXM\ProviderImap\Providers\ServiceIdentityBasic;
use KTXM\ProviderImap\Providers\ServiceLocation; use KTXM\ProviderImap\Providers\ServiceLocation;
use KTXM\ProviderImap\Service\Discovery; use KTXM\ProviderImap\Service\Discovery;
use KTXC\Context\TenantContext; use KTXC\SessionTenant;
use Symfony\Component\Console\Attribute\AsCommand; use Symfony\Component\Console\Attribute\AsCommand;
use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
@@ -43,7 +43,7 @@ class DiscoverCommand extends Command
public function __construct( public function __construct(
private readonly Provider $provider, private readonly Provider $provider,
private readonly Discovery $discovery, private readonly Discovery $discovery,
private readonly TenantContext $tenantContext, private readonly SessionTenant $sessionTenant,
) { ) {
parent::__construct(); parent::__construct();
} }
@@ -210,7 +210,7 @@ class DiscoverCommand extends Command
// ── Persist ────────────────────────────────────────────────────────── // ── Persist ──────────────────────────────────────────────────────────
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$label = $io->ask('Service label', $address); $label = $io->ask('Service label', $address);
if ($label) { if ($label) {
+4 -4
View File
@@ -9,7 +9,7 @@ declare(strict_types=1);
namespace KTXM\ProviderImap\Console; namespace KTXM\ProviderImap\Console;
use KTXC\Context\TenantContext; use KTXC\SessionTenant;
use KTXM\ProviderImap\Client\Command\SelectCommand; use KTXM\ProviderImap\Client\Command\SelectCommand;
use KTXM\ProviderImap\Client\FetchOptions; use KTXM\ProviderImap\Client\FetchOptions;
use KTXM\ProviderImap\Client\FetchTarget; use KTXM\ProviderImap\Client\FetchTarget;
@@ -41,7 +41,7 @@ class TestCommand extends Command
{ {
public function __construct( public function __construct(
private readonly Provider $provider, private readonly Provider $provider,
private readonly TenantContext $tenantContext, private readonly SessionTenant $sessionTenant,
) { ) {
parent::__construct(); parent::__construct();
} }
@@ -108,7 +108,7 @@ class TestCommand extends Command
return Command::FAILURE; return Command::FAILURE;
} }
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$service = $this->provider->serviceFetch($tenantId, $userId, $serviceId); $service = $this->provider->serviceFetch($tenantId, $userId, $serviceId);
if ($service === null) { if ($service === null) {
@@ -269,7 +269,7 @@ class TestCommand extends Command
return; return;
} }
$this->tenantContext->resolveIdentifier($tenantId); $this->sessionTenant->configureById($tenantId);
$services = $this->provider->serviceList($tenantId, $userId); $services = $this->provider->serviceList($tenantId, $userId);
if ($services === []) { if ($services === []) {
+2 -3
View File
@@ -200,9 +200,8 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceC
if (isset($data[self::PROPERTY_IDENTITY])) { if (isset($data[self::PROPERTY_IDENTITY])) {
$this->setIdentity($this->freshIdentity(null, $data[self::PROPERTY_IDENTITY])); $this->setIdentity($this->freshIdentity(null, $data[self::PROPERTY_IDENTITY]));
} }
if (isset($data[self::PROPERTY_PRIMARY_ADDRESS])) { if (isset($data[self::PROPERTY_PRIMARY_ADDRESS]) && is_string($data[self::PROPERTY_PRIMARY_ADDRESS])) {
$value = $data[self::PROPERTY_PRIMARY_ADDRESS]; $this->setPrimaryAddress(new Address($data[self::PROPERTY_PRIMARY_ADDRESS]));
$this->setPrimaryAddress(is_array($value) ? Address::fromArray($value) : new Address((string)$value));
} }
if (isset($data[self::PROPERTY_SECONDARY_ADDRESSES]) && is_array($data[self::PROPERTY_SECONDARY_ADDRESSES])) { if (isset($data[self::PROPERTY_SECONDARY_ADDRESSES]) && is_array($data[self::PROPERTY_SECONDARY_ADDRESSES])) {
$this->setSecondaryAddresses(array_map( $this->setSecondaryAddresses(array_map(
+2 -1
View File
@@ -11,6 +11,7 @@ namespace KTXM\ProviderImap\Service\Remote;
use DateTimeImmutable; use DateTimeImmutable;
use Generator; use Generator;
use KTXC\Server;
use KTXC\Logger\PlainFileLogger; use KTXC\Logger\PlainFileLogger;
use KTXM\ProviderImap\Client\Client as ImapClient; use KTXM\ProviderImap\Client\Client as ImapClient;
use KTXM\ProviderImap\Client\Command\AppendCommand; use KTXM\ProviderImap\Client\Command\AppendCommand;
@@ -131,7 +132,7 @@ class RemoteMailService
return null; return null;
} }
$logDir = dirname(__DIR__, 5) . '/var/log'; $logDir = Server::getInstance()?->logDir() ?? __DIR__ . '/../../../../../var/log';
return new PlainFileLogger($logDir . '/' . $channel, $this->service->identifier()); return new PlainFileLogger($logDir . '/' . $channel, $this->service->identifier());
} }
+38 -47
View File
@@ -19,7 +19,7 @@
"@vitest/coverage-v8": "^4.1.6", "@vitest/coverage-v8": "^4.1.6",
"@vue/test-utils": "^2.4.10", "@vue/test-utils": "^2.4.10",
"@vue/tsconfig": "^0.9.0", "@vue/tsconfig": "^0.9.0",
"jsdom": "^30.0.0", "jsdom": "^29.1.1",
"typescript": "~6.0.0", "typescript": "~6.0.0",
"vite": "^8.0.0", "vite": "^8.0.0",
"vitest": "^4.1.6", "vitest": "^4.1.6",
@@ -27,38 +27,48 @@
} }
}, },
"node_modules/@asamuzakjp/css-color": { "node_modules/@asamuzakjp/css-color": {
"version": "6.0.5", "version": "5.1.11",
"resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-6.0.5.tgz",
"integrity": "sha512-mbhpPMmnw/kwW19aRNmSUl1QzLbdGo1SCuE49BT98MNwqF6zaHb3o2owssFc/PEO/4t2UjqtCNwocuDtJornzA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@csstools/css-calc": "^3.2.1", "@asamuzakjp/generational-cache": "^1.0.1",
"@csstools/css-color-parser": "^4.1.9", "@csstools/css-calc": "^3.2.0",
"@csstools/css-color-parser": "^4.1.0",
"@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-parser-algorithms": "^4.0.0",
"@csstools/css-tokenizer": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0"
"lru-cache": "^11.5.2"
}, },
"engines": { "engines": {
"node": "^22.13.0 || >=24.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
} }
}, },
"node_modules/@asamuzakjp/dom-selector": { "node_modules/@asamuzakjp/dom-selector": {
"version": "8.3.0", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-8.3.0.tgz",
"integrity": "sha512-UJLfKXBhrc8i1vH2eJXuYQMwlsLKWFw3O+CPqXSuVEiikeAim3UgrfWX0k4tA/X8cRFM8iZ7OaqBokFGbYusdg==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@asamuzakjp/generational-cache": "^1.0.1",
"@asamuzakjp/nwsapi": "^2.3.9",
"bidi-js": "^1.0.3", "bidi-js": "^1.0.3",
"css-tree": "^3.2.1", "css-tree": "^3.2.1",
"is-potential-custom-element-name": "^1.0.1", "is-potential-custom-element-name": "^1.0.1"
"lru-cache": "^11.5.2"
}, },
"engines": { "engines": {
"node": "^22.13.0 || >=24.0.0" "node": "^20.19.0 || ^22.12.0 || >=24.0.0"
} }
}, },
"node_modules/@asamuzakjp/generational-cache": {
"version": "1.0.1",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}
},
"node_modules/@asamuzakjp/nwsapi": {
"version": "2.3.9",
"dev": true,
"license": "MIT"
},
"node_modules/@babel/generator": { "node_modules/@babel/generator": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-8.0.0.tgz",
@@ -1630,39 +1640,37 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/jsdom": { "node_modules/jsdom": {
"version": "30.0.0", "version": "29.1.1",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-30.0.0.tgz",
"integrity": "sha512-JQHfRGmmKmaZoUAvIgff5jjG/0SzTQlGz8c7t72KzBzo8ZULEjAjnYE0sNwBOUA4QtWwYE2xoYitg8NFsmiYxA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@asamuzakjp/css-color": "^6.0.5", "@asamuzakjp/css-color": "^5.1.11",
"@asamuzakjp/dom-selector": "^8.2.5", "@asamuzakjp/dom-selector": "^7.1.1",
"@bramus/specificity": "^2.4.2", "@bramus/specificity": "^2.4.2",
"@csstools/css-syntax-patches-for-csstree": "^1.1.6", "@csstools/css-syntax-patches-for-csstree": "^1.1.3",
"@exodus/bytes": "^1.15.1", "@exodus/bytes": "^1.15.0",
"css-tree": "^3.2.1", "css-tree": "^3.2.1",
"data-urls": "^7.0.0", "data-urls": "^7.0.0",
"decimal.js": "^10.6.0", "decimal.js": "^10.6.0",
"html-encoding-sniffer": "^6.0.0", "html-encoding-sniffer": "^6.0.0",
"is-potential-custom-element-name": "^1.0.1", "is-potential-custom-element-name": "^1.0.1",
"lru-cache": "^11.5.2", "lru-cache": "^11.3.5",
"parse5": "^8.0.1", "parse5": "^8.0.1",
"saxes": "^6.0.0", "saxes": "^6.0.0",
"symbol-tree": "^3.2.4", "symbol-tree": "^3.2.4",
"tough-cookie": "^6.0.2", "tough-cookie": "^6.0.1",
"undici": "^8.7.0", "undici": "^7.25.0",
"w3c-xmlserializer": "^5.0.0", "w3c-xmlserializer": "^5.0.0",
"webidl-conversions": "^8.0.1", "webidl-conversions": "^8.0.1",
"whatwg-mimetype": "^5.0.0", "whatwg-mimetype": "^5.0.0",
"whatwg-url": "^17.1.0", "whatwg-url": "^16.0.1",
"xml-name-validator": "^5.0.0" "xml-name-validator": "^5.0.0"
}, },
"engines": { "engines": {
"node": "^22.22.2 || ^24.15.0 || >=26.0.0" "node": "^20.19.0 || ^22.13.0 || >=24.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"canvas": "^3.2.3" "canvas": "^3.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"canvas": { "canvas": {
@@ -1670,21 +1678,6 @@
} }
} }
}, },
"node_modules/jsdom/node_modules/whatwg-url": {
"version": "17.1.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-17.1.0.tgz",
"integrity": "sha512-3GeworPmc2ZfEEHP7lEbUfBX/L75wdEsi0rLNhXcXxnoN5jyq0SL5gCy06SGW2cyTIZdTvWIDQNQoza++vKeaw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@exodus/bytes": "^1.15.1",
"tr46": "^6.0.0",
"webidl-conversions": "^8.0.1"
},
"engines": {
"node": "^22.14.0 || >=24.0.0"
}
},
"node_modules/jsesc": { "node_modules/jsesc": {
"version": "3.1.0", "version": "3.1.0",
"license": "MIT", "license": "MIT",
@@ -2647,13 +2640,11 @@
"license": "MIT" "license": "MIT"
}, },
"node_modules/undici": { "node_modules/undici": {
"version": "8.9.0", "version": "7.28.0",
"resolved": "https://registry.npmjs.org/undici/-/undici-8.9.0.tgz",
"integrity": "sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=22.19.0" "node": ">=20.18.1"
} }
}, },
"node_modules/unplugin": { "node_modules/unplugin": {
+1 -1
View File
@@ -31,7 +31,7 @@
"vue-tsc": "^3.0.5", "vue-tsc": "^3.0.5",
"@vitest/coverage-v8": "^4.1.6", "@vitest/coverage-v8": "^4.1.6",
"@vue/test-utils": "^2.4.10", "@vue/test-utils": "^2.4.10",
"jsdom": "^30.0.0", "jsdom": "^29.1.1",
"vitest": "^4.1.6" "vitest": "^4.1.6"
} }
} }
+2 -2
View File
@@ -115,7 +115,7 @@ function sameIdentity(a: ServiceIdentity | null, b: ServiceIdentity | null): boo
variant="outlined" variant="outlined"
prepend-inner-icon="mdi-account" prepend-inner-icon="mdi-account"
class="mb-4" class="mb-4"
autocomplete="off" autocomplete="username"
autocorrect="off" autocorrect="off"
autocapitalize="none" autocapitalize="none"
:rules="[rules.required]" :rules="[rules.required]"
@@ -130,7 +130,7 @@ function sameIdentity(a: ServiceIdentity | null, b: ServiceIdentity | null): boo
variant="outlined" variant="outlined"
prepend-inner-icon="mdi-lock" prepend-inner-icon="mdi-lock"
class="mb-4" class="mb-4"
autocomplete="new-password" autocomplete="current-password"
:rules="[rules.required]" :rules="[rules.required]"
/> />
</div> </div>