From 9af6b6ce6d54e5ed1c3cb69e531c81e3f4111eae Mon Sep 17 00:00:00 2001 From: Brian Donohue <brian@bthdonohue.com> Date: Sat, 27 Apr 2024 12:12:31 -0400 Subject: [PATCH 1/3] Authenticate with hmac-sha1 library Solves issue with nodejs/electron on mobile devices Signed-off-by: Brian Donohue <brian@team.instapaper.com> --- package-lock.json | 6 ++++++ package.json | 1 + src/api.ts | 8 +++----- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 734a973..794c35e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "license": "MIT", "dependencies": { "create-hmac": "^1.1.7", + "hmacsha1": "^1.0.0", "oauth-1.0a": "^2.2.6" }, "devDependencies": { @@ -1608,6 +1609,11 @@ "node": ">=4" } }, + "node_modules/hmacsha1": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hmacsha1/-/hmacsha1-1.0.0.tgz", + "integrity": "sha512-4FP6J0oI8jqb6gLLl9tSwVdosWJ/AKSGJ+HwYf6Ixe4MUcEkst4uWzpVQrNOCin0fzTRQbXV8ePheU8WiiDYBw==" + }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", diff --git a/package.json b/package.json index e1c4f49..4e5c275 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ }, "dependencies": { "create-hmac": "^1.1.7", + "hmacsha1": "^1.0.0", "oauth-1.0a": "^2.2.6" } } diff --git a/src/api.ts b/src/api.ts index 71618c9..f7e98de 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,5 +1,5 @@ -import createHmac from "create-hmac"; import OAuth from "oauth-1.0a"; +import hmacsha1 from "hmacsha1"; import { requestUrl } from "obsidian"; export interface InstapaperClientOptions { @@ -59,9 +59,7 @@ export class InstapaperAPI { }, signature_method: "HMAC-SHA1", hash_function(base_string: string, key: string) { - return createHmac("sha1", key) - .update(base_string) - .digest("base64"); + return hmacsha1(key, base_string); }, parameter_seperator: ", " }); @@ -172,4 +170,4 @@ export class InstapaperAPI { bookmarks: Object.fromEntries(bookmarks.map(b => [b.bookmark_id, b])) } } -} \ No newline at end of file +} From 7a455815ba10773743c1dc5add6539f383caa665 Mon Sep 17 00:00:00 2001 From: Jon Parise <jon@indelible.org> Date: Sat, 27 Apr 2024 09:33:23 -0700 Subject: [PATCH 2/3] Remove the 'create-hmac' dependency --- package-lock.json | 138 +--------------------------------------------- package.json | 2 - 2 files changed, 3 insertions(+), 137 deletions(-) diff --git a/package-lock.json b/package-lock.json index 794c35e..a04b33e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,10 @@ "version": "1.0.2", "license": "MIT", "dependencies": { - "create-hmac": "^1.1.7", "hmacsha1": "^1.0.0", "oauth-1.0a": "^2.2.6" }, "devDependencies": { - "@types/create-hmac": "^1.1.3", "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "7.6.0", "@typescript-eslint/parser": "7.6.0", @@ -609,15 +607,6 @@ "@types/tern": "*" } }, - "node_modules/@types/create-hmac": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@types/create-hmac/-/create-hmac-1.1.3.tgz", - "integrity": "sha512-oDDSoBrAfdEPQuBpQp14y/ygUVU1IC6gq8Arm8IPP8TRC11AnLLYmpE3VvNUhPK/Ax3USGDjdE1Sc1LCIpf0NQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -996,15 +985,6 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1032,31 +1012,6 @@ "dev": true, "peer": true }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -1596,19 +1551,6 @@ "node": ">=8" } }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/hmacsha1": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hmacsha1/-/hmacsha1-1.0.0.tgz", @@ -1664,7 +1606,9 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "peer": true }, "node_modules/is-extglob": { "version": "2.1.1", @@ -1806,16 +1750,6 @@ "node": ">=10" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2057,19 +1991,6 @@ } ] }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2106,15 +2027,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -2138,25 +2050,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -2172,18 +2065,6 @@ "node": ">=10" } }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2216,14 +2097,6 @@ "node": ">=8" } }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -2356,11 +2229,6 @@ "punycode": "^2.1.0" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", diff --git a/package.json b/package.json index 4e5c275..1750aca 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,6 @@ "author": "Instapaper", "license": "MIT", "devDependencies": { - "@types/create-hmac": "^1.1.3", "@types/node": "^16.11.6", "@typescript-eslint/eslint-plugin": "7.6.0", "@typescript-eslint/parser": "7.6.0", @@ -28,7 +27,6 @@ "typescript": "5.4.2" }, "dependencies": { - "create-hmac": "^1.1.7", "hmacsha1": "^1.0.0", "oauth-1.0a": "^2.2.6" } From e33ccd1f8d582fe2d5e6676b39d686f491f193e5 Mon Sep 17 00:00:00 2001 From: Jon Parise <jon@indelible.org> Date: Sat, 27 Apr 2024 09:45:28 -0700 Subject: [PATCH 3/3] Add typescript declaration --- src/types/hmacsha1.d.ts | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/types/hmacsha1.d.ts diff --git a/src/types/hmacsha1.d.ts b/src/types/hmacsha1.d.ts new file mode 100644 index 0000000..db8de0c --- /dev/null +++ b/src/types/hmacsha1.d.ts @@ -0,0 +1 @@ +declare module 'hmacsha1'; \ No newline at end of file