Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2dbdf2d2b1 | |||
| 383e0adc23 | |||
| d7789f5a44 | |||
| 2638990667 |
13
changelog.md
13
changelog.md
@@ -1,5 +1,18 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 2026-02-14 - 5.4.3 - fix(dependencies)
|
||||||
|
bump @push.rocks/smartproxy to ^25.1.0
|
||||||
|
|
||||||
|
- Updated @push.rocks/smartproxy from ^25.0.0 to ^25.1.0 in package.json
|
||||||
|
|
||||||
|
## 2026-02-13 - 5.4.2 - fix(dcrouter)
|
||||||
|
improve domain pattern matching to support routing-glob and wildcard patterns and use matching logic when resolving routes
|
||||||
|
|
||||||
|
- Support routing-glob patterns beginning with '*' (e.g. *example.com) to match base domain, wildcard form, and subdomains
|
||||||
|
- Treat standard wildcard patterns ('*.example.com') as matching both the base domain (example.com) and its subdomains
|
||||||
|
- Use isDomainMatch when resolving routes instead of exact array includes to allow pattern matching
|
||||||
|
- Normalize domain and pattern to lowercase and simplify equality checks
|
||||||
|
|
||||||
## 2026-02-13 - 5.4.1 - fix(network,dcrouter)
|
## 2026-02-13 - 5.4.1 - fix(network,dcrouter)
|
||||||
Always register SmartProxy certificate event handlers and include total bytes + improved connection metrics in network stats/UI
|
Always register SmartProxy certificate event handlers and include total bytes + improved connection metrics in network stats/UI
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@serve.zone/dcrouter",
|
"name": "@serve.zone/dcrouter",
|
||||||
"private": false,
|
"private": false,
|
||||||
"version": "5.4.1",
|
"version": "5.4.3",
|
||||||
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
"description": "A multifaceted routing service handling mail and SMS delivery functions.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": {
|
"exports": {
|
||||||
@@ -49,7 +49,7 @@
|
|||||||
"@push.rocks/smartnetwork": "^4.4.0",
|
"@push.rocks/smartnetwork": "^4.4.0",
|
||||||
"@push.rocks/smartpath": "^6.0.0",
|
"@push.rocks/smartpath": "^6.0.0",
|
||||||
"@push.rocks/smartpromise": "^4.2.3",
|
"@push.rocks/smartpromise": "^4.2.3",
|
||||||
"@push.rocks/smartproxy": "^25.0.0",
|
"@push.rocks/smartproxy": "^25.1.0",
|
||||||
"@push.rocks/smartradius": "^1.1.1",
|
"@push.rocks/smartradius": "^1.1.1",
|
||||||
"@push.rocks/smartrequest": "^5.0.1",
|
"@push.rocks/smartrequest": "^5.0.1",
|
||||||
"@push.rocks/smartrx": "^3.0.10",
|
"@push.rocks/smartrx": "^3.0.10",
|
||||||
|
|||||||
10
pnpm-lock.yaml
generated
10
pnpm-lock.yaml
generated
@@ -75,8 +75,8 @@ importers:
|
|||||||
specifier: ^4.2.3
|
specifier: ^4.2.3
|
||||||
version: 4.2.3
|
version: 4.2.3
|
||||||
'@push.rocks/smartproxy':
|
'@push.rocks/smartproxy':
|
||||||
specifier: ^25.0.0
|
specifier: ^25.1.0
|
||||||
version: 25.0.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)
|
version: 25.1.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)
|
||||||
'@push.rocks/smartradius':
|
'@push.rocks/smartradius':
|
||||||
specifier: ^1.1.1
|
specifier: ^1.1.1
|
||||||
version: 1.1.1
|
version: 1.1.1
|
||||||
@@ -1040,8 +1040,8 @@ packages:
|
|||||||
'@push.rocks/smartpromise@4.2.3':
|
'@push.rocks/smartpromise@4.2.3':
|
||||||
resolution: {integrity: sha512-Ycg/TJR+tMt+S3wSFurOpEoW6nXv12QBtKXgBcjMZ4RsdO28geN46U09osPn9N9WuwQy1PkmTV5J/V4F9U8qEw==}
|
resolution: {integrity: sha512-Ycg/TJR+tMt+S3wSFurOpEoW6nXv12QBtKXgBcjMZ4RsdO28geN46U09osPn9N9WuwQy1PkmTV5J/V4F9U8qEw==}
|
||||||
|
|
||||||
'@push.rocks/smartproxy@25.0.0':
|
'@push.rocks/smartproxy@25.1.0':
|
||||||
resolution: {integrity: sha512-FuXIyKAlTdUUSFszzYjP/WAMb3Dq//gBdluADvjgAeQn1YplFonMo/afRU+qSI7WsPsB7X7vkFwLba5ASYdiUg==}
|
resolution: {integrity: sha512-VA2Vu4ne1XJRF7lbd2Z70WPnYjcaSE6q3fmLCXXNfeRAsOw28xWidgQaJer/64G8HWZb0M6ygYB0jZ3ac3WJ2Q==}
|
||||||
|
|
||||||
'@push.rocks/smartpuppeteer@2.0.5':
|
'@push.rocks/smartpuppeteer@2.0.5':
|
||||||
resolution: {integrity: sha512-yK/qSeWVHIGWRp3c8S5tfdGP6WCKllZC4DR8d8CQlEjszOSBmHtlTdyyqOMBZ/BA4kd+eU5f3A1r4K2tGYty1g==}
|
resolution: {integrity: sha512-yK/qSeWVHIGWRp3c8S5tfdGP6WCKllZC4DR8d8CQlEjszOSBmHtlTdyyqOMBZ/BA4kd+eU5f3A1r4K2tGYty1g==}
|
||||||
@@ -6441,7 +6441,7 @@ snapshots:
|
|||||||
|
|
||||||
'@push.rocks/smartpromise@4.2.3': {}
|
'@push.rocks/smartpromise@4.2.3': {}
|
||||||
|
|
||||||
'@push.rocks/smartproxy@25.0.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)':
|
'@push.rocks/smartproxy@25.1.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@push.rocks/lik': 6.2.2
|
'@push.rocks/lik': 6.2.2
|
||||||
'@push.rocks/smartacme': 8.0.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)
|
'@push.rocks/smartacme': 8.0.0(@push.rocks/smartserve@2.0.1)(socks@2.8.7)
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/dcrouter',
|
name: '@serve.zone/dcrouter',
|
||||||
version: '5.4.1',
|
version: '5.4.3',
|
||||||
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -674,24 +674,25 @@ export class DcRouter {
|
|||||||
* @returns Whether the domain matches the pattern
|
* @returns Whether the domain matches the pattern
|
||||||
*/
|
*/
|
||||||
private isDomainMatch(domain: string, pattern: string): boolean {
|
private isDomainMatch(domain: string, pattern: string): boolean {
|
||||||
// Normalize inputs
|
|
||||||
domain = domain.toLowerCase();
|
domain = domain.toLowerCase();
|
||||||
pattern = pattern.toLowerCase();
|
pattern = pattern.toLowerCase();
|
||||||
|
|
||||||
// Check for exact match
|
if (domain === pattern) return true;
|
||||||
if (domain === pattern) {
|
|
||||||
return true;
|
// Routing-glob: *example.com matches example.com, sub.example.com, *.example.com
|
||||||
|
if (pattern.startsWith('*') && !pattern.startsWith('*.')) {
|
||||||
|
const baseDomain = pattern.slice(1); // *nevermind.cloud → nevermind.cloud
|
||||||
|
if (domain === baseDomain || domain === `*.${baseDomain}`) return true;
|
||||||
|
if (domain.endsWith(baseDomain) && domain.length > baseDomain.length) return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check for wildcard match (*.example.com)
|
// Standard wildcard: *.example.com matches sub.example.com and example.com
|
||||||
if (pattern.startsWith('*.')) {
|
if (pattern.startsWith('*.')) {
|
||||||
const patternSuffix = pattern.slice(2); // Remove the "*." prefix
|
const suffix = pattern.slice(2);
|
||||||
|
if (domain === suffix) return true;
|
||||||
// Check if domain ends with the pattern suffix and has at least one character before it
|
return domain.endsWith(suffix) && domain.length > suffix.length;
|
||||||
return domain.endsWith(patternSuffix) && domain.length > patternSuffix.length;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// No match
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -705,7 +706,9 @@ export class DcRouter {
|
|||||||
const routeDomains = Array.isArray(route.match.domains)
|
const routeDomains = Array.isArray(route.match.domains)
|
||||||
? route.match.domains
|
? route.match.domains
|
||||||
: [route.match.domains];
|
: [route.match.domains];
|
||||||
if (routeDomains.includes(domain)) return route.name;
|
for (const pattern of routeDomains) {
|
||||||
|
if (this.isDomainMatch(domain, pattern)) return route.name;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
export const commitinfo = {
|
export const commitinfo = {
|
||||||
name: '@serve.zone/dcrouter',
|
name: '@serve.zone/dcrouter',
|
||||||
version: '5.4.1',
|
version: '5.4.3',
|
||||||
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
description: 'A multifaceted routing service handling mail and SMS delivery functions.'
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user