platform-types 1.10.706 → 1.10.708
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/platform.d.ts +7 -48
- package/dist/subscription.d.ts +50 -16
- package/package.json +1 -1
package/dist/platform.d.ts
CHANGED
|
@@ -845,63 +845,22 @@ export interface TenantBillingRollupRow {
|
|
|
845
845
|
historyError?: TenantBillingHistoryError;
|
|
846
846
|
}
|
|
847
847
|
/**
|
|
848
|
-
*
|
|
849
|
-
*
|
|
850
|
-
*
|
|
851
|
-
*
|
|
852
|
-
*
|
|
853
|
-
* from the code matrix; that route refuses `features`.
|
|
854
|
-
*
|
|
855
|
-
* - `NUMERIC_MISMATCH` — a bullet advertises a number that differs from the
|
|
856
|
-
* numeric entitlement it maps to.
|
|
857
|
-
* - `UNLIMITED_ADVERTISED_AS_CAPPED` — the entitlement is `-1` (unlimited) but
|
|
858
|
-
* the copy advertises a finite cap. Reported separately because the equality
|
|
859
|
-
* compare would otherwise render it as a nonsense mismatch against `-1`.
|
|
860
|
-
* - `UNBACKED_CAPABILITY` — the copy names a capability the tier does not have
|
|
861
|
-
* `status: 'live'` and `enabled: true` for.
|
|
862
|
-
* - `MISSING_FEATURE_ROW` — a bullet states a LIMIT for an entitlement the tier
|
|
863
|
-
* has no row for at all. Distinct from `UNBACKED_CAPABILITY` on purpose: that
|
|
864
|
-
* one means "the row exists but is not live/enabled in the matrix", whereas
|
|
865
|
-
* this one means the supplied catalogue lacks the backing row — a template
|
|
866
|
-
* PATCH cannot add it; the repair is the copy or a matrix change. Collapsing
|
|
867
|
-
* them (as the API briefly did) hides the more severe of the two behind the
|
|
868
|
-
* more common one.
|
|
848
|
+
* @deprecated Nothing produces one any more. The copy↔entitlement consistency
|
|
849
|
+
* check went with the free-text plan copy it checked, so the `warnings` array
|
|
850
|
+
* on the `POST` / `PATCH /platform/billing/plans` replies is ALWAYS empty. The
|
|
851
|
+
* type stays only so a consumer still naming it compiles; it will be removed
|
|
852
|
+
* together with that array.
|
|
869
853
|
*/
|
|
870
854
|
export type CatalogWarningCode = 'NUMERIC_MISMATCH' | 'UNLIMITED_ADVERTISED_AS_CAPPED' | 'UNBACKED_CAPABILITY' | 'MISSING_FEATURE_ROW';
|
|
871
855
|
/**
|
|
872
|
-
*
|
|
873
|
-
*
|
|
874
|
-
*
|
|
875
|
-
* ⚠️ Absence of a warning is NOT a claim that the copy is correct. The matcher
|
|
876
|
-
* pairs a bullet to a feature only on a single unambiguous keyword; a bullet
|
|
877
|
-
* matching two keywords or none is skipped rather than guessed, so it
|
|
878
|
-
* deliberately understates. Reading an empty array as "this tier's copy is
|
|
879
|
-
* verified" inverts that design.
|
|
880
|
-
*
|
|
881
|
-
* ⚠️ That understatement had a second, larger hole: every check used to be
|
|
882
|
-
* COPY-DRIVEN, so a declared feature key that no bullet happened to mention
|
|
883
|
-
* could be missing its row on every tier and warn nothing. That is not
|
|
884
|
-
* hypothetical — `storefront` was absent from all four production tiers, had no
|
|
885
|
-
* marketing bullet, and therefore produced an empty `warnings` array while the
|
|
886
|
-
* feature was locked for every tenant. `source: 'catalog'` exists so a check can
|
|
887
|
-
* be driven by the declared key set instead of by what the copy happens to name.
|
|
856
|
+
* @deprecated See {@link CatalogWarningCode} — no writer emits one; the
|
|
857
|
+
* `warnings` array that carried it is always empty.
|
|
888
858
|
*/
|
|
889
859
|
export interface CatalogWarning {
|
|
890
860
|
code: CatalogWarningCode;
|
|
891
|
-
/**
|
|
892
|
-
* What produced it — one of the `bullets`, the `description`, or `'catalog'`
|
|
893
|
-
* for a check driven by the declared feature key set rather than by copy.
|
|
894
|
-
*/
|
|
895
861
|
source: 'bullets' | 'description' | 'catalog';
|
|
896
|
-
/**
|
|
897
|
-
* The offending bullet, or the description, verbatim. For `source:
|
|
898
|
-
* 'catalog'` there is no copy to quote — it carries the tier that was
|
|
899
|
-
* examined, which is the equivalent "what was checked" value.
|
|
900
|
-
*/
|
|
901
862
|
text: string;
|
|
902
|
-
/** The entitlement the copy was checked against. */
|
|
903
863
|
featureKey: FeatureKey;
|
|
904
|
-
/** Human-readable, already safe to render as-is. */
|
|
905
864
|
message: string;
|
|
906
865
|
}
|
|
907
866
|
/**
|
package/dist/subscription.d.ts
CHANGED
|
@@ -314,11 +314,11 @@ declare global {
|
|
|
314
314
|
*/
|
|
315
315
|
features: PlanFeature[];
|
|
316
316
|
/**
|
|
317
|
-
*
|
|
318
|
-
*
|
|
319
|
-
*
|
|
320
|
-
*
|
|
321
|
-
*
|
|
317
|
+
* @deprecated ALWAYS `[]`. The free-text card copy was retired: a plan
|
|
318
|
+
* card renders {@link Plan.highlights} instead, and no write accepts
|
|
319
|
+
* `bullets` any more (`POST`/`PATCH /platform/billing/plans` answer 400
|
|
320
|
+
* `VALIDATION_FAILED`). A value an old row still stores is ignored, never
|
|
321
|
+
* echoed. The key will be removed once the app's copy editor is gone.
|
|
322
322
|
*/
|
|
323
323
|
bullets: string[];
|
|
324
324
|
/**
|
|
@@ -472,7 +472,7 @@ declare global {
|
|
|
472
472
|
remaining: number | null;
|
|
473
473
|
}
|
|
474
474
|
/**
|
|
475
|
-
* Full subscription snapshot.
|
|
475
|
+
* Full subscription snapshot. Four producers emit it:
|
|
476
476
|
*
|
|
477
477
|
* - `GET /subscription` — the full `usage[]`, including the row-counted
|
|
478
478
|
* `webhooks` / `maxWarehouses` meters. The two are present together or
|
|
@@ -481,7 +481,12 @@ declare global {
|
|
|
481
481
|
* - the `GET /store` subscription embed — WITHOUT those two meters (monthly
|
|
482
482
|
* and lifetime only) and without `provider`;
|
|
483
483
|
* - the reply of the MANAGER `PUT /platform/stores/{storeId}/subscription` —
|
|
484
|
-
* built by the same assembly as `GET /subscription`, meters included
|
|
484
|
+
* built by the same assembly as `GET /subscription`, meters included, read
|
|
485
|
+
* strongly consistent after the write;
|
|
486
|
+
* - the `data` of a `POST /subscription/cancel` that ended a trial with no
|
|
487
|
+
* payment method — the same assembly again, read after the write; `data` is
|
|
488
|
+
* absent from that 200 only when the read itself failed after the trial had
|
|
489
|
+
* already ended. A cancel that reached a provider answers no `data`.
|
|
485
490
|
*
|
|
486
491
|
* The WebSocket only nudges a refetch on subscription/entitlement changes; it
|
|
487
492
|
* never carries this payload.
|
|
@@ -500,6 +505,27 @@ declare global {
|
|
|
500
505
|
* (`externalCustomerId`/`externalSubscriptionId`) are never exposed.
|
|
501
506
|
*/
|
|
502
507
|
provider?: SubscriptionProvider;
|
|
508
|
+
/**
|
|
509
|
+
* Whether the row holds a live provider subscription that `POST /subscription/cancel`
|
|
510
|
+
* can act on: a provider subscription id of its rail's kind (Stripe `sub_…`; a
|
|
511
|
+
* MercadoPago PreApproval id or manual-mode anchor) on a row that is not `canceled`.
|
|
512
|
+
* Unlike `provider`, never a fallback. Carried by every producer, the `GET /store`
|
|
513
|
+
* embed included.
|
|
514
|
+
*
|
|
515
|
+
* `true` does not promise the portal or a payment-method update — those also depend
|
|
516
|
+
* on the rail: MercadoPago has no hosted portal (`501 BILLING_NOT_CONFIGURED`), a
|
|
517
|
+
* manual-mode anchor has no payment method to update (`501`), and a Stripe portal
|
|
518
|
+
* needs the `cus_` Customer (a MANAGER-set `sub_` row without one is `404`).
|
|
519
|
+
*
|
|
520
|
+
* When `false`, those three routes answer `404 NO_SUBSCRIPTION` without calling a
|
|
521
|
+
* provider — no row, a `cus_`-only Stripe checkout, a canceled row, an id from the
|
|
522
|
+
* other rail, and any provider-less row — with exactly two cancel exceptions, both
|
|
523
|
+
* on a provider-less row (no `provider`, provider subscription or customer id):
|
|
524
|
+
* a `trialing` row that is not the platform store, has a `trialEndsAt` and is not
|
|
525
|
+
* covered by a courtesy gift (`freeUntil`) has its trial ended (200); and a row no
|
|
526
|
+
* longer `trialing` that carries `trialEndedFromTier` answers 200 with no write.
|
|
527
|
+
*/
|
|
528
|
+
hasProviderSubscription: boolean;
|
|
503
529
|
billingCycle: BillingCycle | null;
|
|
504
530
|
currentPeriodStart: number | null;
|
|
505
531
|
currentPeriodEnd: number | null;
|
|
@@ -518,13 +544,15 @@ declare global {
|
|
|
518
544
|
*/
|
|
519
545
|
canceledFromTier?: PlanTier | null;
|
|
520
546
|
/**
|
|
521
|
-
* The paid tier a trial ran on when it
|
|
522
|
-
* set only
|
|
523
|
-
*
|
|
524
|
-
* `trialEndsAt` has passed
|
|
525
|
-
*
|
|
526
|
-
*
|
|
527
|
-
*
|
|
547
|
+
* The paid tier a trial ran on when it ended with no payment method —
|
|
548
|
+
* set only when a provider-less `trialing` row (no provider, no provider
|
|
549
|
+
* subscription or customer id) moves to `basico`/`active`: by the grace
|
|
550
|
+
* sweep once its `trialEndsAt` has passed, or by `POST /subscription/cancel`
|
|
551
|
+
* ending it early (that cancel sets this, never `canceledFromTier`).
|
|
552
|
+
* Cleared (`null`) when the store re-subscribes to a paid tier or a provider
|
|
553
|
+
* subscription is canceled — that cancel records its own lost plan in
|
|
554
|
+
* `canceledFromTier`. `null` when absent — every row that never ended a
|
|
555
|
+
* trial that way, or has moved on since.
|
|
528
556
|
*/
|
|
529
557
|
trialEndedFromTier?: PlanTier | null;
|
|
530
558
|
entitlements: SubscriptionEntitlementEntry[];
|
|
@@ -633,7 +661,11 @@ declare global {
|
|
|
633
661
|
* it together with `provider`.
|
|
634
662
|
*/
|
|
635
663
|
mode?: 'preapproval' | 'manual';
|
|
636
|
-
/**
|
|
664
|
+
/**
|
|
665
|
+
* The paid tier a trial with no payment method dropped from — one that expired
|
|
666
|
+
* (the grace sweep) or one the tenant ended through `POST /subscription/cancel`;
|
|
667
|
+
* `null` when a write cleared it.
|
|
668
|
+
*/
|
|
637
669
|
trialEndedFromTier?: PlanTier | null;
|
|
638
670
|
};
|
|
639
671
|
/**
|
|
@@ -648,7 +680,9 @@ declare global {
|
|
|
648
680
|
* `fullName: ''`), `before` holds the trial's `status`/`planTier`/
|
|
649
681
|
* `trialEndsAt`, and `after` holds `status: 'active'`,
|
|
650
682
|
* `planTier: 'basico'`, `trialEndsAt: null` and `trialEndedFromTier`
|
|
651
|
-
* (the trial's tier).
|
|
683
|
+
* (the trial's tier). `subscription.trial_canceled` rows have the same
|
|
684
|
+
* `before`/`after` and name the tenant user who ended the trial through
|
|
685
|
+
* `POST /subscription/cancel` as `actor`.
|
|
652
686
|
*
|
|
653
687
|
* ⚠️ The same partition also carries entitlement-override and advancedPricing
|
|
654
688
|
* rows whose `before`/`after` hold different keys, so consumers must read
|