@nebulr-group/bridge-auth-core 0.4.5 → 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.
@@ -1 +1 @@
1
- {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/flags/operators.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,SAAS,4HAaZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAarE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAElF;AAqBD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAI1C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACvC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CA4FxF;AAID,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,cAAc,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAM,GAC3D,eAAe,EAAE,CAwGnB"}
1
+ {"version":3,"file":"operators.d.ts","sourceRoot":"","sources":["../../src/flags/operators.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,SAAS,4HAaZ,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAE3C,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAarE,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ,CAE5D;AAED,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAEjF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,aAAa,GAAG,aAAa,CAAC,QAAQ,CAAC,CAElF;AAqBD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAI1C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;CACvC;AAoCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,GAAG,OAAO,CAoGxF;AAID,MAAM,WAAW,eAAe;IAC9B,6EAA6E;IAC7E,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,aAAa,CAAC,SAAS,CAAC,EACpC,cAAc,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAM,GAC3D,eAAe,EAAE,CAwGnB"}
@@ -60,6 +60,36 @@ const IN_LIST_MAX = 1_000;
60
60
  // so the UI can surface the limit consistently.
61
61
  export const CONDITIONS_PER_RULE_MAX = 50;
62
62
  // ── Evaluation ──────────────────────────────────────────────────────────────
63
+ /**
64
+ * Attributes compared case-INSENSITIVELY (TBP-610).
65
+ *
66
+ * Plan keys are free-form per app and their case is arbitrary: the Plan schema
67
+ * defaults `key` to lower-case `"free"`, while a real app in production
68
+ * carries `FREE` / `PREMIUM` / `ENTERPRISE` because those were typed in by
69
+ * hand. `key` is immutable, so an app is stuck with whatever case it was
70
+ * created with, and a rule author has no way to know which they are facing.
71
+ *
72
+ * A mis-cased rule is not an error anywhere. `eq` is a strict `===`, so the
73
+ * rule simply never matches and the flag returns its off value — which looks
74
+ * exactly like a customer who has not bought the feature. Our own seeded
75
+ * `premium-features` flag was authored as `tenant.plan eq "premium"` against
76
+ * plan key `PREMIUM` and had therefore never returned true for anyone.
77
+ *
78
+ * Scoped deliberately to `tenant.plan`. `user.role` has the same shape of
79
+ * trap, but roles are consistently upper-case in the seeded data, and making a
80
+ * previously-dead role rule start matching would GRANT access — a heavier
81
+ * consequence than enabling a feature, and not something to change as a
82
+ * side-effect of this fix.
83
+ *
84
+ * Note this does change live behaviour: a lower-case `tenant.plan` rule that
85
+ * has never fired will start firing. That is the intent — such a rule was
86
+ * always meant to match — but it is a real change for any app carrying one.
87
+ */
88
+ const CASE_INSENSITIVE_ATTRIBUTES = new Set(['tenant.plan']);
89
+ /** Case-fold only strings; leave every other type untouched. */
90
+ function fold(value) {
91
+ return typeof value === 'string' ? value.toLowerCase() : value;
92
+ }
63
93
  /**
64
94
  * Evaluate a single condition against an attribute value.
65
95
  *
@@ -90,7 +120,14 @@ export const CONDITIONS_PER_RULE_MAX = 50;
90
120
  * the consuming app.
91
121
  */
92
122
  export function evaluateCondition(condition, attributeValue) {
93
- const { operator, values } = condition;
123
+ const { operator } = condition;
124
+ // Fold both sides together, so the comparison stays symmetric no matter
125
+ // which side was authored in which case.
126
+ const caseInsensitive = CASE_INSENSITIVE_ATTRIBUTES.has(condition.attribute);
127
+ const values = caseInsensitive ? condition.values.map(fold) : condition.values;
128
+ if (caseInsensitive) {
129
+ attributeValue = fold(attributeValue);
130
+ }
94
131
  // exists / not_exists handle missing values specially — short-circuit first
95
132
  if (operator === 'exists') {
96
133
  return attributeValue !== undefined && attributeValue !== null;
@@ -1 +1 @@
1
- {"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/flags/operators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operators.js","sourceRoot":"","sources":["../../src/flags/operators.ts"],"names":[],"mappings":"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"}
@@ -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"}