refactor(billing): remove Stripe; payments are Payple (web) and Google Play (mobile)
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Failing after 1m13s
ci / 워크스페이스 빌드 검증 (push) Has been skipped
ci / 모바일 린트·타입·Jest (push) Failing after 1m4s
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 37s
ci / .NET API 서버 테스트 (push) Successful in 27s
deploy-site / deploy (push) Failing after 20s
Some checks failed
ci / 정본·보안·린트·타입·테스트 (push) Failing after 1m13s
ci / 워크스페이스 빌드 검증 (push) Has been skipped
ci / 모바일 린트·타입·Jest (push) Failing after 1m4s
ci / Supabase Edge Functions + Cloudflare Worker (push) Successful in 37s
ci / .NET API 서버 테스트 (push) Successful in 27s
deploy-site / deploy (push) Failing after 20s
Stripe is not used. Keeping its checkout, portal and webhook paths meant a
second payment provider, a second return-URL format and dead UI.
- Delete the stripe-checkout, stripe-portal and stripe-webhook functions and
their config; billing-catalog serves Payple prices only, and the web parser
rejects a catalog that still mixes in Stripe prices.
- Web: drop the Stripe checkout/portal buttons, provider toggle and return
notices; billing shows Payple only. Past rows with provider='stripe' are
still displayed ("Stripe (종료)") with a support contact instead of a portal.
- Desktop: delete the Stripe checkout modal, payment IPC channels, preload
namespace and their types; "Remove ads with Pro" opens the web billing page
via license.openBilling. Support/refund copy names Payple.
- billingUrl() loses the Stripe-only success/canceled result option; the
Deno contract is regenerated.
- Migrations and the DB's accepted provider values are untouched (history).
- Docs and the backlog record the removal (MON-04, EXT-STRIPE-01, GAP-BILL-03).
Verified: typecheck (desktop/web/admin/api-client/mobile), contract:check,
deno check all functions, deno test 80/80, desktop 1478/1480 on the Electron
runtime (2 known environment failures), web and admin builds, release
metadata and mobile boundary self-tests, eslint on changed files.
This commit is contained in:
parent
7224e43bfb
commit
eedd127ea7
50 changed files with 97 additions and 2600 deletions
|
|
@ -277,7 +277,7 @@
|
|||
- [x] M-010 구매 복원은 실제 스토어 조회+서버 검증 후에만 성공 표시
|
||||
- [x] M-011 구독 관리 버튼을 Google Play 구독 관리 화면으로 연결
|
||||
- [x] M-012 현재 플랜·만료/갱신일·결제 provider·사용량·결제 내역 표시
|
||||
- [~] M-013 가격·기능표를 서버/스토어 SSOT로 통일하고 hardcoded 가짜 가격 제거 — Web billing catalog·desktop checkout server readback·모바일 Play product 가격 사용, production Play/Payple/Stripe 교차 검증 대기
|
||||
- [~] M-013 가격·기능표를 서버/스토어 SSOT로 통일하고 hardcoded 가짜 가격 제거 — Web billing catalog·desktop checkout server readback·모바일 Play product 가격 사용, production Play/Payple 교차 검증 대기 (Stripe는 2026-09-26 제거)
|
||||
- [x] M-014 Google Mobile Ads SDK와 test/prod app ID·unit ID 분리
|
||||
- [x] M-015 Free entitlement에만 adaptive banner를 안정적인 앱 레이아웃 영역에 표시
|
||||
- [x] M-016 Pro/Pro+ entitlement에서는 광고 request 자체를 하지 않음
|
||||
|
|
@ -387,7 +387,7 @@
|
|||
| Ads test | Free Google test banner→rewarded 완주 + production 콘솔/SSV 연결 | 공식 `Test Ad` banner/`AdActivity`/`Reward granted` 실측과 미구성 시 fail-closed를 유지한다. production ID, `50 cloud_ai_tokens`, secret, verified SSV URL, Edge v13, receipt exactly-once는 운영 반영했다. production 광고를 클릭하지 않았으며 test-device 실제 Google-signed reward E2E는 남음 | `scratch/demo/d3ro-mobile-test-ad.png`, `d3ro-mobile-rewarded-test-ad.png`, `server/supabase/functions/admob-ssv`, AdMob live console | 2026-08-24 |
|
||||
| Admin live-local | login→JWT proxy→role/subscription/audit + stale-role | .NET 21/21, migration 25, Edge/JWT 47 assertions, TLS Chromium console/5xx 0 | `scratch/admin-browser-e2e.png` | 2026-08-21 |
|
||||
| STT fail-closed quota | Deno/.NET contracts + 00026 SQL/REST concurrency | provider 전체 실패 502/503, direct legacy user 410, internal exact service token only. 20 concurrent remaining-base 요청에서 exactly 1 reserve, replay single charge, 3 overage exact, provider failure refund, authenticated ledger/RPC denial, fixture 0 | `server/supabase/functions/stt-proxy`, `apps/api-server/Controllers/SttController.cs`, `server/supabase/migrations/20260821000026_stt_quota_reservations.sql`, `apps/mobile-rn/__tests__/stt-quota.local.integration.mjs` | 2026-08-21 |
|
||||
| Desktop payment·ads | authenticated Edge-only checkout/subscription readback + no-fill·위조 event·reward·settlement 경계 | 임의 provider/tier/URL, 무조건 성공 verify, legacy local license 우회를 제거하고 timeout·retry idempotency를 fail-closed로 검증. 광고 20/20, 전체 desktop 590 tests, typecheck/build/scoped lint GREEN; 실제 production provider 결제 E2E는 외부 게이트 | `apps/desktop/src/main/ipc/payment-handlers.ts`, `apps/desktop/tests/unit/payment-handlers.spec.ts`, `scratch/demo/d3ro-desktop-ads-fail-closed.png` | 2026-08-21 |
|
||||
| Desktop payment·ads | authenticated Edge-only checkout/subscription readback + no-fill·위조 event·reward·settlement 경계 | 임의 provider/tier/URL, 무조건 성공 verify, legacy local license 우회를 제거하고 timeout·retry idempotency를 fail-closed로 검증. 광고 20/20, 전체 desktop 590 tests, typecheck/build/scoped lint GREEN; 실제 production provider 결제 E2E는 외부 게이트 | `apps/desktop/src/main/ipc/payment-handlers.ts`, `apps/desktop/tests/unit/payment-handlers.spec.ts`, `scratch/demo/d3ro-desktop-ads-fail-closed.png` (2026-09-26: Stripe 제거로 두 파일 삭제, 데스크톱 업그레이드는 `LICENSE.OPEN_BILLING` → `billingUrl()` 웹 Payple) | 2026-08-21 |
|
||||
| Credential gate | repository runtime secret scan + release-keystore audit + API fail-closed bootstrap | 평문 keystore password를 포함하던 untracked 생성 스크립트를 발견해 환경변수·PKCS12·create-only로 교체하고 scanner에 keytool literal negative case 추가. 노출된 키는 live direct APK cert `06:EE:…:E4:81`과 동일해 `d3ro-release-key.COMPROMISED-20260821.keystore`로 보존 격리했으며 active path에서 제거. scanner self-test/전체 scan, .NET 26/26, script syntax GREEN | `scripts/gen-keystore.js`, `scripts/ci/check-no-hardcoded-secrets.mjs`, `.github/workflows/ci.yml` | 2026-08-21 |
|
||||
| Exact-APK cold launch | fresh uninstall/install→`am start -W`→top activity/logcat | GREEN; exact `.11` SHA-256 `74035B69…380C2B` fresh install, `LaunchState:COLD`, total 0.872초, `MainActivity` top-resumed. fresh auth·signup·invite PASS, fatal/ANR/React fatal 0 | API 34 `emulator-5556`, installed package inspection + Maestro + logcat | 2026-08-21 |
|
||||
| Exact-APK Maestro E2E | exact `.11` TEST-DEMO fresh install + auth/signup/invite, 직전 `.9` small-screen journey | `.11` GREEN: fresh-install-auth 30s, fresh-install-signup 40s, invite warm listener+cold `getInitialURL` 14s. 동일 UI `.9`의 320x568dp signup 2m39s PASS. `.11` 전체 구간 fatal/ANR/React fatal 0 | `apps/mobile-rn/.maestro/*.v11.junit.xml`, `apps/mobile-rn/.maestro-output`, `apps/mobile-rn/.maestro-output/final-20260821-9` | 2026-08-21 |
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue