Agent skill · Code Review & Quality

pinme-uniwebpay

Use when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout sessions, payment status reads, refunds, subscriptions, or handling UniwebPay webhooks with @uniwebpay/sdk in a PinMe project.

glitternetworkgithub.com/glitternetworkGitHub ↗
claude-codeMIT
Install
npx skills add glitternetwork/pinme --skill pinme-uniwebpay --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 1
SKILL.md size: 28 KB
Bundled scripts: none
Path: skills/pinme-uniwebpay/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 3,731
Language: TypeScript
Read our review of the source →

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

Review
written from the skill's own SKILL.md · Aug 5, 2026

What it does

Guides writing PinMe Worker code that talks to UniwebPay directly using the @uniwebpay/sdk to handle payments, webhooks, and wallet configuration for a PinMe user.

How it works

  • Establishes a server-side Uniweb client in the Worker using the environment bindings (UNIWEB_SECRET, UNIWEB_API_URL, UNIWEB_PAY_URL, UNIWEB_WEBHOOK_SECRET).
  • Injects environment bindings at deploy time; warns that existing projects must redeploy to pick up new UNIWEB bindings.
  • Recommends creating and reusing stable product/price links and checkout sessions through UniwebPay SDK calls (products.create, prices.create, checkout.create, etc.) and using the provided return values (e.g., session.url, priceId).
  • Emphasizes that the SDK should be instantiated on the server side, not in the browser, and notes retry behavior (GET/DELETE retried on 429/5xx; POST/PATCH not retried).
  • Describes webhook integration: set webhookUrl on per-link or per-product resources; wallet-level webhook URL is a fallback. Webhook verification uses verifyWebhook with the wallet-level secret and enforces HTTPS webhooks. Details matching event types and handling rules are provided, including idempotency and delivery timing.
  • Outlines security rules and forbidden practices (no secrets in responses/logs/code; do not call legacy proxies; avoid browser imports of the SDK).
  • Provides a persistence note for D1 usage only if the project already uses D1 or the user requests persistence.

When to use it

Use when you are generating, modifying, or reviewing PinMe Worker code that accepts UniwebPay payments (links, products/prices, checkout sessions, status reads, refunds, subscriptions) or handles UniwebPay webhooks with the SDK in a PinMe project. It is intended for Cloudflare Worker TypeScript environments.

What it can touch

  • Environment bindings: UNIWEB_SECRET, UNIWEB_WEBHOOK_SECRET, UNIWEB_API_URL, UNIWEB_PAY_URL, UNIWEB_WALLET_ID, WORKER_URL, PROJECT_NAME, DB (D1) as described in Env interface.
  • UniwebPay SDK surface via types and methods shown (products, prices, checkout, payments, refunds, customers, subscriptions, links, wallet, webhooks).
  • Webhook endpoints and verification logic as described (verifyWebhook and related event shapes).

Caveats

  • Existing projects must redeploy after enabling UniwebPay or rotating keys to pick up new bindings.
  • PinMe never exposes the full wallet secret to a Worker or frontend; this secret must be kept server-side.
  • The wallet-level webhook secret is optional in TypeScript; if missing at runtime, return 501 with a hint.
  • Webhook URLs must be HTTPS and use a project-specific webhook path constant; testing locally requires tunneling to expose the Worker.
  • The skill emphasizes not using legacy VibeCash APIs or PinMe payment proxy routes; direct UniwebPay SDK calls are required.
From the SKILL.md

# PinMe UniwebPay Payment Integration Guides writing payment services in a PinMe Worker (Cloudflare Worker TypeScript) that call UniwebPay directly through `@uniwebpay/sdk`. Core model: PinMe provisions the UniwebPay wallet and keys per **PinMe user** (not per project) and injects `UNIWEB_*` environment bindings at Worker deploy time; Worker code calls UniwebPay **directly with the SDK** — it does not go through PinMe payment proxy routes, and it must not call the legacy VibeCash APIs. ## Environment Binding Contract ```typescript export interface Env { UNIWEB_SECRET: string; // PinMe-provisioned sk_server_ key (server-side only) UNIWEB_WEBHOOK_SECRET?: string; // wallet-level whsec_, used to verify webhook signatures UNIWEB_API_URL?: string; // UniwebPay API endpoint override (default https://apiskill.uniwebpay.com) UNIWEB_PAY_URL?: string; // UniwebPay checkout host override (default https://skill.uniwebpay.com) UNIWEB_WALLET_ID?: string; // user-level wallet id (wal_), diagnostics/reconciliation only WORKER_URL?: string; // this project's public URL: https://{projectName}.{platform api domain} PROJECT_NAME?: string; // PinMe project name DB?: D1Database; // project D1 (if enable

What's inside
Steps it walks through
  1. Environment Binding Contract
  2. SDK Client
  3. Choosing an Integration Path
  4. Payment Methods and Currency Rules
  5. SDK Surface Quick Reference
  6. Webhook Integration
  7. Callback URL: set it on the link/product, pointing at this Worker
  8. Verification and Handling
  9. Security Rules
  10. Persistence Guidance (D1)
  11. Worker Reference Implementation
  12. Common Mistakes
  13. Finish Checklist
More from pinme
All skills →
About this skill
What does the pinme-uniwebpay skill do?

Use when generating, modifying, or reviewing PinMe Worker (Cloudflare Worker TypeScript) code that accepts payments through UniwebPay — payment links, products/prices, checkout sessions, payment status reads, refunds, subscriptions, or handling UniwebPay webhooks with @uniwebpay/sdk in a PinMe project.

How do I install it?

Run `npx skills add glitternetwork/pinme --skill pinme-uniwebpay --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From glitternetwork/pinme, a repository with 3,731 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going