diff options
author | isaacs <i@izs.me> | 2010-03-06 05:09:42 +0300 |
---|---|---|
committer | isaacs <i@izs.me> | 2010-03-06 05:09:42 +0300 |
commit | dfe8c55bb572cc09655aa201f3f5a157740604aa (patch) | |
tree | f23a6b24ccfda9a9e12ca9b4f66b8b4789ad82e6 /doc | |
parent | 1ad560e00bb83f6d1fe3e3d02f24f0b0a0a85b80 (diff) |
replace registry doc with a pointer to the registry project.
Diffstat (limited to 'doc')
-rw-r--r-- | doc/registry.md | 64 |
1 files changed, 1 insertions, 63 deletions
diff --git a/doc/registry.md b/doc/registry.md index 811e4677c..0f0078ef1 100644 --- a/doc/registry.md +++ b/doc/registry.md @@ -1,64 +1,2 @@ -# An npm Package Registry - -An npm registry is a web site that maintains an internal database of package info (basically just pointers to tarballs/jsons). - -Since the goal here affects the steps to get here, which go through the whole "version" hoodah, it's worth sketching out now what this will eventually look like. - -## Why tokens instead of passwords - -I'm intending to wire up these sorta-restful APIs to a command line tool. Then, the token can be stored in some safe place (like `~/.npmrc` or something), whereas storing a password would not be good. It's always possible to add passwords on later, but it might not even be necessary. - -## GET Requests - -`/` -Some kind of home page, list of packages, form to create a new package, register, etc. - -`/foo` -list of known versions of foo (html) if it exists - -`https://.../foo?ut=1234567890` (user token == project owner) -`https://.../foo?pt=0987654321` (valid project token) -list of versions of foo, plus tools to manage the project. (Mostly just forms to facilitate POSTing to the APIs below.) - -`/foo/stable` -`/foo/test` -302 redirect to a tarball containing either the stable or test version of the package - -`/foo/v0.1.24` (semver-compatible tag) -301 redirect to a tarball containing the 0.1.24 version of the package. Should be a SemVer-compatible tag. - -`/foo/nightly` -301 redirect to the tarball of the latest code, if there is such a place. Typically something like `http://github.com/owner/project/tarball/master`. - -`https://.../?rt=123456abcdefg&user=bob@foo.com` (valid reset token & matching user) -Mint a new user token for bob@foo.com, reset all the user tokens on bob@foo.com's packages, and display the new user token, along with a message that bob should save it, because it can't be retrieved, only reset. - - -## POST Requests - -Post requests must be authenticated by the package owner by presenting a user token or a project token, and must be done over HTTPS. - -`/` -body: user=bob@foo.com -Create a new user account tied to that email address. If the user account exists already, then error and provide a link to reset your user token. - -`/` -body: user=bob@foo.com&reset=1 -Mint a new "reset token", which is valid for 1 hour, and email it to the address supplied. If the user account doesn't exist, then error and provide a link to create a new user account. - -`/foo` -body: `create` -Create the project. If a project by that name already exists, then it will error. If it doesn't, then it will be created in the registry with the user as the owner. The response will redirect to "GET /foo?pt=blah" over HTTPS. - -`/foo/stable` -`/foo/test` -Post a version tag like "v1.0.3". If the version isn't in the registry, then it will error. - -`/foo/v1.2.3` (semver-compatible tag) -Post a link to a tarball. If the version is already in the registry, then it will error. - -`/foo/nightly` -Post a link to a tarball. If there is already a nightly version of the package, then it will be updated to point at the new location. However, this should not be done often, as the GET is a 301 redirection. - - +see: [js-registry](http://github.com/mikeal/js-registry) |