@starknet-io/get-starknet-wallet-standard 5.0.0-beta.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"chains.cjs","sources":["../src/chains.ts"],"sourcesContent":["import type { IdentifierString } from \"@wallet-standard/base\";\nimport { Hex } from \"ox\";\n\nexport type ChainId = `0x${string}`;\n\nexport const STARKNET_CHAIN_PREFIX = \"starknet:\";\n\nexport type StarknetChain = `${typeof STARKNET_CHAIN_PREFIX}${ChainId}`;\n\nexport class StarknetChainError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StarknetChainError\";\n }\n}\n\nexport const WELL_KNOWN_STARKNET_CHAINS = [\n \"starknet:0x534e5f4d41494e\", // mainnet\n \"starknet:0x534e5f5345504f4c4941\", // sepolia\n] as const satisfies StarknetChain[];\n\n/** Check if a chain identifier is a Starknet chain. */\nexport function isStarknetChain(chain: string): chain is StarknetChain {\n const parts = chain.split(\":\");\n if (parts.length !== 2 || parts[0] !== \"starknet\") {\n return false;\n }\n\n return Hex.validate(parts[1]);\n}\n\n/** Returns a `StarknetChain` from a `ChainId`. */\nexport function formatStarknetChainId(chainId: string): StarknetChain {\n if (!Hex.validate(chainId)) {\n throw new StarknetChainError(`Invalid Starknet chain id: ${chainId}`);\n }\n return `${STARKNET_CHAIN_PREFIX}${chainId}`;\n}\n\n/** Returns the 0x prefixed chain id. */\nexport function getStarknetChainId(chain: string): ChainId {\n if (!isStarknetChain(chain)) {\n throw new StarknetChainError(`Invalid Starknet chain: ${chain}`);\n }\n return chain.slice(STARKNET_CHAIN_PREFIX.length) as ChainId;\n}\n"],"names":["Hex"],"mappings":";;;;AAKO,MAAM,qBAAwB,GAAA,YAAA;AAI9B,MAAM,2BAA2B,KAAM,CAAA;AAAA,EAC5C,YAAY,OAAiB,EAAA;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,oBAAA,CAAA;AAAA,GACd;AACF,CAAA;AAEO,MAAM,0BAA6B,GAAA;AAAA,EACxC,2BAAA;AAAA;AAAA,EACA,iCAAA;AAAA;AACF,EAAA;AAGO,SAAS,gBAAgB,KAAuC,EAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,KAAM,CAAA,CAAC,MAAM,UAAY,EAAA;AACjD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAOA,MAAI,CAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC9B,CAAA;AAGO,SAAS,sBAAsB,OAAgC,EAAA;AACpE,EAAA,IAAI,CAACA,MAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAC1B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA8B,2BAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,GACtE;AACA,EAAO,OAAA,CAAA,EAAG,qBAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAC3C,CAAA;AAGO,SAAS,mBAAmB,KAAwB,EAAA;AACzD,EAAI,IAAA,CAAC,eAAgB,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA2B,wBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,KAAA,CAAM,KAAM,CAAA,qBAAA,CAAsB,MAAM,CAAA,CAAA;AACjD;;;;;;;;;"}
1
+ {"version":3,"file":"chains.cjs","sources":["../src/chains.ts"],"sourcesContent":["import { Hex } from \"ox\";\n\nexport type ChainId = `0x${string}`;\n\nexport const STARKNET_CHAIN_PREFIX = \"starknet:\";\n\nexport type StarknetChain = `${typeof STARKNET_CHAIN_PREFIX}${ChainId}`;\n\nexport class StarknetChainError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StarknetChainError\";\n }\n}\n\nexport const WELL_KNOWN_STARKNET_CHAINS = [\n \"starknet:0x534e5f4d41494e\", // mainnet\n \"starknet:0x534e5f5345504f4c4941\", // sepolia\n] as const satisfies StarknetChain[];\n\n/** Check if a chain identifier is a Starknet chain. */\nexport function isStarknetChain(chain: string): chain is StarknetChain {\n const parts = chain.split(\":\");\n if (parts.length !== 2 || parts[0] !== \"starknet\") {\n return false;\n }\n\n return Hex.validate(parts[1]);\n}\n\n/** Returns a `StarknetChain` from a `ChainId`. */\nexport function formatStarknetChainId(chainId: string): StarknetChain {\n if (!Hex.validate(chainId)) {\n throw new StarknetChainError(`Invalid Starknet chain id: ${chainId}`);\n }\n return `${STARKNET_CHAIN_PREFIX}${chainId}`;\n}\n\n/** Returns the 0x prefixed chain id. */\nexport function getStarknetChainId(chain: string): ChainId {\n if (!isStarknetChain(chain)) {\n throw new StarknetChainError(`Invalid Starknet chain: ${chain}`);\n }\n return chain.slice(STARKNET_CHAIN_PREFIX.length) as ChainId;\n}\n"],"names":["Hex"],"mappings":";;;;AAIO,MAAM,qBAAwB,GAAA,YAAA;AAI9B,MAAM,2BAA2B,KAAM,CAAA;AAAA,EAC5C,YAAY,OAAiB,EAAA;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,oBAAA,CAAA;AAAA,GACd;AACF,CAAA;AAEO,MAAM,0BAA6B,GAAA;AAAA,EACxC,2BAAA;AAAA;AAAA,EACA,iCAAA;AAAA;AACF,EAAA;AAGO,SAAS,gBAAgB,KAAuC,EAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,KAAM,CAAA,CAAC,MAAM,UAAY,EAAA;AACjD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAOA,MAAI,CAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC9B,CAAA;AAGO,SAAS,sBAAsB,OAAgC,EAAA;AACpE,EAAA,IAAI,CAACA,MAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAC1B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA8B,2BAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,GACtE;AACA,EAAO,OAAA,CAAA,EAAG,qBAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAC3C,CAAA;AAGO,SAAS,mBAAmB,KAAwB,EAAA;AACzD,EAAI,IAAA,CAAC,eAAgB,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA2B,wBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,KAAA,CAAM,KAAM,CAAA,qBAAA,CAAsB,MAAM,CAAA,CAAA;AACjD;;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"chains.mjs","sources":["../src/chains.ts"],"sourcesContent":["import type { IdentifierString } from \"@wallet-standard/base\";\nimport { Hex } from \"ox\";\n\nexport type ChainId = `0x${string}`;\n\nexport const STARKNET_CHAIN_PREFIX = \"starknet:\";\n\nexport type StarknetChain = `${typeof STARKNET_CHAIN_PREFIX}${ChainId}`;\n\nexport class StarknetChainError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StarknetChainError\";\n }\n}\n\nexport const WELL_KNOWN_STARKNET_CHAINS = [\n \"starknet:0x534e5f4d41494e\", // mainnet\n \"starknet:0x534e5f5345504f4c4941\", // sepolia\n] as const satisfies StarknetChain[];\n\n/** Check if a chain identifier is a Starknet chain. */\nexport function isStarknetChain(chain: string): chain is StarknetChain {\n const parts = chain.split(\":\");\n if (parts.length !== 2 || parts[0] !== \"starknet\") {\n return false;\n }\n\n return Hex.validate(parts[1]);\n}\n\n/** Returns a `StarknetChain` from a `ChainId`. */\nexport function formatStarknetChainId(chainId: string): StarknetChain {\n if (!Hex.validate(chainId)) {\n throw new StarknetChainError(`Invalid Starknet chain id: ${chainId}`);\n }\n return `${STARKNET_CHAIN_PREFIX}${chainId}`;\n}\n\n/** Returns the 0x prefixed chain id. */\nexport function getStarknetChainId(chain: string): ChainId {\n if (!isStarknetChain(chain)) {\n throw new StarknetChainError(`Invalid Starknet chain: ${chain}`);\n }\n return chain.slice(STARKNET_CHAIN_PREFIX.length) as ChainId;\n}\n"],"names":[],"mappings":";;AAKO,MAAM,qBAAwB,GAAA,YAAA;AAI9B,MAAM,2BAA2B,KAAM,CAAA;AAAA,EAC5C,YAAY,OAAiB,EAAA;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,oBAAA,CAAA;AAAA,GACd;AACF,CAAA;AAEO,MAAM,0BAA6B,GAAA;AAAA,EACxC,2BAAA;AAAA;AAAA,EACA,iCAAA;AAAA;AACF,EAAA;AAGO,SAAS,gBAAgB,KAAuC,EAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,KAAM,CAAA,CAAC,MAAM,UAAY,EAAA;AACjD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,GAAI,CAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC9B,CAAA;AAGO,SAAS,sBAAsB,OAAgC,EAAA;AACpE,EAAA,IAAI,CAAC,GAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAC1B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA8B,2BAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,GACtE;AACA,EAAO,OAAA,CAAA,EAAG,qBAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAC3C,CAAA;AAGO,SAAS,mBAAmB,KAAwB,EAAA;AACzD,EAAI,IAAA,CAAC,eAAgB,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA2B,wBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,KAAA,CAAM,KAAM,CAAA,qBAAA,CAAsB,MAAM,CAAA,CAAA;AACjD;;;;"}
1
+ {"version":3,"file":"chains.mjs","sources":["../src/chains.ts"],"sourcesContent":["import { Hex } from \"ox\";\n\nexport type ChainId = `0x${string}`;\n\nexport const STARKNET_CHAIN_PREFIX = \"starknet:\";\n\nexport type StarknetChain = `${typeof STARKNET_CHAIN_PREFIX}${ChainId}`;\n\nexport class StarknetChainError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"StarknetChainError\";\n }\n}\n\nexport const WELL_KNOWN_STARKNET_CHAINS = [\n \"starknet:0x534e5f4d41494e\", // mainnet\n \"starknet:0x534e5f5345504f4c4941\", // sepolia\n] as const satisfies StarknetChain[];\n\n/** Check if a chain identifier is a Starknet chain. */\nexport function isStarknetChain(chain: string): chain is StarknetChain {\n const parts = chain.split(\":\");\n if (parts.length !== 2 || parts[0] !== \"starknet\") {\n return false;\n }\n\n return Hex.validate(parts[1]);\n}\n\n/** Returns a `StarknetChain` from a `ChainId`. */\nexport function formatStarknetChainId(chainId: string): StarknetChain {\n if (!Hex.validate(chainId)) {\n throw new StarknetChainError(`Invalid Starknet chain id: ${chainId}`);\n }\n return `${STARKNET_CHAIN_PREFIX}${chainId}`;\n}\n\n/** Returns the 0x prefixed chain id. */\nexport function getStarknetChainId(chain: string): ChainId {\n if (!isStarknetChain(chain)) {\n throw new StarknetChainError(`Invalid Starknet chain: ${chain}`);\n }\n return chain.slice(STARKNET_CHAIN_PREFIX.length) as ChainId;\n}\n"],"names":[],"mappings":";;AAIO,MAAM,qBAAwB,GAAA,YAAA;AAI9B,MAAM,2BAA2B,KAAM,CAAA;AAAA,EAC5C,YAAY,OAAiB,EAAA;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,oBAAA,CAAA;AAAA,GACd;AACF,CAAA;AAEO,MAAM,0BAA6B,GAAA;AAAA,EACxC,2BAAA;AAAA;AAAA,EACA,iCAAA;AAAA;AACF,EAAA;AAGO,SAAS,gBAAgB,KAAuC,EAAA;AACrE,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC7B,EAAA,IAAI,MAAM,MAAW,KAAA,CAAA,IAAK,KAAM,CAAA,CAAC,MAAM,UAAY,EAAA;AACjD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,OAAO,GAAI,CAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC9B,CAAA;AAGO,SAAS,sBAAsB,OAAgC,EAAA;AACpE,EAAA,IAAI,CAAC,GAAA,CAAI,QAAS,CAAA,OAAO,CAAG,EAAA;AAC1B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA8B,2BAAA,EAAA,OAAO,CAAE,CAAA,CAAA,CAAA;AAAA,GACtE;AACA,EAAO,OAAA,CAAA,EAAG,qBAAqB,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA;AAC3C,CAAA;AAGO,SAAS,mBAAmB,KAAwB,EAAA;AACzD,EAAI,IAAA,CAAC,eAAgB,CAAA,KAAK,CAAG,EAAA;AAC3B,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAA2B,wBAAA,EAAA,KAAK,CAAE,CAAA,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,KAAA,CAAM,KAAM,CAAA,qBAAA,CAAsB,MAAM,CAAA,CAAA;AACjD;;;;"}
package/dist/features.cjs CHANGED
@@ -15,6 +15,9 @@ function isStarknetWallet(wallet) {
15
15
  );
16
16
  }
17
17
 
18
+ exports.StandardConnect = features.StandardConnect;
19
+ exports.StandardDisconnect = features.StandardDisconnect;
20
+ exports.StandardEvents = features.StandardEvents;
18
21
  exports.RequiredStarknetFeatures = RequiredStarknetFeatures;
19
22
  exports.StarknetWalletApi = StarknetWalletApi;
20
23
  exports.isStarknetWallet = isStarknetWallet;
@@ -1 +1 @@
1
- {"version":3,"file":"features.cjs","sources":["../src/features.ts"],"sourcesContent":["import type { RequestFn } from \"@starknet-io/types-js\";\nimport type { Wallet, WalletWithFeatures } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n StandardDisconnect,\n type StandardEventsFeature,\n type StandardConnectFeature,\n type StandardDisconnectFeature,\n StandardEvents,\n} from \"@wallet-standard/features\";\n\nexport const StarknetWalletApi = \"starknet:walletApi\";\n\nexport type StarknetWalletApiVersion = \"1.0.0\";\n\n/** A Wallet Standard feature for wallets that implement Starknet's wallet API. */\nexport type StarknetWalletRequestFeature = {\n readonly [StarknetWalletApi]: {\n readonly version: StarknetWalletApiVersion;\n readonly request: RequestFn;\n readonly walletVersion: string;\n };\n};\n\nexport type StarknetFeatures = StarknetWalletRequestFeature &\n StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature;\nexport type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;\n\nexport const RequiredStarknetFeatures = [\n StarknetWalletApi,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n] as const satisfies (keyof StarknetFeatures)[];\n\n/** Check if a wallet is a Starknet wallet. */\nexport function isStarknetWallet(\n wallet: Wallet,\n): wallet is WalletWithStarknetFeatures {\n return RequiredStarknetFeatures.every(\n (feature) => feature in wallet.features,\n );\n}\n"],"names":["StandardConnect","StandardDisconnect","StandardEvents"],"mappings":";;;;AAWO,MAAM,iBAAoB,GAAA,qBAAA;AAmB1B,MAAM,wBAA2B,GAAA;AAAA,EACtC,iBAAA;AAAA,EACAA,wBAAA;AAAA,EACAC,2BAAA;AAAA,EACAC,uBAAA;AACF,EAAA;AAGO,SAAS,iBACd,MACsC,EAAA;AACtC,EAAA,OAAO,wBAAyB,CAAA,KAAA;AAAA,IAC9B,CAAC,OAAY,KAAA,OAAA,IAAW,MAAO,CAAA,QAAA;AAAA,GACjC,CAAA;AACF;;;;;;"}
1
+ {"version":3,"file":"features.cjs","sources":["../src/features.ts"],"sourcesContent":["import type { RequestFn } from \"@starknet-io/types-js\";\nimport type { Wallet, WalletWithFeatures } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectFeature,\n StandardDisconnect,\n type StandardDisconnectFeature,\n StandardEvents,\n type StandardEventsFeature,\n} from \"@wallet-standard/features\";\n\nexport const StarknetWalletApi = \"starknet:walletApi\";\n\nexport type StarknetWalletApiVersion = \"1.0.0\";\n\n/** A Wallet Standard feature for wallets that implement Starknet's wallet API. */\nexport type StarknetWalletRequestFeature = {\n readonly [StarknetWalletApi]: {\n readonly version: StarknetWalletApiVersion;\n readonly request: RequestFn;\n readonly walletVersion: string;\n readonly id: string;\n };\n};\n\nexport {\n StandardConnect,\n type StandardConnectFeature,\n StandardDisconnect,\n type StandardDisconnectFeature,\n StandardEvents,\n type StandardEventsChangeProperties,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n type StandardEventsVersion,\n} from \"@wallet-standard/features\";\n\nexport type StarknetFeatures = StarknetWalletRequestFeature &\n StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature;\n\nexport type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;\n\nexport const RequiredStarknetFeatures = [\n StarknetWalletApi,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n] as const satisfies (keyof StarknetFeatures)[];\n\n/** Check if a wallet is a Starknet wallet. */\nexport function isStarknetWallet(\n wallet: Wallet,\n): wallet is WalletWithStarknetFeatures {\n return RequiredStarknetFeatures.every(\n (feature) => feature in wallet.features,\n );\n}\n"],"names":["StandardConnect","StandardDisconnect","StandardEvents"],"mappings":";;;;AAWO,MAAM,iBAAoB,GAAA,qBAAA;AAmC1B,MAAM,wBAA2B,GAAA;AAAA,EACtC,iBAAA;AAAA,EACAA,wBAAA;AAAA,EACAC,2BAAA;AAAA,EACAC,uBAAA;AACF,EAAA;AAGO,SAAS,iBACd,MACsC,EAAA;AACtC,EAAA,OAAO,wBAAyB,CAAA,KAAA;AAAA,IAC9B,CAAC,OAAY,KAAA,OAAA,IAAW,MAAO,CAAA,QAAA;AAAA,GACjC,CAAA;AACF;;;;;;;;;"}
@@ -1,6 +1,7 @@
1
1
  import { RequestFn } from '@starknet-io/types-js';
2
2
  import { WalletWithFeatures, Wallet } from '@wallet-standard/base';
3
3
  import { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature } from '@wallet-standard/features';
4
+ export { StandardConnect, StandardConnectFeature, StandardDisconnect, StandardDisconnectFeature, StandardEvents, StandardEventsChangeProperties, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod, StandardEventsVersion } from '@wallet-standard/features';
4
5
 
5
6
  declare const StarknetWalletApi = "starknet:walletApi";
6
7
  type StarknetWalletApiVersion = "1.0.0";
@@ -10,8 +11,10 @@ type StarknetWalletRequestFeature = {
10
11
  readonly version: StarknetWalletApiVersion;
11
12
  readonly request: RequestFn;
12
13
  readonly walletVersion: string;
14
+ readonly id: string;
13
15
  };
14
16
  };
17
+
15
18
  type StarknetFeatures = StarknetWalletRequestFeature & StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature;
16
19
  type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;
17
20
  declare const RequiredStarknetFeatures: ["starknet:walletApi", "standard:connect", "standard:disconnect", "standard:events"];
@@ -1,6 +1,7 @@
1
1
  import { RequestFn } from '@starknet-io/types-js';
2
2
  import { WalletWithFeatures, Wallet } from '@wallet-standard/base';
3
3
  import { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature } from '@wallet-standard/features';
4
+ export { StandardConnect, StandardConnectFeature, StandardDisconnect, StandardDisconnectFeature, StandardEvents, StandardEventsChangeProperties, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod, StandardEventsVersion } from '@wallet-standard/features';
4
5
 
5
6
  declare const StarknetWalletApi = "starknet:walletApi";
6
7
  type StarknetWalletApiVersion = "1.0.0";
@@ -10,8 +11,10 @@ type StarknetWalletRequestFeature = {
10
11
  readonly version: StarknetWalletApiVersion;
11
12
  readonly request: RequestFn;
12
13
  readonly walletVersion: string;
14
+ readonly id: string;
13
15
  };
14
16
  };
17
+
15
18
  type StarknetFeatures = StarknetWalletRequestFeature & StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature;
16
19
  type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;
17
20
  declare const RequiredStarknetFeatures: ["starknet:walletApi", "standard:connect", "standard:disconnect", "standard:events"];
@@ -1,6 +1,7 @@
1
1
  import { RequestFn } from '@starknet-io/types-js';
2
2
  import { WalletWithFeatures, Wallet } from '@wallet-standard/base';
3
3
  import { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature } from '@wallet-standard/features';
4
+ export { StandardConnect, StandardConnectFeature, StandardDisconnect, StandardDisconnectFeature, StandardEvents, StandardEventsChangeProperties, StandardEventsFeature, StandardEventsListeners, StandardEventsNames, StandardEventsOnMethod, StandardEventsVersion } from '@wallet-standard/features';
4
5
 
5
6
  declare const StarknetWalletApi = "starknet:walletApi";
6
7
  type StarknetWalletApiVersion = "1.0.0";
@@ -10,8 +11,10 @@ type StarknetWalletRequestFeature = {
10
11
  readonly version: StarknetWalletApiVersion;
11
12
  readonly request: RequestFn;
12
13
  readonly walletVersion: string;
14
+ readonly id: string;
13
15
  };
14
16
  };
17
+
15
18
  type StarknetFeatures = StarknetWalletRequestFeature & StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature;
16
19
  type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;
17
20
  declare const RequiredStarknetFeatures: ["starknet:walletApi", "standard:connect", "standard:disconnect", "standard:events"];
package/dist/features.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';
2
+ export { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';
2
3
 
3
4
  const StarknetWalletApi = "starknet:walletApi";
4
5
  const RequiredStarknetFeatures = [
@@ -1 +1 @@
1
- {"version":3,"file":"features.mjs","sources":["../src/features.ts"],"sourcesContent":["import type { RequestFn } from \"@starknet-io/types-js\";\nimport type { Wallet, WalletWithFeatures } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n StandardDisconnect,\n type StandardEventsFeature,\n type StandardConnectFeature,\n type StandardDisconnectFeature,\n StandardEvents,\n} from \"@wallet-standard/features\";\n\nexport const StarknetWalletApi = \"starknet:walletApi\";\n\nexport type StarknetWalletApiVersion = \"1.0.0\";\n\n/** A Wallet Standard feature for wallets that implement Starknet's wallet API. */\nexport type StarknetWalletRequestFeature = {\n readonly [StarknetWalletApi]: {\n readonly version: StarknetWalletApiVersion;\n readonly request: RequestFn;\n readonly walletVersion: string;\n };\n};\n\nexport type StarknetFeatures = StarknetWalletRequestFeature &\n StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature;\nexport type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;\n\nexport const RequiredStarknetFeatures = [\n StarknetWalletApi,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n] as const satisfies (keyof StarknetFeatures)[];\n\n/** Check if a wallet is a Starknet wallet. */\nexport function isStarknetWallet(\n wallet: Wallet,\n): wallet is WalletWithStarknetFeatures {\n return RequiredStarknetFeatures.every(\n (feature) => feature in wallet.features,\n );\n}\n"],"names":[],"mappings":";;AAWO,MAAM,iBAAoB,GAAA,qBAAA;AAmB1B,MAAM,wBAA2B,GAAA;AAAA,EACtC,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AACF,EAAA;AAGO,SAAS,iBACd,MACsC,EAAA;AACtC,EAAA,OAAO,wBAAyB,CAAA,KAAA;AAAA,IAC9B,CAAC,OAAY,KAAA,OAAA,IAAW,MAAO,CAAA,QAAA;AAAA,GACjC,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"features.mjs","sources":["../src/features.ts"],"sourcesContent":["import type { RequestFn } from \"@starknet-io/types-js\";\nimport type { Wallet, WalletWithFeatures } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectFeature,\n StandardDisconnect,\n type StandardDisconnectFeature,\n StandardEvents,\n type StandardEventsFeature,\n} from \"@wallet-standard/features\";\n\nexport const StarknetWalletApi = \"starknet:walletApi\";\n\nexport type StarknetWalletApiVersion = \"1.0.0\";\n\n/** A Wallet Standard feature for wallets that implement Starknet's wallet API. */\nexport type StarknetWalletRequestFeature = {\n readonly [StarknetWalletApi]: {\n readonly version: StarknetWalletApiVersion;\n readonly request: RequestFn;\n readonly walletVersion: string;\n readonly id: string;\n };\n};\n\nexport {\n StandardConnect,\n type StandardConnectFeature,\n StandardDisconnect,\n type StandardDisconnectFeature,\n StandardEvents,\n type StandardEventsChangeProperties,\n type StandardEventsFeature,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n type StandardEventsVersion,\n} from \"@wallet-standard/features\";\n\nexport type StarknetFeatures = StarknetWalletRequestFeature &\n StandardConnectFeature &\n StandardDisconnectFeature &\n StandardEventsFeature;\n\nexport type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;\n\nexport const RequiredStarknetFeatures = [\n StarknetWalletApi,\n StandardConnect,\n StandardDisconnect,\n StandardEvents,\n] as const satisfies (keyof StarknetFeatures)[];\n\n/** Check if a wallet is a Starknet wallet. */\nexport function isStarknetWallet(\n wallet: Wallet,\n): wallet is WalletWithStarknetFeatures {\n return RequiredStarknetFeatures.every(\n (feature) => feature in wallet.features,\n );\n}\n"],"names":[],"mappings":";;;AAWO,MAAM,iBAAoB,GAAA,qBAAA;AAmC1B,MAAM,wBAA2B,GAAA;AAAA,EACtC,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA,cAAA;AACF,EAAA;AAGO,SAAS,iBACd,MACsC,EAAA;AACtC,EAAA,OAAO,wBAAyB,CAAA,KAAA;AAAA,IAC9B,CAAC,OAAY,KAAA,OAAA,IAAW,MAAO,CAAA,QAAA;AAAA,GACjC,CAAA;AACF;;;;"}
package/dist/index.cjs CHANGED
@@ -96,6 +96,7 @@ class StarknetInjectedWallet {
96
96
  on: __privateGet(this, _on).bind(this)
97
97
  },
98
98
  [features$1.StarknetWalletApi]: {
99
+ id: this.injected.id,
99
100
  version: "1.0.0",
100
101
  request: __privateMethod(this, _request, request_fn).bind(this),
101
102
  walletVersion: this.injected.version
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/injected-wallet.ts"],"sourcesContent":["import type { RequestFn, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\n\nimport {\n formatStarknetChainId,\n isStarknetChain,\n type StarknetChain,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"./chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"./features\";\nimport type { StarknetWalletAccount } from \"./wallet\";\n\nexport class StarknetInjectedWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n\n constructor(private readonly injected: StarknetWindowObject) {\n this.injected.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n this.injected.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n }\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.injected.name;\n }\n\n get icon() {\n if (typeof this.injected.icon === \"string\") {\n return this.injected.icon as Wallet[\"icon\"];\n }\n\n return this.injected.icon.light as Wallet[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: this.injected.version,\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent }) => {\n if (!this.#account) {\n const accounts = await this.injected.request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#updateAccount(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #onAccountsChanged(accounts: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n await this.#updateAccount(accounts);\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Some wallets (like Keplr) don't provide accounts on network change.\n if (accounts?.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n this.#account = { address: this.#account?.address, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #updateAccount(accounts: string[]) {\n if (accounts.length === 0) {\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request(...args: Parameters<RequestFn>): ReturnType<RequestFn> {\n return this.injected.request(...args);\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.injected.request({\n type: \"wallet_requestChainId\",\n });\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n return chain;\n }\n}\n"],"names":["StandardConnect","StandardDisconnect","StandardEvents","StarknetWalletApi","WELL_KNOWN_STARKNET_CHAINS","formatStarknetChainId","isStarknetChain"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/injected-wallet.ts"],"sourcesContent":["import type { RequestFn, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\n\nimport {\n formatStarknetChainId,\n isStarknetChain,\n type StarknetChain,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"./chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"./features\";\nimport type { StarknetWalletAccount } from \"./wallet\";\n\nexport class StarknetInjectedWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n\n constructor(private readonly injected: StarknetWindowObject) {\n this.injected.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n this.injected.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n }\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.injected.name;\n }\n\n get icon() {\n if (typeof this.injected.icon === \"string\") {\n return this.injected.icon as Wallet[\"icon\"];\n }\n\n return this.injected.icon.light as Wallet[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n id: this.injected.id,\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: this.injected.version,\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent }) => {\n if (!this.#account) {\n const accounts = await this.injected.request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#updateAccount(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #onAccountsChanged(accounts: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n await this.#updateAccount(accounts);\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Some wallets (like Keplr) don't provide accounts on network change.\n if (accounts?.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n this.#account = { address: this.#account?.address, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #updateAccount(accounts: string[]) {\n if (accounts.length === 0) {\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request(...args: Parameters<RequestFn>): ReturnType<RequestFn> {\n return this.injected.request(...args);\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.injected.request({\n type: \"wallet_requestChainId\",\n });\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n return chain;\n }\n}\n"],"names":["StandardConnect","StandardDisconnect","StandardEvents","StarknetWalletApi","WELL_KNOWN_STARKNET_CHAINS","formatStarknetChainId","isStarknetChain"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -94,6 +94,7 @@ class StarknetInjectedWallet {
94
94
  on: __privateGet(this, _on).bind(this)
95
95
  },
96
96
  [StarknetWalletApi]: {
97
+ id: this.injected.id,
97
98
  version: "1.0.0",
98
99
  request: __privateMethod(this, _request, request_fn).bind(this),
99
100
  walletVersion: this.injected.version
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/injected-wallet.ts"],"sourcesContent":["import type { RequestFn, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\n\nimport {\n formatStarknetChainId,\n isStarknetChain,\n type StarknetChain,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"./chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"./features\";\nimport type { StarknetWalletAccount } from \"./wallet\";\n\nexport class StarknetInjectedWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n\n constructor(private readonly injected: StarknetWindowObject) {\n this.injected.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n this.injected.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n }\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.injected.name;\n }\n\n get icon() {\n if (typeof this.injected.icon === \"string\") {\n return this.injected.icon as Wallet[\"icon\"];\n }\n\n return this.injected.icon.light as Wallet[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: this.injected.version,\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent }) => {\n if (!this.#account) {\n const accounts = await this.injected.request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#updateAccount(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #onAccountsChanged(accounts: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n await this.#updateAccount(accounts);\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Some wallets (like Keplr) don't provide accounts on network change.\n if (accounts?.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n this.#account = { address: this.#account?.address, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #updateAccount(accounts: string[]) {\n if (accounts.length === 0) {\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request(...args: Parameters<RequestFn>): ReturnType<RequestFn> {\n return this.injected.request(...args);\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.injected.request({\n type: \"wallet_requestChainId\",\n });\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n return chain;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/injected-wallet.ts"],"sourcesContent":["import type { RequestFn, StarknetWindowObject } from \"@starknet-io/types-js\";\nimport type { Wallet } from \"@wallet-standard/base\";\nimport {\n StandardConnect,\n type StandardConnectMethod,\n StandardDisconnect,\n type StandardDisconnectMethod,\n StandardEvents,\n type StandardEventsListeners,\n type StandardEventsNames,\n type StandardEventsOnMethod,\n} from \"@wallet-standard/features\";\n\nimport {\n formatStarknetChainId,\n isStarknetChain,\n type StarknetChain,\n WELL_KNOWN_STARKNET_CHAINS,\n} from \"./chains\";\nimport {\n type StarknetFeatures,\n StarknetWalletApi,\n type WalletWithStarknetFeatures,\n} from \"./features\";\nimport type { StarknetWalletAccount } from \"./wallet\";\n\nexport class StarknetInjectedWallet implements WalletWithStarknetFeatures {\n #listeners: { [E in StandardEventsNames]?: StandardEventsListeners[E][] } =\n {};\n #account: { address: string; chain: StarknetChain } | null = null;\n\n constructor(private readonly injected: StarknetWindowObject) {\n this.injected.on(\"accountsChanged\", this.#onAccountsChanged.bind(this));\n this.injected.on(\"networkChanged\", this.#onNetworkChanged.bind(this));\n }\n\n get version() {\n return \"1.0.0\" as const;\n }\n\n get name() {\n return this.injected.name;\n }\n\n get icon() {\n if (typeof this.injected.icon === \"string\") {\n return this.injected.icon as Wallet[\"icon\"];\n }\n\n return this.injected.icon.light as Wallet[\"icon\"];\n }\n\n get features(): StarknetFeatures {\n return {\n [StandardConnect]: {\n version: \"1.0.0\" as const,\n connect: this.#connect.bind(this),\n },\n [StandardDisconnect]: {\n version: \"1.0.0\" as const,\n disconnect: this.#disconnect.bind(this),\n },\n [StandardEvents]: {\n version: \"1.0.0\" as const,\n on: this.#on.bind(this),\n },\n [StarknetWalletApi]: {\n id: this.injected.id,\n version: \"1.0.0\" as const,\n request: this.#request.bind(this),\n walletVersion: this.injected.version,\n },\n };\n }\n\n get chains() {\n return WELL_KNOWN_STARKNET_CHAINS.slice();\n }\n\n get accounts(): StarknetWalletAccount[] {\n if (this.#account) {\n return [\n {\n address: this.#account.address,\n publicKey: new Uint8Array(),\n chains: [this.#account.chain],\n features: [],\n },\n ];\n }\n\n return [];\n }\n\n #connect: StandardConnectMethod = async ({ silent }) => {\n if (!this.#account) {\n const accounts = await this.injected.request({\n type: \"wallet_requestAccounts\",\n params: {\n silent_mode: silent,\n },\n });\n\n // TODO(fra): maybe we should throw an error here?\n // User rejected the request.\n if (accounts.length === 0) {\n return { accounts: [] };\n }\n\n await this.#updateAccount(accounts);\n }\n\n return { accounts: this.accounts };\n };\n\n #disconnect: StandardDisconnectMethod = async () => {\n this.#disconnected();\n };\n\n #on: StandardEventsOnMethod = (event, listener) => {\n if (!this.#listeners[event]) {\n this.#listeners[event] = [];\n }\n\n this.#listeners[event].push(listener);\n\n return (): void => this.#off(event, listener);\n };\n\n #emit<E extends StandardEventsNames>(\n event: E,\n ...args: Parameters<StandardEventsListeners[E]>\n ): void {\n if (!this.#listeners[event]) return;\n\n for (const listener of this.#listeners[event]) {\n listener.apply(null, args);\n }\n }\n\n #off<E extends StandardEventsNames>(\n event: E,\n listener: StandardEventsListeners[E],\n ): void {\n this.#listeners[event] = this.#listeners[event]?.filter(\n (existingListener) => listener !== existingListener,\n );\n }\n\n #disconnected() {\n if (this.#account) {\n this.#account = null;\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #onAccountsChanged(accounts: string[]) {\n if (!accounts || accounts.length === 0) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n await this.#updateAccount(accounts);\n }\n\n #onNetworkChanged(chainId?: string, accounts?: string[]) {\n if (!chainId) {\n this.#disconnected();\n return;\n }\n\n if (!this.#account) {\n return;\n }\n\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n // Some wallets (like Keplr) don't provide accounts on network change.\n if (accounts?.length > 0) {\n const [account] = accounts;\n\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n this.#account = { address: this.#account?.address, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n async #updateAccount(accounts: string[]) {\n if (accounts.length === 0) {\n return;\n }\n\n const [account] = accounts;\n\n if (this.#account?.chain) {\n // Only account changed. No need to make a request for the chain id.\n this.#account.address = account;\n this.#emit(\"change\", { accounts: this.accounts });\n } else {\n const chain = await this.#getStarknetChain();\n this.#account = { address: account, chain };\n this.#emit(\"change\", { accounts: this.accounts });\n }\n }\n\n #request(...args: Parameters<RequestFn>): ReturnType<RequestFn> {\n return this.injected.request(...args);\n }\n\n async #getStarknetChain(): Promise<StarknetChain> {\n const chainId = await this.injected.request({\n type: \"wallet_requestChainId\",\n });\n const chain = formatStarknetChainId(chainId);\n\n if (!isStarknetChain(chain)) {\n throw new Error(`Invalid Starknet chain: ${chain}`);\n }\n\n return chain;\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@starknet-io/get-starknet-wallet-standard",
3
- "version": "5.0.0-beta.0",
3
+ "version": "5.0.0",
4
4
  "keywords": [
5
5
  "starknet",
6
6
  "starkware",
@@ -51,10 +51,10 @@
51
51
  },
52
52
  "scripts": {
53
53
  "build": "unbuild",
54
- "format:check": "biome format .",
54
+ "lint:check": "biome check .",
55
+ "lint": "biome check --write .",
55
56
  "format": "biome format --write .",
56
- "lint:check": "biome lint .",
57
- "lint": "biome lint --write .",
57
+ "format:check": "biome format .",
58
58
  "test": "vitest"
59
59
  }
60
60
  }
package/src/chains.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { IdentifierString } from "@wallet-standard/base";
2
1
  import { Hex } from "ox";
3
2
 
4
3
  export type ChainId = `0x${string}`;
package/src/features.ts CHANGED
@@ -2,11 +2,11 @@ import type { RequestFn } from "@starknet-io/types-js";
2
2
  import type { Wallet, WalletWithFeatures } from "@wallet-standard/base";
3
3
  import {
4
4
  StandardConnect,
5
- StandardDisconnect,
6
- type StandardEventsFeature,
7
5
  type StandardConnectFeature,
6
+ StandardDisconnect,
8
7
  type StandardDisconnectFeature,
9
8
  StandardEvents,
9
+ type StandardEventsFeature,
10
10
  } from "@wallet-standard/features";
11
11
 
12
12
  export const StarknetWalletApi = "starknet:walletApi";
@@ -19,13 +19,29 @@ export type StarknetWalletRequestFeature = {
19
19
  readonly version: StarknetWalletApiVersion;
20
20
  readonly request: RequestFn;
21
21
  readonly walletVersion: string;
22
+ readonly id: string;
22
23
  };
23
24
  };
24
25
 
26
+ export {
27
+ StandardConnect,
28
+ type StandardConnectFeature,
29
+ StandardDisconnect,
30
+ type StandardDisconnectFeature,
31
+ StandardEvents,
32
+ type StandardEventsChangeProperties,
33
+ type StandardEventsFeature,
34
+ type StandardEventsListeners,
35
+ type StandardEventsNames,
36
+ type StandardEventsOnMethod,
37
+ type StandardEventsVersion,
38
+ } from "@wallet-standard/features";
39
+
25
40
  export type StarknetFeatures = StarknetWalletRequestFeature &
26
41
  StandardConnectFeature &
27
42
  StandardDisconnectFeature &
28
43
  StandardEventsFeature;
44
+
29
45
  export type WalletWithStarknetFeatures = WalletWithFeatures<StarknetFeatures>;
30
46
 
31
47
  export const RequiredStarknetFeatures = [
@@ -65,6 +65,7 @@ export class StarknetInjectedWallet implements WalletWithStarknetFeatures {
65
65
  on: this.#on.bind(this),
66
66
  },
67
67
  [StarknetWalletApi]: {
68
+ id: this.injected.id,
68
69
  version: "1.0.0" as const,
69
70
  request: this.#request.bind(this),
70
71
  walletVersion: this.injected.version,