@nebulr-group/bridge-auth-core 0.4.6 → 0.5.0

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.
@@ -0,0 +1,168 @@
1
+ /**
2
+ * Message catalogue for the SDK auth components (TBP-630).
3
+ *
4
+ * Lives in auth-core, not in a framework package, so bridge-svelte, -react,
5
+ * -angular and -nextjs resolve identical copy instead of drifting into four
6
+ * slightly different logins. The strings are framework-agnostic; only the
7
+ * rendering is not.
8
+ *
9
+ * ## Where the line sits
10
+ *
11
+ * Bridge owns the MECHANICS and translates them: what a field is, what a button
12
+ * does, what went wrong, what succeeded. Those are facts about how the auth flow
13
+ * works, identical for every tenant, and no consuming app should be rewriting
14
+ * them.
15
+ *
16
+ * The consuming app owns VOICE and CONTEXT: the page title, the subtitle,
17
+ * anything naming the product or explaining why the user is on this screen.
18
+ * Bridge cannot know those — hence `heading={null}` / `description={null}`
19
+ * (TBP-631) rather than catalogue entries.
20
+ *
21
+ * ## Keys are flat and dotted
22
+ *
23
+ * `login.email`, not a nested object. A flat map makes the override prop a
24
+ * plain `Partial<Messages>`, keeps lookup a single property access with no
25
+ * traversal, and means a typo in a key is a TypeScript error rather than a
26
+ * silent `undefined` at render time.
27
+ */
28
+ /** Every user-facing string the SDK auth components render. */
29
+ export interface Messages {
30
+ 'field.email': string;
31
+ 'field.password': string;
32
+ 'field.newPassword': string;
33
+ 'field.confirmPassword': string;
34
+ 'field.firstName': string;
35
+ 'field.lastName': string;
36
+ 'field.phoneNumber': string;
37
+ 'field.verificationCode': string;
38
+ 'field.authenticationCode': string;
39
+ 'field.recoveryCode': string;
40
+ 'placeholder.email': string;
41
+ 'placeholder.password': string;
42
+ 'placeholder.newPassword': string;
43
+ 'placeholder.confirmPassword': string;
44
+ 'placeholder.firstName': string;
45
+ 'placeholder.lastName': string;
46
+ 'placeholder.phoneNumber': string;
47
+ 'placeholder.sixDigitCode': string;
48
+ 'placeholder.recoveryCode': string;
49
+ 'action.showPassword': string;
50
+ 'action.hidePassword': string;
51
+ 'action.showPasswords': string;
52
+ 'action.hidePasswords': string;
53
+ 'action.backToLogin': string;
54
+ 'action.backToSignIn': string;
55
+ 'action.resendCode': string;
56
+ 'action.copy': string;
57
+ 'action.copied': string;
58
+ 'action.tryAgain': string;
59
+ 'action.done': string;
60
+ /** The "or" rule between the password form and the alternative methods. */
61
+ 'divider.or': string;
62
+ 'login.heading': string;
63
+ 'login.submit': string;
64
+ /** In-flight label on the login button. */
65
+ 'login.submitting': string;
66
+ 'login.forgotPassword': string;
67
+ 'login.magicLink': string;
68
+ 'login.signupPrompt': string;
69
+ 'login.signupLink': string;
70
+ 'login.error.invalidCredentials': string;
71
+ 'forgot.headingRequest': string;
72
+ 'forgot.headingSet': string;
73
+ 'forgot.description': string;
74
+ 'forgot.submit': string;
75
+ 'forgot.setSubmit': string;
76
+ 'forgot.emailSent': string;
77
+ 'forgot.successHeading': string;
78
+ 'forgot.error.send': string;
79
+ 'forgot.error.update': string;
80
+ 'forgot.error.mismatch': string;
81
+ 'forgot.error.tooShort': string;
82
+ 'magicLink.heading': string;
83
+ 'magicLink.description': string;
84
+ 'magicLink.submit': string;
85
+ /** Interpolates {expiry}, already formatted by the four keys below. */
86
+ 'magicLink.sent': string;
87
+ /** Interpolates {count}. Split singular/plural because English needs both. */
88
+ 'magicLink.expiryMinute': string;
89
+ 'magicLink.expiryMinutes': string;
90
+ 'magicLink.expirySeconds': string;
91
+ 'magicLink.error.send': string;
92
+ 'magicLink.error.auth': string;
93
+ 'signup.heading': string;
94
+ 'signup.submit': string;
95
+ 'signup.successHeading': string;
96
+ /** Interpolates {email}. */
97
+ 'signup.successDescription': string;
98
+ 'signup.loginPrompt': string;
99
+ 'signup.loginLink': string;
100
+ 'signup.error.create': string;
101
+ 'passkey.loginButton': string;
102
+ 'passkey.createHeading': string;
103
+ 'passkey.createPrompt': string;
104
+ 'passkey.createLink': string;
105
+ 'passkey.requestDescription': string;
106
+ 'passkey.requestSubmit': string;
107
+ 'passkey.sentHeading': string;
108
+ /** Interpolates {email}. */
109
+ 'passkey.sentDescription': string;
110
+ /** Heading while the browser ceremony is in flight. */
111
+ 'passkey.settingUpHeading': string;
112
+ /** Heading once the ceremony has failed. */
113
+ 'passkey.setupHeading': string;
114
+ 'passkey.signInNow': string;
115
+ 'passkey.requestNewLink': string;
116
+ 'passkey.setupDescription': string;
117
+ 'passkey.setupSuccessHeading': string;
118
+ 'passkey.setupSuccessDescription': string;
119
+ 'passkey.error.cancelled': string;
120
+ /** Login ceremony aborted — distinct from `cancelled`, which is setup. */
121
+ 'passkey.error.authCancelled': string;
122
+ 'passkey.error.setupFailed': string;
123
+ 'passkey.error.expired': string;
124
+ 'passkey.error.unsupported': string;
125
+ 'passkey.error.auth': string;
126
+ 'passkey.error.setup': string;
127
+ 'passkey.error.verify': string;
128
+ 'passkey.error.sendLink': string;
129
+ 'mfa.challengeHeading': string;
130
+ 'mfa.submit': string;
131
+ 'mfa.useRecoveryCode': string;
132
+ 'mfa.useAuthenticationCode': string;
133
+ 'mfa.recoverSubmit': string;
134
+ 'mfa.resendPrompt': string;
135
+ /** Interpolates {seconds}. Carries the prompt too, so word order stays free. */
136
+ 'mfa.resendCountdown': string;
137
+ 'mfa.error.invalidCode': string;
138
+ 'mfa.error.invalidRecoveryCode': string;
139
+ 'mfa.error.resend': string;
140
+ 'mfaSetup.heading': string;
141
+ 'mfaSetup.phoneDescription': string;
142
+ 'mfaSetup.sendCode': string;
143
+ 'mfaSetup.verifyDescription': string;
144
+ 'mfaSetup.verify': string;
145
+ 'mfaSetup.changePhone': string;
146
+ 'mfaSetup.backupDescription': string;
147
+ 'mfaSetup.successHeading': string;
148
+ 'mfaSetup.error.sendCode': string;
149
+ 'mfaSetup.error.resend': string;
150
+ }
151
+ export type MessageKey = keyof Messages;
152
+ /**
153
+ * English. This is the fallback for everything: an unknown locale, and an
154
+ * unknown key within a known locale, both land here. A raw key must never
155
+ * reach the screen.
156
+ */
157
+ export declare const en: Messages;
158
+ /**
159
+ * Swedish. Reviewed-locale status: this and `en` are the two locales shipping
160
+ * in v1 (owner decision 2026-09-11) precisely because they can be checked here.
161
+ * The remaining ten NorthWhistle needs — da, de, es, fi, fr, it, nb, nl, pl, pt
162
+ * — are a data-only follow-up requiring no code change: drop another `Messages`
163
+ * object into `LOCALES` below.
164
+ */
165
+ export declare const sv: Messages;
166
+ /** Locales shipping with the package. Adding one is data-only. */
167
+ export declare const LOCALES: Record<string, Messages>;
168
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,269 @@
1
+ /**
2
+ * Message catalogue for the SDK auth components (TBP-630).
3
+ *
4
+ * Lives in auth-core, not in a framework package, so bridge-svelte, -react,
5
+ * -angular and -nextjs resolve identical copy instead of drifting into four
6
+ * slightly different logins. The strings are framework-agnostic; only the
7
+ * rendering is not.
8
+ *
9
+ * ## Where the line sits
10
+ *
11
+ * Bridge owns the MECHANICS and translates them: what a field is, what a button
12
+ * does, what went wrong, what succeeded. Those are facts about how the auth flow
13
+ * works, identical for every tenant, and no consuming app should be rewriting
14
+ * them.
15
+ *
16
+ * The consuming app owns VOICE and CONTEXT: the page title, the subtitle,
17
+ * anything naming the product or explaining why the user is on this screen.
18
+ * Bridge cannot know those — hence `heading={null}` / `description={null}`
19
+ * (TBP-631) rather than catalogue entries.
20
+ *
21
+ * ## Keys are flat and dotted
22
+ *
23
+ * `login.email`, not a nested object. A flat map makes the override prop a
24
+ * plain `Partial<Messages>`, keeps lookup a single property access with no
25
+ * traversal, and means a typo in a key is a TypeScript error rather than a
26
+ * silent `undefined` at render time.
27
+ */
28
+ /**
29
+ * English. This is the fallback for everything: an unknown locale, and an
30
+ * unknown key within a known locale, both land here. A raw key must never
31
+ * reach the screen.
32
+ */
33
+ export const en = {
34
+ 'field.email': 'Email',
35
+ 'field.password': 'Password',
36
+ 'field.newPassword': 'New password',
37
+ 'field.confirmPassword': 'Confirm password',
38
+ 'field.firstName': 'First name',
39
+ 'field.lastName': 'Last name',
40
+ 'field.phoneNumber': 'Phone number',
41
+ 'field.verificationCode': 'Verification code',
42
+ 'field.authenticationCode': 'Authentication code',
43
+ 'field.recoveryCode': 'Recovery code',
44
+ 'placeholder.email': 'you@example.com',
45
+ 'placeholder.password': 'Enter your password',
46
+ 'placeholder.newPassword': 'At least 8 characters',
47
+ 'placeholder.confirmPassword': 'Repeat password',
48
+ 'placeholder.firstName': 'First name',
49
+ 'placeholder.lastName': 'Last name',
50
+ // TBP-630 — was the US-format `+1 (555) 000-0000`, shown to every European
51
+ // workspace. A format hint that is wrong for most of the audience is worse
52
+ // than none, and the field already has a label.
53
+ 'placeholder.phoneNumber': '',
54
+ 'placeholder.sixDigitCode': 'Enter 6-digit code',
55
+ 'placeholder.recoveryCode': 'Enter recovery code',
56
+ 'action.showPassword': 'Show password',
57
+ 'action.hidePassword': 'Hide password',
58
+ 'action.showPasswords': 'Show passwords',
59
+ 'action.hidePasswords': 'Hide passwords',
60
+ 'action.backToLogin': 'Back to login',
61
+ 'action.backToSignIn': 'Back to sign in',
62
+ 'action.resendCode': 'Resend code',
63
+ 'action.copy': 'Copy',
64
+ 'action.copied': 'Copied!',
65
+ 'action.tryAgain': 'Try again',
66
+ 'action.done': 'Done',
67
+ 'divider.or': 'or',
68
+ 'login.heading': 'Log in to your account',
69
+ 'login.submit': 'Sign in',
70
+ 'login.submitting': 'Signing in…',
71
+ 'login.forgotPassword': 'Forgot password?',
72
+ 'login.magicLink': 'Sign in with Magic Link',
73
+ 'login.signupPrompt': "Don't have an account?",
74
+ 'login.signupLink': 'Sign up',
75
+ 'login.error.invalidCredentials': 'Invalid email or password.',
76
+ 'forgot.headingRequest': 'Reset your password',
77
+ 'forgot.headingSet': 'Set new password',
78
+ 'forgot.description': "Enter your email and we'll send you a link to reset your password.",
79
+ 'forgot.submit': 'Send reset link',
80
+ 'forgot.setSubmit': 'Set a password',
81
+ 'forgot.emailSent': 'Check your email for a password reset link.',
82
+ 'forgot.successHeading': 'Password set',
83
+ 'forgot.error.send': 'Failed to send reset link.',
84
+ 'forgot.error.update': 'Failed to update password.',
85
+ 'forgot.error.mismatch': 'Passwords do not match.',
86
+ 'forgot.error.tooShort': 'Password must be at least 8 characters.',
87
+ 'magicLink.heading': 'Sign in with email link',
88
+ 'magicLink.description': "Enter your email and we'll send you a sign-in link. No password needed.",
89
+ 'magicLink.submit': 'Send magic link',
90
+ 'magicLink.sent': 'Check your email — link expires in {expiry}.',
91
+ 'magicLink.expiryMinute': '{count} minute',
92
+ 'magicLink.expiryMinutes': '{count} minutes',
93
+ 'magicLink.expirySeconds': '{count} seconds',
94
+ 'magicLink.error.send': 'Failed to send magic link.',
95
+ 'magicLink.error.auth': 'Magic link authentication failed.',
96
+ 'signup.heading': 'Create your account',
97
+ 'signup.submit': 'Sign up',
98
+ 'signup.successHeading': 'Check your email',
99
+ 'signup.successDescription': 'We sent a verification link to {email}. Check your inbox to activate your account.',
100
+ 'signup.loginPrompt': 'Already have an account?',
101
+ 'signup.loginLink': 'Log in',
102
+ 'signup.error.create': 'Failed to create account.',
103
+ 'passkey.loginButton': 'Sign in with Passkeys',
104
+ 'passkey.createHeading': 'Create a passkey',
105
+ 'passkey.createPrompt': "Don't have a passkey?",
106
+ 'passkey.createLink': 'Create one.',
107
+ 'passkey.requestDescription': 'Enter your email and we will send a link to create your passkey.',
108
+ 'passkey.requestSubmit': 'Send setup link',
109
+ 'passkey.sentHeading': 'Check your email',
110
+ 'passkey.sentDescription': 'We sent a passkey setup link to {email}. Please check your inbox and click the link to create your passkey and finish signing in.',
111
+ 'passkey.settingUpHeading': 'Setting up passkey',
112
+ 'passkey.setupHeading': 'Passkey setup',
113
+ 'passkey.signInNow': 'Sign in now',
114
+ 'passkey.requestNewLink': 'Request new setup link',
115
+ 'passkey.setupDescription': 'Follow the prompt from your browser or device to complete passkey setup.',
116
+ 'passkey.setupSuccessHeading': 'Passkey created',
117
+ 'passkey.setupSuccessDescription': 'Your passkey has been created.',
118
+ 'passkey.error.cancelled': 'Passkey setup was cancelled.',
119
+ 'passkey.error.authCancelled': 'Passkey authentication was cancelled.',
120
+ 'passkey.error.setupFailed': 'Passkey setup failed.',
121
+ 'passkey.error.expired': 'This setup link has expired or is invalid.',
122
+ 'passkey.error.unsupported': 'Your browser does not support passkeys.',
123
+ 'passkey.error.auth': 'Passkey authentication failed.',
124
+ 'passkey.error.setup': 'An error occurred during passkey setup.',
125
+ 'passkey.error.verify': 'Passkey registration could not be verified.',
126
+ 'passkey.error.sendLink': 'Failed to send setup link.',
127
+ 'mfa.challengeHeading': 'Two-factor authentication',
128
+ 'mfa.submit': 'Verify',
129
+ 'mfa.useRecoveryCode': 'Use recovery code',
130
+ 'mfa.useAuthenticationCode': 'Use authentication code',
131
+ 'mfa.recoverSubmit': 'Recover',
132
+ 'mfa.resendPrompt': "Didn't get your text message?",
133
+ 'mfa.resendCountdown': "Didn't get your text message? You can resend in {seconds}s.",
134
+ 'mfa.error.invalidCode': 'Invalid code. Please try again.',
135
+ 'mfa.error.invalidRecoveryCode': 'Invalid recovery code.',
136
+ 'mfa.error.resend': 'Failed to resend code.',
137
+ 'mfaSetup.heading': 'Set up two-factor authentication',
138
+ 'mfaSetup.phoneDescription': 'Enter your phone number to receive a verification code via SMS.',
139
+ 'mfaSetup.sendCode': 'Send code',
140
+ 'mfaSetup.verifyDescription': 'Enter the 6-digit code sent to your phone.',
141
+ 'mfaSetup.verify': 'Verify',
142
+ 'mfaSetup.changePhone': 'Change phone number',
143
+ 'mfaSetup.backupDescription': 'Save this recovery code in a safe place. You can use it to access your account if you lose your phone.',
144
+ 'mfaSetup.successHeading': 'Two-factor authentication enabled!',
145
+ 'mfaSetup.error.sendCode': 'Failed to send verification code.',
146
+ 'mfaSetup.error.resend': 'Failed to resend verification code.',
147
+ };
148
+ /**
149
+ * Swedish. Reviewed-locale status: this and `en` are the two locales shipping
150
+ * in v1 (owner decision 2026-09-11) precisely because they can be checked here.
151
+ * The remaining ten NorthWhistle needs — da, de, es, fi, fr, it, nb, nl, pl, pt
152
+ * — are a data-only follow-up requiring no code change: drop another `Messages`
153
+ * object into `LOCALES` below.
154
+ */
155
+ export const sv = {
156
+ 'field.email': 'E-post',
157
+ 'field.password': 'Lösenord',
158
+ 'field.newPassword': 'Nytt lösenord',
159
+ 'field.confirmPassword': 'Bekräfta lösenord',
160
+ 'field.firstName': 'Förnamn',
161
+ 'field.lastName': 'Efternamn',
162
+ 'field.phoneNumber': 'Telefonnummer',
163
+ 'field.verificationCode': 'Verifieringskod',
164
+ 'field.authenticationCode': 'Autentiseringskod',
165
+ 'field.recoveryCode': 'Återställningskod',
166
+ 'placeholder.email': 'du@exempel.se',
167
+ 'placeholder.password': 'Ange ditt lösenord',
168
+ 'placeholder.newPassword': 'Minst 8 tecken',
169
+ 'placeholder.confirmPassword': 'Upprepa lösenordet',
170
+ 'placeholder.firstName': 'Förnamn',
171
+ 'placeholder.lastName': 'Efternamn',
172
+ 'placeholder.phoneNumber': '',
173
+ 'placeholder.sixDigitCode': 'Ange 6-siffrig kod',
174
+ 'placeholder.recoveryCode': 'Ange återställningskod',
175
+ 'action.showPassword': 'Visa lösenord',
176
+ 'action.hidePassword': 'Dölj lösenord',
177
+ 'action.showPasswords': 'Visa lösenord',
178
+ 'action.hidePasswords': 'Dölj lösenord',
179
+ 'action.backToLogin': 'Tillbaka till inloggningen',
180
+ 'action.backToSignIn': 'Tillbaka till inloggningen',
181
+ 'action.resendCode': 'Skicka koden igen',
182
+ 'action.copy': 'Kopiera',
183
+ 'action.copied': 'Kopierad!',
184
+ 'action.tryAgain': 'Försök igen',
185
+ 'action.done': 'Klar',
186
+ 'divider.or': 'eller',
187
+ 'login.heading': 'Logga in på ditt konto',
188
+ 'login.submit': 'Logga in',
189
+ 'login.submitting': 'Loggar in…',
190
+ 'login.forgotPassword': 'Glömt lösenordet?',
191
+ 'login.magicLink': 'Logga in med magisk länk',
192
+ 'login.signupPrompt': 'Har du inget konto?',
193
+ 'login.signupLink': 'Skapa konto',
194
+ 'login.error.invalidCredentials': 'Fel e-postadress eller lösenord.',
195
+ 'forgot.headingRequest': 'Återställ ditt lösenord',
196
+ 'forgot.headingSet': 'Ange nytt lösenord',
197
+ 'forgot.description': 'Ange din e-postadress så skickar vi en länk för att återställa lösenordet.',
198
+ 'forgot.submit': 'Skicka återställningslänk',
199
+ 'forgot.setSubmit': 'Ange ett lösenord',
200
+ 'forgot.emailSent': 'Kolla din e-post för en länk att återställa lösenordet.',
201
+ 'forgot.successHeading': 'Lösenordet är sparat',
202
+ 'forgot.error.send': 'Det gick inte att skicka återställningslänken.',
203
+ 'forgot.error.update': 'Det gick inte att uppdatera lösenordet.',
204
+ 'forgot.error.mismatch': 'Lösenorden stämmer inte överens.',
205
+ 'forgot.error.tooShort': 'Lösenordet måste vara minst 8 tecken.',
206
+ 'magicLink.heading': 'Logga in med e-postlänk',
207
+ 'magicLink.description': 'Ange din e-postadress så skickar vi en inloggningslänk. Inget lösenord behövs.',
208
+ 'magicLink.submit': 'Skicka magisk länk',
209
+ 'magicLink.sent': 'Kolla din e-post — länken går ut om {expiry}.',
210
+ 'magicLink.expiryMinute': '{count} minut',
211
+ 'magicLink.expiryMinutes': '{count} minuter',
212
+ 'magicLink.expirySeconds': '{count} sekunder',
213
+ 'magicLink.error.send': 'Det gick inte att skicka den magiska länken.',
214
+ 'magicLink.error.auth': 'Inloggningen med magisk länk misslyckades.',
215
+ 'signup.heading': 'Skapa ditt konto',
216
+ 'signup.submit': 'Skapa konto',
217
+ 'signup.successHeading': 'Kolla din e-post',
218
+ 'signup.successDescription': 'Vi har skickat en verifieringslänk till {email}. Kolla inkorgen för att aktivera ditt konto.',
219
+ 'signup.loginPrompt': 'Har du redan ett konto?',
220
+ 'signup.loginLink': 'Logga in',
221
+ 'signup.error.create': 'Det gick inte att skapa kontot.',
222
+ 'passkey.loginButton': 'Logga in med passkey',
223
+ 'passkey.createHeading': 'Skapa en passkey',
224
+ 'passkey.createPrompt': 'Har du ingen passkey än?',
225
+ 'passkey.createLink': 'Skapa en.',
226
+ 'passkey.requestDescription': 'Ange din e-postadress så skickar vi en länk för att skapa din passkey.',
227
+ 'passkey.requestSubmit': 'Skicka länk',
228
+ 'passkey.sentHeading': 'Kolla din e-post',
229
+ 'passkey.sentDescription': 'Vi har skickat en länk till {email} för att skapa din passkey. Kolla inkorgen och klicka på länken för att skapa din passkey och slutföra inloggningen.',
230
+ 'passkey.settingUpHeading': 'Skapar din passkey',
231
+ 'passkey.setupHeading': 'Skapa passkey',
232
+ 'passkey.signInNow': 'Logga in nu',
233
+ 'passkey.requestNewLink': 'Begär en ny länk',
234
+ 'passkey.setupDescription': 'Följ anvisningarna från din webbläsare eller enhet för att slutföra skapandet av din passkey.',
235
+ 'passkey.setupSuccessHeading': 'Passkey skapad',
236
+ 'passkey.setupSuccessDescription': 'Din passkey har skapats.',
237
+ 'passkey.error.cancelled': 'Skapandet av passkey avbröts.',
238
+ 'passkey.error.authCancelled': 'Inloggningen med passkey avbröts.',
239
+ 'passkey.error.setupFailed': 'Det gick inte att skapa din passkey.',
240
+ 'passkey.error.expired': 'Länken har upphört att gälla eller är ogiltig.',
241
+ 'passkey.error.unsupported': 'Din webbläsare har inte stöd för passkeys.',
242
+ 'passkey.error.auth': 'Inloggningen med passkey misslyckades.',
243
+ 'passkey.error.setup': 'Ett fel uppstod när din passkey skulle skapas.',
244
+ 'passkey.error.verify': 'Din passkey kunde inte verifieras.',
245
+ 'passkey.error.sendLink': 'Det gick inte att skicka länken.',
246
+ 'mfa.challengeHeading': 'Tvåfaktorsautentisering',
247
+ 'mfa.submit': 'Verifiera',
248
+ 'mfa.useRecoveryCode': 'Använd återställningskod',
249
+ 'mfa.useAuthenticationCode': 'Använd autentiseringskod',
250
+ 'mfa.recoverSubmit': 'Återställ',
251
+ 'mfa.resendPrompt': 'Fick du inget SMS?',
252
+ 'mfa.resendCountdown': 'Fick du inget SMS? Du kan skicka igen om {seconds} s.',
253
+ 'mfa.error.invalidCode': 'Ogiltig kod. Försök igen.',
254
+ 'mfa.error.invalidRecoveryCode': 'Ogiltig återställningskod.',
255
+ 'mfa.error.resend': 'Det gick inte att skicka koden igen.',
256
+ 'mfaSetup.heading': 'Aktivera tvåfaktorsautentisering',
257
+ 'mfaSetup.phoneDescription': 'Ange ditt telefonnummer för att få en verifieringskod via SMS.',
258
+ 'mfaSetup.sendCode': 'Skicka kod',
259
+ 'mfaSetup.verifyDescription': 'Ange den 6-siffriga koden som skickades till din telefon.',
260
+ 'mfaSetup.verify': 'Verifiera',
261
+ 'mfaSetup.changePhone': 'Byt telefonnummer',
262
+ 'mfaSetup.backupDescription': 'Spara den här återställningskoden på ett säkert ställe. Du kan använda den för att komma åt ditt konto om du förlorar din telefon.',
263
+ 'mfaSetup.successHeading': 'Tvåfaktorsautentisering aktiverad!',
264
+ 'mfaSetup.error.sendCode': 'Det gick inte att skicka verifieringskoden.',
265
+ 'mfaSetup.error.resend': 'Det gick inte att skicka verifieringskoden igen.',
266
+ };
267
+ /** Locales shipping with the package. Adding one is data-only. */
268
+ export const LOCALES = { en, sv };
269
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/i18n/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { type MessageKey, type Messages } from './messages.js';
2
+ /**
3
+ * Message resolution for the SDK auth components (TBP-630).
4
+ *
5
+ * ## Synchronous, deliberately
6
+ *
7
+ * These components render during an auth redirect. An async catalogue load
8
+ * would paint English first and then swap — a visible flash on the one screen
9
+ * where the user is already waiting and already unsure. So every locale is
10
+ * bundled and lookup is a property access. The catalogue is small enough that
11
+ * this is cheaper than the machinery to avoid it.
12
+ *
13
+ * ## Resolution order
14
+ *
15
+ * 1. explicit per-key `messages` override
16
+ * 2. requested `locale`
17
+ * 3. English
18
+ *
19
+ * A missing key falls through to English, and a raw key NEVER renders. If the
20
+ * catalogue is wrong, the user sees the wrong language; if it rendered keys,
21
+ * they would see `login.submit` on a button. The first is a defect, the second
22
+ * is a broken product.
23
+ */
24
+ export type MessageOverrides = Partial<Record<MessageKey, string>>;
25
+ export interface Translator {
26
+ /** Resolve a key, substituting `{name}` placeholders from `vars`. */
27
+ (key: MessageKey, vars?: Record<string, string | number>): string;
28
+ }
29
+ /**
30
+ * Substitute `{name}` placeholders.
31
+ *
32
+ * A variable with no matching value is left as its literal placeholder rather
33
+ * than rendered as `undefined`. Neither is good, but `{email}` reads as
34
+ * obviously-missing data while `undefined` reads as a crash.
35
+ *
36
+ * Word order is the translator's business: the whole string is translated with
37
+ * the placeholder in it, so a locale that needs the variable first simply moves
38
+ * it. Nothing here concatenates fragments.
39
+ */
40
+ export declare function interpolate(template: string, vars?: Record<string, string | number>): string;
41
+ /** True when the locale has a catalogue. Consumers can use this to warn early. */
42
+ export declare function hasLocale(locale: string | null | undefined): boolean;
43
+ /**
44
+ * `sv-SE` → `sv`. Region variants share a catalogue until somebody has a reason
45
+ * to split them; matching `navigator.language` exactly would mean `en-GB` users
46
+ * falling back to... English, and `sv-SE` users falling back to English too,
47
+ * which is the bug.
48
+ */
49
+ export declare function normalizeLocale(locale: string): string;
50
+ /**
51
+ * Build a translator.
52
+ *
53
+ * `locale` unknown → English, no throw. That is a deliberate silent fallback:
54
+ * an app passing `locale="klingon"` should still render a usable login form,
55
+ * and a hard failure on the auth screen locks everybody out over a typo.
56
+ */
57
+ export declare function createTranslator(args?: {
58
+ locale?: string | null;
59
+ messages?: MessageOverrides;
60
+ }): Translator;
61
+ export type { MessageKey, Messages };
62
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/i18n/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,UAAU;IACzB,qEAAqE;IACrE,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC;CACnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GACrC,MAAM,CAKR;AAED,kFAAkF;AAClF,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IACtC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B,GAAG,UAAU,CASb;AAED,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC"}
@@ -0,0 +1,46 @@
1
+ import { en, LOCALES } from './messages.js';
2
+ /**
3
+ * Substitute `{name}` placeholders.
4
+ *
5
+ * A variable with no matching value is left as its literal placeholder rather
6
+ * than rendered as `undefined`. Neither is good, but `{email}` reads as
7
+ * obviously-missing data while `undefined` reads as a crash.
8
+ *
9
+ * Word order is the translator's business: the whole string is translated with
10
+ * the placeholder in it, so a locale that needs the variable first simply moves
11
+ * it. Nothing here concatenates fragments.
12
+ */
13
+ export function interpolate(template, vars) {
14
+ if (!vars)
15
+ return template;
16
+ return template.replace(/\{(\w+)\}/g, (match, name) => name in vars ? String(vars[name]) : match);
17
+ }
18
+ /** True when the locale has a catalogue. Consumers can use this to warn early. */
19
+ export function hasLocale(locale) {
20
+ return !!locale && !!LOCALES[normalizeLocale(locale)];
21
+ }
22
+ /**
23
+ * `sv-SE` → `sv`. Region variants share a catalogue until somebody has a reason
24
+ * to split them; matching `navigator.language` exactly would mean `en-GB` users
25
+ * falling back to... English, and `sv-SE` users falling back to English too,
26
+ * which is the bug.
27
+ */
28
+ export function normalizeLocale(locale) {
29
+ return locale.toLowerCase().split(/[-_]/)[0];
30
+ }
31
+ /**
32
+ * Build a translator.
33
+ *
34
+ * `locale` unknown → English, no throw. That is a deliberate silent fallback:
35
+ * an app passing `locale="klingon"` should still render a usable login form,
36
+ * and a hard failure on the auth screen locks everybody out over a typo.
37
+ */
38
+ export function createTranslator(args) {
39
+ const { locale, messages } = args ?? {};
40
+ const catalogue = (locale && LOCALES[normalizeLocale(locale)]) || en;
41
+ return (key, vars) => {
42
+ const template = messages?.[key] ?? catalogue[key] ?? en[key];
43
+ return interpolate(template, vars);
44
+ };
45
+ }
46
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/i18n/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,OAAO,EAAkC,MAAM,eAAe,CAAC;AA+B5E;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CACzB,QAAgB,EAChB,IAAsC;IAEtC,IAAI,CAAC,IAAI;QAAE,OAAO,QAAQ,CAAC;IAC3B,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE,CAC5D,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAC1C,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,SAAS,CAAC,MAAiC;IACzD,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,MAAc;IAC5C,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAGhC;IACC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;IACxC,MAAM,SAAS,GACb,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAErD,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnB,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9D,OAAO,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export { loadedInstanceCount, __resetInstanceRegistryForTests, } from './instance-guard.js';
2
2
  export { BridgeAuth } from './bridge-auth.js';
3
- export type { AppConfig, AuthConfigResponse, AuthResult, AuthState, BridgeAuthConfig, BridgeAuthEventName, BridgeAuthEvents, CheckoutSession, CurrentUser, FederationConnection, FlagRequirement, IDToken, MagicLinkResult, MfaResult, NavigationDecision, PasskeyAuthOptions, PasskeyRegistrationOptions, PasskeyVerificationResult, PaymentClaims, Plan, PriceOfferSdk, Profile, ResolvedConfig, RouteGuard, RouteGuardConfig, RouteRule, SessionStalePayload, SignupResult, SsoOptions, SsoResult, SubscriptionStatus, TenantUser, TokenSet, TokenStorage, Workspace, } from './types.js';
3
+ export type { AppConfig, AuthConfigResponse, AuthResult, AuthState, BridgeAuthConfig, BridgeAuthEventName, BridgeAuthEvents, CheckoutSession, CurrentUser, FederationConnection, FlagRequirement, IDToken, MagicLinkResult, MfaResult, NavigationDecision, PasskeyAuthOptions, PasskeyRegistrationOptions, PasskeyVerificationResult, PaymentClaims, Plan, PriceOfferSdk, Profile, ResolvedConfig, ReturnToConfig, RouteGuard, RouteGuardConfig, RouteRule, SessionStalePayload, SignupResult, SsoOptions, SsoResult, SubscriptionStatus, TenantUser, TokenSet, TokenStorage, Workspace, } from './types.js';
4
4
  export { TeamService } from './team-service.js';
5
5
  export type { TeamProfile, TeamProfileUpdateInput, TeamUser, TeamUserListResult, TeamUserUpdateInput, TeamWorkspace, TeamWorkspaceUpdateInput, } from './team-types.js';
6
6
  export { ApiTokenService } from './api-token-service.js';
@@ -34,4 +34,9 @@ export { EntitlementsStore } from './billing/entitlements-store.js';
34
34
  export type { EntitlementSnapshot } from './billing/entitlements-store.js';
35
35
  export { deriveNoticeState, deriveSeverity } from './billing/types.js';
36
36
  export type { BillingSubscriptionStatus, BillingSeverity, PastDueReason, BillingPlanRef, BillingSubscriptionState, BillingSubscriptionSnapshot, BillingNoticeState, BillingLockedPayload, MountOptions, } from './billing/types.js';
37
+ export { DEFAULT_RETURN_TO_PARAM, RETURN_TO_STORAGE_KEY, readReturnTo, sanitizeReturnTo, stashReturnTo, takeReturnTo, withReturnTo, } from './return-to.js';
38
+ export { createTranslator, hasLocale, interpolate, normalizeLocale, } from './i18n/resolver.js';
39
+ export type { MessageOverrides, Translator } from './i18n/resolver.js';
40
+ export { LOCALES, en, sv } from './i18n/messages.js';
41
+ export type { MessageKey, Messages } from './i18n/messages.js';
37
42
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -48,4 +48,13 @@ export { QuotaStore } from './billing/quota-store.js';
48
48
  // Billing 2.0 US-12 — entitlement cache + types.
49
49
  export { EntitlementsStore } from './billing/entitlements-store.js';
50
50
  export { deriveNoticeState, deriveSeverity } from './billing/types.js';
51
+ // TBP-629 — deep-link preservation for SDK-mode route guards. Exported so a
52
+ // consumer's login page can read the return target back with the validation
53
+ // already applied, rather than each app reinventing the open-redirect check.
54
+ export { DEFAULT_RETURN_TO_PARAM, RETURN_TO_STORAGE_KEY, readReturnTo, sanitizeReturnTo, stashReturnTo, takeReturnTo, withReturnTo, } from './return-to.js';
55
+ // TBP-630 — SDK auth message catalogue. Lives in core so bridge-svelte,
56
+ // -react, -angular and -nextjs resolve identical copy rather than drifting
57
+ // into four slightly different logins.
58
+ export { createTranslator, hasLocale, interpolate, normalizeLocale, } from './i18n/resolver.js';
59
+ export { LOCALES, en, sv } from './i18n/messages.js';
51
60
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,6EAA6E;AAC7E,2EAA2E;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,gBAAgB,EAAE,CAAC;AAEnB,OAAO,EACL,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,qBAAqB,CAAC;AAE7B,cAAc;AACd,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAyC9C,kBAAkB;AAClB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAWhD,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,SAAS;AACT,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7E,8CAA8C;AAC9C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExE,YAAY;AACZ,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEtG,yCAAyC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAgC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AACjF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,+EAA+E;AAC/E,6EAA6E;AAC7E,0EAA0E;AAC1E,iEAAiE;AACjE,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,uBAAuB,EACvB,UAAU,EACV,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAClB,MAAM,EACN,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,mBAAmB,EACnB,yBAAyB,EACzB,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAoD1B,+EAA+E;AAC/E,2EAA2E;AAC3E,4DAA4D;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAOpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,iDAAiD;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Return-to handling for the SDK-mode route guard (TBP-629).
3
+ *
4
+ * When the guard turns an unauthenticated visitor away from a protected route,
5
+ * the path they asked for has to survive the trip through the login page or the
6
+ * deep link is lost. In SDK mode that means carrying it as a query parameter on
7
+ * the consumer's own login route.
8
+ *
9
+ * A query parameter is the deliberate choice over sessionStorage. Storage has a
10
+ * smaller attack surface — nothing attacker-controllable ever enters the URL —
11
+ * but it does not survive a cross-tab click, and a link mailed to somebody and
12
+ * opened in a fresh tab is the exact case that prompted this. Storage would
13
+ * silently fail at the only job it was hired for.
14
+ *
15
+ * The cost of that choice is that the value is attacker-controllable, so it is
16
+ * untrusted input and this module treats it as such. Consumers should not have
17
+ * to know that: {@link sanitizeReturnTo} is applied on the way in AND on the way
18
+ * out, so a hostile value cannot reach a navigation call even if a consumer
19
+ * forgets to check.
20
+ */
21
+ /** Query parameter carrying the return target. Matches hosted mode's `redirectUri`
22
+ * vocabulary on purpose, so consumers do not learn a second name for one idea. */
23
+ export declare const DEFAULT_RETURN_TO_PARAM = "redirectUri";
24
+ /**
25
+ * Reduce an untrusted return target to a same-origin path, or null.
26
+ *
27
+ * Only same-origin, path-absolute targets survive. Everything else is rejected
28
+ * rather than repaired — a value we have to fix up is a value we do not
29
+ * understand, and "understood well enough to edit" is how open redirects get
30
+ * shipped.
31
+ *
32
+ * Rejected, and why each one matters:
33
+ *
34
+ * | Input | Why |
35
+ * |---|---|
36
+ * | `https://evil.test/x` | absolute URL — classic open redirect |
37
+ * | `//evil.test/x` | protocol-relative; browsers treat it as absolute |
38
+ * | `/\evil.test` , `\\evil.test` | browsers normalise `\` to `/`, so this IS protocol-relative |
39
+ * | `javascript:alert(1)` | scheme payload; no leading `/` so it fails anyway, rejected explicitly for clarity |
40
+ * | `x/y` | relative — resolves against whatever page it lands on, so the destination is not knowable here |
41
+ * | anything with CR/LF/TAB/NUL | header and URL smuggling |
42
+ *
43
+ * Note `/\` and `\\` are checked on the RAW string before any normalisation.
44
+ * Checking after normalising would be checking the wrong string, which is the
45
+ * usual way this validation is written wrong.
46
+ */
47
+ export declare function sanitizeReturnTo(value: string | null | undefined): string | null;
48
+ /**
49
+ * Build the login route with the return target attached.
50
+ *
51
+ * Returns `loginRoute` untouched when there is nothing safe to carry, so the
52
+ * caller never has to branch on it. Preserves any query string the consumer
53
+ * already put on their `loginRoute`.
54
+ */
55
+ export declare function withReturnTo(loginRoute: string, returnTo: string | null | undefined, param?: string): string;
56
+ /**
57
+ * Read the return target back off the login page's URL, validated.
58
+ *
59
+ * This is the half consumers would otherwise have to write themselves, and the
60
+ * half where forgetting the validation is an open redirect. Accepts a `URL`, a
61
+ * `URLSearchParams`, or a raw query/href string so it can be called from a load
62
+ * function, a component, or a plain browser context without ceremony.
63
+ *
64
+ * Returns null when absent or unsafe — callers should fall back to their own
65
+ * default route, never navigate to null.
66
+ */
67
+ export declare function readReturnTo(source: URL | URLSearchParams | string | null | undefined, param?: string): string | null;
68
+ /**
69
+ * Storage key for the hosted-mode return target. Namespaced like the other
70
+ * Bridge-owned sessionStorage entries (`bridge_checkout_session_id`).
71
+ */
72
+ export declare const RETURN_TO_STORAGE_KEY = "bridge_return_to";
73
+ /**
74
+ * Hosted mode carries the return target in sessionStorage, NOT in the URL
75
+ * (TBP-629).
76
+ *
77
+ * This is not a stylistic difference from SDK mode — it is forced. Hosted login
78
+ * hands `redirectUri` to the OAuth authorize call, and bridge-api validates it
79
+ * with `appConfig.allowedRedirectUris.includes(redirect_uri)`: an exact string
80
+ * match. Appending `?redirectUri=/deep/link` to the callback URL would fail that
81
+ * check and break login outright, so the OAuth contract has to stay byte-for-byte
82
+ * what it is today.
83
+ *
84
+ * sessionStorage is sound here for a reason that does NOT hold in general: the
85
+ * whole round-trip happens in one tab and returns to the origin that wrote the
86
+ * value. The visitor opens the deep link (tab A), we stash and redirect tab A to
87
+ * the hosted portal, they sign in, the portal returns tab A to our callback on
88
+ * our origin — where the value is still sitting.
89
+ *
90
+ * Every failure mode here is "fall back to the default route", never "throw":
91
+ * Safari in private mode throws on setItem, and SSR has no sessionStorage at all.
92
+ * Losing a deep link is the bug we are fixing; breaking login would be worse.
93
+ */
94
+ export declare function stashReturnTo(value: string | null | undefined): void;
95
+ /**
96
+ * Read and CLEAR the stashed return target. One-shot by design: a value left
97
+ * behind would hijack the next login in this tab, sending somebody to a page
98
+ * they asked for ten minutes ago.
99
+ *
100
+ * Re-sanitized on the way out. The value is same-origin and was sanitized on the
101
+ * way in, so this is belt-and-braces — but it is the difference between "storage
102
+ * was tampered with" being a routing oddity and being an open redirect.
103
+ */
104
+ export declare function takeReturnTo(): string | null;
105
+ //# sourceMappingURL=return-to.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"return-to.d.ts","sourceRoot":"","sources":["../src/return-to.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH;mFACmF;AACnF,eAAO,MAAM,uBAAuB,gBAAgB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CA0BhF;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACnC,KAAK,GAAE,MAAgC,GACtC,MAAM,CAMR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,GAAG,GAAG,eAAe,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,EACzD,KAAK,GAAE,MAAgC,GACtC,MAAM,GAAG,IAAI,CAoBf;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,qBAAqB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CASpE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,IAAI,MAAM,GAAG,IAAI,CAS5C"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Return-to handling for the SDK-mode route guard (TBP-629).
3
+ *
4
+ * When the guard turns an unauthenticated visitor away from a protected route,
5
+ * the path they asked for has to survive the trip through the login page or the
6
+ * deep link is lost. In SDK mode that means carrying it as a query parameter on
7
+ * the consumer's own login route.
8
+ *
9
+ * A query parameter is the deliberate choice over sessionStorage. Storage has a
10
+ * smaller attack surface — nothing attacker-controllable ever enters the URL —
11
+ * but it does not survive a cross-tab click, and a link mailed to somebody and
12
+ * opened in a fresh tab is the exact case that prompted this. Storage would
13
+ * silently fail at the only job it was hired for.
14
+ *
15
+ * The cost of that choice is that the value is attacker-controllable, so it is
16
+ * untrusted input and this module treats it as such. Consumers should not have
17
+ * to know that: {@link sanitizeReturnTo} is applied on the way in AND on the way
18
+ * out, so a hostile value cannot reach a navigation call even if a consumer
19
+ * forgets to check.
20
+ */
21
+ /** Query parameter carrying the return target. Matches hosted mode's `redirectUri`
22
+ * vocabulary on purpose, so consumers do not learn a second name for one idea. */
23
+ export const DEFAULT_RETURN_TO_PARAM = 'redirectUri';
24
+ /**
25
+ * Reduce an untrusted return target to a same-origin path, or null.
26
+ *
27
+ * Only same-origin, path-absolute targets survive. Everything else is rejected
28
+ * rather than repaired — a value we have to fix up is a value we do not
29
+ * understand, and "understood well enough to edit" is how open redirects get
30
+ * shipped.
31
+ *
32
+ * Rejected, and why each one matters:
33
+ *
34
+ * | Input | Why |
35
+ * |---|---|
36
+ * | `https://evil.test/x` | absolute URL — classic open redirect |
37
+ * | `//evil.test/x` | protocol-relative; browsers treat it as absolute |
38
+ * | `/\evil.test` , `\\evil.test` | browsers normalise `\` to `/`, so this IS protocol-relative |
39
+ * | `javascript:alert(1)` | scheme payload; no leading `/` so it fails anyway, rejected explicitly for clarity |
40
+ * | `x/y` | relative — resolves against whatever page it lands on, so the destination is not knowable here |
41
+ * | anything with CR/LF/TAB/NUL | header and URL smuggling |
42
+ *
43
+ * Note `/\` and `\\` are checked on the RAW string before any normalisation.
44
+ * Checking after normalising would be checking the wrong string, which is the
45
+ * usual way this validation is written wrong.
46
+ */
47
+ export function sanitizeReturnTo(value) {
48
+ if (typeof value !== 'string')
49
+ return null;
50
+ const raw = value.trim();
51
+ if (raw.length === 0)
52
+ return null;
53
+ // Control characters anywhere — smuggling vectors, never legitimate in a path.
54
+ // Written as escapes, not literal bytes: a raw NUL in a source file is a hazard
55
+ // in its own right.
56
+ // eslint-disable-next-line no-control-regex
57
+ if (/[\u0000-\u001f\u007f]/.test(raw))
58
+ return null;
59
+ // Must be path-absolute. This alone kills `javascript:`, `data:`, `https://…`
60
+ // and every relative form, but the explicit cases below are what a reader
61
+ // checks this function against.
62
+ if (!raw.startsWith('/'))
63
+ return null;
64
+ // Protocol-relative, in both spellings the browser accepts.
65
+ if (raw.startsWith('//') || raw.startsWith('/\\'))
66
+ return null;
67
+ // A backslash anywhere in the authority position is the same trick with an
68
+ // extra step; reject the character outright rather than reasoning about where
69
+ // it is safe.
70
+ if (raw.includes('\\'))
71
+ return null;
72
+ return raw;
73
+ }
74
+ /**
75
+ * Build the login route with the return target attached.
76
+ *
77
+ * Returns `loginRoute` untouched when there is nothing safe to carry, so the
78
+ * caller never has to branch on it. Preserves any query string the consumer
79
+ * already put on their `loginRoute`.
80
+ */
81
+ export function withReturnTo(loginRoute, returnTo, param = DEFAULT_RETURN_TO_PARAM) {
82
+ const safe = sanitizeReturnTo(returnTo);
83
+ if (!safe)
84
+ return loginRoute;
85
+ const separator = loginRoute.includes('?') ? '&' : '?';
86
+ return `${loginRoute}${separator}${param}=${encodeURIComponent(safe)}`;
87
+ }
88
+ /**
89
+ * Read the return target back off the login page's URL, validated.
90
+ *
91
+ * This is the half consumers would otherwise have to write themselves, and the
92
+ * half where forgetting the validation is an open redirect. Accepts a `URL`, a
93
+ * `URLSearchParams`, or a raw query/href string so it can be called from a load
94
+ * function, a component, or a plain browser context without ceremony.
95
+ *
96
+ * Returns null when absent or unsafe — callers should fall back to their own
97
+ * default route, never navigate to null.
98
+ */
99
+ export function readReturnTo(source, param = DEFAULT_RETURN_TO_PARAM) {
100
+ if (!source)
101
+ return null;
102
+ let params;
103
+ if (source instanceof URLSearchParams) {
104
+ params = source;
105
+ }
106
+ else if (typeof source === 'string') {
107
+ try {
108
+ // Works for a full href, and for a bare "?a=b" or "a=b".
109
+ params = source.includes('://')
110
+ ? new URL(source).searchParams
111
+ : new URLSearchParams(source.startsWith('?') ? source.slice(1) : source);
112
+ }
113
+ catch {
114
+ return null;
115
+ }
116
+ }
117
+ else {
118
+ params = source.searchParams;
119
+ }
120
+ return sanitizeReturnTo(params.get(param));
121
+ }
122
+ /**
123
+ * Storage key for the hosted-mode return target. Namespaced like the other
124
+ * Bridge-owned sessionStorage entries (`bridge_checkout_session_id`).
125
+ */
126
+ export const RETURN_TO_STORAGE_KEY = 'bridge_return_to';
127
+ /**
128
+ * Hosted mode carries the return target in sessionStorage, NOT in the URL
129
+ * (TBP-629).
130
+ *
131
+ * This is not a stylistic difference from SDK mode — it is forced. Hosted login
132
+ * hands `redirectUri` to the OAuth authorize call, and bridge-api validates it
133
+ * with `appConfig.allowedRedirectUris.includes(redirect_uri)`: an exact string
134
+ * match. Appending `?redirectUri=/deep/link` to the callback URL would fail that
135
+ * check and break login outright, so the OAuth contract has to stay byte-for-byte
136
+ * what it is today.
137
+ *
138
+ * sessionStorage is sound here for a reason that does NOT hold in general: the
139
+ * whole round-trip happens in one tab and returns to the origin that wrote the
140
+ * value. The visitor opens the deep link (tab A), we stash and redirect tab A to
141
+ * the hosted portal, they sign in, the portal returns tab A to our callback on
142
+ * our origin — where the value is still sitting.
143
+ *
144
+ * Every failure mode here is "fall back to the default route", never "throw":
145
+ * Safari in private mode throws on setItem, and SSR has no sessionStorage at all.
146
+ * Losing a deep link is the bug we are fixing; breaking login would be worse.
147
+ */
148
+ export function stashReturnTo(value) {
149
+ const safe = sanitizeReturnTo(value);
150
+ if (!safe)
151
+ return;
152
+ try {
153
+ if (typeof sessionStorage === 'undefined')
154
+ return;
155
+ sessionStorage.setItem(RETURN_TO_STORAGE_KEY, safe);
156
+ }
157
+ catch {
158
+ // Private mode / quota / disabled storage — deep link is lost, login is not.
159
+ }
160
+ }
161
+ /**
162
+ * Read and CLEAR the stashed return target. One-shot by design: a value left
163
+ * behind would hijack the next login in this tab, sending somebody to a page
164
+ * they asked for ten minutes ago.
165
+ *
166
+ * Re-sanitized on the way out. The value is same-origin and was sanitized on the
167
+ * way in, so this is belt-and-braces — but it is the difference between "storage
168
+ * was tampered with" being a routing oddity and being an open redirect.
169
+ */
170
+ export function takeReturnTo() {
171
+ try {
172
+ if (typeof sessionStorage === 'undefined')
173
+ return null;
174
+ const raw = sessionStorage.getItem(RETURN_TO_STORAGE_KEY);
175
+ sessionStorage.removeItem(RETURN_TO_STORAGE_KEY);
176
+ return sanitizeReturnTo(raw);
177
+ }
178
+ catch {
179
+ return null;
180
+ }
181
+ }
182
+ //# sourceMappingURL=return-to.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"return-to.js","sourceRoot":"","sources":["../src/return-to.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"route-guard.d.ts","sourceRoot":"","sources":["../src/route-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAGV,cAAc,EACd,UAAU,EACV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAsBpB,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,gBAAgB,EAC7B,UAAU,EAAE,cAAc,EAC1B,eAAe,EAAE,MAAM,OAAO,EAC9B,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,MAAM,EAC3D,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,MAAM,GACb,UAAU,CAwEZ"}
1
+ {"version":3,"file":"route-guard.d.ts","sourceRoot":"","sources":["../src/route-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAGV,cAAc,EACd,UAAU,EACV,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAsBpB,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,gBAAgB,EAC7B,UAAU,EAAE,cAAc,EAC1B,eAAe,EAAE,MAAM,OAAO,EAC9B,cAAc,EAAE,CAAC,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,KAAK,MAAM,EAC3D,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,MAAM,GACb,UAAU,CAwHZ"}
@@ -1,3 +1,4 @@
1
+ import { sanitizeReturnTo } from './return-to.js';
1
2
  import { useBridge } from './billing/use-bridge.js';
2
3
  function escapeRegex(text) {
3
4
  return text.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
@@ -66,9 +67,51 @@ export function createRouteGuard(guardConfig, authConfig, isAuthenticated, creat
66
67
  function getLoginRedirect() {
67
68
  return createLoginUrl();
68
69
  }
69
- async function getNavigationDecision(pathname) {
70
+ /**
71
+ * TBP-629 — decide what the visitor should be sent back to after logging in.
72
+ *
73
+ * Returns null rather than a best guess whenever the answer is not clearly
74
+ * safe and useful. A null here just means the consumer falls back to its
75
+ * `defaultRedirectRoute`, i.e. exactly the old behaviour, so failing closed
76
+ * costs nothing.
77
+ *
78
+ * The login route excludes itself. Without that, a visitor bounced through
79
+ * `/auth/login` comes back carrying `?redirectUri=/auth/login`, which either
80
+ * loops or strands them on a login form they have already completed — a
81
+ * worse outcome than the bug this is fixing.
82
+ */
83
+ function resolveReturnTo(attempted) {
84
+ const returnToConfig = guardConfig.returnTo;
85
+ if (returnToConfig?.enabled === false)
86
+ return null;
87
+ const safe = sanitizeReturnTo(attempted);
88
+ if (!safe)
89
+ return null;
90
+ // Compare paths only — a query string must not let `/auth/login?x=1` slip
91
+ // past an exclusion written as `/auth/login`.
92
+ const path = safe.split('?')[0];
93
+ const loginRoute = returnToConfig?.loginRoute;
94
+ if (loginRoute && path === loginRoute.split('?')[0])
95
+ return null;
96
+ const excluded = returnToConfig?.exclude ?? [];
97
+ if (excluded.some((pattern) => toRegExp(pattern).test(path)))
98
+ return null;
99
+ // A public route is never what the guard turned somebody away from, and
100
+ // sending them "back" to one after login is noise.
101
+ if (isPublicRoute(path))
102
+ return null;
103
+ return safe;
104
+ }
105
+ async function getNavigationDecision(pathname, attempted) {
70
106
  if (shouldRedirectToLogin(pathname)) {
71
- return { type: 'login', loginUrl: getLoginRedirect() };
107
+ // Fall back to the bare pathname when the caller did not supply the full
108
+ // attempted URL, so older adapters still preserve something useful.
109
+ const returnTo = resolveReturnTo(attempted ?? pathname);
110
+ return {
111
+ type: 'login',
112
+ loginUrl: getLoginRedirect(),
113
+ ...(returnTo ? { returnTo } : {}),
114
+ };
72
115
  }
73
116
  const redirectTo = await checkRouteRestrictions(pathname);
74
117
  if (redirectTo) {
@@ -83,6 +126,7 @@ export function createRouteGuard(guardConfig, authConfig, isAuthenticated, creat
83
126
  checkRouteRestrictions,
84
127
  getLoginRedirect,
85
128
  getNavigationDecision,
129
+ resolveReturnTo,
86
130
  };
87
131
  }
88
132
  //# sourceMappingURL=route-guard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-guard.js","sourceRoot":"","sources":["../src/route-guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAWpD,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,QAAQ,CAAC,OAAwB;IACxC,IAAI,OAAO,YAAY,MAAM;QAAE,OAAO,OAAO,CAAC;IAC9C,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,MAAM,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5D,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB,EAAE,KAAkB;IAC5D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;YAAE,OAAO,IAAI,CAAC;IACvD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,WAA6B,EAC7B,UAA0B,EAC1B,eAA8B,EAC9B,cAA2D,EAC3D,YAAgC,EAChC,MAAc;IAEd,SAAS,aAAa,CAAC,QAAgB;QACrC,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,IAAI;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC/B,OAAO,CAAC,WAAW,CAAC,aAAa,IAAI,WAAW,CAAC,KAAK,QAAQ,CAAC;IACjE,CAAC;IAED,SAAS,gBAAgB,CAAC,QAAgB;QACxC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,SAAS,qBAAqB,CAAC,QAAgB;QAC7C,OAAO,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,UAAU,uBAAuB,CAAC,GAAoB;QACzD,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,OAAO,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAChE,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;YACjB,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,UAAU,sBAAsB,CAAC,QAAgB;QACpD,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3D,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,EAAE,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC3D,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,UAAU,IAAI,GAAG,CAAC;QACzC,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChB,MAAM,CAAC,KAAK,CAAC,SAAS,QAAQ,4BAA4B,CAAC,CAAC;gBAC5D,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,SAAS,gBAAgB;QACvB,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,UAAU,qBAAqB,CAAC,QAAgB;QACnD,IAAI,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC;QACzD,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO;QACL,aAAa;QACb,gBAAgB;QAChB,qBAAqB;QACrB,sBAAsB;QACtB,gBAAgB;QAChB,qBAAqB;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"route-guard.js","sourceRoot":"","sources":["../src/route-guard.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -204,12 +204,53 @@ export interface RouteRule {
204
204
  export interface RouteGuardConfig {
205
205
  rules: RouteRule[];
206
206
  defaultAccess?: 'public' | 'protected';
207
+ /**
208
+ * Deep-link preservation for SDK mode (TBP-629).
209
+ *
210
+ * Without this the guard sends an unauthenticated visitor to the login route
211
+ * and forgets what they asked for, so every protected deep link collapses to
212
+ * `defaultRedirectRoute` after sign-in — silently, with no error.
213
+ */
214
+ returnTo?: ReturnToConfig;
215
+ }
216
+ export interface ReturnToConfig {
217
+ /**
218
+ * Default true. Set false to keep the pre-TBP-629 behaviour, where every
219
+ * login lands on the app's default route regardless of what was asked for.
220
+ */
221
+ enabled?: boolean;
222
+ /**
223
+ * Query parameter carrying the attempted path. Defaults to `redirectUri`,
224
+ * matching hosted mode rather than inventing a second vocabulary.
225
+ */
226
+ param?: string;
227
+ /**
228
+ * Paths that must never become a return target, in addition to the login
229
+ * route itself (which the guard always excludes). Accepts the same
230
+ * string-with-`*` or RegExp forms as `RouteRule.match`.
231
+ *
232
+ * The point is to stop a bounce through an auth screen coming back as
233
+ * `?redirectUri=/auth/login`, which either loops or strands the visitor.
234
+ */
235
+ exclude?: (string | RegExp)[];
236
+ /**
237
+ * The app's login route, so the guard can exclude it from being its own
238
+ * destination. Framework adapters pass this from their own config; consumers
239
+ * of `createRouteGuard` directly can set it here.
240
+ */
241
+ loginRoute?: string;
207
242
  }
208
243
  export type NavigationDecision = {
209
244
  type: 'allow';
210
245
  } | {
211
246
  type: 'login';
212
247
  loginUrl: string;
248
+ /**
249
+ * The path+query the visitor was turned away from, sanitized and safe to
250
+ * navigate to, or undefined when there is nothing worth carrying (opted
251
+ * out, excluded, or the attempt was not supplied). TBP-629.
252
+ */
253
+ returnTo?: string;
213
254
  } | {
214
255
  type: 'redirect';
215
256
  to: string;
@@ -220,7 +261,14 @@ export interface RouteGuard {
220
261
  shouldRedirectToLogin(pathname: string): boolean;
221
262
  checkRouteRestrictions(pathname: string): Promise<string | null>;
222
263
  getLoginRedirect(): string;
223
- getNavigationDecision(pathname: string): Promise<NavigationDecision>;
264
+ /**
265
+ * `attempted` is the full path+query the visitor asked for. Optional so the
266
+ * existing single-argument callers keep working unchanged; supplying it is
267
+ * what turns deep-link preservation on.
268
+ */
269
+ getNavigationDecision(pathname: string, attempted?: string): Promise<NavigationDecision>;
270
+ /** Sanitized return target for a path, or null. Exposed for adapters. */
271
+ resolveReturnTo(attempted: string | null | undefined): string | null;
224
272
  }
225
273
  /** Token storage interface — pluggable */
226
274
  export interface TokenStorage {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nebulr-group/bridge-auth-core",
3
- "version": "0.4.6",
3
+ "version": "0.5.0",
4
4
  "description": "Framework-agnostic auth core for Bridge platform",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",