accounts 0.3.0 → 0.4.1

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 (168) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/LICENSE +21 -0
  3. package/README.md +97 -0
  4. package/dist/core/AccessKey.d.ts +55 -0
  5. package/dist/core/AccessKey.d.ts.map +1 -0
  6. package/dist/core/AccessKey.js +69 -0
  7. package/dist/core/AccessKey.js.map +1 -0
  8. package/dist/core/Account.d.ts +91 -0
  9. package/dist/core/Account.d.ts.map +1 -0
  10. package/dist/core/Account.js +64 -0
  11. package/dist/core/Account.js.map +1 -0
  12. package/dist/core/Adapter.d.ts +187 -0
  13. package/dist/core/Adapter.d.ts.map +1 -0
  14. package/dist/core/Adapter.js +7 -0
  15. package/dist/core/Adapter.js.map +1 -0
  16. package/dist/core/Ceremony.d.ts +109 -0
  17. package/dist/core/Ceremony.d.ts.map +1 -0
  18. package/dist/core/Ceremony.js +104 -0
  19. package/dist/core/Ceremony.js.map +1 -0
  20. package/dist/core/Client.d.ts +16 -0
  21. package/dist/core/Client.d.ts.map +1 -0
  22. package/dist/core/Client.js +18 -0
  23. package/dist/core/Client.js.map +1 -0
  24. package/dist/core/Dialog.d.ts +52 -0
  25. package/dist/core/Dialog.d.ts.map +1 -0
  26. package/dist/core/Dialog.js +342 -0
  27. package/dist/core/Dialog.js.map +1 -0
  28. package/dist/core/Expiry.d.ts +15 -0
  29. package/dist/core/Expiry.d.ts.map +1 -0
  30. package/dist/core/Expiry.js +29 -0
  31. package/dist/core/Expiry.js.map +1 -0
  32. package/dist/core/Messenger.d.ts +86 -0
  33. package/dist/core/Messenger.d.ts.map +1 -0
  34. package/dist/core/Messenger.js +127 -0
  35. package/dist/core/Messenger.js.map +1 -0
  36. package/dist/core/Provider.d.ts +69 -0
  37. package/dist/core/Provider.d.ts.map +1 -0
  38. package/dist/core/Provider.js +401 -0
  39. package/dist/core/Provider.js.map +1 -0
  40. package/dist/core/Remote.d.ts +114 -0
  41. package/dist/core/Remote.d.ts.map +1 -0
  42. package/dist/core/Remote.js +116 -0
  43. package/dist/core/Remote.js.map +1 -0
  44. package/dist/core/Schema.d.ts +805 -0
  45. package/dist/core/Schema.d.ts.map +1 -0
  46. package/dist/core/Schema.js +43 -0
  47. package/dist/core/Schema.js.map +1 -0
  48. package/dist/core/Storage.d.ts +42 -0
  49. package/dist/core/Storage.d.ts.map +1 -0
  50. package/dist/core/Storage.js +173 -0
  51. package/dist/core/Storage.js.map +1 -0
  52. package/dist/core/Store.d.ts +58 -0
  53. package/dist/core/Store.d.ts.map +1 -0
  54. package/dist/core/Store.js +58 -0
  55. package/dist/core/Store.js.map +1 -0
  56. package/dist/core/adapters/dangerous_secp256k1.d.ts +30 -0
  57. package/dist/core/adapters/dangerous_secp256k1.d.ts.map +1 -0
  58. package/dist/core/adapters/dangerous_secp256k1.js +39 -0
  59. package/dist/core/adapters/dangerous_secp256k1.js.map +1 -0
  60. package/dist/core/adapters/dialog.d.ts +31 -0
  61. package/dist/core/adapters/dialog.d.ts.map +1 -0
  62. package/dist/core/adapters/dialog.js +306 -0
  63. package/dist/core/adapters/dialog.js.map +1 -0
  64. package/dist/core/adapters/local.d.ts +33 -0
  65. package/dist/core/adapters/local.d.ts.map +1 -0
  66. package/dist/core/adapters/local.js +227 -0
  67. package/dist/core/adapters/local.js.map +1 -0
  68. package/dist/core/adapters/webAuthn.d.ts +36 -0
  69. package/dist/core/adapters/webAuthn.d.ts.map +1 -0
  70. package/dist/core/adapters/webAuthn.js +93 -0
  71. package/dist/core/adapters/webAuthn.js.map +1 -0
  72. package/dist/core/internal/withDedupe.d.ts +12 -0
  73. package/dist/core/internal/withDedupe.d.ts.map +1 -0
  74. package/dist/core/internal/withDedupe.js +12 -0
  75. package/dist/core/internal/withDedupe.js.map +1 -0
  76. package/dist/core/zod/request.d.ts +31 -0
  77. package/dist/core/zod/request.d.ts.map +1 -0
  78. package/dist/core/zod/request.js +41 -0
  79. package/dist/core/zod/request.js.map +1 -0
  80. package/dist/core/zod/rpc.d.ts +603 -0
  81. package/dist/core/zod/rpc.d.ts.map +1 -0
  82. package/dist/core/zod/rpc.js +293 -0
  83. package/dist/core/zod/rpc.js.map +1 -0
  84. package/dist/core/zod/utils.d.ts +18 -0
  85. package/dist/core/zod/utils.d.ts.map +1 -0
  86. package/dist/core/zod/utils.js +21 -0
  87. package/dist/core/zod/utils.js.map +1 -0
  88. package/dist/index.d.ts +15 -0
  89. package/dist/index.d.ts.map +1 -0
  90. package/dist/index.js +15 -0
  91. package/dist/index.js.map +1 -0
  92. package/dist/internal/types.d.ts +284 -0
  93. package/dist/internal/types.d.ts.map +1 -0
  94. package/dist/internal/types.js +2 -0
  95. package/dist/internal/types.js.map +1 -0
  96. package/dist/server/Handler.d.ts +257 -0
  97. package/dist/server/Handler.d.ts.map +1 -0
  98. package/dist/server/Handler.js +433 -0
  99. package/dist/server/Handler.js.map +1 -0
  100. package/dist/server/Kv.d.ts +16 -0
  101. package/dist/server/Kv.d.ts.map +1 -0
  102. package/dist/server/Kv.js +30 -0
  103. package/dist/server/Kv.js.map +1 -0
  104. package/dist/server/index.d.ts +3 -0
  105. package/dist/server/index.d.ts.map +1 -0
  106. package/dist/server/index.js +3 -0
  107. package/dist/server/index.js.map +1 -0
  108. package/dist/server/internal/requestListener.d.ts +124 -0
  109. package/dist/server/internal/requestListener.d.ts.map +1 -0
  110. package/dist/server/internal/requestListener.js +173 -0
  111. package/dist/server/internal/requestListener.js.map +1 -0
  112. package/dist/wagmi/Connector.d.ts +93 -0
  113. package/dist/wagmi/Connector.d.ts.map +1 -0
  114. package/dist/wagmi/Connector.js +238 -0
  115. package/dist/wagmi/Connector.js.map +1 -0
  116. package/dist/wagmi/index.d.ts +3 -0
  117. package/dist/wagmi/index.d.ts.map +1 -0
  118. package/dist/wagmi/index.js +3 -0
  119. package/dist/wagmi/index.js.map +1 -0
  120. package/package.json +56 -2
  121. package/src/core/AccessKey.test.ts +257 -0
  122. package/src/core/AccessKey.ts +123 -0
  123. package/src/core/Account.test.ts +309 -0
  124. package/src/core/Account.ts +152 -0
  125. package/src/core/Adapter.ts +238 -0
  126. package/src/core/Ceremony.browser.test.ts +239 -0
  127. package/src/core/Ceremony.test.ts +151 -0
  128. package/src/core/Ceremony.ts +203 -0
  129. package/src/core/Client.ts +36 -0
  130. package/src/core/Dialog.browser.test.ts +309 -0
  131. package/src/core/Dialog.test-d.ts +19 -0
  132. package/src/core/Dialog.ts +442 -0
  133. package/src/core/Expiry.ts +34 -0
  134. package/src/core/Messenger.ts +206 -0
  135. package/src/core/Provider.browser.test.ts +774 -0
  136. package/src/core/Provider.connect.browser.test.ts +415 -0
  137. package/src/core/Provider.test-d.ts +53 -0
  138. package/src/core/Provider.test.ts +1566 -0
  139. package/src/core/Provider.ts +559 -0
  140. package/src/core/Remote.ts +262 -0
  141. package/src/core/Schema.test-d.ts +211 -0
  142. package/src/core/Schema.ts +143 -0
  143. package/src/core/Storage.ts +213 -0
  144. package/src/core/Store.test.ts +287 -0
  145. package/src/core/Store.ts +129 -0
  146. package/src/core/adapters/dangerous_secp256k1.ts +53 -0
  147. package/src/core/adapters/dialog.ts +379 -0
  148. package/src/core/adapters/local.test.ts +97 -0
  149. package/src/core/adapters/local.ts +277 -0
  150. package/src/core/adapters/webAuthn.ts +129 -0
  151. package/src/core/internal/withDedupe.test.ts +116 -0
  152. package/src/core/internal/withDedupe.ts +20 -0
  153. package/src/core/mppx.test.ts +83 -0
  154. package/src/core/zod/request.test.ts +121 -0
  155. package/src/core/zod/request.ts +70 -0
  156. package/src/core/zod/rpc.ts +374 -0
  157. package/src/core/zod/utils.test.ts +69 -0
  158. package/src/core/zod/utils.ts +40 -0
  159. package/src/index.ts +14 -0
  160. package/src/internal/types.ts +378 -0
  161. package/src/server/Handler.test.ts +1014 -0
  162. package/src/server/Handler.ts +605 -0
  163. package/src/server/Kv.ts +46 -0
  164. package/src/server/index.ts +2 -0
  165. package/src/server/internal/requestListener.ts +273 -0
  166. package/src/tsconfig.json +9 -0
  167. package/src/wagmi/Connector.ts +287 -0
  168. package/src/wagmi/index.ts +2 -0
@@ -0,0 +1,116 @@
1
+ import { Hex } from 'ox';
2
+ import * as Provider from 'ox/Provider';
3
+ import * as RpcResponse from 'ox/RpcResponse';
4
+ import { useStore } from 'zustand';
5
+ import { createStore } from 'zustand/vanilla';
6
+ /** Creates a remote context for the dialog app. */
7
+ export function create(options) {
8
+ const { messenger, provider } = options;
9
+ const ready = typeof window !== 'undefined' && !new URLSearchParams(window.location.search).get('mode');
10
+ const store = createStore(() => ({
11
+ mode: undefined,
12
+ origin: undefined,
13
+ ready,
14
+ requests: [],
15
+ }));
16
+ return {
17
+ messenger,
18
+ provider,
19
+ store,
20
+ onUserRequest(cb) {
21
+ return this.onRequests(async (requests, event, { account }) => {
22
+ // Sync the active account with the host.
23
+ if (account) {
24
+ const state = provider.store.getState();
25
+ const index = state.accounts.findIndex((a) => a.address.toLowerCase() === account.address.toLowerCase());
26
+ if (index >= 0 && index !== state.activeAccount)
27
+ provider.store.setState({ activeAccount: index });
28
+ }
29
+ const pending = requests.find((r) => r.status === 'pending');
30
+ store.setState({
31
+ origin: event.origin,
32
+ ready: false,
33
+ });
34
+ await cb({
35
+ account,
36
+ origin: event.origin,
37
+ request: pending?.request ?? null,
38
+ });
39
+ if (pending)
40
+ store.setState({ ready: true });
41
+ });
42
+ },
43
+ onRequests(cb) {
44
+ return messenger.on('rpc-requests', async (payload, event) => {
45
+ const { account, chainId, requests } = payload;
46
+ // Rehydrate persisted state so the iframe picks up accounts
47
+ // created in a popup (e.g. Safari WebAuthn fallback).
48
+ await provider.store.persist?.rehydrate();
49
+ store.setState({ requests });
50
+ if (provider.store.getState().chainId !== chainId)
51
+ provider.request({
52
+ method: 'wallet_switchEthereumChain',
53
+ params: [{ chainId: Hex.fromNumber(chainId) }],
54
+ });
55
+ cb(requests, event, { account });
56
+ });
57
+ },
58
+ ready() {
59
+ messenger.ready();
60
+ if (typeof window !== 'undefined') {
61
+ const params = new URLSearchParams(window.location.search);
62
+ const mode = params.get('mode');
63
+ const chainId = Number(params.get('chainId'));
64
+ if (mode)
65
+ store.setState({ mode });
66
+ if (chainId && provider.store.getState().chainId !== chainId)
67
+ provider.request({
68
+ method: 'wallet_switchEthereumChain',
69
+ params: [{ chainId: Hex.fromNumber(chainId) }],
70
+ });
71
+ }
72
+ },
73
+ reject(request, error) {
74
+ const error_ = error ?? new Provider.UserRejectedRequestError();
75
+ messenger.send('rpc-response', Object.assign(RpcResponse.from({
76
+ error: { code: error_.code, message: error_.message },
77
+ id: request.id,
78
+ jsonrpc: '2.0',
79
+ }), { _request: request }));
80
+ },
81
+ rejectAll(error) {
82
+ store.setState({ ready: false });
83
+ const requests = store.getState().requests;
84
+ for (const queued of requests)
85
+ this.reject(queued.request, error);
86
+ },
87
+ async respond(request, options = {}) {
88
+ const { error, selector } = options;
89
+ const shared = { id: request.id, jsonrpc: '2.0' };
90
+ if (error) {
91
+ messenger.send('rpc-response', Object.assign(RpcResponse.from({ ...shared, error, status: 'error' }), {
92
+ _request: request,
93
+ }));
94
+ return;
95
+ }
96
+ try {
97
+ let result = options.result ?? (await provider?.request(request));
98
+ if (selector)
99
+ result = selector(result);
100
+ messenger.send('rpc-response', Object.assign(RpcResponse.from({ ...shared, result }), { _request: request }));
101
+ return result;
102
+ }
103
+ catch (e) {
104
+ const err = e;
105
+ messenger.send('rpc-response', Object.assign(RpcResponse.from({ ...shared, error: err, status: 'error' }), {
106
+ _request: request,
107
+ }));
108
+ throw err;
109
+ }
110
+ },
111
+ };
112
+ }
113
+ export function useState(remote, selector) {
114
+ return useStore(remote.store, selector);
115
+ }
116
+ //# sourceMappingURL=Remote.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Remote.js","sourceRoot":"","sources":["../../src/core/Remote.ts"],"names":[],"mappings":"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"}