diff --git a/changelog.md b/changelog.md index b53881f..c498818 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,16 @@ # Changelog +## 2025-05-07 - 2.4.0 - feat(email) +Enhance email integration by updating @push.rocks/smartmail to ^2.1.0 and improving the entire email stack including validation, DKIM verification, templating, MIME conversion, and attachment handling. + +- Updated smartmail dependency from ^2.0.1 to ^2.1.0 in package.json +- Enhanced EmailValidator with comprehensive checks (syntax, MX, disposable and role validations) +- Refactored TemplateManager to support dynamic variable substitution and loading templates from directory +- Improved conversion between internal Email and smartmail.Smartmail, streamlining MIME handling and attachment mapping +- Augmented DKIM verification with caching and custom header injection for improved security reporting +- Updated readme.plan.md with detailed roadmap for further performance, security, analytics, and deliverability enhancements +- Expanded test suite to cover smartmail integration, validation, templating, and conversion between formats + ## 2025-05-04 - 2.3.1 - fix(platformservice) Update dependency versions and refactor import paths for improved compatibility; add initial DcRouter plan documentation. diff --git a/package.json b/package.json index 750761e..5db1c00 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@push.rocks/smartdns": "^6.2.2", "@push.rocks/smartfile": "^11.0.4", "@push.rocks/smartlog": "^3.0.3", - "@push.rocks/smartmail": "^2.0.1", + "@push.rocks/smartmail": "^2.1.0", "@push.rocks/smartpath": "^5.0.5", "@push.rocks/smartpromise": "^4.0.3", "@push.rocks/smartproxy": "^10.2.0", @@ -47,6 +47,7 @@ "@serve.zone/interfaces": "^5.0.4", "@tsclass/tsclass": "^9.2.0", "@types/mailparser": "^3.4.6", + "lru-cache": "^11.1.0", "mailauth": "^4.8.4", "mailparser": "^3.6.9", "uuid": "^11.1.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 41ba2be..3448abb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,10 +31,10 @@ importers: version: 6.1.0 '@push.rocks/smartacme': specifier: ^7.3.3 - version: 7.3.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + version: 7.3.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartdata': specifier: ^5.15.1 - version: 5.15.1(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + version: 5.15.1(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartdns': specifier: ^6.2.2 version: 6.2.2 @@ -45,8 +45,8 @@ importers: specifier: ^3.0.3 version: 3.0.7 '@push.rocks/smartmail': - specifier: ^2.0.1 - version: 2.0.1 + specifier: ^2.1.0 + version: 2.1.0 '@push.rocks/smartpath': specifier: ^5.0.5 version: 5.0.18 @@ -55,7 +55,7 @@ importers: version: 4.2.3 '@push.rocks/smartproxy': specifier: ^10.2.0 - version: 10.2.0(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + version: 10.2.0(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartrequest': specifier: ^2.1.0 version: 2.1.0 @@ -77,6 +77,9 @@ importers: '@types/mailparser': specifier: ^3.4.6 version: 3.4.6 + lru-cache: + specifier: ^11.1.0 + version: 11.1.0 mailauth: specifier: ^4.8.4 version: 4.8.4 @@ -95,16 +98,16 @@ importers: version: 1.3.3 '@git.zone/tstest': specifier: ^1.0.88 - version: 1.0.96(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)(typescript@5.7.3) + version: 1.0.96(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)(typescript@5.7.3) '@git.zone/tswatch': specifier: ^2.0.1 version: 2.1.0 '@push.rocks/tapbundle': specifier: ^6.0.3 - version: 6.0.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + version: 6.0.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@types/node': specifier: ^22.15.14 - version: 22.15.14 + version: 22.15.15 packages: @@ -152,135 +155,135 @@ packages: '@aws-crypto/util@5.2.0': resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} - '@aws-sdk/client-cognito-identity@3.799.0': - resolution: {integrity: sha512-gg1sncxYDpYWetey3v/nw9zSkL/Vj2potpeO9sYWY2brcm8SbGh106I6IM/gX6KnY9Y2Bre8xb+JoZGz6ntcnw==} + '@aws-sdk/client-cognito-identity@3.804.0': + resolution: {integrity: sha512-l4R2usRE9WHGK9MqU94+veX70m5moUj5hB+IAqI8tAZ4nAgeXpot3QKGgwdEVjKe1pKZwDP5tkHl01Umm2Ir7w==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-s3@3.802.0': - resolution: {integrity: sha512-YIwLLiqRZArEmRI94X8MOpWuXlmxI3NnxYv+3kk6HIc2YWPaOAf0YN7vWlnQFWo6Yi1gBRtP0HM8WzK4Bn5ORQ==} + '@aws-sdk/client-s3@3.804.0': + resolution: {integrity: sha512-oLBCq/wOzMEv4HhEDxttl5km0KGuptqnl4MlzzDcxPpsDmXjQU7egZdfQtwKRlB7748F+/uTcYc7khFvX2I1DA==} engines: {node: '>=18.0.0'} - '@aws-sdk/client-sso@3.799.0': - resolution: {integrity: sha512-/i/LG7AiWPmPxKCA2jnR2zaf7B3HYSTbxaZI21ElIz9wASlNAsKr8CnLY7qb50kOyXiNfQ834S5Q3Gl8dX9o3Q==} + '@aws-sdk/client-sso@3.804.0': + resolution: {integrity: sha512-6D5iQbL0MqlJ7B5aaHdP21k9+3H/od0jHjHSXegvFd4h2KQbD+QVTdEOSLeakgBGgHYRfiQXsrdMMzUz8vcpsw==} engines: {node: '>=18.0.0'} - '@aws-sdk/core@3.799.0': - resolution: {integrity: sha512-hkKF3Zpc6+H8GI1rlttYVRh9uEE77cqAzLmLpY3iu7sql8cZgPERRBfaFct8p1SaDyrksLNiboD1vKW58mbsYg==} + '@aws-sdk/core@3.804.0': + resolution: {integrity: sha512-KrYDEc6HaJE+Mx5lrwq6uhJxj1RYYfggQ+X+zQeKRyrZHl2GOxFl7PdnpdwtnaQIjX0gNkDzquhZSdyT0ar5rA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-cognito-identity@3.799.0': - resolution: {integrity: sha512-qHOqGsvt/z1bvjJRzndW8VaRfbGBhoETZpoRYNbfCbrNH2IRM98KRUlYH1EJ1wFFkT0gUDJr+oIOUCvRlgRW1Q==} + '@aws-sdk/credential-provider-cognito-identity@3.804.0': + resolution: {integrity: sha512-bAk/1McqERHl7LbmbqD5ZGlyyO10N80+YiM/2NI2HXd8MKm/7roZBGEQH8VH2pDDZsWnI4c24rue4xFEmH+gjw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-env@3.799.0': - resolution: {integrity: sha512-vT/SSWtbUIOW/U21qgEySmmO44SFWIA7WeQPX1OrI8WJ5n7OEI23JWLHjLvHTkYmuZK6z1rPcv7HzRgmuGRibA==} + '@aws-sdk/credential-provider-env@3.804.0': + resolution: {integrity: sha512-5mjrWPa4iaBK9/HDEIVN8lGxsnjk60eBjwGaJV0I2uqxnTo1EuQmpLV3XdY/OzQeqJdpuH/DbC6XUIdy9bXNQA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-http@3.799.0': - resolution: {integrity: sha512-2CjBpOWmhaPAExOgHnIB5nOkS5ef+mfRlJ1JC4nsnjAx0nrK4tk0XRE0LYz11P3+ue+a86cU8WTmBo+qjnGxPQ==} + '@aws-sdk/credential-provider-http@3.804.0': + resolution: {integrity: sha512-TD84TXS/iDWcf+ggCq3n6yx36p1WXB2qgyHkbP/yVbdmix/vKU1twuB5qJvaY0PJWI0TOwBa9680XfsYrzaJAA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-ini@3.799.0': - resolution: {integrity: sha512-M9ubILFxerqw4QJwk83MnjtZyoA2eNCiea5V+PzZeHlwk2PON/EnawKqy65x9/hMHGoSvvNuby7iMAmPptu7yw==} + '@aws-sdk/credential-provider-ini@3.804.0': + resolution: {integrity: sha512-LfReL9TnOOunJWeZbDXPePFEnvJE+jcA7iY/ItsThUALgTy+ydLUdOiwzMZFo1f0JZN/Rfrsb9FOd/xTOoZiFw==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-node@3.799.0': - resolution: {integrity: sha512-nd9fSJc0wUlgKUkIr2ldJhcIIrzJFS29AGZoyY22J3xih63nNDv61eTGVMsDZzHlV21XzMlPEljTR7axiimckg==} + '@aws-sdk/credential-provider-node@3.804.0': + resolution: {integrity: sha512-L2EK5fy2+7El7j7TcRcuwr2lzU5tQfXsfscg+dtFkLPjOqShknnqV/lXylb3QlWx8B3K/c/KK5rcWQl6cYUiDQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-process@3.799.0': - resolution: {integrity: sha512-g8jmNs2k98WNHMYcea1YKA+7ao2Ma4w0P42Dz4YpcI155pQHxHx25RwbOG+rsAKuo3bKwkW53HVE/ZTKhcWFgw==} + '@aws-sdk/credential-provider-process@3.804.0': + resolution: {integrity: sha512-s6ng/rZj7WP8GGgxBXsoPZYlSu7MZAm9O8OLgSSWcw8/vaYW7hBVSEVVNMEUkJiJeEo7Lh+Y/3d6SY27S1of/g==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-sso@3.799.0': - resolution: {integrity: sha512-lQv27QkNU9FJFZqEf5DIEN3uXEN409Iaym9WJzhOouGtxvTIAWiD23OYh1u8PvBdrordJGS2YddfQvhcmq9akw==} + '@aws-sdk/credential-provider-sso@3.804.0': + resolution: {integrity: sha512-9Tt5zmhiK2nBfJv52Is5gNtW6bhK0W20GRhckg4T+BlnxOkPy//2ui23DzYacrwETH6TE3kdoyL3xgEL++HSLg==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-provider-web-identity@3.799.0': - resolution: {integrity: sha512-8k1i9ut+BEg0QZ+I6UQMxGNR1T8paLmAOAZXU+nLQR0lcxS6lr8v+dqofgzQPuHLBkWNCr1Av1IKeL3bJjgU7g==} + '@aws-sdk/credential-provider-web-identity@3.804.0': + resolution: {integrity: sha512-eBICjQUnqaoiHl9/AHKVPt/YkrifDddAUNGWUj+9cb3bRml6PEBSHE0k/tbbCTMq1xz7CCP+gmnnAA92ChnseA==} engines: {node: '>=18.0.0'} - '@aws-sdk/credential-providers@3.799.0': - resolution: {integrity: sha512-Gk10skoEri6zsCPxn34Zpu6Z1B5R3RLwqDw1krNl+B1P749gB6i7XULXZUOotqpum0T0q4euOwAB8XWuTOkKew==} + '@aws-sdk/credential-providers@3.804.0': + resolution: {integrity: sha512-qDPsrmp4Z35T5Rprg4+mnZF+xz1cqMJYuwB3KuBaOyJ7ja5UlMthhnCEs2mwqSZZ3oLELSLEuWLio5hgmGbjLg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-bucket-endpoint@3.775.0': - resolution: {integrity: sha512-qogMIpVChDYr4xiUNC19/RDSw/sKoHkAhouS6Skxiy6s27HBhow1L3Z1qVYXuBmOZGSWPU0xiyZCvOyWrv9s+Q==} + '@aws-sdk/middleware-bucket-endpoint@3.804.0': + resolution: {integrity: sha512-vVphifJ5Ab2JUjB27UvdNV51ezxTn3f/jNbC/Y+KF1vNcYkwWXqo+U1gD8SUsDK+NhnD3wasfVBVLOdJa7qqKw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-expect-continue@3.775.0': - resolution: {integrity: sha512-Apd3owkIeUW5dnk3au9np2IdW2N0zc9NjTjHiH+Mx3zqwSrc+m+ANgJVgk9mnQjMzU/vb7VuxJ0eqdEbp5gYsg==} + '@aws-sdk/middleware-expect-continue@3.804.0': + resolution: {integrity: sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-flexible-checksums@3.799.0': - resolution: {integrity: sha512-vBIAdDl2neaFiUMxyr7dAtX7m9Iw5c0bz7OirD0JGW0nYn0mBcqKpFZEU75ewA5p2+Cm7RQDdt6099ne3gj0WA==} + '@aws-sdk/middleware-flexible-checksums@3.804.0': + resolution: {integrity: sha512-bQbh3hTrp+3XEuu8G5DkPDK9u3nnIabw2N1GpqlIwv8oGM+GTtGH35gBZtbbd2WAxfSUIBOAwkc86kTS0g0mFg==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-host-header@3.775.0': - resolution: {integrity: sha512-tkSegM0Z6WMXpLB8oPys/d+umYIocvO298mGvcMCncpRl77L9XkvSLJIFzaHes+o7djAgIduYw8wKIMStFss2w==} + '@aws-sdk/middleware-host-header@3.804.0': + resolution: {integrity: sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-location-constraint@3.775.0': - resolution: {integrity: sha512-8TMXEHZXZTFTckQLyBT5aEI8fX11HZcwZseRifvBKKpj0RZDk4F0EEYGxeNSPpUQ7n+PRWyfAEnnZNRdAj/1NQ==} + '@aws-sdk/middleware-location-constraint@3.804.0': + resolution: {integrity: sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-logger@3.775.0': - resolution: {integrity: sha512-FaxO1xom4MAoUJsldmR92nT1G6uZxTdNYOFYtdHfd6N2wcNaTuxgjIvqzg5y7QIH9kn58XX/dzf1iTjgqUStZw==} + '@aws-sdk/middleware-logger@3.804.0': + resolution: {integrity: sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-recursion-detection@3.775.0': - resolution: {integrity: sha512-GLCzC8D0A0YDG5u3F5U03Vb9j5tcOEFhr8oc6PDk0k0vm5VwtZOE6LvK7hcCSoAB4HXyOUM0sQuXrbaAh9OwXA==} + '@aws-sdk/middleware-recursion-detection@3.804.0': + resolution: {integrity: sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-sdk-s3@3.799.0': - resolution: {integrity: sha512-Zwdge5NArgcJwPuGZwgfXY6XXkWEBmMS9dqu5g3DcfHmZUuSjQUqmOsDdSZlE3RFHrDAEbuGQlrFUE8zuwdKQA==} + '@aws-sdk/middleware-sdk-s3@3.804.0': + resolution: {integrity: sha512-kiuqjV2ozoyI6w34+KMhZU+YVOLTPgh1Kp1DSpuS+tbkwkxnQCrPGziQhuSA5/Y0bUFaa2zLwUh2jpCmJQbLyA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-ssec@3.775.0': - resolution: {integrity: sha512-Iw1RHD8vfAWWPzBBIKaojO4GAvQkHOYIpKdAfis/EUSUmSa79QsnXnRqsdcE0mCB0Ylj23yi+ah4/0wh9FsekA==} + '@aws-sdk/middleware-ssec@3.804.0': + resolution: {integrity: sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==} engines: {node: '>=18.0.0'} - '@aws-sdk/middleware-user-agent@3.799.0': - resolution: {integrity: sha512-TropQZanbOTxa+p+Nl4fWkzlRhgFwDfW+Wb6TR3jZN7IXHNlPpgGFpdrgvBExhW/RBhqr+94OsR8Ou58lp3hhA==} + '@aws-sdk/middleware-user-agent@3.804.0': + resolution: {integrity: sha512-HoBaun4t3vAFhMj/I7L/HNBKBrAYu7Sb5bTFINx8kFCxPbqsvF+jOrEE8WiljHNy7FbPjz0mPVRUwO7RZSYNiQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/nested-clients@3.799.0': - resolution: {integrity: sha512-zILlWh7asrcQG9JYMYgnvEQBfwmWKfED0yWCf3UNAmQcfS9wkCAWCgicNy/y5KvNvEYnHidsU117STtyuUNG5g==} + '@aws-sdk/nested-clients@3.804.0': + resolution: {integrity: sha512-IOUcw6stjqYBMhLoAXlLVipYpAqLlA17jcyI0OzpS0pTD1RvBqEBckYibF4HJeReI+IiEHu/m0If0SKVR5WyXQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/region-config-resolver@3.775.0': - resolution: {integrity: sha512-40iH3LJjrQS3LKUJAl7Wj0bln7RFPEvUYKFxtP8a+oKFDO0F65F52xZxIJbPn6sHkxWDAnZlGgdjZXM3p2g5wQ==} + '@aws-sdk/region-config-resolver@3.804.0': + resolution: {integrity: sha512-Qlr8jVUL5U8Ej+84ElUTGeOok6hQXcJdx5IOSRoqKs6bCKVa8TtwgX1zZIajzjMhMgMlR3/V+M8oDVDKPB43Ug==} engines: {node: '>=18.0.0'} - '@aws-sdk/signature-v4-multi-region@3.800.0': - resolution: {integrity: sha512-c71wZuiSUHNFCvcuqOv3jbqP+NquB2YKN4qX90OwYXEqUKn8F8fKJPpjjHjz1eK6qWKtECR4V/NTno2P70Yz/Q==} + '@aws-sdk/signature-v4-multi-region@3.804.0': + resolution: {integrity: sha512-6wxi+f/uvddm2PVRG1gDkjnukfwhEtu3JUAvGqQ56VWbDyM69pxPnGjcwoxCKf0dX16mU8+kHT5CpXsRIpEkkw==} engines: {node: '>=18.0.0'} - '@aws-sdk/token-providers@3.799.0': - resolution: {integrity: sha512-/8iDjnsJs/D8AhGbDAmdF5oSHzE4jsDsM2RIIxmBAKTZXkaaclQBNX9CmAqLKQmO3IUMZsDH2KENHLVAk/N/mw==} + '@aws-sdk/token-providers@3.804.0': + resolution: {integrity: sha512-ndcLGD1nHEVJdWRl0lK8SfC0dN4j3X4gcGXEJxK16KZD23veMB2adHP69ySYXNFNo5gI6W9Ct9QXnB+tJCCS1Q==} engines: {node: '>=18.0.0'} - '@aws-sdk/types@3.775.0': - resolution: {integrity: sha512-ZoGKwa4C9fC9Av6bdfqcW6Ix5ot05F/S4VxWR2nHuMv7hzfmAjTOcUiWT7UR4hM/U0whf84VhDtXN/DWAk52KA==} + '@aws-sdk/types@3.804.0': + resolution: {integrity: sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-arn-parser@3.723.0': - resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} + '@aws-sdk/util-arn-parser@3.804.0': + resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-endpoints@3.787.0': - resolution: {integrity: sha512-fd3zkiOkwnbdbN0Xp9TsP5SWrmv0SpT70YEdbb8wAj2DWQwiCmFszaSs+YCvhoCdmlR3Wl9Spu0pGpSAGKeYvQ==} + '@aws-sdk/util-endpoints@3.804.0': + resolution: {integrity: sha512-mT2R1De1fBT3vgm00ELVFoaArblW3PqGUCVteGGSUdJA525To7h6xPThrNrw3Dn8blAcR8VYGYte/JX7vKgFxw==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-locate-window@3.723.0': - resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + '@aws-sdk/util-locate-window@3.804.0': + resolution: {integrity: sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A==} engines: {node: '>=18.0.0'} - '@aws-sdk/util-user-agent-browser@3.775.0': - resolution: {integrity: sha512-txw2wkiJmZKVdDbscK7VBK+u+TJnRtlUjRTLei+elZg2ADhpQxfVAQl436FUeIv6AhB/oRHW6/K/EAGXUSWi0A==} + '@aws-sdk/util-user-agent-browser@3.804.0': + resolution: {integrity: sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==} - '@aws-sdk/util-user-agent-node@3.799.0': - resolution: {integrity: sha512-iXBk38RbIWPF5Nq9O4AnktORAzXovSVqWYClvS1qbE7ILsnTLJbagU9HlU25O2iV5COVh1qZkwuP5NHQ2yTEyw==} + '@aws-sdk/util-user-agent-node@3.804.0': + resolution: {integrity: sha512-TacXL50ZHOeTUvN9LbHjS3muvvJNpzZp9cAtGRKpKXzlu8zCxPHrVU7dGOF6ONuNG30GpN2xzz81/XcCtg+8/A==} engines: {node: '>=18.0.0'} peerDependencies: aws-crt: '>=1.0.0' @@ -288,8 +291,8 @@ packages: aws-crt: optional: true - '@aws-sdk/xml-builder@3.775.0': - resolution: {integrity: sha512-b9NGO6FKJeLGYnV7Z1yvcP1TNU4dkD5jNsLWOF1/sygZoASaQhNOlaiJ/1OH331YQ1R1oWk38nBb0frsYkDsOQ==} + '@aws-sdk/xml-builder@3.804.0': + resolution: {integrity: sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q==} engines: {node: '>=18.0.0'} '@babel/code-frame@7.27.1': @@ -304,8 +307,8 @@ packages: resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} engines: {node: '>=6.9.0'} - '@cloudflare/workers-types@4.20250505.0': - resolution: {integrity: sha512-pLQ/UaCupEy3fTTfy7yCR7FuAbawvCohYAdadGHPUfzssksA9MhkqBLlzYWRwIoC34R8grVn4XOCknEg+NMr0Q==} + '@cloudflare/workers-types@4.20250507.0': + resolution: {integrity: sha512-fkrq7A6XWgPEmXJDwu9TS/Zw7qho3eGlrOlicKue32Bdul0Ma4Mym4sh7ZeGbayBXxkOx/fHpm5GfhVEtngRWQ==} '@colors/colors@1.6.0': resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} @@ -338,8 +341,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} + '@esbuild/aix-ppc64@0.25.4': + resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -350,8 +353,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} + '@esbuild/android-arm64@0.25.4': + resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -362,8 +365,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} + '@esbuild/android-arm@0.25.4': + resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -374,8 +377,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} + '@esbuild/android-x64@0.25.4': + resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -386,8 +389,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} + '@esbuild/darwin-arm64@0.25.4': + resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -398,8 +401,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} + '@esbuild/darwin-x64@0.25.4': + resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -410,8 +413,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} + '@esbuild/freebsd-arm64@0.25.4': + resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -422,8 +425,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} + '@esbuild/freebsd-x64@0.25.4': + resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -434,8 +437,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} + '@esbuild/linux-arm64@0.25.4': + resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -446,8 +449,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} + '@esbuild/linux-arm@0.25.4': + resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -458,8 +461,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} + '@esbuild/linux-ia32@0.25.4': + resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -470,8 +473,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} + '@esbuild/linux-loong64@0.25.4': + resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -482,8 +485,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} + '@esbuild/linux-mips64el@0.25.4': + resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -494,8 +497,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} + '@esbuild/linux-ppc64@0.25.4': + resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -506,8 +509,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} + '@esbuild/linux-riscv64@0.25.4': + resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -518,8 +521,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} + '@esbuild/linux-s390x@0.25.4': + resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -530,8 +533,8 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} + '@esbuild/linux-x64@0.25.4': + resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==} engines: {node: '>=18'} cpu: [x64] os: [linux] @@ -542,8 +545,8 @@ packages: cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} + '@esbuild/netbsd-arm64@0.25.4': + resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -554,8 +557,8 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} + '@esbuild/netbsd-x64@0.25.4': + resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] @@ -566,8 +569,8 @@ packages: cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} + '@esbuild/openbsd-arm64@0.25.4': + resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -578,8 +581,8 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} + '@esbuild/openbsd-x64@0.25.4': + resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] @@ -590,8 +593,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} + '@esbuild/sunos-x64@0.25.4': + resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -602,8 +605,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} + '@esbuild/win32-arm64@0.25.4': + resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -614,8 +617,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} + '@esbuild/win32-ia32@0.25.4': + resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -626,8 +629,8 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} + '@esbuild/win32-x64@0.25.4': + resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -924,8 +927,8 @@ packages: '@push.rocks/smartlog@3.0.7': resolution: {integrity: sha512-WHOw0iHHjCEbYY4KGX40iFtLI11QJvvWIbC9yFn3Mt+nrdupMnry7Ztc5v/PqO8lu33Q6xDBMXiNQ9yNY0HVGw==} - '@push.rocks/smartmail@2.0.1': - resolution: {integrity: sha512-cqGyhIjtTqAg0hf9ChxLANyezX7JC4sXAM7I84pOdLLKG157/lj0Uch/oWd3PcjSA45x7xAZ8ZMeSHxhbn+LEA==} + '@push.rocks/smartmail@2.1.0': + resolution: {integrity: sha512-PUzxHuDQRdUZGKb5CejjkFr4JyRAZjUmEyX0jL/kTr9BEX+Ba+/t0cAOFC4v/xFbIxvFAlF3VvFtULCbgAvwaA==} '@push.rocks/smartmanifest@2.0.2': resolution: {integrity: sha512-QGc5C9vunjfUbYsPGz5bynV/mVmPHkrQDkWp8ZO8VJtK1GZe+njgbrNyxn2SUHR0IhSAbSXl1j4JvBqYf5eTVg==} @@ -1215,8 +1218,8 @@ packages: resolution: {integrity: sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==} engines: {node: '>=18.0.0'} - '@smithy/core@3.3.0': - resolution: {integrity: sha512-r6gvs5OfRq/w+9unPm7B3po4rmWaGh0CIL/OwHntGGux7+RhOOZLGuurbeMgWV6W55ZuyMTypJLeH0vn/ZRaWQ==} + '@smithy/core@3.3.1': + resolution: {integrity: sha512-W7AppgQD3fP1aBmo8wWo0id5zeR2/aYRy067vZsDVaa6v/mdhkg6DxXwEVuSPjZl+ZnvWAQbUMCd5ckw38+tHQ==} engines: {node: '>=18.0.0'} '@smithy/credential-provider-imds@4.0.2': @@ -1279,12 +1282,12 @@ packages: resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} engines: {node: '>=18.0.0'} - '@smithy/middleware-endpoint@4.1.1': - resolution: {integrity: sha512-z5RmcHxjvScL+LwEDU2mTNCOhgUs4lu5PGdF1K36IPRmUHhNFxNxgenSB7smyDiYD4vdKQ7CAZtG5cUErqib9w==} + '@smithy/middleware-endpoint@4.1.2': + resolution: {integrity: sha512-EqOy3xaEGQpsKxLlzYstDRJ8eY90CbyBP4cl+w7r45mE60S8YliyL9AgWsdWcyNiB95E2PMqHBEv67nNl1zLfg==} engines: {node: '>=18.0.0'} - '@smithy/middleware-retry@4.1.2': - resolution: {integrity: sha512-qN/Mmxm8JWtFAjozJ8VSTM83KOX4cIks8UjDqqNkKIegzPrE5ZKPNCQ/DqUSIF90pue5a/NycNXnBod2NwvZZQ==} + '@smithy/middleware-retry@4.1.3': + resolution: {integrity: sha512-AsJtI9KiFoEGAhcEKZyzzPfrszAQGcf4HSYKmenz0WGx/6YNvoPPv4OSGfZTCsDmgPHv4pXzxE+7QV7jcGWNKw==} engines: {node: '>=18.0.0'} '@smithy/middleware-serde@4.0.3': @@ -1331,8 +1334,8 @@ packages: resolution: {integrity: sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==} engines: {node: '>=18.0.0'} - '@smithy/smithy-client@4.2.1': - resolution: {integrity: sha512-fbniZef60QdsBc4ZY0iyI8xbFHIiC/QRtPi66iE4ufjiE/aaz7AfUXzcWMkpO8r+QhLeNRIfmPchIG+3/QDZ6g==} + '@smithy/smithy-client@4.2.2': + resolution: {integrity: sha512-3AnHfsMdq9Wg7+3BeR1HuLWI9+DMA/SoHVpCWq6xSsa52ikNd6nlF/wFzdpHyGtVa+Aji6lMgvwOF4sGcVA7SA==} engines: {node: '>=18.0.0'} '@smithy/types@4.2.0': @@ -1367,12 +1370,12 @@ packages: resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-browser@4.0.9': - resolution: {integrity: sha512-B8j0XsElvyhv6+5hlFf6vFV/uCSyLKcInpeXOGnOImX2mGXshE01RvPoGipTlRpIk53e6UfYj7WdDdgbVfXDZw==} + '@smithy/util-defaults-mode-browser@4.0.10': + resolution: {integrity: sha512-2k6fgUNOZ1Rn0gEjvGPGrDEINLG8qSBHsN7xlkkbO+fnHJ36BQPDzhFfMmYSDS8AgzoygqQiDOQ+6Hp2vBTUdA==} engines: {node: '>=18.0.0'} - '@smithy/util-defaults-mode-node@4.0.9': - resolution: {integrity: sha512-wTDU8P/zdIf9DOpV5qm64HVgGRXvqjqB/fJZTEQbrz3s79JHM/E7XkMm/876Oq+ZLHJQgnXM9QHDo29dlM62eA==} + '@smithy/util-defaults-mode-node@4.0.10': + resolution: {integrity: sha512-2XR1WRglLVmoIFts7bODUTgBdVyvkfKNkydHrlsI5VxW9q3s1hnJCuY+f1OHzvj5ue23q4vydM2fjrMjf2HSdQ==} engines: {node: '>=18.0.0'} '@smithy/util-endpoints@3.0.2': @@ -1466,8 +1469,8 @@ packages: '@types/chai@4.3.20': resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} - '@types/chai@5.2.1': - resolution: {integrity: sha512-iu1JLYmGmITRzUgNiLMZD3WCoFzpYtueuyAgHTXqgwSRAMIlFTnZqG6/xenkpUGRJEzSfklUTI4GNSzks/dc0w==} + '@types/chai@5.2.2': + resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} '@types/clean-css@4.2.11': resolution: {integrity: sha512-Y8n81lQVTAfP2TOdtJJEsCoYl1AnOkqDqMvXb9/7pfgZZ7r8YrEyurrAvAoAjHOGXKRybay+5CsExqIH6liccw==} @@ -1608,11 +1611,11 @@ packages: '@types/node-forge@1.3.11': resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} - '@types/node@18.19.97': - resolution: {integrity: sha512-4r3Y9EuCJjWduiam85Fo4GBQtneaEuoaBSdiKo+o6qwQUh0JFVBe7cRUK6I6yVzA0S1gBJJfoQx4VtBH4e5ikg==} + '@types/node@18.19.98': + resolution: {integrity: sha512-+bP9tunb6pQbV5cV4z9EwCD/811rXGwXXI/cNK+8MIcm7Ufe9GWGoz91ERuC4MAn5Yp/SEWNYulaQdRHFG67iw==} - '@types/node@22.15.14': - resolution: {integrity: sha512-BL1eyu/XWsFGTtDWOYULQEs4KR0qdtYfCxYAUYRoB7JP7h9ETYLgQTww6kH8Sj2C0pFGgrpM0XKv6/kbIzYJ1g==} + '@types/node@22.15.15': + resolution: {integrity: sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==} '@types/parse5@6.0.3': resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} @@ -2013,8 +2016,8 @@ packages: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - chromium-bidi@4.1.1: - resolution: {integrity: sha512-biR7t4vF3YluE6RlMSk9IWk+b9U+WWyzHp+N2pL9vRTk+UXHYRTVp7jTK58ZNzMLBgoLMHY4QyJMbeuw3eKxqg==} + chromium-bidi@5.1.0: + resolution: {integrity: sha512-9MSRhWRVoRPDG0TgzkHrshFSJJNZzfY5UFqUMuksg7zL1yoZIZ3jLB0YAgHclbiAxPI86pBnwDX1tbzoiV8aFw==} peerDependencies: devtools-protocol: '*' @@ -2428,8 +2431,8 @@ packages: engines: {node: '>=18'} hasBin: true - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} + esbuild@0.25.4: + resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==} engines: {node: '>=18'} hasBin: true @@ -3920,12 +3923,12 @@ packages: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - puppeteer-core@24.8.0: - resolution: {integrity: sha512-tDf2YKIo5kM5r0vOzT52+PTgN0bBZOA4OFgQaqYyfarrcXLLJ92wi/lSMe44hd+F+gk0gw9QsAzyRW8v6ra93w==} + puppeteer-core@24.8.1: + resolution: {integrity: sha512-UP/VIxVk/Akrgql3a55ZAIuAIx7+yQevz6qEXFUtSTIynEcgsCJ6tlRdi7uKAAlovmNQG4iNMzq9f8WxZLnGGg==} engines: {node: '>=18'} - puppeteer@24.8.0: - resolution: {integrity: sha512-8GPlUKXvZK8ANxab75UerMar14ZnJTJpPok3XN9Nx6f7SKyabyFK39pQruMni6zfrwVBrPXp3Mo6ztwKEmXaDQ==} + puppeteer@24.8.1: + resolution: {integrity: sha512-5OvJCe6tQ09EWf35qqyoH/cr9YGMbLj0ZpoT2pEImF9Ox35JXyAn8kIqj8eBgpDfyzuEwXYIMUwIAIkdgO/gDA==} engines: {node: '>=18'} hasBin: true @@ -4429,8 +4432,8 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} - type-fest@4.40.1: - resolution: {integrity: sha512-9YvLNnORDpI+vghLU/Nf+zSv0kL47KbVJ1o3sKgoTefl6i+zebxbiDQWoe/oWWqPhIgQdRZRT1KA9sCPL810SA==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} type-is@1.6.18: @@ -4723,7 +4726,7 @@ snapshots: '@api.global/typedrequest': 3.1.10 '@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedsocket': 3.0.1 - '@cloudflare/workers-types': 4.20250505.0 + '@cloudflare/workers-types': 4.20250507.0 '@design.estate/dees-comms': 1.0.27 '@push.rocks/lik': 6.2.2 '@push.rocks/smartchok': 1.0.34 @@ -4817,21 +4820,21 @@ snapshots: '@aws-crypto/crc32@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 tslib: 2.8.1 '@aws-crypto/crc32c@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 tslib: 2.8.1 '@aws-crypto/sha1-browser@5.2.0': dependencies: '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-locate-window': 3.723.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.804.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 @@ -4840,15 +4843,15 @@ snapshots: '@aws-crypto/sha256-js': 5.2.0 '@aws-crypto/supports-web-crypto': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-locate-window': 3.723.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.804.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 '@aws-crypto/sha256-js@5.2.0': dependencies: '@aws-crypto/util': 5.2.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 tslib: 2.8.1 '@aws-crypto/supports-web-crypto@5.2.0': @@ -4857,46 +4860,46 @@ snapshots: '@aws-crypto/util@5.2.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/util-utf8': 2.3.0 tslib: 2.8.1 - '@aws-sdk/client-cognito-identity@3.799.0': + '@aws-sdk/client-cognito-identity@3.804.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/credential-provider-node': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/credential-provider-node': 3.804.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.804.0 + '@aws-sdk/region-config-resolver': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.804.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.804.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.1 - '@smithy/middleware-retry': 4.1.2 + '@smithy/middleware-endpoint': 4.1.2 + '@smithy/middleware-retry': 4.1.3 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.9 - '@smithy/util-defaults-mode-node': 4.0.9 + '@smithy/util-defaults-mode-browser': 4.0.10 + '@smithy/util-defaults-mode-node': 4.0.10 '@smithy/util-endpoints': 3.0.2 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -4906,32 +4909,32 @@ snapshots: - aws-crt optional: true - '@aws-sdk/client-s3@3.802.0': + '@aws-sdk/client-s3@3.804.0': dependencies: '@aws-crypto/sha1-browser': 5.2.0 '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/credential-provider-node': 3.799.0 - '@aws-sdk/middleware-bucket-endpoint': 3.775.0 - '@aws-sdk/middleware-expect-continue': 3.775.0 - '@aws-sdk/middleware-flexible-checksums': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-location-constraint': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-sdk-s3': 3.799.0 - '@aws-sdk/middleware-ssec': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/signature-v4-multi-region': 3.800.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 - '@aws-sdk/xml-builder': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/credential-provider-node': 3.804.0 + '@aws-sdk/middleware-bucket-endpoint': 3.804.0 + '@aws-sdk/middleware-expect-continue': 3.804.0 + '@aws-sdk/middleware-flexible-checksums': 3.804.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-location-constraint': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-sdk-s3': 3.804.0 + '@aws-sdk/middleware-ssec': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.804.0 + '@aws-sdk/region-config-resolver': 3.804.0 + '@aws-sdk/signature-v4-multi-region': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.804.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.804.0 + '@aws-sdk/xml-builder': 3.804.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/eventstream-serde-browser': 4.0.2 '@smithy/eventstream-serde-config-resolver': 4.1.0 '@smithy/eventstream-serde-node': 4.0.2 @@ -4942,21 +4945,21 @@ snapshots: '@smithy/invalid-dependency': 4.0.2 '@smithy/md5-js': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.1 - '@smithy/middleware-retry': 4.1.2 + '@smithy/middleware-endpoint': 4.1.2 + '@smithy/middleware-retry': 4.1.3 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.9 - '@smithy/util-defaults-mode-node': 4.0.9 + '@smithy/util-defaults-mode-browser': 4.0.10 + '@smithy/util-defaults-mode-node': 4.0.10 '@smithy/util-endpoints': 3.0.2 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -4967,41 +4970,41 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/client-sso@3.799.0': + '@aws-sdk/client-sso@3.804.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.804.0 + '@aws-sdk/region-config-resolver': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.804.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.804.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.1 - '@smithy/middleware-retry': 4.1.2 + '@smithy/middleware-endpoint': 4.1.2 + '@smithy/middleware-retry': 4.1.3 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.9 - '@smithy/util-defaults-mode-node': 4.0.9 + '@smithy/util-defaults-mode-browser': 4.0.10 + '@smithy/util-defaults-mode-node': 4.0.10 '@smithy/util-endpoints': 3.0.2 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -5010,24 +5013,24 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/core@3.799.0': + '@aws-sdk/core@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 - '@smithy/core': 3.3.0 + '@aws-sdk/types': 3.804.0 + '@smithy/core': 3.3.1 '@smithy/node-config-provider': 4.0.2 '@smithy/property-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/signature-v4': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/util-middleware': 4.0.2 fast-xml-parser: 4.4.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-cognito-identity@3.799.0': + '@aws-sdk/credential-provider-cognito-identity@3.804.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/client-cognito-identity': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -5035,37 +5038,37 @@ snapshots: - aws-crt optional: true - '@aws-sdk/credential-provider-env@3.799.0': + '@aws-sdk/credential-provider-env@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.799.0': + '@aws-sdk/credential-provider-http@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/fetch-http-handler': 5.0.2 '@smithy/node-http-handler': 4.0.4 '@smithy/property-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/util-stream': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.799.0': + '@aws-sdk/credential-provider-ini@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/credential-provider-env': 3.799.0 - '@aws-sdk/credential-provider-http': 3.799.0 - '@aws-sdk/credential-provider-process': 3.799.0 - '@aws-sdk/credential-provider-sso': 3.799.0 - '@aws-sdk/credential-provider-web-identity': 3.799.0 - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/credential-provider-env': 3.804.0 + '@aws-sdk/credential-provider-http': 3.804.0 + '@aws-sdk/credential-provider-process': 3.804.0 + '@aws-sdk/credential-provider-sso': 3.804.0 + '@aws-sdk/credential-provider-web-identity': 3.804.0 + '@aws-sdk/nested-clients': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/credential-provider-imds': 4.0.2 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 @@ -5074,15 +5077,15 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-node@3.799.0': + '@aws-sdk/credential-provider-node@3.804.0': dependencies: - '@aws-sdk/credential-provider-env': 3.799.0 - '@aws-sdk/credential-provider-http': 3.799.0 - '@aws-sdk/credential-provider-ini': 3.799.0 - '@aws-sdk/credential-provider-process': 3.799.0 - '@aws-sdk/credential-provider-sso': 3.799.0 - '@aws-sdk/credential-provider-web-identity': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/credential-provider-env': 3.804.0 + '@aws-sdk/credential-provider-http': 3.804.0 + '@aws-sdk/credential-provider-ini': 3.804.0 + '@aws-sdk/credential-provider-process': 3.804.0 + '@aws-sdk/credential-provider-sso': 3.804.0 + '@aws-sdk/credential-provider-web-identity': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/credential-provider-imds': 4.0.2 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 @@ -5091,21 +5094,21 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-process@3.799.0': + '@aws-sdk/credential-provider-process@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.799.0': + '@aws-sdk/credential-provider-sso@3.804.0': dependencies: - '@aws-sdk/client-sso': 3.799.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/token-providers': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/client-sso': 3.804.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/token-providers': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 @@ -5113,33 +5116,33 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-provider-web-identity@3.799.0': + '@aws-sdk/credential-provider-web-identity@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/nested-clients': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 transitivePeerDependencies: - aws-crt - '@aws-sdk/credential-providers@3.799.0': + '@aws-sdk/credential-providers@3.804.0': dependencies: - '@aws-sdk/client-cognito-identity': 3.799.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/credential-provider-cognito-identity': 3.799.0 - '@aws-sdk/credential-provider-env': 3.799.0 - '@aws-sdk/credential-provider-http': 3.799.0 - '@aws-sdk/credential-provider-ini': 3.799.0 - '@aws-sdk/credential-provider-node': 3.799.0 - '@aws-sdk/credential-provider-process': 3.799.0 - '@aws-sdk/credential-provider-sso': 3.799.0 - '@aws-sdk/credential-provider-web-identity': 3.799.0 - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/client-cognito-identity': 3.804.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/credential-provider-cognito-identity': 3.804.0 + '@aws-sdk/credential-provider-env': 3.804.0 + '@aws-sdk/credential-provider-http': 3.804.0 + '@aws-sdk/credential-provider-ini': 3.804.0 + '@aws-sdk/credential-provider-node': 3.804.0 + '@aws-sdk/credential-provider-process': 3.804.0 + '@aws-sdk/credential-provider-sso': 3.804.0 + '@aws-sdk/credential-provider-web-identity': 3.804.0 + '@aws-sdk/nested-clients': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/credential-provider-imds': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/property-provider': 4.0.2 @@ -5149,30 +5152,30 @@ snapshots: - aws-crt optional: true - '@aws-sdk/middleware-bucket-endpoint@3.775.0': + '@aws-sdk/middleware-bucket-endpoint@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-arn-parser': 3.723.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 '@smithy/node-config-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-expect-continue@3.775.0': + '@aws-sdk/middleware-expect-continue@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-flexible-checksums@3.799.0': + '@aws-sdk/middleware-flexible-checksums@3.804.0': dependencies: '@aws-crypto/crc32': 5.2.0 '@aws-crypto/crc32c': 5.2.0 '@aws-crypto/util': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/is-array-buffer': 4.0.0 '@smithy/node-config-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 @@ -5182,42 +5185,42 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-host-header@3.775.0': + '@aws-sdk/middleware-host-header@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-location-constraint@3.775.0': + '@aws-sdk/middleware-location-constraint@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-logger@3.775.0': + '@aws-sdk/middleware-logger@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-recursion-detection@3.775.0': + '@aws-sdk/middleware-recursion-detection@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.799.0': + '@aws-sdk/middleware-sdk-s3@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-arn-parser': 3.723.0 - '@smithy/core': 3.3.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/core': 3.3.1 '@smithy/node-config-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/signature-v4': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.2 @@ -5225,57 +5228,57 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@aws-sdk/middleware-ssec@3.775.0': + '@aws-sdk/middleware-ssec@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/middleware-user-agent@3.799.0': + '@aws-sdk/middleware-user-agent@3.804.0': dependencies: - '@aws-sdk/core': 3.799.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@smithy/core': 3.3.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.804.0 + '@smithy/core': 3.3.1 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.799.0': + '@aws-sdk/nested-clients@3.804.0': dependencies: '@aws-crypto/sha256-browser': 5.2.0 '@aws-crypto/sha256-js': 5.2.0 - '@aws-sdk/core': 3.799.0 - '@aws-sdk/middleware-host-header': 3.775.0 - '@aws-sdk/middleware-logger': 3.775.0 - '@aws-sdk/middleware-recursion-detection': 3.775.0 - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/region-config-resolver': 3.775.0 - '@aws-sdk/types': 3.775.0 - '@aws-sdk/util-endpoints': 3.787.0 - '@aws-sdk/util-user-agent-browser': 3.775.0 - '@aws-sdk/util-user-agent-node': 3.799.0 + '@aws-sdk/core': 3.804.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.804.0 + '@aws-sdk/region-config-resolver': 3.804.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.804.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.804.0 '@smithy/config-resolver': 4.1.0 - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/fetch-http-handler': 5.0.2 '@smithy/hash-node': 4.0.2 '@smithy/invalid-dependency': 4.0.2 '@smithy/middleware-content-length': 4.0.2 - '@smithy/middleware-endpoint': 4.1.1 - '@smithy/middleware-retry': 4.1.2 + '@smithy/middleware-endpoint': 4.1.2 + '@smithy/middleware-retry': 4.1.3 '@smithy/middleware-serde': 4.0.3 '@smithy/middleware-stack': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/node-http-handler': 4.0.4 '@smithy/protocol-http': 5.1.0 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/url-parser': 4.0.2 '@smithy/util-base64': 4.0.0 '@smithy/util-body-length-browser': 4.0.0 '@smithy/util-body-length-node': 4.0.0 - '@smithy/util-defaults-mode-browser': 4.0.9 - '@smithy/util-defaults-mode-node': 4.0.9 + '@smithy/util-defaults-mode-browser': 4.0.10 + '@smithy/util-defaults-mode-node': 4.0.10 '@smithy/util-endpoints': 3.0.2 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -5284,28 +5287,28 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/region-config-resolver@3.775.0': + '@aws-sdk/region-config-resolver@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/node-config-provider': 4.0.2 '@smithy/types': 4.2.0 '@smithy/util-config-provider': 4.0.0 '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.800.0': + '@aws-sdk/signature-v4-multi-region@3.804.0': dependencies: - '@aws-sdk/middleware-sdk-s3': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/middleware-sdk-s3': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/protocol-http': 5.1.0 '@smithy/signature-v4': 5.1.0 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/token-providers@3.799.0': + '@aws-sdk/token-providers@3.804.0': dependencies: - '@aws-sdk/nested-clients': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/nested-clients': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/property-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 '@smithy/types': 4.2.0 @@ -5313,42 +5316,42 @@ snapshots: transitivePeerDependencies: - aws-crt - '@aws-sdk/types@3.775.0': + '@aws-sdk/types@3.804.0': dependencies: '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/util-arn-parser@3.723.0': + '@aws-sdk/util-arn-parser@3.804.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-endpoints@3.787.0': + '@aws-sdk/util-endpoints@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 '@smithy/util-endpoints': 3.0.2 tslib: 2.8.1 - '@aws-sdk/util-locate-window@3.723.0': + '@aws-sdk/util-locate-window@3.804.0': dependencies: tslib: 2.8.1 - '@aws-sdk/util-user-agent-browser@3.775.0': + '@aws-sdk/util-user-agent-browser@3.804.0': dependencies: - '@aws-sdk/types': 3.775.0 + '@aws-sdk/types': 3.804.0 '@smithy/types': 4.2.0 bowser: 2.11.0 tslib: 2.8.1 - '@aws-sdk/util-user-agent-node@3.799.0': + '@aws-sdk/util-user-agent-node@3.804.0': dependencies: - '@aws-sdk/middleware-user-agent': 3.799.0 - '@aws-sdk/types': 3.775.0 + '@aws-sdk/middleware-user-agent': 3.804.0 + '@aws-sdk/types': 3.804.0 '@smithy/node-config-provider': 4.0.2 '@smithy/types': 4.2.0 tslib: 2.8.1 - '@aws-sdk/xml-builder@3.775.0': + '@aws-sdk/xml-builder@3.804.0': dependencies: '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -5365,7 +5368,7 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@cloudflare/workers-types@4.20250505.0': {} + '@cloudflare/workers-types@4.20250507.0': {} '@colors/colors@1.6.0': {} @@ -5398,7 +5401,7 @@ snapshots: '@push.rocks/smartpdf': 3.2.2(typescript@5.7.3) '@push.rocks/smarttime': 4.1.1 '@tsclass/tsclass': 4.4.4 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/qrcode': 1.5.5 qrcode: 1.5.4 transitivePeerDependencies: @@ -5464,151 +5467,151 @@ snapshots: '@esbuild/aix-ppc64@0.24.2': optional: true - '@esbuild/aix-ppc64@0.25.3': + '@esbuild/aix-ppc64@0.25.4': optional: true '@esbuild/android-arm64@0.24.2': optional: true - '@esbuild/android-arm64@0.25.3': + '@esbuild/android-arm64@0.25.4': optional: true '@esbuild/android-arm@0.24.2': optional: true - '@esbuild/android-arm@0.25.3': + '@esbuild/android-arm@0.25.4': optional: true '@esbuild/android-x64@0.24.2': optional: true - '@esbuild/android-x64@0.25.3': + '@esbuild/android-x64@0.25.4': optional: true '@esbuild/darwin-arm64@0.24.2': optional: true - '@esbuild/darwin-arm64@0.25.3': + '@esbuild/darwin-arm64@0.25.4': optional: true '@esbuild/darwin-x64@0.24.2': optional: true - '@esbuild/darwin-x64@0.25.3': + '@esbuild/darwin-x64@0.25.4': optional: true '@esbuild/freebsd-arm64@0.24.2': optional: true - '@esbuild/freebsd-arm64@0.25.3': + '@esbuild/freebsd-arm64@0.25.4': optional: true '@esbuild/freebsd-x64@0.24.2': optional: true - '@esbuild/freebsd-x64@0.25.3': + '@esbuild/freebsd-x64@0.25.4': optional: true '@esbuild/linux-arm64@0.24.2': optional: true - '@esbuild/linux-arm64@0.25.3': + '@esbuild/linux-arm64@0.25.4': optional: true '@esbuild/linux-arm@0.24.2': optional: true - '@esbuild/linux-arm@0.25.3': + '@esbuild/linux-arm@0.25.4': optional: true '@esbuild/linux-ia32@0.24.2': optional: true - '@esbuild/linux-ia32@0.25.3': + '@esbuild/linux-ia32@0.25.4': optional: true '@esbuild/linux-loong64@0.24.2': optional: true - '@esbuild/linux-loong64@0.25.3': + '@esbuild/linux-loong64@0.25.4': optional: true '@esbuild/linux-mips64el@0.24.2': optional: true - '@esbuild/linux-mips64el@0.25.3': + '@esbuild/linux-mips64el@0.25.4': optional: true '@esbuild/linux-ppc64@0.24.2': optional: true - '@esbuild/linux-ppc64@0.25.3': + '@esbuild/linux-ppc64@0.25.4': optional: true '@esbuild/linux-riscv64@0.24.2': optional: true - '@esbuild/linux-riscv64@0.25.3': + '@esbuild/linux-riscv64@0.25.4': optional: true '@esbuild/linux-s390x@0.24.2': optional: true - '@esbuild/linux-s390x@0.25.3': + '@esbuild/linux-s390x@0.25.4': optional: true '@esbuild/linux-x64@0.24.2': optional: true - '@esbuild/linux-x64@0.25.3': + '@esbuild/linux-x64@0.25.4': optional: true '@esbuild/netbsd-arm64@0.24.2': optional: true - '@esbuild/netbsd-arm64@0.25.3': + '@esbuild/netbsd-arm64@0.25.4': optional: true '@esbuild/netbsd-x64@0.24.2': optional: true - '@esbuild/netbsd-x64@0.25.3': + '@esbuild/netbsd-x64@0.25.4': optional: true '@esbuild/openbsd-arm64@0.24.2': optional: true - '@esbuild/openbsd-arm64@0.25.3': + '@esbuild/openbsd-arm64@0.25.4': optional: true '@esbuild/openbsd-x64@0.24.2': optional: true - '@esbuild/openbsd-x64@0.25.3': + '@esbuild/openbsd-x64@0.25.4': optional: true '@esbuild/sunos-x64@0.24.2': optional: true - '@esbuild/sunos-x64@0.25.3': + '@esbuild/sunos-x64@0.25.4': optional: true '@esbuild/win32-arm64@0.24.2': optional: true - '@esbuild/win32-arm64@0.25.3': + '@esbuild/win32-arm64@0.25.4': optional: true '@esbuild/win32-ia32@0.24.2': optional: true - '@esbuild/win32-ia32@0.25.3': + '@esbuild/win32-ia32@0.25.4': optional: true '@esbuild/win32-x64@0.24.2': optional: true - '@esbuild/win32-x64@0.25.3': + '@esbuild/win32-x64@0.25.4': optional: true '@esm-bundle/chai@4.3.4-fix.0': @@ -5666,7 +5669,7 @@ snapshots: '@push.rocks/smartshell': 3.2.3 tsx: 4.19.4 - '@git.zone/tstest@1.0.96(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)(typescript@5.7.3)': + '@git.zone/tstest@1.0.96(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)(typescript@5.7.3)': dependencies: '@api.global/typedserver': 3.0.74 '@git.zone/tsbundle': 2.2.5 @@ -5678,7 +5681,7 @@ snapshots: '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartshell': 3.2.3 - '@push.rocks/tapbundle': 5.6.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/tapbundle': 5.6.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@types/ws': 8.18.1 figures: 6.1.0 ws: 8.18.2 @@ -5757,7 +5760,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -6060,12 +6063,12 @@ snapshots: '@push.rocks/smartlog': 3.0.7 '@push.rocks/smartpath': 5.0.18 - '@push.rocks/smartacme@7.3.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/smartacme@7.3.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@api.global/typedserver': 3.0.74 '@apiclient.xyz/cloudflare': 6.4.1 '@push.rocks/lik': 6.2.2 - '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdns': 6.2.2 '@push.rocks/smartfile': 11.2.0 @@ -6123,7 +6126,7 @@ snapshots: '@push.rocks/smartbucket@3.3.7': dependencies: - '@aws-sdk/client-s3': 3.802.0 + '@aws-sdk/client-s3': 3.804.0 '@push.rocks/smartmime': 2.0.4 '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 @@ -6169,12 +6172,12 @@ snapshots: '@types/node-forge': 1.3.11 node-forge: 1.3.1 - '@push.rocks/smartdata@5.15.1(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/smartdata@5.15.1(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@push.rocks/lik': 6.2.2 '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartlog': 3.0.7 - '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrx': 3.0.10 '@push.rocks/smartstring': 4.0.15 @@ -6182,7 +6185,7 @@ snapshots: '@push.rocks/smartunique': 3.0.9 '@push.rocks/taskbuffer': 3.1.7 '@tsclass/tsclass': 8.2.1 - mongodb: 6.16.0(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + mongodb: 6.16.0(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' @@ -6322,7 +6325,7 @@ snapshots: '@push.rocks/isounique': 1.0.5 '@push.rocks/smartlog-interfaces': 3.0.2 - '@push.rocks/smartmail@2.0.1': + '@push.rocks/smartmail@2.1.0': dependencies: '@push.rocks/smartdns': 6.2.2 '@push.rocks/smartfile': 11.2.0 @@ -6364,13 +6367,13 @@ snapshots: file-type: 19.6.0 mime: 4.0.7 - '@push.rocks/smartmongo@2.0.12(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/smartmongo@2.0.12(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@push.rocks/mongodump': 1.0.8 - '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartdata': 5.15.1(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 - mongodb-memory-server: 10.1.4(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + mongodb-memory-server: 10.1.4(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) transitivePeerDependencies: - '@aws-sdk/credential-providers' - '@mongodb-js/zstd' @@ -6473,10 +6476,10 @@ snapshots: '@push.rocks/smartpromise@4.2.3': {} - '@push.rocks/smartproxy@10.2.0(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/smartproxy@10.2.0(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@push.rocks/lik': 6.2.2 - '@push.rocks/smartacme': 7.3.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartacme': 7.3.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartnetwork': 4.0.1 '@push.rocks/smartpromise': 4.2.3 @@ -6510,7 +6513,7 @@ snapshots: dependencies: '@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartshell': 3.2.3 - puppeteer: 24.8.0(typescript@5.7.3) + puppeteer: 24.8.1(typescript@5.7.3) tree-kill: 1.2.2 transitivePeerDependencies: - bare-buffer @@ -6673,7 +6676,7 @@ snapshots: '@types/js-yaml': 3.12.10 js-yaml: 3.14.1 - '@push.rocks/tapbundle@5.6.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/tapbundle@5.6.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.2 @@ -6684,7 +6687,7 @@ snapshots: '@push.rocks/smartexpect': 1.6.1 '@push.rocks/smartfile': 11.2.0 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 2.1.0 @@ -6705,7 +6708,7 @@ snapshots: - supports-color - utf-8-validate - '@push.rocks/tapbundle@6.0.3(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4)': + '@push.rocks/tapbundle@6.0.3(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4)': dependencies: '@open-wc/testing': 4.0.0 '@push.rocks/consolecolor': 2.0.2 @@ -6716,7 +6719,7 @@ snapshots: '@push.rocks/smartexpect': 2.4.2 '@push.rocks/smartfile': 11.2.0 '@push.rocks/smartjson': 5.0.20 - '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + '@push.rocks/smartmongo': 2.0.12(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) '@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpromise': 4.2.3 '@push.rocks/smartrequest': 2.1.0 @@ -6991,7 +6994,7 @@ snapshots: '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@smithy/core@3.3.0': + '@smithy/core@3.3.1': dependencies: '@smithy/middleware-serde': 4.0.3 '@smithy/protocol-http': 5.1.0 @@ -7093,9 +7096,9 @@ snapshots: '@smithy/types': 4.2.0 tslib: 2.8.1 - '@smithy/middleware-endpoint@4.1.1': + '@smithy/middleware-endpoint@4.1.2': dependencies: - '@smithy/core': 3.3.0 + '@smithy/core': 3.3.1 '@smithy/middleware-serde': 4.0.3 '@smithy/node-config-provider': 4.0.2 '@smithy/shared-ini-file-loader': 4.0.2 @@ -7104,12 +7107,12 @@ snapshots: '@smithy/util-middleware': 4.0.2 tslib: 2.8.1 - '@smithy/middleware-retry@4.1.2': + '@smithy/middleware-retry@4.1.3': dependencies: '@smithy/node-config-provider': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/service-error-classification': 4.0.3 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 '@smithy/util-middleware': 4.0.2 '@smithy/util-retry': 4.0.3 @@ -7182,10 +7185,10 @@ snapshots: '@smithy/util-utf8': 4.0.0 tslib: 2.8.1 - '@smithy/smithy-client@4.2.1': + '@smithy/smithy-client@4.2.2': dependencies: - '@smithy/core': 3.3.0 - '@smithy/middleware-endpoint': 4.1.1 + '@smithy/core': 3.3.1 + '@smithy/middleware-endpoint': 4.1.2 '@smithy/middleware-stack': 4.0.2 '@smithy/protocol-http': 5.1.0 '@smithy/types': 4.2.0 @@ -7230,21 +7233,21 @@ snapshots: dependencies: tslib: 2.8.1 - '@smithy/util-defaults-mode-browser@4.0.9': + '@smithy/util-defaults-mode-browser@4.0.10': dependencies: '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 bowser: 2.11.0 tslib: 2.8.1 - '@smithy/util-defaults-mode-node@4.0.9': + '@smithy/util-defaults-mode-node@4.0.10': dependencies: '@smithy/config-resolver': 4.1.0 '@smithy/credential-provider-imds': 4.0.2 '@smithy/node-config-provider': 4.0.2 '@smithy/property-provider': 4.0.2 - '@smithy/smithy-client': 4.2.1 + '@smithy/smithy-client': 4.2.2 '@smithy/types': 4.2.0 tslib: 2.8.1 @@ -7322,60 +7325,60 @@ snapshots: '@tsclass/tsclass@4.4.4': dependencies: - type-fest: 4.40.1 + type-fest: 4.41.0 '@tsclass/tsclass@5.0.0': dependencies: - type-fest: 4.40.1 + type-fest: 4.41.0 '@tsclass/tsclass@8.2.1': dependencies: - type-fest: 4.40.1 + type-fest: 4.41.0 '@tsclass/tsclass@9.2.0': dependencies: - type-fest: 4.40.1 + type-fest: 4.41.0 '@types/accepts@1.3.7': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/babel__code-frame@7.0.6': {} '@types/bn.js@5.1.6': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/buffer-json@2.0.3': {} '@types/chai-dom@1.11.3': dependencies: - '@types/chai': 5.2.1 + '@types/chai': 5.2.2 '@types/chai@4.3.20': {} - '@types/chai@5.2.1': + '@types/chai@5.2.2': dependencies: '@types/deep-eql': 4.0.2 '@types/clean-css@4.2.11': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 source-map: 0.6.1 '@types/co-body@6.1.3': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/qs': 6.9.18 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/content-disposition@0.5.8': {} @@ -7386,11 +7389,11 @@ snapshots: '@types/connect': 3.4.38 '@types/express': 5.0.1 '@types/keygrip': 1.0.6 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/cors@2.8.17': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/debounce@1.2.4': {} @@ -7406,7 +7409,7 @@ snapshots: '@types/dns-packet@5.6.5': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/elliptic@6.4.18': dependencies: @@ -7414,7 +7417,7 @@ snapshots: '@types/express-serve-static-core@5.0.6': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/qs': 6.9.18 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -7431,30 +7434,30 @@ snapshots: '@types/from2@2.3.5': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/fs-extra@9.0.13': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/glob@8.1.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/gunzip-maybe@1.4.2': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/hast@3.0.4': dependencies: @@ -7488,7 +7491,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/keygrip@1.0.6': {} @@ -7505,11 +7508,11 @@ snapshots: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/mailparser@3.4.6': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 iconv-lite: 0.6.3 '@types/mdast@4.0.4': @@ -7528,18 +7531,18 @@ snapshots: '@types/node-fetch@2.6.12': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 form-data: 4.0.2 '@types/node-forge@1.3.11': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 - '@types/node@18.19.97': + '@types/node@18.19.98': dependencies: undici-types: 5.26.5 - '@types/node@22.15.14': + '@types/node@22.15.15': dependencies: undici-types: 6.21.0 @@ -7549,7 +7552,7 @@ snapshots: '@types/qrcode@1.5.5': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/qs@6.9.18': {} @@ -7561,24 +7564,24 @@ snapshots: '@types/s3rver@3.7.4': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/semver@7.7.0': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/send': 0.17.4 '@types/sinon-chai@3.2.12': dependencies: - '@types/chai': 5.2.1 + '@types/chai': 5.2.2 '@types/sinon': 17.0.4 '@types/sinon@17.0.4': @@ -7593,11 +7596,11 @@ snapshots: '@types/tar-stream@2.2.3': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/through2@2.0.41': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/triple-beam@1.3.5': {} @@ -7621,18 +7624,18 @@ snapshots: '@types/whatwg-url@8.2.2': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/webidl-conversions': 7.0.3 '@types/which@3.0.4': {} '@types/ws@7.4.7': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/ws@8.18.1': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 '@types/yargs-parser@21.0.3': {} @@ -7642,7 +7645,7 @@ snapshots: '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.15.14 + '@types/node': 22.15.15 optional: true '@ungap/structured-clone@1.3.0': {} @@ -8001,7 +8004,7 @@ snapshots: chownr@2.0.0: {} - chromium-bidi@4.1.1(devtools-protocol@0.0.1439962): + chromium-bidi@5.1.0(devtools-protocol@0.0.1439962): dependencies: devtools-protocol: 0.0.1439962 mitt: 3.0.1 @@ -8043,7 +8046,7 @@ snapshots: cloudflare@4.2.0: dependencies: - '@types/node': 18.19.97 + '@types/node': 18.19.98 '@types/node-fetch': 2.6.12 abort-controller: 3.0.0 agentkeepalive: 4.6.0 @@ -8346,7 +8349,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.17 - '@types/node': 22.15.14 + '@types/node': 22.15.15 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -8416,33 +8419,33 @@ snapshots: '@esbuild/win32-ia32': 0.24.2 '@esbuild/win32-x64': 0.24.2 - esbuild@0.25.3: + esbuild@0.25.4: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 + '@esbuild/aix-ppc64': 0.25.4 + '@esbuild/android-arm': 0.25.4 + '@esbuild/android-arm64': 0.25.4 + '@esbuild/android-x64': 0.25.4 + '@esbuild/darwin-arm64': 0.25.4 + '@esbuild/darwin-x64': 0.25.4 + '@esbuild/freebsd-arm64': 0.25.4 + '@esbuild/freebsd-x64': 0.25.4 + '@esbuild/linux-arm': 0.25.4 + '@esbuild/linux-arm64': 0.25.4 + '@esbuild/linux-ia32': 0.25.4 + '@esbuild/linux-loong64': 0.25.4 + '@esbuild/linux-mips64el': 0.25.4 + '@esbuild/linux-ppc64': 0.25.4 + '@esbuild/linux-riscv64': 0.25.4 + '@esbuild/linux-s390x': 0.25.4 + '@esbuild/linux-x64': 0.25.4 + '@esbuild/netbsd-arm64': 0.25.4 + '@esbuild/netbsd-x64': 0.25.4 + '@esbuild/openbsd-arm64': 0.25.4 + '@esbuild/openbsd-x64': 0.25.4 + '@esbuild/sunos-x64': 0.25.4 + '@esbuild/win32-arm64': 0.25.4 + '@esbuild/win32-ia32': 0.25.4 + '@esbuild/win32-x64': 0.25.4 escalade@3.2.0: {} @@ -9184,7 +9187,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.15.14 + '@types/node': 22.15.15 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -9875,7 +9878,7 @@ snapshots: '@types/whatwg-url': 11.0.5 whatwg-url: 14.2.0 - mongodb-memory-server-core@10.1.4(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4): + mongodb-memory-server-core@10.1.4(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4): dependencies: async-mutex: 0.5.0 camelcase: 6.3.0 @@ -9883,7 +9886,7 @@ snapshots: find-cache-dir: 3.3.2 follow-redirects: 1.15.9(debug@4.4.0) https-proxy-agent: 7.0.6 - mongodb: 6.16.0(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + mongodb: 6.16.0(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) new-find-package-json: 2.0.0 semver: 7.7.1 tar-stream: 3.1.7 @@ -9899,9 +9902,9 @@ snapshots: - socks - supports-color - mongodb-memory-server@10.1.4(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4): + mongodb-memory-server@10.1.4(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4): dependencies: - mongodb-memory-server-core: 10.1.4(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4) + mongodb-memory-server-core: 10.1.4(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4) tslib: 2.8.1 transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -9919,18 +9922,18 @@ snapshots: mongodb-connection-string-url: 2.6.0 socks: 2.8.4 optionalDependencies: - '@aws-sdk/credential-providers': 3.799.0 + '@aws-sdk/credential-providers': 3.804.0 '@mongodb-js/saslprep': 1.2.2 transitivePeerDependencies: - aws-crt - mongodb@6.16.0(@aws-sdk/credential-providers@3.799.0)(socks@2.8.4): + mongodb@6.16.0(@aws-sdk/credential-providers@3.804.0)(socks@2.8.4): dependencies: '@mongodb-js/saslprep': 1.2.2 bson: 6.10.3 mongodb-connection-string-url: 3.0.2 optionalDependencies: - '@aws-sdk/credential-providers': 3.799.0 + '@aws-sdk/credential-providers': 3.804.0 socks: 2.8.4 ms@2.0.0: {} @@ -10243,10 +10246,10 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.8.0: + puppeteer-core@24.8.1: dependencies: '@puppeteer/browsers': 2.10.3 - chromium-bidi: 4.1.1(devtools-protocol@0.0.1439962) + chromium-bidi: 5.1.0(devtools-protocol@0.0.1439962) debug: 4.4.0 devtools-protocol: 0.0.1439962 typed-query-selector: 2.12.0 @@ -10257,13 +10260,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.8.0(typescript@5.7.3): + puppeteer@24.8.1(typescript@5.7.3): dependencies: '@puppeteer/browsers': 2.10.3 - chromium-bidi: 4.1.1(devtools-protocol@0.0.1439962) + chromium-bidi: 5.1.0(devtools-protocol@0.0.1439962) cosmiconfig: 9.0.0(typescript@5.7.3) devtools-protocol: 0.0.1439962 - puppeteer-core: 24.8.0 + puppeteer-core: 24.8.1 typed-query-selector: 2.12.0 transitivePeerDependencies: - bare-buffer @@ -10846,7 +10849,7 @@ snapshots: tsx@4.19.4: dependencies: - esbuild: 0.25.3 + esbuild: 0.25.4 get-tsconfig: 4.10.0 optionalDependencies: fsevents: 2.3.3 @@ -10865,7 +10868,7 @@ snapshots: type-fest@2.19.0: {} - type-fest@4.40.1: {} + type-fest@4.41.0: {} type-is@1.6.18: dependencies: diff --git a/readme.plan.md b/readme.plan.md index d404607..6ae0458 100644 --- a/readme.plan.md +++ b/readme.plan.md @@ -1,59 +1,82 @@ -# Plan for Improving Smartmail Integration +# Plan for Further Enhancing the Email Stack ## Current State Analysis -The platformservice currently uses @push.rocks/smartmail version 2.0.1, primarily for email handling in: -- Email service via connector.mta.ts -- Template management -- API endpoints for sending emails +The platformservice now has a robust email system with: +- Enhanced EmailValidator with comprehensive validation (format, MX, spam detection) +- Improved TemplateManager with typed templates and variable substitution +- Streamlined conversion between Email and Smartmail formats +- Strong attachment handling +- Comprehensive testing -## Identified Integration Improvements +## Identified Enhancement Opportunities -### 1. Update smartmail to Latest Version +### 1. Performance Optimization -- [x] Update package.json to use the latest smartmail version -- [ ] Handle any breaking API changes during the upgrade +- [ ] Replace setTimeout-based DNS cache with proper LRU cache implementation +- [ ] Implement rate limiting for outbound emails +- [ ] Add bulk email handling with batching capabilities +- [ ] Optimize template rendering for high-volume scenarios -### 2. Email Validation Improvements +### 2. Security Enhancements -- [ ] Implement advanced email validation using EmailAddressValidator -- [ ] Add MX record checking for outbound emails -- [ ] Integrate domain reputation checking for spam prevention +- [ ] Implement DMARC policy checking and enforcement +- [ ] Add SPF validation for incoming emails +- [ ] Enhance logging for security-related events +- [ ] Add IP reputation checking for inbound emails +- [ ] Implement content scanning for potentially malicious payloads -### 3. Template System Enhancement +### 3. Deliverability Improvements -- [ ] Refactor TemplateManager to leverage smartmail's templating capabilities fully -- [ ] Add support for typed email templates with proper interfaces -- [ ] Create a comprehensive template catalog with standardized formats +- [ ] Implement bounce handling and feedback loop processing +- [ ] Add automated IP warmup capabilities +- [ ] Develop sender reputation monitoring +- [ ] Create domain rotation for high-volume sending -### 4. MIME Handling Improvements +### 4. Advanced Templating -- [ ] Utilize smartmail's MIME conversion capabilities in the MTA connector -- [ ] Streamline attachment handling between smartmail and internal Email class -- [ ] Handle content encoding more efficiently +- [ ] Add conditional logic in email templates +- [ ] Support localization with i18n integration +- [ ] Implement template versioning and A/B testing capabilities +- [ ] Add rich media handling (responsive images, video thumbnails) -### 5. Integration with MTA Service +### 5. Analytics and Monitoring -- [ ] Refactor Email class to extend or delegate to smartmail.Smartmail -- [ ] Align the interfaces between internal Email and Smartmail classes -- [ ] Simplify conversion between MTA Email format and Smartmail +- [ ] Implement delivery tracking and reporting +- [ ] Add open and click tracking +- [ ] Create dashboards for email performance +- [ ] Set up alerts for delivery issues +- [ ] Add spam complaint monitoring -### 6. Enhanced Email Processing +### 6. Integration Enhancements -- [ ] Add proper DKIM signature verification using smartmail capabilities -- [ ] Implement proper email tagging and categorization -- [ ] Better handling of incoming emails with smart parsing +- [ ] Add webhook support for email events +- [ ] Implement integration with popular ESPs as fallback providers +- [ ] Add support for calendar invites and structured data +- [ ] Create API for managing suppression lists -### 7. Testing & Documentation +### 7. Testing and QA -- [ ] Create comprehensive tests for the smartmail integration -- [ ] Document the integration patterns for future reference -- [ ] Create example implementations for common use cases +- [ ] Implement email rendering tests across email clients +- [ ] Add load testing for high-volume scenarios +- [ ] Create end-to-end testing of complete email journeys +- [ ] Add spam testing and deliverability scoring ## Implementation Strategy -1. First focus on non-breaking improvements (validation, template enhancement) -2. Then tackle the deeper integration with MTA service -3. Finally implement advanced features (MIME handling, DKIM) +1. Begin with security enhancements to ensure the system is as secure as possible +2. Focus on deliverability improvements to maximize email delivery success +3. Implement analytics and monitoring to gain visibility into performance +4. Add advanced templating features to enhance email capabilities +5. Optimize performance for scale +6. Expand integrations to increase flexibility -Each change should be made incrementally with thorough testing to ensure no disruption to the existing email functionality. \ No newline at end of file +Each enhancement should be implemented incrementally with comprehensive testing to ensure reliability and backward compatibility. Focus on maintaining the clean separation of concerns that's already established in the codebase. + +## Success Metrics + +- Improved deliverability rates (95%+ inbox placement) +- Enhanced security with no vulnerabilities +- Support for high volume sending (10,000+ emails per hour) +- Rich analytics providing actionable insights +- High template flexibility for marketing and transactional emails \ No newline at end of file diff --git a/test/test.smartmail.ts b/test/test.smartmail.ts new file mode 100644 index 0000000..e0fa533 --- /dev/null +++ b/test/test.smartmail.ts @@ -0,0 +1,248 @@ +import { tap, expect } from '@push.rocks/tapbundle'; +import * as plugins from '../ts/plugins.js'; +import * as paths from '../ts/paths.js'; + +// Import the components we want to test +import { EmailValidator } from '../ts/email/classes.emailvalidator.js'; +import { TemplateManager } from '../ts/email/classes.templatemanager.js'; +import { Email } from '../ts/mta/classes.email.js'; + +// Ensure test directories exist +paths.ensureDirectories(); + +tap.test('EmailValidator - should validate email formats correctly', async (tools) => { + const validator = new EmailValidator(); + + // Test valid email formats + expect(validator.isValidFormat('user@example.com')).toBeTrue(); + expect(validator.isValidFormat('firstname.lastname@example.com')).toBeTrue(); + expect(validator.isValidFormat('user+tag@example.com')).toBeTrue(); + + // Test invalid email formats + expect(validator.isValidFormat('user@')).toBeFalse(); + expect(validator.isValidFormat('@example.com')).toBeFalse(); + expect(validator.isValidFormat('user@example')).toBeFalse(); + expect(validator.isValidFormat('user.example.com')).toBeFalse(); +}); + +tap.test('EmailValidator - should perform comprehensive validation', async (tools) => { + const validator = new EmailValidator(); + + // Test basic validation (syntax-only) + const basicResult = await validator.validate('user@example.com', { checkSyntaxOnly: true }); + expect(basicResult.isValid).toBeTrue(); + expect(basicResult.details.formatValid).toBeTrue(); + + // We can't reliably test MX validation in all environments, but the function should run + const mxResult = await validator.validate('user@example.com', { checkMx: true }); + expect(typeof mxResult.isValid).toEqual('boolean'); + expect(typeof mxResult.hasMx).toEqual('boolean'); +}); + +tap.test('EmailValidator - should detect invalid emails', async (tools) => { + const validator = new EmailValidator(); + + const invalidResult = await validator.validate('invalid@@example.com', { checkSyntaxOnly: true }); + expect(invalidResult.isValid).toBeFalse(); + expect(invalidResult.details.formatValid).toBeFalse(); +}); + +tap.test('TemplateManager - should register and retrieve templates', async (tools) => { + const templateManager = new TemplateManager({ + from: 'test@example.com' + }); + + // Register a custom template + templateManager.registerTemplate({ + id: 'test-template', + name: 'Test Template', + description: 'A test template', + from: 'test@example.com', + subject: 'Test Subject: {{name}}', + bodyHtml: '
Hello, {{name}}!
', + bodyText: 'Hello, {{name}}!', + category: 'test' + }); + + // Get the template back + const template = templateManager.getTemplate('test-template'); + expect(template).toBeTruthy(); + expect(template.id).toEqual('test-template'); + expect(template.subject).toEqual('Test Subject: {{name}}'); + + // List templates + const templates = templateManager.listTemplates(); + expect(templates.length > 0).toBeTrue(); + expect(templates.some(t => t.id === 'test-template')).toBeTrue(); +}); + +tap.test('TemplateManager - should create smartmail from template', async (tools) => { + const templateManager = new TemplateManager({ + from: 'test@example.com' + }); + + // Register a template + templateManager.registerTemplate({ + id: 'welcome-test', + name: 'Welcome Test', + description: 'A welcome test template', + from: 'welcome@example.com', + subject: 'Welcome, {{name}}!', + bodyHtml: 'Hello, {{name}}! Welcome to our service.
', + bodyText: 'Hello, {{name}}! Welcome to our service.', + category: 'test' + }); + + // Create smartmail from template + const smartmail = await templateManager.createSmartmail('welcome-test', { + name: 'John Doe' + }); + + expect(smartmail).toBeTruthy(); + expect(smartmail.options.from).toEqual('welcome@example.com'); + expect(smartmail.getSubject()).toEqual('Welcome, John Doe!'); + expect(smartmail.getBody(true).indexOf('Hello, John Doe!') > -1).toBeTrue(); +}); + +tap.test('Email - should handle template variables', async (tools) => { + // Create email with variables + const email = new Email({ + from: 'sender@example.com', + to: 'recipient@example.com', + subject: 'Hello {{name}}!', + text: 'Welcome, {{name}}! Your order #{{orderId}} has been processed.', + html: 'Welcome, {{name}}! Your order #{{orderId}} has been processed.
', + variables: { + name: 'John Doe', + orderId: '12345' + } + }); + + // Test variable substitution + expect(email.getSubjectWithVariables()).toEqual('Hello John Doe!'); + expect(email.getTextWithVariables()).toEqual('Welcome, John Doe! Your order #12345 has been processed.'); + expect(email.getHtmlWithVariables().indexOf('John Doe') > -1).toBeTrue(); + + // Test with additional variables + const additionalVars = { + name: 'Jane Smith', // Override existing variable + status: 'shipped' // Add new variable + }; + + expect(email.getSubjectWithVariables(additionalVars)).toEqual('Hello Jane Smith!'); + + // Add a new variable + email.setVariable('trackingNumber', 'TRK123456'); + expect(email.getTextWithVariables().indexOf('12345') > -1).toBeTrue(); + + // Update multiple variables at once + email.setVariables({ + orderId: '67890', + status: 'delivered' + }); + + expect(email.getTextWithVariables().indexOf('67890') > -1).toBeTrue(); +}); + +tap.test('Email and Smartmail compatibility - should convert between formats', async (tools) => { + // Create a Smartmail instance + const smartmail = new plugins.smartmail.Smartmail({ + from: 'smartmail@example.com', + subject: 'Test Subject', + body: 'This is a test email.
', + creationObjectRef: { + orderId: '12345' + } + }); + + // Add recipient and attachment + smartmail.addRecipient('recipient@example.com'); + + const attachment = await plugins.smartfile.SmartFile.fromString( + 'test.txt', + 'This is a test attachment', + 'utf8', + ); + + smartmail.addAttachment(attachment); + + // Convert to Email + const resolvedSmartmail = await smartmail; + const email = Email.fromSmartmail(resolvedSmartmail); + + // Verify first conversion (Smartmail to Email) + expect(email.from).toEqual('smartmail@example.com'); + expect(email.to.indexOf('recipient@example.com') > -1).toBeTrue(); + expect(email.subject).toEqual('Test Subject'); + expect(email.html?.indexOf('This is a test email') > -1).toBeTrue(); + expect(email.attachments.length).toEqual(1); + + // Convert back to Smartmail + const convertedSmartmail = await email.toSmartmail(); + + // Verify second conversion (Email back to Smartmail) with simplified assertions + expect(convertedSmartmail.options.from).toEqual('smartmail@example.com'); + expect(Array.isArray(convertedSmartmail.options.to)).toBeTrue(); + expect(convertedSmartmail.options.to.length).toEqual(1); + expect(convertedSmartmail.getSubject()).toEqual('Test Subject'); + expect(convertedSmartmail.getBody(true).indexOf('This is a test email') > -1).toBeTrue(); + expect(convertedSmartmail.attachments.length).toEqual(1); +}); + +tap.test('Email - should validate email addresses', async (tools) => { + // Attempt to create an email with invalid addresses + let errorThrown = false; + + try { + const email = new Email({ + from: 'invalid-email', + to: 'recipient@example.com', + subject: 'Test', + text: 'Test' + }); + } catch (error) { + errorThrown = true; + expect(error.message.indexOf('Invalid sender email address') > -1).toBeTrue(); + } + + expect(errorThrown).toBeTrue(); + + // Attempt with invalid recipient + errorThrown = false; + + try { + const email = new Email({ + from: 'sender@example.com', + to: 'invalid-recipient', + subject: 'Test', + text: 'Test' + }); + } catch (error) { + errorThrown = true; + expect(error.message.indexOf('Invalid recipient email address') > -1).toBeTrue(); + } + + expect(errorThrown).toBeTrue(); + + // Valid email should not throw + let validEmail: Email; + try { + validEmail = new Email({ + from: 'sender@example.com', + to: 'recipient@example.com', + subject: 'Test', + text: 'Test' + }); + + expect(validEmail).toBeTruthy(); + expect(validEmail.from).toEqual('sender@example.com'); + } catch (error) { + expect(error === undefined).toBeTrue(); // This should not happen + } +}); + +tap.test('stop', async () => { + tap.stopForcefully(); +}) + +export default tap.start(); \ No newline at end of file diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 2d93714..27b7ec3 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/platformservice', - version: '2.3.1', + version: '2.4.0', description: 'A multifaceted platform service handling mail, SMS, letter delivery, and AI services.' } diff --git a/ts/email/classes.connector.mta.ts b/ts/email/classes.connector.mta.ts index 172d694..ab5d4be 100644 --- a/ts/email/classes.connector.mta.ts +++ b/ts/email/classes.connector.mta.ts @@ -27,7 +27,7 @@ export class MtaConnector { * @param options Additional options */ public async sendEmail( - smartmail: plugins.smartmail.SmartmailThank you for joining {{serviceName}}. We're excited to have you on board.
+To get started, visit your account.
+ `, + bodyText: + `Welcome, {{firstName}}! + + Thank you for joining {{serviceName}}. We're excited to have you on board. + + To get started, visit your account: {{accountUrl}} + `, + sampleData: { + firstName: 'John', + accountUrl: 'https://example.com/account' + } + }); + + // Password reset + this.registerTemplate<{ + resetUrl: string; + expiryHours: number; + }>({ + id: 'password-reset', + name: 'Password Reset', + description: 'Sent when a user requests a password reset', + from: this.defaultConfig.from, + subject: 'Password Reset Request', + category: TemplateCategory.TRANSACTIONAL, + bodyHtml: ` +You recently requested to reset your password. Click the link below to reset it:
+ +This link will expire in {{expiryHours}} hours.
+If you didn't request a password reset, please ignore this email.
+ `, + sampleData: { + resetUrl: 'https://example.com/reset-password?token=abc123', + expiryHours: 24 + } + }); + + // System notification + this.registerTemplate({ + id: 'system-notification', + name: 'System Notification', + description: 'General system notification template', + from: this.defaultConfig.from, + subject: '{{subject}}', + category: TemplateCategory.SYSTEM, + bodyHtml: ` +