@polkahub/read-only 0.1.0-pre.3 → 0.1.0-pre.7

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.
@@ -8,19 +8,22 @@ import { useContext, useState } from 'react';
8
8
  import { readOnlyProviderId } from './provider.js';
9
9
 
10
10
  const ManageReadOnly = () => {
11
- const { setContent } = useContext(ModalContext);
11
+ const { pushContent } = useContext(ModalContext);
12
12
  const readOnlyProvider = usePlugin(readOnlyProviderId);
13
13
  return /* @__PURE__ */ jsx(
14
14
  SourceButton,
15
15
  {
16
16
  label: "Address",
17
- onClick: () => setContent(/* @__PURE__ */ jsx(ManageAddresses, { onClose: () => setContent(null) })),
17
+ onClick: () => pushContent({
18
+ title: "Read-only accounts",
19
+ element: /* @__PURE__ */ jsx(ManageAddresses, {})
20
+ }),
18
21
  disabled: !readOnlyProvider,
19
22
  children: /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Eye, { className: "size-10" }) })
20
23
  }
21
24
  );
22
25
  };
23
- const ManageAddresses = ({ onClose }) => {
26
+ const ManageAddresses = () => {
24
27
  const [addressInput, setAddressInput] = useState("");
25
28
  const availableAccounts = useAvailableAccounts();
26
29
  const readOnlyProvider = usePlugin(readOnlyProviderId);
@@ -87,8 +90,7 @@ const ManageAddresses = ({ onClose }) => {
87
90
  }
88
91
  ) : null
89
92
  ] }, i)) })
90
- ] }) : null,
91
- /* @__PURE__ */ jsx(Button, { onClick: onClose, variant: "secondary", type: "button", children: "Back" })
93
+ ] }) : null
92
94
  ] });
93
95
  };
94
96
 
@@ -1 +1 @@
1
- {"version":3,"file":"ManageReadOnly.js","sources":["../src/ManageReadOnly.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useAvailableAccounts,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport { Button, Input, SourceButton } from \"@polkahub/ui-components\";\nimport { Eye, Trash2 } from \"lucide-react\";\nimport { getSs58AddressInfo } from \"polkadot-api\";\nimport { useContext, useState, type FC } from \"react\";\nimport { ReadOnlyProvider, readOnlyProviderId } from \"./provider\";\n\nexport const ManageReadOnly: FC = () => {\n const { setContent } = useContext(ModalContext)!;\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId);\n\n return (\n <SourceButton\n label=\"Address\"\n onClick={() =>\n setContent(<ManageAddresses onClose={() => setContent(null)} />)\n }\n disabled={!readOnlyProvider}\n >\n <div>\n <Eye className=\"size-10\" />\n </div>\n </SourceButton>\n );\n};\n\nconst ManageAddresses: FC<{\n onClose: () => void;\n}> = ({ onClose }) => {\n const [addressInput, setAddressInput] = useState(\"\");\n const availableAccounts = useAvailableAccounts();\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId)!;\n const readOnlyAccounts = availableAccounts[readOnlyProviderId] ?? [];\n const setAccount = useSetSelectedAccount();\n\n const isAddrValid = (() => {\n try {\n return getSs58AddressInfo(addressInput).isValid;\n } catch {\n return false;\n }\n })();\n\n return (\n <div className=\"space-y-4\">\n <form\n onSubmit={(evt) => {\n evt.preventDefault();\n if (!isAddrValid) return;\n const added = readOnlyProvider.addAccount(addressInput);\n\n setAccount?.(added);\n setAddressInput(\"\");\n }}\n >\n <h3 className=\"font-medium text-muted-foreground\">\n Add read-only address\n </h3>\n <div className=\"flex gap-2 items-center\">\n <Input\n name=\"address\"\n value={addressInput}\n onChange={(evt) => setAddressInput(evt.target.value)}\n />\n <Button disabled={!isAddrValid}>Add</Button>\n </div>\n </form>\n {readOnlyAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {readOnlyAccounts.map((account, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() =>\n readOnlyProvider.removeAccount(account.address)\n }\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={account.address} />\n <div className=\"grow\" />\n <AddressBalance addr={account.address} />\n {setAccount ? (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(account);\n }}\n >\n Select\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n <Button onClick={onClose} variant=\"secondary\" type=\"button\">\n Back\n </Button>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ManageReadOnly.js","sources":["../src/ManageReadOnly.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n ModalContext,\n useAvailableAccounts,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport { Button, Input, SourceButton } from \"@polkahub/ui-components\";\nimport { Eye, Trash2 } from \"lucide-react\";\nimport { getSs58AddressInfo } from \"polkadot-api\";\nimport { useContext, useState, type FC } from \"react\";\nimport { ReadOnlyProvider, readOnlyProviderId } from \"./provider\";\n\nexport const ManageReadOnly: FC = () => {\n const { pushContent } = useContext(ModalContext)!;\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId);\n\n return (\n <SourceButton\n label=\"Address\"\n onClick={() =>\n pushContent({\n title: \"Read-only accounts\",\n element: <ManageAddresses />,\n })\n }\n disabled={!readOnlyProvider}\n >\n <div>\n <Eye className=\"size-10\" />\n </div>\n </SourceButton>\n );\n};\n\nconst ManageAddresses = () => {\n const [addressInput, setAddressInput] = useState(\"\");\n const availableAccounts = useAvailableAccounts();\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId)!;\n const readOnlyAccounts = availableAccounts[readOnlyProviderId] ?? [];\n const setAccount = useSetSelectedAccount();\n\n const isAddrValid = (() => {\n try {\n return getSs58AddressInfo(addressInput).isValid;\n } catch {\n return false;\n }\n })();\n\n return (\n <div className=\"space-y-4\">\n <form\n onSubmit={(evt) => {\n evt.preventDefault();\n if (!isAddrValid) return;\n const added = readOnlyProvider.addAccount(addressInput);\n\n setAccount?.(added);\n setAddressInput(\"\");\n }}\n >\n <h3 className=\"font-medium text-muted-foreground\">\n Add read-only address\n </h3>\n <div className=\"flex gap-2 items-center\">\n <Input\n name=\"address\"\n value={addressInput}\n onChange={(evt) => setAddressInput(evt.target.value)}\n />\n <Button disabled={!isAddrValid}>Add</Button>\n </div>\n </form>\n {readOnlyAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {readOnlyAccounts.map((account, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() =>\n readOnlyProvider.removeAccount(account.address)\n }\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={account.address} />\n <div className=\"grow\" />\n <AddressBalance addr={account.address} />\n {setAccount ? (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(account);\n }}\n >\n Select\n </Button>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import {\n Account,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, withDefault } from \"@react-rxjs/core\";\nimport { AccountId, SS58String } from \"polkadot-api\";\nimport { getPolkadotSigner } from \"polkadot-api/signer\";\nimport { map } from \"rxjs\";\n\nexport const readOnlyProviderId = \"readonly\";\nexport interface ReadOnlyProvider extends Plugin {\n id: \"readonly\";\n accounts$: DefaultedStateObservable<Account[]>;\n setAccounts: (payload: SS58String[]) => void;\n addAccount: (address: SS58String) => Account;\n removeAccount: (address: SS58String) => void;\n toAccount: (address: SS58String) => Account;\n}\n\nexport const createReadOnlyProvider = (\n opts?: Partial<{\n fakeSigner: boolean;\n persist: PersistenceProvider;\n }>\n): ReadOnlyProvider => {\n const { fakeSigner, persist } = {\n fakeSigner: false,\n persist: localStorageProvider(\"readonly-accounts\"),\n ...opts,\n };\n\n const [persistedAccounts$, setPersistedAccounts] = persistedState(\n persist,\n [] as SS58String[]\n );\n\n const getAccount = (address: SS58String): Account => ({\n provider: readOnlyProviderId,\n address,\n signer: fakeSigner ? createFakeSigner(address) : undefined,\n });\n\n const accounts$ = persistedAccounts$.pipeState(\n map((accounts) => accounts.map(getAccount)),\n withDefault([])\n );\n\n return {\n id: readOnlyProviderId,\n deserialize: (acc) => getAccount(acc.address),\n accounts$,\n setAccounts: setPersistedAccounts,\n addAccount: (addr) => {\n setPersistedAccounts((v) => {\n const set = new Set(v);\n set.add(addr);\n return [...set];\n });\n return getAccount(addr);\n },\n removeAccount: (addr) =>\n setPersistedAccounts((v) => v.filter((acc) => acc !== addr)),\n toAccount: getAccount,\n };\n};\n\nconst createFakeSigner = (address: SS58String) =>\n getPolkadotSigner(AccountId().enc(address)!, \"Sr25519\", () => {\n // From https://wiki.acala.network/build/sdks/homa\n const signature = new Uint8Array(64);\n signature.fill(0xcd);\n signature.set([0xde, 0xad, 0xbe, 0xef]);\n return signature;\n });\n"],"names":[],"mappings":";;;;;;AAYO,MAAM,kBAAA,GAAqB;AAU3B,MAAM,sBAAA,GAAyB,CACpC,IAAA,KAIqB;AACrB,EAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI;AAAA,IAC9B,UAAA,EAAY,KAAA;AAAA,IACZ,OAAA,EAAS,qBAAqB,mBAAmB,CAAA;AAAA,IACjD,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,CAAC,kBAAA,EAAoB,oBAAoB,CAAA,GAAI,cAAA;AAAA,IACjD,OAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,MAAkC;AAAA,IACpD,QAAA,EAAU,kBAAA;AAAA,IACV,OAAA;AAAA,IACA,MAAA,EAAQ,UAAA,GAAa,gBAAA,CAAiB,OAAO,CAAA,GAAI;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,YAAY,kBAAA,CAAmB,SAAA;AAAA,IACnC,IAAI,CAAC,QAAA,KAAa,QAAA,CAAS,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,IAC1C,WAAA,CAAY,EAAE;AAAA,GAChB;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,WAAA,EAAa,CAAC,GAAA,KAAQ,UAAA,CAAW,IAAI,OAAO,CAAA;AAAA,IAC5C,SAAA;AAAA,IACA,WAAA,EAAa,oBAAA;AAAA,IACb,UAAA,EAAY,CAAC,IAAA,KAAS;AACpB,MAAA,oBAAA,CAAqB,CAAC,CAAA,KAAM;AAC1B,QAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAC,CAAA;AACrB,QAAA,GAAA,CAAI,IAAI,IAAI,CAAA;AACZ,QAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAAA,MAChB,CAAC,CAAA;AACD,MAAA,OAAO,WAAW,IAAI,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,IAAA,KACd,oBAAA,CAAqB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,KAAQ,IAAI,CAAC,CAAA;AAAA,IAC7D,SAAA,EAAW;AAAA,GACb;AACF;AAEA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KACxB,iBAAA,CAAkB,SAAA,GAAY,GAAA,CAAI,OAAO,CAAA,EAAI,SAAA,EAAW,MAAM;AAE5D,EAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,EAAE,CAAA;AACnC,EAAA,SAAA,CAAU,KAAK,GAAI,CAAA;AACnB,EAAA,SAAA,CAAU,IAAI,CAAC,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;AACtC,EAAA,OAAO,SAAA;AACT,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import {\n Account,\n AccountAddress,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, withDefault } from \"@react-rxjs/core\";\nimport { AccountId } from \"polkadot-api\";\nimport { getPolkadotSigner } from \"polkadot-api/signer\";\nimport { map } from \"rxjs\";\n\nexport const readOnlyProviderId = \"readonly\";\nexport interface ReadOnlyProvider extends Plugin {\n id: \"readonly\";\n accounts$: DefaultedStateObservable<Account[]>;\n setAccounts: (payload: AccountAddress[]) => void;\n addAccount: (address: AccountAddress) => Account;\n removeAccount: (address: AccountAddress) => void;\n toAccount: (address: AccountAddress) => Account;\n}\n\nexport const createReadOnlyProvider = (\n opts?: Partial<{\n fakeSigner: boolean;\n persist: PersistenceProvider;\n }>\n): ReadOnlyProvider => {\n const { fakeSigner, persist } = {\n fakeSigner: false,\n persist: localStorageProvider(\"readonly-accounts\"),\n ...opts,\n };\n\n const [persistedAccounts$, setPersistedAccounts] = persistedState(\n persist,\n [] as AccountAddress[]\n );\n\n const getAccount = (address: AccountAddress): Account => ({\n provider: readOnlyProviderId,\n address,\n signer: fakeSigner ? createFakeSigner(address) : undefined,\n });\n\n const accounts$ = persistedAccounts$.pipeState(\n map((accounts) => accounts.map(getAccount)),\n withDefault([])\n );\n\n return {\n id: readOnlyProviderId,\n deserialize: (acc) => getAccount(acc.address),\n accounts$,\n setAccounts: setPersistedAccounts,\n addAccount: (addr) => {\n setPersistedAccounts((v) => {\n const set = new Set(v);\n set.add(addr);\n return [...set];\n });\n return getAccount(addr);\n },\n removeAccount: (addr) =>\n setPersistedAccounts((v) => v.filter((acc) => acc !== addr)),\n toAccount: getAccount,\n };\n};\n\nconst createFakeSigner = (address: AccountAddress) =>\n getPolkadotSigner(AccountId().enc(address)!, \"Sr25519\", () => {\n // From https://wiki.acala.network/build/sdks/homa\n const signature = new Uint8Array(64);\n signature.fill(0xcd);\n signature.set([0xde, 0xad, 0xbe, 0xef]);\n return signature;\n });\n"],"names":[],"mappings":";;;;;;AAaO,MAAM,kBAAA,GAAqB;AAU3B,MAAM,sBAAA,GAAyB,CACpC,IAAA,KAIqB;AACrB,EAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAQ,GAAI;AAAA,IAC9B,UAAA,EAAY,KAAA;AAAA,IACZ,OAAA,EAAS,qBAAqB,mBAAmB,CAAA;AAAA,IACjD,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,CAAC,kBAAA,EAAoB,oBAAoB,CAAA,GAAI,cAAA;AAAA,IACjD,OAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,OAAA,MAAsC;AAAA,IACxD,QAAA,EAAU,kBAAA;AAAA,IACV,OAAA;AAAA,IACA,MAAA,EAAQ,UAAA,GAAa,gBAAA,CAAiB,OAAO,CAAA,GAAI;AAAA,GACnD,CAAA;AAEA,EAAA,MAAM,YAAY,kBAAA,CAAmB,SAAA;AAAA,IACnC,IAAI,CAAC,QAAA,KAAa,QAAA,CAAS,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,IAC1C,WAAA,CAAY,EAAE;AAAA,GAChB;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,WAAA,EAAa,CAAC,GAAA,KAAQ,UAAA,CAAW,IAAI,OAAO,CAAA;AAAA,IAC5C,SAAA;AAAA,IACA,WAAA,EAAa,oBAAA;AAAA,IACb,UAAA,EAAY,CAAC,IAAA,KAAS;AACpB,MAAA,oBAAA,CAAqB,CAAC,CAAA,KAAM;AAC1B,QAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAC,CAAA;AACrB,QAAA,GAAA,CAAI,IAAI,IAAI,CAAA;AACZ,QAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAAA,MAChB,CAAC,CAAA;AACD,MAAA,OAAO,WAAW,IAAI,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,IAAA,KACd,oBAAA,CAAqB,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,KAAQ,IAAI,CAAC,CAAA;AAAA,IAC7D,SAAA,EAAW;AAAA,GACb;AACF;AAEA,MAAM,gBAAA,GAAmB,CAAC,OAAA,KACxB,iBAAA,CAAkB,SAAA,GAAY,GAAA,CAAI,OAAO,CAAA,EAAI,SAAA,EAAW,MAAM;AAE5D,EAAA,MAAM,SAAA,GAAY,IAAI,UAAA,CAAW,EAAE,CAAA;AACnC,EAAA,SAAA,CAAU,KAAK,GAAI,CAAA;AACnB,EAAA,SAAA,CAAU,IAAI,CAAC,GAAA,EAAM,GAAA,EAAM,GAAA,EAAM,GAAI,CAAC,CAAA;AACtC,EAAA,OAAO,SAAA;AACT,CAAC,CAAA;;;;"}
@@ -1,7 +1,6 @@
1
1
  import { FC } from 'react';
2
- import { Plugin, Account, PersistenceProvider } from '@polkahub/plugin';
2
+ import { Plugin, Account, AccountAddress, PersistenceProvider } from '@polkahub/plugin';
3
3
  import { DefaultedStateObservable } from '@react-rxjs/core';
4
- import { SS58String } from 'polkadot-api';
5
4
 
6
5
  declare const ManageReadOnly: FC;
7
6
 
@@ -9,10 +8,10 @@ declare const readOnlyProviderId = "readonly";
9
8
  interface ReadOnlyProvider extends Plugin {
10
9
  id: "readonly";
11
10
  accounts$: DefaultedStateObservable<Account[]>;
12
- setAccounts: (payload: SS58String[]) => void;
13
- addAccount: (address: SS58String) => Account;
14
- removeAccount: (address: SS58String) => void;
15
- toAccount: (address: SS58String) => Account;
11
+ setAccounts: (payload: AccountAddress[]) => void;
12
+ addAccount: (address: AccountAddress) => Account;
13
+ removeAccount: (address: AccountAddress) => void;
14
+ toAccount: (address: AccountAddress) => Account;
16
15
  }
17
16
  declare const createReadOnlyProvider: (opts?: Partial<{
18
17
  fakeSigner: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkahub/read-only",
3
- "version": "0.1.0-pre.3",
3
+ "version": "0.1.0-pre.7",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -27,13 +27,13 @@
27
27
  "@polkadot-api/substrate-bindings": "^0.16.4",
28
28
  "@react-rxjs/core": "^0.10.8",
29
29
  "@react-rxjs/utils": "^0.9.7",
30
- "lucide-react": "^0.548.0",
31
- "polkadot-api": "^1.20.0",
30
+ "lucide-react": "^0.552.0",
31
+ "polkadot-api": "^1.20.1",
32
32
  "rxjs": "^7.8.2",
33
- "@polkahub/context": "0.1.0-pre.3",
34
- "@polkahub/plugin": "0.1.0-pre.3",
35
- "@polkahub/ui-components": "0.1.0-pre.3",
36
- "@polkahub/select-account": "0.1.0-pre.3"
33
+ "@polkahub/context": "0.1.0-pre.7",
34
+ "@polkahub/plugin": "0.1.0-pre.7",
35
+ "@polkahub/select-account": "0.1.0-pre.7",
36
+ "@polkahub/ui-components": "0.1.0-pre.7"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@types/react": "^19.2.2",