@txnlab/use-wallet-kibisis 5.0.0 → 5.1.0-next.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -2,7 +2,6 @@ import algosdk from "algosdk";
2
2
  import { AdapterConstructorParams, BaseWallet, WalletAccount, WalletMetadata } from "@txnlab/use-wallet/adapter";
3
3
  import AVMWebProviderSDK from "@agoralabs-sh/avm-web-provider";
4
4
  import { WalletAdapterConfig, WalletFactoryOptions } from "@txnlab/use-wallet";
5
-
6
5
  //#region src/avm-provider.d.ts
7
6
  declare abstract class AVMProvider extends BaseWallet {
8
7
  avmWebClient: AVMWebProviderSDK.AVMWebClient | null;
@@ -35,7 +34,7 @@ declare abstract class AVMProvider extends BaseWallet {
35
34
  }
36
35
  //#endregion
37
36
  //#region src/adapter.d.ts
38
- declare class KibisisAdapter extends AVMProvider {
37
+ export declare class KibisisAdapter extends AVMProvider {
39
38
  constructor(params: AdapterConstructorParams);
40
39
  static defaultMetadata: WalletMetadata;
41
40
  /**
@@ -77,8 +76,7 @@ declare class KibisisAdapter extends AVMProvider {
77
76
  }
78
77
  //#endregion
79
78
  //#region src/index.d.ts
80
- declare const WALLET_ID: "kibisis";
81
- declare function kibisis(options?: WalletFactoryOptions): WalletAdapterConfig;
79
+ export declare const WALLET_ID: "kibisis";
80
+ export declare function kibisis(options?: WalletFactoryOptions): WalletAdapterConfig;
82
81
  //#endregion
83
- export { KibisisAdapter, WALLET_ID, kibisis };
84
82
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -63,7 +63,8 @@ var AVMProvider = class extends BaseWallet {
63
63
  processEncodedTxns(txnGroup, indexesToSign) {
64
64
  const txnsToSign = [];
65
65
  txnGroup.forEach((txnBuffer, index) => {
66
- const isSigned = isSignedTxn(algosdk.msgpackRawDecode(txnBuffer));
66
+ const decodedObj = algosdk.msgpackRawDecode(txnBuffer);
67
+ const isSigned = isSignedTxn(decodedObj);
67
68
  const txn = isSigned ? algosdk.decodeSignedTransaction(txnBuffer).txn : algosdk.decodeUnsignedTransaction(txnBuffer);
68
69
  const isIndexMatch = !indexesToSign || indexesToSign.includes(index);
69
70
  const signer = txn.sender.toString();
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/avm-provider.ts","../src/icon.ts","../src/adapter.ts","../src/index.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport {\n BaseWallet,\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray,\n type AdapterConstructorParams,\n type WalletAccount,\n type WalletState\n} from '@txnlab/use-wallet/adapter'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport abstract class AVMProvider extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected providerId: string\n\n constructor(params: AdapterConstructorParams & { providerId: string }) {\n super(params)\n this.providerId = params.providerId\n }\n\n protected async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n if (!this.avmWebProviderSDK) {\n this.logger.info('Initializing @agoralabs-sh/avm-web-provider...')\n\n const module = await import('@agoralabs-sh/avm-web-provider')\n this.avmWebProviderSDK = module.default ? module.default : module\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'Failed to initialize, the @agoralabs-sh/avm-web-provider SDK was not provided'\n )\n }\n\n if (!this.avmWebProviderSDK.AVMWebClient) {\n throw new Error(\n 'Failed to initialize, AVMWebClient missing from @agoralabs-sh/avm-web-provider SDK'\n )\n }\n this.logger.info('@agoralabs-sh/avm-web-provider SDK initialized')\n }\n\n return this.avmWebProviderSDK\n }\n\n protected async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const avmWebProviderSDK = await this._initializeAVMWebProviderSDK()\n\n if (!avmWebProviderSDK.AVMWebClient) {\n throw new Error('Failed to initialize, AVMWebClient not found')\n }\n\n if (!this.avmWebClient) {\n this.logger.info('Initializing new AVM Web Client...')\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n this.logger.info('AVM Web Client initialized')\n }\n\n return this.avmWebClient\n }\n\n protected async _getGenesisHash(): Promise<string> {\n // First try to get from network config\n const network = this.activeNetworkConfig\n if (network.genesisHash) {\n return network.genesisHash\n }\n\n // Fallback to API request\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n return algosdk.bytesToBase64(version.genesisHashB64)\n }\n\n protected _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Abstract methods\n * These methods must be implemented by specific wallet providers\n */\n protected abstract _enable(): Promise<AVMWebProviderSDK.IEnableResult>\n protected abstract _disable(): Promise<AVMWebProviderSDK.IDisableResult>\n protected abstract _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult>\n\n /**\n * Common methods\n * These methods can be overridden by specific wallet providers if needed\n */\n public async connect(): Promise<WalletAccount[]> {\n try {\n this.logger.info('Connecting...')\n const result = await this._enable()\n this.logger.info(`Successfully connected on network \"${result.genesisId}\"`)\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n this.store.addWallet(walletState)\n\n this.logger.info('Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error(\n 'Error connecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n\n const result = await this._disable()\n\n this.logger.info(\n `Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n this.logger.error(\n 'Error disconnecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const walletState = this.store.getWalletState()\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n try {\n this.logger.info('Resuming session...')\n\n const result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n this.store.setAccounts(walletAccounts)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error(\n 'Error resuming session: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n this.onDisconnect()\n throw error\n }\n }\n\n public async signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error(\n 'Error signing transactions: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n}\n","export const icon = `\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`\n","import { AVMProvider } from './avm-provider'\nimport type { AdapterConstructorParams, WalletMetadata } from '@txnlab/use-wallet/adapter'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nconst PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nimport { icon } from './icon'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(icon)}`\n\nexport class KibisisAdapter extends AVMProvider {\n constructor(params: AdapterConstructorParams) {\n super({ ...params, providerId: PROVIDER_ID })\n }\n\n static defaultMetadata: WalletMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method\n * will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: PROVIDER_ID\n })\n })\n }\n}\n","import { KibisisAdapter } from './adapter'\nimport type { WalletAdapterConfig, WalletFactoryOptions } from '@txnlab/use-wallet'\n\nexport const WALLET_ID = 'kibisis' as const\n\nexport function kibisis(options?: WalletFactoryOptions): WalletAdapterConfig {\n return {\n id: WALLET_ID,\n metadata: { ...KibisisAdapter.defaultMetadata, ...options?.metadata },\n Adapter: KibisisAdapter as unknown as WalletAdapterConfig['Adapter']\n }\n}\n\nexport { KibisisAdapter }\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/avm-provider.ts","../src/icon.ts","../src/adapter.ts","../src/index.ts"],"sourcesContent":["import algosdk from 'algosdk'\nimport {\n BaseWallet,\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n isSignedTxn,\n isTransactionArray,\n type AdapterConstructorParams,\n type WalletAccount,\n type WalletState\n} from '@txnlab/use-wallet/adapter'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nexport function isAVMWebProviderSDKError(error: any): error is AVMWebProviderSDK.BaseARC0027Error {\n return typeof error === 'object' && 'code' in error && 'message' in error\n}\n\nexport abstract class AVMProvider extends BaseWallet {\n public avmWebClient: AVMWebProviderSDK.AVMWebClient | null = null\n protected avmWebProviderSDK: typeof AVMWebProviderSDK | null = null\n protected providerId: string\n\n constructor(params: AdapterConstructorParams & { providerId: string }) {\n super(params)\n this.providerId = params.providerId\n }\n\n protected async _initializeAVMWebProviderSDK(): Promise<typeof AVMWebProviderSDK> {\n if (!this.avmWebProviderSDK) {\n this.logger.info('Initializing @agoralabs-sh/avm-web-provider...')\n\n const module = await import('@agoralabs-sh/avm-web-provider')\n this.avmWebProviderSDK = module.default ? module.default : module\n\n if (!this.avmWebProviderSDK) {\n throw new Error(\n 'Failed to initialize, the @agoralabs-sh/avm-web-provider SDK was not provided'\n )\n }\n\n if (!this.avmWebProviderSDK.AVMWebClient) {\n throw new Error(\n 'Failed to initialize, AVMWebClient missing from @agoralabs-sh/avm-web-provider SDK'\n )\n }\n this.logger.info('@agoralabs-sh/avm-web-provider SDK initialized')\n }\n\n return this.avmWebProviderSDK\n }\n\n protected async _initializeAVMWebClient(): Promise<AVMWebProviderSDK.AVMWebClient> {\n const avmWebProviderSDK = await this._initializeAVMWebProviderSDK()\n\n if (!avmWebProviderSDK.AVMWebClient) {\n throw new Error('Failed to initialize, AVMWebClient not found')\n }\n\n if (!this.avmWebClient) {\n this.logger.info('Initializing new AVM Web Client...')\n this.avmWebClient = avmWebProviderSDK.AVMWebClient.init()\n this.logger.info('AVM Web Client initialized')\n }\n\n return this.avmWebClient\n }\n\n protected async _getGenesisHash(): Promise<string> {\n // First try to get from network config\n const network = this.activeNetworkConfig\n if (network.genesisHash) {\n return network.genesisHash\n }\n\n // Fallback to API request\n const algodClient = this.getAlgodClient()\n const version = await algodClient.versionsCheck().do()\n return algosdk.bytesToBase64(version.genesisHashB64)\n }\n\n protected _mapAVMWebProviderAccountToWalletAccounts(\n accounts: AVMWebProviderSDK.IAccount[]\n ): WalletAccount[] {\n return accounts.map(({ address, name }, idx) => ({\n name: name || `[${this.metadata.name}] Account ${idx + 1}`,\n address\n }))\n }\n\n protected processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n protected processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): AVMWebProviderSDK.IARC0001Transaction[] {\n const txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n /**\n * Abstract methods\n * These methods must be implemented by specific wallet providers\n */\n protected abstract _enable(): Promise<AVMWebProviderSDK.IEnableResult>\n protected abstract _disable(): Promise<AVMWebProviderSDK.IDisableResult>\n protected abstract _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult>\n\n /**\n * Common methods\n * These methods can be overridden by specific wallet providers if needed\n */\n public async connect(): Promise<WalletAccount[]> {\n try {\n this.logger.info('Connecting...')\n const result = await this._enable()\n this.logger.info(`Successfully connected on network \"${result.genesisId}\"`)\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n\n const walletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n this.store.addWallet(walletState)\n\n this.logger.info('Connected.', walletState)\n return walletAccounts\n } catch (error: any) {\n this.logger.error(\n 'Error connecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async disconnect(): Promise<void> {\n try {\n this.logger.info('Disconnecting...')\n this.onDisconnect()\n\n const result = await this._disable()\n\n this.logger.info(\n `Successfully disconnected${result.sessionIds && result.sessionIds.length ? ` sessions [${result.sessionIds.join(',')}]` : ''} on network \"${result.genesisId}\"`\n )\n } catch (error: any) {\n this.logger.error(\n 'Error disconnecting: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n\n public async resumeSession(): Promise<void> {\n const walletState = this.store.getWalletState()\n\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n try {\n this.logger.info('Resuming session...')\n\n const result = await this._enable()\n\n if (result.accounts.length === 0) {\n throw new Error('No accounts found!')\n }\n\n const walletAccounts = this._mapAVMWebProviderAccountToWalletAccounts(result.accounts)\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n\n this.store.setAccounts(walletAccounts)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error(\n 'Error resuming session: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n this.onDisconnect()\n throw error\n }\n }\n\n public async signTransactions<T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> {\n try {\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n let txnsToSign: AVMWebProviderSDK.IARC0001Transaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n this.logger.debug('Sending processed transactions to wallet...', txnsToSign)\n\n // Sign transactions\n const signTxnsResult = await this._signTransactions(txnsToSign)\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Convert base64 to Uint8Array\n const result = signTxnsResult.stxns.map((value) => {\n if (value === null) {\n return null\n }\n return base64ToByteArray(value)\n })\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error(\n 'Error signing transactions: ',\n isAVMWebProviderSDKError(error) ? `${error.message} (code: ${error.code})` : error.message\n )\n throw error\n }\n }\n}\n","export const icon = `\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect fill=\"#801C96\" width=\"480\" height=\"480\" />\n <path fill=\"#FFFFFF\" d=\"M393.5,223.2c0-7.3-0.6-14.6-1.6-21.6c-0.9-6.5-2.3-12.8-4-18.9c-18-64.9-77.4-112.5-148-112.5c-70.6,0-130,47.6-148,112.5c-1.7,6.2-3,12.5-4,19c-1,7.1-1.6,14.3-1.6,21.6h0v85.5h19.7v-85.5c0-7.2,0.6-14.4,1.8-21.4c14,1.1,27.6,4.3,40.5,9.5c15.9,6.4,30.3,15.6,42.6,27.3c12.3,11.7,22,25.4,28.7,40.6c6.9,15.6,10.5,32.2,10.5,49.2v81.4h0.1h19.6h0.1v-81.5c0.1-17.1,3.6-33.7,10.5-49.2c6.7-15.2,16.4-28.8,28.7-40.6c4.2-4,8.6-7.7,13.2-11.1v132.2h19.7V223.2h0c0-2.5-0.1-5-0.4-7.4c3.3-1.6,6.6-3.1,10-4.5c12.9-5.2,26.4-8.4,40.4-9.5c1.2,7,1.7,14.2,1.8,21.4v85.5h19.7L393.5,223.2L393.5,223.2z M240.1,277.3c-11.6-29.3-32.7-54.1-59.8-71c2.9-10,8.2-19.1,15.8-26.6c11.8-11.8,27.4-18.2,44-18.2s32.3,6.5,44,18.2c4.1,4.1,7.5,8.7,10.3,13.6c5.6-3.4,11.4-6.4,17.4-9.2c-14-25.2-40.9-42.3-71.8-42.3c-35.9,0-66.3,23-77.5,55.1c-15.5-7.1-32.5-11.8-50.4-13.5c1.3-4,2.7-7.9,4.3-11.8c6.7-15.9,16.4-30.3,28.7-42.6s26.6-22,42.6-28.7c16.5-7,34-10.5,52.1-10.5s35.6,3.5,52.1,10.5c15.9,6.7,30.3,16.4,42.6,28.7s22,26.6,28.7,42.6c1.6,3.9,3.1,7.8,4.3,11.8C309,189.2,260.1,226.5,240.1,277.3z\" />\n <path fill=\"#FFFFFF\" d=\"M158.1,359.8h19.7V245.5c-6.1-5.4-12.7-10-19.7-14V359.8z\" />\n</svg>\n`\n","import { AVMProvider } from './avm-provider'\nimport type { AdapterConstructorParams, WalletMetadata } from '@txnlab/use-wallet/adapter'\nimport type AVMWebProviderSDK from '@agoralabs-sh/avm-web-provider'\n\nconst PROVIDER_ID = 'f6d1c86b-4493-42fb-b88d-a62407b4cdf6'\n\nimport { icon } from './icon'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(icon)}`\n\nexport class KibisisAdapter extends AVMProvider {\n constructor(params: AdapterConstructorParams) {\n super({ ...params, providerId: PROVIDER_ID })\n }\n\n static defaultMetadata: WalletMetadata = {\n name: 'Kibisis',\n icon: ICON\n }\n\n /**\n * Calls the \"enable\" method on the provider. This method will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.IEnableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _enable(): Promise<AVMWebProviderSDK.IEnableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IEnableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Enable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onEnable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n return resolve(result)\n })\n\n // send the request\n avmWebClient.enable({\n genesisHash,\n providerId: PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"disable\" method on the provider. This method will timeout after 0.75 seconds.\n * @returns {Promise<AVMWebProviderSDK.IDisableResult>} a promise that resolves to the result.\n * @protected\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _disable(): Promise<AVMWebProviderSDK.IDisableResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n LOWER_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n const genesisHash = await this._getGenesisHash()\n\n return new Promise<AVMWebProviderSDK.IDisableResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.Disable,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, LOWER_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onDisable(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Disable successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending disable request...', { genesisHash })\n avmWebClient.disable({\n genesisHash,\n providerId: PROVIDER_ID\n })\n })\n }\n\n /**\n * Calls the \"signTransactions\" method to sign the supplied ARC-0001 transactions. This method\n * will timeout after 3 minutes.\n * @returns {Promise<AVMWebProviderSDK.ISignTransactionsResult>} a promise that resolves to the result.\n * @protected\n * @throws {InvalidInputError} if computed group ID for the txns does not match the assigned group ID.\n * @throws {InvalidGroupIdError} if the unsigned txns is malformed or not conforming to ARC-0001.\n * @throws {MethodCanceledError} if the method was cancelled by the user.\n * @throws {MethodNotSupportedError} if the method is not supported for the configured network.\n * @throws {MethodTimedOutError} if the method timed out by lack of response (>= 3 minutes).\n * @throws {NetworkNotSupportedError} if the network is not supported for the configured network.\n * @throws {UnauthorizedSignerError} if a signer in the request is not authorized by the provider.\n * @throws {UnknownError} if the response result is empty.\n */\n protected async _signTransactions(\n txns: AVMWebProviderSDK.IARC0001Transaction[]\n ): Promise<AVMWebProviderSDK.ISignTransactionsResult> {\n const {\n ARC0027MethodEnum,\n ARC0027MethodTimedOutError,\n ARC0027UnknownError,\n DEFAULT_REQUEST_TIMEOUT\n } = await this._initializeAVMWebProviderSDK()\n const avmWebClient = await this._initializeAVMWebClient()\n\n return new Promise<AVMWebProviderSDK.ISignTransactionsResult>((resolve, reject) => {\n const timerId = window.setTimeout(() => {\n // remove the listener\n avmWebClient.removeListener(listenerId)\n reject(\n new ARC0027MethodTimedOutError({\n method: ARC0027MethodEnum.SignTransactions,\n message: `no response from provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }, DEFAULT_REQUEST_TIMEOUT)\n const listenerId = avmWebClient.onSignTransactions(({ error, method, result }) => {\n // remove the listener, it is not needed\n avmWebClient.removeListener(listenerId)\n\n // remove the timeout\n window.clearTimeout(timerId)\n\n if (error) {\n return reject(error)\n }\n\n if (!result) {\n return reject(\n new ARC0027UnknownError({\n message: `received response, but \"${method}\" request details were empty for provider \"${this.metadata.name}\"`,\n providerId: PROVIDER_ID\n })\n )\n }\n\n this.logger.debug('Sign transactions successful', { result })\n return resolve(result)\n })\n\n this.logger.debug('Sending sign transactions request...', { txns })\n avmWebClient.signTransactions({\n txns,\n providerId: PROVIDER_ID\n })\n })\n }\n}\n","import { KibisisAdapter } from './adapter'\nimport type { WalletAdapterConfig, WalletFactoryOptions } from '@txnlab/use-wallet'\n\nexport const WALLET_ID = 'kibisis' as const\n\nexport function kibisis(options?: WalletFactoryOptions): WalletAdapterConfig {\n return {\n id: WALLET_ID,\n metadata: { ...KibisisAdapter.defaultMetadata, ...options?.metadata },\n Adapter: KibisisAdapter as unknown as WalletAdapterConfig['Adapter']\n }\n}\n\nexport { KibisisAdapter }\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@txnlab/use-wallet-kibisis",
3
- "version": "5.0.0",
3
+ "version": "5.1.0-next.1",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -30,17 +30,17 @@
30
30
  "dist"
31
31
  ],
32
32
  "peerDependencies": {
33
- "@txnlab/use-wallet": "^5.0.0",
34
- "algosdk": "^3.0.0"
33
+ "algosdk": "^3.0.0",
34
+ "@txnlab/use-wallet": "^5.1.0-next.1"
35
35
  },
36
36
  "dependencies": {
37
37
  "@agoralabs-sh/avm-web-provider": "1.7.0"
38
38
  },
39
39
  "devDependencies": {
40
- "algosdk": "3.6.0",
41
- "tsdown": "0.21.0",
40
+ "algosdk": "3.8.0",
41
+ "tsdown": "0.23.0",
42
42
  "typescript": "5.9.3",
43
- "@txnlab/use-wallet": "5.0.0"
43
+ "@txnlab/use-wallet": "5.1.0-next.1"
44
44
  },
45
45
  "scripts": {
46
46
  "build": "tsdown",