@smileid/usesmileid 12.0.1 → 12.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +1 -1
- package/dist/camera/camera_defaults.d.ts +2 -0
- package/dist/camera/camera_defaults.d.ts.map +1 -1
- package/dist/camera/camera_defaults.js +2 -0
- package/dist/camera/camera_defaults.js.map +1 -1
- package/dist/core/exception/flow_exceptions.d.ts +4 -2
- package/dist/core/exception/flow_exceptions.d.ts.map +1 -1
- package/dist/core/exception/flow_exceptions.js +3 -2
- package/dist/core/exception/flow_exceptions.js.map +1 -1
- package/dist/core/exception/missing_job_type_exception.d.ts +1 -3
- package/dist/core/exception/missing_job_type_exception.d.ts.map +1 -1
- package/dist/core/exception/missing_job_type_exception.js +2 -4
- package/dist/core/exception/missing_job_type_exception.js.map +1 -1
- package/dist/data/api/interceptors/smile_auth_interceptor.js +1 -1
- package/dist/data/api/interceptors/smile_auth_interceptor.js.map +1 -1
- package/dist/data/api/smile_id_api.d.ts +4 -0
- package/dist/data/api/smile_id_api.d.ts.map +1 -1
- package/dist/data/api/smile_id_api.js +30 -27
- package/dist/data/api/smile_id_api.js.map +1 -1
- package/dist/data/model/job_request.d.ts +28 -12
- package/dist/data/model/job_request.d.ts.map +1 -1
- package/dist/data/model/token_payload.d.ts +78 -0
- package/dist/data/model/token_payload.d.ts.map +1 -0
- package/dist/data/model/token_payload.js +132 -0
- package/dist/data/model/token_payload.js.map +1 -0
- package/dist/data/model/user_details_payload.d.ts +39 -0
- package/dist/data/model/user_details_payload.d.ts.map +1 -0
- package/dist/data/model/user_details_payload.js +53 -0
- package/dist/data/model/user_details_payload.js.map +1 -0
- package/dist/data/util/use_smile_id_token_decoder.d.ts +15 -3
- package/dist/data/util/use_smile_id_token_decoder.d.ts.map +1 -1
- package/dist/data/util/use_smile_id_token_decoder.js +20 -8
- package/dist/data/util/use_smile_id_token_decoder.js.map +1 -1
- package/dist/l10n/strings_en.d.ts +4 -1
- package/dist/l10n/strings_en.d.ts.map +1 -1
- package/dist/l10n/strings_en.js +4 -1
- package/dist/l10n/strings_en.js.map +1 -1
- package/dist/l10n/use_smile_id_localizations.d.ts +10 -0
- package/dist/l10n/use_smile_id_localizations.d.ts.map +1 -1
- package/dist/l10n/use_smile_id_localizations.js +59 -3
- package/dist/l10n/use_smile_id_localizations.js.map +1 -1
- package/dist/metadata/metadata_configuration_mappers.js +1 -1
- package/dist/metadata/metadata_configuration_mappers.js.map +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.js +1 -1
- package/dist/metadata/use_smile_id_metadata_factory.js.map +1 -1
- package/dist/presentation/components/use_smile_id_button.d.ts.map +1 -1
- package/dist/presentation/components/use_smile_id_button.js +8 -2
- package/dist/presentation/components/use_smile_id_button.js.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts +3 -6
- package/dist/presentation/flow/dsl/builder/screens_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/builder/screens_builder.js +4 -6
- package/dist/presentation/flow/dsl/builder/screens_builder.js.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.d.ts.map +1 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js +23 -1
- package/dist/presentation/flow/dsl/use_smile_id_flow_builder.js.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.d.ts +17 -2
- package/dist/presentation/flow/flow_navigation_manager.d.ts.map +1 -1
- package/dist/presentation/flow/flow_navigation_manager.js +77 -45
- package/dist/presentation/flow/flow_navigation_manager.js.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_processing_screen.d.ts.map +1 -1
- package/dist/presentation/flow/screen/orchestrated_processing_screen.js +25 -5
- package/dist/presentation/flow/screen/orchestrated_processing_screen.js.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.d.ts.map +1 -1
- package/dist/presentation/flow/use_smile_id_flow.js +35 -8
- package/dist/presentation/flow/use_smile_id_flow.js.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.d.ts +16 -2
- package/dist/presentation/flow/validation/flow_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/flow_validator.js +19 -27
- package/dist/presentation/flow/validation/flow_validator.js.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.d.ts +7 -0
- package/dist/presentation/flow/validation/job_type_validator.d.ts.map +1 -1
- package/dist/presentation/flow/validation/job_type_validator.js +52 -27
- package/dist/presentation/flow/validation/job_type_validator.js.map +1 -1
- package/dist/presentation/flow/validation/user_details_validator.d.ts +9 -0
- package/dist/presentation/flow/validation/user_details_validator.d.ts.map +1 -0
- package/dist/presentation/flow/validation/user_details_validator.js +40 -0
- package/dist/presentation/flow/validation/user_details_validator.js.map +1 -0
- package/dist/presentation/screen/helpers/capture_screen_helpers.d.ts.map +1 -1
- package/dist/presentation/screen/helpers/capture_screen_helpers.js +1 -0
- package/dist/presentation/screen/helpers/capture_screen_helpers.js.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.d.ts.map +1 -1
- package/dist/presentation/screen/use_smile_id_capture_screen.js +64 -18
- package/dist/presentation/screen/use_smile_id_capture_screen.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/react_native_mock.tsx +22 -0
- package/src/__tests__/snapshots/__snapshots__/screens_structural.test.tsx.snap +14 -8
- package/src/camera/__tests__/camera_permissions.test.ts +72 -0
- package/src/camera/__tests__/camera_system_focus.test.ts +173 -0
- package/src/camera/__tests__/use_smile_id_camera_preview.test.tsx +461 -0
- package/src/camera/__tests__/use_smile_id_frame_stream_hook.test.tsx +229 -0
- package/src/camera/camera_defaults.ts +3 -0
- package/src/core/exception/__tests__/builder_validation_exceptions.test.ts +14 -0
- package/src/core/exception/flow_exceptions.test.ts +10 -0
- package/src/core/exception/flow_exceptions.ts +3 -2
- package/src/core/exception/missing_job_type_exception.ts +2 -4
- package/src/data/api/__tests__/smile_id_api.test.ts +275 -1
- package/src/data/api/interceptors/__tests__/credential_header_redaction.test.ts +144 -0
- package/src/data/api/interceptors/smile_auth_interceptor.ts +1 -1
- package/src/data/api/smile_id_api.ts +36 -49
- package/src/data/dsl/__tests__/use_smile_id_network_builder.test.ts +157 -0
- package/src/data/factory/__tests__/signed_job_submission_headers.test.ts +1 -1
- package/src/data/model/__tests__/token_payload.test.ts +224 -0
- package/src/data/model/__tests__/user_details_payload.test.ts +100 -0
- package/src/data/model/job_request.ts +27 -12
- package/src/data/model/token_payload.ts +182 -0
- package/src/data/model/user_details_payload.ts +84 -0
- package/src/data/repository/__tests__/network_retries.test.ts +1 -1
- package/src/data/repository/__tests__/repository_dispatch.test.ts +366 -0
- package/src/data/repository/__tests__/use_smile_id_repository.test.ts +1 -1
- package/src/data/security/__tests__/signing_crypto.test.ts +203 -0
- package/src/data/util/__tests__/use_smile_id_token_decoder.test.ts +179 -0
- package/src/data/util/use_smile_id_token_decoder.ts +29 -8
- package/src/l10n/__tests__/use_smile_id_localizations.test.ts +122 -5
- package/src/l10n/__tests__/use_smile_id_localizations_provider.test.tsx +112 -0
- package/src/l10n/__tests__/use_smile_id_localizations_surface.test.ts +231 -0
- package/src/l10n/strings_en.ts +5 -1
- package/src/l10n/use_smile_id_localizations.ts +80 -3
- package/src/metadata/__tests__/device_orientation_sampling.test.ts +165 -0
- package/src/metadata/__tests__/geolocation.test.ts +150 -0
- package/src/metadata/__tests__/metadata_configuration_objects.test.ts +1 -1
- package/src/metadata/__tests__/metadata_device_context.test.ts +3 -3
- package/src/metadata/__tests__/metadata_golden_fixture.json +1 -1
- package/src/metadata/__tests__/metadata_payload_golden.test.ts +4 -4
- package/src/metadata/__tests__/optional_native_modules.test.ts +234 -0
- package/src/metadata/__tests__/use_smile_id_metadata.test.ts +1 -1
- package/src/metadata/__tests__/use_smile_id_metadata_factory.test.ts +615 -0
- package/src/metadata/metadata_configuration_mappers.ts +1 -1
- package/src/metadata/use_smile_id_metadata_factory.ts +1 -1
- package/src/presentation/components/__tests__/use_smile_id_content_card.test.tsx +112 -0
- package/src/presentation/components/__tests__/use_smile_id_face_oval_image.test.tsx +190 -0
- package/src/presentation/components/__tests__/use_smile_id_learn_more_content.test.tsx +159 -0
- package/src/presentation/components/__tests__/use_smile_id_processing_center_indicator.test.tsx +88 -0
- package/src/presentation/components/use_smile_id_button.tsx +7 -2
- package/src/presentation/flow/__tests__/flow_navigation_manager.test.ts +323 -1
- package/src/presentation/flow/__tests__/use_smile_id_flow.test.tsx +651 -0
- package/src/presentation/flow/dsl/__tests__/use_smile_id_builder_component.test.tsx +120 -0
- package/src/presentation/flow/dsl/builder/screens_builder.ts +4 -6
- package/src/presentation/flow/dsl/use_smile_id_flow_builder.ts +27 -1
- package/src/presentation/flow/flow_navigation_manager.ts +102 -92
- package/src/presentation/flow/graph/__tests__/screen_renderer.test.tsx +102 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_capture_screen.test.tsx +836 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_consent_screen.test.tsx +165 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_instructions_screen.test.tsx +163 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_preview_screen.test.tsx +224 -0
- package/src/presentation/flow/screen/__tests__/orchestrated_processing_screen.test.tsx +338 -0
- package/src/presentation/flow/screen/orchestrated_processing_screen.tsx +42 -5
- package/src/presentation/flow/use_smile_id_flow.tsx +52 -8
- package/src/presentation/flow/validation/__tests__/flow_validator.test.ts +158 -0
- package/src/presentation/flow/validation/__tests__/job_type_validator.test.ts +200 -0
- package/src/presentation/flow/validation/flow_validator.ts +30 -31
- package/src/presentation/flow/validation/job_type_validator.ts +73 -39
- package/src/presentation/flow/validation/user_details_validator.ts +53 -0
- package/src/presentation/screen/__tests__/feedback_copy_table.test.ts +145 -0
- package/src/presentation/screen/__tests__/use_smile_id_capture_screen.test.tsx +348 -0
- package/src/presentation/screen/__tests__/use_smile_id_document_back_instructions.test.tsx +3 -1
- package/src/presentation/screen/__tests__/use_smile_id_permission_screen.test.tsx +68 -0
- package/src/presentation/screen/helpers/capture_screen_helpers.ts +1 -0
- package/src/presentation/screen/use_smile_id_capture_screen.tsx +69 -18
- package/src/presentation/theme/__tests__/use_use_smile_id_fonts.test.tsx +166 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* User-detail and consent bindings delivered via the JWT auth token.
|
|
4
|
+
*
|
|
5
|
+
* The backend embeds this object under the top-level `payload` claim
|
|
6
|
+
* (JWT payload, base64url-decoded middle segment) when the partner
|
|
7
|
+
* binds user details and/or consent into the token on their backend.
|
|
8
|
+
* User-detail values in the claim are opaque vault references — only
|
|
9
|
+
* key PRESENCE is meaningful client-side. Consent subfields are
|
|
10
|
+
* plaintext. `country` / `id_type` / `id_number` / `callback_url` may
|
|
11
|
+
* also appear in the claim but are deliberately ignored.
|
|
12
|
+
*
|
|
13
|
+
* Every field is optional and every field tolerates a wrong wire type
|
|
14
|
+
* by degrading to absent — a malformed claim never rejects the token.
|
|
15
|
+
*
|
|
16
|
+
* Field names are a deliberate cross-SDK shared contract that
|
|
17
|
+
* intentionally omits the `UseSmileID` prefix. Internal — not
|
|
18
|
+
* re-exported from the package entrypoint (`src/index.ts`).
|
|
19
|
+
*/
|
|
20
|
+
const tokenConsentClaimSchema = z.object({
|
|
21
|
+
/** Only a literal `true` counts — `false` or a non-boolean is never trusted as a binding. */
|
|
22
|
+
granted: z.literal(true).optional().catch(undefined),
|
|
23
|
+
granted_at: z.string().optional().catch(undefined),
|
|
24
|
+
notice_language: z.string().optional().catch(undefined),
|
|
25
|
+
notice_privacy_policy_url: z.string().optional().catch(undefined),
|
|
26
|
+
});
|
|
27
|
+
/**
|
|
28
|
+
* Tolerant wire schema for the `payload` claim. Unknown keys are
|
|
29
|
+
* stripped; a wrong-typed field degrades to `undefined` (per-field
|
|
30
|
+
* `.catch`) instead of failing the whole claim.
|
|
31
|
+
*/
|
|
32
|
+
export const tokenPayloadSchema = z.object({
|
|
33
|
+
given_names: z.string().optional().catch(undefined),
|
|
34
|
+
last_name: z.string().optional().catch(undefined),
|
|
35
|
+
email: z.string().optional().catch(undefined),
|
|
36
|
+
phone_number: z.string().optional().catch(undefined),
|
|
37
|
+
/** Non-object / array consent values degrade to absent. */
|
|
38
|
+
consent: tokenConsentClaimSchema.optional().catch(undefined),
|
|
39
|
+
});
|
|
40
|
+
/**
|
|
41
|
+
* Parse a raw `payload` claim value into a `TokenPayload`, or
|
|
42
|
+
* `undefined` when the claim is absent or not a JSON object. Mirrors
|
|
43
|
+
* the `sdk_config` degradation semantics: never throws, tolerates
|
|
44
|
+
* unknown keys, and degrades wrong-typed fields to absent.
|
|
45
|
+
*/
|
|
46
|
+
export function parseTokenPayload(rawClaim) {
|
|
47
|
+
if (rawClaim === null ||
|
|
48
|
+
typeof rawClaim !== "object" ||
|
|
49
|
+
Array.isArray(rawClaim)) {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
const parseResult = tokenPayloadSchema.safeParse(rawClaim);
|
|
53
|
+
if (!parseResult.success) {
|
|
54
|
+
// Unreachable in practice (every field carries a `.catch`), but
|
|
55
|
+
// degrade gracefully to preserve the never-throws contract.
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
const claim = parseResult.data;
|
|
59
|
+
const consent = tokenConsentFromClaim(claim.consent);
|
|
60
|
+
return {
|
|
61
|
+
hasGivenNames: isPresent(claim.given_names),
|
|
62
|
+
hasLastName: isPresent(claim.last_name),
|
|
63
|
+
hasEmail: isPresent(claim.email),
|
|
64
|
+
hasPhoneNumber: isPresent(claim.phone_number),
|
|
65
|
+
...(consent !== undefined ? { consent } : {}),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Token consent is COMPLETE when `granted` is `true` and every other
|
|
70
|
+
* subfield is non-blank. A complete binding — granted with every
|
|
71
|
+
* notice subfield non-blank — satisfies the consent requirement
|
|
72
|
+
* without a local source. Token consent always wins, so a partial
|
|
73
|
+
* binding is a build-time validation error.
|
|
74
|
+
*/
|
|
75
|
+
export function isTokenConsentComplete(consent) {
|
|
76
|
+
return (consent !== undefined && tokenConsentMissingSubfields(consent).length === 0);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Wire-key names of the consent subfields the binding is missing. A
|
|
80
|
+
* token that carries a consent object must carry all four subfields —
|
|
81
|
+
* a non-empty list is a build-time validation error naming exactly
|
|
82
|
+
* what the token must add.
|
|
83
|
+
*/
|
|
84
|
+
export function tokenConsentMissingSubfields(consent) {
|
|
85
|
+
const missing = [];
|
|
86
|
+
if (consent.granted !== true)
|
|
87
|
+
missing.push("granted");
|
|
88
|
+
if (!isNonBlank(consent.grantedAt))
|
|
89
|
+
missing.push("granted_at");
|
|
90
|
+
if (!isNonBlank(consent.noticeLanguage))
|
|
91
|
+
missing.push("notice_language");
|
|
92
|
+
if (!isNonBlank(consent.noticePrivacyPolicyUrl)) {
|
|
93
|
+
missing.push("notice_privacy_policy_url");
|
|
94
|
+
}
|
|
95
|
+
return missing;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Whether the token binds every user-detail field the SDK would
|
|
99
|
+
* otherwise require from the builder: `given_names` AND `last_name`
|
|
100
|
+
* AND at least one of `email` / `phone_number`. Only then may
|
|
101
|
+
* `builder.userDetails` be omitted entirely.
|
|
102
|
+
*/
|
|
103
|
+
export function bindsRequiredUserDetails(payload) {
|
|
104
|
+
if (payload === undefined)
|
|
105
|
+
return false;
|
|
106
|
+
return (payload.hasGivenNames &&
|
|
107
|
+
payload.hasLastName &&
|
|
108
|
+
(payload.hasEmail || payload.hasPhoneNumber));
|
|
109
|
+
}
|
|
110
|
+
function tokenConsentFromClaim(claim) {
|
|
111
|
+
if (claim === undefined)
|
|
112
|
+
return undefined;
|
|
113
|
+
const consent = {
|
|
114
|
+
...(claim.granted === true ? { granted: true } : {}),
|
|
115
|
+
...(claim.granted_at !== undefined ? { grantedAt: claim.granted_at } : {}),
|
|
116
|
+
...(claim.notice_language !== undefined
|
|
117
|
+
? { noticeLanguage: claim.notice_language }
|
|
118
|
+
: {}),
|
|
119
|
+
...(claim.notice_privacy_policy_url !== undefined
|
|
120
|
+
? { noticePrivacyPolicyUrl: claim.notice_privacy_policy_url }
|
|
121
|
+
: {}),
|
|
122
|
+
};
|
|
123
|
+
// An empty consent object binds nothing — treat it as absent.
|
|
124
|
+
return Object.keys(consent).length > 0 ? consent : undefined;
|
|
125
|
+
}
|
|
126
|
+
function isPresent(value) {
|
|
127
|
+
return value !== undefined && value.length > 0;
|
|
128
|
+
}
|
|
129
|
+
function isNonBlank(value) {
|
|
130
|
+
return value !== undefined && value.trim().length > 0;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=token_payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token_payload.js","sourceRoot":"","sources":["../../../src/data/model/token_payload.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { UserDetails } from "../../core/models/params";
|
|
2
|
+
import type { TokenPayload } from "./token_payload";
|
|
3
|
+
/**
|
|
4
|
+
* Wire carrier for the `user_details` multipart part.
|
|
5
|
+
*
|
|
6
|
+
* Unlike `UserDetails` — the partner-facing input model whose names are
|
|
7
|
+
* required — every field here is optional so the part can carry only the
|
|
8
|
+
* fields the token does **not** already bind. Token-bound fields are dropped
|
|
9
|
+
* at assembly (`userDetailsPayloadFrom`): the server injects the bound values
|
|
10
|
+
* and they take precedence over anything the client sends. When nothing
|
|
11
|
+
* remains, assembly omits the part entirely (`isUserDetailsPayloadEmpty`).
|
|
12
|
+
*
|
|
13
|
+
* Type and helper names are a deliberate cross-SDK shared contract and
|
|
14
|
+
* intentionally omit the `UseSmileID` prefix (like `TokenPayload`).
|
|
15
|
+
*/
|
|
16
|
+
export type UserDetailsPayload = {
|
|
17
|
+
readonly givenNames?: string;
|
|
18
|
+
readonly lastName?: string;
|
|
19
|
+
readonly email?: string;
|
|
20
|
+
readonly phoneNumber?: string;
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Build the payload from builder-supplied details, dropping every field the
|
|
24
|
+
* token binds. With no token binding this reproduces `UserDetails`' wire
|
|
25
|
+
* encoding unchanged.
|
|
26
|
+
*/
|
|
27
|
+
export declare function userDetailsPayloadFrom(userDetails: UserDetails, droppingFieldsBoundBy: TokenPayload | undefined): UserDetailsPayload;
|
|
28
|
+
/**
|
|
29
|
+
* True when `userDetailsPayloadToWire` would produce an empty object — the
|
|
30
|
+
* caller omits the part instead of sending `{}`. Blank contacts count as
|
|
31
|
+
* empty, mirroring the wire encoding that trims and drops them.
|
|
32
|
+
*/
|
|
33
|
+
export declare function isUserDetailsPayloadEmpty(payload: UserDetailsPayload): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Wire shape: snake_case keys. Names are emitted as supplied when non-blank;
|
|
36
|
+
* contact fields are trimmed and omitted when blank.
|
|
37
|
+
*/
|
|
38
|
+
export declare function userDetailsPayloadToWire(payload: UserDetailsPayload): Record<string, string>;
|
|
39
|
+
//# sourceMappingURL=user_details_payload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_details_payload.d.ts","sourceRoot":"","sources":["../../../src/data/model/user_details_payload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,WAAW,EACxB,qBAAqB,EAAE,YAAY,GAAG,SAAS,GAC9C,kBAAkB,CAgBpB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAET;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,kBAAkB,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBxB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the payload from builder-supplied details, dropping every field the
|
|
3
|
+
* token binds. With no token binding this reproduces `UserDetails`' wire
|
|
4
|
+
* encoding unchanged.
|
|
5
|
+
*/
|
|
6
|
+
export function userDetailsPayloadFrom(userDetails, droppingFieldsBoundBy) {
|
|
7
|
+
return {
|
|
8
|
+
...(droppingFieldsBoundBy?.hasGivenNames
|
|
9
|
+
? {}
|
|
10
|
+
: { givenNames: userDetails.givenNames }),
|
|
11
|
+
...(droppingFieldsBoundBy?.hasLastName
|
|
12
|
+
? {}
|
|
13
|
+
: { lastName: userDetails.lastName }),
|
|
14
|
+
...(droppingFieldsBoundBy?.hasEmail || userDetails.email === undefined
|
|
15
|
+
? {}
|
|
16
|
+
: { email: userDetails.email }),
|
|
17
|
+
...(droppingFieldsBoundBy?.hasPhoneNumber ||
|
|
18
|
+
userDetails.phoneNumber === undefined
|
|
19
|
+
? {}
|
|
20
|
+
: { phoneNumber: userDetails.phoneNumber }),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* True when `userDetailsPayloadToWire` would produce an empty object — the
|
|
25
|
+
* caller omits the part instead of sending `{}`. Blank contacts count as
|
|
26
|
+
* empty, mirroring the wire encoding that trims and drops them.
|
|
27
|
+
*/
|
|
28
|
+
export function isUserDetailsPayloadEmpty(payload) {
|
|
29
|
+
return Object.keys(userDetailsPayloadToWire(payload)).length === 0;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Wire shape: snake_case keys. Names are emitted as supplied when non-blank;
|
|
33
|
+
* contact fields are trimmed and omitted when blank.
|
|
34
|
+
*/
|
|
35
|
+
export function userDetailsPayloadToWire(payload) {
|
|
36
|
+
const wire = {};
|
|
37
|
+
if (payload.givenNames !== undefined && payload.givenNames.trim() !== "") {
|
|
38
|
+
wire["given_names"] = payload.givenNames;
|
|
39
|
+
}
|
|
40
|
+
if (payload.lastName !== undefined && payload.lastName.trim() !== "") {
|
|
41
|
+
wire["last_name"] = payload.lastName;
|
|
42
|
+
}
|
|
43
|
+
const trimmedEmail = payload.email?.trim();
|
|
44
|
+
if (trimmedEmail) {
|
|
45
|
+
wire["email"] = trimmedEmail;
|
|
46
|
+
}
|
|
47
|
+
const trimmedPhone = payload.phoneNumber?.trim();
|
|
48
|
+
if (trimmedPhone) {
|
|
49
|
+
wire["phone_number"] = trimmedPhone;
|
|
50
|
+
}
|
|
51
|
+
return wire;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=user_details_payload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user_details_payload.js","sourceRoot":"","sources":["../../../src/data/model/user_details_payload.ts"],"names":[],"mappings":"AAuBA;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,WAAwB,EACxB,qBAA+C;IAE/C,OAAO;QACL,GAAG,CAAC,qBAAqB,EAAE,aAAa;YACtC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,UAAU,EAAE,CAAC;QAC3C,GAAG,CAAC,qBAAqB,EAAE,WAAW;YACpC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC;QACvC,GAAG,CAAC,qBAAqB,EAAE,QAAQ,IAAI,WAAW,CAAC,KAAK,KAAK,SAAS;YACpE,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,CAAC;QACjC,GAAG,CAAC,qBAAqB,EAAE,cAAc;YACzC,WAAW,CAAC,WAAW,KAAK,SAAS;YACnC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC;KAC9C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA2B;IAE3B,OAAO,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA2B;IAE3B,MAAM,IAAI,GAA2B,EAAE,CAAC;IACxC,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACzE,IAAI,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAC3C,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC;IACvC,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IAC3C,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,OAAO,CAAC,GAAG,YAAY,CAAC;IAC/B,CAAC;IACD,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACjD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type SdkConfig } from "../model/sdk_config";
|
|
2
|
+
import { type TokenPayload } from "../model/token_payload";
|
|
2
3
|
/**
|
|
3
4
|
* Result of decoding a Smile ID JWT auth token.
|
|
4
5
|
*
|
|
@@ -19,19 +20,30 @@ export type DecodedToken = {
|
|
|
19
20
|
* `undefined` when the claim is absent.
|
|
20
21
|
*/
|
|
21
22
|
readonly partnerId?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Token-bound user-detail presence flags and consent subfields from the
|
|
25
|
+
* top-level `payload` claim (a sibling of `sdk_config`). `undefined` when
|
|
26
|
+
* the claim is absent or not an object — legacy tokens keep today's strict
|
|
27
|
+
* validation. Same graceful degradation as `sdk_config`: a malformed claim
|
|
28
|
+
* never rejects the token.
|
|
29
|
+
*/
|
|
30
|
+
readonly tokenPayload?: TokenPayload;
|
|
22
31
|
};
|
|
23
32
|
/**
|
|
24
|
-
* Decode a Smile ID JWT auth token and extract the `sdk_config`
|
|
33
|
+
* Decode a Smile ID JWT auth token and extract the `sdk_config` and
|
|
34
|
+
* `payload` claims.
|
|
25
35
|
*
|
|
26
36
|
* The JWT signature is intentionally NOT verified — the server validates
|
|
27
|
-
* authenticity; the SDK only reads capture settings
|
|
37
|
+
* authenticity; the SDK only reads capture settings and token-bound
|
|
38
|
+
* user-detail/consent presence from the payload.
|
|
28
39
|
*
|
|
29
40
|
* Return semantics:
|
|
30
41
|
* - Structurally invalid token (not exactly three `.`-delimited
|
|
31
42
|
* segments, non-base64url payload, non-object JSON) → `undefined`.
|
|
32
43
|
* - Valid token with no `sdk_config` claim, a non-object claim, or a
|
|
33
44
|
* claim that fails Zod parsing → non-`undefined` `DecodedToken`
|
|
34
|
-
* with `sdkConfig` unset.
|
|
45
|
+
* with `sdkConfig` unset. The `payload` claim degrades the same
|
|
46
|
+
* way into `tokenPayload`.
|
|
35
47
|
* - Valid token with a parseable `sdk_config` → non-`undefined`
|
|
36
48
|
* `DecodedToken` with `sdkConfig` set.
|
|
37
49
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_token_decoder.d.ts","sourceRoot":"","sources":["../../../src/data/util/use_smile_id_token_decoder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_token_decoder.d.ts","sourceRoot":"","sources":["../../../src/data/util/use_smile_id_token_decoder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAmB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,KAAK,YAAY,EAAqB,MAAM,wBAAwB,CAAC;AAQ9E;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CA6C1E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM7E"}
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { ZodError } from "zod";
|
|
2
2
|
import { sdkConfigSchema } from "../model/sdk_config";
|
|
3
|
+
import { parseTokenPayload } from "../model/token_payload";
|
|
3
4
|
/**
|
|
4
|
-
* Decode a Smile ID JWT auth token and extract the `sdk_config`
|
|
5
|
+
* Decode a Smile ID JWT auth token and extract the `sdk_config` and
|
|
6
|
+
* `payload` claims.
|
|
5
7
|
*
|
|
6
8
|
* The JWT signature is intentionally NOT verified — the server validates
|
|
7
|
-
* authenticity; the SDK only reads capture settings
|
|
9
|
+
* authenticity; the SDK only reads capture settings and token-bound
|
|
10
|
+
* user-detail/consent presence from the payload.
|
|
8
11
|
*
|
|
9
12
|
* Return semantics:
|
|
10
13
|
* - Structurally invalid token (not exactly three `.`-delimited
|
|
11
14
|
* segments, non-base64url payload, non-object JSON) → `undefined`.
|
|
12
15
|
* - Valid token with no `sdk_config` claim, a non-object claim, or a
|
|
13
16
|
* claim that fails Zod parsing → non-`undefined` `DecodedToken`
|
|
14
|
-
* with `sdkConfig` unset.
|
|
17
|
+
* with `sdkConfig` unset. The `payload` claim degrades the same
|
|
18
|
+
* way into `tokenPayload`.
|
|
15
19
|
* - Valid token with a parseable `sdk_config` → non-`undefined`
|
|
16
20
|
* `DecodedToken` with `sdkConfig` set.
|
|
17
21
|
*
|
|
@@ -26,14 +30,18 @@ export function decodeSmileIDToken(token) {
|
|
|
26
30
|
// in only when present so `exactOptionalPropertyTypes` isn't violated by an explicit undefined.
|
|
27
31
|
const rawPartnerId = payloadObject["partner_id"];
|
|
28
32
|
const partnerIdField = typeof rawPartnerId === "string" ? { partnerId: rawPartnerId } : {};
|
|
33
|
+
// Token-bound user details & consent — a TOP-LEVEL `payload` claim, another
|
|
34
|
+
// sibling of `sdk_config`. Absent/malformed degrades to unset, never rejects.
|
|
35
|
+
const tokenPayload = parseTokenPayload(payloadObject["payload"]);
|
|
36
|
+
const tokenPayloadField = tokenPayload !== undefined ? { tokenPayload } : {};
|
|
29
37
|
const rawClaim = payloadObject["sdk_config"];
|
|
30
38
|
if (rawClaim === undefined || rawClaim === null) {
|
|
31
39
|
// No claim present — defaults apply throughout the flow.
|
|
32
|
-
return { ...partnerIdField };
|
|
40
|
+
return { ...partnerIdField, ...tokenPayloadField };
|
|
33
41
|
}
|
|
34
42
|
if (typeof rawClaim !== "object" || Array.isArray(rawClaim)) {
|
|
35
43
|
// Claim exists but is not an object — treat as absent.
|
|
36
|
-
return { ...partnerIdField };
|
|
44
|
+
return { ...partnerIdField, ...tokenPayloadField };
|
|
37
45
|
}
|
|
38
46
|
const parseResult = sdkConfigSchema.safeParse(rawClaim);
|
|
39
47
|
if (!parseResult.success) {
|
|
@@ -42,11 +50,15 @@ export function decodeSmileIDToken(token) {
|
|
|
42
50
|
// Unreachable in practice (safeParse always gives ZodError on
|
|
43
51
|
// failure), but degrade gracefully to preserve the never-throws
|
|
44
52
|
// contract rather than surfacing an unexpected error type.
|
|
45
|
-
return { ...partnerIdField };
|
|
53
|
+
return { ...partnerIdField, ...tokenPayloadField };
|
|
46
54
|
}
|
|
47
|
-
return { ...partnerIdField };
|
|
55
|
+
return { ...partnerIdField, ...tokenPayloadField };
|
|
48
56
|
}
|
|
49
|
-
return {
|
|
57
|
+
return {
|
|
58
|
+
sdkConfig: parseResult.data,
|
|
59
|
+
...partnerIdField,
|
|
60
|
+
...tokenPayloadField,
|
|
61
|
+
};
|
|
50
62
|
}
|
|
51
63
|
/**
|
|
52
64
|
* Extract the server-driven security policy bit-code from the token's **top-level** `policy` claim
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_token_decoder.js","sourceRoot":"","sources":["../../../src/data/util/use_smile_id_token_decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAE/B,OAAO,EAAkB,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"use_smile_id_token_decoder.js","sourceRoot":"","sources":["../../../src/data/util/use_smile_id_token_decoder.ts"],"names":[],"mappings":"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"}
|
|
@@ -63,6 +63,7 @@ export declare const enStrings: {
|
|
|
63
63
|
readonly si_capture_hold_steady: "Hold still…";
|
|
64
64
|
readonly si_capture_timeout: "Capture timed out. Try again.";
|
|
65
65
|
readonly si_capture_failed: "Capture failed. Please try again.";
|
|
66
|
+
readonly si_capture_camera_unavailable: "No camera frames received. Close other apps using the camera, then try again.";
|
|
66
67
|
readonly si_capture_adjusting: "Adjusting…";
|
|
67
68
|
readonly si_capture_bright_light: "Please move away from direct light";
|
|
68
69
|
readonly si_processing: "Processing…";
|
|
@@ -79,6 +80,8 @@ export declare const enStrings: {
|
|
|
79
80
|
readonly si_processing_success_message: "Thank you for your submission. We are currently verifying your details.";
|
|
80
81
|
readonly si_processing_failed_title: "Submission Failed";
|
|
81
82
|
readonly si_processing_failed_message: "Reasons for failure";
|
|
83
|
+
readonly si_processing_error_no_connection: "No internet connection.";
|
|
84
|
+
readonly si_processing_error_generic: "Something went wrong. Try again.";
|
|
82
85
|
readonly si_processing_continue: "Continue";
|
|
83
86
|
readonly si_processing_retry: "Retry";
|
|
84
87
|
readonly si_processing_exit: "Exit";
|
|
@@ -128,5 +131,5 @@ export declare const enStrings: {
|
|
|
128
131
|
};
|
|
129
132
|
export type SiKey = keyof typeof enStrings;
|
|
130
133
|
/** Total canonical key count — pinned in tests to catch a missed addition/deletion at PR time. */
|
|
131
|
-
export declare const CANONICAL_KEY_COUNT:
|
|
134
|
+
export declare const CANONICAL_KEY_COUNT: 122;
|
|
132
135
|
//# sourceMappingURL=strings_en.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings_en.d.ts","sourceRoot":"","sources":["../../src/l10n/strings_en.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"strings_en.d.ts","sourceRoot":"","sources":["../../src/l10n/strings_en.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmKZ,CAAC;AAEX,MAAM,MAAM,KAAK,GAAG,MAAM,OAAO,SAAS,CAAC;AAE3C,kGAAkG;AAClG,eAAO,MAAM,mBAAmB,EAAG,GAAY,CAAC"}
|
package/dist/l10n/strings_en.js
CHANGED
|
@@ -67,6 +67,7 @@ export const enStrings = {
|
|
|
67
67
|
si_capture_hold_steady: "Hold still…",
|
|
68
68
|
si_capture_timeout: "Capture timed out. Try again.",
|
|
69
69
|
si_capture_failed: "Capture failed. Please try again.",
|
|
70
|
+
si_capture_camera_unavailable: "No camera frames received. Close other apps using the camera, then try again.",
|
|
70
71
|
si_capture_adjusting: "Adjusting…",
|
|
71
72
|
si_capture_bright_light: "Please move away from direct light",
|
|
72
73
|
si_processing: "Processing…",
|
|
@@ -85,6 +86,8 @@ export const enStrings = {
|
|
|
85
86
|
si_processing_success_message: "Thank you for your submission. We are currently verifying your details.",
|
|
86
87
|
si_processing_failed_title: "Submission Failed",
|
|
87
88
|
si_processing_failed_message: "Reasons for failure",
|
|
89
|
+
si_processing_error_no_connection: "No internet connection.",
|
|
90
|
+
si_processing_error_generic: "Something went wrong. Try again.",
|
|
88
91
|
si_processing_continue: "Continue",
|
|
89
92
|
si_processing_retry: "Retry",
|
|
90
93
|
si_processing_exit: "Exit",
|
|
@@ -138,5 +141,5 @@ export const enStrings = {
|
|
|
138
141
|
si_ess_hold_still: "Hold still…",
|
|
139
142
|
};
|
|
140
143
|
/** Total canonical key count — pinned in tests to catch a missed addition/deletion at PR time. */
|
|
141
|
-
export const CANONICAL_KEY_COUNT =
|
|
144
|
+
export const CANONICAL_KEY_COUNT = 122;
|
|
142
145
|
//# sourceMappingURL=strings_en.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strings_en.js","sourceRoot":"","sources":["../../src/l10n/strings_en.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"strings_en.js","sourceRoot":"","sources":["../../src/l10n/strings_en.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,2EAA2E;IAC3E,kBAAkB,EAAE,gDAAgD;IACpE,0BAA0B,EAAE,4BAA4B;IACxD,YAAY,EAAE,YAAY;IAC1B,yBAAyB,EAAE,yBAAyB;IACpD,6BAA6B,EAC3B,wDAAwD;IAE1D,iBAAiB,EAAE,UAAU;IAE7B,2EAA2E;IAC3E,gBAAgB,EACd,kEAAkE;IACpE,mBAAmB,EACjB,iOAAiO;IACnO,4BAA4B,EAAE,UAAU;IACxC,qBAAqB,EAAE,8BAA8B;IACrD,kBAAkB,EAAE,qBAAqB;IACzC,mBAAmB,EAAE,sBAAsB;IAC3C,oBAAoB,EAAE,6CAA6C;IACnE,iBAAiB,EAAE,oBAAoB;IACvC,kBAAkB,EAChB,mJAAmJ;IACrJ,gBAAgB,EAAE,OAAO;IACzB,eAAe,EAAE,MAAM;IACvB,qBAAqB,EAAE,YAAY;IACnC,iCAAiC,EAC/B,8OAA8O;IAChP,0CAA0C,EAAE,UAAU;IACtD,2CAA2C,EAAE,SAAS;IACtD,iCAAiC,EAC/B,6EAA6E;IAC/E,+BAA+B,EAAE,WAAW;IAC5C,oCAAoC,EAAE,0BAA0B;IAChE,wCAAwC,EAAE,UAAU;IACpD,iCAAiC,EAAE,OAAO;IAC1C,0CAA0C,EAAE,eAAe;IAC3D,oCAAoC,EAAE,oBAAoB;IAE1D,2EAA2E;IAC3E,4BAA4B,EAAE,2BAA2B;IACzD,+BAA+B,EAAE,QAAQ;IACzC,kCAAkC,EAAE,oBAAoB;IACxD,8BAA8B,EAAE,MAAM;IACtC,qCAAqC,EAAE,aAAa;IACpD,wCAAwC,EAAE,gBAAgB;IAC1D,uCAAuC,EAAE,eAAe;IACxD,uBAAuB,EAAE,SAAS;IAClC,uBAAuB,EAAE,aAAa;IACtC,oBAAoB,EAAE,MAAM;IAE5B,2EAA2E;IAC3E,4BAA4B,EAC1B,iEAAiE;IACnE,8BAA8B,EAC5B,wEAAwE;IAC1E,oBAAoB,EAAE,sCAAsC;IAC5D,kBAAkB,EAAE,sCAAsC;IAC1D,sBAAsB,EAAE,wCAAwC;IAChE,oBAAoB,EAAE,8BAA8B;IACpD,qBAAqB,EAAE,+BAA+B;IACtD,sBAAsB,EAAE,yBAAyB;IACjD,qBAAqB,EAAE,wBAAwB;IAC/C,gBAAgB,EACd,iEAAiE;IACnE,yBAAyB,EAAE,iDAAiD;IAC5E,oBAAoB,EAAE,gCAAgC;IACtD,wBAAwB,EAAE,iCAAiC;IAC3D,gBAAgB,EAAE,eAAe;IACjC,uBAAuB,EAAE,eAAe;IACxC,uBAAuB,EACrB,iGAAiG;IACnG,sBAAsB,EAAE,aAAa;IACrC,kBAAkB,EAAE,+BAA+B;IACnD,iBAAiB,EAAE,mCAAmC;IACtD,6BAA6B,EAC3B,+EAA+E;IACjF,oBAAoB,EAAE,YAAY;IAClC,uBAAuB,EAAE,oCAAoC;IAC7D,aAAa,EAAE,aAAa;IAE5B,2EAA2E;IAC3E,gBAAgB,EAAE,uBAAuB;IACzC,mBAAmB,EAAE,oCAAoC;IACzD,iBAAiB,EAAE,QAAQ;IAC3B,kBAAkB,EAAE,SAAS;IAC7B,8BAA8B,EAC5B,qFAAqF;IACvF,+BAA+B,EAAE,QAAQ;IACzC,+BAA+B,EAAE,QAAQ;IAEzC,2EAA2E;IAC3E,wBAAwB,EAAE,aAAa;IACvC,iCAAiC,EAC/B,8DAA8D;IAChE,2BAA2B,EAAE,qBAAqB;IAClD,6BAA6B,EAC3B,yEAAyE;IAC3E,0BAA0B,EAAE,mBAAmB;IAC/C,4BAA4B,EAAE,qBAAqB;IACnD,iCAAiC,EAAE,yBAAyB;IAC5D,2BAA2B,EAAE,kCAAkC;IAC/D,sBAAsB,EAAE,UAAU;IAClC,mBAAmB,EAAE,OAAO;IAC5B,kBAAkB,EAAE,MAAM;IAE1B,2EAA2E;IAC3E,iCAAiC,EAAE,kBAAkB;IACrD,UAAU,EAAE,MAAM;IAClB,oBAAoB,EAAE,gBAAgB;IACtC,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,SAAS;IACxB,YAAY,EAAE,QAAQ;IACtB,YAAY,EAAE,QAAQ;IACtB,yBAAyB,EAAE,qBAAqB;IAChD,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,OAAO;IACpB,8BAA8B,EAAE,kBAAkB;IAClD,sBAAsB,EAAE,8BAA8B;IAEtD,2EAA2E;IAC3E,kBAAkB,EAAE,kCAAkC;IACtD,mBAAmB,EAAE,6BAA6B;IAClD,qBAAqB,EAAE,gCAAgC;IACvD,sBAAsB,EAAE,YAAY;IACpC,+BAA+B,EAAE,yBAAyB;IAC1D,iBAAiB,EAAE,sDAAsD;IACzE,qBAAqB,EAAE,qBAAqB;IAC5C,4BAA4B,EAAE,mBAAmB;IACjD,+BAA+B,EAAE,0BAA0B;IAC3D,2BAA2B,EAAE,qCAAqC;IAClE,mCAAmC,EACjC,gEAAgE;IAClE,gCAAgC,EAC9B,gDAAgD;IAClD,uBAAuB,EAAE,eAAe;IACxC,sBAAsB,EAAE,oBAAoB;IAC5C,0BAA0B,EAAE,kBAAkB;IAE9C,2EAA2E;IAC3E,sBAAsB,EAAE,qBAAqB;IAC7C,wBAAwB,EAAE,oBAAoB;IAC9C,qBAAqB,EAAE,MAAM;IAC7B,0BAA0B,EAAE,MAAM;IAClC,iCAAiC,EAAE,aAAa;IAChD,gCAAgC,EAAE,YAAY;IAC9C,oCAAoC,EAAE,gBAAgB;IAEtD,2EAA2E;IAC3E,yBAAyB,EAAE,uBAAuB;IAClD,4BAA4B,EAC1B,gDAAgD;IAClD,+BAA+B,EAAE,qBAAqB;IAEtD,2EAA2E;IAC3E,gBAAgB,EAAE,4BAA4B;IAC9C,iBAAiB,EAAE,6BAA6B;IAChD,cAAc,EAAE,iCAAiC;IACjD,qBAAqB,EAAE,oBAAoB;IAC3C,kCAAkC,EAChC,iFAAiF;IACnF,iBAAiB,EAAE,aAAa;CACxB,CAAC;AAIX,kGAAkG;AAClG,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAY,CAAC"}
|
|
@@ -19,6 +19,7 @@ export declare class UseSmileIDLocalizations {
|
|
|
19
19
|
*/
|
|
20
20
|
static fromOverrides(overrides: Record<string, unknown>): UseSmileIDLocalizations;
|
|
21
21
|
private static _registry;
|
|
22
|
+
private static _registryRevision;
|
|
22
23
|
/**
|
|
23
24
|
* Default device-locale resolver: reads the BCP 47 locale via
|
|
24
25
|
* `Intl.DateTimeFormat` (present in RN 0.76+, our peer-dep floor) and returns its
|
|
@@ -36,6 +37,8 @@ export declare class UseSmileIDLocalizations {
|
|
|
36
37
|
static clearRegistry(): void;
|
|
37
38
|
/** Whether any locale has been registered. */
|
|
38
39
|
static hasRegisteredLocales(): boolean;
|
|
40
|
+
/** Identity of the translations `forActiveLocale()` would resolve right now; it changes on a locale switch or a late `register(...)`. */
|
|
41
|
+
static get activeLocaleKey(): string;
|
|
39
42
|
/**
|
|
40
43
|
* Resolve the active locale via `localeResolver()` and return the matching
|
|
41
44
|
* `UseSmileIDLocalizations`. Lookup order: exact match (`'pt-BR'`), then
|
|
@@ -43,11 +46,15 @@ export declare class UseSmileIDLocalizations {
|
|
|
43
46
|
* at mount when the partner did not set `b.localizations`.
|
|
44
47
|
*/
|
|
45
48
|
static forActiveLocale(): UseSmileIDLocalizations;
|
|
49
|
+
/** One dev-build warning per instance, so a partly translated bundle can't flood the console. */
|
|
50
|
+
private _warnedMissingKey;
|
|
51
|
+
private _lookup;
|
|
46
52
|
/** @internal Static-fallback string lookup. */
|
|
47
53
|
private _s;
|
|
48
54
|
/**
|
|
49
55
|
* @internal Templated lookup; replaces every `{name}` with `params[name]`. A
|
|
50
56
|
* placeholder absent from the translation is left as-is (the `{name}` literal).
|
|
57
|
+
* Substituted values are bidi-isolated so they cannot reorder the sentence around them.
|
|
51
58
|
*/
|
|
52
59
|
private _t;
|
|
53
60
|
get siLabelContinue(): string;
|
|
@@ -105,6 +112,7 @@ export declare class UseSmileIDLocalizations {
|
|
|
105
112
|
get siCaptureStartButton(): string;
|
|
106
113
|
get siCaptureWarningText(): string;
|
|
107
114
|
get siCaptureHoldSteady(): string;
|
|
115
|
+
get siCaptureCameraUnavailable(): string;
|
|
108
116
|
get siCaptureTimeout(): string;
|
|
109
117
|
get siCaptureFailed(): string;
|
|
110
118
|
get siCaptureAdjusting(): string;
|
|
@@ -126,6 +134,8 @@ export declare class UseSmileIDLocalizations {
|
|
|
126
134
|
get siProcessingSuccessMessage(): string;
|
|
127
135
|
get siProcessingFailedTitle(): string;
|
|
128
136
|
get siProcessingFailedMessage(): string;
|
|
137
|
+
get siProcessingErrorNoConnection(): string;
|
|
138
|
+
get siProcessingErrorGeneric(): string;
|
|
129
139
|
get siProcessingContinue(): string;
|
|
130
140
|
get siProcessingRetry(): string;
|
|
131
141
|
get siProcessingExit(): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use_smile_id_localizations.d.ts","sourceRoot":"","sources":["../../src/l10n/use_smile_id_localizations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"use_smile_id_localizations.d.ts","sourceRoot":"","sources":["../../src/l10n/use_smile_id_localizations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,22 @@
|
|
|
1
1
|
import { enStrings } from "./strings_en";
|
|
2
|
+
// Unicode bidi isolates: without them a substituted value of the opposite direction reorders the whole sentence.
|
|
3
|
+
const FIRST_STRONG_ISOLATE = "";
|
|
4
|
+
const POP_DIRECTIONAL_ISOLATE = "";
|
|
5
|
+
// `__DEV__` is bundler-injected; outside Metro-like environments a bare reference throws rather than reading falsy.
|
|
6
|
+
function isDevBuild() {
|
|
7
|
+
return typeof __DEV__ !== "undefined" && __DEV__;
|
|
8
|
+
}
|
|
9
|
+
const warnedLocales = new Set();
|
|
10
|
+
function warnLocaleFallback(locale) {
|
|
11
|
+
if (!isDevBuild() || warnedLocales.has(locale))
|
|
12
|
+
return;
|
|
13
|
+
warnedLocales.add(locale);
|
|
14
|
+
// eslint-disable-next-line no-console
|
|
15
|
+
console.warn(`[UseSmileID] No translations registered for locale '${locale}' — the SDK ` +
|
|
16
|
+
"is rendering English. Call UseSmileIDLocalizations.register('" +
|
|
17
|
+
locale +
|
|
18
|
+
"', …) at startup, or set b.localizations explicitly.");
|
|
19
|
+
}
|
|
2
20
|
/**
|
|
3
21
|
* Localized string surface for the SDK. Canonical `si_*` keys default to English
|
|
4
22
|
* (`strings_en.ts`); partners override per-locale by passing an `overrides` map to
|
|
@@ -37,6 +55,7 @@ export class UseSmileIDLocalizations {
|
|
|
37
55
|
// The explicit per-locale register() is required because RN's bundler exposes no
|
|
38
56
|
// JS hook for discovering bundled translation assets.
|
|
39
57
|
static _registry = new Map();
|
|
58
|
+
static _registryRevision = 0;
|
|
40
59
|
/**
|
|
41
60
|
* Default device-locale resolver: reads the BCP 47 locale via
|
|
42
61
|
* `Intl.DateTimeFormat` (present in RN 0.76+, our peer-dep floor) and returns its
|
|
@@ -67,15 +86,21 @@ export class UseSmileIDLocalizations {
|
|
|
67
86
|
filtered[key] = value;
|
|
68
87
|
}
|
|
69
88
|
UseSmileIDLocalizations._registry.set(locale, filtered);
|
|
89
|
+
UseSmileIDLocalizations._registryRevision += 1;
|
|
70
90
|
}
|
|
71
91
|
/** Clear the locale registry. Useful for tests; partners rarely call. */
|
|
72
92
|
static clearRegistry() {
|
|
73
93
|
UseSmileIDLocalizations._registry.clear();
|
|
94
|
+
UseSmileIDLocalizations._registryRevision += 1;
|
|
74
95
|
}
|
|
75
96
|
/** Whether any locale has been registered. */
|
|
76
97
|
static hasRegisteredLocales() {
|
|
77
98
|
return UseSmileIDLocalizations._registry.size > 0;
|
|
78
99
|
}
|
|
100
|
+
/** Identity of the translations `forActiveLocale()` would resolve right now; it changes on a locale switch or a late `register(...)`. */
|
|
101
|
+
static get activeLocaleKey() {
|
|
102
|
+
return `${UseSmileIDLocalizations.localeResolver()}#${UseSmileIDLocalizations._registryRevision}`;
|
|
103
|
+
}
|
|
79
104
|
/**
|
|
80
105
|
* Resolve the active locale via `localeResolver()` and return the matching
|
|
81
106
|
* `UseSmileIDLocalizations`. Lookup order: exact match (`'pt-BR'`), then
|
|
@@ -94,20 +119,42 @@ export class UseSmileIDLocalizations {
|
|
|
94
119
|
if (fallback)
|
|
95
120
|
return new UseSmileIDLocalizations(fallback);
|
|
96
121
|
}
|
|
122
|
+
warnLocaleFallback(locale);
|
|
97
123
|
return new UseSmileIDLocalizations();
|
|
98
124
|
}
|
|
125
|
+
/** One dev-build warning per instance, so a partly translated bundle can't flood the console. */
|
|
126
|
+
_warnedMissingKey = false;
|
|
127
|
+
_lookup(key, fallback) {
|
|
128
|
+
const override = this._overrides[key];
|
|
129
|
+
if (override !== undefined)
|
|
130
|
+
return override;
|
|
131
|
+
if (isDevBuild() &&
|
|
132
|
+
!this._warnedMissingKey &&
|
|
133
|
+
Object.keys(this._overrides).length > 0) {
|
|
134
|
+
this._warnedMissingKey = true;
|
|
135
|
+
// eslint-disable-next-line no-console
|
|
136
|
+
console.warn(`[UseSmileID] '${key}' is missing from the supplied translations and is ` +
|
|
137
|
+
"rendering English; other keys may be too. Compare your overrides " +
|
|
138
|
+
"against the si_* key set in the SDK's English strings.");
|
|
139
|
+
}
|
|
140
|
+
return fallback;
|
|
141
|
+
}
|
|
99
142
|
/** @internal Static-fallback string lookup. */
|
|
100
143
|
_s(key, fallback) {
|
|
101
|
-
return this.
|
|
144
|
+
return this._lookup(key, fallback);
|
|
102
145
|
}
|
|
103
146
|
/**
|
|
104
147
|
* @internal Templated lookup; replaces every `{name}` with `params[name]`. A
|
|
105
148
|
* placeholder absent from the translation is left as-is (the `{name}` literal).
|
|
149
|
+
* Substituted values are bidi-isolated so they cannot reorder the sentence around them.
|
|
106
150
|
*/
|
|
107
151
|
_t(key, fallback, params) {
|
|
108
|
-
let value = this.
|
|
152
|
+
let value = this._lookup(key, fallback);
|
|
109
153
|
for (const [name, replacement] of Object.entries(params)) {
|
|
110
|
-
|
|
154
|
+
const isolated = replacement === ""
|
|
155
|
+
? replacement
|
|
156
|
+
: `${FIRST_STRONG_ISOLATE}${replacement}${POP_DIRECTIONAL_ISOLATE}`;
|
|
157
|
+
value = value.split(`{${name}}`).join(isolated);
|
|
111
158
|
}
|
|
112
159
|
return value;
|
|
113
160
|
}
|
|
@@ -284,6 +331,9 @@ export class UseSmileIDLocalizations {
|
|
|
284
331
|
get siCaptureHoldSteady() {
|
|
285
332
|
return this._s("si_capture_hold_steady", enStrings.si_capture_hold_steady);
|
|
286
333
|
}
|
|
334
|
+
get siCaptureCameraUnavailable() {
|
|
335
|
+
return this._s("si_capture_camera_unavailable", enStrings.si_capture_camera_unavailable);
|
|
336
|
+
}
|
|
287
337
|
get siCaptureTimeout() {
|
|
288
338
|
return this._s("si_capture_timeout", enStrings.si_capture_timeout);
|
|
289
339
|
}
|
|
@@ -349,6 +399,12 @@ export class UseSmileIDLocalizations {
|
|
|
349
399
|
get siProcessingFailedMessage() {
|
|
350
400
|
return this._s("si_processing_failed_message", enStrings.si_processing_failed_message);
|
|
351
401
|
}
|
|
402
|
+
get siProcessingErrorNoConnection() {
|
|
403
|
+
return this._s("si_processing_error_no_connection", enStrings.si_processing_error_no_connection);
|
|
404
|
+
}
|
|
405
|
+
get siProcessingErrorGeneric() {
|
|
406
|
+
return this._s("si_processing_error_generic", enStrings.si_processing_error_generic);
|
|
407
|
+
}
|
|
352
408
|
get siProcessingContinue() {
|
|
353
409
|
return this._s("si_processing_continue", enStrings.si_processing_continue);
|
|
354
410
|
}
|