@w3ux/observables-connect 0.9.15-alpha.6 → 0.9.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -8,13 +8,10 @@ export const connectExtensions = async (dappName, extensionIds) => {
8
8
  };
9
9
  }
10
10
  const enableResults = await enableExtensions(extensionIds);
11
- console.log('enable results:', enableResults);
12
11
  const [connected, withError] = [
13
12
  filterConnectedExtensions(enableResults),
14
13
  filterFailedExtensions(enableResults),
15
14
  ];
16
- console.log('connected:', connected);
17
- console.log('with error:', withError);
18
15
  Array.from(connected.keys()).forEach((id) => addExtensionToLocal(id));
19
16
  Array.from(withError.keys()).forEach((id) => removeExtensionFromLocal(id));
20
17
  const newStatus = { ..._extensionsStatus.getValue() };
@@ -37,8 +34,6 @@ export const connectExtensions = async (dappName, extensionIds) => {
37
34
  newInitialised.push(id);
38
35
  }
39
36
  });
40
- console.log('new extension status:', newStatus);
41
- console.log('new intialised:', newInitialised);
42
37
  _extensionsStatus.next(newStatus);
43
38
  _initialisedExtensions.next(newInitialised);
44
39
  return { connected };
@@ -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 console.log('enable results:', enableResults)\n\n // Determine which extensions are connected and which have errors\n const [connected, withError] = [\n filterConnectedExtensions(enableResults),\n filterFailedExtensions(enableResults),\n ]\n\n console.log('connected:', connected)\n console.log('with error:', withError)\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 console.log('new extension status:', newStatus)\n console.log('new intialised:', newInitialised)\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)\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"]}
@@ -25,7 +25,7 @@ export const getExtensions = async () => {
25
25
  }
26
26
  else {
27
27
  const injectedWeb3 = window?.injectedWeb3 || null;
28
- if (injectedWeb3 !== null) {
28
+ if (injectedWeb3 !== null && counter > 2) {
29
29
  handleCompleted(true);
30
30
  }
31
31
  }
@@ -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,EAAE,CAAC;gBAC1B,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\n const injectedWeb3 = window?.injectedWeb3 || null\n if (injectedWeb3 !== null) {\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;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,15 +1,13 @@
1
+ import { withTimeoutThrow } from '@w3ux/utils';
1
2
  export const enableExtensions = async (ids) => {
2
3
  const extensionIds = getExtensionsById(ids);
3
- console.log('getting extensions by id:', extensionIds);
4
4
  const enableResults = await doEnable(extensionIds);
5
- console.log('enable results:', enableResults);
6
5
  return formatEnabledExtensions(extensionIds, enableResults);
7
6
  };
8
7
  const getExtensionsById = (ids) => {
9
8
  const validIds = [];
10
9
  ids.forEach(async (id) => {
11
10
  const enable = window.injectedWeb3?.[id]?.enable;
12
- console.log('enable fn: ', enable, typeof enable);
13
11
  if (enable !== undefined && typeof enable === 'function') {
14
12
  validIds.push(id);
15
13
  }
@@ -19,9 +17,7 @@ const getExtensionsById = (ids) => {
19
17
  const doEnable = async (extensionIds) => {
20
18
  const results = [];
21
19
  for (const id of extensionIds) {
22
- console.log('enabling extension: ', id);
23
- const result = await settle(window.injectedWeb3[id].enable());
24
- console.log('enable result: ', result);
20
+ const result = (await withTimeoutThrow(1000, settle(window.injectedWeb3[id].enable())));
25
21
  results.push(result);
26
22
  }
27
23
  return results;
@@ -31,7 +27,6 @@ const formatEnabledExtensions = (extensionIds, enabledResults) => {
31
27
  for (let i = 0; i < enabledResults.length; i++) {
32
28
  const result = enabledResults[i];
33
29
  const id = extensionIds[i];
34
- console.log('enable ', id, ' result: ', result);
35
30
  if (result.status === 'fulfilled') {
36
31
  extensionsState.set(id, {
37
32
  extension: result.value,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/extensions/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} from '@w3ux/types'\n\n// Get extensions and enable them\nexport const enableExtensions = async (ids: string[]) => {\n const extensionIds = getExtensionsById(ids)\n console.log('getting extensions by id:', extensionIds)\n\n const enableResults = await doEnable(extensionIds)\n console.log('enable results:', enableResults)\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 console.log('enable fn: ', enable, typeof 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\n for (const id of extensionIds) {\n console.log('enabling extension: ', id)\n const result = await settle(window.injectedWeb3[id].enable())\n console.log('enable result: ', result)\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 console.log('enable ', id, ' result: ', result)\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\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,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"]}
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@w3ux/observables-connect",
3
- "version": "0.9.15-alpha.6",
3
+ "version": "0.9.18",
4
4
  "license": "GPL-3.0-only",
5
5
  "dependencies": {
6
6
  "@w3ux/extension-assets": "^2.2.0",
7
- "@w3ux/utils": "^2.0.8"
7
+ "@w3ux/utils": "^2.0.9"
8
8
  },
9
9
  "type": "module",
10
10
  "peerDependencies": {