@polkahub/proxy 0.1.0-pre.8 → 0.2.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.
- package/dist/provider.js +5 -5
- package/dist/provider.js.map +1 -1
- package/package.json +2 -2
package/dist/provider.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getProxySigner } from '@polkadot-api/meta-signers';
|
|
2
|
-
import { localStorageProvider, persistedState } from '@polkahub/plugin';
|
|
2
|
+
import { localStorageProvider, persistedState, addrEq } from '@polkahub/plugin';
|
|
3
3
|
import { state } from '@react-rxjs/core';
|
|
4
4
|
import { BehaviorSubject, combineLatest, switchMap, map } from 'rxjs';
|
|
5
5
|
|
|
@@ -45,15 +45,15 @@ const createProxyProvider = (opts) => {
|
|
|
45
45
|
provider,
|
|
46
46
|
extra: info
|
|
47
47
|
}),
|
|
48
|
-
eq: (a, b) => a.address
|
|
48
|
+
eq: (a, b) => addrEq(a.address, b.address) && addrEq(a.info.parentSigner?.address, b.info.parentSigner?.address),
|
|
49
49
|
accounts$,
|
|
50
|
-
|
|
50
|
+
receiveContext: (ctx) => plugins$.next(ctx.plugins),
|
|
51
51
|
subscription$: accounts$,
|
|
52
52
|
setProxies: setPersistedAccounts,
|
|
53
53
|
addProxy: (proxy) => {
|
|
54
54
|
setPersistedAccounts((prev) => {
|
|
55
55
|
if (prev.some(
|
|
56
|
-
(v) => v.real
|
|
56
|
+
(v) => addrEq(v.real, proxy.real) && addrEq(v.parentSigner.address, proxy.parentSigner.address)
|
|
57
57
|
))
|
|
58
58
|
return prev;
|
|
59
59
|
return [...prev, proxy];
|
|
@@ -62,7 +62,7 @@ const createProxyProvider = (opts) => {
|
|
|
62
62
|
},
|
|
63
63
|
removeProxy: (proxy) => setPersistedAccounts(
|
|
64
64
|
(prev) => prev.filter(
|
|
65
|
-
(v) => !(v.real
|
|
65
|
+
(v) => !(addrEq(v.real, proxy.real) && addrEq(v.parentSigner.address, proxy.parentSigner.address))
|
|
66
66
|
)
|
|
67
67
|
)
|
|
68
68
|
};
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import { getProxySigner } from \"@polkadot-api/meta-signers\";\nimport {\n Account,\n AccountAddress,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n SerializableAccount,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, state } from \"@react-rxjs/core\";\nimport { PolkadotSigner } from \"polkadot-api\";\nimport { BehaviorSubject, combineLatest, map, switchMap } from \"rxjs\";\n\nexport interface ProxyInfo {\n real: AccountAddress;\n type?: {\n type: string;\n value?: unknown;\n };\n parentSigner: SerializableAccount;\n}\n\nexport interface ProxyAccount extends Account {\n provider: \"proxy\";\n info: ProxyInfo;\n}\n\nexport interface ProxyProvider extends Plugin<ProxyAccount> {\n id: \"proxy\";\n accounts$: DefaultedStateObservable<ProxyAccount[]>;\n\n setProxies: (proxies: ProxyInfo[]) => void;\n addProxy: (proxy: ProxyInfo) => Promise<ProxyAccount | null>;\n removeProxy: (proxy: ProxyInfo) => void;\n}\n\nexport const createProxyProvider = (\n opts?: Partial<{\n persist: PersistenceProvider;\n }>\n): ProxyProvider => {\n const { persist } = {\n persist: localStorageProvider(\"proxies\"),\n ...opts,\n };\n\n const [persistedAccounts$, setPersistedAccounts] = persistedState(\n persist,\n [] as ProxyInfo[]\n );\n const plugins$ = new BehaviorSubject<Plugin[]>([]);\n\n const getAccount = (\n info: ProxyInfo,\n parentSigner: PolkadotSigner\n ): ProxyAccount => ({\n provider: \"proxy\",\n address: info.real,\n signer: getProxySigner(info, parentSigner),\n info,\n });\n\n const proxyInfoToAccount = async (info: ProxyInfo) => {\n const plugins = plugins$.getValue();\n const plugin = plugins.find((p) => info.parentSigner?.provider === p.id);\n if (!plugin) return null;\n const parentSigner = await plugin.deserialize(info.parentSigner);\n if (!parentSigner?.signer) return null;\n return getAccount(info, parentSigner.signer);\n };\n\n const accounts$ = state(\n combineLatest([persistedAccounts$, plugins$]).pipe(\n switchMap(([accounts]) => Promise.all(accounts.map(proxyInfoToAccount))),\n map((v) => v.filter((v) => v !== null))\n ),\n []\n );\n\n return {\n id: \"proxy\",\n deserialize: (account) => {\n const extra = account.extra as ProxyInfo;\n return proxyInfoToAccount(extra);\n },\n serialize: ({ address, info, provider }) => ({\n address,\n provider,\n extra: info,\n }),\n eq: (a, b) =>\n a.address
|
|
1
|
+
{"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import { getProxySigner } from \"@polkadot-api/meta-signers\";\nimport {\n Account,\n AccountAddress,\n addrEq,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n SerializableAccount,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, state } from \"@react-rxjs/core\";\nimport { PolkadotSigner } from \"polkadot-api\";\nimport { BehaviorSubject, combineLatest, map, switchMap } from \"rxjs\";\n\nexport interface ProxyInfo {\n real: AccountAddress;\n type?: {\n type: string;\n value?: unknown;\n };\n parentSigner: SerializableAccount;\n}\n\nexport interface ProxyAccount extends Account {\n provider: \"proxy\";\n info: ProxyInfo;\n}\n\nexport interface ProxyProvider extends Plugin<ProxyAccount> {\n id: \"proxy\";\n accounts$: DefaultedStateObservable<ProxyAccount[]>;\n\n setProxies: (proxies: ProxyInfo[]) => void;\n addProxy: (proxy: ProxyInfo) => Promise<ProxyAccount | null>;\n removeProxy: (proxy: ProxyInfo) => void;\n}\n\nexport const createProxyProvider = (\n opts?: Partial<{\n persist: PersistenceProvider;\n }>\n): ProxyProvider => {\n const { persist } = {\n persist: localStorageProvider(\"proxies\"),\n ...opts,\n };\n\n const [persistedAccounts$, setPersistedAccounts] = persistedState(\n persist,\n [] as ProxyInfo[]\n );\n const plugins$ = new BehaviorSubject<Plugin[]>([]);\n\n const getAccount = (\n info: ProxyInfo,\n parentSigner: PolkadotSigner\n ): ProxyAccount => ({\n provider: \"proxy\",\n address: info.real,\n signer: getProxySigner(info, parentSigner),\n info,\n });\n\n const proxyInfoToAccount = async (info: ProxyInfo) => {\n const plugins = plugins$.getValue();\n const plugin = plugins.find((p) => info.parentSigner?.provider === p.id);\n if (!plugin) return null;\n const parentSigner = await plugin.deserialize(info.parentSigner);\n if (!parentSigner?.signer) return null;\n return getAccount(info, parentSigner.signer);\n };\n\n const accounts$ = state(\n combineLatest([persistedAccounts$, plugins$]).pipe(\n switchMap(([accounts]) => Promise.all(accounts.map(proxyInfoToAccount))),\n map((v) => v.filter((v) => v !== null))\n ),\n []\n );\n\n return {\n id: \"proxy\",\n deserialize: (account) => {\n const extra = account.extra as ProxyInfo;\n return proxyInfoToAccount(extra);\n },\n serialize: ({ address, info, provider }) => ({\n address,\n provider,\n extra: info,\n }),\n eq: (a, b) =>\n addrEq(a.address, b.address) &&\n addrEq(a.info.parentSigner?.address, b.info.parentSigner?.address),\n accounts$,\n receiveContext: (ctx) => plugins$.next(ctx.plugins),\n subscription$: accounts$,\n setProxies: setPersistedAccounts,\n addProxy: (proxy) => {\n setPersistedAccounts((prev) => {\n if (\n prev.some(\n (v) =>\n addrEq(v.real, proxy.real) &&\n addrEq(v.parentSigner.address, proxy.parentSigner.address)\n )\n )\n return prev;\n return [...prev, proxy];\n });\n return proxyInfoToAccount(proxy);\n },\n removeProxy: (proxy) =>\n setPersistedAccounts((prev) =>\n prev.filter(\n (v) =>\n !(\n addrEq(v.real, proxy.real) &&\n addrEq(v.parentSigner.address, proxy.parentSigner.address)\n )\n )\n ),\n };\n};\n"],"names":["v"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/proxy",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"type": "module",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@react-rxjs/utils": "^0.9.7",
|
|
27
27
|
"polkadot-api": "^1.20.1",
|
|
28
28
|
"rxjs": "^7.8.2",
|
|
29
|
-
"@polkahub/plugin": "0.
|
|
29
|
+
"@polkahub/plugin": "0.2.0"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"@types/react": "^19.2.2",
|