From 3bf53d120b9a44ce0b49c60459322b8f178eee65 Mon Sep 17 00:00:00 2001 From: James Garbutt <43081j@users.noreply.github.com> Date: Tue, 16 Jun 2026 21:36:45 +0100 Subject: [PATCH] chore: bump jws and test certificate Does two things: 1. bump `jws` to support modern Node 2. create a new test cert which complies with newer openssl constraints (key size) --- package-lock.json | 42 +++++++++++---------- package.json | 4 +- src/web-push-lib.js | 7 ++-- test/data/certs/cert.pem | 80 ++++++++++++++++++++++------------------ 4 files changed, 73 insertions(+), 60 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8cdf081c..c91c26cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "asn1.js": "^5.3.0", "http_ece": "1.2.0", "https-proxy-agent": "^7.0.0", - "jws": "^4.0.0", + "jws": "^4.0.1", "minimist": "^1.2.5" }, "bin": { @@ -1416,7 +1416,8 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", @@ -1908,6 +1909,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -4144,21 +4146,23 @@ "dev": true }, "node_modules/jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", "dependencies": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", + "license": "MIT", "dependencies": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -8007,7 +8011,7 @@ "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "buffer-indexof-polyfill": { "version": "1.0.2", @@ -10027,21 +10031,21 @@ "dev": true }, "jwa": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", - "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "requires": { - "buffer-equal-constant-time": "1.0.1", + "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "requires": { - "jwa": "^2.0.0", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, diff --git a/package.json b/package.json index 49f12eb7..ee444b10 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "asn1.js": "^5.3.0", "http_ece": "1.2.0", "https-proxy-agent": "^7.0.0", - "jws": "^4.0.0", + "jws": "^4.0.1", "minimist": "^1.2.5" }, "devDependencies": { @@ -42,9 +42,9 @@ "eslint-config-airbnb": "19.0.4", "eslint-plugin-import": "2.29.1", "geckodriver": "4.3.0", - "nyc": "15.1.0", "mkdirp": "3.0.1", "mocha": "10.4.0", + "nyc": "15.1.0", "portfinder": "1.0.32", "selenium-assistant": "5.4.0", "sinon": "17.0.1" diff --git a/src/web-push-lib.js b/src/web-push-lib.js index a47df054..64b4e683 100644 --- a/src/web-push-lib.js +++ b/src/web-push-lib.js @@ -1,6 +1,5 @@ 'use strict'; -const url = require('url'); const https = require('https'); const WebPushError = require('./web-push-error.js'); @@ -271,7 +270,7 @@ WebPushLib.prototype.generateRequestDetails = function(subscription, payload, op requestDetails.headers.Authorization = 'key=' + currentGCMAPIKey; } } else if (currentVapidDetails) { - const parsedUrl = url.parse(subscription.endpoint); + const parsedUrl = new URL(subscription.endpoint); const audience = parsedUrl.protocol + '//' + parsedUrl.host; @@ -345,10 +344,10 @@ WebPushLib.prototype.sendNotification = function(subscription, payload, options) return new Promise(function(resolve, reject) { const httpsOptions = {}; - const urlParts = url.parse(requestDetails.endpoint); + const urlParts = new URL(requestDetails.endpoint); httpsOptions.hostname = urlParts.hostname; httpsOptions.port = urlParts.port; - httpsOptions.path = urlParts.path; + httpsOptions.path = urlParts.pathname + urlParts.search; httpsOptions.headers = requestDetails.headers; httpsOptions.method = requestDetails.method; diff --git a/test/data/certs/cert.pem b/test/data/certs/cert.pem index b7c816e1..d87abbb5 100644 --- a/test/data/certs/cert.pem +++ b/test/data/certs/cert.pem @@ -1,37 +1,47 @@ ------BEGIN RSA PRIVATE KEY----- -MIICXgIBAAKBgQDLYIKzqGB0uCGURF7OcYMCBGtRszP6GV4b9CxmBtXOI637A8+R -yII4rpCM6PaUV0ekD/QK63S3u8LjgMAcSDIUZzAVDHah46r0dbvr2wRiKlZeZAuY -+c+eOi01qIKpF17Pkou/ag5O72aiY3wAaGsUnpsD5mgPXY+BrqAYQZ7JZQIDAQAB -AoGAIpni4soMzw7ct6sCLkFltpwl3hqNB0n1lu/t9dXH3nB3kzNMx1LDxPz+Htsr -yIUo7SLBtHHmw7OwLqCjDqzByCUkxdtQY83z+IEaDhiyO+bQTz0lfkry5zhgOK4U -/mw9lPBRbUHYao1PbxYkkshuo1vxSkOMGEI5qi/Cz+dIMYECQQDu7lwz+sc/vhWm -0vGX87HAPj2KTRRHCJVFlmH8vPz00LkQ29dzb33T/4HNzuKW6spA8AiVn4FB80rB -QXNaROAVAkEA2eftSJEuTCH9C193vfvIOPStbAa3YhHhKPMxM5vfz87x3YRuJ/25 -DTbPo4F4zqrcygXCZwAHsdwf71JA725IEQJBAOSQBon++z4B86prnotSpxaVM7+q -bpxpHIq+CiyBCaaUSIVVGKyn2gHEKYMcxuvB3Qrz0/J17GuPdlKa7uNKgeUCQQCn -gNsr7z4RlAb6WRao2gUdkyhEZB1Pq8LTQa5Op8Gx8riFuakb4LQBbmLKo1oEM9+p -BCheGO3RUQ7TXv0/kByhAkEAoWuvLliRzTwWPYbNlb69OO2dNeVdx181lzncLwN9 -D6b+ZuzdABCy1549TA5B0bXNtmmqP6ufoidhCyZ17cLEhA== ------END RSA PRIVATE KEY----- +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCv9U/98mBHGtH/ +ZsroXaEIM0BY/8IWEOepz/Nor+oARP/5QZ9mnOKUQkYo3huP4WgFYoEAMIeBdKcu +1oUZAwG7cgCnLMGLNk8XArtD7ngoR73r1VgtVqFfE74x7N6fZ7DmkYHM26b4v7nA +I07f5Hv9nug40Ul4z2fV+1wom6f6VFnXhDE/I4bp/D/bZRMj3MNMf+7axOtu7YRs +SAiYbwaA3Lhv/8BVwdxVd8m89MIIiwATIOregC32rhmBnyTS6VNpXI3wWQQmzR31 +iHtef/MNq+wEjMJrgJh/8pgOv77VoFVR4WC1WQvrBDJ7r+vATzcRIxChgBrUwX/Y +FzId2szHAgMBAAECggEAByPx1JDW5lvIxNADkO1nwQDvbg0m76VM+V+mdYuZ99vU +9WT71nqsWS7dUQA+ZxbTFVDbgkn13cOBm016RjsQgW5NZ3tR+VfBWuIx/j45owzS +QLU+KEzZLJYNBFKj8B0RmTGzbkBFpNeG7qygIUbQ30hpDRE1JZFpGc5i/YTfirF7 +XCszzZUku8mvQ/DwWLxCeIy+KF9A7IFPVunsM0zJB5GHxspIzXNVO2RQQyMhnC0E +Omm7titpmV29NNte49Jd4Tzw18fjEroc8gDYyf96Y1CbmEEuR272fmtZ8JHsk5C8 +B2pQYH+gqFmcKGHe4Gdj3Pr+79TnU5QFu6T/8EfaVQKBgQDdY2jhov7vw8zwdYQ/ +DaIvIKdKcB81nHfo1a0+ZWm5VzM9RdLUzUm2fVKW1klRdWEjEgX94tsOV73+2SMR +4OI67zwVeCHodcReMURjoWtfilB61KeRmF6CHWQu1BqQm7F0WS0Sl8xKkEbn6nnx +6zFGXHzYWpJHHmXDvqalju6w4wKBgQDLd6mJMX5SPAscnAEMJAgej74BunRNEVeK +uLP/pkq4aLSpe4IZnk6YOeRB7BIHGAlWTAvZZ1i3ZNyCLNU74o2xqaXUR3AnzyUt +TEBbzvVykH82AFEkQIIEJ8HTppB4if2Mlho3CAkbQyFZ+CgjSycPIshmTins4r+G +a0kG4EftzQKBgQCk6szSaM1oZn9gEOq23b0XRkfYl7VoBmr8s1AezwT24BJ3bnAj +vdlPbAP+ARsU50+5BFAaVMfB43LRSYdqZg+gv14O0DLSLAhf8mtznGeUAED7fzZk +qxCb9LEQgUhYuOJ0PYnp89JnKRro4C5/HCjUtUj7El0tRWOhcYBKjDMa6QKBgApE +WIa2u6QUqY7hBGCDdPFt2W2m5fV5mYxDc7nDv2N8zRj8RX1bcqXVzgHRkrtO6DG1 +lqd6woxGh6X98yiZbwL3B4olrLAlkL+vaFP5poMIbZLhAzcsFiN1ih9O+V1LwUKV +1G7Qdf0tLwKmNghJ44es/qXC7fSpIHb89Otm59pFAoGAA7YtKgkjrVRmgo3nyzR9 +b+2mTgO9CKVHxPuRrd/Tdkwm9KOqFFRw3ZozKUOa9/Df+ahsgRLjO8Qxf85L3cy9 +RNH5lGHSPv3IUvvQQ1xyeGaU5jR1xtpTISo2ANGkOz1JV58M0Kj/QbM1xt6WYDUS +fAaRrrSr+/fF6WGbgKATVYM= +-----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIDojCCAwugAwIBAgIJANHpxi9qBMhbMA0GCSqGSIb3DQEBBQUAMIGTMQswCQYD -VQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5j -aXNjbzEQMA4GA1UEChMHTW96aWxsYTEQMA4GA1UECxMHajJtZS5qczESMBAGA1UE -AxMJbG9jYWxob3N0MR8wHQYJKoZIhvcNAQkBFhB0ZXN0QG1vemlsbGEuY29tMB4X -DTE0MTAyMDE3MDczOVoXDTI0MTAxNzE3MDczOVowgZMxCzAJBgNVBAYTAlVTMRMw -EQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRAwDgYD -VQQKEwdNb3ppbGxhMRAwDgYDVQQLEwdqMm1lLmpzMRIwEAYDVQQDEwlsb2NhbGhv -c3QxHzAdBgkqhkiG9w0BCQEWEHRlc3RAbW96aWxsYS5jb20wgZ8wDQYJKoZIhvcN -AQEBBQADgY0AMIGJAoGBAMtggrOoYHS4IZREXs5xgwIEa1GzM/oZXhv0LGYG1c4j -rfsDz5HIgjiukIzo9pRXR6QP9ArrdLe7wuOAwBxIMhRnMBUMdqHjqvR1u+vbBGIq -Vl5kC5j5z546LTWogqkXXs+Si79qDk7vZqJjfABoaxSemwPmaA9dj4GuoBhBnsll -AgMBAAGjgfswgfgwHQYDVR0OBBYEFBFUqscLfTEX2t2GaVBBmfOKGGMcMIHIBgNV -HSMEgcAwgb2AFBFUqscLfTEX2t2GaVBBmfOKGGMcoYGZpIGWMIGTMQswCQYDVQQG -EwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNj -bzEQMA4GA1UEChMHTW96aWxsYTEQMA4GA1UECxMHajJtZS5qczESMBAGA1UEAxMJ -bG9jYWxob3N0MR8wHQYJKoZIhvcNAQkBFhB0ZXN0QG1vemlsbGEuY29tggkA0enG -L2oEyFswDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQAz1AHqa9BNRFXO -MwI/c2mFRXl0uBTyKtz2+j/pbx6XvfiCp0EoU9K9TJFH75mn7202IUro3Qp2COrQ -KdkizPgxt1RWofBvVw5Eq/LnoOhvbxdtrly5JEakJh7fXtxB7N5CzMcL3l9LG7DI -SnWwym9r0pQ3EI9xDV/ViIx3pMlFWA== +MIIDGjCCAgKgAwIBAgIUHVZsjP8BqEimGdDMJhxoxHc9Oa8wDQYJKoZIhvcNAQEL +BQAwFDESMBAGA1UEAwwJMTI3LjAuMC4xMB4XDTI2MDYxNjIwMzQxMloXDTM2MDYx +MzIwMzQxMlowFDESMBAGA1UEAwwJMTI3LjAuMC4xMIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAr/VP/fJgRxrR/2bK6F2hCDNAWP/CFhDnqc/zaK/qAET/ ++UGfZpzilEJGKN4bj+FoBWKBADCHgXSnLtaFGQMBu3IApyzBizZPFwK7Q+54KEe9 +69VYLVahXxO+Mezen2ew5pGBzNum+L+5wCNO3+R7/Z7oONFJeM9n1ftcKJun+lRZ +14QxPyOG6fw/22UTI9zDTH/u2sTrbu2EbEgImG8GgNy4b//AVcHcVXfJvPTCCIsA +EyDq3oAt9q4ZgZ8k0ulTaVyN8FkEJs0d9Yh7Xn/zDavsBIzCa4CYf/KYDr++1aBV +UeFgtVkL6wQye6/rwE83ESMQoYAa1MF/2BcyHdrMxwIDAQABo2QwYjAdBgNVHQ4E +FgQUm8yPopIvNL6h2kIBkltRXf5Xw30wHwYDVR0jBBgwFoAUm8yPopIvNL6h2kIB +kltRXf5Xw30wDwYDVR0TAQH/BAUwAwEB/zAPBgNVHREECDAGhwR/AAABMA0GCSqG +SIb3DQEBCwUAA4IBAQAtsyF5wR0cl4nkFkjFB1wne9pVsTKtRrs5ISTzVI+GUBC/ +6mzbKGuXUV2EmDV1zi+Wv5ZBkCPcp1wO6bXm8kEWnJvBk7757boiClXRy9ylZYqY +ZL5jZC12piHGIo0xifEf+kJ2d5Nq6dMTl7vof9Jpcxlc2Pd3DNEYGvFjvIxQIE6i +9zki4q1kjzHkCtjk48OiWfJ6xeTBqm2fXMpV9dYHgeIRp01z9HcCGeH6VSVZb6kV +dJRTQ9wpZ7XGZ6a0wRiEvCWtQ182TMdbgHWWrUAqrVb8xDqY5TVI3UCorGi21gZf +XYte8oqYr8NHLBih2XA/Lah1KvyWtKi+VYp8ED8k -----END CERTIFICATE-----