@w3ux/react-connect-kit 3.2.29 → 3.3.0-alpha.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.
- package/{ExtensionAccounts/index.js → Extensions/Accounts.js} +3 -3
- package/Extensions/Accounts.js.map +1 -0
- package/Extensions/Connect.d.ts +6 -0
- package/Extensions/Connect.js +44 -0
- package/Extensions/Connect.js.map +1 -0
- package/Extensions/Provider.d.ts +2 -0
- package/Extensions/Provider.js +8 -0
- package/Extensions/Provider.js.map +1 -0
- package/Extensions/defaults.js.map +1 -0
- package/Extensions/index.d.ts +3 -6
- package/Extensions/index.js +3 -40
- package/Extensions/index.js.map +1 -1
- package/Extensions/types.d.ts +13 -1
- package/Extensions/types.js.map +1 -1
- package/index.d.ts +2 -2
- package/index.js +2 -2
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/ExtensionAccounts/defaults.js.map +0 -1
- package/ExtensionAccounts/index.js.map +0 -1
- package/ExtensionAccounts/types.d.ts +0 -13
- package/ExtensionAccounts/types.js +0 -5
- package/ExtensionAccounts/types.js.map +0 -1
- /package/{ExtensionAccounts/index.d.ts → Extensions/Accounts.d.ts} +0 -0
- /package/{ExtensionAccounts → Extensions}/defaults.d.ts +0 -0
- /package/{ExtensionAccounts → Extensions}/defaults.js +0 -0
|
@@ -6,7 +6,7 @@ import { connectExtension as doConnectExtension, reconnectExtensions, } from '@w
|
|
|
6
6
|
import { formatAccountSs58 } from '@w3ux/utils';
|
|
7
7
|
import { useEffect, useState } from 'react';
|
|
8
8
|
import { combineLatest } from 'rxjs';
|
|
9
|
-
import { useExtensions } from '
|
|
9
|
+
import { useExtensions } from './Connect';
|
|
10
10
|
export const [ExtensionAccountsContext, useExtensionAccounts] = createSafeContext();
|
|
11
11
|
export const ExtensionAccountsProvider = ({ children, ss58, dappName, }) => {
|
|
12
12
|
const { gettingExtensions } = useExtensions();
|
|
@@ -59,6 +59,6 @@ export const ExtensionAccountsProvider = ({ children, ss58, dappName, }) => {
|
|
|
59
59
|
}, children: children }));
|
|
60
60
|
};
|
|
61
61
|
|
|
62
|
-
//# sourceMappingURL=
|
|
62
|
+
//# sourceMappingURL=Accounts.js.map
|
|
63
63
|
|
|
64
|
-
//# sourceMappingURL=
|
|
64
|
+
//# sourceMappingURL=Accounts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/Accounts.tsx"],"names":[],"mappings":"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","file":"Accounts.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n extensionAccounts$,\n getReconnectSync,\n initialisedExtensions$,\n reconnectSync$,\n resetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n connectExtension as doConnectExtension,\n reconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from './Connect'\nimport type {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n createSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n children,\n ss58,\n dappName,\n}: ExtensionAccountsProviderProps) => {\n const { gettingExtensions } = useExtensions()\n\n // Store connected extension accounts\n const [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n // Stores initialised extensions\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n )\n // Store whether previously enabled extensions have been re-connected\n const [extensionsSynced, setExtensionsSynced] =\n useState<Sync>(getReconnectSync())\n\n // Handle initial connection to previously enabled extensions\n const handleInitialConnect = async () => {\n if (!gettingExtensions && extensionsSynced === 'unsynced') {\n // Defensive: unsubscribe from all accounts and reset state\n unsubAll()\n resetAccounts()\n await reconnectExtensions(dappName, ss58)\n }\n }\n\n // Connects to a single extension and processes its accounts\n const connectExtension = async (id: string): Promise<boolean> =>\n await doConnectExtension(dappName, ss58, id)\n\n // Get extension accounts, formatted by a provided ss58 prefix\n const getExtensionAccounts = (ss58Prefix: number) =>\n extensionAccounts\n .map((account) => {\n const formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n if (!formattedAddress) {\n return null\n }\n return {\n ...account,\n address: formattedAddress,\n }\n })\n .filter((account) => account !== null)\n\n // Initialise extension accounts sync\n useEffect(() => {\n handleInitialConnect()\n return () => unsubAll()\n }, [gettingExtensions])\n\n // Subscribes to observables and updates state\n useEffect(() => {\n const sub = combineLatest([\n initialisedExtensions$,\n extensionAccounts$,\n reconnectSync$,\n ]).subscribe(([initialised, accounts, sync]) => {\n setExtensionsInitialised(initialised)\n setExtensionAccounts(accounts)\n setExtensionsSynced(sync)\n })\n return () => {\n sub.unsubscribe()\n }\n }, [])\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n extensionsInitialised,\n connectExtension,\n extensionsSynced,\n getExtensionAccounts,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n )\n}\n"]}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { ExtensionsContextInterface } from './types';
|
|
3
|
+
export declare const ExtensionsConnectContext: import("react").Context<ExtensionsContextInterface>, useExtensions: () => ExtensionsContextInterface;
|
|
4
|
+
export declare const ExtensionsConnectProvider: ({ children, }: {
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createSafeContext } from '@w3ux/hooks';
|
|
3
|
+
import { canConnect, extensionsStatus$, getStatus, gettingExtensions$, removeStatus, setStatus, } from '@w3ux/observables-connect';
|
|
4
|
+
import { getExtensions } from '@w3ux/observables-connect/extensions';
|
|
5
|
+
import { useEffect, useState } from 'react';
|
|
6
|
+
import { combineLatest } from 'rxjs';
|
|
7
|
+
export const [ExtensionsConnectContext, useExtensions] = createSafeContext();
|
|
8
|
+
export const ExtensionsConnectProvider = ({ children, }) => {
|
|
9
|
+
const [gettingExtensions, setGettingExtensions] = useState(true);
|
|
10
|
+
const [extensionsStatus, setExtensionsStatus] = useState({});
|
|
11
|
+
const setExtensionStatus = (id, status) => {
|
|
12
|
+
setStatus(id, status);
|
|
13
|
+
};
|
|
14
|
+
const removeExtensionStatus = (id) => {
|
|
15
|
+
removeStatus(id);
|
|
16
|
+
};
|
|
17
|
+
const extensionInstalled = (id) => getStatus(id) !== undefined;
|
|
18
|
+
const extensionCanConnect = (id) => canConnect(id);
|
|
19
|
+
useEffect(() => {
|
|
20
|
+
getExtensions();
|
|
21
|
+
const sub = combineLatest([
|
|
22
|
+
gettingExtensions$,
|
|
23
|
+
extensionsStatus$,
|
|
24
|
+
]).subscribe(([getting, status]) => {
|
|
25
|
+
setGettingExtensions(getting);
|
|
26
|
+
setExtensionsStatus(status);
|
|
27
|
+
});
|
|
28
|
+
return () => {
|
|
29
|
+
sub.unsubscribe();
|
|
30
|
+
};
|
|
31
|
+
}, []);
|
|
32
|
+
return (_jsx(ExtensionsConnectContext.Provider, { value: {
|
|
33
|
+
extensionsStatus,
|
|
34
|
+
gettingExtensions,
|
|
35
|
+
setExtensionStatus,
|
|
36
|
+
removeExtensionStatus,
|
|
37
|
+
extensionInstalled,
|
|
38
|
+
extensionCanConnect,
|
|
39
|
+
}, children: children }));
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=Connect.js.map
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=Connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/Connect.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,YAAY,EACZ,SAAS,GACV,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAA;AAEpE,OAAO,EAAkB,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,MAAM,CAAA;AAGpC,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,aAAa,CAAC,GACpD,iBAAiB,EAA8B,CAAA;AAEjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,EACxC,QAAQ,GAGT,EAAE,EAAE;IAEH,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAA;IAGzE,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAmB,EAAE,CAAC,CAAA;IAG9E,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,MAAuB,EAAE,EAAE;QACjE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;IACvB,CAAC,CAAA;IAGD,MAAM,qBAAqB,GAAG,CAAC,EAAU,EAAE,EAAE;QAC3C,YAAY,CAAC,EAAE,CAAC,CAAA;IAClB,CAAC,CAAA;IAGD,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAW,EAAE,CACjD,SAAS,CAAC,EAAE,CAAC,KAAK,SAAS,CAAA;IAG7B,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;IAGnE,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,EAAE,CAAA;QACf,MAAM,GAAG,GAAG,aAAa,CAAC;YACxB,kBAAkB;YAClB,iBAAiB;SAClB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;YACjC,oBAAoB,CAAC,OAAO,CAAC,CAAA;YAC7B,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QACF,OAAO,GAAG,EAAE;YACV,GAAG,CAAC,WAAW,EAAE,CAAA;QACnB,CAAC,CAAA;IACH,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,KAAC,wBAAwB,CAAC,QAAQ,IAChC,KAAK,EAAE;YACL,gBAAgB;YAChB,iBAAiB;YACjB,kBAAkB;YAClB,qBAAqB;YACrB,kBAAkB;YAClB,mBAAmB;SACpB,YAEA,QAAQ,GACyB,CACrC,CAAA;AACH,CAAC,CAAA","file":"Connect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n canConnect,\n extensionsStatus$,\n getStatus,\n gettingExtensions$,\n removeStatus,\n setStatus,\n} from '@w3ux/observables-connect'\nimport { getExtensions } from '@w3ux/observables-connect/extensions'\nimport type { ExtensionsStatus, ExtensionStatus } from '@w3ux/types'\nimport { type ReactNode, useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport type { ExtensionsContextInterface } from './types'\n\nexport const [ExtensionsConnectContext, useExtensions] =\n createSafeContext<ExtensionsContextInterface>()\n\nexport const ExtensionsConnectProvider = ({\n children,\n}: {\n children: ReactNode\n}) => {\n // Store whether extensions are being fetched\n const [gettingExtensions, setGettingExtensions] = useState<boolean>(true)\n\n // Store discovered extensions along with their status\n const [extensionsStatus, setExtensionsStatus] = useState<ExtensionsStatus>({})\n\n // Setter for an extension status\n const setExtensionStatus = (id: string, status: ExtensionStatus) => {\n setStatus(id, status)\n }\n\n // Removes an extension status\n const removeExtensionStatus = (id: string) => {\n removeStatus(id)\n }\n\n // Checks if an extension has been installed\n const extensionInstalled = (id: string): boolean =>\n getStatus(id) !== undefined\n\n // Checks whether an extension can be connected to\n const extensionCanConnect = (id: string): boolean => canConnect(id)\n\n // Subscribes to observables and updates state\n useEffect(() => {\n getExtensions()\n const sub = combineLatest([\n gettingExtensions$,\n extensionsStatus$,\n ]).subscribe(([getting, status]) => {\n setGettingExtensions(getting)\n setExtensionsStatus(status)\n })\n return () => {\n sub.unsubscribe()\n }\n }, [])\n\n return (\n <ExtensionsConnectContext.Provider\n value={{\n extensionsStatus,\n gettingExtensions,\n setExtensionStatus,\n removeExtensionStatus,\n extensionInstalled,\n extensionCanConnect,\n }}\n >\n {children}\n </ExtensionsConnectContext.Provider>\n )\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { ExtensionAccountsProvider } from './Accounts';
|
|
3
|
+
import { ExtensionsConnectProvider } from './Connect';
|
|
4
|
+
export const ExtensionsProvider = ({ ss58, dappName, children, }) => (_jsx(ExtensionsConnectProvider, { children: _jsx(ExtensionAccountsProvider, { ss58: ss58, dappName: dappName, children: children }) }));
|
|
5
|
+
|
|
6
|
+
//# sourceMappingURL=Provider.js.map
|
|
7
|
+
|
|
8
|
+
//# sourceMappingURL=Provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/Provider.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AAGrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EACjC,IAAI,EACJ,QAAQ,EACR,QAAQ,GACuB,EAAE,EAAE,CAAC,CACpC,KAAC,yBAAyB,cACxB,KAAC,yBAAyB,IAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,YACtD,QAAQ,GACiB,GACF,CAC7B,CAAA","file":"Provider.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { ExtensionAccountsProvider } from './Accounts'\nimport { ExtensionsConnectProvider } from './Connect'\nimport type { ExtensionAccountsProviderProps } from './types'\n\nexport const ExtensionsProvider = ({\n ss58,\n dappName,\n children,\n}: ExtensionAccountsProviderProps) => (\n <ExtensionsConnectProvider>\n <ExtensionAccountsProvider ss58={ss58} dappName={dappName}>\n {children}\n </ExtensionAccountsProvider>\n </ExtensionsConnectProvider>\n)\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/defaults.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,eAAe,EAAE,EAAE;CACpB,CAAA","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const DefaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n removedAccounts: [],\n}\n"]}
|
package/Extensions/index.d.ts
CHANGED
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
export declare const ExtensionsProvider: ({ children }: {
|
|
5
|
-
children: ReactNode;
|
|
6
|
-
}) => import("react/jsx-runtime").JSX.Element;
|
|
1
|
+
export { ExtensionsProvider } from './Provider';
|
|
2
|
+
export { useExtensionAccounts } from './Accounts';
|
|
3
|
+
export { useExtensions } from './Connect';
|
package/Extensions/index.js
CHANGED
|
@@ -1,43 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import { getExtensions } from '@w3ux/observables-connect/extensions';
|
|
5
|
-
import { useEffect, useState } from 'react';
|
|
6
|
-
import { combineLatest } from 'rxjs';
|
|
7
|
-
export const [ExtensionsContext, useExtensions] = createSafeContext();
|
|
8
|
-
export const ExtensionsProvider = ({ children }) => {
|
|
9
|
-
const [gettingExtensions, setGettingExtensions] = useState(true);
|
|
10
|
-
const [extensionsStatus, setExtensionsStatus] = useState({});
|
|
11
|
-
const setExtensionStatus = (id, status) => {
|
|
12
|
-
setStatus(id, status);
|
|
13
|
-
};
|
|
14
|
-
const removeExtensionStatus = (id) => {
|
|
15
|
-
removeStatus(id);
|
|
16
|
-
};
|
|
17
|
-
const extensionInstalled = (id) => getStatus(id) !== undefined;
|
|
18
|
-
const extensionCanConnect = (id) => canConnect(id);
|
|
19
|
-
useEffect(() => {
|
|
20
|
-
getExtensions();
|
|
21
|
-
const sub = combineLatest([
|
|
22
|
-
gettingExtensions$,
|
|
23
|
-
extensionsStatus$,
|
|
24
|
-
]).subscribe(([getting, status]) => {
|
|
25
|
-
setGettingExtensions(getting);
|
|
26
|
-
setExtensionsStatus(status);
|
|
27
|
-
});
|
|
28
|
-
return () => {
|
|
29
|
-
sub.unsubscribe();
|
|
30
|
-
};
|
|
31
|
-
}, []);
|
|
32
|
-
return (_jsx(ExtensionsContext.Provider, { value: {
|
|
33
|
-
extensionsStatus,
|
|
34
|
-
gettingExtensions,
|
|
35
|
-
setExtensionStatus,
|
|
36
|
-
removeExtensionStatus,
|
|
37
|
-
extensionInstalled,
|
|
38
|
-
extensionCanConnect,
|
|
39
|
-
}, children: children }));
|
|
40
|
-
};
|
|
1
|
+
export { ExtensionsProvider } from './Provider';
|
|
2
|
+
export { useExtensionAccounts } from './Accounts';
|
|
3
|
+
export { useExtensions } from './Connect';
|
|
41
4
|
|
|
42
5
|
//# sourceMappingURL=index.js.map
|
|
43
6
|
|
package/Extensions/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Extensions/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport { ExtensionsProvider } from './Provider'\n\nexport { useExtensionAccounts } from './Accounts'\nexport { useExtensions } from './Connect'\n"]}
|
package/Extensions/types.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ExtensionStatus } from '@w3ux/types';
|
|
1
|
+
import type { Account, ExtensionStatus, Sync } from '@w3ux/types';
|
|
2
|
+
import type { ReactNode } from 'react';
|
|
2
3
|
export interface ExtensionsContextInterface {
|
|
3
4
|
gettingExtensions: boolean;
|
|
4
5
|
extensionsStatus: Record<string, ExtensionStatus>;
|
|
@@ -7,3 +8,14 @@ export interface ExtensionsContextInterface {
|
|
|
7
8
|
extensionInstalled: (id: string) => boolean;
|
|
8
9
|
extensionCanConnect: (id: string) => boolean;
|
|
9
10
|
}
|
|
11
|
+
export interface ExtensionAccountsContextInterface {
|
|
12
|
+
extensionsInitialised: string[];
|
|
13
|
+
connectExtension: (id: string) => Promise<boolean>;
|
|
14
|
+
extensionsSynced: Sync;
|
|
15
|
+
getExtensionAccounts: (ss58: number) => Account[];
|
|
16
|
+
}
|
|
17
|
+
export interface ExtensionAccountsProviderProps {
|
|
18
|
+
children: ReactNode;
|
|
19
|
+
ss58: number;
|
|
20
|
+
dappName: string;
|
|
21
|
+
}
|
package/Extensions/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Extensions/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionStatus } from '@w3ux/types'\n\nexport interface ExtensionsContextInterface {\n gettingExtensions: boolean\n extensionsStatus: Record<string, ExtensionStatus>\n setExtensionStatus: (id: string, status: ExtensionStatus) => void\n removeExtensionStatus: (id: string) => void\n extensionInstalled: (id: string) => boolean\n extensionCanConnect: (id: string) => boolean\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/Extensions/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { Account, ExtensionStatus, Sync } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface ExtensionsContextInterface {\n gettingExtensions: boolean\n extensionsStatus: Record<string, ExtensionStatus>\n setExtensionStatus: (id: string, status: ExtensionStatus) => void\n removeExtensionStatus: (id: string) => void\n extensionInstalled: (id: string) => boolean\n extensionCanConnect: (id: string) => boolean\n}\n\nexport interface ExtensionAccountsContextInterface {\n extensionsInitialised: string[]\n connectExtension: (id: string) => Promise<boolean>\n extensionsSynced: Sync\n getExtensionAccounts: (ss58: number) => Account[]\n}\n\nexport interface ExtensionAccountsProviderProps {\n children: ReactNode\n ss58: number\n dappName: string\n}\n"]}
|
package/index.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './
|
|
2
|
-
export * from './Extensions';
|
|
1
|
+
export * from './Extensions/Accounts';
|
|
2
|
+
export * from './Extensions/Connect';
|
|
3
3
|
export * from './HardwareAccounts';
|
package/index.js
CHANGED
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,uBAAuB,CAAA;AACrC,cAAc,sBAAsB,CAAA;AACpC,cAAc,oBAAoB,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nexport * from './Extensions/Accounts'\nexport * from './Extensions/Connect'\nexport * from './HardwareAccounts'\n"]}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccounts/defaults.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,eAAe,EAAE,EAAE;CACpB,CAAA","file":"defaults.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const DefaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n removedAccounts: [],\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccounts/index.tsx"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { createSafeContext } from '@w3ux/hooks'\nimport {\n extensionAccounts$,\n getReconnectSync,\n initialisedExtensions$,\n reconnectSync$,\n resetAccounts,\n} from '@w3ux/observables-connect'\nimport { unsubAll } from '@w3ux/observables-connect/accounts'\nimport {\n connectExtension as doConnectExtension,\n reconnectExtensions,\n} from '@w3ux/observables-connect/extensions'\nimport type { Account, Sync } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/utils'\nimport { useEffect, useState } from 'react'\nimport { combineLatest } from 'rxjs'\nimport { useExtensions } from '../Extensions'\nimport type {\n ExtensionAccountsContextInterface,\n ExtensionAccountsProviderProps,\n} from './types'\n\nexport const [ExtensionAccountsContext, useExtensionAccounts] =\n createSafeContext<ExtensionAccountsContextInterface>()\n\nexport const ExtensionAccountsProvider = ({\n children,\n ss58,\n dappName,\n}: ExtensionAccountsProviderProps) => {\n const { gettingExtensions } = useExtensions()\n\n // Store connected extension accounts\n const [extensionAccounts, setExtensionAccounts] = useState<Account[]>([])\n // Stores initialised extensions\n const [extensionsInitialised, setExtensionsInitialised] = useState<string[]>(\n []\n )\n // Store whether previously enabled extensions have been re-connected\n const [extensionsSynced, setExtensionsSynced] =\n useState<Sync>(getReconnectSync())\n\n // Handle initial connection to previously enabled extensions\n const handleInitialConnect = async () => {\n if (!gettingExtensions && extensionsSynced === 'unsynced') {\n // Defensive: unsubscribe from all accounts and reset state\n unsubAll()\n resetAccounts()\n await reconnectExtensions(dappName, ss58)\n }\n }\n\n // Connects to a single extension and processes its accounts\n const connectExtension = async (id: string): Promise<boolean> =>\n await doConnectExtension(dappName, ss58, id)\n\n // Get extension accounts, formatted by a provided ss58 prefix\n const getExtensionAccounts = (ss58Prefix: number) =>\n extensionAccounts\n .map((account) => {\n const formattedAddress = formatAccountSs58(account.address, ss58Prefix)\n if (!formattedAddress) {\n return null\n }\n return {\n ...account,\n address: formattedAddress,\n }\n })\n .filter((account) => account !== null)\n\n // Initialise extension accounts sync\n useEffect(() => {\n handleInitialConnect()\n return () => unsubAll()\n }, [gettingExtensions])\n\n // Subscribes to observables and updates state\n useEffect(() => {\n const sub = combineLatest([\n initialisedExtensions$,\n extensionAccounts$,\n reconnectSync$,\n ]).subscribe(([initialised, accounts, sync]) => {\n setExtensionsInitialised(initialised)\n setExtensionAccounts(accounts)\n setExtensionsSynced(sync)\n })\n return () => {\n sub.unsubscribe()\n }\n }, [])\n\n return (\n <ExtensionAccountsContext.Provider\n value={{\n extensionsInitialised,\n connectExtension,\n extensionsSynced,\n getExtensionAccounts,\n }}\n >\n {children}\n </ExtensionAccountsContext.Provider>\n )\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Account, Sync } from '@w3ux/types';
|
|
2
|
-
import type { ReactNode } from 'react';
|
|
3
|
-
export interface ExtensionAccountsContextInterface {
|
|
4
|
-
extensionsInitialised: string[];
|
|
5
|
-
connectExtension: (id: string) => Promise<boolean>;
|
|
6
|
-
extensionsSynced: Sync;
|
|
7
|
-
getExtensionAccounts: (ss58: number) => Account[];
|
|
8
|
-
}
|
|
9
|
-
export interface ExtensionAccountsProviderProps {
|
|
10
|
-
children: ReactNode;
|
|
11
|
-
ss58: number;
|
|
12
|
-
dappName: string;
|
|
13
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ExtensionAccounts/types.ts"],"names":[],"mappings":"","file":"types.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { Account, Sync } from '@w3ux/types'\nimport type { ReactNode } from 'react'\n\nexport interface ExtensionAccountsContextInterface {\n extensionsInitialised: string[]\n connectExtension: (id: string) => Promise<boolean>\n extensionsSynced: Sync\n getExtensionAccounts: (ss58: number) => Account[]\n}\n\nexport interface ExtensionAccountsProviderProps {\n children: ReactNode\n ss58: number\n dappName: string\n}\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|