@sogni-ai/expo-client 1.0.0-alpha.10

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 (262) hide show
  1. package/CHANGELOG.md +69 -0
  2. package/README.md +411 -0
  3. package/dist/cjs/Account/index.d.ts +60 -0
  4. package/dist/cjs/Account/index.d.ts.map +1 -0
  5. package/dist/cjs/Account/index.js +188 -0
  6. package/dist/cjs/Account/index.js.map +1 -0
  7. package/dist/cjs/Account/types.d.ts +43 -0
  8. package/dist/cjs/Account/types.d.ts.map +1 -0
  9. package/dist/cjs/Account/types.js +18 -0
  10. package/dist/cjs/Account/types.js.map +1 -0
  11. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts +139 -0
  12. package/dist/cjs/ApiClient/WebSocketClient/events.d.ts.map +1 -0
  13. package/dist/cjs/ApiClient/WebSocketClient/events.js +3 -0
  14. package/dist/cjs/ApiClient/WebSocketClient/events.js.map +1 -0
  15. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts +45 -0
  16. package/dist/cjs/ApiClient/WebSocketClient/index.d.ts.map +1 -0
  17. package/dist/cjs/ApiClient/WebSocketClient/index.js +283 -0
  18. package/dist/cjs/ApiClient/WebSocketClient/index.js.map +1 -0
  19. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts +45 -0
  20. package/dist/cjs/ApiClient/WebSocketClient/normalize.d.ts.map +1 -0
  21. package/dist/cjs/ApiClient/WebSocketClient/normalize.js +245 -0
  22. package/dist/cjs/ApiClient/WebSocketClient/normalize.js.map +1 -0
  23. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts +9 -0
  24. package/dist/cjs/ApiClient/WebSocketClient/types.d.ts.map +1 -0
  25. package/dist/cjs/ApiClient/WebSocketClient/types.js +3 -0
  26. package/dist/cjs/ApiClient/WebSocketClient/types.js.map +1 -0
  27. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts +161 -0
  28. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.d.ts.map +1 -0
  29. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js +11 -0
  30. package/dist/cjs/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  31. package/dist/cjs/ApiClient/index.d.ts +60 -0
  32. package/dist/cjs/ApiClient/index.d.ts.map +1 -0
  33. package/dist/cjs/ApiClient/index.js +87 -0
  34. package/dist/cjs/ApiClient/index.js.map +1 -0
  35. package/dist/cjs/Chat/ChatStream.d.ts +42 -0
  36. package/dist/cjs/Chat/ChatStream.d.ts.map +1 -0
  37. package/dist/cjs/Chat/ChatStream.js +146 -0
  38. package/dist/cjs/Chat/ChatStream.js.map +1 -0
  39. package/dist/cjs/Chat/index.d.ts +61 -0
  40. package/dist/cjs/Chat/index.d.ts.map +1 -0
  41. package/dist/cjs/Chat/index.js +179 -0
  42. package/dist/cjs/Chat/index.js.map +1 -0
  43. package/dist/cjs/Chat/tools.d.ts +13 -0
  44. package/dist/cjs/Chat/tools.d.ts.map +1 -0
  45. package/dist/cjs/Chat/tools.js +22 -0
  46. package/dist/cjs/Chat/tools.js.map +1 -0
  47. package/dist/cjs/Chat/types.d.ts +153 -0
  48. package/dist/cjs/Chat/types.d.ts.map +1 -0
  49. package/dist/cjs/Chat/types.js +3 -0
  50. package/dist/cjs/Chat/types.js.map +1 -0
  51. package/dist/cjs/Projects/ControlNet.d.ts +30 -0
  52. package/dist/cjs/Projects/ControlNet.d.ts.map +1 -0
  53. package/dist/cjs/Projects/ControlNet.js +45 -0
  54. package/dist/cjs/Projects/ControlNet.js.map +1 -0
  55. package/dist/cjs/Projects/createJobRequestMessage.d.ts +11 -0
  56. package/dist/cjs/Projects/createJobRequestMessage.d.ts.map +1 -0
  57. package/dist/cjs/Projects/createJobRequestMessage.js +239 -0
  58. package/dist/cjs/Projects/createJobRequestMessage.js.map +1 -0
  59. package/dist/cjs/Projects/index.d.ts +96 -0
  60. package/dist/cjs/Projects/index.d.ts.map +1 -0
  61. package/dist/cjs/Projects/index.js +536 -0
  62. package/dist/cjs/Projects/index.js.map +1 -0
  63. package/dist/cjs/Projects/restNormalize.d.ts +60 -0
  64. package/dist/cjs/Projects/restNormalize.d.ts.map +1 -0
  65. package/dist/cjs/Projects/restNormalize.js +89 -0
  66. package/dist/cjs/Projects/restNormalize.js.map +1 -0
  67. package/dist/cjs/Projects/types.d.ts +233 -0
  68. package/dist/cjs/Projects/types.d.ts.map +1 -0
  69. package/dist/cjs/Projects/types.js +3 -0
  70. package/dist/cjs/Projects/types.js.map +1 -0
  71. package/dist/cjs/Projects/utils.d.ts +23 -0
  72. package/dist/cjs/Projects/utils.d.ts.map +1 -0
  73. package/dist/cjs/Projects/utils.js +65 -0
  74. package/dist/cjs/Projects/utils.js.map +1 -0
  75. package/dist/cjs/index.d.ts +63 -0
  76. package/dist/cjs/index.d.ts.map +1 -0
  77. package/dist/cjs/index.js +116 -0
  78. package/dist/cjs/index.js.map +1 -0
  79. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts +15 -0
  80. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.d.ts.map +1 -0
  81. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js +47 -0
  82. package/dist/cjs/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  83. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts +23 -0
  84. package/dist/cjs/lib/AuthManager/AuthManagerBase.d.ts.map +1 -0
  85. package/dist/cjs/lib/AuthManager/AuthManagerBase.js +14 -0
  86. package/dist/cjs/lib/AuthManager/AuthManagerBase.js.map +1 -0
  87. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts +11 -0
  88. package/dist/cjs/lib/AuthManager/AuthStorage.d.ts.map +1 -0
  89. package/dist/cjs/lib/AuthManager/AuthStorage.js +50 -0
  90. package/dist/cjs/lib/AuthManager/AuthStorage.js.map +1 -0
  91. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts +35 -0
  92. package/dist/cjs/lib/AuthManager/TokenAuthManager.d.ts.map +1 -0
  93. package/dist/cjs/lib/AuthManager/TokenAuthManager.js +164 -0
  94. package/dist/cjs/lib/AuthManager/TokenAuthManager.js.map +1 -0
  95. package/dist/cjs/lib/AuthManager/index.d.ts +7 -0
  96. package/dist/cjs/lib/AuthManager/index.d.ts.map +1 -0
  97. package/dist/cjs/lib/AuthManager/index.js +13 -0
  98. package/dist/cjs/lib/AuthManager/index.js.map +1 -0
  99. package/dist/cjs/lib/Cache.d.ts +12 -0
  100. package/dist/cjs/lib/Cache.d.ts.map +1 -0
  101. package/dist/cjs/lib/Cache.js +36 -0
  102. package/dist/cjs/lib/Cache.js.map +1 -0
  103. package/dist/cjs/lib/DefaultLogger.d.ts +17 -0
  104. package/dist/cjs/lib/DefaultLogger.d.ts.map +1 -0
  105. package/dist/cjs/lib/DefaultLogger.js +36 -0
  106. package/dist/cjs/lib/DefaultLogger.js.map +1 -0
  107. package/dist/cjs/lib/RestClient.d.ts +18 -0
  108. package/dist/cjs/lib/RestClient.d.ts.map +1 -0
  109. package/dist/cjs/lib/RestClient.js +67 -0
  110. package/dist/cjs/lib/RestClient.js.map +1 -0
  111. package/dist/cjs/lib/TypedEventEmitter.d.ts +16 -0
  112. package/dist/cjs/lib/TypedEventEmitter.d.ts.map +1 -0
  113. package/dist/cjs/lib/TypedEventEmitter.js +46 -0
  114. package/dist/cjs/lib/TypedEventEmitter.js.map +1 -0
  115. package/dist/cjs/lib/base64.d.ts +3 -0
  116. package/dist/cjs/lib/base64.d.ts.map +1 -0
  117. package/dist/cjs/lib/base64.js +21 -0
  118. package/dist/cjs/lib/base64.js.map +1 -0
  119. package/dist/cjs/lib/getUUID.d.ts +12 -0
  120. package/dist/cjs/lib/getUUID.d.ts.map +1 -0
  121. package/dist/cjs/lib/getUUID.js +29 -0
  122. package/dist/cjs/lib/getUUID.js.map +1 -0
  123. package/dist/cjs/lib/mediaInput.d.ts +33 -0
  124. package/dist/cjs/lib/mediaInput.d.ts.map +1 -0
  125. package/dist/cjs/lib/mediaInput.js +32 -0
  126. package/dist/cjs/lib/mediaInput.js.map +1 -0
  127. package/dist/cjs/lib/utils.d.ts +10 -0
  128. package/dist/cjs/lib/utils.d.ts.map +1 -0
  129. package/dist/cjs/lib/utils.js +24 -0
  130. package/dist/cjs/lib/utils.js.map +1 -0
  131. package/dist/cjs/types/ErrorData.d.ts +7 -0
  132. package/dist/cjs/types/ErrorData.d.ts.map +1 -0
  133. package/dist/cjs/types/ErrorData.js +3 -0
  134. package/dist/cjs/types/ErrorData.js.map +1 -0
  135. package/dist/cjs/types/json.d.ts +6 -0
  136. package/dist/cjs/types/json.d.ts.map +1 -0
  137. package/dist/cjs/types/json.js +3 -0
  138. package/dist/cjs/types/json.js.map +1 -0
  139. package/dist/cjs/types/token.d.ts +2 -0
  140. package/dist/cjs/types/token.d.ts.map +1 -0
  141. package/dist/cjs/types/token.js +3 -0
  142. package/dist/cjs/types/token.js.map +1 -0
  143. package/dist/cjs/version.d.ts +2 -0
  144. package/dist/cjs/version.d.ts.map +1 -0
  145. package/dist/cjs/version.js +5 -0
  146. package/dist/cjs/version.js.map +1 -0
  147. package/dist/cjs/wallet.d.ts +59 -0
  148. package/dist/cjs/wallet.d.ts.map +1 -0
  149. package/dist/cjs/wallet.js +125 -0
  150. package/dist/cjs/wallet.js.map +1 -0
  151. package/dist/esm/Account/index.js +183 -0
  152. package/dist/esm/Account/index.js.map +1 -0
  153. package/dist/esm/Account/types.js +15 -0
  154. package/dist/esm/Account/types.js.map +1 -0
  155. package/dist/esm/ApiClient/WebSocketClient/events.js +2 -0
  156. package/dist/esm/ApiClient/WebSocketClient/events.js.map +1 -0
  157. package/dist/esm/ApiClient/WebSocketClient/index.js +278 -0
  158. package/dist/esm/ApiClient/WebSocketClient/index.js.map +1 -0
  159. package/dist/esm/ApiClient/WebSocketClient/normalize.js +229 -0
  160. package/dist/esm/ApiClient/WebSocketClient/normalize.js.map +1 -0
  161. package/dist/esm/ApiClient/WebSocketClient/types.js +2 -0
  162. package/dist/esm/ApiClient/WebSocketClient/types.js.map +1 -0
  163. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js +10 -0
  164. package/dist/esm/ApiClient/WebSocketClient/wireTypes.js.map +1 -0
  165. package/dist/esm/ApiClient/index.js +80 -0
  166. package/dist/esm/ApiClient/index.js.map +1 -0
  167. package/dist/esm/Chat/ChatStream.js +144 -0
  168. package/dist/esm/Chat/ChatStream.js.map +1 -0
  169. package/dist/esm/Chat/index.js +174 -0
  170. package/dist/esm/Chat/index.js.map +1 -0
  171. package/dist/esm/Chat/tools.js +19 -0
  172. package/dist/esm/Chat/tools.js.map +1 -0
  173. package/dist/esm/Chat/types.js +2 -0
  174. package/dist/esm/Chat/types.js.map +1 -0
  175. package/dist/esm/Projects/ControlNet.js +41 -0
  176. package/dist/esm/Projects/ControlNet.js.map +1 -0
  177. package/dist/esm/Projects/createJobRequestMessage.js +236 -0
  178. package/dist/esm/Projects/createJobRequestMessage.js.map +1 -0
  179. package/dist/esm/Projects/index.js +531 -0
  180. package/dist/esm/Projects/index.js.map +1 -0
  181. package/dist/esm/Projects/restNormalize.js +86 -0
  182. package/dist/esm/Projects/restNormalize.js.map +1 -0
  183. package/dist/esm/Projects/types.js +2 -0
  184. package/dist/esm/Projects/types.js.map +1 -0
  185. package/dist/esm/Projects/utils.js +55 -0
  186. package/dist/esm/Projects/utils.js.map +1 -0
  187. package/dist/esm/index.js +72 -0
  188. package/dist/esm/index.js.map +1 -0
  189. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js +42 -0
  190. package/dist/esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
  191. package/dist/esm/lib/AuthManager/AuthManagerBase.js +9 -0
  192. package/dist/esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
  193. package/dist/esm/lib/AuthManager/AuthStorage.js +13 -0
  194. package/dist/esm/lib/AuthManager/AuthStorage.js.map +1 -0
  195. package/dist/esm/lib/AuthManager/TokenAuthManager.js +159 -0
  196. package/dist/esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
  197. package/dist/esm/lib/AuthManager/index.js +5 -0
  198. package/dist/esm/lib/AuthManager/index.js.map +1 -0
  199. package/dist/esm/lib/Cache.js +33 -0
  200. package/dist/esm/lib/Cache.js.map +1 -0
  201. package/dist/esm/lib/DefaultLogger.js +32 -0
  202. package/dist/esm/lib/DefaultLogger.js.map +1 -0
  203. package/dist/esm/lib/RestClient.js +62 -0
  204. package/dist/esm/lib/RestClient.js.map +1 -0
  205. package/dist/esm/lib/TypedEventEmitter.js +44 -0
  206. package/dist/esm/lib/TypedEventEmitter.js.map +1 -0
  207. package/dist/esm/lib/base64.js +17 -0
  208. package/dist/esm/lib/base64.js.map +1 -0
  209. package/dist/esm/lib/getUUID.js +26 -0
  210. package/dist/esm/lib/getUUID.js.map +1 -0
  211. package/dist/esm/lib/mediaInput.js +28 -0
  212. package/dist/esm/lib/mediaInput.js.map +1 -0
  213. package/dist/esm/lib/utils.js +19 -0
  214. package/dist/esm/lib/utils.js.map +1 -0
  215. package/dist/esm/types/ErrorData.js +2 -0
  216. package/dist/esm/types/ErrorData.js.map +1 -0
  217. package/dist/esm/types/json.js +2 -0
  218. package/dist/esm/types/json.js.map +1 -0
  219. package/dist/esm/types/token.js +2 -0
  220. package/dist/esm/types/token.js.map +1 -0
  221. package/dist/esm/version.js +2 -0
  222. package/dist/esm/version.js.map +1 -0
  223. package/dist/esm/wallet.js +117 -0
  224. package/dist/esm/wallet.js.map +1 -0
  225. package/package.json +92 -0
  226. package/src/Account/index.ts +214 -0
  227. package/src/Account/types.ts +61 -0
  228. package/src/ApiClient/WebSocketClient/events.ts +168 -0
  229. package/src/ApiClient/WebSocketClient/index.ts +345 -0
  230. package/src/ApiClient/WebSocketClient/normalize.ts +287 -0
  231. package/src/ApiClient/WebSocketClient/types.ts +10 -0
  232. package/src/ApiClient/WebSocketClient/wireTypes.ts +183 -0
  233. package/src/ApiClient/index.ts +147 -0
  234. package/src/Chat/ChatStream.ts +164 -0
  235. package/src/Chat/index.ts +224 -0
  236. package/src/Chat/tools.ts +23 -0
  237. package/src/Chat/types.ts +165 -0
  238. package/src/Projects/ControlNet.ts +84 -0
  239. package/src/Projects/createJobRequestMessage.ts +241 -0
  240. package/src/Projects/index.ts +608 -0
  241. package/src/Projects/restNormalize.ts +154 -0
  242. package/src/Projects/types.ts +266 -0
  243. package/src/Projects/utils.ts +60 -0
  244. package/src/index.ts +217 -0
  245. package/src/lib/AuthManager/ApiKeyAuthManager.ts +52 -0
  246. package/src/lib/AuthManager/AuthManagerBase.ts +35 -0
  247. package/src/lib/AuthManager/AuthStorage.ts +21 -0
  248. package/src/lib/AuthManager/TokenAuthManager.ts +179 -0
  249. package/src/lib/AuthManager/index.ts +8 -0
  250. package/src/lib/Cache.ts +45 -0
  251. package/src/lib/DefaultLogger.ts +47 -0
  252. package/src/lib/RestClient.ts +77 -0
  253. package/src/lib/TypedEventEmitter.ts +52 -0
  254. package/src/lib/base64.ts +17 -0
  255. package/src/lib/getUUID.ts +27 -0
  256. package/src/lib/mediaInput.ts +54 -0
  257. package/src/lib/utils.ts +21 -0
  258. package/src/types/ErrorData.ts +7 -0
  259. package/src/types/json.ts +5 -0
  260. package/src/types/token.ts +1 -0
  261. package/src/version.ts +1 -0
  262. package/src/wallet.ts +158 -0
package/src/wallet.ts ADDED
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Wallet creation and EIP-712 signing for Sogni authentication.
3
+ *
4
+ * Importable as a separate entry point so consumers using only API-key auth
5
+ * do not bundle viem:
6
+ *
7
+ * import { deriveWallet, signAuthentication } from '@sogni-ai/expo-client/wallet';
8
+ *
9
+ * Requires `crypto.getRandomValues` (for fresh wallet generation), which the
10
+ * `polyfillWebCrypto()` call from `expo-standard-web-crypto` provides. PBKDF2
11
+ * for username+password derivation is done in pure JS via @noble/hashes, so
12
+ * no `crypto.subtle` is needed (Expo doesn't polyfill it).
13
+ */
14
+
15
+ import { pbkdf2 } from '@noble/hashes/pbkdf2';
16
+ import { sha256 } from '@noble/hashes/sha2';
17
+ import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts';
18
+ import type { Hex } from 'viem';
19
+
20
+ export { LIB_VERSION } from './version';
21
+
22
+ /** A Sogni wallet — private key plus its derived Ethereum-style address. */
23
+ export interface Wallet {
24
+ privateKey: Hex;
25
+ address: Hex;
26
+ }
27
+
28
+ /** Network the wallet's signatures target. Affects the EIP-712 domain. */
29
+ export type WalletNetwork = 'mainnet' | 'testnet';
30
+
31
+ interface DomainConfig {
32
+ name: string;
33
+ version: '1';
34
+ chainId: number;
35
+ verifyingContract: Hex;
36
+ }
37
+
38
+ const PLACEHOLDER_VERIFYING_CONTRACT: Hex = '0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC';
39
+
40
+ function getDomain(network: WalletNetwork): DomainConfig {
41
+ return network === 'testnet'
42
+ ? {
43
+ name: 'Sogni-testnet',
44
+ version: '1',
45
+ chainId: 84532,
46
+ verifyingContract: PLACEHOLDER_VERIFYING_CONTRACT
47
+ }
48
+ : {
49
+ name: 'Sogni AI',
50
+ version: '1',
51
+ chainId: 8453,
52
+ verifyingContract: PLACEHOLDER_VERIFYING_CONTRACT
53
+ };
54
+ }
55
+
56
+ const AUTH_TYPES = {
57
+ Authentication: [
58
+ { name: 'walletAddress', type: 'address' },
59
+ { name: 'nonce', type: 'string' }
60
+ ]
61
+ } as const;
62
+
63
+ const SIGNUP_TYPES = {
64
+ Signup: [
65
+ { name: 'appid', type: 'string' },
66
+ { name: 'username', type: 'string' },
67
+ { name: 'email', type: 'string' },
68
+ { name: 'subscribe', type: 'uint256' },
69
+ { name: 'walletAddress', type: 'address' },
70
+ { name: 'nonce', type: 'string' }
71
+ ]
72
+ } as const;
73
+
74
+ /**
75
+ * Derive a deterministic wallet from a username + password using PBKDF2
76
+ * (10,000 iterations of SHA-256, salt = username, output = 32 bytes).
77
+ *
78
+ * Uses @noble/hashes pure-JS implementation rather than `crypto.subtle`
79
+ * because Hermes / expo-standard-web-crypto don't polyfill subtle. Still
80
+ * async-returning so callers don't depend on the implementation detail.
81
+ *
82
+ * The same credentials always produce the same wallet on every device,
83
+ * which is how Sogni's username+password login works without ever
84
+ * transmitting or storing the password server-side.
85
+ */
86
+ export async function deriveWallet(input: { username: string; password: string }): Promise<Wallet> {
87
+ const { username, password } = input;
88
+ if (!username || !password) {
89
+ throw new Error('deriveWallet requires both username and password');
90
+ }
91
+ const passwordBytes = new TextEncoder().encode(password);
92
+ const saltBytes = new TextEncoder().encode(username);
93
+ const bits = pbkdf2(sha256, passwordBytes, saltBytes, { c: 10000, dkLen: 32 });
94
+ const privateKey = bytesToHex(bits);
95
+ const account = privateKeyToAccount(privateKey);
96
+ return { privateKey, address: account.address };
97
+ }
98
+
99
+ /** Generate a fresh random wallet (uses crypto.getRandomValues internally). */
100
+ export function createRandomWallet(): Wallet {
101
+ const privateKey = generatePrivateKey();
102
+ const account = privateKeyToAccount(privateKey);
103
+ return { privateKey, address: account.address };
104
+ }
105
+
106
+ /**
107
+ * Sign the Authentication EIP-712 message used by `/v1/account/login` and
108
+ * other authenticated REST endpoints.
109
+ */
110
+ export async function signAuthentication(
111
+ wallet: Wallet,
112
+ params: { nonce: string },
113
+ network: WalletNetwork = 'mainnet'
114
+ ): Promise<Hex> {
115
+ const account = privateKeyToAccount(wallet.privateKey);
116
+ return account.signTypedData({
117
+ domain: getDomain(network),
118
+ types: AUTH_TYPES,
119
+ primaryType: 'Authentication',
120
+ message: { walletAddress: wallet.address, nonce: params.nonce }
121
+ });
122
+ }
123
+
124
+ /**
125
+ * Sign the Signup EIP-712 message used by `/v1/account/create`. The
126
+ * `subscribe` boolean is encoded as a uint256 (0/1) on the wire.
127
+ */
128
+ export async function signSignup(
129
+ wallet: Wallet,
130
+ params: {
131
+ appid: string;
132
+ username: string;
133
+ email: string;
134
+ subscribe: boolean;
135
+ nonce: string;
136
+ },
137
+ network: WalletNetwork = 'mainnet'
138
+ ): Promise<Hex> {
139
+ const account = privateKeyToAccount(wallet.privateKey);
140
+ return account.signTypedData({
141
+ domain: getDomain(network),
142
+ types: SIGNUP_TYPES,
143
+ primaryType: 'Signup',
144
+ message: {
145
+ appid: params.appid,
146
+ username: params.username,
147
+ email: params.email,
148
+ subscribe: BigInt(params.subscribe ? 1 : 0),
149
+ walletAddress: wallet.address,
150
+ nonce: params.nonce
151
+ }
152
+ });
153
+ }
154
+
155
+ function bytesToHex(bytes: Uint8Array): Hex {
156
+ const hex = Array.from(bytes, (b) => b.toString(16).padStart(2, '0')).join('');
157
+ return `0x${hex}` as Hex;
158
+ }