diff --git a/ts/util/signalRoutes.std.ts b/ts/util/signalRoutes.std.ts index fb72ba8e2d..371caa3aa8 100644 --- a/ts/util/signalRoutes.std.ts +++ b/ts/util/signalRoutes.std.ts @@ -57,12 +57,19 @@ type AllHostnamePatterns = | 'start-call-lobby' | 'show-window' | 'cancel-presenting' - | 'donation-paypal-approved' - | 'donation-paypal-canceled' | 'donation-validation-complete' + | 'paypal' | ':captchaId(.+)' | ''; +/** + * Valid actions for sgnl://paypal + */ +enum PaypalAction { + Approve = 'approve', + Cancel = 'cancel', +} + /** * Uses the `URLPattern` syntax to match URLs. */ @@ -600,13 +607,13 @@ export const donationValidationCompleteRoute = _route( * donationPaypalApprovedRoute.toWebURL({ * returnToken: "123", * }) - * // URL { "sgnl://donation-paypal-approved?returnToken=123" } + * // URL { "sgnl://paypal?action=approve&returnToken=123" } * ``` */ export const donationPaypalApprovedRoute = _route('donationPaypalApproved', { patterns: [ - _pattern('sgnl:', 'donation-paypal-approved', '{/}?', { - search: ':params', + _pattern('sgnl:', 'paypal', '{/}?', { + search: `action=${PaypalAction.Approve}:params*`, }), ], schema: z.object({ @@ -616,6 +623,7 @@ export const donationPaypalApprovedRoute = _route('donationPaypalApproved', { }), parse(result) { const params = new URLSearchParams(result.search.groups.params); + // additional params from PayPal return { payerId: params.get('PayerID'), paymentToken: params.get('token'), @@ -623,9 +631,13 @@ export const donationPaypalApprovedRoute = _route('donationPaypalApproved', { }; }, toWebUrl(args) { - const params = new URLSearchParams({ returnToken: args.returnToken }); + const params = new URLSearchParams({ + action: PaypalAction.Approve, + returnToken: args.returnToken, + }); + // Redirects to sgnl://paypal?{params} return new URL( - `https://signaldonations.org/redirect/donation-paypal-approved?${params.toString()}` + `https://signaldonations.org/desktop/paypal?${params.toString()}` ); }, }); @@ -637,13 +649,13 @@ export const donationPaypalApprovedRoute = _route('donationPaypalApproved', { * donationPaypalCanceledRoute.toAppUrl({ * returnToken: "123", * }) - * // URL { "sgnl://donation-paypal-canceled?returnToken=123" } + * // URL { "sgnl://paypal?action=cancel&returnToken=123" } * ``` */ export const donationPaypalCanceledRoute = _route('donationPaypalCanceled', { patterns: [ - _pattern('sgnl:', 'donation-paypal-canceled', '{/}?', { - search: ':params', + _pattern('sgnl:', 'paypal', '{/}?', { + search: `action=${PaypalAction.Cancel}:params*`, }), ], schema: z.object({ @@ -656,9 +668,13 @@ export const donationPaypalCanceledRoute = _route('donationPaypalCanceled', { }; }, toWebUrl(args) { - const params = new URLSearchParams({ returnToken: args.returnToken }); + const params = new URLSearchParams({ + action: PaypalAction.Cancel, + returnToken: args.returnToken, + }); + // Redirects to sgnl://paypal?{params} return new URL( - `https://signaldonations.org/redirect/donation-paypal-canceled?${params.toString()}` + `https://signaldonations.org/desktop/paypal?${params.toString()}` ); }, });