@polkahub/read-only 0.7.0 → 0.8.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/ManageReadOnly.js.map +1 -1
- package/dist/provider.js +6 -10
- package/dist/provider.js.map +1 -1
- package/dist/src/index.d.ts +6 -4
- package/package.json +11 -11
|
@@ -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\"
|
|
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 { AccountAddress } from \"@polkahub/plugin\"\nimport { useSetSelectedAccount } from \"@polkahub/select-account\"\nimport {\n Button,\n InlineAddressInput,\n Input,\n SourceButton,\n} from \"@polkahub/ui-components\"\nimport { Eye, Trash2 } from \"lucide-react\"\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 [address, setAddress] = useState<AccountAddress | null>(null)\n const [name, setName] = useState(\"\")\n const availableAccounts = useAvailableAccounts()\n const readOnlyProvider = usePlugin<ReadOnlyProvider>(readOnlyProviderId)!\n const readOnlyAccounts = availableAccounts[readOnlyProviderId] ?? []\n const setAccount = useSetSelectedAccount()\n\n return (\n <div className=\"space-y-4\">\n <form\n onSubmit={(evt) => {\n evt.preventDefault()\n if (!address) return\n readOnlyProvider.addAccount({ name, address })\n setAddress(null)\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 <InlineAddressInput\n name=\"address\"\n value={address}\n onChange={setAddress}\n className=\"shrink-[2]\"\n />\n <Input\n name=\"name\"\n value={name}\n onChange={(evt) => setName(evt.target.value)}\n placeholder=\"Name (optional)\"\n className=\"shrink-[3]\"\n />\n <Button disabled={!address}>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} name={account.name} />\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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"}
|
package/dist/provider.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { localStorageProvider, persistedState } from '@polkahub/plugin';
|
|
2
2
|
import { withDefault } from '@react-rxjs/core';
|
|
3
|
-
import {
|
|
4
|
-
import { getPolkadotSigner } from 'polkadot-api/signer';
|
|
3
|
+
import { getFakeTxCreator } from 'polkadot-api/tx-creator';
|
|
5
4
|
import { map } from 'rxjs';
|
|
6
5
|
|
|
7
6
|
const readOnlyProviderId = "readonly";
|
|
@@ -18,11 +17,14 @@ const createReadOnlyProvider = (opts) => {
|
|
|
18
17
|
const normalizeInfo = (value) => typeof value === "string" ? {
|
|
19
18
|
address: value
|
|
20
19
|
} : value;
|
|
21
|
-
const getAccount = ({
|
|
20
|
+
const getAccount = ({
|
|
21
|
+
address,
|
|
22
|
+
name
|
|
23
|
+
}) => ({
|
|
22
24
|
name,
|
|
23
25
|
provider: readOnlyProviderId,
|
|
24
26
|
address,
|
|
25
|
-
|
|
27
|
+
txCreator: fakeSigner ? getFakeTxCreator(address) : void 0
|
|
26
28
|
});
|
|
27
29
|
const accounts$ = persistedAccounts$.pipeState(
|
|
28
30
|
map((accounts) => accounts.map(normalizeInfo).map(getAccount)),
|
|
@@ -51,12 +53,6 @@ const createReadOnlyProvider = (opts) => {
|
|
|
51
53
|
})
|
|
52
54
|
};
|
|
53
55
|
};
|
|
54
|
-
const createFakeSigner = (address) => getPolkadotSigner(AccountId().enc(address), "Sr25519", () => {
|
|
55
|
-
const signature = new Uint8Array(64);
|
|
56
|
-
signature.fill(205);
|
|
57
|
-
signature.set([222, 173, 190, 239]);
|
|
58
|
-
return signature;
|
|
59
|
-
});
|
|
60
56
|
|
|
61
57
|
export { createReadOnlyProvider, readOnlyProviderId };
|
|
62
58
|
//# sourceMappingURL=provider.js.map
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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\"
|
|
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 { getFakeTxCreator, RawTxCreator } from \"polkadot-api/tx-creator\"\nimport { map } from \"rxjs\"\n\nexport interface ReadonlyAccountInfo {\n address: AccountAddress\n name?: string\n}\n\nexport const readOnlyProviderId = \"readonly\"\ntype ReadOnlyAccount = Account<RawTxCreator>\nexport interface ReadOnlyProvider extends Plugin<ReadOnlyAccount> {\n id: \"readonly\"\n accounts$: DefaultedStateObservable<ReadOnlyAccount[]>\n setAccounts: (payload: ReadonlyAccountInfo[]) => void\n addAccount: (address: ReadonlyAccountInfo) => ReadOnlyAccount\n removeAccount: (address: AccountAddress) => void\n toAccount: (address: AccountAddress) => ReadOnlyAccount\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 Array<AccountAddress> | Array<ReadonlyAccountInfo>,\n )\n const normalizeInfo = (\n value: AccountAddress | ReadonlyAccountInfo,\n ): ReadonlyAccountInfo =>\n typeof value === \"string\"\n ? {\n address: value,\n }\n : value\n\n const getAccount = ({\n address,\n name,\n }: ReadonlyAccountInfo): ReadOnlyAccount => ({\n name,\n provider: readOnlyProviderId,\n address,\n txCreator: fakeSigner ? getFakeTxCreator(address) : undefined,\n })\n\n const accounts$ = persistedAccounts$.pipeState(\n map((accounts) => accounts.map(normalizeInfo).map(getAccount)),\n withDefault([]),\n )\n\n return {\n id: readOnlyProviderId,\n deserialize: (acc) => getAccount(acc),\n accounts$,\n setAccounts: setPersistedAccounts,\n addAccount: (acc) => {\n setPersistedAccounts((v) => {\n const map = new Map(\n v.map(normalizeInfo).map((acc) => [acc.address, acc]),\n )\n map.set(acc.address, acc)\n return [...map.values()]\n })\n return getAccount(acc)\n },\n removeAccount: (addr) =>\n setPersistedAccounts(\n (v) =>\n v.filter((acc) => normalizeInfo(acc).address !== addr) as\n | ReadonlyAccountInfo[]\n | AccountAddress[],\n ),\n toAccount: (address) =>\n getAccount({\n address,\n }),\n }\n}\n"],"names":["map","acc"],"mappings":";;;;;AAiBO,MAAM,kBAAA,GAAqB;AAW3B,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;AACA,EAAA,MAAM,aAAA,GAAgB,CACpB,KAAA,KAEA,OAAO,UAAU,QAAA,GACb;AAAA,IACE,OAAA,EAAS;AAAA,GACX,GACA,KAAA;AAEN,EAAA,MAAM,aAAa,CAAC;AAAA,IAClB,OAAA;AAAA,IACA;AAAA,GACF,MAA6C;AAAA,IAC3C,IAAA;AAAA,IACA,QAAA,EAAU,kBAAA;AAAA,IACV,OAAA;AAAA,IACA,SAAA,EAAW,UAAA,GAAa,gBAAA,CAAiB,OAAO,CAAA,GAAI;AAAA,GACtD,CAAA;AAEA,EAAA,MAAM,YAAY,kBAAA,CAAmB,SAAA;AAAA,IACnC,GAAA,CAAI,CAAC,QAAA,KAAa,QAAA,CAAS,IAAI,aAAa,CAAA,CAAE,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,IAC7D,WAAA,CAAY,EAAE;AAAA,GAChB;AAEA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,kBAAA;AAAA,IACJ,WAAA,EAAa,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAG,CAAA;AAAA,IACpC,SAAA;AAAA,IACA,WAAA,EAAa,oBAAA;AAAA,IACb,UAAA,EAAY,CAAC,GAAA,KAAQ;AACnB,MAAA,oBAAA,CAAqB,CAAC,CAAA,KAAM;AAC1B,QAAA,MAAMA,OAAM,IAAI,GAAA;AAAA,UACd,CAAA,CAAE,GAAA,CAAI,aAAa,CAAA,CAAE,GAAA,CAAI,CAACC,IAAAA,KAAQ,CAACA,IAAAA,CAAI,OAAA,EAASA,IAAG,CAAC;AAAA,SACtD;AACA,QAAAD,IAAAA,CAAI,GAAA,CAAI,GAAA,CAAI,OAAA,EAAS,GAAG,CAAA;AACxB,QAAA,OAAO,CAAC,GAAGA,IAAAA,CAAI,MAAA,EAAQ,CAAA;AAAA,MACzB,CAAC,CAAA;AACD,MAAA,OAAO,WAAW,GAAG,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,aAAA,EAAe,CAAC,IAAA,KACd,oBAAA;AAAA,MACE,CAAC,CAAA,KACC,CAAA,CAAE,MAAA,CAAO,CAAC,QAAQ,aAAA,CAAc,GAAG,CAAA,CAAE,OAAA,KAAY,IAAI;AAAA,KAGzD;AAAA,IACF,SAAA,EAAW,CAAC,OAAA,KACV,UAAA,CAAW;AAAA,MACT;AAAA,KACD;AAAA,GACL;AACF;;;;"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { FC } from 'react';
|
|
2
2
|
import { Plugin, Account, AccountAddress, PersistenceProvider } from '@polkahub/plugin';
|
|
3
3
|
import { DefaultedStateObservable } from '@react-rxjs/core';
|
|
4
|
+
import { RawTxCreator } from 'polkadot-api/tx-creator';
|
|
4
5
|
|
|
5
6
|
declare const ManageReadOnly: FC;
|
|
6
7
|
|
|
@@ -9,13 +10,14 @@ interface ReadonlyAccountInfo {
|
|
|
9
10
|
name?: string;
|
|
10
11
|
}
|
|
11
12
|
declare const readOnlyProviderId = "readonly";
|
|
12
|
-
|
|
13
|
+
type ReadOnlyAccount = Account<RawTxCreator>;
|
|
14
|
+
interface ReadOnlyProvider extends Plugin<ReadOnlyAccount> {
|
|
13
15
|
id: "readonly";
|
|
14
|
-
accounts$: DefaultedStateObservable<
|
|
16
|
+
accounts$: DefaultedStateObservable<ReadOnlyAccount[]>;
|
|
15
17
|
setAccounts: (payload: ReadonlyAccountInfo[]) => void;
|
|
16
|
-
addAccount: (address: ReadonlyAccountInfo) =>
|
|
18
|
+
addAccount: (address: ReadonlyAccountInfo) => ReadOnlyAccount;
|
|
17
19
|
removeAccount: (address: AccountAddress) => void;
|
|
18
|
-
toAccount: (address: AccountAddress) =>
|
|
20
|
+
toAccount: (address: AccountAddress) => ReadOnlyAccount;
|
|
19
21
|
}
|
|
20
22
|
declare const createReadOnlyProvider: (opts?: Partial<{
|
|
21
23
|
fakeSigner: boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/read-only",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -29,24 +29,24 @@
|
|
|
29
29
|
"index.css"
|
|
30
30
|
],
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@polkadot-api/substrate-bindings": "
|
|
32
|
+
"@polkadot-api/substrate-bindings": "0.21.0-rc.1",
|
|
33
|
+
"@polkahub/context": "^*",
|
|
34
|
+
"@polkahub/plugin": "^*",
|
|
35
|
+
"@polkahub/select-account": "^*",
|
|
36
|
+
"@polkahub/ui-components": "^*",
|
|
33
37
|
"@react-rxjs/core": "^0.10.8",
|
|
34
38
|
"@react-rxjs/utils": "^0.9.7",
|
|
35
|
-
"lucide-react": "^1.
|
|
36
|
-
"polkadot-api": "
|
|
37
|
-
"rxjs": "^7.8.2"
|
|
38
|
-
"@polkahub/plugin": "0.6.0",
|
|
39
|
-
"@polkahub/context": "0.6.0",
|
|
40
|
-
"@polkahub/select-account": "0.6.0",
|
|
41
|
-
"@polkahub/ui-components": "0.7.0"
|
|
39
|
+
"lucide-react": "^1.23.0",
|
|
40
|
+
"polkadot-api": "3.0.0-rc.4",
|
|
41
|
+
"rxjs": "^7.8.2"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|
|
44
44
|
"@types/react": "^19.2.2",
|
|
45
45
|
"react": "^19.2.0"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@types/react": "^19.2.
|
|
49
|
-
"react": "^19.2.
|
|
48
|
+
"@types/react": "^19.2.17",
|
|
49
|
+
"react": "^19.2.7"
|
|
50
50
|
},
|
|
51
51
|
"scripts": {
|
|
52
52
|
"build": "tsc -b && rollup -c ../../rollup.config.js"
|