@w3ux/observables-connect 0.9.18 → 0.9.20

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,6 @@
1
+ import type { ImportedAccount, Sync } from '@w3ux/types';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ export declare const _importSync: BehaviorSubject<Sync>;
4
+ export declare const importSync$: import("rxjs").Observable<Sync>;
5
+ export declare const _accounts: BehaviorSubject<ImportedAccount[]>;
6
+ export declare const accounts$: import("rxjs").Observable<ImportedAccount[]>;
@@ -0,0 +1,9 @@
1
+ import { BehaviorSubject } from 'rxjs';
2
+ export const _importSync = new BehaviorSubject('unsynced');
3
+ export const importSync$ = _importSync.asObservable();
4
+ export const _accounts = new BehaviorSubject([]);
5
+ export const accounts$ = _accounts.asObservable();
6
+
7
+ //# sourceMappingURL=observables.js.map
8
+
9
+ //# sourceMappingURL=observables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/accounts/observables.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAO,UAAU,CAAC,CAAA;AAChE,MAAM,CAAC,MAAM,WAAW,GAAG,WAAW,CAAC,YAAY,EAAE,CAAA;AAGrD,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;AACnE,MAAM,CAAC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAA","file":"observables.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ImportedAccount, Sync } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Sync status of extension account import\nexport const _importSync = new BehaviorSubject<Sync>('unsynced')\nexport const importSync$ = _importSync.asObservable()\n\n// Imported extension accounts\nexport const _accounts = new BehaviorSubject<ImportedAccount[]>([])\nexport const accounts$ = _accounts.asObservable()\n"]}
package/consts.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import type { ProcessExtensionAccountsResult } from '@w3ux/types';
2
2
  export declare const defaultProcessExtensionResult: ProcessExtensionAccountsResult;
3
- export declare const ActiveExtensionsKey = "active_extensions";
3
+ export declare const activeExtensionsKey = "active_extensions";
package/consts.js CHANGED
@@ -5,7 +5,7 @@ export const defaultProcessExtensionResult = {
5
5
  removedActiveAccount: null,
6
6
  },
7
7
  };
8
- export const ActiveExtensionsKey = 'active_extensions';
8
+ export const activeExtensionsKey = 'active_extensions';
9
9
 
10
10
  //# sourceMappingURL=consts.js.map
11
11
 
package/consts.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/consts.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE;QACpB,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAA;AAGD,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 { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const defaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n}\n\n// Local storage active extensions key\nexport const ActiveExtensionsKey = 'active_extensions'\n"]}
1
+ {"version":3,"sources":["../src/consts.ts"],"names":[],"mappings":"AAKA,MAAM,CAAC,MAAM,6BAA6B,GAAmC;IAC3E,WAAW,EAAE,EAAE;IACf,IAAI,EAAE;QACJ,gBAAgB,EAAE,EAAE;QACpB,oBAAoB,EAAE,IAAI;KAC3B;CACF,CAAA;AAGD,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 { ProcessExtensionAccountsResult } from '@w3ux/types'\n\nexport const defaultProcessExtensionResult: ProcessExtensionAccountsResult = {\n newAccounts: [],\n meta: {\n accountsToRemove: [],\n removedActiveAccount: null,\n },\n}\n\n// Local storage active extensions key\nexport const activeExtensionsKey = 'active_extensions'\n"]}
@@ -7,7 +7,7 @@ export const connectExtensions = async (dappName, extensionIds) => {
7
7
  connected: new Map(),
8
8
  };
9
9
  }
10
- const enableResults = await enableExtensions(extensionIds);
10
+ const enableResults = await enableExtensions(extensionIds, dappName);
11
11
  const [connected, withError] = [
12
12
  filterConnectedExtensions(enableResults),
13
13
  filterFailedExtensions(enableResults),
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extensions/connect.ts"],"names":[],"mappings":"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","file":"connect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionEnableResults } from '@w3ux/types'\nimport { enableExtensions } from './enable'\nimport { addExtensionToLocal, removeExtensionFromLocal } from './local'\nimport { _extensionsStatus, _initialisedExtensions } from './observables'\n\n// Connects to previously connected extensions, or to a specific set of extensions\nexport const connectExtensions = async (\n dappName: string,\n extensionIds: string[]\n): Promise<{ connected: ExtensionEnableResults }> => {\n if (!extensionIds.length) {\n return {\n connected: new Map(),\n }\n }\n\n // Get extensions and enable them\n const enableResults = await enableExtensions(extensionIds)\n\n // Determine which extensions are connected and which have errors\n const [connected, withError] = [\n filterConnectedExtensions(enableResults),\n filterFailedExtensions(enableResults),\n ]\n\n // Manage local storage depending on connection status\n Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id))\n Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id))\n\n // Handle new extension statuses\n const newStatus = { ..._extensionsStatus.getValue() }\n Array.from(connected.keys()).forEach((id) => {\n newStatus[id] = 'connected'\n })\n Array.from(withError.entries()).forEach(([id, { error }]) => {\n if (error.startsWith('Error')) {\n // Extension not found - remove from state\n if (error.substring(0, 17) === 'NotInstalledError') {\n delete newStatus[id]\n } else {\n // Assume extension not authenticated\n newStatus[id] = 'not_authenticated'\n }\n }\n })\n\n // Record initialised extensions\n const newInitialised = [..._initialisedExtensions.getValue()]\n extensionIds.forEach((id) => {\n if (!newInitialised.includes(id)) {\n newInitialised.push(id)\n }\n })\n\n // Commit updates to observables\n _extensionsStatus.next(newStatus)\n _initialisedExtensions.next(newInitialised)\n\n return { connected }\n}\n\n// Filter successfully connected extensions\nconst filterConnectedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n// Filter extensions that failed to connect\nconst filterFailedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n"]}
1
+ {"version":3,"sources":["../src/extensions/connect.ts"],"names":[],"mappings":"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","file":"connect.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ExtensionEnableResults } from '@w3ux/types'\nimport { enableExtensions } from './enable'\nimport { addExtensionToLocal, removeExtensionFromLocal } from './local'\nimport { _extensionsStatus, _initialisedExtensions } from './observables'\n\n// Connects to previously connected extensions, or to a specific set of extensions\nexport const connectExtensions = async (\n dappName: string,\n extensionIds: string[]\n): Promise<{ connected: ExtensionEnableResults }> => {\n if (!extensionIds.length) {\n return {\n connected: new Map(),\n }\n }\n\n // Get extensions and enable them\n const enableResults = await enableExtensions(extensionIds, dappName)\n\n // Determine which extensions are connected and which have errors\n const [connected, withError] = [\n filterConnectedExtensions(enableResults),\n filterFailedExtensions(enableResults),\n ]\n\n // Manage local storage depending on connection status\n Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id))\n Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id))\n\n // Handle new extension statuses\n const newStatus = { ..._extensionsStatus.getValue() }\n Array.from(connected.keys()).forEach((id) => {\n newStatus[id] = 'connected'\n })\n Array.from(withError.entries()).forEach(([id, { error }]) => {\n if (error.startsWith('Error')) {\n // Extension not found - remove from state\n if (error.substring(0, 17) === 'NotInstalledError') {\n delete newStatus[id]\n } else {\n // Assume extension not authenticated\n newStatus[id] = 'not_authenticated'\n }\n }\n })\n\n // Record initialised extensions\n const newInitialised = [..._initialisedExtensions.getValue()]\n extensionIds.forEach((id) => {\n if (!newInitialised.includes(id)) {\n newInitialised.push(id)\n }\n })\n\n // Commit updates to observables\n _extensionsStatus.next(newStatus)\n _initialisedExtensions.next(newInitialised)\n\n return { connected }\n}\n\n// Filter successfully connected extensions\nconst filterConnectedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => state.connected)\n )\n\n// Filter extensions that failed to connect\nconst filterFailedExtensions = (\n extensions: ExtensionEnableResults\n): ExtensionEnableResults =>\n new Map(\n Array.from(extensions.entries()).filter(([, state]) => !state.connected)\n )\n"]}
@@ -15,17 +15,27 @@ export const getExtensions = async () => {
15
15
  }
16
16
  _gettingExtensions.next(false);
17
17
  };
18
- let counter = 0;
19
- const interval = 300;
18
+ const interval = 200;
20
19
  const maxChecks = 10;
20
+ const minVerifications = 2;
21
+ let counter = 0;
22
+ let verifications = 0;
21
23
  injectedWeb3Interval = setInterval(() => {
22
24
  counter++;
23
25
  if (counter === maxChecks) {
24
26
  handleCompleted(false);
25
27
  }
26
28
  else {
27
- const injectedWeb3 = window?.injectedWeb3 || null;
28
- if (injectedWeb3 !== null && counter > 2) {
29
+ const injected = window?.injectedWeb3;
30
+ const ready = injected &&
31
+ Object.entries(injected).every(([, ext]) => ext && typeof ext.enable === 'function');
32
+ if (ready) {
33
+ verifications++;
34
+ }
35
+ else {
36
+ verifications = 0;
37
+ }
38
+ if (counter > 2 && verifications >= minVerifications) {
29
39
  handleCompleted(true);
30
40
  }
31
41
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extensions/discover.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGrE,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,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;gBACzC,eAAe,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAA;AACd,CAAC,CAAA","file":"discover.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport extensions from '@w3ux/extension-assets'\nimport { _extensionsStatus, _gettingExtensions } from './observables'\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 & at least 2 checks have passed\n const injectedWeb3 = window?.injectedWeb3 || null\n if (injectedWeb3 !== null && counter > 2) {\n handleCompleted(true)\n }\n }\n }, interval)\n}\n"]}
1
+ {"version":3,"sources":["../src/extensions/discover.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,wBAAwB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAGrE,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;IAED,MAAM,QAAQ,GAAG,GAAG,CAAA;IACpB,MAAM,SAAS,GAAG,EAAE,CAAA;IACpB,MAAM,gBAAgB,GAAG,CAAC,CAAA;IAG1B,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,IAAI,aAAa,GAAG,CAAC,CAAA;IACrB,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;YACN,MAAM,QAAQ,GAAG,MAAM,EAAE,YAAY,CAAA;YAGrC,MAAM,KAAK,GACT,QAAQ;gBACR,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,KAAK,CAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,UAAU,CACrD,CAAA;YAGH,IAAI,KAAK,EAAE,CAAC;gBACV,aAAa,EAAE,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,aAAa,GAAG,CAAC,CAAA;YACnB,CAAC;YAED,IAAI,OAAO,GAAG,CAAC,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;gBACrD,eAAe,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,QAAQ,CAAC,CAAA;AACd,CAAC,CAAA","file":"discover.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport extensions from '@w3ux/extension-assets'\nimport { _extensionsStatus, _gettingExtensions } from './observables'\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 const interval = 200\n const maxChecks = 10\n const minVerifications = 2\n\n // Getter for the currently installed extensions\n let counter = 0\n let verifications = 0\n injectedWeb3Interval = setInterval(() => {\n counter++\n if (counter === maxChecks) {\n handleCompleted(false)\n } else {\n const injected = window?.injectedWeb3\n\n // Check if injected exists and all extensions have a valid enable function\n const ready =\n injected &&\n Object.entries(injected).every(\n ([, ext]) => ext && typeof ext.enable === 'function'\n )\n\n // Increment verifications if the extensions are ready\n if (ready) {\n verifications++\n } else {\n verifications = 0\n }\n\n if (counter > 2 && verifications >= minVerifications) {\n handleCompleted(true)\n }\n }\n }, interval)\n}\n"]}
@@ -1,2 +1,2 @@
1
1
  import type { ExtensionEnableResults } from '@w3ux/types';
2
- export declare const enableExtensions: (ids: string[]) => Promise<ExtensionEnableResults>;
2
+ export declare const enableExtensions: (ids: string[], dappName: string) => Promise<ExtensionEnableResults>;
@@ -1,7 +1,7 @@
1
1
  import { withTimeoutThrow } from '@w3ux/utils';
2
- export const enableExtensions = async (ids) => {
2
+ export const enableExtensions = async (ids, dappName) => {
3
3
  const extensionIds = getExtensionsById(ids);
4
- const enableResults = await doEnable(extensionIds);
4
+ const enableResults = await doEnable(extensionIds, dappName);
5
5
  return formatEnabledExtensions(extensionIds, enableResults);
6
6
  };
7
7
  const getExtensionsById = (ids) => {
@@ -14,12 +14,8 @@ const getExtensionsById = (ids) => {
14
14
  });
15
15
  return validIds;
16
16
  };
17
- const doEnable = async (extensionIds) => {
18
- const results = [];
19
- for (const id of extensionIds) {
20
- const result = (await withTimeoutThrow(1000, settle(window.injectedWeb3[id].enable())));
21
- results.push(result);
22
- }
17
+ const doEnable = async (extensionIds, dappName) => {
18
+ const results = await Promise.allSettled(extensionIds.map((id) => withTimeoutThrow(1000, settle(window.injectedWeb3[id].enable(dappName)))));
23
19
  return results;
24
20
  };
25
21
  const formatEnabledExtensions = (extensionIds, enabledResults) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extensions/enable.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAa,EAAE,EAAE;IACtD,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAA;IAElD,OAAO,uBAAuB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AAC7D,CAAC,CAAA;AAGD,MAAM,iBAAiB,GAAG,CAAC,GAAa,EAAE,EAAE;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAGD,MAAM,QAAQ,GAAG,KAAK,EACpB,YAAsB,EAC+B,EAAE;IACvD,MAAM,OAAO,GAA+C,EAAE,CAAA;IAC9D,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAE9B,MAAM,MAAM,GAAG,CAAC,MAAM,gBAAgB,CACpC,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CACzC,CAA6C,CAAA;QAE9C,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACtB,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAGD,MAAM,uBAAuB,GAAG,CAC9B,YAAsB,EACtB,cAA0D,EAClC,EAAE;IAC1B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAA;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAE1B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,MAAM,CAAC,KAAK;gBACvB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,MAAM,CAAC,MAAM;aACrB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC,CAAA;AAGD,MAAM,MAAM,GAAG,CAAI,OAAmB,EAAoC,EAAE,CAC1E,OAAO;KACJ,IAAI,CACH,CAAC,KAAK,EAA6B,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CACvE;KACA,KAAK,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA","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} from '@w3ux/types'\nimport { withTimeoutThrow } from '@w3ux/utils'\n\n// Get extensions and enable them\nexport const enableExtensions = async (ids: string[]) => {\n const extensionIds = getExtensionsById(ids)\n const enableResults = await doEnable(extensionIds)\n\n return formatEnabledExtensions(extensionIds, enableResults)\n}\n\n// Gets extensions from injectedWeb3 by their ids\nconst getExtensionsById = (ids: string[]) => {\n const validIds: string[] = []\n ids.forEach(async (id) => {\n const enable = window.injectedWeb3?.[id]?.enable\n if (enable !== undefined && typeof enable === 'function') {\n validIds.push(id)\n }\n })\n return validIds\n}\n\n// Calls enable for the provided extensions\nconst doEnable = async (\n extensionIds: string[]\n): Promise<PromiseSettledResult<ExtensionInterface>[]> => {\n const results: PromiseSettledResult<ExtensionInterface>[] = []\n for (const id of extensionIds) {\n // Give the extension up to 1 second to respond\n const result = (await withTimeoutThrow(\n 1000,\n settle(window.injectedWeb3[id].enable())\n )) as PromiseSettledResult<ExtensionInterface>\n\n results.push(result)\n }\n return results\n}\n\n// Formats the results of an extension's enable function\nconst formatEnabledExtensions = (\n extensionIds: string[],\n enabledResults: PromiseSettledResult<ExtensionInterface>[]\n): ExtensionEnableResults => {\n const extensionsState = new Map<string, ExtensionEnableResult>()\n\n for (let i = 0; i < enabledResults.length; i++) {\n const result = enabledResults[i]\n const id = extensionIds[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// Helper function to settle a promise with either fulfilled or rejected result\nconst settle = <T>(promise: Promise<T>): Promise<PromiseSettledResult<T>> =>\n promise\n .then(\n (value): PromiseFulfilledResult<T> => ({ status: 'fulfilled', value })\n )\n .catch((reason): PromiseRejectedResult => ({ status: 'rejected', reason }))\n"]}
1
+ {"version":3,"sources":["../src/extensions/enable.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAG9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAa,EAAE,QAAgB,EAAE,EAAE;IACxE,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC3C,MAAM,aAAa,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;IAE5D,OAAO,uBAAuB,CAAC,YAAY,EAAE,aAAa,CAAC,CAAA;AAC7D,CAAC,CAAA;AAGD,MAAM,iBAAiB,GAAG,CAAC,GAAa,EAAE,EAAE;IAC1C,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;QAChD,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,CAAC,CAAA;IACF,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAGD,MAAM,QAAQ,GAAG,KAAK,EACpB,YAAsB,EACtB,QAAgB,EACqC,EAAE;IACvD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,YAAY,CAAC,GAAG,CACd,CAAC,EAAE,EAAE,EAAE,CACL,gBAAgB,CACd,IAAI,EACJ,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAClB,CACnC,CACF,CAAA;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAGD,MAAM,uBAAuB,GAAG,CAC9B,YAAsB,EACtB,cAA0D,EAClC,EAAE;IAC1B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAiC,CAAA;IAEhE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAChC,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAE1B,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAClC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,MAAM,CAAC,KAAK;gBACvB,SAAS,EAAE,IAAI;aAChB,CAAC,CAAA;QACJ,CAAC;aAAM,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;gBACtB,SAAS,EAAE,KAAK;gBAChB,KAAK,EAAE,MAAM,CAAC,MAAM;aACrB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAA;AACxB,CAAC,CAAA;AAGD,MAAM,MAAM,GAAG,CAAI,OAAmB,EAAoC,EAAE,CAC1E,OAAO;KACJ,IAAI,CACH,CAAC,KAAK,EAA6B,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CACvE;KACA,KAAK,CAAC,CAAC,MAAM,EAAyB,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA","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} from '@w3ux/types'\nimport { withTimeoutThrow } from '@w3ux/utils'\n\n// Get extensions and enable them\nexport const enableExtensions = async (ids: string[], dappName: string) => {\n const extensionIds = getExtensionsById(ids)\n const enableResults = await doEnable(extensionIds, dappName)\n\n return formatEnabledExtensions(extensionIds, enableResults)\n}\n\n// Gets extensions from injectedWeb3 by their ids\nconst getExtensionsById = (ids: string[]) => {\n const validIds: string[] = []\n ids.forEach(async (id) => {\n const enable = window.injectedWeb3?.[id]?.enable\n if (enable !== undefined && typeof enable === 'function') {\n validIds.push(id)\n }\n })\n return validIds\n}\n\n// Calls enable for the provided extensions\nconst doEnable = async (\n extensionIds: string[],\n dappName: string\n): Promise<PromiseSettledResult<ExtensionInterface>[]> => {\n const results = await Promise.allSettled(\n extensionIds.map(\n (id) =>\n withTimeoutThrow(\n 1000,\n settle(window.injectedWeb3[id].enable(dappName))\n ) as Promise<ExtensionInterface>\n )\n )\n return results\n}\n\n// Formats the results of an extension's enable function\nconst formatEnabledExtensions = (\n extensionIds: string[],\n enabledResults: PromiseSettledResult<ExtensionInterface>[]\n): ExtensionEnableResults => {\n const extensionsState = new Map<string, ExtensionEnableResult>()\n\n for (let i = 0; i < enabledResults.length; i++) {\n const result = enabledResults[i]\n const id = extensionIds[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// Helper function to settle a promise with either fulfilled or rejected result\nconst settle = <T>(promise: Promise<T>): Promise<PromiseSettledResult<T>> =>\n promise\n .then(\n (value): PromiseFulfilledResult<T> => ({ status: 'fulfilled', value })\n )\n .catch((reason): PromiseRejectedResult => ({ status: 'rejected', reason }))\n"]}
@@ -1,23 +1,23 @@
1
1
  import { localStorageOrDefault } from '@w3ux/utils';
2
- import { ActiveExtensionsKey } from '../consts';
2
+ import { activeExtensionsKey } from '../consts';
3
3
  export const isExtensionLocal = (id) => {
4
- const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
4
+ const current = localStorageOrDefault(activeExtensionsKey, [], true);
5
5
  return Array.isArray(current) && current.includes(id);
6
6
  };
7
7
  export const getActiveExtensionsLocal = () => {
8
- const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
8
+ const current = localStorageOrDefault(activeExtensionsKey, [], true);
9
9
  return Array.isArray(current) ? current : [];
10
10
  };
11
11
  export const addExtensionToLocal = (id) => {
12
- const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
12
+ const current = localStorageOrDefault(activeExtensionsKey, [], true);
13
13
  if (Array.isArray(current) && !current.includes(id)) {
14
- localStorage.setItem(ActiveExtensionsKey, JSON.stringify([...current, id]));
14
+ localStorage.setItem(activeExtensionsKey, JSON.stringify([...current, id]));
15
15
  }
16
16
  };
17
17
  export const removeExtensionFromLocal = (id) => {
18
- const current = localStorageOrDefault(ActiveExtensionsKey, [], true);
18
+ const current = localStorageOrDefault(activeExtensionsKey, [], true);
19
19
  if (Array.isArray(current)) {
20
- localStorage.setItem(ActiveExtensionsKey, JSON.stringify(current.filter((localId) => localId !== id)));
20
+ localStorage.setItem(activeExtensionsKey, JSON.stringify(current.filter((localId) => localId !== id)));
21
21
  }
22
22
  };
23
23
 
@@ -1 +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,WAAW,CAAA;AAG/C,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,wBAAwB,GAAG,GAAa,EAAE;IACrD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,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 '../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// Gets all active extensions from local storage\nexport const getActiveExtensionsLocal = (): string[] => {\n const current = localStorageOrDefault<string[]>(ActiveExtensionsKey, [], true)\n return Array.isArray(current) ? current : []\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"]}
1
+ {"version":3,"sources":["../src/extensions/local.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAA;AAG/C,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,wBAAwB,GAAG,GAAa,EAAE;IACrD,MAAM,OAAO,GAAG,qBAAqB,CAAW,mBAAmB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAA;IAC9E,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAA;AAC9C,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 '../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// Gets all active extensions from local storage\nexport const getActiveExtensionsLocal = (): string[] => {\n const current = localStorageOrDefault<string[]>(activeExtensionsKey, [], true)\n return Array.isArray(current) ? current : []\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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@w3ux/observables-connect",
3
- "version": "0.9.18",
3
+ "version": "0.9.20",
4
4
  "license": "GPL-3.0-only",
5
5
  "dependencies": {
6
6
  "@w3ux/extension-assets": "^2.2.0",
package/index.d.ts DELETED
@@ -1,6 +0,0 @@
1
- import type { ImportedAccount, Sync } from '@w3ux/types';
2
- import { BehaviorSubject } from 'rxjs';
3
- export declare const _extensionAccountsSync: BehaviorSubject<Sync>;
4
- export declare const extensionAccountsSync$: import("rxjs").Observable<Sync>;
5
- export declare const _extensionAccounts: BehaviorSubject<ImportedAccount[]>;
6
- export declare const extensionAccounts$: import("rxjs").Observable<ImportedAccount[]>;
package/index.js DELETED
@@ -1,9 +0,0 @@
1
- import { BehaviorSubject } from 'rxjs';
2
- export const _extensionAccountsSync = new BehaviorSubject('unsynced');
3
- export const extensionAccountsSync$ = _extensionAccountsSync.asObservable();
4
- export const _extensionAccounts = new BehaviorSubject([]);
5
- export const extensionAccounts$ = _extensionAccounts.asObservable();
6
-
7
- //# sourceMappingURL=index.js.map
8
-
9
- //# sourceMappingURL=index.js.map
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAGtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,eAAe,CAAO,UAAU,CAAC,CAAA;AAC3E,MAAM,CAAC,MAAM,sBAAsB,GAAG,sBAAsB,CAAC,YAAY,EAAE,CAAA;AAG3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAA;AAC5E,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,YAAY,EAAE,CAAA","file":"index.js","sourcesContent":["/* @license Copyright 2024 w3ux authors & contributors\nSPDX-License-Identifier: GPL-3.0-only */\n\nimport type { ImportedAccount, Sync } from '@w3ux/types'\nimport { BehaviorSubject } from 'rxjs'\n\n// Sync status of extension accounts\nexport const _extensionAccountsSync = new BehaviorSubject<Sync>('unsynced')\nexport const extensionAccountsSync$ = _extensionAccountsSync.asObservable()\n\n// Discovered extension accounts\nexport const _extensionAccounts = new BehaviorSubject<ImportedAccount[]>([])\nexport const extensionAccounts$ = _extensionAccounts.asObservable()\n"]}