@renown/sdk 5.1.0-dev.2 → 5.1.0-dev.4

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.
Files changed (79) hide show
  1. package/README.md +487 -1
  2. package/dist/src/common.d.ts +1 -1
  3. package/dist/src/common.d.ts.map +1 -1
  4. package/dist/src/components/RenownAuthButton.d.ts +92 -0
  5. package/dist/src/components/RenownAuthButton.d.ts.map +1 -0
  6. package/dist/src/components/RenownAuthButton.js +122 -0
  7. package/dist/src/components/RenownAuthButton.js.map +1 -0
  8. package/dist/src/components/index.d.ts +2 -3
  9. package/dist/src/components/index.d.ts.map +1 -1
  10. package/dist/src/components/index.js +1 -1
  11. package/dist/src/components/index.js.map +1 -1
  12. package/dist/src/constants.d.ts +1 -1
  13. package/dist/src/constants.d.ts.map +1 -1
  14. package/dist/src/constants.js +1 -1
  15. package/dist/src/constants.js.map +1 -1
  16. package/dist/src/hooks/index.d.ts +2 -0
  17. package/dist/src/hooks/index.d.ts.map +1 -0
  18. package/dist/src/hooks/index.js +2 -0
  19. package/dist/src/hooks/index.js.map +1 -0
  20. package/dist/src/hooks/use-user.d.ts +21 -0
  21. package/dist/src/hooks/use-user.d.ts.map +1 -0
  22. package/dist/src/hooks/use-user.js +30 -0
  23. package/dist/src/hooks/use-user.js.map +1 -0
  24. package/dist/src/index.d.ts +7 -0
  25. package/dist/src/index.d.ts.map +1 -1
  26. package/dist/src/index.js +7 -0
  27. package/dist/src/index.js.map +1 -1
  28. package/dist/src/lib/crypto/browser.d.ts +8 -0
  29. package/dist/src/lib/crypto/browser.d.ts.map +1 -0
  30. package/dist/src/lib/crypto/browser.js +73 -0
  31. package/dist/src/lib/crypto/browser.js.map +1 -0
  32. package/dist/src/lib/crypto/index.d.ts +36 -0
  33. package/dist/src/lib/crypto/index.d.ts.map +1 -0
  34. package/dist/src/lib/crypto/index.js +150 -0
  35. package/dist/src/lib/crypto/index.js.map +1 -0
  36. package/dist/src/lib/crypto/node.d.ts +8 -0
  37. package/dist/src/lib/crypto/node.d.ts.map +1 -0
  38. package/dist/src/lib/crypto/node.js +67 -0
  39. package/dist/src/lib/crypto/node.js.map +1 -0
  40. package/dist/src/lib/renown/constants.d.ts +130 -0
  41. package/dist/src/lib/renown/constants.d.ts.map +1 -0
  42. package/dist/src/lib/renown/constants.js +40 -0
  43. package/dist/src/lib/renown/constants.js.map +1 -0
  44. package/dist/src/lib/renown/did-parser.d.ts +28 -0
  45. package/dist/src/lib/renown/did-parser.d.ts.map +1 -0
  46. package/dist/src/lib/renown/did-parser.js +57 -0
  47. package/dist/src/lib/renown/did-parser.js.map +1 -0
  48. package/dist/src/lib/renown/index.d.ts +4 -0
  49. package/dist/src/lib/renown/index.d.ts.map +1 -0
  50. package/dist/src/lib/renown/index.js +4 -0
  51. package/dist/src/lib/renown/index.js.map +1 -0
  52. package/dist/src/lib/renown/utils.d.ts +32 -0
  53. package/dist/src/lib/renown/utils.d.ts.map +1 -0
  54. package/dist/src/lib/renown/utils.js +199 -0
  55. package/dist/src/lib/renown/utils.js.map +1 -0
  56. package/dist/src/lib/session-storage.d.ts +40 -0
  57. package/dist/src/lib/session-storage.d.ts.map +1 -0
  58. package/dist/src/lib/session-storage.js +107 -0
  59. package/dist/src/lib/session-storage.js.map +1 -0
  60. package/dist/src/providers/index.d.ts +3 -0
  61. package/dist/src/providers/index.d.ts.map +1 -0
  62. package/dist/src/providers/index.js +2 -0
  63. package/dist/src/providers/index.js.map +1 -0
  64. package/dist/src/providers/user-provider.d.ts +66 -0
  65. package/dist/src/providers/user-provider.d.ts.map +1 -0
  66. package/dist/src/providers/user-provider.js +159 -0
  67. package/dist/src/providers/user-provider.js.map +1 -0
  68. package/dist/src/types.d.ts +3 -2
  69. package/dist/src/types.d.ts.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/package.json +13 -5
  72. package/dist/src/components/RenownLoginAvatar.d.ts +0 -44
  73. package/dist/src/components/RenownLoginAvatar.d.ts.map +0 -1
  74. package/dist/src/components/RenownLoginAvatar.js +0 -50
  75. package/dist/src/components/RenownLoginAvatar.js.map +0 -1
  76. package/dist/src/components/types.d.ts +0 -12
  77. package/dist/src/components/types.d.ts.map +0 -1
  78. package/dist/src/components/types.js +0 -2
  79. package/dist/src/components/types.js.map +0 -1
@@ -0,0 +1,107 @@
1
+ "use client";
2
+ const SESSION_STORAGE_KEYS = {
3
+ USER: "renown_user",
4
+ LOGIN_STATUS: "renown_login_status",
5
+ USER_DID: "renown_user_did",
6
+ };
7
+ /**
8
+ * Session storage utilities for Renown authentication
9
+ * Stores user data in sessionStorage to persist across page reloads
10
+ * but clears when the browser session ends
11
+ */
12
+ export class SessionStorageManager {
13
+ /**
14
+ * Store user authentication data in sessionStorage
15
+ */
16
+ static setUserData(userData) {
17
+ if (typeof window === "undefined")
18
+ return;
19
+ try {
20
+ sessionStorage.setItem(SESSION_STORAGE_KEYS.USER, JSON.stringify(userData.user));
21
+ sessionStorage.setItem(SESSION_STORAGE_KEYS.USER_DID, userData.userDid);
22
+ sessionStorage.setItem(SESSION_STORAGE_KEYS.LOGIN_STATUS, userData.loginStatus);
23
+ sessionStorage.setItem("renown_timestamp", userData.timestamp.toString());
24
+ }
25
+ catch (error) {
26
+ console.error("Failed to store user data in sessionStorage:", error);
27
+ }
28
+ }
29
+ /**
30
+ * Retrieve user authentication data from sessionStorage
31
+ */
32
+ static getUserData() {
33
+ if (typeof window === "undefined")
34
+ return null;
35
+ try {
36
+ const userStr = sessionStorage.getItem(SESSION_STORAGE_KEYS.USER);
37
+ const userDid = sessionStorage.getItem(SESSION_STORAGE_KEYS.USER_DID);
38
+ const loginStatus = sessionStorage.getItem(SESSION_STORAGE_KEYS.LOGIN_STATUS);
39
+ const timestampStr = sessionStorage.getItem("renown_timestamp");
40
+ if (!userStr || !userDid || !loginStatus || !timestampStr) {
41
+ return null;
42
+ }
43
+ const user = JSON.parse(userStr);
44
+ const timestamp = parseInt(timestampStr, 10);
45
+ return {
46
+ user,
47
+ userDid,
48
+ loginStatus: loginStatus,
49
+ timestamp,
50
+ };
51
+ }
52
+ catch (error) {
53
+ console.error("Failed to retrieve user data from sessionStorage:", error);
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * Check if user data exists in sessionStorage
59
+ */
60
+ static hasUserData() {
61
+ if (typeof window === "undefined")
62
+ return false;
63
+ return !!(sessionStorage.getItem(SESSION_STORAGE_KEYS.USER) &&
64
+ sessionStorage.getItem(SESSION_STORAGE_KEYS.USER_DID) &&
65
+ sessionStorage.getItem(SESSION_STORAGE_KEYS.LOGIN_STATUS));
66
+ }
67
+ /**
68
+ * Clear all user authentication data from sessionStorage
69
+ */
70
+ static clearUserData() {
71
+ if (typeof window === "undefined")
72
+ return;
73
+ try {
74
+ sessionStorage.removeItem(SESSION_STORAGE_KEYS.USER);
75
+ sessionStorage.removeItem(SESSION_STORAGE_KEYS.USER_DID);
76
+ sessionStorage.removeItem(SESSION_STORAGE_KEYS.LOGIN_STATUS);
77
+ sessionStorage.removeItem("renown_timestamp");
78
+ }
79
+ catch (error) {
80
+ console.error("Failed to clear user data from sessionStorage:", error);
81
+ }
82
+ }
83
+ /**
84
+ * Check if stored user data is still valid (not expired)
85
+ * You can implement expiration logic here if needed
86
+ */
87
+ static isUserDataValid(userData) {
88
+ // For now, we consider session data valid for the entire browser session
89
+ // You can add expiration logic here if needed
90
+ return true;
91
+ }
92
+ /**
93
+ * Get the stored user DID for easy re-authentication
94
+ */
95
+ static getStoredUserDid() {
96
+ if (typeof window === "undefined")
97
+ return null;
98
+ try {
99
+ return sessionStorage.getItem(SESSION_STORAGE_KEYS.USER_DID);
100
+ }
101
+ catch (error) {
102
+ console.error("Failed to get stored user DID:", error);
103
+ return null;
104
+ }
105
+ }
106
+ }
107
+ //# sourceMappingURL=session-storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-storage.js","sourceRoot":"","sources":["../../../src/lib/session-storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { UserProvider, UserContext } from "./user-provider.js";
2
+ export type { UserContextValue } from "./user-provider.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC/D,YAAY,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { UserProvider, UserContext } from "./user-provider.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import type { LoginStatus, User } from "../lib/renown/index.js";
2
+ export interface UserContextValue {
3
+ /** Current authenticated user, null if not authenticated */
4
+ user: User | null;
5
+ /** Current login status */
6
+ loginStatus: LoginStatus;
7
+ /** Whether auth operations are in progress */
8
+ isLoading: boolean;
9
+ /** Whether the user system has been initialized */
10
+ isInitialized: boolean;
11
+ /** Login with optional DID (defaults to connectCrypto DID) */
12
+ login: (userDid?: string) => Promise<void>;
13
+ /** Logout the current user */
14
+ logout: () => Promise<void>;
15
+ /** Open Renown portal for authentication */
16
+ openRenown: () => void;
17
+ }
18
+ export declare const UserContext: import("react").Context<UserContextValue | null>;
19
+ interface UserProviderProps {
20
+ children: React.ReactNode;
21
+ /**
22
+ * Renown service URL
23
+ * @default 'https://www.renown.id'
24
+ */
25
+ renownUrl?: string;
26
+ /**
27
+ * Network ID (e.g., 'eip155')
28
+ * @default 'eip155'
29
+ */
30
+ networkId?: string;
31
+ /**
32
+ * Chain ID (e.g., '1' for Ethereum mainnet)
33
+ * @default '1'
34
+ */
35
+ chainId?: string;
36
+ /**
37
+ * Custom loading component shown during initialization
38
+ * If not provided, renders children immediately (no loading screen)
39
+ */
40
+ loadingComponent?: React.ReactNode;
41
+ /**
42
+ * Custom error component shown if initialization fails
43
+ * Receives the error and a retry function
44
+ */
45
+ errorComponent?: (error: Error, retry: () => void) => React.ReactNode;
46
+ }
47
+ /**
48
+ * UserProvider - Central user provider for Renown
49
+ *
50
+ * Automatically initializes the Renown SDK and provides user state.
51
+ * Handles initialization, login, logout, and session management.
52
+ *
53
+ * Usage:
54
+ * ```tsx
55
+ * // Wrap your app
56
+ * <UserProvider renownUrl="https://www.renown.id">
57
+ * <YourApp />
58
+ * </UserProvider>
59
+ *
60
+ * // In any component
61
+ * const { user, login, logout } = useUser()
62
+ * ```
63
+ */
64
+ export declare function UserProvider({ children, renownUrl, networkId, chainId, loadingComponent, errorComponent, }: UserProviderProps): import("react/jsx-runtime").JSX.Element;
65
+ export {};
66
+ //# sourceMappingURL=user-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-provider.d.ts","sourceRoot":"","sources":["../../../src/providers/user-provider.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAWhE,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,2BAA2B;IAC3B,WAAW,EAAE,WAAW,CAAC;IACzB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,aAAa,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,8BAA8B;IAC9B,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,4CAA4C;IAC5C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,eAAO,MAAM,WAAW,kDAA+C,CAAC;AAExE,UAAU,iBAAiB;IACzB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACnC;;;OAGG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;CACvE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,SAAmC,EACnC,SAAoB,EACpB,OAAa,EACb,gBAAgB,EAChB,cAAc,GACf,EAAE,iBAAiB,2CA2JnB"}
@@ -0,0 +1,159 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx } from "react/jsx-runtime";
3
+ import { createContext, useCallback, useEffect, useState } from "react";
4
+ import { BrowserKeyStorage, ConnectCrypto } from "../crypto/index.js";
5
+ import { initRenown } from "../init.browser.js";
6
+ import { fetchProfileDataForUser, handleRenownReturn, openRenown as openRenownPortal, login as renownLogin, logout as renownLogout, } from "../lib/renown/index.js";
7
+ import { SessionStorageManager } from "../lib/session-storage.js";
8
+ export const UserContext = createContext(null);
9
+ /**
10
+ * UserProvider - Central user provider for Renown
11
+ *
12
+ * Automatically initializes the Renown SDK and provides user state.
13
+ * Handles initialization, login, logout, and session management.
14
+ *
15
+ * Usage:
16
+ * ```tsx
17
+ * // Wrap your app
18
+ * <UserProvider renownUrl="https://www.renown.id">
19
+ * <YourApp />
20
+ * </UserProvider>
21
+ *
22
+ * // In any component
23
+ * const { user, login, logout } = useUser()
24
+ * ```
25
+ */
26
+ export function UserProvider({ children, renownUrl = "https://www.renown.id", networkId = "eip155", chainId = "1", loadingComponent, errorComponent, }) {
27
+ const [user, setUser] = useState(null);
28
+ const [loginStatus, setLoginStatus] = useState("initial");
29
+ const [isLoading, setIsLoading] = useState(false);
30
+ const [isInitialized, setIsInitialized] = useState(false);
31
+ const [initError, setInitError] = useState(null);
32
+ // Initialize auth system
33
+ useEffect(() => {
34
+ const init = async () => {
35
+ try {
36
+ if (typeof window === "undefined") {
37
+ setIsInitialized(true);
38
+ return;
39
+ }
40
+ // Initialize SDK if not already initialized
41
+ if (!window.renown || !window.connectCrypto) {
42
+ // Initialize ConnectCrypto with browser key storage
43
+ const connectCrypto = new ConnectCrypto(new BrowserKeyStorage());
44
+ // Initialize Renown SDK
45
+ const renown = initRenown(await connectCrypto.did(), networkId, renownUrl);
46
+ // Attach to window for global access
47
+ window.renown = renown;
48
+ window.connectCrypto = connectCrypto;
49
+ }
50
+ // Check for stored session first
51
+ const storedUserData = SessionStorageManager.getUserData();
52
+ if (storedUserData &&
53
+ SessionStorageManager.isUserDataValid(storedUserData)) {
54
+ // Restore user from stored session
55
+ const userWithProfile = await fetchProfileDataForUser(storedUserData.user);
56
+ setUser(userWithProfile);
57
+ setLoginStatus("authorized");
58
+ setIsInitialized(true);
59
+ return;
60
+ }
61
+ // Handle return from Renown authentication
62
+ await handleRenownReturn();
63
+ // Check if user is already logged in
64
+ let currentUser = window.renown.user instanceof Function
65
+ ? window.renown.user()
66
+ : window.renown.user;
67
+ currentUser =
68
+ currentUser instanceof Promise ? await currentUser : currentUser;
69
+ if (currentUser) {
70
+ // Fetch profile data for the logged-in user
71
+ const userWithProfile = await fetchProfileDataForUser(currentUser);
72
+ setUser(userWithProfile);
73
+ setLoginStatus("authorized");
74
+ }
75
+ else {
76
+ setLoginStatus("not-authorized");
77
+ }
78
+ setIsInitialized(true);
79
+ }
80
+ catch (error) {
81
+ console.error("Failed to initialize authentication:", error);
82
+ setInitError(error);
83
+ setLoginStatus("not-authorized");
84
+ // Still set as initialized to prevent infinite loading
85
+ setIsInitialized(true);
86
+ }
87
+ };
88
+ init();
89
+ }, [renownUrl, networkId, chainId]);
90
+ // Login handler
91
+ const login = useCallback(async (userDid) => {
92
+ if (typeof window === "undefined")
93
+ return;
94
+ const renown = window.renown;
95
+ const connectCrypto = window.connectCrypto;
96
+ if (!renown || !connectCrypto) {
97
+ console.error("Renown or ConnectCrypto not available");
98
+ setLoginStatus("not-authorized");
99
+ return;
100
+ }
101
+ try {
102
+ setIsLoading(true);
103
+ setLoginStatus("checking");
104
+ const did = userDid || (await connectCrypto.did());
105
+ // Perform login
106
+ const loggedInUser = await renownLogin(did, renown, connectCrypto);
107
+ if (loggedInUser) {
108
+ // Fetch profile data and update state
109
+ const userWithProfile = await fetchProfileDataForUser(loggedInUser);
110
+ setUser(userWithProfile);
111
+ setLoginStatus("authorized");
112
+ }
113
+ else {
114
+ setLoginStatus("not-authorized");
115
+ }
116
+ }
117
+ catch (error) {
118
+ console.error("Login failed:", error);
119
+ setLoginStatus("not-authorized");
120
+ }
121
+ finally {
122
+ setIsLoading(false);
123
+ }
124
+ }, []);
125
+ // Logout handler
126
+ const logout = useCallback(async () => {
127
+ try {
128
+ await renownLogout();
129
+ setUser(null);
130
+ setLoginStatus("not-authorized");
131
+ }
132
+ catch (error) {
133
+ console.error("Logout failed:", error);
134
+ }
135
+ }, []);
136
+ // Open Renown portal
137
+ const openRenown = useCallback(() => {
138
+ openRenownPortal();
139
+ }, []);
140
+ // Show loading state while initializing
141
+ if (!isInitialized && loadingComponent) {
142
+ return _jsx(_Fragment, { children: loadingComponent });
143
+ }
144
+ // Show error state if initialization failed
145
+ if (initError && errorComponent) {
146
+ return _jsx(_Fragment, { children: errorComponent(initError, () => window.location.reload()) });
147
+ }
148
+ const value = {
149
+ user,
150
+ loginStatus,
151
+ isLoading,
152
+ isInitialized,
153
+ login,
154
+ logout,
155
+ openRenown,
156
+ };
157
+ return _jsx(UserContext.Provider, { value: value, children: children });
158
+ }
159
+ //# sourceMappingURL=user-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-provider.js","sourceRoot":"","sources":["../../../src/providers/user-provider.tsx"],"names":[],"mappings":"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"}
@@ -2,13 +2,14 @@ import type { User as EditorUser } from "document-model";
2
2
  import type { CREDENTIAL_TYPES } from "./constants.js";
3
3
  import type { IEventEmitter } from "./event/types.js";
4
4
  import type { IStorage } from "./storage/common.js";
5
- export type User = EditorUser & {
5
+ export type InternalUser = EditorUser & {
6
6
  did: string;
7
7
  credential: PowerhouseVerifiableCredential | undefined;
8
8
  };
9
+ export type User = InternalUser;
9
10
  export type Unsubscribe = () => void;
10
11
  export type RenownStorageMap = {
11
- user: User | undefined;
12
+ user: InternalUser | undefined;
12
13
  };
13
14
  export type RenownStorage = IStorage<RenownStorageMap>;
14
15
  export type RenownEvents = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}