Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add NPM plugin #422

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open

Add NPM plugin #422

wants to merge 8 commits into from

Conversation

alondahari
Copy link

Overview

This is a second attempt at creating an NPM plugin, following #168.

Currently, this plugin supports:

  • Importing existing project and user config files
  • Multiple registries and scopes

It does not yet support:

  • MFA
  • importing global and builtin config files

Type of change

  • Created a new plugin
  • Improved an existing plugin
  • Fixed a bug in an existing plugin
  • Improved contributor utilities or experience

How To Test

  • npm login to generate an .npmrc file if you don't have an existing one
  • init the plugin
  • remove your .npmrc file from your home folder
  • npm whoami

Changelog

Authenticate the NPM CLI using Touch ID and other unlock options with 1Password Shell Plugins.

This is the initial commit to handle integration with NPM, with the
official registry. After running the boiler plate I updated the relevant
fields, just enough to do manual testing of the basic use case (npm
install).

Still left to do:
- Parse existing .npmrc file
- Define when auth is needed
- testing

<!-- ps-id: d44814af-d6d4-4fd8-8dc4-62ed0ac06602 -->
Add a list of commands that don't require authentication. When running
those commands with the cli, the plugin will not try to fetch the token
from the vault.

I opted for a negative list of commands over a positive one since the
latter would end up being much longer, would need to be more complete,
and would probably need more updates with time, with newer npm versions.

<!-- ps-id: ec70313e-76dd-4aab-811d-196348b499ac -->
Update the access_token specfication to find the relevant .npmrc config
file and create the 1password secret from it when initializing the
plugin.

<!-- ps-id: e7ddf1fc-f911-475f-9b2c-5b43edd41471 -->
The .npmrc can live in the project root, as well as the home directory.

Decided to only support the per-project and per-user config files, since
the global and the builtin configs should not contain the auth config
probably.

Reference: https://docs.npmjs.com/cli/v10/configuring-npm/npmrc#global-config-file

<!-- ps-id: 362d7c8f-e1ad-4533-882f-e103b3d75caf -->
NPM packages can live in different registries, not just the official
one. This commit adds support for them by setting the env var according
to the right backend.

To support that, I had to use a temp file and not the env var
provisioner, since the key name would be different per registry.

I also added support for different scopes along the way.

I decided to separate the credentials instead of having a single line
ithe 1password vault, to allow users to configure their secrets more
easily.

<!-- ps-id: 7ec3e696-9c29-4354-bba5-ae4206bc871f -->
Let's support best practice by defaulting to the official npm registry
if the secret doesn't contain a host.
This will be useful when testing the access token
Add some tests around importing and provisioning the credentials.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant