@parity/product-sdk 0.1.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.
Files changed (66) hide show
  1. package/LICENSE +201 -0
  2. package/dist/address/index.d.ts +8 -0
  3. package/dist/address/index.js +3 -0
  4. package/dist/address/index.js.map +1 -0
  5. package/dist/bulletin/index.d.ts +1 -0
  6. package/dist/bulletin/index.js +3 -0
  7. package/dist/bulletin/index.js.map +1 -0
  8. package/dist/chain/index.d.ts +1 -0
  9. package/dist/chain/index.js +3 -0
  10. package/dist/chain/index.js.map +1 -0
  11. package/dist/chunk-NVGSGXGH.js +177 -0
  12. package/dist/chunk-NVGSGXGH.js.map +1 -0
  13. package/dist/chunk-XSKBA5SR.js +8 -0
  14. package/dist/chunk-XSKBA5SR.js.map +1 -0
  15. package/dist/contracts/index.d.ts +1 -0
  16. package/dist/contracts/index.js +3 -0
  17. package/dist/contracts/index.js.map +1 -0
  18. package/dist/core/index.d.ts +9 -0
  19. package/dist/core/index.js +13 -0
  20. package/dist/core/index.js.map +1 -0
  21. package/dist/crypto/index.d.ts +1 -0
  22. package/dist/crypto/index.js +3 -0
  23. package/dist/crypto/index.js.map +1 -0
  24. package/dist/host/index.d.ts +1 -0
  25. package/dist/host/index.js +3 -0
  26. package/dist/host/index.js.map +1 -0
  27. package/dist/identity/index.d.ts +186 -0
  28. package/dist/identity/index.js +109 -0
  29. package/dist/identity/index.js.map +1 -0
  30. package/dist/index.d.ts +59 -0
  31. package/dist/index.js +27 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/react/index.d.ts +177 -0
  34. package/dist/react/index.js +213 -0
  35. package/dist/react/index.js.map +1 -0
  36. package/dist/storage/index.d.ts +1 -0
  37. package/dist/storage/index.js +3 -0
  38. package/dist/storage/index.js.map +1 -0
  39. package/dist/types-CZQDzQ53.d.ts +142 -0
  40. package/dist/wallet/index.d.ts +1 -0
  41. package/dist/wallet/index.js +3 -0
  42. package/dist/wallet/index.js.map +1 -0
  43. package/package.json +105 -0
  44. package/src/address/index.ts +6 -0
  45. package/src/bulletin/index.ts +6 -0
  46. package/src/chain/index.ts +6 -0
  47. package/src/contracts/index.ts +6 -0
  48. package/src/core/createApp.ts +284 -0
  49. package/src/core/index.ts +10 -0
  50. package/src/core/logger.ts +13 -0
  51. package/src/core/types.ts +155 -0
  52. package/src/crypto/index.ts +6 -0
  53. package/src/host/index.ts +6 -0
  54. package/src/identity/dotns.ts +96 -0
  55. package/src/identity/index.ts +34 -0
  56. package/src/identity/product-account.ts +158 -0
  57. package/src/identity/types.ts +75 -0
  58. package/src/index.ts +49 -0
  59. package/src/react/context.ts +33 -0
  60. package/src/react/index.ts +41 -0
  61. package/src/react/provider.tsx +76 -0
  62. package/src/react/useChain.ts +33 -0
  63. package/src/react/useStorage.ts +125 -0
  64. package/src/react/useWallet.ts +138 -0
  65. package/src/storage/index.ts +6 -0
  66. package/src/wallet/index.ts +9 -0
@@ -0,0 +1,138 @@
1
+ /**
2
+ * useWallet hook
3
+ */
4
+
5
+ import { useState, useEffect, useCallback } from "react";
6
+ import { useProductSDK } from "./context.js";
7
+ import type { Account } from "../core/types.js";
8
+
9
+ /** Wallet hook state */
10
+ export interface UseWalletState {
11
+ /** Whether wallet is connected */
12
+ isConnected: boolean;
13
+ /** Whether connection is in progress */
14
+ isConnecting: boolean;
15
+ /** Available accounts */
16
+ accounts: Account[];
17
+ /** Currently selected account */
18
+ selectedAccount: Account | null;
19
+ /** Last error */
20
+ error: Error | null;
21
+ }
22
+
23
+ /** Wallet hook actions */
24
+ export interface UseWalletActions {
25
+ /** Connect to wallet */
26
+ connect: () => Promise<void>;
27
+ /** Disconnect from wallet */
28
+ disconnect: () => Promise<void>;
29
+ /** Select an account */
30
+ selectAccount: (address: string) => void;
31
+ /** Sign a message */
32
+ signMessage: (message: string | Uint8Array) => Promise<Uint8Array>;
33
+ }
34
+
35
+ /** Return type of useWallet */
36
+ export type UseWalletReturn = UseWalletState & UseWalletActions;
37
+
38
+ /**
39
+ * Hook for wallet connection and signing
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * function WalletButton() {
44
+ * const { isConnected, accounts, connect, disconnect, selectAccount } = useWallet();
45
+ *
46
+ * if (!isConnected) {
47
+ * return <button onClick={connect}>Connect Wallet</button>;
48
+ * }
49
+ *
50
+ * return (
51
+ * <div>
52
+ * <select onChange={(e) => selectAccount(e.target.value)}>
53
+ * {accounts.map((a) => (
54
+ * <option key={a.address} value={a.address}>
55
+ * {a.name || a.address}
56
+ * </option>
57
+ * ))}
58
+ * </select>
59
+ * <button onClick={disconnect}>Disconnect</button>
60
+ * </div>
61
+ * );
62
+ * }
63
+ * ```
64
+ */
65
+ export function useWallet(): UseWalletReturn {
66
+ const app = useProductSDK();
67
+
68
+ const [state, setState] = useState<UseWalletState>({
69
+ isConnected: false,
70
+ isConnecting: false,
71
+ accounts: [],
72
+ selectedAccount: null,
73
+ error: null,
74
+ });
75
+
76
+ const connect = useCallback(async () => {
77
+ setState((s) => ({ ...s, isConnecting: true, error: null }));
78
+ try {
79
+ const result = await app.wallet.connect();
80
+ setState((s) => ({
81
+ ...s,
82
+ isConnected: true,
83
+ isConnecting: false,
84
+ accounts: result.accounts,
85
+ selectedAccount: result.accounts[0] || null,
86
+ }));
87
+ } catch (e) {
88
+ setState((s) => ({
89
+ ...s,
90
+ isConnecting: false,
91
+ error: e instanceof Error ? e : new Error(String(e)),
92
+ }));
93
+ }
94
+ }, [app]);
95
+
96
+ const disconnect = useCallback(async () => {
97
+ await app.wallet.disconnect();
98
+ setState({
99
+ isConnected: false,
100
+ isConnecting: false,
101
+ accounts: [],
102
+ selectedAccount: null,
103
+ error: null,
104
+ });
105
+ }, [app]);
106
+
107
+ const selectAccount = useCallback(
108
+ (address: string) => {
109
+ app.wallet.selectAccount(address);
110
+ const account = state.accounts.find((a) => a.address === address) || null;
111
+ setState((s) => ({ ...s, selectedAccount: account }));
112
+ },
113
+ [app, state.accounts],
114
+ );
115
+
116
+ const signMessage = useCallback(
117
+ async (message: string | Uint8Array) => {
118
+ return app.wallet.signMessage(message);
119
+ },
120
+ [app],
121
+ );
122
+
123
+ // Subscribe to account changes
124
+ useEffect(() => {
125
+ const unsubscribe = app.wallet.onAccountChange((account) => {
126
+ setState((s) => ({ ...s, selectedAccount: account }));
127
+ });
128
+ return unsubscribe;
129
+ }, [app]);
130
+
131
+ return {
132
+ ...state,
133
+ connect,
134
+ disconnect,
135
+ selectAccount,
136
+ signMessage,
137
+ };
138
+ }
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @parity/product-sdk/storage
3
+ *
4
+ * Re-exports from @parity/product-sdk-storage.
5
+ */
6
+ export * from "@parity/product-sdk-storage";
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @parity/product-sdk/wallet
3
+ *
4
+ * Re-exports from @parity/product-sdk-signer.
5
+ *
6
+ * Note: The leaf package is named "signer" but exposed here as "wallet"
7
+ * for backwards compatibility with the umbrella API.
8
+ */
9
+ export * from "@parity/product-sdk-signer";