@pelican-identity/react-native 1.2.4 → 1.2.5

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":"PelicanAuth.d.ts","sourceRoot":"","sources":["../../src/components/PelicanAuth.tsx"],"names":[],"mappings":"AAUA,OAAO,gCAAgC,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI9C,QAAA,MAAM,WAAW,GAAI,yGAUlB,kBAAkB,4CAqIpB,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"PelicanAuth.d.ts","sourceRoot":"","sources":["../../src/components/PelicanAuth.tsx"],"names":[],"mappings":"AAUA,OAAO,gCAAgC,CAAC;AAGxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAI9C,QAAA,MAAM,WAAW,GAAI,yGAUlB,kBAAkB,4CA0IpB,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -0,0 +1,112 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useState } from "react";
3
+ import { ActivityIndicator, AppState, Image, Linking, Text, TouchableOpacity, View, } from "react-native";
4
+ import "react-native-get-random-values";
5
+ import { getEncryptedData, getRelayUrl } from "../utilities";
6
+ import { CryptoService } from "@pelican-identity/auth-core";
7
+ const cryptoService = new CryptoService();
8
+ const PelicanAuth = ({ authType, projectId, publicKey, onSuccess, callBackUrl, onError, buttonComponent, onLoading, appId, }) => {
9
+ const sessionKey = React.useRef(null);
10
+ const sessionID = React.useRef(null);
11
+ const [loading, setLoading] = useState(false);
12
+ const initialize = async () => {
13
+ try {
14
+ setLoading(true);
15
+ onLoading?.(true);
16
+ const { relay_url, session_id } = await getRelayUrl({
17
+ businessKey: publicKey,
18
+ authType,
19
+ projectID: projectId,
20
+ appId,
21
+ });
22
+ if (!relay_url) {
23
+ setLoading(false);
24
+ onLoading?.(false);
25
+ onError?.(new Error("Failed to get relay URL"));
26
+ return;
27
+ }
28
+ sessionKey.current = cryptoService.generateSymmetricKey();
29
+ sessionID.current = session_id;
30
+ const buildUrl = `${relay_url}?sessionKey=${encodeURIComponent(sessionKey.current || "")}&sessionID=${encodeURIComponent(sessionID.current || "")}&authType=${encodeURIComponent(authType)}&projectId=${encodeURIComponent(projectId)}&publicKey=${encodeURIComponent(publicKey)}&callBackUrl=${encodeURIComponent(callBackUrl || "")}`;
31
+ Linking.openURL(buildUrl);
32
+ }
33
+ catch (error) {
34
+ setLoading(false);
35
+ onLoading?.(false);
36
+ onError?.(error);
37
+ }
38
+ };
39
+ const handleCallback = async () => {
40
+ try {
41
+ if (!sessionID.current) {
42
+ return;
43
+ }
44
+ if (!sessionKey.current) {
45
+ return;
46
+ }
47
+ const { cipher, nonce } = await getEncryptedData({
48
+ businessKey: publicKey,
49
+ authType,
50
+ projectID: projectId,
51
+ sessionID: sessionID.current,
52
+ appId,
53
+ });
54
+ const decryptedData = cryptoService.decryptSymmetric({
55
+ encrypted: { cipher, nonce },
56
+ keyString: sessionKey.current,
57
+ });
58
+ if (decryptedData) {
59
+ const result = JSON.parse(decryptedData);
60
+ onSuccess(result);
61
+ sessionKey.current = null;
62
+ sessionID.current = null;
63
+ setLoading(false);
64
+ onLoading?.(false);
65
+ }
66
+ else {
67
+ onError?.(new Error("Failed to get identity result"));
68
+ sessionKey.current = null;
69
+ sessionID.current = null;
70
+ setLoading(false);
71
+ onLoading?.(false);
72
+ }
73
+ }
74
+ catch (error) {
75
+ console.log(error);
76
+ onError?.(error);
77
+ sessionKey.current = null;
78
+ sessionID.current = null;
79
+ setLoading(false);
80
+ onLoading?.(false);
81
+ }
82
+ };
83
+ React.useEffect(() => {
84
+ const subscription = AppState.addEventListener("change", (nextAppState) => {
85
+ if (nextAppState === "active") {
86
+ handleCallback();
87
+ }
88
+ });
89
+ return () => {
90
+ subscription.remove();
91
+ };
92
+ }, []);
93
+ return (_jsx(View, { children: _jsx(TouchableOpacity, { onPress: initialize, disabled: loading, children: buttonComponent || (_jsxs(View, { style: {
94
+ flexDirection: "row",
95
+ alignItems: "center",
96
+ gap: 10,
97
+ paddingHorizontal: 10,
98
+ paddingVertical: 10,
99
+ borderRadius: 20,
100
+ borderWidth: 1,
101
+ }, children: [_jsx(Image, { source: {
102
+ uri: "https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png",
103
+ }, style: { width: 30, height: 30 } }), _jsx(Text, { style: { fontSize: 16, fontWeight: "600" }, children: authType === "login"
104
+ ? "Login with Pelican"
105
+ : authType === "signup"
106
+ ? "Signup with Pelican"
107
+ : authType === "id-verification"
108
+ ? "Verify identity with Pelican"
109
+ : "Authenticate with Pelican" }), loading && _jsx(ActivityIndicator, { color: "#000" })] })) }) }));
110
+ };
111
+ export default PelicanAuth;
112
+ //# sourceMappingURL=PelicanAuth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PelicanAuth.js","sourceRoot":"","sources":["../../src/components/PelicanAuth.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EACL,iBAAiB,EACjB,QAAQ,EACR,KAAK,EACL,OAAO,EACP,IAAI,EACJ,gBAAgB,EAChB,IAAI,GACL,MAAM,cAAc,CAAC;AACtB,OAAO,gCAAgC,CAAC;AAExC,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,EAAkB,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5E,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAC1C,MAAM,WAAW,GAAG,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,OAAO,EACP,eAAe,EACf,SAAS,EACT,KAAK,GACc,EAAE,EAAE;IACvB,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAgB,IAAI,CAAC,CAAC;IACpD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAE9C,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;YAClB,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,WAAW,CAAC;gBAClD,WAAW,EAAE,SAAS;gBACtB,QAAQ;gBACR,SAAS,EAAE,SAAS;gBACpB,KAAK;aACN,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;gBACnB,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,UAAU,CAAC,OAAO,GAAG,aAAa,CAAC,oBAAoB,EAAE,CAAC;YAC1D,SAAS,CAAC,OAAO,GAAG,UAAU,CAAC;YAE/B,MAAM,QAAQ,GAAG,GAAG,SAAS,eAAe,kBAAkB,CAC5D,UAAU,CAAC,OAAO,IAAI,EAAE,CACzB,cAAc,kBAAkB,CAC/B,SAAS,CAAC,OAAO,IAAI,EAAE,CACxB,aAAa,kBAAkB,CAC9B,QAAQ,CACT,cAAc,kBAAkB,CAC/B,SAAS,CACV,cAAc,kBAAkB,CAC/B,SAAS,CACV,gBAAgB,kBAAkB,CAAC,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,IAAI,EAAE;QAChC,IAAI,CAAC;YACH,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,gBAAgB,CAAC;gBAC/C,WAAW,EAAE,SAAS;gBACtB,QAAQ;gBACR,SAAS,EAAE,SAAS;gBACpB,SAAS,EAAE,SAAS,CAAC,OAAO;gBAC5B,KAAK;aACN,CAAC,CAAC;YAEH,MAAM,aAAa,GAAG,aAAa,CAAC,gBAAgB,CAAC;gBACnD,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;gBAC5B,SAAS,EAAE,UAAU,CAAC,OAAO;aAC9B,CAAC,CAAC;YAEH,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAmB,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;gBAEzD,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBACtD,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;gBAC1B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;gBACzB,UAAU,CAAC,KAAK,CAAC,CAAC;gBAClB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;YAC1B,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;YAC1B,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC;YACzB,UAAU,CAAC,KAAK,CAAC,CAAC;YAClB,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,YAAY,EAAE,EAAE;YACxE,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,cAAc,EAAE,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE;YACV,YAAY,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,KAAC,IAAI,cACH,KAAC,gBAAgB,IAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,YACrD,eAAe,IAAI,CAClB,MAAC,IAAI,IACH,KAAK,EAAE;oBACL,aAAa,EAAE,KAAK;oBACpB,UAAU,EAAE,QAAQ;oBACpB,GAAG,EAAE,EAAE;oBACP,iBAAiB,EAAE,EAAE;oBACrB,eAAe,EAAE,EAAE;oBACnB,YAAY,EAAE,EAAE;oBAChB,WAAW,EAAE,CAAC;iBACf,aAED,KAAC,KAAK,IACJ,MAAM,EAAE;4BACN,GAAG,EAAE,+FAA+F;yBACrG,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAChC,EACF,KAAC,IAAI,IAAC,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,YAC7C,QAAQ,KAAK,OAAO;4BACnB,CAAC,CAAC,oBAAoB;4BACtB,CAAC,CAAC,QAAQ,KAAK,QAAQ;gCACvB,CAAC,CAAC,qBAAqB;gCACvB,CAAC,CAAC,QAAQ,KAAK,iBAAiB;oCAChC,CAAC,CAAC,8BAA8B;oCAChC,CAAC,CAAC,2BAA2B,GAC1B,EACN,OAAO,IAAI,KAAC,iBAAiB,IAAC,KAAK,EAAE,MAAM,GAAI,IAC3C,CACR,GACgB,GACd,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
package/dist/index.js CHANGED
@@ -17,6 +17,15 @@ var getRelayUrl = async ({
17
17
  projectID,
18
18
  appId
19
19
  }) => {
20
+ if (!businessKey) {
21
+ throw new Error("Business Key is required");
22
+ }
23
+ if (!authType) {
24
+ throw new Error("Auth Type is required");
25
+ }
26
+ if (!projectID) {
27
+ throw new Error("Project ID is required");
28
+ }
20
29
  if (!appId) {
21
30
  throw new Error("App ID is required");
22
31
  }
@@ -84,7 +93,10 @@ var PelicanAuth = ({
84
93
  appId
85
94
  });
86
95
  if (!relay_url) {
87
- throw new Error("Failed to get relay URL");
96
+ setLoading(false);
97
+ onLoading?.(false);
98
+ onError?.(new Error("Failed to get relay URL"));
99
+ return;
88
100
  }
89
101
  sessionKey.current = cryptoService.generateSymmetricKey();
90
102
  sessionID.current = session_id;
@@ -101,7 +113,9 @@ var PelicanAuth = ({
101
113
  )}&callBackUrl=${encodeURIComponent(callBackUrl || "")}`;
102
114
  reactNative.Linking.openURL(buildUrl);
103
115
  } catch (error) {
104
- console.log(error);
116
+ setLoading(false);
117
+ onLoading?.(false);
118
+ onError?.(error);
105
119
  }
106
120
  };
107
121
  const handleCallback = async () => {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utilities.ts","../src/components/PelicanAuth.tsx"],"names":["BASEURL","CryptoService","React","useState","Linking","AppState","jsx","View","TouchableOpacity","jsxs","Image","Text","ActivityIndicator"],"mappings":"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","file":"index.js","sourcesContent":["import \"react-native-get-random-values\";\n\nimport { BASEURL, type AuthType } from \"@pelican-identity/auth-core\";\n\nexport const getRelayUrl = async ({\n businessKey,\n authType,\n projectID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/relay?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to initiate authentication: ${error}`);\n }\n\n return response.json() as Promise<{ relay_url: string; session_id: string }>;\n};\n\nexport const getEncryptedData = async ({\n businessKey,\n authType,\n projectID,\n sessionID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n sessionID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/get-rn-sdk-encrypted-data?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}&session_id=${sessionID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get encrypted data: ${error}`);\n }\n\n return response.json() as Promise<{ cipher: string; nonce: string }>;\n};\n","import React, { useState } from \"react\";\nimport {\n ActivityIndicator,\n AppState,\n Image,\n Linking,\n Text,\n TouchableOpacity,\n View,\n} from \"react-native\";\nimport \"react-native-get-random-values\";\n\nimport { getEncryptedData, getRelayUrl } from \"../utilities\";\nimport { PelicanRNAuthProps } from \"../types\";\nimport { IdentityResult, CryptoService } from \"@pelican-identity/auth-core\";\n\nconst cryptoService = new CryptoService();\nconst PelicanAuth = ({\n authType,\n projectId,\n publicKey,\n onSuccess,\n callBackUrl,\n onError,\n buttonComponent,\n onLoading,\n appId,\n}: PelicanRNAuthProps) => {\n const sessionKey = React.useRef<string | null>(null);\n const sessionID = React.useRef<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const initialize = async () => {\n try {\n setLoading(true);\n onLoading?.(true);\n const { relay_url, session_id } = await getRelayUrl({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n appId,\n });\n\n if (!relay_url) {\n throw new Error(\"Failed to get relay URL\");\n }\n\n sessionKey.current = cryptoService.generateSymmetricKey();\n sessionID.current = session_id;\n\n const buildUrl = `${relay_url}?sessionKey=${encodeURIComponent(\n sessionKey.current || \"\"\n )}&sessionID=${encodeURIComponent(\n sessionID.current || \"\"\n )}&authType=${encodeURIComponent(\n authType\n )}&projectId=${encodeURIComponent(\n projectId\n )}&publicKey=${encodeURIComponent(\n publicKey\n )}&callBackUrl=${encodeURIComponent(callBackUrl || \"\")}`;\n Linking.openURL(buildUrl);\n } catch (error) {\n console.log(error);\n }\n };\n\n const handleCallback = async () => {\n try {\n if (!sessionID.current) {\n return;\n }\n if (!sessionKey.current) {\n return;\n }\n const { cipher, nonce } = await getEncryptedData({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n sessionID: sessionID.current,\n appId,\n });\n\n const decryptedData = cryptoService.decryptSymmetric({\n encrypted: { cipher, nonce },\n keyString: sessionKey.current,\n });\n\n if (decryptedData) {\n const result: IdentityResult = JSON.parse(decryptedData);\n\n onSuccess(result);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n } else {\n onError?.(new Error(\"Failed to get identity result\"));\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n } catch (error) {\n console.log(error);\n onError?.(error as Error);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n };\n\n React.useEffect(() => {\n const subscription = AppState.addEventListener(\"change\", (nextAppState) => {\n if (nextAppState === \"active\") {\n handleCallback();\n }\n });\n return () => {\n subscription.remove();\n };\n }, []);\n\n return (\n <View>\n <TouchableOpacity onPress={initialize} disabled={loading}>\n {buttonComponent || (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 10,\n paddingVertical: 10,\n borderRadius: 20,\n borderWidth: 1,\n }}\n >\n <Image\n source={{\n uri: \"https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png\",\n }}\n style={{ width: 30, height: 30 }}\n />\n <Text style={{ fontSize: 16, fontWeight: \"600\" }}>\n {authType === \"login\"\n ? \"Login with Pelican\"\n : authType === \"signup\"\n ? \"Signup with Pelican\"\n : authType === \"id-verification\"\n ? \"Verify identity with Pelican\"\n : \"Authenticate with Pelican\"}\n </Text>\n {loading && <ActivityIndicator color={\"#000\"} />}\n </View>\n )}\n </TouchableOpacity>\n </View>\n );\n};\n\nexport default PelicanAuth;\n"]}
1
+ {"version":3,"sources":["../src/utilities.ts","../src/components/PelicanAuth.tsx"],"names":["BASEURL","CryptoService","React","useState","Linking","AppState","jsx","View","TouchableOpacity","jsxs","Image","Text","ActivityIndicator"],"mappings":"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","file":"index.js","sourcesContent":["import \"react-native-get-random-values\";\n\nimport { BASEURL, type AuthType } from \"@pelican-identity/auth-core\";\n\nexport const getRelayUrl = async ({\n businessKey,\n authType,\n projectID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n appId: string;\n}) => {\n if (!businessKey) {\n throw new Error(\"Business Key is required\");\n }\n if (!authType) {\n throw new Error(\"Auth Type is required\");\n }\n if (!projectID) {\n throw new Error(\"Project ID is required\");\n }\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/relay?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to initiate authentication: ${error}`);\n }\n\n return response.json() as Promise<{ relay_url: string; session_id: string }>;\n};\n\nexport const getEncryptedData = async ({\n businessKey,\n authType,\n projectID,\n sessionID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n sessionID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/get-rn-sdk-encrypted-data?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}&session_id=${sessionID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get encrypted data: ${error}`);\n }\n\n return response.json() as Promise<{ cipher: string; nonce: string }>;\n};\n","import React, { useState } from \"react\";\nimport {\n ActivityIndicator,\n AppState,\n Image,\n Linking,\n Text,\n TouchableOpacity,\n View,\n} from \"react-native\";\nimport \"react-native-get-random-values\";\n\nimport { getEncryptedData, getRelayUrl } from \"../utilities\";\nimport { PelicanRNAuthProps } from \"../types\";\nimport { IdentityResult, CryptoService } from \"@pelican-identity/auth-core\";\n\nconst cryptoService = new CryptoService();\nconst PelicanAuth = ({\n authType,\n projectId,\n publicKey,\n onSuccess,\n callBackUrl,\n onError,\n buttonComponent,\n onLoading,\n appId,\n}: PelicanRNAuthProps) => {\n const sessionKey = React.useRef<string | null>(null);\n const sessionID = React.useRef<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const initialize = async () => {\n try {\n setLoading(true);\n onLoading?.(true);\n const { relay_url, session_id } = await getRelayUrl({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n appId,\n });\n\n if (!relay_url) {\n setLoading(false);\n onLoading?.(false);\n onError?.(new Error(\"Failed to get relay URL\"));\n return;\n }\n\n sessionKey.current = cryptoService.generateSymmetricKey();\n sessionID.current = session_id;\n\n const buildUrl = `${relay_url}?sessionKey=${encodeURIComponent(\n sessionKey.current || \"\"\n )}&sessionID=${encodeURIComponent(\n sessionID.current || \"\"\n )}&authType=${encodeURIComponent(\n authType\n )}&projectId=${encodeURIComponent(\n projectId\n )}&publicKey=${encodeURIComponent(\n publicKey\n )}&callBackUrl=${encodeURIComponent(callBackUrl || \"\")}`;\n Linking.openURL(buildUrl);\n } catch (error) {\n setLoading(false);\n onLoading?.(false);\n onError?.(error as Error);\n }\n };\n\n const handleCallback = async () => {\n try {\n if (!sessionID.current) {\n return;\n }\n if (!sessionKey.current) {\n return;\n }\n const { cipher, nonce } = await getEncryptedData({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n sessionID: sessionID.current,\n appId,\n });\n\n const decryptedData = cryptoService.decryptSymmetric({\n encrypted: { cipher, nonce },\n keyString: sessionKey.current,\n });\n\n if (decryptedData) {\n const result: IdentityResult = JSON.parse(decryptedData);\n\n onSuccess(result);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n } else {\n onError?.(new Error(\"Failed to get identity result\"));\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n } catch (error) {\n console.log(error);\n onError?.(error as Error);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n };\n\n React.useEffect(() => {\n const subscription = AppState.addEventListener(\"change\", (nextAppState) => {\n if (nextAppState === \"active\") {\n handleCallback();\n }\n });\n return () => {\n subscription.remove();\n };\n }, []);\n\n return (\n <View>\n <TouchableOpacity onPress={initialize} disabled={loading}>\n {buttonComponent || (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 10,\n paddingVertical: 10,\n borderRadius: 20,\n borderWidth: 1,\n }}\n >\n <Image\n source={{\n uri: \"https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png\",\n }}\n style={{ width: 30, height: 30 }}\n />\n <Text style={{ fontSize: 16, fontWeight: \"600\" }}>\n {authType === \"login\"\n ? \"Login with Pelican\"\n : authType === \"signup\"\n ? \"Signup with Pelican\"\n : authType === \"id-verification\"\n ? \"Verify identity with Pelican\"\n : \"Authenticate with Pelican\"}\n </Text>\n {loading && <ActivityIndicator color={\"#000\"} />}\n </View>\n )}\n </TouchableOpacity>\n </View>\n );\n};\n\nexport default PelicanAuth;\n"]}
package/dist/index.mjs CHANGED
@@ -11,6 +11,15 @@ var getRelayUrl = async ({
11
11
  projectID,
12
12
  appId
13
13
  }) => {
14
+ if (!businessKey) {
15
+ throw new Error("Business Key is required");
16
+ }
17
+ if (!authType) {
18
+ throw new Error("Auth Type is required");
19
+ }
20
+ if (!projectID) {
21
+ throw new Error("Project ID is required");
22
+ }
14
23
  if (!appId) {
15
24
  throw new Error("App ID is required");
16
25
  }
@@ -78,7 +87,10 @@ var PelicanAuth = ({
78
87
  appId
79
88
  });
80
89
  if (!relay_url) {
81
- throw new Error("Failed to get relay URL");
90
+ setLoading(false);
91
+ onLoading?.(false);
92
+ onError?.(new Error("Failed to get relay URL"));
93
+ return;
82
94
  }
83
95
  sessionKey.current = cryptoService.generateSymmetricKey();
84
96
  sessionID.current = session_id;
@@ -95,7 +107,9 @@ var PelicanAuth = ({
95
107
  )}&callBackUrl=${encodeURIComponent(callBackUrl || "")}`;
96
108
  Linking.openURL(buildUrl);
97
109
  } catch (error) {
98
- console.log(error);
110
+ setLoading(false);
111
+ onLoading?.(false);
112
+ onError?.(error);
99
113
  }
100
114
  };
101
115
  const handleCallback = async () => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utilities.ts","../src/components/PelicanAuth.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import \"react-native-get-random-values\";\n\nimport { BASEURL, type AuthType } from \"@pelican-identity/auth-core\";\n\nexport const getRelayUrl = async ({\n businessKey,\n authType,\n projectID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/relay?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to initiate authentication: ${error}`);\n }\n\n return response.json() as Promise<{ relay_url: string; session_id: string }>;\n};\n\nexport const getEncryptedData = async ({\n businessKey,\n authType,\n projectID,\n sessionID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n sessionID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/get-rn-sdk-encrypted-data?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}&session_id=${sessionID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get encrypted data: ${error}`);\n }\n\n return response.json() as Promise<{ cipher: string; nonce: string }>;\n};\n","import React, { useState } from \"react\";\nimport {\n ActivityIndicator,\n AppState,\n Image,\n Linking,\n Text,\n TouchableOpacity,\n View,\n} from \"react-native\";\nimport \"react-native-get-random-values\";\n\nimport { getEncryptedData, getRelayUrl } from \"../utilities\";\nimport { PelicanRNAuthProps } from \"../types\";\nimport { IdentityResult, CryptoService } from \"@pelican-identity/auth-core\";\n\nconst cryptoService = new CryptoService();\nconst PelicanAuth = ({\n authType,\n projectId,\n publicKey,\n onSuccess,\n callBackUrl,\n onError,\n buttonComponent,\n onLoading,\n appId,\n}: PelicanRNAuthProps) => {\n const sessionKey = React.useRef<string | null>(null);\n const sessionID = React.useRef<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const initialize = async () => {\n try {\n setLoading(true);\n onLoading?.(true);\n const { relay_url, session_id } = await getRelayUrl({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n appId,\n });\n\n if (!relay_url) {\n throw new Error(\"Failed to get relay URL\");\n }\n\n sessionKey.current = cryptoService.generateSymmetricKey();\n sessionID.current = session_id;\n\n const buildUrl = `${relay_url}?sessionKey=${encodeURIComponent(\n sessionKey.current || \"\"\n )}&sessionID=${encodeURIComponent(\n sessionID.current || \"\"\n )}&authType=${encodeURIComponent(\n authType\n )}&projectId=${encodeURIComponent(\n projectId\n )}&publicKey=${encodeURIComponent(\n publicKey\n )}&callBackUrl=${encodeURIComponent(callBackUrl || \"\")}`;\n Linking.openURL(buildUrl);\n } catch (error) {\n console.log(error);\n }\n };\n\n const handleCallback = async () => {\n try {\n if (!sessionID.current) {\n return;\n }\n if (!sessionKey.current) {\n return;\n }\n const { cipher, nonce } = await getEncryptedData({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n sessionID: sessionID.current,\n appId,\n });\n\n const decryptedData = cryptoService.decryptSymmetric({\n encrypted: { cipher, nonce },\n keyString: sessionKey.current,\n });\n\n if (decryptedData) {\n const result: IdentityResult = JSON.parse(decryptedData);\n\n onSuccess(result);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n } else {\n onError?.(new Error(\"Failed to get identity result\"));\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n } catch (error) {\n console.log(error);\n onError?.(error as Error);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n };\n\n React.useEffect(() => {\n const subscription = AppState.addEventListener(\"change\", (nextAppState) => {\n if (nextAppState === \"active\") {\n handleCallback();\n }\n });\n return () => {\n subscription.remove();\n };\n }, []);\n\n return (\n <View>\n <TouchableOpacity onPress={initialize} disabled={loading}>\n {buttonComponent || (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 10,\n paddingVertical: 10,\n borderRadius: 20,\n borderWidth: 1,\n }}\n >\n <Image\n source={{\n uri: \"https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png\",\n }}\n style={{ width: 30, height: 30 }}\n />\n <Text style={{ fontSize: 16, fontWeight: \"600\" }}>\n {authType === \"login\"\n ? \"Login with Pelican\"\n : authType === \"signup\"\n ? \"Signup with Pelican\"\n : authType === \"id-verification\"\n ? \"Verify identity with Pelican\"\n : \"Authenticate with Pelican\"}\n </Text>\n {loading && <ActivityIndicator color={\"#000\"} />}\n </View>\n )}\n </TouchableOpacity>\n </View>\n );\n};\n\nexport default PelicanAuth;\n"]}
1
+ {"version":3,"sources":["../src/utilities.ts","../src/components/PelicanAuth.tsx"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import \"react-native-get-random-values\";\n\nimport { BASEURL, type AuthType } from \"@pelican-identity/auth-core\";\n\nexport const getRelayUrl = async ({\n businessKey,\n authType,\n projectID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n appId: string;\n}) => {\n if (!businessKey) {\n throw new Error(\"Business Key is required\");\n }\n if (!authType) {\n throw new Error(\"Auth Type is required\");\n }\n if (!projectID) {\n throw new Error(\"Project ID is required\");\n }\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/relay?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to initiate authentication: ${error}`);\n }\n\n return response.json() as Promise<{ relay_url: string; session_id: string }>;\n};\n\nexport const getEncryptedData = async ({\n businessKey,\n authType,\n projectID,\n sessionID,\n appId,\n}: {\n businessKey: string;\n authType: AuthType;\n projectID: string;\n sessionID: string;\n appId: string;\n}) => {\n if (!appId) {\n throw new Error(\"App ID is required\");\n }\n const headers = {\n \"Content-Type\": \"application/json\",\n \"X-App-ID\": appId,\n };\n\n const response = await fetch(\n `${BASEURL}/get-rn-sdk-encrypted-data?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}&session_id=${sessionID}`,\n { headers }\n );\n\n if (!response.ok) {\n const error = await response.text();\n throw new Error(`Failed to get encrypted data: ${error}`);\n }\n\n return response.json() as Promise<{ cipher: string; nonce: string }>;\n};\n","import React, { useState } from \"react\";\nimport {\n ActivityIndicator,\n AppState,\n Image,\n Linking,\n Text,\n TouchableOpacity,\n View,\n} from \"react-native\";\nimport \"react-native-get-random-values\";\n\nimport { getEncryptedData, getRelayUrl } from \"../utilities\";\nimport { PelicanRNAuthProps } from \"../types\";\nimport { IdentityResult, CryptoService } from \"@pelican-identity/auth-core\";\n\nconst cryptoService = new CryptoService();\nconst PelicanAuth = ({\n authType,\n projectId,\n publicKey,\n onSuccess,\n callBackUrl,\n onError,\n buttonComponent,\n onLoading,\n appId,\n}: PelicanRNAuthProps) => {\n const sessionKey = React.useRef<string | null>(null);\n const sessionID = React.useRef<string | null>(null);\n const [loading, setLoading] = useState(false);\n\n const initialize = async () => {\n try {\n setLoading(true);\n onLoading?.(true);\n const { relay_url, session_id } = await getRelayUrl({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n appId,\n });\n\n if (!relay_url) {\n setLoading(false);\n onLoading?.(false);\n onError?.(new Error(\"Failed to get relay URL\"));\n return;\n }\n\n sessionKey.current = cryptoService.generateSymmetricKey();\n sessionID.current = session_id;\n\n const buildUrl = `${relay_url}?sessionKey=${encodeURIComponent(\n sessionKey.current || \"\"\n )}&sessionID=${encodeURIComponent(\n sessionID.current || \"\"\n )}&authType=${encodeURIComponent(\n authType\n )}&projectId=${encodeURIComponent(\n projectId\n )}&publicKey=${encodeURIComponent(\n publicKey\n )}&callBackUrl=${encodeURIComponent(callBackUrl || \"\")}`;\n Linking.openURL(buildUrl);\n } catch (error) {\n setLoading(false);\n onLoading?.(false);\n onError?.(error as Error);\n }\n };\n\n const handleCallback = async () => {\n try {\n if (!sessionID.current) {\n return;\n }\n if (!sessionKey.current) {\n return;\n }\n const { cipher, nonce } = await getEncryptedData({\n businessKey: publicKey,\n authType,\n projectID: projectId,\n sessionID: sessionID.current,\n appId,\n });\n\n const decryptedData = cryptoService.decryptSymmetric({\n encrypted: { cipher, nonce },\n keyString: sessionKey.current,\n });\n\n if (decryptedData) {\n const result: IdentityResult = JSON.parse(decryptedData);\n\n onSuccess(result);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n } else {\n onError?.(new Error(\"Failed to get identity result\"));\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n } catch (error) {\n console.log(error);\n onError?.(error as Error);\n sessionKey.current = null;\n sessionID.current = null;\n setLoading(false);\n onLoading?.(false);\n }\n };\n\n React.useEffect(() => {\n const subscription = AppState.addEventListener(\"change\", (nextAppState) => {\n if (nextAppState === \"active\") {\n handleCallback();\n }\n });\n return () => {\n subscription.remove();\n };\n }, []);\n\n return (\n <View>\n <TouchableOpacity onPress={initialize} disabled={loading}>\n {buttonComponent || (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n paddingHorizontal: 10,\n paddingVertical: 10,\n borderRadius: 20,\n borderWidth: 1,\n }}\n >\n <Image\n source={{\n uri: \"https://res.cloudinary.com/de0jr8mcm/image/upload/v1765904735/pelican/pelican_icon_r9ghqw.png\",\n }}\n style={{ width: 30, height: 30 }}\n />\n <Text style={{ fontSize: 16, fontWeight: \"600\" }}>\n {authType === \"login\"\n ? \"Login with Pelican\"\n : authType === \"signup\"\n ? \"Signup with Pelican\"\n : authType === \"id-verification\"\n ? \"Verify identity with Pelican\"\n : \"Authenticate with Pelican\"}\n </Text>\n {loading && <ActivityIndicator color={\"#000\"} />}\n </View>\n )}\n </TouchableOpacity>\n </View>\n );\n};\n\nexport default PelicanAuth;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAExC,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,WAAW,GAAU,8CAK/B;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;eAmBgD,MAAM;gBAAc,MAAM;EAC1E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,yDAMpC;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;YAmB6C,MAAM;WAAS,MAAM;EAClE,CAAC"}
1
+ {"version":3,"file":"utilities.d.ts","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAExC,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAErE,eAAO,MAAM,WAAW,GAAU,8CAK/B;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;eA4BgD,MAAM;gBAAc,MAAM;EAC1E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,yDAMpC;IACD,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;YAmB6C,MAAM;WAAS,MAAM;EAClE,CAAC"}
@@ -0,0 +1,42 @@
1
+ import "react-native-get-random-values";
2
+ import { BASEURL } from "@pelican-identity/auth-core";
3
+ export const getRelayUrl = async ({ businessKey, authType, projectID, appId, }) => {
4
+ if (!businessKey) {
5
+ throw new Error("Business Key is required");
6
+ }
7
+ if (!authType) {
8
+ throw new Error("Auth Type is required");
9
+ }
10
+ if (!projectID) {
11
+ throw new Error("Project ID is required");
12
+ }
13
+ if (!appId) {
14
+ throw new Error("App ID is required");
15
+ }
16
+ const headers = {
17
+ "Content-Type": "application/json",
18
+ "X-App-ID": appId,
19
+ };
20
+ const response = await fetch(`${BASEURL}/relay?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}`, { headers });
21
+ if (!response.ok) {
22
+ const error = await response.text();
23
+ throw new Error(`Failed to initiate authentication: ${error}`);
24
+ }
25
+ return response.json();
26
+ };
27
+ export const getEncryptedData = async ({ businessKey, authType, projectID, sessionID, appId, }) => {
28
+ if (!appId) {
29
+ throw new Error("App ID is required");
30
+ }
31
+ const headers = {
32
+ "Content-Type": "application/json",
33
+ "X-App-ID": appId,
34
+ };
35
+ const response = await fetch(`${BASEURL}/get-rn-sdk-encrypted-data?public_key=${businessKey}&auth_type=${authType}&project_id=${projectID}&session_id=${sessionID}`, { headers });
36
+ if (!response.ok) {
37
+ const error = await response.text();
38
+ throw new Error(`Failed to get encrypted data: ${error}`);
39
+ }
40
+ return response.json();
41
+ };
42
+ //# sourceMappingURL=utilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utilities.js","sourceRoot":"","sources":["../src/utilities.ts"],"names":[],"mappings":"AAAA,OAAO,gCAAgC,CAAC;AAExC,OAAO,EAAE,OAAO,EAAiB,MAAM,6BAA6B,CAAC;AAErE,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,EAAE,EAChC,WAAW,EACX,QAAQ,EACR,SAAS,EACT,KAAK,GAMN,EAAE,EAAE;IACH,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,kBAAkB;QAClC,UAAU,EAAE,KAAK;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,qBAAqB,WAAW,cAAc,QAAQ,eAAe,SAAS,EAAE,EAC1F,EAAE,OAAO,EAAE,CACZ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sCAAsC,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAwD,CAAC;AAC/E,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,EACrC,WAAW,EACX,QAAQ,EACR,SAAS,EACT,SAAS,EACT,KAAK,GAON,EAAE,EAAE;IACH,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,OAAO,GAAG;QACd,cAAc,EAAE,kBAAkB;QAClC,UAAU,EAAE,KAAK;KAClB,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,GAAG,OAAO,yCAAyC,WAAW,cAAc,QAAQ,eAAe,SAAS,eAAe,SAAS,EAAE,EACtI,EAAE,OAAO,EAAE,CACZ,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,iCAAiC,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,OAAO,QAAQ,CAAC,IAAI,EAAgD,CAAC;AACvE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pelican-identity/react-native",
3
- "version": "1.2.4",
3
+ "version": "1.2.5",
4
4
  "description": "React Native components for Pelican Identity authentication",
5
5
  "main": "./dist/index.js",
6
6
  "react-native": "./src/index.ts",
@@ -22,7 +22,7 @@
22
22
  "react-native-get-random-values": "^1.7.0"
23
23
  },
24
24
  "dependencies": {
25
- "@pelican-identity/auth-core": "1.2.4"
25
+ "@pelican-identity/auth-core": "1.2.5"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/react": "^18.2.45",