@softure-ai/billing 0.1.6 → 0.1.8
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/CHANGELOG.md +22 -0
- package/README.md +75 -16
- package/dist/contract.d.ts +19 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +1 -0
- package/dist/contract.js.map +1 -1
- package/dist/fields.d.ts +2 -0
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +2 -0
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/mailing/reminder-mail.d.ts +8 -2
- package/dist/mailing/reminder-mail.d.ts.map +1 -1
- package/dist/mailing/reminder-mail.js +6 -1
- package/dist/mailing/reminder-mail.js.map +1 -1
- package/dist/messages/en.d.ts +17 -0
- package/dist/messages/en.d.ts.map +1 -1
- package/dist/messages/en.js +17 -0
- package/dist/messages/en.js.map +1 -1
- package/dist/messages/index.d.ts +36 -2
- package/dist/messages/index.d.ts.map +1 -1
- package/dist/messages/index.js.map +1 -1
- package/dist/messages/pl.d.ts.map +1 -1
- package/dist/messages/pl.js +17 -0
- package/dist/messages/pl.js.map +1 -1
- package/dist/next/actions.d.ts +8 -1
- package/dist/next/actions.d.ts.map +1 -1
- package/dist/next/actions.js +37 -1
- package/dist/next/actions.js.map +1 -1
- package/dist/next/index.d.ts +1 -1
- package/dist/next/index.d.ts.map +1 -1
- package/dist/next/index.js +1 -1
- package/dist/next/index.js.map +1 -1
- package/dist/next/pages.d.ts +13 -3
- package/dist/next/pages.d.ts.map +1 -1
- package/dist/next/pages.js +25 -8
- package/dist/next/pages.js.map +1 -1
- package/dist/schema.d.ts +109 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +10 -2
- package/dist/schema.js.map +1 -1
- package/dist/scripts/entitlement-scripts.d.ts +2 -0
- package/dist/scripts/entitlement-scripts.d.ts.map +1 -1
- package/dist/scripts/entitlement-scripts.js +17 -5
- package/dist/scripts/entitlement-scripts.js.map +1 -1
- package/dist/server/entitlements.d.ts +23 -6
- package/dist/server/entitlements.d.ts.map +1 -1
- package/dist/server/entitlements.js +37 -6
- package/dist/server/entitlements.js.map +1 -1
- package/dist/server/grants.d.ts +13 -2
- package/dist/server/grants.d.ts.map +1 -1
- package/dist/server/grants.js +11 -2
- package/dist/server/grants.js.map +1 -1
- package/dist/server/health.d.ts.map +1 -1
- package/dist/server/health.js +2 -1
- package/dist/server/health.js.map +1 -1
- package/dist/server/index.d.ts +3 -2
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/privacy.d.ts +9 -0
- package/dist/server/privacy.d.ts.map +1 -1
- package/dist/server/privacy.js +19 -6
- package/dist/server/privacy.js.map +1 -1
- package/dist/server/trials.d.ts +22 -0
- package/dist/server/trials.d.ts.map +1 -0
- package/dist/server/trials.js +60 -0
- package/dist/server/trials.js.map +1 -0
- package/dist/ui/index.d.ts +1 -0
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +1 -0
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/trial-form.d.ts +16 -0
- package/dist/ui/trial-form.d.ts.map +1 -0
- package/dist/ui/trial-form.js +25 -0
- package/dist/ui/trial-form.js.map +1 -0
- package/migrations/0010_record_trial_extensions_and_index_foreign_keys.sql +27 -0
- package/module.json +2 -2
- package/package.json +1 -1
- package/src/contract.ts +28 -0
- package/src/fields.ts +2 -0
- package/src/index.ts +7 -3
- package/src/mailing/reminder-mail.ts +14 -3
- package/src/messages/en.ts +17 -0
- package/src/messages/index.ts +2 -2
- package/src/messages/pl.ts +17 -0
- package/src/next/actions.ts +35 -2
- package/src/next/index.ts +9 -1
- package/src/next/pages.tsx +41 -6
- package/src/schema.ts +11 -2
- package/src/scripts/entitlement-scripts.ts +18 -5
- package/src/server/entitlements.ts +60 -6
- package/src/server/grants.ts +24 -3
- package/src/server/health.ts +2 -1
- package/src/server/index.ts +3 -0
- package/src/server/privacy.ts +29 -6
- package/src/server/trials.ts +70 -0
- package/src/ui/index.ts +1 -0
- package/src/ui/trial-form.tsx +80 -0
package/dist/messages/en.js
CHANGED
|
@@ -46,6 +46,7 @@ export const en = {
|
|
|
46
46
|
empty: "No plans are available yet.",
|
|
47
47
|
},
|
|
48
48
|
payment: {
|
|
49
|
+
heading: "Payment",
|
|
49
50
|
title: "Choose a plan",
|
|
50
51
|
lead: "Pick the plan that suits you. Paid access starts when your current access ends.",
|
|
51
52
|
plansLabel: "Plans",
|
|
@@ -67,6 +68,7 @@ export const en = {
|
|
|
67
68
|
lifetime: "You have lifetime access: there is nothing left to pay for.",
|
|
68
69
|
},
|
|
69
70
|
admin: {
|
|
71
|
+
heading: "Billing",
|
|
70
72
|
title: "Grant access",
|
|
71
73
|
lead: "Grant a plan to an account once its payment has arrived. A paid period starts when the account's current access ends.",
|
|
72
74
|
email: "Account email",
|
|
@@ -76,6 +78,15 @@ export const en = {
|
|
|
76
78
|
granted: "{email} now has {plan}.",
|
|
77
79
|
grantedUntil: "{email} now has {plan}, with access until {date}.",
|
|
78
80
|
noPlans: "There are no plans to grant: add them to billing({ plans }).",
|
|
81
|
+
trial: {
|
|
82
|
+
title: "Extend a trial",
|
|
83
|
+
lead: "Give an account a longer trial for free, e.g. an invited user. It is not paid access: the account keeps its paid periods, and the trial lasts through the day you choose.",
|
|
84
|
+
email: "Email of the account to extend",
|
|
85
|
+
lastDay: "Last day of the trial",
|
|
86
|
+
submit: "Extend trial",
|
|
87
|
+
pending: "Extending…",
|
|
88
|
+
extended: "{email} now has a trial until {date}.",
|
|
89
|
+
},
|
|
79
90
|
requests: {
|
|
80
91
|
title: "Invoice requests",
|
|
81
92
|
lead: "Requests sent from the payment page. Grant the plan once the invoice is paid, or dismiss the request.",
|
|
@@ -119,6 +130,10 @@ export const en = {
|
|
|
119
130
|
revoke: "Revoke",
|
|
120
131
|
revoking: "Revoking…",
|
|
121
132
|
revokeLabel: "Revoke {plan} granted on {date}",
|
|
133
|
+
trialExtended: "Trial extended",
|
|
134
|
+
trialUntil: "Trial until {date}",
|
|
135
|
+
extendedOn: "Extended on {date}",
|
|
136
|
+
trialWasUntil: "The trial was until {date}",
|
|
122
137
|
},
|
|
123
138
|
},
|
|
124
139
|
errors: {
|
|
@@ -135,6 +150,8 @@ export const en = {
|
|
|
135
150
|
lifetime_active: "This account already has lifetime access: there is nothing to pay for or grant.",
|
|
136
151
|
request_closed: "This request was granted or dismissed already.",
|
|
137
152
|
grant_revoked: "This grant was revoked already.",
|
|
153
|
+
trial_not_extended: "The trial already lasts through this day or longer.",
|
|
154
|
+
day_invalid: "Enter a date, e.g. 2026-11-30.",
|
|
138
155
|
},
|
|
139
156
|
security: {
|
|
140
157
|
rate_limited: "Too many attempts. Try again later.",
|
package/dist/messages/en.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"en.js","sourceRoot":"","sources":["../../src/messages/en.ts"],"names":[],"mappings":"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"}
|
package/dist/messages/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AdminActionErrorCode, BillingFormErrorCode, GrantFormErrorCode, PaymentFormErrorCode } from "../contract.js";
|
|
1
|
+
import type { AdminActionErrorCode, BillingFormErrorCode, GrantFormErrorCode, PaymentFormErrorCode, TrialFormErrorCode } from "../contract.js";
|
|
2
2
|
import { en } from "./en.js";
|
|
3
3
|
export type BillingMessages = typeof en;
|
|
4
4
|
/** Complete default dictionaries; apps pass partial overrides per locale. */
|
|
@@ -76,6 +76,7 @@ export declare const billingMessages: {
|
|
|
76
76
|
empty: string;
|
|
77
77
|
};
|
|
78
78
|
payment: {
|
|
79
|
+
heading: string;
|
|
79
80
|
title: string;
|
|
80
81
|
lead: string;
|
|
81
82
|
plansLabel: string;
|
|
@@ -97,6 +98,7 @@ export declare const billingMessages: {
|
|
|
97
98
|
lifetime: string;
|
|
98
99
|
};
|
|
99
100
|
admin: {
|
|
101
|
+
heading: string;
|
|
100
102
|
title: string;
|
|
101
103
|
lead: string;
|
|
102
104
|
email: string;
|
|
@@ -106,6 +108,15 @@ export declare const billingMessages: {
|
|
|
106
108
|
granted: string;
|
|
107
109
|
grantedUntil: string;
|
|
108
110
|
noPlans: string;
|
|
111
|
+
trial: {
|
|
112
|
+
title: string;
|
|
113
|
+
lead: string;
|
|
114
|
+
email: string;
|
|
115
|
+
lastDay: string;
|
|
116
|
+
submit: string;
|
|
117
|
+
pending: string;
|
|
118
|
+
extended: string;
|
|
119
|
+
};
|
|
109
120
|
requests: {
|
|
110
121
|
title: string;
|
|
111
122
|
lead: string;
|
|
@@ -149,6 +160,10 @@ export declare const billingMessages: {
|
|
|
149
160
|
revoke: string;
|
|
150
161
|
revoking: string;
|
|
151
162
|
revokeLabel: string;
|
|
163
|
+
trialExtended: string;
|
|
164
|
+
trialUntil: string;
|
|
165
|
+
extendedOn: string;
|
|
166
|
+
trialWasUntil: string;
|
|
152
167
|
};
|
|
153
168
|
};
|
|
154
169
|
errors: {
|
|
@@ -165,6 +180,8 @@ export declare const billingMessages: {
|
|
|
165
180
|
lifetime_active: string;
|
|
166
181
|
request_closed: string;
|
|
167
182
|
grant_revoked: string;
|
|
183
|
+
trial_not_extended: string;
|
|
184
|
+
day_invalid: string;
|
|
168
185
|
};
|
|
169
186
|
security: {
|
|
170
187
|
rate_limited: string;
|
|
@@ -251,6 +268,7 @@ export declare const billingMessages: {
|
|
|
251
268
|
empty: string;
|
|
252
269
|
};
|
|
253
270
|
payment: {
|
|
271
|
+
heading: string;
|
|
254
272
|
title: string;
|
|
255
273
|
lead: string;
|
|
256
274
|
plansLabel: string;
|
|
@@ -272,6 +290,7 @@ export declare const billingMessages: {
|
|
|
272
290
|
lifetime: string;
|
|
273
291
|
};
|
|
274
292
|
admin: {
|
|
293
|
+
heading: string;
|
|
275
294
|
title: string;
|
|
276
295
|
lead: string;
|
|
277
296
|
email: string;
|
|
@@ -281,6 +300,15 @@ export declare const billingMessages: {
|
|
|
281
300
|
granted: string;
|
|
282
301
|
grantedUntil: string;
|
|
283
302
|
noPlans: string;
|
|
303
|
+
trial: {
|
|
304
|
+
title: string;
|
|
305
|
+
lead: string;
|
|
306
|
+
email: string;
|
|
307
|
+
lastDay: string;
|
|
308
|
+
submit: string;
|
|
309
|
+
pending: string;
|
|
310
|
+
extended: string;
|
|
311
|
+
};
|
|
284
312
|
requests: {
|
|
285
313
|
title: string;
|
|
286
314
|
lead: string;
|
|
@@ -324,6 +352,10 @@ export declare const billingMessages: {
|
|
|
324
352
|
revoke: string;
|
|
325
353
|
revoking: string;
|
|
326
354
|
revokeLabel: string;
|
|
355
|
+
trialExtended: string;
|
|
356
|
+
trialUntil: string;
|
|
357
|
+
extendedOn: string;
|
|
358
|
+
trialWasUntil: string;
|
|
327
359
|
};
|
|
328
360
|
};
|
|
329
361
|
errors: {
|
|
@@ -340,6 +372,8 @@ export declare const billingMessages: {
|
|
|
340
372
|
lifetime_active: string;
|
|
341
373
|
request_closed: string;
|
|
342
374
|
grant_revoked: string;
|
|
375
|
+
trial_not_extended: string;
|
|
376
|
+
day_invalid: string;
|
|
343
377
|
};
|
|
344
378
|
security: {
|
|
345
379
|
rate_limited: string;
|
|
@@ -355,5 +389,5 @@ export declare const billingMessages: {
|
|
|
355
389
|
};
|
|
356
390
|
};
|
|
357
391
|
/** The copy for an error code; an unknown code gets the generic failure. */
|
|
358
|
-
export declare function getBillingErrorMessage(messages: BillingMessages, code: BillingFormErrorCode | PaymentFormErrorCode | GrantFormErrorCode | AdminActionErrorCode): string;
|
|
392
|
+
export declare function getBillingErrorMessage(messages: BillingMessages, code: BillingFormErrorCode | PaymentFormErrorCode | GrantFormErrorCode | TrialFormErrorCode | AdminActionErrorCode): string;
|
|
359
393
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/I,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAG7B,MAAM,MAAM,eAAe,GAAG,OAAO,EAAE,CAAC;AAExC,6EAA6E;AAC7E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAE1C,4EAA4E;AAC5E,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,kBAAkB,GAAG,kBAAkB,GAAG,oBAAoB,GAAG,MAAM,CAO5L"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,QAAyB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/messages/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAI7B,6EAA6E;AAC7E,MAAM,CAAC,MAAM,eAAe,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAE1C,4EAA4E;AAC5E,MAAM,UAAU,sBAAsB,CAAC,QAAyB,EAAE,IAAkH;IAClL,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAoE,CAAC;IAC7F,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC;AAC1H,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"pl.d.ts","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAElC,eAAO,MAAM,EAAE,EAAE,OAAO,EAsKvB,CAAC"}
|
package/dist/messages/pl.js
CHANGED
|
@@ -46,6 +46,7 @@ export const pl = {
|
|
|
46
46
|
empty: "Nie ma jeszcze dostępnych planów.",
|
|
47
47
|
},
|
|
48
48
|
payment: {
|
|
49
|
+
heading: "Płatność",
|
|
49
50
|
title: "Wybierz plan",
|
|
50
51
|
lead: "Wybierz plan dla siebie. Płatny dostęp zaczyna się, gdy skończy się obecny.",
|
|
51
52
|
plansLabel: "Plany",
|
|
@@ -67,6 +68,7 @@ export const pl = {
|
|
|
67
68
|
lifetime: "Masz dostęp dożywotni: nie ma już za co płacić.",
|
|
68
69
|
},
|
|
69
70
|
admin: {
|
|
71
|
+
heading: "Rozliczenia",
|
|
70
72
|
title: "Nadaj dostęp",
|
|
71
73
|
lead: "Nadaj plan kontu, gdy wpłynie płatność. Płatny okres zaczyna się, gdy skończy się obecny dostęp konta.",
|
|
72
74
|
email: "E-mail konta",
|
|
@@ -76,6 +78,15 @@ export const pl = {
|
|
|
76
78
|
granted: "{email} ma teraz {plan}.",
|
|
77
79
|
grantedUntil: "{email} ma teraz {plan}, z dostępem do {date}.",
|
|
78
80
|
noPlans: "Nie ma planów do nadania: dodaj je w billing({ plans }).",
|
|
81
|
+
trial: {
|
|
82
|
+
title: "Przedłuż okres próbny",
|
|
83
|
+
lead: "Daj kontu dłuższy okres próbny za darmo, np. zaproszonej osobie. To nie jest płatny dostęp: konto zachowuje opłacone okresy, a okres próbny trwa do końca wybranego dnia.",
|
|
84
|
+
email: "E-mail konta do przedłużenia",
|
|
85
|
+
lastDay: "Ostatni dzień okresu próbnego",
|
|
86
|
+
submit: "Przedłuż okres próbny",
|
|
87
|
+
pending: "Przedłużanie…",
|
|
88
|
+
extended: "{email} ma teraz okres próbny do {date}.",
|
|
89
|
+
},
|
|
79
90
|
requests: {
|
|
80
91
|
title: "Prośby o fakturę",
|
|
81
92
|
lead: "Prośby wysłane ze strony płatności. Nadaj plan, gdy faktura zostanie opłacona, albo odrzuć prośbę.",
|
|
@@ -119,6 +130,10 @@ export const pl = {
|
|
|
119
130
|
revoke: "Cofnij",
|
|
120
131
|
revoking: "Cofanie…",
|
|
121
132
|
revokeLabel: "Cofnij {plan} nadany {date}",
|
|
133
|
+
trialExtended: "Przedłużony okres próbny",
|
|
134
|
+
trialUntil: "Okres próbny do {date}",
|
|
135
|
+
extendedOn: "Przedłużono {date}",
|
|
136
|
+
trialWasUntil: "Wcześniej okres próbny do {date}",
|
|
122
137
|
},
|
|
123
138
|
},
|
|
124
139
|
errors: {
|
|
@@ -135,6 +150,8 @@ export const pl = {
|
|
|
135
150
|
lifetime_active: "To konto ma już dostęp dożywotni: nie ma za co płacić ani czego nadawać.",
|
|
136
151
|
request_closed: "Ta prośba została już obsłużona lub odrzucona.",
|
|
137
152
|
grant_revoked: "Ten dostęp został już cofnięty.",
|
|
153
|
+
trial_not_extended: "Okres próbny trwa już do tego dnia albo dłużej.",
|
|
154
|
+
day_invalid: "Wpisz datę, np. 2026-11-30.",
|
|
138
155
|
},
|
|
139
156
|
security: {
|
|
140
157
|
rate_limited: "Zbyt wiele prób. Spróbuj później.",
|
package/dist/messages/pl.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pl.js","sourceRoot":"","sources":["../../src/messages/pl.ts"],"names":[],"mappings":"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"}
|
package/dist/next/actions.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AdminActionState, GrantFormState, PaymentFormState } from "../contract.js";
|
|
1
|
+
import type { AdminActionState, GrantFormState, PaymentFormState, TrialFormState } from "../contract.js";
|
|
2
2
|
/**
|
|
3
3
|
* Starts paying for the plan of the form. Without a session it redirects to the login page and
|
|
4
4
|
* back to the payment page. A hosted checkout is a redirect; a manual request answers `requested`.
|
|
@@ -10,6 +10,13 @@ export declare function startPaymentAction(_previous: PaymentFormState, formData
|
|
|
10
10
|
* before the form is read. An account with lifetime access is refused.
|
|
11
11
|
*/
|
|
12
12
|
export declare function grantPlanAction(_previous: GrantFormState, formData: FormData): Promise<GrantFormState>;
|
|
13
|
+
/**
|
|
14
|
+
* Extends the trial of the account with the form's email through the form's last day (the trial
|
|
15
|
+
* ends at the start of the next day in the app's time zone) and records it in the account's history.
|
|
16
|
+
* Only for the role of `billing({ adminRole })`, checked from the session before the form is read.
|
|
17
|
+
* Never writes paid access.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extendTrialAction(_previous: TrialFormState, formData: FormData): Promise<TrialFormState>;
|
|
13
20
|
/** Grants the plan of the form's open request and closes it (admin role). */
|
|
14
21
|
export declare function grantRequestAction(_previous: AdminActionState, formData: FormData): Promise<AdminActionState>;
|
|
15
22
|
/** Closes the form's open request without a grant (admin role). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAwB,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAyB/H;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBnH;AAWD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAiC5G;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CAuB9G;AAyBD,6EAA6E;AAC7E,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMnH;AAED,mEAAmE;AACnE,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAErH;AAED,oFAAoF;AACpF,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAMlH;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAelH"}
|
package/dist/next/actions.js
CHANGED
|
@@ -4,12 +4,14 @@ import { errorLogLabel, formatMessage, safeError } from "@softure-ai/core";
|
|
|
4
4
|
import { getSoftureConfig } from "@softure-ai/core/next";
|
|
5
5
|
import { revalidatePath } from "next/cache";
|
|
6
6
|
import { redirect } from "next/navigation";
|
|
7
|
-
import {
|
|
7
|
+
import { getStartOfDay, parseDay } from "../calendar.js";
|
|
8
|
+
import { ACCOUNT_PARAM, EMAIL_FIELD, GRANT_FIELD, INVOICE_FIELDS, PLAN_FIELD, REQUEST_FIELD, TRIAL_LAST_DAY_FIELD } from "../fields.js";
|
|
8
9
|
import { findPlan, getLocalizedText } from "../plans.js";
|
|
9
10
|
import { grantPaymentRequest, grantPlanManually, revokeManualGrant } from "../server/grants.js";
|
|
10
11
|
import { getBillingMessages, getBillingOptions, getBillingRoutes } from "../server/options.js";
|
|
11
12
|
import { findAccountByEmail, getBillingPlans, startPayment } from "../server/plans.js";
|
|
12
13
|
import { dismissPaymentRequest } from "../server/requests.js";
|
|
14
|
+
import { extendTrialManually } from "../server/trials.js";
|
|
13
15
|
import { formatLastDay } from "../ui/format.js";
|
|
14
16
|
import { getBillingContext } from "./context.js";
|
|
15
17
|
/** Longer values are cut: the server functions refuse them anyway, and nothing huge is echoed back. */
|
|
@@ -94,6 +96,40 @@ export async function grantPlanAction(_previous, formData) {
|
|
|
94
96
|
const error = result.error === "billing.request_closed" ? "billing.account_unknown" : result.error;
|
|
95
97
|
return { status: "error", error, ...echo };
|
|
96
98
|
}
|
|
99
|
+
/**
|
|
100
|
+
* Extends the trial of the account with the form's email through the form's last day (the trial
|
|
101
|
+
* ends at the start of the next day in the app's time zone) and records it in the account's history.
|
|
102
|
+
* Only for the role of `billing({ adminRole })`, checked from the session before the form is read.
|
|
103
|
+
* Never writes paid access.
|
|
104
|
+
*/
|
|
105
|
+
export async function extendTrialAction(_previous, formData) {
|
|
106
|
+
const config = getSoftureConfig();
|
|
107
|
+
const admin = await authorizeAdmin(config);
|
|
108
|
+
if (!admin.ok)
|
|
109
|
+
return { status: "error", error: admin.error };
|
|
110
|
+
const email = readText(formData, EMAIL_FIELD).trim();
|
|
111
|
+
const lastDay = readText(formData, TRIAL_LAST_DAY_FIELD).trim();
|
|
112
|
+
const echo = { email, lastDay };
|
|
113
|
+
const day = parseDay(lastDay);
|
|
114
|
+
if (day === null)
|
|
115
|
+
return { status: "error", error: "billing.day_invalid", ...echo };
|
|
116
|
+
const until = getStartOfDay(day + 1, config.timezone);
|
|
117
|
+
try {
|
|
118
|
+
const ctx = await getBillingContext(config);
|
|
119
|
+
const account = await findAccountByEmail(ctx, email);
|
|
120
|
+
if (account === null)
|
|
121
|
+
return { status: "error", error: "billing.account_unknown", ...echo };
|
|
122
|
+
const result = await extendTrialManually(ctx, { userId: account.id, until, adminId: admin.value.id });
|
|
123
|
+
if (!result.ok)
|
|
124
|
+
return { status: "error", error: result.error, ...echo };
|
|
125
|
+
refreshAdminPage(config);
|
|
126
|
+
const notice = formatMessage(getBillingMessages(config).admin.trial.extended, { email: account.email, date: formatLastDay(until, config.locale, config.timezone) });
|
|
127
|
+
return { status: "extended", notice };
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return { status: "error", error: reportFailure("extending a trial", error), ...echo };
|
|
131
|
+
}
|
|
132
|
+
}
|
|
97
133
|
/** Runs one admin change on the row the form names: role first, then the change, then a refresh. */
|
|
98
134
|
async function runAdminChange(formData, { operation, field, change }) {
|
|
99
135
|
const config = getSoftureConfig();
|
package/dist/next/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAQb,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAA6D,MAAM,kBAAkB,CAAC;AACtI,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/next/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/next/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { CurrentAccessBadge, type CurrentAccessBadgeProps, CurrentAccessNotice, type CurrentAccessNoticeProps } from "./access.js";
|
|
2
|
-
export { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
|
|
2
|
+
export { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction, } from "./actions.js";
|
|
3
3
|
export { getBillingContext } from "./context.js";
|
|
4
4
|
export { getCurrentEntitlement, requireWriteAccess, type WriteAccess } from "./current-entitlement.js";
|
|
5
5
|
export { BillingAdminPage, type BillingAdminPageProps, PaymentPage, type PaymentPageProps } from "./pages.js";
|
package/dist/next/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,KAAK,uBAAuB,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACnI,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,KAAK,qBAAqB,EAAE,WAAW,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/next/index.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// their actions, and the Stripe webhook route, wired to the registered configuration
|
|
4
4
|
// (docs/02-module-standard.md §8).
|
|
5
5
|
export { CurrentAccessBadge, CurrentAccessNotice } from "./access.js";
|
|
6
|
-
export { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
|
|
6
|
+
export { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction, } from "./actions.js";
|
|
7
7
|
export { getBillingContext } from "./context.js";
|
|
8
8
|
export { getCurrentEntitlement, requireWriteAccess } from "./current-entitlement.js";
|
|
9
9
|
export { BillingAdminPage, PaymentPage } from "./pages.js";
|
package/dist/next/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,+FAA+F;AAC/F,qFAAqF;AACrF,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAgC,mBAAmB,EAAiC,MAAM,aAAa,CAAC;AACnI,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,+FAA+F;AAC/F,qFAAqF;AACrF,mCAAmC;AACnC,OAAO,EAAE,kBAAkB,EAAgC,mBAAmB,EAAiC,MAAM,aAAa,CAAC;AACnI,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAoB,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAA8B,WAAW,EAAyB,MAAM,YAAY,CAAC;AAC9G,OAAO,EAAE,kBAAkB,EAAE,OAAO,EAAqB,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/next/pages.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
type SearchParams = Promise<Record<string, string | string[] | undefined>>;
|
|
2
2
|
export interface PaymentPageProps {
|
|
3
3
|
readonly searchParams?: SearchParams;
|
|
4
|
+
/**
|
|
5
|
+
* The page's `<h1>`, first in `<main>`: `payment.heading` of the messages by default, this text
|
|
6
|
+
* instead, or none with `null` (for an app whose frame renders the page heading).
|
|
7
|
+
*/
|
|
8
|
+
readonly heading?: string | null;
|
|
4
9
|
}
|
|
5
10
|
/**
|
|
6
11
|
* The plans and, with `?plan=<id>`, the order: the plan's price and the provider's form (the
|
|
@@ -9,16 +14,21 @@ export interface PaymentPageProps {
|
|
|
9
14
|
* A hosted checkout comes back with `?checkout=success` or `?checkout=cancelled`, shown as a notice
|
|
10
15
|
* (the access itself changes when the provider's webhook confirms the payment).
|
|
11
16
|
*/
|
|
12
|
-
export declare function PaymentPage({ searchParams }: PaymentPageProps): Promise<import("react").JSX.Element>;
|
|
17
|
+
export declare function PaymentPage({ searchParams, heading }: PaymentPageProps): Promise<import("react").JSX.Element>;
|
|
13
18
|
export interface BillingAdminPageProps {
|
|
14
19
|
readonly searchParams?: SearchParams;
|
|
20
|
+
/**
|
|
21
|
+
* The page's `<h1>`, first in `<main>`: `admin.heading` of the messages by default, this text
|
|
22
|
+
* instead, or none with `null` (for an app whose frame renders the page heading).
|
|
23
|
+
*/
|
|
24
|
+
readonly heading?: string | null;
|
|
15
25
|
}
|
|
16
26
|
/**
|
|
17
27
|
* The admin page of manual payments: the open invoice requests (grant or dismiss each), the grant
|
|
18
|
-
* form, and an account's history (`?account=<id>`, reached by the email lookup or a request's
|
|
28
|
+
* form, the trial form (a free, longer trial), and an account's history (`?account=<id>`, reached by the email lookup or a request's
|
|
19
29
|
* link) with its access and a revoke button on each active manual grant. Anyone without the role
|
|
20
30
|
* of `billing({ adminRole })`, signed in or not, gets Next's "not found".
|
|
21
31
|
*/
|
|
22
|
-
export declare function BillingAdminPage({ searchParams }: BillingAdminPageProps): Promise<import("react").JSX.Element>;
|
|
32
|
+
export declare function BillingAdminPage({ searchParams, heading }: BillingAdminPageProps): Promise<import("react").JSX.Element>;
|
|
23
33
|
export {};
|
|
24
34
|
//# sourceMappingURL=pages.d.ts.map
|
package/dist/next/pages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pages.d.ts","sourceRoot":"","sources":["../../src/next/pages.tsx"],"names":[],"mappings":"AAgCA,KAAK,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AAE3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAkBD;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,gBAAgB,wCAsE5E;AAuGD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,qBAAqB,wCA+CtF"}
|
package/dist/next/pages.js
CHANGED
|
@@ -22,13 +22,15 @@ import { AccountLookup, GrantHistory } from "../ui/grant-history.js";
|
|
|
22
22
|
import { PaymentForm } from "../ui/payment-form.js";
|
|
23
23
|
import { PaymentRequestList } from "../ui/payment-requests.js";
|
|
24
24
|
import { PricingTiles } from "../ui/pricing-tiles.js";
|
|
25
|
+
import { TrialForm } from "../ui/trial-form.js";
|
|
25
26
|
import { CurrentAccessBadge } from "./access.js";
|
|
26
|
-
import { dismissRequestAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
|
|
27
|
+
import { dismissRequestAction, extendTrialAction, findAccountAction, grantPlanAction, grantRequestAction, revokeGrantAction, startPaymentAction } from "./actions.js";
|
|
27
28
|
import { getBillingContext } from "./context.js";
|
|
28
29
|
import { getCurrentEntitlement } from "./current-entitlement.js";
|
|
29
30
|
import { getPlanPaymentHref } from "./pricing.js";
|
|
30
31
|
const LAYOUT_CLASS = "sft:mx-auto sft:box-border sft:flex sft:w-full sft:flex-col sft:gap-4 sft:sm:max-w-md sft:px-4 sft:py-4";
|
|
31
32
|
const STACK_CLASS = "sft:flex sft:flex-col sft:gap-4";
|
|
33
|
+
const HEADING_CLASS = "sft:m-0 sft:font-heading sft:text-2xl sft:font-bold sft:text-foreground";
|
|
32
34
|
const LEAD_CLASS = "sft:m-0 sft:font-sans sft:text-sm sft:text-muted";
|
|
33
35
|
const NOTICE_CLASS = "sft:m-0 sft:rounded-control sft:border sft:border-border-strong sft:bg-surface-raised sft:px-4 sft:py-2.5 sft:font-sans sft:text-sm sft:text-foreground";
|
|
34
36
|
async function readParam(searchParams, name) {
|
|
@@ -45,7 +47,7 @@ function isCheckoutResult(value) {
|
|
|
45
47
|
* A hosted checkout comes back with `?checkout=success` or `?checkout=cancelled`, shown as a notice
|
|
46
48
|
* (the access itself changes when the provider's webhook confirms the payment).
|
|
47
49
|
*/
|
|
48
|
-
export async function PaymentPage({ searchParams }) {
|
|
50
|
+
export async function PaymentPage({ searchParams, heading }) {
|
|
49
51
|
const config = getSoftureConfig();
|
|
50
52
|
const route = getBillingRoutes(config).payment;
|
|
51
53
|
const planId = await readParam(searchParams, PLAN_FIELD);
|
|
@@ -61,7 +63,11 @@ export async function PaymentPage({ searchParams }) {
|
|
|
61
63
|
const entitlement = await getCurrentEntitlement();
|
|
62
64
|
// Lifetime access leaves nothing to pay for: no order form (startPayment refuses it too).
|
|
63
65
|
const hasLifetime = entitlement?.status === "paid" && entitlement.endsAt === null;
|
|
64
|
-
return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(Card, { title: copy.title, subtitle: copy.lead, children: _jsxs("div", { className: STACK_CLASS, children: [checkoutNotice === null ? null : (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-checkout": checkout, children: checkoutNotice })), _jsx("div", { children: _jsx(CurrentAccessBadge, {}) }), hasLifetime ? (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-lifetime": "true", children: copy.lifetime })) : null, _jsx(PricingTiles, { plans: plans, messages: messages, locale: config.locale, getPlanHref: (candidate) => getPlanPaymentHref(route, candidate.id), selectedPlanId: plan?.id, label: copy.plansLabel })] }) }), plan === undefined || hasLifetime ? null : (_jsx(Card, { title: copy.orderTitle, subtitle: formatMessage(copy.orderLead, { plan: planName, price: formatPrice(plan.price, config.locale), period: formatPeriod(plan.period, config.locale, messages) }), children: _jsxs("div", { className: STACK_CLASS, children: [provider.collectsInvoiceDetails ? _jsx("p", { className: LEAD_CLASS, children: formatMessage(copy.invoiceLead, { email: user.email }) }) : null, _jsx(PaymentForm, { action: startPaymentAction, planId: plan.id, planName: planName, email: user.email, collectsInvoiceDetails: provider.collectsInvoiceDetails, messages: messages, locale: config.locale }), _jsx("div", { children: _jsx(ButtonLink, { href: route, variant: "ghost", size: "sm", children: copy.changePlan }) })] }) }))] }));
|
|
66
|
+
return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(PageHeading, { text: heading === undefined ? copy.heading : heading }), _jsx(Card, { title: copy.title, subtitle: copy.lead, children: _jsxs("div", { className: STACK_CLASS, children: [checkoutNotice === null ? null : (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-checkout": checkout, children: checkoutNotice })), _jsx("div", { children: _jsx(CurrentAccessBadge, {}) }), hasLifetime ? (_jsx("p", { role: "status", className: NOTICE_CLASS, "data-lifetime": "true", children: copy.lifetime })) : null, _jsx(PricingTiles, { plans: plans, messages: messages, locale: config.locale, getPlanHref: (candidate) => getPlanPaymentHref(route, candidate.id), selectedPlanId: plan?.id, label: copy.plansLabel })] }) }), plan === undefined || hasLifetime ? null : (_jsx(Card, { title: copy.orderTitle, subtitle: formatMessage(copy.orderLead, { plan: planName, price: formatPrice(plan.price, config.locale), period: formatPeriod(plan.period, config.locale, messages) }), children: _jsxs("div", { className: STACK_CLASS, children: [provider.collectsInvoiceDetails ? _jsx("p", { className: LEAD_CLASS, children: formatMessage(copy.invoiceLead, { email: user.email }) }) : null, _jsx(PaymentForm, { action: startPaymentAction, planId: plan.id, planName: planName, email: user.email, collectsInvoiceDetails: provider.collectsInvoiceDetails, messages: messages, locale: config.locale }), _jsx("div", { children: _jsx(ButtonLink, { href: route, variant: "ghost", size: "sm", children: copy.changePlan }) })] }) }))] }));
|
|
67
|
+
}
|
|
68
|
+
/** The page's `<h1>`, or nothing for `null`. */
|
|
69
|
+
function PageHeading({ text }) {
|
|
70
|
+
return text === null ? null : _jsx("h1", { className: HEADING_CLASS, children: text });
|
|
65
71
|
}
|
|
66
72
|
/** The plan's name in the app's locale, or its id when the config no longer has it. */
|
|
67
73
|
function getPlanName(plans, planId, locale) {
|
|
@@ -105,8 +111,19 @@ function describeGrant(grant, { config, messages }) {
|
|
|
105
111
|
function toHistoryRow(entry, context) {
|
|
106
112
|
const { config, messages, plans } = context;
|
|
107
113
|
const copy = messages.admin.history;
|
|
108
|
-
const plan = getPlanName(plans, entry.planId, config.locale);
|
|
109
114
|
const formatDate = (date) => formatDay(date, config.locale, config.timezone);
|
|
115
|
+
if (entry.source === "trial") {
|
|
116
|
+
const formatEnd = (end) => formatLastDay(end, config.locale, config.timezone);
|
|
117
|
+
return {
|
|
118
|
+
id: entry.id,
|
|
119
|
+
title: copy.trialExtended,
|
|
120
|
+
statusText: formatMessage(copy.trialUntil, { date: formatEnd(entry.endsAt) }),
|
|
121
|
+
isCurrent: entry.endsAt > context.now,
|
|
122
|
+
details: [formatMessage(copy.extendedOn, { date: formatDate(entry.at) }), formatMessage(copy.trialWasUntil, { date: formatEnd(entry.previousEndsAt) })],
|
|
123
|
+
revokeLabel: null,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
const plan = getPlanName(plans, entry.planId, config.locale);
|
|
110
127
|
if (entry.source === "manual") {
|
|
111
128
|
const isActive = entry.status === "active";
|
|
112
129
|
return {
|
|
@@ -144,23 +161,23 @@ function toHistoryRow(entry, context) {
|
|
|
144
161
|
}
|
|
145
162
|
/**
|
|
146
163
|
* The admin page of manual payments: the open invoice requests (grant or dismiss each), the grant
|
|
147
|
-
* form, and an account's history (`?account=<id>`, reached by the email lookup or a request's
|
|
164
|
+
* form, the trial form (a free, longer trial), and an account's history (`?account=<id>`, reached by the email lookup or a request's
|
|
148
165
|
* link) with its access and a revoke button on each active manual grant. Anyone without the role
|
|
149
166
|
* of `billing({ adminRole })`, signed in or not, gets Next's "not found".
|
|
150
167
|
*/
|
|
151
|
-
export async function BillingAdminPage({ searchParams }) {
|
|
168
|
+
export async function BillingAdminPage({ searchParams, heading }) {
|
|
152
169
|
const config = getSoftureConfig();
|
|
153
170
|
await requireRole(getBillingOptions(config).adminRole);
|
|
154
171
|
const messages = getBillingMessages(config);
|
|
155
172
|
const plans = getBillingPlans(config);
|
|
156
|
-
const context = { config, messages, plans };
|
|
157
173
|
const ctx = await getBillingContext(config);
|
|
174
|
+
const context = { config, messages, plans, now: ctx.clock.now() };
|
|
158
175
|
const requests = (await listOpenRequests(ctx)).map((request) => toRequestRow(request, context));
|
|
159
176
|
const accountId = await readParam(searchParams, ACCOUNT_PARAM);
|
|
160
177
|
const account = accountId === undefined ? null : await findAccountById(ctx, accountId);
|
|
161
178
|
const entitlement = account === null ? null : await getEntitlement(ctx, account.id);
|
|
162
179
|
const history = account === null ? [] : (await getAccountHistory(ctx, account.id)).map((entry) => toHistoryRow(entry, context));
|
|
163
180
|
const planOptions = plans.map((plan) => ({ value: plan.id, label: getLocalizedText(plan.name, config.locale) }));
|
|
164
|
-
return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(Card, { title: messages.admin.requests.title, subtitle: messages.admin.requests.lead, children: _jsx(PaymentRequestList, { requests: requests, grantAction: grantRequestAction, dismissAction: dismissRequestAction, messages: messages }) }), _jsx(Card, { title: messages.admin.title, subtitle: messages.admin.lead, children: planOptions.length === 0 ? (_jsx(EmptyState, { title: messages.admin.noPlans })) : (_jsx(GrantForm, { action: grantPlanAction, plans: planOptions, messages: messages, locale: config.locale })) }), _jsx(Card, { title: messages.admin.history.title, subtitle: messages.admin.history.lead, children: _jsxs("div", { className: STACK_CLASS, children: [_jsx(AccountLookup, { action: findAccountAction, messages: messages, locale: config.locale }), account === null ? null : (_jsxs("section", { className: STACK_CLASS, "aria-label": formatMessage(messages.admin.history.accountTitle, { email: account.email }), children: [_jsx("p", { className: LEAD_CLASS, children: formatMessage(messages.admin.history.accountTitle, { email: account.email }) }), entitlement === null ? null : (_jsx("div", { children: _jsx(AccessBadge, { entitlement: entitlement, messages: messages, locale: config.locale, timezone: config.timezone }) })), _jsx(GrantHistory, { rows: history, revokeAction: revokeGrantAction, messages: messages })] }))] }) })] }));
|
|
181
|
+
return (_jsxs("main", { className: LAYOUT_CLASS, children: [_jsx(PageHeading, { text: heading === undefined ? messages.admin.heading : heading }), _jsx(Card, { title: messages.admin.requests.title, subtitle: messages.admin.requests.lead, children: _jsx(PaymentRequestList, { requests: requests, grantAction: grantRequestAction, dismissAction: dismissRequestAction, messages: messages }) }), _jsx(Card, { title: messages.admin.title, subtitle: messages.admin.lead, children: planOptions.length === 0 ? (_jsx(EmptyState, { title: messages.admin.noPlans })) : (_jsx(GrantForm, { action: grantPlanAction, plans: planOptions, messages: messages, locale: config.locale })) }), _jsx(Card, { title: messages.admin.trial.title, subtitle: messages.admin.trial.lead, children: _jsx(TrialForm, { action: extendTrialAction, messages: messages, locale: config.locale }) }), _jsx(Card, { title: messages.admin.history.title, subtitle: messages.admin.history.lead, children: _jsxs("div", { className: STACK_CLASS, children: [_jsx(AccountLookup, { action: findAccountAction, messages: messages, locale: config.locale }), account === null ? null : (_jsxs("section", { className: STACK_CLASS, "aria-label": formatMessage(messages.admin.history.accountTitle, { email: account.email }), children: [_jsx("p", { className: LEAD_CLASS, children: formatMessage(messages.admin.history.accountTitle, { email: account.email }) }), entitlement === null ? null : (_jsx("div", { children: _jsx(AccessBadge, { entitlement: entitlement, messages: messages, locale: config.locale, timezone: config.timezone }) })), _jsx(GrantHistory, { rows: history, revokeAction: revokeGrantAction, messages: messages })] }))] }) })] }));
|
|
165
182
|
}
|
|
166
183
|
//# sourceMappingURL=pages.js.map
|