vidspotai-shared 1.0.97 → 1.0.98

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.
@@ -42,32 +42,42 @@ export declare const MIN_CREDITS_PER_PAID_OP = 10;
42
42
  */
43
43
  export declare const MIN_CREDITS_PER_IMAGE_OP = 2;
44
44
  /**
45
- * Credits granted on SIGNUP. Zero since 2026-07-22 signing up no longer buys
46
- * anything.
45
+ * Credits granted on SIGNUP one full floored generation ($1.00 of provider
46
+ * cost), no card required. This is the top of the funnel: a new account can try
47
+ * the product once before being asked for anything.
47
48
  *
48
- * It used to be 10 (= one full floored generation = $1.00 of provider cost),
49
- * handed to every new account with no card, no email verification, and no
50
- * device/IP dedup. Measured against production: 23,962 users, 15,021 of whom
51
- * consumed credits, and only 88 who ever spent past the free grant — a 0.59%
52
- * conversion on roughly $15k of given-away provider cost. Combined with the
53
- * refund-on-failure path, single accounts reached 274 jobs and 100 delivered
54
- * videos on a 10-credit balance.
49
+ * Briefly set to 0 on 2026-07-22 (free generation moved behind the card-backed
50
+ * trial) and restored to 10 on 2026-07-24 the acquisition cost of a
51
+ * card-walled first run was judged worse than the give-away.
55
52
  *
56
- * The free generation now lives behind the free trial, which requires a card
57
- * (Stripe Checkout, `trialDays: 1` payment.controller.ts). Same product
58
- * experience, but the grant is tied to a payment instrument that Stripe can
59
- * fingerprint, so it cannot be farmed by making another Google account.
53
+ * Read this before raising it, because the give-away is real and measured:
54
+ * 23,962 users, 15,021 of whom consumed credits, and only 88 who ever spent
55
+ * past the free grant a 0.59% conversion on roughly $15k of provider cost.
56
+ * The grant is handed out with no card, no email verification, and no
57
+ * device/IP dedup, so it is farmable by making another Google account. The
58
+ * mitigations that make 10 tolerable are:
59
+ * - the refund-on-failure loop is closed (see failureBilling.ts) — that loop,
60
+ * not the grant itself, is how single accounts reached 274 jobs and 100
61
+ * delivered videos on a 10-credit balance;
62
+ * - the floor is exactly one generation, so a farmed account gets one video.
60
63
  *
61
- * Set this back above zero ONLY together with an anti-abuse gate (verified
62
- * email + App Check at minimum) — otherwise the farming loop reopens.
64
+ * Anything ABOVE 10 needs an anti-abuse gate first (verified email + App Check
65
+ * at minimum).
63
66
  */
64
- export declare const SIGNUP_GRANT_CREDITS = 0;
67
+ export declare const SIGNUP_GRANT_CREDITS = 10;
65
68
  /**
66
69
  * Credits granted when a card-backed free trial actually starts (the
67
- * `isTrialInvoice` branch in payment.service.handleInvoiceSucceeded). This is
68
- * the value the signup grant used to hand out for free, now earned by adding a
69
- * payment method. Deliberately equal to MIN_CREDITS_PER_PAID_OP so the trial is
70
- * exactly one full generation of any kind.
70
+ * `isTrialInvoice` branch in payment.service.handleInvoiceSucceeded).
71
+ *
72
+ * NOTE: that branch OVERWRITES the credit doc (`total: 10, consumed: 0`), it
73
+ * does not increment. So starting the trial RESETS the balance to 10 available
74
+ * rather than adding 10 to whatever is left of the signup grant — a user who
75
+ * burned their signup 10 gets a fresh 10, but a user who never touched it also
76
+ * ends at 10, not 20. Long-standing behaviour, called out here because
77
+ * SIGNUP_GRANT_CREDITS being non-zero again makes the overlap reachable.
78
+ *
79
+ * Deliberately equal to MIN_CREDITS_PER_PAID_OP so the trial is exactly one
80
+ * full generation of any kind.
71
81
  */
72
82
  export declare const TRIAL_GRANT_CREDITS = 10;
73
83
  //# sourceMappingURL=creditUnit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"creditUnit.d.ts","sourceRoot":"","sources":["../../src/globals/creditUnit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,0EAA0E;AAC1E,eAAO,MAAM,eAAe,QAAqB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,KAA0B,CAAC"}
1
+ {"version":3,"file":"creditUnit.d.ts","sourceRoot":"","sources":["../../src/globals/creditUnit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,iDAAiD;AACjD,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,0EAA0E;AAC1E,eAAO,MAAM,eAAe,QAAqB,CAAC;AAElD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,KAA0B,CAAC"}
@@ -45,31 +45,41 @@ exports.MIN_CREDITS_PER_PAID_OP = 10;
45
45
  */
46
46
  exports.MIN_CREDITS_PER_IMAGE_OP = 2;
47
47
  /**
48
- * Credits granted on SIGNUP. Zero since 2026-07-22 signing up no longer buys
49
- * anything.
48
+ * Credits granted on SIGNUP one full floored generation ($1.00 of provider
49
+ * cost), no card required. This is the top of the funnel: a new account can try
50
+ * the product once before being asked for anything.
50
51
  *
51
- * It used to be 10 (= one full floored generation = $1.00 of provider cost),
52
- * handed to every new account with no card, no email verification, and no
53
- * device/IP dedup. Measured against production: 23,962 users, 15,021 of whom
54
- * consumed credits, and only 88 who ever spent past the free grant — a 0.59%
55
- * conversion on roughly $15k of given-away provider cost. Combined with the
56
- * refund-on-failure path, single accounts reached 274 jobs and 100 delivered
57
- * videos on a 10-credit balance.
52
+ * Briefly set to 0 on 2026-07-22 (free generation moved behind the card-backed
53
+ * trial) and restored to 10 on 2026-07-24 the acquisition cost of a
54
+ * card-walled first run was judged worse than the give-away.
58
55
  *
59
- * The free generation now lives behind the free trial, which requires a card
60
- * (Stripe Checkout, `trialDays: 1` payment.controller.ts). Same product
61
- * experience, but the grant is tied to a payment instrument that Stripe can
62
- * fingerprint, so it cannot be farmed by making another Google account.
56
+ * Read this before raising it, because the give-away is real and measured:
57
+ * 23,962 users, 15,021 of whom consumed credits, and only 88 who ever spent
58
+ * past the free grant a 0.59% conversion on roughly $15k of provider cost.
59
+ * The grant is handed out with no card, no email verification, and no
60
+ * device/IP dedup, so it is farmable by making another Google account. The
61
+ * mitigations that make 10 tolerable are:
62
+ * - the refund-on-failure loop is closed (see failureBilling.ts) — that loop,
63
+ * not the grant itself, is how single accounts reached 274 jobs and 100
64
+ * delivered videos on a 10-credit balance;
65
+ * - the floor is exactly one generation, so a farmed account gets one video.
63
66
  *
64
- * Set this back above zero ONLY together with an anti-abuse gate (verified
65
- * email + App Check at minimum) — otherwise the farming loop reopens.
67
+ * Anything ABOVE 10 needs an anti-abuse gate first (verified email + App Check
68
+ * at minimum).
66
69
  */
67
- exports.SIGNUP_GRANT_CREDITS = 0;
70
+ exports.SIGNUP_GRANT_CREDITS = 10;
68
71
  /**
69
72
  * Credits granted when a card-backed free trial actually starts (the
70
- * `isTrialInvoice` branch in payment.service.handleInvoiceSucceeded). This is
71
- * the value the signup grant used to hand out for free, now earned by adding a
72
- * payment method. Deliberately equal to MIN_CREDITS_PER_PAID_OP so the trial is
73
- * exactly one full generation of any kind.
73
+ * `isTrialInvoice` branch in payment.service.handleInvoiceSucceeded).
74
+ *
75
+ * NOTE: that branch OVERWRITES the credit doc (`total: 10, consumed: 0`), it
76
+ * does not increment. So starting the trial RESETS the balance to 10 available
77
+ * rather than adding 10 to whatever is left of the signup grant — a user who
78
+ * burned their signup 10 gets a fresh 10, but a user who never touched it also
79
+ * ends at 10, not 20. Long-standing behaviour, called out here because
80
+ * SIGNUP_GRANT_CREDITS being non-zero again makes the overlap reachable.
81
+ *
82
+ * Deliberately equal to MIN_CREDITS_PER_PAID_OP so the trial is exactly one
83
+ * full generation of any kind.
74
84
  */
75
85
  exports.TRIAL_GRANT_CREDITS = exports.MIN_CREDITS_PER_PAID_OP;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vidspotai-shared",
3
- "version": "1.0.97",
3
+ "version": "1.0.98",
4
4
  "main": "lib/index.js",
5
5
  "types": "lib/index.d.ts",
6
6
  "exports": {