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