Privnode サブスクリプション管理
概要
Privnode Subscription Manageは、毎月の卸売り向けAPIクォータを販売・管理するための独立した管理システムです。特徴として、APIトラフィックを中継(プロキシ)せず、決済はStripeを課金エンジンとしてのみ利用します。Privnode本体とは分離されており、ユーザーのサブスクリプション情報は原則としてPrivnodeのusers.subscription_dataへは「デプロイ」「無効化」「移行」の3つの操作時のみ書き込みを行います。プラットフォームIDやサブスクリプションIDに統一フォーマット(pln_/sub_ + 16文字)を採用し、運用と追跡を簡潔にしています。
リポジトリの統計情報
- スター数: 6
- フォーク数: 1
- ウォッチャー数: 6
- コミット数: 11
- ファイル数: 16
- メインの言語: TypeScript
主な特徴
- APIトラフィックをプロキシせず、システムは課金・管理に集中。
- Stripeを課金エンジンとして統合し、決済フローを外部委譲。
- Privnode DBへの書き込みは限定的(deploy/deactivate/transfer のみ)。
- プラットフォームID/サブスクリプションIDの命名規則により追跡が容易。
技術的なポイント
本プロジェクトはTypeScriptで実装されており、型安全性を活かした堅牢なコードベースを想定しています。Stripeとの連携は「課金エンジンとしてのみ」使う方針で、課金イベントの管理と顧客・プラン・サブスクリプションの同期を行います。実運用上はStripe Webhookを受けて内部処理(請求成功・失敗、サブスク更新など)を行い、必要に応じてPrivnodeのusers.subscription_dataへ変更を書き込むフローが設計されていますが、その書き込みは「デプロイ」「無効化」「移行」の三操作に限定され、Privnode側の責務を尊重する分離アーキテクチャが取られています。
ID設計には pln_ と sub_ のプレフィックス(各16桁の英数字を付与)を採用しており、外部システムとの連携やログ追跡を容易にします。Dockerfileや.dockerignoreが含まれているためコンテナ化されたデプロイが可能で、CI/CDやコンテナベースの運用へ容易に組み込めます。エラーハンドリングや冪等性の配慮(Webhookの再送、DBトランザクション)は重要で、Stripeのイベント処理では特に重複処理回避とロールバック設計が鍵になります。さらに、APIトラフィックをプロキシしないことによりデータ転送量やレイテンシの負担が軽減され、セキュリティおよびコンプライアンス面でも責任範囲が明確化されています。
プロジェクトの構成
主要なファイルとディレクトリ:
- .dockerignore: file
- .gitignore: file
- .idea: dir
- Dockerfile: file
- README.md: file
…他 11 ファイル
まとめ
独立した課金・サブスク管理に特化した実用的なTypeScriptベースのプロジェクトです。
リポジトリ情報:
- 名前: privnode_subscription_manage
- 説明: 説明なし
- スター数: 6
- 言語: TypeScript
- URL: https://github.com/Privnode-HQ/privnode_subscription_manage
- オーナー: Privnode-HQ
- アバター: https://avatars.githubusercontent.com/u/224341022?v=4
READMEの抜粋:
Privnode Subscription Manage
An independent management system for selling and operating monthly wholesale API quota bundles.
- This site does not proxy any API traffic.
- Stripe is used only as the billing engine.
- Privnode is a separate DB; we only write to Privnode
users.subscription_dataon:- deploy
- deactivate
- transfer
Key Rules
pln_andsub_are platform IDs.plan_id:pln_+ 16 alnumsubscription_id:sub_+ 16 alnum- They ar…