Commit Graph
98 Commits
Author SHA1 Message Date
Jasper Van 9d70acfdea feat(licensing): support independent business authorization
Support independent Pro and Business licensing, migrate Cloud store integration through the SDK, gate Business-only credit billing features, and validate the Cloud store E2E flow.
2026-06-08 01:42:23 -04:00
saltbo d1c83ccece refactor(objects): run file operations sequentially 2026-06-06 12:46:18 -04:00
saltbo 65eb5d9738 fix(downloader): reset runtime on task restart 2026-06-06 00:54:26 -04:00
saltbo 6aa711bfb6 refactor(downloads): reshape download task status model 2026-06-06 00:07:21 -04:00
saltbo 8f272b8a41 refactor(downloader): clarify task states and restart action 2026-06-05 21:51:32 -04:00
saltbo 9dd3ca0105 fix(downloader): separate interrupted task recovery 2026-06-05 21:34:57 -04:00
saltbo 3f7a859e73 refactor(downloader): consolidate api contract generation 2026-06-05 15:24:56 -04:00
saltbo b05bf4f07e fix(downloads): normalize target folder paths 2026-06-05 10:10:44 -04:00
saltbo 4dcbab55b1 feat(downloads): improve task controls and metadata 2026-06-04 14:57:44 -04:00
saltbo 94dada75ba feat(downloads): add task actions and classification 2026-06-04 14:08:39 -04:00
saltbo 6276530476 feat(auth): unify api key management 2026-06-04 12:39:59 -04:00
saltbo 1b4f149d05 feat(downloads): stream normalized task details 2026-06-03 13:08:14 -04:00
saltbo 754d1aaa3d fix(downloads): separate storage and peer upload metrics 2026-06-03 12:23:31 -04:00
saltbo cf3324b4a2 feat(downloads): preserve directory uploads 2026-06-03 12:05:55 -04:00
saltbo f698e5a8a9 feat(downloads): show normalized task details 2026-06-03 11:12:56 -04:00
saltbo 53076d7873 feat(downloads): add remote download workers 2026-06-03 02:21:50 -04:00
saltbo 1ff6d13998 feat(billing): meter storage egress with credits 2026-06-02 22:22:40 -04:00
saltbo 7f85da222f feat(quota): consolidate storage entitlements 2026-06-02 20:12:59 -04:00
saltbo dd1d237945 feat(store): add credits package management 2026-06-02 13:38:11 -04:00
Jasper Van 650f209fe8 docs: clarify cloud credit billing boundaries
Clarify ZPAN's Cloud Credits boundaries and keep gift-card creation on the Credits-only contract.
2026-06-02 03:41:07 -04:00
Jasper Van 908786837d fix: align store pricing with USD contract
* fix: align store pricing with usd contract

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: align gift card cloud payload

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: normalize cloud gift card credits

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: cover gift card payload without expiry

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: keep gift card payload mapping executable

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: map credits to cloud wallets

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: align credits e2e selector

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: keep store credits on credits contract

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98
2026-06-02 01:44:00 -04:00
Jasper Van f45e8732fc feat: integrate cloud credits store flow
Replace ZPAN Store Wallet semantics with Credits-only APIs and UI.

Proxy Cloud credits through credit-account routes, send unitless gift-card credits, and block metered downloads on insufficient Cloud credits before presign while rolling back local counters.

Verification waiver: E2E fails only because the hosted Cloud target rejects the merged Credits gift-card payload; AK follow-up kxel47x6x6l3 tracks that target gap.
2026-06-01 22:31:46 -04:00
Jasper Van 8b45c6218a fix: use better auth captcha providers (#401)
Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98
2026-05-13 16:39:09 -04:00
Jasper Van fdb61c2a14 feat: add captcha protection for authentication (#400)
* feat: add captcha protection for authentication

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: guard captcha option key literal

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: avoid captcha placeholder literal

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: pin captcha secret option literal

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* fix: block oauth when captcha is enabled

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: cover captcha social pass-through

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98

* test: cover settings identity and registration saves

Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98
2026-05-13 15:20:28 -04:00
Jasper Van 0694d5511a feat: add local archive background jobs 2026-05-11 20:42:01 -04:00
Jasper Van 2053b84c1a feat: add background job foundation (#388)
* feat: add background job foundation

Agent-Profile: https://agent-kanban.dev/agents/1dc839c09b5ee5e5

* fix: normalize cloud gift card create responses

Agent-Profile: https://agent-kanban.dev/agents/1dc839c09b5ee5e5
2026-05-11 19:24:54 -04:00
saltbo e82f868568 fix(cloud-store): read order deliverable quotas 2026-05-11 15:34:02 -04:00
saltbo 9efdcbb424 refactor(cloud-store): use cloud sdk contracts 2026-05-11 15:03:34 -04:00
saltbo 0795867993 fix(cloud-store): read order item deliverables 2026-05-11 11:49:45 -04:00
saltbo 0c070d8a83 fix(cloud-store): align gift cards with cloud model 2026-05-11 10:10:04 -04:00
saltbo 8c9dcfd928 fix(cloud-store): use wallet balances endpoint 2026-05-10 14:05:21 -04:00
saltbo 0de620d021 fix(cloud-store): align customer fields with cloud 2026-05-10 13:41:43 -04:00
saltbo acc2e81b98 refactor(cloud-store): rename end user fields to consumer 2026-05-10 12:29:58 -04:00
saltbo 73a592c8d9 feat(pro): tighten gates and unify upgrade prompts 2026-05-10 01:58:49 -04:00
saltbo 0f0ea65cb1 feat(storage): allow metered traffic overage 2026-05-09 15:27:54 -04:00
saltbo 46cacc011c feat(storage): redesign plan catalog 2026-05-09 15:10:48 -04:00
saltbo ae3f368335 feat(billing): configure per-currency metered plan pricing 2026-05-09 13:02:41 -04:00
saltbo 25c4a3c3ac feat(billing): configure traffic overage price on plans 2026-05-09 12:24:10 -04:00
saltbo 1ebc46fac0 feat(store): manage workspace subscription plans 2026-05-09 09:25:39 -04:00
saltbo 0b2e7d40cc feat(store): support subscription and fixed quota packages 2026-05-09 08:28:38 -04:00
saltbo 58d94c3df6 feat(cloud-store): accept opaque store deliveries 2026-05-09 00:07:37 -04:00
saltbo 25416a5f18 feat(quota): support plan and extra entitlement quotas 2026-05-08 23:34:15 -04:00
Jasper Van bf8a4f5877 feat: add quota entitlements (#383)
Agent-Profile: https://agent-kanban.dev/agents/1dc839c09b5ee5e5
2026-05-08 19:21:34 -04:00
Jasper Van 0b65e2dc15 [v2.6] Integrate zpan with new cloud order flow and complete migration cleanup
fix(store): guard cloud order actions by org
2026-05-08 15:42:05 -04:00
Jasper Van 11ab430493 refactor(quota-store): unify orders and gift cards
* refactor(quota-store): unify orders and gift cards

* test(quota-store): cover helper paths

* test(quota-store): cover webhook idempotency

* test(quota-store): cover cloud response normalization
2026-05-07 09:03:55 -04:00
Jasper Van 9cabe3ccc1 feat: align Storage Plans with combined package model
Update ZPan to treat each Store package as one product that can include both storage quota and download traffic quota.

- replace package resourceType/resourceBytes with storageBytes/trafficBytes in shared schemas and types
- widen package and checkout currency handling to string
- update Cloud proxy parsing for new package response shapes
- redesign admin package form/list and Store package cards around combined quotas
- update API and UI tests for storage-only, traffic-only, and combined package flows
- remove an unreachable duplicate parser branch so Codecov patch coverage stays green

Task: jrfmeahm17rp
2026-05-06 22:48:56 -04:00
Jasper VanandCopilot bf0bf99ef4 feat: separate storage code revoke and delete
* feat(quota-store): separate revoke and delete semantics for redemption codes

- PATCH /api/admin/quota-store/storage-codes/:code accepts { revokedAt } to
  revoke a code (keeps it visible, prevents future redemptions)
- DELETE /api/admin/quota-store/storage-codes/:code removes eligible codes
- Added revokeStorageCodeSchema (shared) with zValidator on PATCH route
- Fixed revokeStorageRedemptionCode API fn to use PATCH with revokedAt payload
- Added deleteStorageRedemptionCode API fn using DELETE
- UI: separate Revoke and Delete buttons per code row with distinct disabled rules
  - Revoke disabled when already revoked or fully redeemed
  - Delete disabled when any redemptions exist (usesCount > 0)
- Updated confirmation copy to describe product outcome, not technical action
- i18n: added delete keys in en.json and zh.json; updated revokeConfirm copy
- Updated integration, unit, and component tests

Agent-Profile: https://agent-kanban.dev/agents/f68cfbce6456edb5
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix: align storage code revoke contract

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-06 17:08:41 -04:00
Jasper Van df2e2a8cd3 feat: manage Cloud storage packages
Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98
2026-05-06 16:46:10 -04:00
Jasper Van a4f9e3ff6a refactor: proxy quota store through cloud
Agent-Profile: https://agent-kanban.dev/agents/a318237412dd8b98
2026-05-06 16:16:20 -04:00
Jasper Van 3a88c17d6e feat: add monthly traffic quotas
Agent-Profile: https://agent-kanban.dev/agents/1dc839c09b5ee5e5
2026-05-06 13:41:20 -04:00