{"id":47813770,"url":"https://github.com/interledger/open-payments-playground","last_synced_at":"2026-04-03T18:19:57.320Z","repository":{"id":346536736,"uuid":"1023615192","full_name":"interledger/open-payments-playground","owner":"interledger","description":"Express.js app for interacting with Open Payments APIs","archived":false,"fork":false,"pushed_at":"2026-03-25T08:22:00.000Z","size":537,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-25T11:35:18.567Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/interledger.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-07-21T12:32:30.000Z","updated_at":"2026-03-25T08:22:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/interledger/open-payments-playground","commit_stats":null,"previous_names":["interledger/open-payments-playground"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/interledger/open-payments-playground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interledger%2Fopen-payments-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interledger%2Fopen-payments-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interledger%2Fopen-payments-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interledger%2Fopen-payments-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/interledger","download_url":"https://codeload.github.com/interledger/open-payments-playground/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/interledger%2Fopen-payments-playground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31368163,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-03T18:19:56.067Z","updated_at":"2026-04-03T18:19:57.303Z","avatar_url":"https://github.com/interledger.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Open Payments Express App\n\nA lightweight application to show the Open Payments API functions.\n\n## Requirements\n\nBefore you begin, you need to install the following tools:\n\n- [Visual Studio Code](https://code.visualstudio.com/)\n- [Node (\u003e= v18.18)](https://nodejs.org/en/download/)\n- [Git](https://git-scm.com/downloads)\n\n## 🚀 Quickstart\n\n### 1. Clone the repository\n\nOpen `Visual Studio Code` and open a `terminal` in your Visual Studio Code. Then run this command below:\n\n```bash\ngit clone git@github.com:interledger/open-payments-playground.git\n```\n\n### 2. Install Dependencies\n\n```bash\nnpm install\n```\n\n### 3. Setup `.env` file\n\n- Follow this tutorial to setup your [test wallet](https://openpayments.dev/sdk/before-you-begin/)\n- Create a new `.env` file, right next to the `.env.example` and copy all code from `.env.example` to `.env`.\n- Copy key ID and the wallet address into the `.env` file.\n- Put the private key in the root folder i.e. open-payments-express/private.key.\n  \u003e Note: The private key file was saved and generated automatically when you created `Developer Keys` for your wallet address.\n\n### 4. Start the Server\n\n```bash\n# Development mode with auto-restart\nnpm run dev\n```\n\nThis command does two things:\n\n- Runs `tsx scripts/generate-schemas.ts`, which generates the latest schemas and TypeScript types from the definitions in `openapi`. It puts these files in the `public/schemas` folder and the `types` folder respectively.\n- Starts the development server with `tsx watch`, so changes to `.ts` files auto-restart the server.\n\nThe server will start on `http://localhost:3001`\n\n### 5. Run the Production Build\n\nUse these commands for a production-style run:\n\n```bash\nnpm run build\nnpm start\n```\n\n- `npm run build` compiles `server.ts` into `dist/server.js` and also generates the schemas.\n- `npm start` runs the built server from the `dist` folder.\n\n## 📂 Project Structure\n\n```\n├── openapi/ # JSON Schemas for the different servers (reference only)\n│ ├── auth-server.json # Auth server schema\n│ ├── resource-server.json # Resource server schema\n│ └── wallet-address-server.json # Wallet address server schema\n│\n├── scripts/ # Build scripts for generating artifacts\n│ └── generate-schemas.ts # Generates JSON schemas from TypeScript types\n│\n├── services/ # Service layer for making Open Payments requests\n│ └── open-payments.ts # Implementation of Open Payments API calls\n│\n├── types/ # Legacy generated types (deprecated)\n│ ├── access-incoming.d.ts\n│ ├── access-outgoing.d.ts\n│ └── ...\n│\n├── server.ts # Express server with API endpoints\n│\n├── index.html # The main UI file for displaying the frontend\n│\n├── public/ # Frontend demo\n│ ├── schemas/ # Generated JSON schemas for form rendering\n│ │ ├── wallet-address_get.json\n│ │ ├── grant_request.json\n│ │ ├── grant_continue.json\n│ │ ├── grant_cancel.json\n│ │ ├── token_rotate.json\n│ │ ├── token_revoke.json\n│ │ ├── incoming-payment_create.json\n│ │ ├── incoming-payment_get.json\n│ │ ├── incoming-payment_complete.json\n│ │ ├── incoming-payment_list.json\n│ │ ├── quote_create.json\n│ │ ├── quote_get.json\n│ │ ├── outgoing-payment_create.json\n│ │ ├── outgoing-payment_get.json\n│ │ └── outgoing-payment_list.json\n│ │\n│ ├── lib/ # JavaScript libraries for the UI\n│ │ ├── json-text-editor.min.js # For the \u003candypf-json-viewer/\u003e element\n│ │ └── json-ui-editor.min.js # For rendering HTML forms from schemas\n│ │\n│ ├── script.js # Logic for rendering forms, submitting requests, and history\n│ ├── styles.css # The styling\n│ ├── logo.png # Application logo\n│ └── favicon.svg # Application favicon\n│\n└── ... # Other files for the project\n```\n\n## 🔧 Schema Generation\n\nThe application uses a custom schema generation approach that leverages TypeScript types from the `@interledger/open-payments` package.\n\n### How It Works\n\nThe `scripts/generate-schemas.ts` script:\n\n1. **Imports TypeScript types** from `@interledger/open-payments/dist/client/index.d.ts` and `@interledger/open-payments/dist/types.d.ts`\n2. **Creates intersection types** by combining multiple TypeScript types (e.g., `ResourceRequestArgs \u0026 CreateIncomingPaymentArgs`)\n3. **Generates JSON schemas** using `typescript-json-schema` to convert TypeScript types to JSON Schema format\n4. **Outputs schemas** to `public/schemas/` for use in the UI forms\n\n### Naming Convention\n\nAPI endpoint schemas follow this naming pattern:\n\n```\n\u003cresource-type\u003e_\u003caction-type\u003e.json\n```\n\nWhere:\n\n- **`\u003cresource-type\u003e`**: Kebab-case resource name (e.g., `wallet-address`, `incoming-payment`, `outgoing-payment`)\n- **`\u003caction-type\u003e`**: Lowercase action from the client route method (e.g., `get`, `create`, `list`, `request`, `rotate`)\n\nExamples:\n\n- `wallet-address_get.json` - Get wallet address\n- `grant_request.json` - Request a grant\n- `incoming-payment_create.json` - Create an incoming payment\n- `outgoing-payment_list.json` - List outgoing payments\n- `quote_get.json` - Get a quote\n\nThis naming convention maps each schema file directly to a client route, making it easier to find the schema for a specific API action.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterledger%2Fopen-payments-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finterledger%2Fopen-payments-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finterledger%2Fopen-payments-playground/lists"}