Token hashes
API, install, publish, and CI tokens are stored as SHA-256 hashes, with an optional server-side pepper.
Security
PackagePass treats every install, publish, token, grant, and version change as an authorization event. That gives teams a clearer security story for internal libraries, customer SDKs, and generated code.
{
"subject": { "type": "customer", "slug": "globex" },
"resource": { "type": "package", "name": "@acme/payments" },
"action": "package:install",
"decision": "allow",
"reason": "active grant"
}Default posture
Vendor review is easier when package distribution is backed by concrete controls instead of broad trust claims.
API, install, publish, and CI tokens are stored as SHA-256 hashes, with an optional server-side pepper.
Published tarballs are stored by PackagePass in the configured tarball object bucket, not served from source repos.
Each package version stores tarball size, SHA-1 shasum, and SHA-512 npm integrity metadata.
Registry metadata and tarball downloads require package:install before PackagePass serves package data.
Token storage
Tokens are generated once for the caller and stored as SHA-256 hashes with an optional server-side pepper.
Artifact storage
Published package tarballs are written to the configured tarball object bucket and referenced by stored object keys.
Release integrity
Each version records tarball size, SHA-1 shasum, SHA-512 integrity, dist-tags, and version status.
Registry authorization
Package metadata and tarball routes authorize package:install before returning packuments or tarball bytes.
Audit retention
Audit retention is enforced by plan: Free 7 days, Team 30 days, Business 180 days, and Enterprise by review.
Buyer proof
Lead with practical controls, not generic trust language. The audience needs to know how PackagePass protects installs, publishes, generated packages, and customer-specific SDK access.
{
"packageName": "@acme/payments",
"version": "4.8.1",
"tarball": {
"size": 24831,
"shasum": "a9993e364706816aba3e25717850c26c9cd0d89d",
"integrity": "sha512-..."
},
"status": "active"
}{
"type": "grant.created",
"actor": { "type": "user", "display": "devex@acme.com" },
"packageName": "@acme/payments",
"resource": {
"subject": { "type": "customer", "slug": "globex" },
"actions": ["package:install"]
}
}Grant conditions currently enforce expiration with expiresAt. Environment, IP allowlist, and version-range conditions are stored as metadata until those checks are added to the policy engine.
To report a security issue or ask for an implementation review, email michael@sedrino.com.