diff --git a/.github/workflows/licensed.yml b/.github/workflows/licensed.yml
index ae62613..c7c9dbe 100644
--- a/.github/workflows/licensed.yml
+++ b/.github/workflows/licensed.yml
@@ -11,10 +11,4 @@ jobs:
     steps:
       - uses: actions/checkout@v2
       - run: npm ci
-      - name: Install licensed
-        run: |
-          cd $RUNNER_TEMP
-          curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz
-          sudo tar -xzf licensed.tar.gz
-          sudo mv licensed /usr/local/bin/licensed
-      - run: licensed status
\ No newline at end of file
+      - run: npm run licensed-check
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index 2f909c0..8baa767 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 __test__/_temp
+_temp/
 lib/
 node_modules/
\ No newline at end of file
diff --git a/.licenses/npm/call-bind.dep.yml b/.licenses/npm/call-bind.dep.yml
new file mode 100644
index 0000000..9edb85b
Binary files /dev/null and b/.licenses/npm/call-bind.dep.yml differ
diff --git a/.licenses/npm/function-bind.dep.yml b/.licenses/npm/function-bind.dep.yml
new file mode 100644
index 0000000..54b9328
Binary files /dev/null and b/.licenses/npm/function-bind.dep.yml differ
diff --git a/.licenses/npm/get-intrinsic.dep.yml b/.licenses/npm/get-intrinsic.dep.yml
new file mode 100644
index 0000000..e9584f1
Binary files /dev/null and b/.licenses/npm/get-intrinsic.dep.yml differ
diff --git a/.licenses/npm/has-symbols.dep.yml b/.licenses/npm/has-symbols.dep.yml
new file mode 100644
index 0000000..801de49
Binary files /dev/null and b/.licenses/npm/has-symbols.dep.yml differ
diff --git a/.licenses/npm/has.dep.yml b/.licenses/npm/has.dep.yml
new file mode 100644
index 0000000..64d1ef7
Binary files /dev/null and b/.licenses/npm/has.dep.yml differ
diff --git a/.licenses/npm/node-fetch.dep.yml b/.licenses/npm/node-fetch.dep.yml
index 109c6d0..938f089 100644
Binary files a/.licenses/npm/node-fetch.dep.yml and b/.licenses/npm/node-fetch.dep.yml differ
diff --git a/.licenses/npm/object-inspect.dep.yml b/.licenses/npm/object-inspect.dep.yml
new file mode 100644
index 0000000..9bcc9cb
Binary files /dev/null and b/.licenses/npm/object-inspect.dep.yml differ
diff --git a/.licenses/npm/qs.dep.yml b/.licenses/npm/qs.dep.yml
new file mode 100644
index 0000000..2d4aded
Binary files /dev/null and b/.licenses/npm/qs.dep.yml differ
diff --git a/.licenses/npm/side-channel.dep.yml b/.licenses/npm/side-channel.dep.yml
new file mode 100644
index 0000000..e341df9
Binary files /dev/null and b/.licenses/npm/side-channel.dep.yml differ
diff --git a/.licenses/npm/tr46.dep.yml b/.licenses/npm/tr46.dep.yml
new file mode 100644
index 0000000..3bacc6e
Binary files /dev/null and b/.licenses/npm/tr46.dep.yml differ
diff --git a/.licenses/npm/tunnel-0.0.6.dep.yml b/.licenses/npm/tunnel.dep.yml
similarity index 100%
rename from .licenses/npm/tunnel-0.0.6.dep.yml
rename to .licenses/npm/tunnel.dep.yml
diff --git a/.licenses/npm/typed-rest-client.dep.yml b/.licenses/npm/typed-rest-client.dep.yml
index 7076df4..c90980c 100644
Binary files a/.licenses/npm/typed-rest-client.dep.yml and b/.licenses/npm/typed-rest-client.dep.yml differ
diff --git a/.licenses/npm/underscore.dep.yml b/.licenses/npm/underscore.dep.yml
index 7171cc6..0324c66 100644
Binary files a/.licenses/npm/underscore.dep.yml and b/.licenses/npm/underscore.dep.yml differ
diff --git a/.licenses/npm/webidl-conversions.dep.yml b/.licenses/npm/webidl-conversions.dep.yml
new file mode 100644
index 0000000..48c1f22
Binary files /dev/null and b/.licenses/npm/webidl-conversions.dep.yml differ
diff --git a/.licenses/npm/tunnel-0.0.4.dep.yml b/.licenses/npm/whatwg-url.dep.yml
similarity index 78%
rename from .licenses/npm/tunnel-0.0.4.dep.yml
rename to .licenses/npm/whatwg-url.dep.yml
index ec46939..bca799c 100644
Binary files a/.licenses/npm/tunnel-0.0.4.dep.yml and b/.licenses/npm/whatwg-url.dep.yml differ
diff --git a/package.json b/package.json
index 5909be7..823ff58 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,9 @@
     "format": "prettier --write '**/*.ts'",
     "format-check": "prettier --check '**/*.ts'",
     "lint": "eslint src/**/*.ts",
-    "test": "jest"
+    "test": "jest",
+    "licensed-check": "src/misc/licensed-check.sh",
+    "licensed-generate": "src/misc/licensed-generate.sh"
   },
   "repository": {
     "type": "git",
diff --git a/src/misc/licensed-check.sh b/src/misc/licensed-check.sh
new file mode 100755
index 0000000..68c9109
--- /dev/null
+++ b/src/misc/licensed-check.sh
@@ -0,0 +1,6 @@
+set -e
+
+src/misc/licensed-download.sh
+
+echo 'Running: licensed cached'
+_temp/licensed-3.3.1/licensed status
\ No newline at end of file
diff --git a/src/misc/licensed-download.sh b/src/misc/licensed-download.sh
new file mode 100755
index 0000000..2d3ca0e
--- /dev/null
+++ b/src/misc/licensed-download.sh
@@ -0,0 +1,18 @@
+set -e
+
+if [ ! -f _temp/licensed-3.3.1.done ]; then
+  echo 'Clearing temp'
+  rm -rf _temp/licensed-3.3.1 || true
+
+  echo 'Downloading licensed'
+  mkdir -p _temp/licensed-3.3.1
+  pushd _temp/licensed-3.3.1
+  curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/3.3.1/licensed-3.3.1-darwin-x64.tar.gz
+
+  echo 'Extracting licenesed'
+  tar -xzf licensed.tar.gz
+  popd
+  touch _temp/licensed-3.3.1.done
+else
+  echo 'Licensed already downloaded'
+fi
diff --git a/src/misc/licensed-generate.sh b/src/misc/licensed-generate.sh
new file mode 100755
index 0000000..b4f20b9
--- /dev/null
+++ b/src/misc/licensed-generate.sh
@@ -0,0 +1,6 @@
+set -e
+
+src/misc/licensed-download.sh
+
+echo 'Running: licensed cached'
+_temp/licensed-3.3.1/licensed cache
\ No newline at end of file