passportxyz / passport

Passport allows users to prove their identity through a secure, decentralized UI
Other
975 stars 455 forks source link

Passport XYZ

What is Passport?

Many social organizations, online particularly, have difficulty ensuring that every participant is a unique human and does not have multiple participating accounts. Most existing digital identity solutions are either centralized (e.g., national identity cards) or individualistic (e.g., most “self-sovereign” identity models). However, identity is naturally intersectional and social; everybody shares different data and relationships with a unique set of others. Passport aims to provide a more collaborative and secure infrastructure for digital identity by capturing the richness of our diversely shared lives.

Passport is an identity verification application. We have written software enabling people to grow personal collections of verifiable credentials about themselves and organizations to assess their identities to coordinate rights and responsibilities. The institutions define, verify, and utilize identity as functions of the networked records of the individuals. While we build the Passport agnostic to specific applications, we are actively exploring its benefits for personhood proofs and plurality in organizational designs.

Documentation

Check out our documentation at https://docs.passport.xyz

Contributing

We welcome everyone to contribute to Passport and the Scorer API! Please review our contributing guidelines before proceeding.

You can join our Discord (just be sure to select the builder role when you join) to get help and discuss the project with the rest of the community.

You can also familiarize yourself with our near term project roadmap in the passport project backlog

Reviewing Changes

Once a pull request is sent, the Passport team will review your changes. We outline our process below to clarify the roles of everyone involved.

All pull requests must be approved by two committers before being merged into the repository. If any changes are necessary, the team will leave appropriate comments requesting changes to the code. Unfortunately, we cannot guarantee a pull request will be merged, even when modifications are requested, as the Passport team will re-evaluate the contribution as it changes.

Committers may also push style changes directly to your branch. If you would rather manage all changes yourself, you can disable the "Allow edits from maintainers" feature when submitting your pull request.

The Passport team may optionally assign someone to review a pull request. If someone is assigned, they must explicitly approve the code before another team member can merge it.

When the review finishes, your pull request will be squashed and merged into the repository. If you have carefully organized your commits and believe they should be merged without squashing, please mention it in a comment.

Quick Start

Prerequisites: Node (v16 LTS) plus Yarn and Git

  1. Install Passport (this will install all packages within the passport monorepo):
git clone https://github.com/passportxyz/passport.git
cd passport
npm install --global lerna
lerna init
lerna bootstrap
  1. Create environment files, and replace environment variables with your own values
cp ./app/.env-example.env ./app/.env
cp ./iam/.env-example.env ./iam/.env
cp ./schemas/.env-example.env ./schemas/.env
  1. Start iam, app, and ceramic services concurrently:
# remember to create .env files first
yarn start
  1. Run the Passport Scorer API locally. Set up instructions are here

Passport Data

A passport has two sources of data. The primary source is a postgres database that is hosted by Passport XYZ. To run the passport application locally you will need spin up the Scorer API. All relevant instructions to run the scorer api can be found here. The sample environment variables in the .env-example.env files are configured to make requests to the scorer api running locally. Once the scorer api is running locally, you should have a reliable data source for development.

A second source of data is the Ceramic network. No steps are needed to run the ceramic network locally. The sample environment variables in the .env-example.env files are configured to make requests to a test version of the ceramic network.

The third location is in onchain attestations that are made across about a dozen different networks. For more information on the onchain attestations, you can reference details here.

Background Knowledge

Packages

app

The web app allowing users to interact with their Passport. README

database-client

Contains database connection implementations. Currently supports Ceramic Network. README

iam

The server handling incoming requests to issue credentials and process verifications. README

identity

This is a helper package to compile Spruce DIDKit and export functions for use in iam and app packages.

infra

Holds the Pulumi deployment configuration for this repository. README

schemas

Ceramic schemas and model definitions, and scripts for creating and publishing these to the Ceramic Network. README

types

Shared type definitions. README