@kwik-id/sdk-react-native 0.0.0-stage → 0.1.0-alpha.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.
- package/LICENSE +22 -0
- package/README.md +81 -2
- package/app.plugin.js +40 -0
- package/lib/commonjs/api/api-client.js +213 -0
- package/lib/commonjs/api/api-client.js.map +1 -0
- package/lib/commonjs/api/api-error.js +29 -0
- package/lib/commonjs/api/api-error.js.map +1 -0
- package/lib/commonjs/api/index.js +33 -0
- package/lib/commonjs/api/index.js.map +1 -0
- package/lib/commonjs/api/upload.js +74 -0
- package/lib/commonjs/api/upload.js.map +1 -0
- package/lib/commonjs/camera/camera-view.js +227 -0
- package/lib/commonjs/camera/camera-view.js.map +1 -0
- package/lib/commonjs/camera/index.js +20 -0
- package/lib/commonjs/camera/index.js.map +1 -0
- package/lib/commonjs/camera/photo-capture.js +50 -0
- package/lib/commonjs/camera/photo-capture.js.map +1 -0
- package/lib/commonjs/crypto/fingerprint.js +43 -0
- package/lib/commonjs/crypto/fingerprint.js.map +1 -0
- package/lib/commonjs/crypto/hmac.js +150 -0
- package/lib/commonjs/crypto/hmac.js.map +1 -0
- package/lib/commonjs/crypto/index.js +39 -0
- package/lib/commonjs/crypto/index.js.map +1 -0
- package/lib/commonjs/crypto/session-manager.js +173 -0
- package/lib/commonjs/crypto/session-manager.js.map +1 -0
- package/lib/commonjs/i18n/en.js +297 -0
- package/lib/commonjs/i18n/en.js.map +1 -0
- package/lib/commonjs/i18n/fr.js +294 -0
- package/lib/commonjs/i18n/fr.js.map +1 -0
- package/lib/commonjs/i18n/index.js +34 -0
- package/lib/commonjs/i18n/index.js.map +1 -0
- package/lib/commonjs/i18n/locale.js +20 -0
- package/lib/commonjs/i18n/locale.js.map +1 -0
- package/lib/commonjs/i18n/translator.js +37 -0
- package/lib/commonjs/i18n/translator.js.map +1 -0
- package/lib/commonjs/index.js +187 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/lib/device-detector.js +34 -0
- package/lib/commonjs/lib/device-detector.js.map +1 -0
- package/lib/commonjs/lib/event-emitter.js +85 -0
- package/lib/commonjs/lib/event-emitter.js.map +1 -0
- package/lib/commonjs/lib/index.js +63 -0
- package/lib/commonjs/lib/index.js.map +1 -0
- package/lib/commonjs/lib/kwik-id-rn-sdk.js +156 -0
- package/lib/commonjs/lib/kwik-id-rn-sdk.js.map +1 -0
- package/lib/commonjs/lib/verification-machine.js +276 -0
- package/lib/commonjs/lib/verification-machine.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/types/events.js +6 -0
- package/lib/commonjs/types/events.js.map +1 -0
- package/lib/commonjs/types/index.js +2 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/ui/components/KwikIDVerificationModal.js +407 -0
- package/lib/commonjs/ui/components/KwikIDVerificationModal.js.map +1 -0
- package/lib/commonjs/ui/components/screens.js +338 -0
- package/lib/commonjs/ui/components/screens.js.map +1 -0
- package/lib/commonjs/ui/context/kwik-id-provider.js +52 -0
- package/lib/commonjs/ui/context/kwik-id-provider.js.map +1 -0
- package/lib/commonjs/ui/hooks/use-kwik-verification.js +77 -0
- package/lib/commonjs/ui/hooks/use-kwik-verification.js.map +1 -0
- package/lib/commonjs/ui/index.js +33 -0
- package/lib/commonjs/ui/index.js.map +1 -0
- package/lib/module/api/api-client.js +208 -0
- package/lib/module/api/api-client.js.map +1 -0
- package/lib/module/api/api-error.js +24 -0
- package/lib/module/api/api-error.js.map +1 -0
- package/lib/module/api/index.js +6 -0
- package/lib/module/api/index.js.map +1 -0
- package/lib/module/api/upload.js +68 -0
- package/lib/module/api/upload.js.map +1 -0
- package/lib/module/camera/camera-view.js +222 -0
- package/lib/module/camera/camera-view.js.map +1 -0
- package/lib/module/camera/index.js +5 -0
- package/lib/module/camera/index.js.map +1 -0
- package/lib/module/camera/photo-capture.js +45 -0
- package/lib/module/camera/photo-capture.js.map +1 -0
- package/lib/module/crypto/fingerprint.js +37 -0
- package/lib/module/crypto/fingerprint.js.map +1 -0
- package/lib/module/crypto/hmac.js +143 -0
- package/lib/module/crypto/hmac.js.map +1 -0
- package/lib/module/crypto/index.js +6 -0
- package/lib/module/crypto/index.js.map +1 -0
- package/lib/module/crypto/session-manager.js +169 -0
- package/lib/module/crypto/session-manager.js.map +1 -0
- package/lib/module/i18n/en.js +293 -0
- package/lib/module/i18n/en.js.map +1 -0
- package/lib/module/i18n/fr.js +290 -0
- package/lib/module/i18n/fr.js.map +1 -0
- package/lib/module/i18n/index.js +11 -0
- package/lib/module/i18n/index.js.map +1 -0
- package/lib/module/i18n/locale.js +15 -0
- package/lib/module/i18n/locale.js.map +1 -0
- package/lib/module/i18n/translator.js +34 -0
- package/lib/module/i18n/translator.js.map +1 -0
- package/lib/module/index.js +30 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/lib/device-detector.js +26 -0
- package/lib/module/lib/device-detector.js.map +1 -0
- package/lib/module/lib/event-emitter.js +80 -0
- package/lib/module/lib/event-emitter.js.map +1 -0
- package/lib/module/lib/index.js +6 -0
- package/lib/module/lib/index.js.map +1 -0
- package/lib/module/lib/kwik-id-rn-sdk.js +150 -0
- package/lib/module/lib/kwik-id-rn-sdk.js.map +1 -0
- package/lib/module/lib/verification-machine.js +268 -0
- package/lib/module/lib/verification-machine.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/types/events.js +4 -0
- package/lib/module/types/events.js.map +1 -0
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/ui/components/KwikIDVerificationModal.js +402 -0
- package/lib/module/ui/components/KwikIDVerificationModal.js.map +1 -0
- package/lib/module/ui/components/screens.js +328 -0
- package/lib/module/ui/components/screens.js.map +1 -0
- package/lib/module/ui/context/kwik-id-provider.js +46 -0
- package/lib/module/ui/context/kwik-id-provider.js.map +1 -0
- package/lib/module/ui/hooks/use-kwik-verification.js +72 -0
- package/lib/module/ui/hooks/use-kwik-verification.js.map +1 -0
- package/lib/module/ui/index.js +6 -0
- package/lib/module/ui/index.js.map +1 -0
- package/lib/typescript/commonjs/api/api-client.d.ts +82 -0
- package/lib/typescript/commonjs/api/api-client.d.ts.map +1 -0
- package/lib/typescript/commonjs/api/api-error.d.ts +13 -0
- package/lib/typescript/commonjs/api/api-error.d.ts.map +1 -0
- package/lib/typescript/commonjs/api/index.d.ts +6 -0
- package/lib/typescript/commonjs/api/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/api/upload.d.ts +19 -0
- package/lib/typescript/commonjs/api/upload.d.ts.map +1 -0
- package/lib/typescript/commonjs/camera/camera-view.d.ts +25 -0
- package/lib/typescript/commonjs/camera/camera-view.d.ts.map +1 -0
- package/lib/typescript/commonjs/camera/index.d.ts +5 -0
- package/lib/typescript/commonjs/camera/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/camera/photo-capture.d.ts +9 -0
- package/lib/typescript/commonjs/camera/photo-capture.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/fingerprint.d.ts +3 -0
- package/lib/typescript/commonjs/crypto/fingerprint.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/hmac.d.ts +18 -0
- package/lib/typescript/commonjs/crypto/hmac.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/index.d.ts +4 -0
- package/lib/typescript/commonjs/crypto/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/crypto/session-manager.d.ts +27 -0
- package/lib/typescript/commonjs/crypto/session-manager.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/en.d.ts +291 -0
- package/lib/typescript/commonjs/i18n/en.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/fr.d.ts +6 -0
- package/lib/typescript/commonjs/i18n/fr.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/index.d.ts +10 -0
- package/lib/typescript/commonjs/i18n/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/locale.d.ts +4 -0
- package/lib/typescript/commonjs/i18n/locale.d.ts.map +1 -0
- package/lib/typescript/commonjs/i18n/translator.d.ts +15 -0
- package/lib/typescript/commonjs/i18n/translator.d.ts.map +1 -0
- package/lib/typescript/commonjs/index.d.ts +24 -0
- package/lib/typescript/commonjs/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/lib/device-detector.d.ts +5 -0
- package/lib/typescript/commonjs/lib/device-detector.d.ts.map +1 -0
- package/lib/typescript/commonjs/lib/event-emitter.d.ts +19 -0
- package/lib/typescript/commonjs/lib/event-emitter.d.ts.map +1 -0
- package/lib/typescript/commonjs/lib/index.d.ts +5 -0
- package/lib/typescript/commonjs/lib/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/lib/kwik-id-rn-sdk.d.ts +43 -0
- package/lib/typescript/commonjs/lib/kwik-id-rn-sdk.d.ts.map +1 -0
- package/lib/typescript/commonjs/lib/verification-machine.d.ts +78 -0
- package/lib/typescript/commonjs/lib/verification-machine.d.ts.map +1 -0
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/types/events.d.ts +94 -0
- package/lib/typescript/commonjs/types/events.d.ts.map +1 -0
- package/lib/typescript/commonjs/types/index.d.ts +242 -0
- package/lib/typescript/commonjs/types/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/KwikIDVerificationModal.d.ts +21 -0
- package/lib/typescript/commonjs/ui/components/KwikIDVerificationModal.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/components/screens.d.ts +46 -0
- package/lib/typescript/commonjs/ui/components/screens.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/context/kwik-id-provider.d.ts +19 -0
- package/lib/typescript/commonjs/ui/context/kwik-id-provider.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/hooks/use-kwik-verification.d.ts +29 -0
- package/lib/typescript/commonjs/ui/hooks/use-kwik-verification.d.ts.map +1 -0
- package/lib/typescript/commonjs/ui/index.d.ts +7 -0
- package/lib/typescript/commonjs/ui/index.d.ts.map +1 -0
- package/lib/typescript/module/api/api-client.d.ts +82 -0
- package/lib/typescript/module/api/api-client.d.ts.map +1 -0
- package/lib/typescript/module/api/api-error.d.ts +13 -0
- package/lib/typescript/module/api/api-error.d.ts.map +1 -0
- package/lib/typescript/module/api/index.d.ts +6 -0
- package/lib/typescript/module/api/index.d.ts.map +1 -0
- package/lib/typescript/module/api/upload.d.ts +19 -0
- package/lib/typescript/module/api/upload.d.ts.map +1 -0
- package/lib/typescript/module/camera/camera-view.d.ts +25 -0
- package/lib/typescript/module/camera/camera-view.d.ts.map +1 -0
- package/lib/typescript/module/camera/index.d.ts +5 -0
- package/lib/typescript/module/camera/index.d.ts.map +1 -0
- package/lib/typescript/module/camera/photo-capture.d.ts +9 -0
- package/lib/typescript/module/camera/photo-capture.d.ts.map +1 -0
- package/lib/typescript/module/crypto/fingerprint.d.ts +3 -0
- package/lib/typescript/module/crypto/fingerprint.d.ts.map +1 -0
- package/lib/typescript/module/crypto/hmac.d.ts +18 -0
- package/lib/typescript/module/crypto/hmac.d.ts.map +1 -0
- package/lib/typescript/module/crypto/index.d.ts +4 -0
- package/lib/typescript/module/crypto/index.d.ts.map +1 -0
- package/lib/typescript/module/crypto/session-manager.d.ts +27 -0
- package/lib/typescript/module/crypto/session-manager.d.ts.map +1 -0
- package/lib/typescript/module/i18n/en.d.ts +291 -0
- package/lib/typescript/module/i18n/en.d.ts.map +1 -0
- package/lib/typescript/module/i18n/fr.d.ts +6 -0
- package/lib/typescript/module/i18n/fr.d.ts.map +1 -0
- package/lib/typescript/module/i18n/index.d.ts +10 -0
- package/lib/typescript/module/i18n/index.d.ts.map +1 -0
- package/lib/typescript/module/i18n/locale.d.ts +4 -0
- package/lib/typescript/module/i18n/locale.d.ts.map +1 -0
- package/lib/typescript/module/i18n/translator.d.ts +15 -0
- package/lib/typescript/module/i18n/translator.d.ts.map +1 -0
- package/lib/typescript/module/index.d.ts +24 -0
- package/lib/typescript/module/index.d.ts.map +1 -0
- package/lib/typescript/module/lib/device-detector.d.ts +5 -0
- package/lib/typescript/module/lib/device-detector.d.ts.map +1 -0
- package/lib/typescript/module/lib/event-emitter.d.ts +19 -0
- package/lib/typescript/module/lib/event-emitter.d.ts.map +1 -0
- package/lib/typescript/module/lib/index.d.ts +5 -0
- package/lib/typescript/module/lib/index.d.ts.map +1 -0
- package/lib/typescript/module/lib/kwik-id-rn-sdk.d.ts +43 -0
- package/lib/typescript/module/lib/kwik-id-rn-sdk.d.ts.map +1 -0
- package/lib/typescript/module/lib/verification-machine.d.ts +78 -0
- package/lib/typescript/module/lib/verification-machine.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/types/events.d.ts +94 -0
- package/lib/typescript/module/types/events.d.ts.map +1 -0
- package/lib/typescript/module/types/index.d.ts +242 -0
- package/lib/typescript/module/types/index.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/KwikIDVerificationModal.d.ts +21 -0
- package/lib/typescript/module/ui/components/KwikIDVerificationModal.d.ts.map +1 -0
- package/lib/typescript/module/ui/components/screens.d.ts +46 -0
- package/lib/typescript/module/ui/components/screens.d.ts.map +1 -0
- package/lib/typescript/module/ui/context/kwik-id-provider.d.ts +19 -0
- package/lib/typescript/module/ui/context/kwik-id-provider.d.ts.map +1 -0
- package/lib/typescript/module/ui/hooks/use-kwik-verification.d.ts +29 -0
- package/lib/typescript/module/ui/hooks/use-kwik-verification.d.ts.map +1 -0
- package/lib/typescript/module/ui/index.d.ts +7 -0
- package/lib/typescript/module/ui/index.d.ts.map +1 -0
- package/package.json +121 -3
- package/src/api/api-client.ts +319 -0
- package/src/api/api-error.ts +28 -0
- package/src/api/index.ts +12 -0
- package/src/api/upload.ts +87 -0
- package/src/camera/camera-view.tsx +217 -0
- package/src/camera/index.ts +4 -0
- package/src/camera/photo-capture.ts +58 -0
- package/src/crypto/fingerprint.ts +46 -0
- package/src/crypto/hmac.ts +172 -0
- package/src/crypto/index.ts +3 -0
- package/src/crypto/session-manager.ts +200 -0
- package/src/i18n/en.ts +315 -0
- package/src/i18n/fr.ts +325 -0
- package/src/i18n/index.ts +9 -0
- package/src/i18n/locale.ts +15 -0
- package/src/i18n/translator.ts +37 -0
- package/src/index.ts +102 -0
- package/src/lib/device-detector.ts +32 -0
- package/src/lib/event-emitter.ts +90 -0
- package/src/lib/index.ts +15 -0
- package/src/lib/kwik-id-rn-sdk.ts +160 -0
- package/src/lib/verification-machine.ts +273 -0
- package/src/types/events.ts +75 -0
- package/src/types/index.ts +309 -0
- package/src/ui/components/KwikIDVerificationModal.tsx +450 -0
- package/src/ui/components/screens.tsx +283 -0
- package/src/ui/context/kwik-id-provider.tsx +72 -0
- package/src/ui/hooks/use-kwik-verification.ts +121 -0
- package/src/ui/index.ts +9 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Device fingerprint for RN (replaces the web SDK's canvas/WebGL fingerprint).
|
|
5
|
+
*
|
|
6
|
+
* Built from stable device + locale attributes available without extra permissions.
|
|
7
|
+
* Best-effort: the gateway does not currently require this header.
|
|
8
|
+
*/
|
|
9
|
+
import * as Device from "expo-device";
|
|
10
|
+
import * as Localization from "expo-localization";
|
|
11
|
+
import { Dimensions, Platform } from "react-native";
|
|
12
|
+
import { sha256Hex } from "./hmac.js";
|
|
13
|
+
export function generateFingerprint() {
|
|
14
|
+
const platform = `${Platform.OS} ${String(Platform.Version)}`;
|
|
15
|
+
const osVersion = Device.osVersion ?? String(Platform.Version);
|
|
16
|
+
const deviceModel = [Device.brand, Device.modelName].filter(Boolean).join(" ") || "unknown";
|
|
17
|
+
const {
|
|
18
|
+
width,
|
|
19
|
+
height,
|
|
20
|
+
scale
|
|
21
|
+
} = Dimensions.get("screen");
|
|
22
|
+
const screenResolution = `${Math.round(width)}x${Math.round(height)}@${scale}`;
|
|
23
|
+
const timezone = Localization.getCalendars()[0]?.timeZone ?? "unknown";
|
|
24
|
+
const language = Localization.getLocales()[0]?.languageTag ?? "unknown";
|
|
25
|
+
const components = [platform, osVersion, deviceModel, screenResolution, timezone, language, Device.osName ?? ""];
|
|
26
|
+
const fingerprintHash = sha256Hex(components.join("|"));
|
|
27
|
+
return {
|
|
28
|
+
platform,
|
|
29
|
+
osVersion,
|
|
30
|
+
deviceModel,
|
|
31
|
+
screenResolution,
|
|
32
|
+
timezone,
|
|
33
|
+
language,
|
|
34
|
+
fingerprintHash
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=fingerprint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Device","Localization","Dimensions","Platform","sha256Hex","generateFingerprint","platform","OS","String","Version","osVersion","deviceModel","brand","modelName","filter","Boolean","join","width","height","scale","get","screenResolution","Math","round","timezone","getCalendars","timeZone","language","getLocales","languageTag","components","osName","fingerprintHash"],"sourceRoot":"../../../src","sources":["crypto/fingerprint.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,KAAKA,MAAM,MAAM,aAAa;AACrC,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AACjD,SAASC,UAAU,EAAEC,QAAQ,QAAQ,cAAc;AAGnD,SAASC,SAAS,QAAQ,WAAQ;AAElC,OAAO,SAASC,mBAAmBA,CAAA,EAAsB;EACrD,MAAMC,QAAQ,GAAG,GAAGH,QAAQ,CAACI,EAAE,IAAIC,MAAM,CAACL,QAAQ,CAACM,OAAO,CAAC,EAAE;EAC7D,MAAMC,SAAS,GAAGV,MAAM,CAACU,SAAS,IAAIF,MAAM,CAACL,QAAQ,CAACM,OAAO,CAAC;EAC9D,MAAME,WAAW,GAAG,CAACX,MAAM,CAACY,KAAK,EAAEZ,MAAM,CAACa,SAAS,CAAC,CAACC,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;EAE3F,MAAM;IAAEC,KAAK;IAAEC,MAAM;IAAEC;EAAM,CAAC,GAAGjB,UAAU,CAACkB,GAAG,CAAC,QAAQ,CAAC;EACzD,MAAMC,gBAAgB,GAAG,GAAGC,IAAI,CAACC,KAAK,CAACN,KAAK,CAAC,IAAIK,IAAI,CAACC,KAAK,CAACL,MAAM,CAAC,IAAIC,KAAK,EAAE;EAE9E,MAAMK,QAAQ,GAAGvB,YAAY,CAACwB,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEC,QAAQ,IAAI,SAAS;EACtE,MAAMC,QAAQ,GAAG1B,YAAY,CAAC2B,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAEC,WAAW,IAAI,SAAS;EAEvE,MAAMC,UAAU,GAAG,CACfxB,QAAQ,EACRI,SAAS,EACTC,WAAW,EACXU,gBAAgB,EAChBG,QAAQ,EACRG,QAAQ,EACR3B,MAAM,CAAC+B,MAAM,IAAI,EAAE,CACtB;EAED,MAAMC,eAAe,GAAG5B,SAAS,CAAC0B,UAAU,CAACd,IAAI,CAAC,GAAG,CAAC,CAAC;EAEvD,OAAO;IACHV,QAAQ;IACRI,SAAS;IACTC,WAAW;IACXU,gBAAgB;IAChBG,QAAQ;IACRG,QAAQ;IACRK;EACJ,CAAC;AACL","ignoreList":[]}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Pure-JS SHA-256 and HMAC-SHA256.
|
|
5
|
+
*
|
|
6
|
+
* Self-contained (no native dependency) so it runs identically on device and in
|
|
7
|
+
* node tests, and never blocks the verification flow. The web SDK used
|
|
8
|
+
* `crypto.subtle`; expo-crypto exposes digests but not raw HMAC, so we implement
|
|
9
|
+
* the standard ipad/opad construction here. Signatures are best-effort — the
|
|
10
|
+
* KwikId gateway enforces only the Bearer token.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
|
|
14
|
+
function rotr(x, n) {
|
|
15
|
+
return x >>> n | x << 32 - n;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** SHA-256 over raw bytes → 32-byte digest. */
|
|
19
|
+
export function sha256Bytes(message) {
|
|
20
|
+
const h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
|
|
21
|
+
|
|
22
|
+
// Pre-processing (padding).
|
|
23
|
+
const bitLen = message.length * 8;
|
|
24
|
+
const withOne = message.length + 1;
|
|
25
|
+
const totalLen = withOne + (56 - withOne % 64 + 64) % 64 + 8;
|
|
26
|
+
const padded = new Uint8Array(totalLen);
|
|
27
|
+
padded.set(message);
|
|
28
|
+
padded[message.length] = 0x80;
|
|
29
|
+
// Append 64-bit big-endian length (top 32 bits assumed 0 for our payload sizes).
|
|
30
|
+
const dv = new DataView(padded.buffer);
|
|
31
|
+
dv.setUint32(totalLen - 4, bitLen >>> 0, false);
|
|
32
|
+
dv.setUint32(totalLen - 8, Math.floor(bitLen / 0x100000000), false);
|
|
33
|
+
const w = new Uint32Array(64);
|
|
34
|
+
for (let offset = 0; offset < totalLen; offset += 64) {
|
|
35
|
+
for (let i = 0; i < 16; i++) {
|
|
36
|
+
w[i] = dv.getUint32(offset + i * 4, false);
|
|
37
|
+
}
|
|
38
|
+
for (let i = 16; i < 64; i++) {
|
|
39
|
+
const s0 = rotr(w[i - 15], 7) ^ rotr(w[i - 15], 18) ^ w[i - 15] >>> 3;
|
|
40
|
+
const s1 = rotr(w[i - 2], 17) ^ rotr(w[i - 2], 19) ^ w[i - 2] >>> 10;
|
|
41
|
+
w[i] = w[i - 16] + s0 + w[i - 7] + s1 >>> 0;
|
|
42
|
+
}
|
|
43
|
+
let [a, b, c, d, e, f, g, hh] = h;
|
|
44
|
+
for (let i = 0; i < 64; i++) {
|
|
45
|
+
const S1 = rotr(e, 6) ^ rotr(e, 11) ^ rotr(e, 25);
|
|
46
|
+
const ch = e & f ^ ~e & g;
|
|
47
|
+
const temp1 = hh + S1 + ch + K[i] + w[i] >>> 0;
|
|
48
|
+
const S0 = rotr(a, 2) ^ rotr(a, 13) ^ rotr(a, 22);
|
|
49
|
+
const maj = a & b ^ a & c ^ b & c;
|
|
50
|
+
const temp2 = S0 + maj >>> 0;
|
|
51
|
+
hh = g;
|
|
52
|
+
g = f;
|
|
53
|
+
f = e;
|
|
54
|
+
e = d + temp1 >>> 0;
|
|
55
|
+
d = c;
|
|
56
|
+
c = b;
|
|
57
|
+
b = a;
|
|
58
|
+
a = temp1 + temp2 >>> 0;
|
|
59
|
+
}
|
|
60
|
+
h[0] = h[0] + a >>> 0;
|
|
61
|
+
h[1] = h[1] + b >>> 0;
|
|
62
|
+
h[2] = h[2] + c >>> 0;
|
|
63
|
+
h[3] = h[3] + d >>> 0;
|
|
64
|
+
h[4] = h[4] + e >>> 0;
|
|
65
|
+
h[5] = h[5] + f >>> 0;
|
|
66
|
+
h[6] = h[6] + g >>> 0;
|
|
67
|
+
h[7] = h[7] + hh >>> 0;
|
|
68
|
+
}
|
|
69
|
+
const out = new Uint8Array(32);
|
|
70
|
+
const outDv = new DataView(out.buffer);
|
|
71
|
+
for (let i = 0; i < 8; i++) outDv.setUint32(i * 4, h[i], false);
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
function utf8Bytes(str) {
|
|
75
|
+
// Minimal UTF-8 encoder (TextEncoder may be absent in some RN engines).
|
|
76
|
+
const bytes = [];
|
|
77
|
+
for (let i = 0; i < str.length; i++) {
|
|
78
|
+
let code = str.charCodeAt(i);
|
|
79
|
+
if (code < 0x80) {
|
|
80
|
+
bytes.push(code);
|
|
81
|
+
} else if (code < 0x800) {
|
|
82
|
+
bytes.push(0xc0 | code >> 6, 0x80 | code & 0x3f);
|
|
83
|
+
} else if (code >= 0xd800 && code <= 0xdbff) {
|
|
84
|
+
// Surrogate pair.
|
|
85
|
+
const hi = code;
|
|
86
|
+
const lo = str.charCodeAt(++i);
|
|
87
|
+
code = 0x10000 + (hi - 0xd800 << 10) + (lo - 0xdc00);
|
|
88
|
+
bytes.push(0xf0 | code >> 18, 0x80 | code >> 12 & 0x3f, 0x80 | code >> 6 & 0x3f, 0x80 | code & 0x3f);
|
|
89
|
+
} else {
|
|
90
|
+
bytes.push(0xe0 | code >> 12, 0x80 | code >> 6 & 0x3f, 0x80 | code & 0x3f);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return new Uint8Array(bytes);
|
|
94
|
+
}
|
|
95
|
+
function toHex(bytes) {
|
|
96
|
+
let hex = "";
|
|
97
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
98
|
+
hex += bytes[i].toString(16).padStart(2, "0");
|
|
99
|
+
}
|
|
100
|
+
return hex;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/** SHA-256 of a UTF-8 string → lowercase hex. */
|
|
104
|
+
export function sha256Hex(message) {
|
|
105
|
+
return toHex(sha256Bytes(utf8Bytes(message)));
|
|
106
|
+
}
|
|
107
|
+
const BLOCK_SIZE = 64;
|
|
108
|
+
|
|
109
|
+
/** HMAC-SHA256(message, key) → lowercase hex. */
|
|
110
|
+
export function hmacSha256Hex(message, key) {
|
|
111
|
+
let keyBytes = utf8Bytes(key);
|
|
112
|
+
if (keyBytes.length > BLOCK_SIZE) {
|
|
113
|
+
keyBytes = sha256Bytes(keyBytes);
|
|
114
|
+
}
|
|
115
|
+
const block = new Uint8Array(BLOCK_SIZE);
|
|
116
|
+
block.set(keyBytes);
|
|
117
|
+
const ipad = new Uint8Array(BLOCK_SIZE);
|
|
118
|
+
const opad = new Uint8Array(BLOCK_SIZE);
|
|
119
|
+
for (let i = 0; i < BLOCK_SIZE; i++) {
|
|
120
|
+
ipad[i] = block[i] ^ 0x36;
|
|
121
|
+
opad[i] = block[i] ^ 0x5c;
|
|
122
|
+
}
|
|
123
|
+
const msgBytes = utf8Bytes(message);
|
|
124
|
+
const inner = new Uint8Array(BLOCK_SIZE + msgBytes.length);
|
|
125
|
+
inner.set(ipad);
|
|
126
|
+
inner.set(msgBytes, BLOCK_SIZE);
|
|
127
|
+
const innerHash = sha256Bytes(inner);
|
|
128
|
+
const outer = new Uint8Array(BLOCK_SIZE + innerHash.length);
|
|
129
|
+
outer.set(opad);
|
|
130
|
+
outer.set(innerHash, BLOCK_SIZE);
|
|
131
|
+
return toHex(sha256Bytes(outer));
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Generate a hex nonce. Deterministic seed optional for tests. */
|
|
135
|
+
export function generateNonce(length = 32, seed) {
|
|
136
|
+
const rand = seed ?? Math.random;
|
|
137
|
+
let hex = "";
|
|
138
|
+
for (let i = 0; i < length; i++) {
|
|
139
|
+
hex += Math.floor(rand() * 256).toString(16).padStart(2, "0");
|
|
140
|
+
}
|
|
141
|
+
return hex;
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=hmac.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["K","rotr","x","n","sha256Bytes","message","h","bitLen","length","withOne","totalLen","padded","Uint8Array","set","dv","DataView","buffer","setUint32","Math","floor","w","Uint32Array","offset","i","getUint32","s0","s1","a","b","c","d","e","f","g","hh","S1","ch","temp1","S0","maj","temp2","out","outDv","utf8Bytes","str","bytes","code","charCodeAt","push","hi","lo","toHex","hex","toString","padStart","sha256Hex","BLOCK_SIZE","hmacSha256Hex","key","keyBytes","block","ipad","opad","msgBytes","inner","innerHash","outer","generateNonce","seed","rand","random"],"sourceRoot":"../../../src","sources":["crypto/hmac.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["SessionManager","generateFingerprint","hmacSha256Hex","sha256Hex","generateNonce"],"sourceRoot":"../../../src","sources":["crypto/index.ts"],"mappings":";;AAAA,SAASA,cAAc,QAAQ,sBAAmB;AAClD,SAASC,mBAAmB,QAAQ,kBAAe;AACnD,SAASC,aAAa,EAAEC,SAAS,EAAEC,aAAa,QAAQ,WAAQ","ignoreList":[]}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Session manager for RN (ported from @kwik-id/sdk-core, web crypto removed).
|
|
5
|
+
*
|
|
6
|
+
* - Parses the three token formats (JWT / test_sess_* / legacy cs_*).
|
|
7
|
+
* - Assembles request headers (Bearer always; X-* best-effort).
|
|
8
|
+
* - Signs the submit payload with the pure-JS HMAC.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { generateFingerprint } from "./fingerprint.js";
|
|
12
|
+
import { generateNonce, hmacSha256Hex } from "./hmac.js";
|
|
13
|
+
|
|
14
|
+
/** Decode a base64url segment to a UTF-8 string (no global atob dependency). */
|
|
15
|
+
function base64UrlDecode(input) {
|
|
16
|
+
const base64 = input.replace(/-/g, "+").replace(/_/g, "/");
|
|
17
|
+
const padded = base64 + "=".repeat((4 - base64.length % 4) % 4);
|
|
18
|
+
const chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
19
|
+
let str = "";
|
|
20
|
+
let buffer = 0;
|
|
21
|
+
let bits = 0;
|
|
22
|
+
for (let i = 0; i < padded.length; i++) {
|
|
23
|
+
const ch = padded[i];
|
|
24
|
+
if (ch === "=") break;
|
|
25
|
+
const idx = chars.indexOf(ch);
|
|
26
|
+
if (idx === -1) continue;
|
|
27
|
+
buffer = buffer << 6 | idx;
|
|
28
|
+
bits += 6;
|
|
29
|
+
if (bits >= 8) {
|
|
30
|
+
bits -= 8;
|
|
31
|
+
str += String.fromCharCode(buffer >> bits & 0xff);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// Reinterpret latin1 bytes as UTF-8.
|
|
35
|
+
try {
|
|
36
|
+
return decodeURIComponent(str.split("").map(c => "%" + c.charCodeAt(0).toString(16).padStart(2, "0")).join(""));
|
|
37
|
+
} catch {
|
|
38
|
+
return str;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export class SessionManager {
|
|
42
|
+
session = null;
|
|
43
|
+
fingerprint = null;
|
|
44
|
+
async initializeFromClientSecret(clientSecret) {
|
|
45
|
+
if (!clientSecret || typeof clientSecret !== "string") {
|
|
46
|
+
throw new Error("Client secret is required");
|
|
47
|
+
}
|
|
48
|
+
this.fingerprint = generateFingerprint();
|
|
49
|
+
let sessionId;
|
|
50
|
+
let jobId;
|
|
51
|
+
if (clientSecret.startsWith("test_sess_")) {
|
|
52
|
+
sessionId = "test-session";
|
|
53
|
+
} else if (clientSecret.startsWith("cs_")) {
|
|
54
|
+
const parts = clientSecret.split("_");
|
|
55
|
+
sessionId = parts[1] || this.generateSessionId(clientSecret);
|
|
56
|
+
} else if (clientSecret.includes(".")) {
|
|
57
|
+
try {
|
|
58
|
+
const payloadPart = clientSecret.split(".")[1];
|
|
59
|
+
const payload = JSON.parse(base64UrlDecode(payloadPart));
|
|
60
|
+
sessionId = payload.sessionId || payload.sub || this.generateSessionId(clientSecret);
|
|
61
|
+
jobId = payload.jobId;
|
|
62
|
+
} catch {
|
|
63
|
+
sessionId = this.generateSessionId(clientSecret);
|
|
64
|
+
}
|
|
65
|
+
} else {
|
|
66
|
+
sessionId = this.generateSessionId(clientSecret);
|
|
67
|
+
}
|
|
68
|
+
this.session = {
|
|
69
|
+
sessionId,
|
|
70
|
+
clientSecret,
|
|
71
|
+
jobId,
|
|
72
|
+
expiresAt: new Date(Date.now() + 15 * 60 * 1000),
|
|
73
|
+
deviceFingerprint: this.fingerprint.fingerprintHash,
|
|
74
|
+
nonce: generateNonce(),
|
|
75
|
+
sequenceNumber: 0
|
|
76
|
+
};
|
|
77
|
+
return this.session;
|
|
78
|
+
}
|
|
79
|
+
generateSessionId(token) {
|
|
80
|
+
let hash = 0;
|
|
81
|
+
for (let i = 0; i < token.length; i++) {
|
|
82
|
+
const char = token.charCodeAt(i);
|
|
83
|
+
hash = (hash << 5) - hash + char;
|
|
84
|
+
hash = hash & hash;
|
|
85
|
+
}
|
|
86
|
+
return `sess_${Math.abs(hash).toString(36)}`;
|
|
87
|
+
}
|
|
88
|
+
updateSession(sessionData) {
|
|
89
|
+
if (!this.session) {
|
|
90
|
+
throw new Error("Session not initialized");
|
|
91
|
+
}
|
|
92
|
+
this.session = {
|
|
93
|
+
...this.session,
|
|
94
|
+
...sessionData
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
isSessionValid() {
|
|
98
|
+
if (!this.session) return false;
|
|
99
|
+
return new Date() < this.session.expiresAt;
|
|
100
|
+
}
|
|
101
|
+
getSession() {
|
|
102
|
+
return this.session;
|
|
103
|
+
}
|
|
104
|
+
getFingerprint() {
|
|
105
|
+
return this.fingerprint;
|
|
106
|
+
}
|
|
107
|
+
getAuthHeader() {
|
|
108
|
+
if (!this.session) {
|
|
109
|
+
throw new Error("Session not initialized");
|
|
110
|
+
}
|
|
111
|
+
return `Bearer ${this.session.clientSecret}`;
|
|
112
|
+
}
|
|
113
|
+
incrementSequence() {
|
|
114
|
+
if (!this.session) {
|
|
115
|
+
throw new Error("Session not initialized");
|
|
116
|
+
}
|
|
117
|
+
this.session.sequenceNumber++;
|
|
118
|
+
return this.session.sequenceNumber;
|
|
119
|
+
}
|
|
120
|
+
refreshNonce() {
|
|
121
|
+
if (!this.session) {
|
|
122
|
+
throw new Error("Session not initialized");
|
|
123
|
+
}
|
|
124
|
+
this.session.nonce = generateNonce();
|
|
125
|
+
return this.session.nonce;
|
|
126
|
+
}
|
|
127
|
+
async createSecurePayload(data) {
|
|
128
|
+
if (!this.session || !this.fingerprint) {
|
|
129
|
+
throw new Error("Session not initialized");
|
|
130
|
+
}
|
|
131
|
+
const payload = {
|
|
132
|
+
sessionId: this.session.sessionId,
|
|
133
|
+
timestamp: Date.now(),
|
|
134
|
+
nonce: this.refreshNonce(),
|
|
135
|
+
sequenceNumber: this.incrementSequence(),
|
|
136
|
+
deviceFingerprint: this.fingerprint.fingerprintHash,
|
|
137
|
+
data,
|
|
138
|
+
signature: ""
|
|
139
|
+
};
|
|
140
|
+
payload.signature = this.signPayload(payload);
|
|
141
|
+
return payload;
|
|
142
|
+
}
|
|
143
|
+
signPayload(payload) {
|
|
144
|
+
const signatureInput = [payload.sessionId, payload.timestamp.toString(), payload.nonce, payload.sequenceNumber.toString(), payload.deviceFingerprint, JSON.stringify(payload.data)].join("|");
|
|
145
|
+
return hmacSha256Hex(signatureInput, this.session.clientSecret);
|
|
146
|
+
}
|
|
147
|
+
getRequestHeaders() {
|
|
148
|
+
if (!this.session || !this.fingerprint) {
|
|
149
|
+
throw new Error("Session not initialized");
|
|
150
|
+
}
|
|
151
|
+
return {
|
|
152
|
+
Authorization: this.getAuthHeader(),
|
|
153
|
+
"X-Session-Id": this.session.sessionId,
|
|
154
|
+
"X-Device-Fingerprint": this.fingerprint.fingerprintHash,
|
|
155
|
+
"X-Request-Nonce": this.session.nonce,
|
|
156
|
+
"X-Request-Sequence": this.session.sequenceNumber.toString()
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
clearSession() {
|
|
160
|
+
this.session = null;
|
|
161
|
+
this.fingerprint = null;
|
|
162
|
+
}
|
|
163
|
+
needsRefresh() {
|
|
164
|
+
if (!this.session) return false;
|
|
165
|
+
const twoMinutesFromNow = new Date(Date.now() + 2 * 60 * 1000);
|
|
166
|
+
return this.session.expiresAt < twoMinutesFromNow;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["generateFingerprint","generateNonce","hmacSha256Hex","base64UrlDecode","input","base64","replace","padded","repeat","length","chars","str","buffer","bits","i","ch","idx","indexOf","String","fromCharCode","decodeURIComponent","split","map","c","charCodeAt","toString","padStart","join","SessionManager","session","fingerprint","initializeFromClientSecret","clientSecret","Error","sessionId","jobId","startsWith","parts","generateSessionId","includes","payloadPart","payload","JSON","parse","sub","expiresAt","Date","now","deviceFingerprint","fingerprintHash","nonce","sequenceNumber","token","hash","char","Math","abs","updateSession","sessionData","isSessionValid","getSession","getFingerprint","getAuthHeader","incrementSequence","refreshNonce","createSecurePayload","data","timestamp","signature","signPayload","signatureInput","stringify","getRequestHeaders","Authorization","clearSession","needsRefresh","twoMinutesFromNow"],"sourceRoot":"../../../src","sources":["crypto/session-manager.ts"],"mappings":"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","ignoreList":[]}
|