2 Commits

Author SHA1 Message Date
Sebastian 863f27c58f chore(deps): update dependency vuetify to v4.1.12
Build Test / test (pull_request) Successful in 54s
JS Unit Tests / test (pull_request) Successful in 47s
PHP Integration Tests / Integration Tests (pull_request) Failing after 1m16s
PHP Unit Tests / test (pull_request) Successful in 2m10s
2026-08-30 03:04:10 +00:00
Sebastian 147885377a refactor(core): centralize reserved system user identity
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
2026-08-28 19:36:15 -04:00
4 changed files with 63 additions and 58 deletions
+6 -5
View File
@@ -14,6 +14,7 @@ use KTXC\Resource\ProviderManager;
use KTXF\Mail\Provider\ProviderBaseInterface; use KTXF\Mail\Provider\ProviderBaseInterface;
use KTXF\Mail\Provider\ProviderServiceMutateInterface; use KTXF\Mail\Provider\ProviderServiceMutateInterface;
use KTXF\Resource\Provider\ResourceServiceMutateInterface; use KTXF\Resource\Provider\ResourceServiceMutateInterface;
use KTXF\Resource\SystemIdentity;
use KTXM\ProviderMailSystem\Stores\ServiceStore; use KTXM\ProviderMailSystem\Stores\ServiceStore;
/** /**
@@ -108,7 +109,7 @@ class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface
{ {
// routes are tenant scoped and only visible in the system user context, // routes are tenant scoped and only visible in the system user context,
// keeping them out of regular user account listings // keeping them out of regular user account listings
if ($userId !== self::USER_SYSTEM) { if ($userId !== SystemIdentity::USER) {
return []; return [];
} }
@@ -122,7 +123,7 @@ class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface
public function serviceFetch(string $tenantId, string $userId, string|int $identifier): ?Service public function serviceFetch(string $tenantId, string $userId, string|int $identifier): ?Service
{ {
if ($userId !== self::USER_SYSTEM) { if ($userId !== SystemIdentity::USER) {
return null; return null;
} }
@@ -147,7 +148,7 @@ class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface
if (!str_ends_with($address, self::ADDRESS_DOMAIN_SUFFIX)) { if (!str_ends_with($address, self::ADDRESS_DOMAIN_SUFFIX)) {
return null; return null;
} }
if ($userId !== self::USER_SYSTEM) { if ($userId !== SystemIdentity::USER) {
return null; return null;
} }
@@ -170,7 +171,7 @@ class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface
public function serviceExtant(string $tenantId, string $userId, string|int ...$identifiers): array public function serviceExtant(string $tenantId, string $userId, string|int ...$identifiers): array
{ {
if ($userId !== self::USER_SYSTEM) { if ($userId !== SystemIdentity::USER) {
return array_fill_keys(array_map('strval', $identifiers), false); return array_fill_keys(array_map('strval', $identifiers), false);
} }
@@ -223,7 +224,7 @@ class Provider implements ProviderBaseInterface, ProviderServiceMutateInterface
*/ */
protected function assertSystemContext(string $userId): void protected function assertSystemContext(string $userId): void
{ {
if ($userId !== self::USER_SYSTEM) { if ($userId !== SystemIdentity::USER) {
throw new InvalidArgumentException('System mail routes can only be managed in the system user context'); throw new InvalidArgumentException('System mail routes can only be managed in the system user context');
} }
} }
+2 -1
View File
@@ -28,6 +28,7 @@ use KTXF\Resource\Identifier\EntityIdentifierInterface;
use KTXF\Resource\Provider\ProviderInterface; use KTXF\Resource\Provider\ProviderInterface;
use KTXF\Resource\Provider\ResourceServiceIdentityInterface; use KTXF\Resource\Provider\ResourceServiceIdentityInterface;
use KTXF\Resource\Provider\ResourceServiceLocationInterface; use KTXF\Resource\Provider\ResourceServiceLocationInterface;
use KTXF\Resource\SystemIdentity;
use KTXF\Resource\Range\IRange; use KTXF\Resource\Range\IRange;
use KTXF\Resource\Range\RangeType; use KTXF\Resource\Range\RangeType;
use KTXF\Resource\Sort\ISort; use KTXF\Resource\Sort\ISort;
@@ -422,7 +423,7 @@ class Service implements ServiceBaseInterface, ServiceMutableInterface, ServiceE
throw new RuntimeException("Target mail provider '$providerId' is not available"); throw new RuntimeException("Target mail provider '$providerId' is not available");
} }
$service = $provider->serviceFetch($this->serviceTenantId, ProviderBaseInterface::USER_SYSTEM, $serviceId); $service = $provider->serviceFetch($this->serviceTenantId, SystemIdentity::USER, $serviceId);
if ($service === null) { if ($service === null) {
throw new RuntimeException("Target mail service '$providerId/$serviceId' was not found"); throw new RuntimeException("Target mail service '$providerId/$serviceId' was not found");
} }
+54 -51
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,56 @@
} }
}, },
"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", "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-5.1.11.tgz",
"integrity": "sha512-mbhpPMmnw/kwW19aRNmSUl1QzLbdGo1SCuE49BT98MNwqF6zaHb3o2owssFc/PEO/4t2UjqtCNwocuDtJornzA==", "integrity": "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg==",
"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", "resolved": "https://registry.npmjs.org/@asamuzakjp/dom-selector/-/dom-selector-7.1.1.tgz",
"integrity": "sha512-UJLfKXBhrc8i1vH2eJXuYQMwlsLKWFw3O+CPqXSuVEiikeAim3UgrfWX0k4tA/X8cRFM8iZ7OaqBokFGbYusdg==", "integrity": "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ==",
"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",
"resolved": "https://registry.npmjs.org/@asamuzakjp/generational-cache/-/generational-cache-1.0.1.tgz",
"integrity": "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^20.19.0 || ^22.12.0 || >=24.0.0"
}
},
"node_modules/@asamuzakjp/nwsapi": {
"version": "2.3.9",
"resolved": "https://registry.npmjs.org/@asamuzakjp/nwsapi/-/nwsapi-2.3.9.tgz",
"integrity": "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==",
"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",
@@ -1798,39 +1816,39 @@
"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", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-29.1.1.tgz",
"integrity": "sha512-JQHfRGmmKmaZoUAvIgff5jjG/0SzTQlGz8c7t72KzBzo8ZULEjAjnYE0sNwBOUA4QtWwYE2xoYitg8NFsmiYxA==", "integrity": "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q==",
"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": {
@@ -1838,21 +1856,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",
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
@@ -2925,13 +2928,13 @@
"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", "resolved": "https://registry.npmjs.org/undici/-/undici-7.28.0.tgz",
"integrity": "sha512-aWZpUj7XoGonMClx4gdDRfgBjqeA+F473aDmROQQbM9n6PRfK/u1q/a0X4wMTgcHfT8H6fpbt98PFuDUwFg2YA==", "integrity": "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==",
"dev": true, "dev": true,
"license": "MIT", "license": "MIT",
"engines": { "engines": {
"node": ">=22.19.0" "node": ">=20.18.1"
} }
}, },
"node_modules/unplugin": { "node_modules/unplugin": {
@@ -3275,9 +3278,9 @@
} }
}, },
"node_modules/vuetify": { "node_modules/vuetify": {
"version": "4.1.6", "version": "4.1.12",
"resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.1.6.tgz", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.1.12.tgz",
"integrity": "sha512-VOsRTsNfs+FE4JXMONZkqX2yznSqC/FXG9/pgVVjsoqIjUvJg+CfFTuOlgyWVFrZYY+crk7LV9uaiN8bZREV/g==", "integrity": "sha512-WXGbnuzqUGPZM7nF38C3jiucaLRutHZOICVW0wg1dyXppW11i+su/IT20nK+1o86nsgTdedejeEv53cJUrI30A==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -3286,7 +3289,7 @@
"peerDependencies": { "peerDependencies": {
"typescript": ">=4.7", "typescript": ">=4.7",
"vite-plugin-vuetify": ">=2.1.0", "vite-plugin-vuetify": ">=2.1.0",
"vue": "^3.5.0", "vue": "^3.5.0 || ^3.6.0-0",
"webpack-plugin-vuetify": ">=3.1.0" "webpack-plugin-vuetify": ">=3.1.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
+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"
} }
} }