@polkahub/proxy 0.1.0 → 0.2.2

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 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 === b.address && a.info.parentSigner?.address === b.info.parentSigner?.address,
48
+ eq: (a, b) => addrEq(a.address, b.address) && addrEq(a.info.parentSigner?.address, b.info.parentSigner?.address),
49
49
  accounts$,
50
- receivePlugins: (plugins) => plugins$.next(plugins),
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 === proxy.real && v.parentSigner.address === proxy.parentSigner.address
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 === proxy.real && v.parentSigner.address === proxy.parentSigner.address)
65
+ (v) => !(addrEq(v.real, proxy.real) && addrEq(v.parentSigner.address, proxy.parentSigner.address))
66
66
  )
67
67
  )
68
68
  };
@@ -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 === b.address &&\n a.info.parentSigner?.address === b.info.parentSigner?.address,\n accounts$,\n receivePlugins: (plugins) => plugins$.next(plugins),\n subscription$: accounts$,\n setProxies: setPersistedAccounts,\n addProxy: (proxy) => {\n setPersistedAccounts((prev) => {\n if (\n prev.some(\n (v) =>\n v.real === proxy.real &&\n 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 v.real === proxy.real &&\n v.parentSigner.address === proxy.parentSigner.address\n )\n )\n ),\n };\n};\n"],"names":["v"],"mappings":"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"}
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.1.0",
3
+ "version": "0.2.2",
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.1.0"
29
+ "@polkahub/plugin": "0.2.2"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "@types/react": "^19.2.2",