@w3ux/observables-connect 0.9.0 → 0.9.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.
@@ -0,0 +1,4 @@
1
+ import type { HandleImportExtension } from '@w3ux/types';
2
+ export declare const DefaultHandleImportExtension: HandleImportExtension;
3
+ export declare const DefaultSS58 = 0;
4
+ export declare const ActiveExtensionsKey = "active_extensions";
@@ -0,0 +1,13 @@
1
+ export const DefaultHandleImportExtension = {
2
+ newAccounts: [],
3
+ meta: {
4
+ accountsToRemove: [],
5
+ removedActiveAccount: null,
6
+ },
7
+ };
8
+ export const DefaultSS58 = 0;
9
+ export const ActiveExtensionsKey = 'active_extensions';
10
+
11
+ //# sourceMappingURL=consts.js.map
12
+
13
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accounts/consts.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,4BAA4B,GAA0B;IACjE,WAAW,EAAE,EAAE;IACf,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE;QACpB,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAA;AAGD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAA;AAG5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA","file":"consts.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { HandleImportExtension } from '@w3ux/types'\n\nexport const DefaultHandleImportExtension: HandleImportExtension = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n}\n\n// The default ss58 prefix accounts are formatted to\nexport const DefaultSS58 = 0\n\n// Local storage active extensions key\nexport const ActiveExtensionsKey = 'active_extensions'\n"]}
@@ -0,0 +1,6 @@
1
+ import type { ExtensionEnableResults, ExtensionInterface, RawExtensionEnable, RawExtensions } from '@w3ux/types';
2
+ export declare const getExtensionsById: (extensionIds: string[]) => Map<string, RawExtensionEnable>;
3
+ export declare const enable: (extensions: RawExtensions, dappName: string) => Promise<PromiseSettledResult<ExtensionInterface>[]>;
4
+ export declare const formatEnabledExtensions: (extensions: RawExtensions, results: PromiseSettledResult<ExtensionInterface>[]) => ExtensionEnableResults;
5
+ export declare const connectedExtensions: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
6
+ export declare const extensionsWithError: (extensions: ExtensionEnableResults) => ExtensionEnableResults;
@@ -0,0 +1,51 @@
1
+ import { isExtensionLocal, removeExtensionFromLocal } from '../extensions/local';
2
+ export const getExtensionsById = (extensionIds) => {
3
+ const rawExtensions = new Map();
4
+ extensionIds.forEach(async (id) => {
5
+ if (isExtensionLocal(id)) {
6
+ const { enable } = window.injectedWeb3[id];
7
+ if (enable !== undefined && typeof enable === 'function') {
8
+ rawExtensions.set(id, enable);
9
+ }
10
+ else {
11
+ removeExtensionFromLocal(id);
12
+ }
13
+ }
14
+ });
15
+ return rawExtensions;
16
+ };
17
+ export const enable = async (extensions, dappName) => {
18
+ try {
19
+ return await Promise.allSettled(Array.from(extensions.values()).map((fn) => fn(dappName)));
20
+ }
21
+ catch (e) {
22
+ console.error("Error during 'enable' extensions call: ", e);
23
+ return [];
24
+ }
25
+ };
26
+ export const formatEnabledExtensions = (extensions, results) => {
27
+ const extensionsState = new Map();
28
+ for (let i = 0; i < results.length; i++) {
29
+ const result = results[i];
30
+ const id = Array.from(extensions.keys())[i];
31
+ if (result.status === 'fulfilled') {
32
+ extensionsState.set(id, {
33
+ extension: result.value,
34
+ connected: true,
35
+ });
36
+ }
37
+ else if (result.status === 'rejected') {
38
+ extensionsState.set(id, {
39
+ connected: false,
40
+ error: result.reason,
41
+ });
42
+ }
43
+ }
44
+ return extensionsState;
45
+ };
46
+ export const connectedExtensions = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => state.connected));
47
+ export const extensionsWithError = (extensions) => new Map(Array.from(extensions.entries()).filter(([, state]) => !state.connected));
48
+
49
+ //# sourceMappingURL=enable.js.map
50
+
51
+ //# sourceMappingURL=enable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accounts/enable.ts"],"names":[],"mappings":"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","file":"enable.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type {\n ExtensionEnableResult,\n ExtensionEnableResults,\n ExtensionInterface,\n RawExtensionEnable,\n RawExtensions,\n} from '@w3ux/types'\nimport { isExtensionLocal, removeExtensionFromLocal } from '../extensions/local'\n\n// Gets raw extensions by their ids\nexport const getExtensionsById = (extensionIds: string[]) => {\n const rawExtensions = new Map<string, RawExtensionEnable>()\n\n extensionIds.forEach(async (id) => {\n if (isExtensionLocal(id)) {\n const { enable } = window.injectedWeb3[id]\n if (enable !== undefined && typeof enable === 'function') {\n rawExtensions.set(id, enable)\n } else {\n removeExtensionFromLocal(id)\n }\n }\n })\n return rawExtensions\n}\n\n// Calls enable for the provided extensions\nexport const enable = async (extensions: RawExtensions, dappName: string) => {\n try {\n return await Promise.allSettled(\n Array.from(extensions.values()).map((fn) => fn(dappName))\n )\n } catch (e) {\n console.error(\"Error during 'enable' extensions call: \", e)\n return []\n }\n}\n\n// Formats the results of an extension's enable function\nexport const formatEnabledExtensions = (\n extensions: RawExtensions,\n results: PromiseSettledResult<ExtensionInterface>[]\n): ExtensionEnableResults => {\n const extensionsState = new Map<string, ExtensionEnableResult>()\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const id = Array.from(extensions.keys())[i]\n\n if (result.status === 'fulfilled') {\n extensionsState.set(id, {\n extension: result.value,\n connected: true,\n })\n } else if (result.status === 'rejected') {\n extensionsState.set(id, {\n connected: false,\n error: result.reason,\n })\n }\n }\n return extensionsState\n}\n\n// Get successfully connected extensions\nexport const connectedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n// Get extensions that failed to connect\nexport const extensionsWithError = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n"]}
@@ -0,0 +1,2 @@
1
+ import type { ExtensionAccount, ExtensionEnableResults } from '@w3ux/types';
2
+ export declare const getAccountsFromExtensions: (extensions: ExtensionEnableResults) => Promise<ExtensionAccount[]>;
@@ -0,0 +1,45 @@
1
+ import { formatAccountSs58 } from '@w3ux/utils';
2
+ import { DefaultSS58 } from './consts';
3
+ export const getAccountsFromExtensions = async (extensions) => {
4
+ try {
5
+ const results = await Promise.allSettled(Array.from(extensions.values()).map(({ extension }) => extension.accounts.get()));
6
+ const extensionEntries = Array.from(extensions.entries());
7
+ const accounts = [];
8
+ for (let i = 0; i < results.length; i++) {
9
+ const result = results[i];
10
+ const source = extensionEntries[i][0];
11
+ const signer = extensionEntries[i][1].extension.signer;
12
+ if (result.status === 'fulfilled') {
13
+ const filtered = result.value
14
+ .map((account) => {
15
+ const adddress = formatAccountSs58(account.address, DefaultSS58);
16
+ if (!adddress) {
17
+ return null;
18
+ }
19
+ return {
20
+ ...account,
21
+ adddress,
22
+ };
23
+ })
24
+ .filter((a) => a !== null)
25
+ .filter(({ address }) => !accounts.find((a) => address === a.address))
26
+ .map(({ address, name }) => ({
27
+ address,
28
+ name,
29
+ source,
30
+ signer,
31
+ }));
32
+ accounts.push(...filtered);
33
+ }
34
+ }
35
+ return accounts;
36
+ }
37
+ catch (e) {
38
+ console.error('Error during enable and format call: ', e);
39
+ return [];
40
+ }
41
+ };
42
+
43
+ //# sourceMappingURL=index.js.map
44
+
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accounts/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAGtC,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAC5C,UAAkC,EACL,EAAE;IAC/B,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CACpD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,CACzB,CACF,CAAA;QACD,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAuB,EAAE,CAAA;QAEvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACrC,MAAM,MAAM,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAA;YAEtD,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBAClC,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;qBAE1B,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;oBACf,MAAM,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAA;oBAChE,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,OAAO,IAAI,CAAA;oBACb,CAAC;oBACD,OAAO;wBACL,GAAG,OAAO;wBACV,QAAQ;qBACT,CAAA;gBACH,CAAC,CAAC;qBAED,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC;qBAEzB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;qBAErE,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBAC3B,OAAO;oBACP,IAAI;oBACJ,MAAM;oBACN,MAAM;iBACP,CAAC,CAAC,CAAA;gBAEL,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAA;YAC5B,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,CAAC,CAAA;QACzD,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionAccount, ExtensionEnableResults } from '@w3ux/types'\nimport { formatAccountSs58 } from '@w3ux/utils'\nimport { DefaultSS58 } from './consts'\n\n// Connects to the provided extensions and fetches their accounts\nexport const getAccountsFromExtensions = async (\n extensions: ExtensionEnableResults\n): Promise<ExtensionAccount[]> => {\n try {\n const results = await Promise.allSettled(\n Array.from(extensions.values()).map(({ extension }) =>\n extension.accounts.get()\n )\n )\n const extensionEntries = Array.from(extensions.entries())\n const accounts: ExtensionAccount[] = []\n\n for (let i = 0; i < results.length; i++) {\n const result = results[i]\n const source = extensionEntries[i][0]\n const signer = extensionEntries[i][1].extension.signer\n\n if (result.status === 'fulfilled') {\n const filtered = result.value\n // Reformat addresses with default ss58 prefix\n .map((account) => {\n const adddress = formatAccountSs58(account.address, DefaultSS58)\n if (!adddress) {\n return null\n }\n return {\n ...account,\n adddress,\n }\n })\n // Remove null entries resulting from invalid formatted addresses\n .filter((a) => a !== null)\n // Remove accounts that have already been imported\n .filter(({ address }) => !accounts.find((a) => address === a.address))\n // Reformat entries to include extension source\n .map(({ address, name }) => ({\n address,\n name,\n source,\n signer,\n }))\n\n accounts.push(...filtered)\n }\n }\n return accounts\n } catch (e) {\n console.error('Error during enable and format call: ', e)\n return []\n }\n}\n"]}
@@ -1,16 +1,13 @@
1
1
  import extensions from '@w3ux/extension-assets';
2
- import { _extensionsStatus, _gettingExtensions } from './index';
2
+ import { _extensionsStatus, _gettingExtensions } from '../index';
3
3
  export const getExtensions = async () => {
4
4
  _gettingExtensions.next(true);
5
5
  let injectedWeb3Interval = null;
6
- const formatInstalled = () => {
7
- const value = _extensionsStatus.getValue();
8
- return Object.keys(extensions).reduce((acc, key) => {
9
- acc[key] =
10
- window?.injectedWeb3[key] !== undefined ? 'installed' : value[key];
11
- return acc;
12
- }, { ...value });
13
- };
6
+ const formatInstalled = () => Object.keys(extensions).reduce((acc, key) => {
7
+ acc[key] =
8
+ window?.injectedWeb3[key] !== undefined ? 'installed' : acc[key];
9
+ return acc;
10
+ }, { ..._extensionsStatus.getValue() });
14
11
  const handleCompleted = async (foundExtensions) => {
15
12
  clearInterval(injectedWeb3Interval);
16
13
  if (foundExtensions) {
@@ -34,24 +31,18 @@ export const getExtensions = async () => {
34
31
  }
35
32
  }, interval);
36
33
  };
37
- export const getStatus = (id) => {
38
- const value = _extensionsStatus.getValue();
39
- return value[id] || undefined;
40
- };
34
+ export const getStatus = (id) => _extensionsStatus.getValue()[id] || undefined;
41
35
  export const setStatus = (id, status) => {
42
- const value = _extensionsStatus.getValue();
43
- value[id] = status;
44
- _extensionsStatus.next(value);
36
+ const newValue = { ..._extensionsStatus.getValue() };
37
+ newValue[id] = status;
38
+ _extensionsStatus.next(newValue);
45
39
  };
46
40
  export const removeStatus = (id) => {
47
41
  const { [id]: _, ...rest } = _extensionsStatus.getValue();
48
42
  _extensionsStatus.next(rest);
49
43
  };
50
- export const canConnect = (id) => {
51
- const value = _extensionsStatus.getValue();
52
- return ![undefined, 'connected'].includes(value[id]);
53
- };
44
+ export const canConnect = (id) => ![undefined, 'connected'].includes(_extensionsStatus.getValue()[id]);
54
45
 
55
- //# sourceMappingURL=extensions.js.map
46
+ //# sourceMappingURL=index.js.map
56
47
 
57
- //# sourceMappingURL=extensions.js.map
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/index.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAA;AAGhE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,IAAI,EAAE;IACtC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC7B,IAAI,oBAAoB,GAAmC,IAAI,CAAA;IAG/D,MAAM,eAAe,GAAG,GAAG,EAAE,CAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CAC5B,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACX,GAAG,CAAC,GAAG,CAAC;YACN,MAAM,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClE,OAAO,GAAG,CAAA;IACZ,CAAC,EACD,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CACpC,CAAA;IAGH,MAAM,eAAe,GAAG,KAAK,EAAE,eAAwB,EAAE,EAAE;QACzD,aAAa,CAAC,oBAAoB,CAAC,CAAA;QACnC,IAAI,eAAe,EAAE,CAAC;YACpB,iBAAiB,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAA;QAC3C,CAAC;QACD,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC,CAAA;IAGD,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,MAAM,QAAQ,GAAG,GAAG,CAAA;IACpB,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,oBAAoB,GAAG,WAAW,CAAC,GAAG,EAAE;QACtC,OAAO,EAAE,CAAA;QACT,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,eAAe,CAAC,KAAK,CAAC,CAAA;QACxB,CAAC;aAAM,CAAC;YAEN,MAAM,YAAY,GAAG,MAAM,EAAE,YAAY,IAAI,IAAI,CAAA;YACjD,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;gBAC1B,eAAe,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAA;AACd,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAmB,EAAE,CACvD,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,IAAI,SAAS,CAAA;AAG/C,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,MAAuB,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAA;IACpD,QAAQ,CAAC,EAAE,CAAC,GAAG,MAAM,CAAA;IACrB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;AAClC,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAU,EAAE,EAAE;IACzC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,iBAAiB,CAAC,QAAQ,EAAE,CAAA;IACzD,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC9B,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE,CACvC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport extensions from '@w3ux/extension-assets'\nimport type { ExtensionStatus } from '@w3ux/types'\nimport { _extensionsStatus, _gettingExtensions } from '../index'\n\n// Gets extensions from injectedWeb3\nexport const getExtensions = async () => {\n _gettingExtensions.next(true)\n let injectedWeb3Interval: ReturnType<typeof setInterval> = null\n\n // Format installed extensions\n const formatInstalled = () =>\n Object.keys(extensions).reduce(\n (acc, key) => {\n acc[key] =\n window?.injectedWeb3[key] !== undefined ? 'installed' : acc[key]\n return acc\n },\n { ..._extensionsStatus.getValue() }\n )\n\n // Handle completed interval check\n const handleCompleted = async (foundExtensions: boolean) => {\n clearInterval(injectedWeb3Interval)\n if (foundExtensions) {\n _extensionsStatus.next(formatInstalled())\n }\n _gettingExtensions.next(false)\n }\n\n // Getter for the currently installed extensions\n let counter = 0\n const interval = 300\n const maxChecks = 10\n injectedWeb3Interval = setInterval(() => {\n counter++\n if (counter === maxChecks) {\n handleCompleted(false)\n } else {\n // `injectedWeb3` is present\n const injectedWeb3 = window?.injectedWeb3 || null\n if (injectedWeb3 !== null) {\n handleCompleted(true)\n }\n }\n }, interval)\n}\n\n// Gets an extension status\nexport const getStatus = (id: string): ExtensionStatus =>\n _extensionsStatus.getValue()[id] || undefined\n\n// Sets an extension status\nexport const setStatus = (id: string, status: ExtensionStatus) => {\n const newValue = { ..._extensionsStatus.getValue() }\n newValue[id] = status\n _extensionsStatus.next(newValue)\n}\n\n// Removes an extension status\nexport const removeStatus = (id: string) => {\n const { [id]: _, ...rest } = _extensionsStatus.getValue()\n _extensionsStatus.next(rest)\n}\n\n// Whether an extension can be connected\nexport const canConnect = (id: string) =>\n ![undefined, 'connected'].includes(_extensionsStatus.getValue()[id])\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const isExtensionLocal: (id: string) => boolean;
2
+ export declare const addExtensionToLocal: (id: string) => void;
3
+ export declare const removeExtensionFromLocal: (id: string) => void;
@@ -0,0 +1,22 @@
1
+ import { localStorageOrDefault } from '@w3ux/utils';
2
+ import { ActiveExtensionsKey } from '../accounts/consts';
3
+ export const isExtensionLocal = (id) => {
4
+ const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
5
+ return Array.isArray(current) && current.includes(id);
6
+ };
7
+ export const addExtensionToLocal = (id) => {
8
+ const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
9
+ if (Array.isArray(current) && !current.includes(id)) {
10
+ localStorage.setItem(ActiveExtensionsKey, JSON.stringify([...current, id]));
11
+ }
12
+ };
13
+ export const removeExtensionFromLocal = (id) => {
14
+ const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
15
+ if (Array.isArray(current)) {
16
+ localStorage.setItem(ActiveExtensionsKey, JSON.stringify(current.filter((localId) => localId !== id)));
17
+ }
18
+ };
19
+
20
+ //# sourceMappingURL=local.js.map
21
+
22
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/extensions/local.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAGxD,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAW,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;AACvD,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAQ,EAAE;IACtD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;QACpD,YAAY,CAAC,OAAO,CAAC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC,CAAA;IAC7E,CAAC;AACH,CAAC,CAAA;AAGD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,EAAU,EAAQ,EAAE;IAC3D,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,YAAY,CAAC,OAAO,CAClB,mBAAmB,EACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,CAAC,CAAC,CAC5D,CAAA;IACH,CAAC;AACH,CAAC,CAAA","file":"local.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport { localStorageOrDefault } from '@w3ux/utils'\nimport { ActiveExtensionsKey } from '../accounts/consts'\n\n// Check if an extension exists in local storage\nexport const isExtensionLocal = (id: string): boolean => {\n const current = localStorageOrDefault<string[]>(ActiveExtensionsKey, [], true)\n return Array.isArray(current) && current.includes(id)\n}\n\n// Adds an extension to local storage\nexport const addExtensionToLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(ActiveExtensionsKey, [], true)\n if (Array.isArray(current) && !current.includes(id)) {\n localStorage.setItem(ActiveExtensionsKey, JSON.stringify([...current, id]))\n }\n}\n\n// Removes extension from local storage\nexport const removeExtensionFromLocal = (id: string): void => {\n const current = localStorageOrDefault<string[]>(ActiveExtensionsKey, [], true)\n if (Array.isArray(current)) {\n localStorage.setItem(\n ActiveExtensionsKey,\n JSON.stringify(current.filter((localId) => localId !== id))\n )\n }\n}\n"]}
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA;AAGnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionsStatus } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Whether extensions are being checked\nexport const _gettingExtensions = new BehaviorSubject<boolean>(true)\nexport const gettingExtensions$ = _gettingExtensions.asObservable()\n\n// Discovered extensions along with their status\nexport const _extensionsStatus = new BehaviorSubject<ExtensionsStatus>({})\nexport const extensionsStatus$ = _extensionsStatus.asObservable()\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAU,IAAI,CAAC,CAAA;AACpE,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA;AAGnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,eAAe,CAAmB,EAAE,CAAC,CAAA;AAC1E,MAAM,CAAC,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,YAAY,EAAE,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionsStatus } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Whether extensions are being checked\nexport const _gettingExtensions = new BehaviorSubject<boolean>(true)\nexport const gettingExtensions$ = _gettingExtensions.asObservable()\n\n// Discovered extensions along with their status\nexport const _extensionsStatus = new BehaviorSubject<ExtensionsStatus>({})\nexport const extensionsStatus$ = _extensionsStatus.asObservable()\n\n// Discovered extension accounts\n// export const _extensionAccounts = new BehaviorSubject<ImportedAccount[]>([])\n// export const extensionAccounts$ = _extensionAccounts.asObservable()\n\n// Sync status of extension accounts\n// export const _extensionAccountsSync = new BehaviorSubject<Sync>('unsynced')\n// export const extensionAccountsSync$ = _extensionAccountsSync.asObservable()\n"]}
package/package.json CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "name": "@w3ux/observables-connect",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "license": "GPL-3.0-only",
5
5
  "dependencies": {
6
- "@w3ux/extension-assets": "^2.2.0"
6
+ "@w3ux/extension-assets": "^2.2.0",
7
+ "@w3ux/utils": "^2.0.8"
7
8
  },
8
9
  "type": "module",
9
10
  "peerDependencies": {
package/extensions.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/extensions.ts"],"names":[],"mappings":"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","file":"extensions.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport extensions from '@w3ux/extension-assets'\nimport type { ExtensionStatus } from '@w3ux/types'\nimport { _extensionsStatus, _gettingExtensions } from './index'\n\n// Gets extensions from injectedWeb3\nexport const getExtensions = async () => {\n _gettingExtensions.next(true)\n let injectedWeb3Interval: ReturnType<typeof setInterval> = null\n\n // Format installed extensions\n const formatInstalled = () => {\n const value = _extensionsStatus.getValue()\n return Object.keys(extensions).reduce(\n (acc, key) => {\n acc[key] =\n window?.injectedWeb3[key] !== undefined ? 'installed' : value[key]\n return acc\n },\n { ...value }\n )\n }\n\n // Handle completed interval check\n const handleCompleted = async (foundExtensions: boolean) => {\n clearInterval(injectedWeb3Interval)\n if (foundExtensions) {\n _extensionsStatus.next(formatInstalled())\n }\n _gettingExtensions.next(false)\n }\n\n // Getter for the currently installed extensions\n let counter = 0\n const interval = 300\n const maxChecks = 10\n injectedWeb3Interval = setInterval(() => {\n counter++\n if (counter === maxChecks) {\n handleCompleted(false)\n } else {\n // `injectedWeb3` is present\n const injectedWeb3 = window?.injectedWeb3 || null\n if (injectedWeb3 !== null) {\n handleCompleted(true)\n }\n }\n }, interval)\n}\n\n// Gets an extension status\nexport const getStatus = (id: string): ExtensionStatus => {\n const value = _extensionsStatus.getValue()\n return value[id] || undefined\n}\n\n// Sets an extension status\nexport const setStatus = (id: string, status: ExtensionStatus) => {\n const value = _extensionsStatus.getValue()\n value[id] = status\n _extensionsStatus.next(value)\n}\n\n// Removes an extension status\nexport const removeStatus = (id: string) => {\n const { [id]: _, ...rest } = _extensionsStatus.getValue()\n _extensionsStatus.next(rest)\n}\n\n// Whether an extension can be connected\nexport const canConnect = (id: string) => {\n const value = _extensionsStatus.getValue()\n return ![undefined, 'connected'].includes(value[id])\n}\n"]}
File without changes