@prave/shared 1.0.9 → 1.0.10

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.
@@ -14,18 +14,24 @@ export declare const billingProfileSchema: z.ZodObject<{
14
14
  stripe_subscription_id: z.ZodNullable<z.ZodString>;
15
15
  subscription_status: z.ZodNullable<z.ZodEnum<["active", "trialing", "past_due", "canceled", "incomplete", "incomplete_expired", "unpaid"]>>;
16
16
  current_period_end: z.ZodNullable<z.ZodString>;
17
+ /** When true the user has cancelled but still has access until
18
+ * current_period_end. UI surfaces "Access ends on …" instead of
19
+ * "Renews on …" so the cancellation is unambiguously visible. */
20
+ cancel_at_period_end: z.ZodNullable<z.ZodBoolean>;
17
21
  }, "strip", z.ZodTypeAny, {
18
22
  plan: "free" | "explorer" | "creator";
19
23
  stripe_customer_id: string | null;
20
24
  stripe_subscription_id: string | null;
21
25
  subscription_status: "active" | "trialing" | "past_due" | "canceled" | "incomplete" | "incomplete_expired" | "unpaid" | null;
22
26
  current_period_end: string | null;
27
+ cancel_at_period_end: boolean | null;
23
28
  }, {
24
29
  plan: "free" | "explorer" | "creator";
25
30
  stripe_customer_id: string | null;
26
31
  stripe_subscription_id: string | null;
27
32
  subscription_status: "active" | "trialing" | "past_due" | "canceled" | "incomplete" | "incomplete_expired" | "unpaid" | null;
28
33
  current_period_end: string | null;
34
+ cancel_at_period_end: boolean | null;
29
35
  }>;
30
36
  export type BillingProfile = z.infer<typeof billingProfileSchema>;
31
37
  export declare const billingCadenceSchema: z.ZodEnum<["monthly", "yearly"]>;
@@ -1 +1 @@
1
- {"version":3,"file":"billing.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/billing.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU,4CAA0C,CAAA;AACjE,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAE7C,eAAO,MAAM,wBAAwB,yGAQnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;EAM/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,oBAAoB,kCAAgC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,0BAA0B;;;;;;;;;EAGrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEnF,eAAO,MAAM,2BAA2B;;;;;;EAEtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA"}
1
+ {"version":3,"file":"billing.schema.d.ts","sourceRoot":"","sources":["../../src/schemas/billing.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,eAAO,MAAM,UAAU,4CAA0C,CAAA;AACjE,MAAM,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAA;AAE7C,eAAO,MAAM,wBAAwB,yGAQnC,CAAA;AACF,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEzE;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;;;;IAM/B;;sEAEkE;;;;;;;;;;;;;;;;EAElE,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,oBAAoB,kCAAgC,CAAA;AACjE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAEjE,eAAO,MAAM,0BAA0B;;;;;;;;;EAGrC,CAAA;AACF,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAA;AAE7E,eAAO,MAAM,6BAA6B;;;;;;;;;EAGxC,CAAA;AACF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAEnF,eAAO,MAAM,2BAA2B;;;;;;EAEtC,CAAA;AACF,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAA"}
@@ -20,6 +20,10 @@ export const billingProfileSchema = z.object({
20
20
  stripe_subscription_id: z.string().nullable(),
21
21
  subscription_status: subscriptionStatusSchema.nullable(),
22
22
  current_period_end: z.string().datetime().nullable(),
23
+ /** When true the user has cancelled but still has access until
24
+ * current_period_end. UI surfaces "Access ends on …" instead of
25
+ * "Renews on …" so the cancellation is unambiguously visible. */
26
+ cancel_at_period_end: z.boolean().nullable(),
23
27
  });
24
28
  export const billingCadenceSchema = z.enum(['monthly', 'yearly']);
25
29
  export const billingCheckoutInputSchema = z.object({
@@ -1,6 +1,7 @@
1
1
  export * from './categories.js';
2
2
  export * from './plan-limits.js';
3
3
  export * from './intelligence.js';
4
+ export * from './referrals.js';
4
5
  export type UserPlan = 'free' | 'explorer' | 'creator';
5
6
  export type UserRole = 'user' | 'admin';
6
7
  export interface Profile {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AAEjC,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AACtD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,OAAO,4BAA4B,EAAE,KAAK,EAAE,CAAA;IACpD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAE9B,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;AACtD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAA;AAEvC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,QAAQ,CAAA;IACd,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAA;IACtB,MAAM,EAAE,OAAO,4BAA4B,EAAE,KAAK,EAAE,CAAA;IACpD,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;CACd"}
@@ -1,3 +1,4 @@
1
1
  export * from './categories.js';
2
2
  export * from './plan-limits.js';
3
3
  export * from './intelligence.js';
4
+ export * from './referrals.js';
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Refer-a-Friend types.
3
+ *
4
+ * Server-of-truth for the wire shape between API and frontend. Status
5
+ * mirrors the DB enum on `referral_rewards.status`.
6
+ */
7
+ export type ReferralStatus = 'pending' | 'granted' | 'voided';
8
+ export interface ReferralReward {
9
+ id: string;
10
+ referrer_id: string;
11
+ referred_user_id: string;
12
+ status: ReferralStatus;
13
+ reward_value_cents: number | null;
14
+ stripe_subscription_id: string | null;
15
+ granted_at: string | null;
16
+ voided_at: string | null;
17
+ void_reason: string | null;
18
+ created_at: string;
19
+ }
20
+ /** Aggregated stats shown on the Settings → Refer a Friend card. */
21
+ export interface ReferralStats {
22
+ /** How many friends have signed up via this user's link. */
23
+ referred_count: number;
24
+ /** Rewards already granted (friend converted to Pro/Max). */
25
+ granted_count: number;
26
+ /** Rewards held until referrer upgrades or friend's subscription matures. */
27
+ pending_count: number;
28
+ /** Total cents already credited to the referrer's Stripe customer balance. */
29
+ earned_cents: number;
30
+ }
31
+ /** What `GET /api/v1/me/referrals` returns. */
32
+ export interface ReferralLink {
33
+ code: string;
34
+ share_url: string;
35
+ stats: ReferralStats;
36
+ }
37
+ /** What `GET /api/v1/me/referrals/history` returns — recent reward rows
38
+ * enriched with the friend's public profile slice for UI rendering. */
39
+ export interface ReferralHistoryItem {
40
+ id: string;
41
+ status: ReferralStatus;
42
+ reward_value_cents: number | null;
43
+ granted_at: string | null;
44
+ created_at: string;
45
+ friend: {
46
+ id: string;
47
+ username: string | null;
48
+ display_name: string | null;
49
+ avatar_url: string | null;
50
+ } | null;
51
+ }
52
+ export interface ReferralHistoryResponse {
53
+ items: ReferralHistoryItem[];
54
+ has_more: boolean;
55
+ }
56
+ //# sourceMappingURL=referrals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"referrals.d.ts","sourceRoot":"","sources":["../../src/types/referrals.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAA;AAE7D,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,MAAM,EAAE,cAAc,CAAA;IACtB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAA;IACrC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,oEAAoE;AACpE,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,cAAc,EAAE,MAAM,CAAA;IACtB,6DAA6D;IAC7D,aAAa,EAAE,MAAM,CAAA;IACrB,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAA;IACrB,8EAA8E;IAC9E,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,+CAA+C;AAC/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,aAAa,CAAA;CACrB;AAED;wEACwE;AACxE,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,cAAc,CAAA;IACtB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAA;QACV,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;QAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;KAC1B,GAAG,IAAI,CAAA;CACT;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,mBAAmB,EAAE,CAAA;IAC5B,QAAQ,EAAE,OAAO,CAAA;CAClB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Refer-a-Friend types.
3
+ *
4
+ * Server-of-truth for the wire shape between API and frontend. Status
5
+ * mirrors the DB enum on `referral_rewards.status`.
6
+ */
7
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prave/shared",
3
- "version": "1.0.9",
3
+ "version": "1.0.10",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"