{"_id":"@artela/sessioin-key-aspect-client","_rev":"1-b6a4104014bf5a0cf6ffe4284bc5795e","name":"@artela/sessioin-key-aspect-client","dist-tags":{"latest":"1.0.4"},"versions":{"1.0.3":{"name":"@artela/sessioin-key-aspect-client","version":"1.0.3","keywords":["artela","session","key","aspect"],"author":{"name":"cp"},"license":"ISC","_id":"@artela/sessioin-key-aspect-client@1.0.3","maintainers":[{"name":"jack-artela","email":"jack@artela.network"}],"homepage":"https://github.com/artela-network/session-key-aspect#readme","bugs":{"url":"https://github.com/artela-network/session-key-aspect/issues"},"dist":{"shasum":"0815c42170886ead28a5557e985147eae3e55260","tarball":"https://registry.npmjs.org/@artela/sessioin-key-aspect-client/-/sessioin-key-aspect-client-1.0.3.tgz","fileCount":42,"integrity":"sha512-NIoiRg/QrCF46T9cAybpdVmh3ROa3ZyxqzrfuAfXT2uU2vYRqXeYqOtGr4dGQDOySZJn+en/6qH1uKt6QYN4xg==","signatures":[{"sig":"MEQCIFq54TdpIBVPvc+IBULO/n+5yURqsl+LGlLndTm1YQfdAiA7cUaCaCJxlUEQREb3E/eDRBcfKP8uIN/WynO+KZjNWw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":1367479},"main":"index.js","gitHead":"c3c49f8d2d239d20da4063638e8e3c6264197127","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"webpack --mode production"},"_npmUser":{"name":"jack-artela","email":"jack@artela.network"},"repository":{"url":"git+https://github.com/artela-network/session-key-aspect.git","type":"git"},"_npmVersion":"10.8.2","description":"session key aspect client that provides session key management functionality","directories":{},"_nodeVersion":"22.6.0","dependencies":{"web3":"^4.3.0","buffer":"^6.0.3","@artela/web3":"^1.9.22","@ethereumjs/tx":"^5.1.0"},"_hasShrinkwrap":false,"devDependencies":{"webpack":"^5.89.0","webpack-cli":"^5.1.4"},"_npmOperationalInternal":{"tmp":"tmp/sessioin-key-aspect-client_1.0.3_1724401707326_0.6231349987896706","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@artela/sessioin-key-aspect-client","version":"1.0.4","description":"session key aspect client that provides session key management functionality","main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","build":"webpack --mode production"},"repository":{"type":"git","url":"git+https://github.com/artela-network/session-key-aspect.git"},"keywords":["artela","session","key","aspect"],"author":{"name":"cp"},"license":"ISC","bugs":{"url":"https://github.com/artela-network/session-key-aspect/issues"},"homepage":"https://github.com/artela-network/session-key-aspect#readme","dependencies":{"@artela/web3":"^1.9.22","buffer":"^6.0.3","web3":"^4.3.0","@ethereumjs/tx":"^5.1.0"},"devDependencies":{"webpack":"^5.89.0","webpack-cli":"^5.1.4"},"_id":"@artela/sessioin-key-aspect-client@1.0.4","gitHead":"e17009a91e26c64dc1465dd4a0d3041e249974eb","_nodeVersion":"22.6.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-irbAcjq8NPzhmq1uiIgQwv9gI/+ii5RYO3HgsTEso+6D/5BlpWARFjDU6Wc8+3Pobcq93uUmtrW3lW8H+B7/fA==","shasum":"45a6e84042aa2f3927d68ba32b7d152c4c23abee","tarball":"https://registry.npmjs.org/@artela/sessioin-key-aspect-client/-/sessioin-key-aspect-client-1.0.4.tgz","fileCount":42,"unpackedSize":1367556,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDooITdQhFxOgEjxe81Xr6Sjzm76p8mRyX/oMWlrzNzGQIhAPCo590iJtivJfQnVcBG+jemjo6LINE1o0JQx1herfn6"}]},"_npmUser":{"name":"jack-artela","email":"jack@artela.network"},"directories":{},"maintainers":[{"name":"jack-artela","email":"jack@artela.network"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sessioin-key-aspect-client_1.0.4_1724404612286_0.811902116567367"},"_hasShrinkwrap":false}},"time":{"created":"2024-08-23T08:28:27.228Z","modified":"2024-08-23T09:16:52.678Z","1.0.3":"2024-08-23T08:28:27.685Z","1.0.4":"2024-08-23T09:16:52.478Z"},"bugs":{"url":"https://github.com/artela-network/session-key-aspect/issues"},"author":{"name":"cp"},"license":"ISC","homepage":"https://github.com/artela-network/session-key-aspect#readme","keywords":["artela","session","key","aspect"],"repository":{"type":"git","url":"git+https://github.com/artela-network/session-key-aspect.git"},"description":"session key aspect client that provides session key management functionality","maintainers":[{"name":"jack-artela","email":"jack@artela.network"}],"readme":"## Introduction\n\n`SessionKeyAspectClient` is a JavaScript library for managing session keys on the Artela [Session-key Aspect](https://github.com/artela-network/session-key-aspect ). It provides a set of APIs to interact with Aspect for session key operations.\n\n\n\n## Installation\n\n```\nnpm install @artela/session-key-aspect-client\n```\n\n\n\n## Quick start\n\nImport related lib on your node.js project.\n\n```js\nconst SessionKeyAspectClient = require('session-key-aspect-client');\nconst Web3 = require('@artela/web3');\n```\n\nInit `SessionKeyAspectClient`\n\n```js\n// 1. init web3 client\nconst testnetRpc = \"https://betanet-rpc1.artela.network\"\nconst web3 = new Web3(testnetRpc);\t\n\n// 2. init session key client\nconst testAspectAddress = \"0x06786bB59719d7DDD9D42457a16BbCD6953A7cab\";\nconst aspectClient = new SessionKeyAspectClient(web3, testAspectAddress);\n\n```\n\nRegister a session key and query it.\n\n```js\n// init your main key\nconst yourWalletPrivateKey = \"0xCAFE....CAFE\";\nconst account = web3.eth.accounts.privateKeyToAccount(yourWalletPrivateKey);\n\n// register session key\nconst testSessionKeyAddress = \"0x0250032b4a11478969dc4caaa11ecc2ea98cfc12\";\nconst testContract = \"0330032b4a11478969dc4caaa11ecc2ea98cfcFF\";\nconst testMethods = [\"0A0A0A0A\", \"0B0B0B0B\"];\nconst testExpireBlockNumber = 2000;\n\nlet ret = await aspectClient.registerSessionKey(account, testSessionKeyAddress, testContract, testMethods, testExpireBlockNumber);\n    console.log(ret);\n\n// query this session key\nlet sessionKey = await aspectClient.getSessionKey(account.address, testSessionKeyAddress, testContract);\nconsole.log(sessionKey)\n```\n\n\n\n## Usage\n\n**Usage 1.** Use `registerSessionKey` to sign and send the session key.\n\n**Usage 2.** Use `registerSessionKeyUnsignTx` to construct an unsigned transaction and then sign and send it by your web3 client.\n\n**Usage 3.** Use `registerSessionKeyByMetamask` to require Metamask to sign and send the register transaction.\n\n\n\n## API Reference\n\n### 1. `registerSessionKey`\n\nRegisters a new session key.\n\n- **Parameters**:\n\n  - `account` - object: The web3.js account object. Learn more: [web3.eth.accounts](https://web3js.readthedocs.io/en/v1.10.0/web3-eth-accounts.html#privatekeytoaccount)\n  - `sessionKeyAddress` - string: The session key address. \n  - `bindingContractAddress` - string: The contract address to bind.\n  - `bindingMethodSigSet` - string[]: An array of method signatures.\n  - `expireBlockNumber` - number: The number of blocks until expiration (default 1000).\n\n- **Returns**: An object containing the success status and transaction receipt.\n\n  - `success` - boolean: true | false\n\n  - `receipt` - object: a web3.js receipt object. Learn more: [receipt](https://web3js.readthedocs.io/en/v1.10.0/web3-eth.html?highlight=receipt#gettransactionreceipt)\n\n- **Example**:\n\n  ```js\n  // init your main key\n  const yourWalletPrivateKey = \"0xCAFE....CAFE\";\n  const account = web3.eth.accounts.privateKeyToAccount(yourWalletPrivateKey);\n  \n  // register session key\n  const testSessionKeyAddress = \"0x0250032b4a11478969dc4caaa11ecc2ea98cfc12\";\n  const testContract = \"0330032b4a11478969dc4caaa11ecc2ea98cfcFF\";\n  const testMethods = [\"0A0A0A0A\", \"0B0B0B0B\"];\n  const testExpireBlockNumber = 2000;\n  \n  let ret = await aspectClient.registerSessionKey(account, testSessionKeyAddress, testContract, testMethods, testExpireBlockNumber);\n  ```\n\n### 2. `registerSessionKeyByMetamask`\n\nRegisters a session key through MetaMask. Call this method will ask for Metamask signatrure.\n\n- **Parameters**: \n\n  - `accountAddress` - string: The address of the account.\n  - `sessionKeyAddress` - string: The session key address. \n  - `bindingContractAddress` - string: The contract address to bind.\n  - `bindingMethodSigSet` - string[]: An array of method signatures.\n  - `expireBlockNumber` - number: The number of blocks until expiration (default 1000).\n\n- **Returns**: Transaction hash.\n- **Example**:\n\n  ```js\n  // init client\n  const web3 = new Web3(window.ethereum);\n  const testAspectAddress = \"0x06786bB59719d7DDD9D42457a16BbCD6953A7cab\";\n  let aspectClient = new SessionKeyAspectClient(web3, aspectAddress);\n  \n  \n  await window.ethereum.enable();\n  \n  // call api\n  const walletAddress = await window.ethereum.request({ method: 'eth_requestAccounts' });\n  \n  const testSessionKeyAddress = \"0x0250032b4a11478969dc4caaa11ecc2ea98cfc12\";\n  const testContract = \"0330032b4a11478969dc4caaa11ecc2ea98cfcFF\";\n  const testMethods = [\"0A0A0A0A\", \"0B0B0B0B\"];\n  const testExpireBlockNumber = 2000;\n  \n  await aspectClient.registerSessionKeyByMetamask(walletAddress, testSessionKeyAddress, testContract, testMethods, testExpireBlockNumber);\n  \n  ```\n\n  \n\n### 3. `registerSessionKeyUnsignTx`\n\nGenerates an unsigned transaction for registering a session key. Then, the caller signs and sends the transaction by themself.\n\n- **Parameters**: Similar to `registerSessionKeyByMetamask`.\n- **Returns**: Unsigned transaction object.\n\n  - `from`  - string: main key address\n  - `to`  - string: Aspect system contract address\n  - `gas` - number: gas of this tx\n  - `data`  - string: call data of register session key\n\n- **Example**:\n\n  ```js\n  \n  // get unsign tx\n  let unsignTx = await aspectClient.registerSessionKeyUnsignTx(account.address, testSessionKeyAddress, testContract, testMethods, 20);\n  console.log(unsignTx);\n  \n  // sign and send it\n  let signedTx = await web3.eth.accounts.signTransaction(unsignTx, account.privateKey);\n  let receipt = await web3.eth.sendSignedTransaction(signedTx.rawTransaction);\n  console.log(receipt);\n  \n  // query from blockchain\n  sessionKey = await aspectClient.getSessionKey(account.address, testSessionKeyAddress, testContract);\n  console.log(sessionKey);\n  ```\n\n  \n\n### 4. `getSessionKey`\n\nRetrieves the session key.\n\n- **Parameters**:\n  - `walletAddress` - string: The wallet address. E.g. `0xCAFE...CAFE`\n  - `sessionKeyAddress` - string: The session key address. E.g. `0xCAFE...CAFE`\n  - `bindingContractAddress` - string: The contract address. E.g. `0xCAFE...CAFE`\n- **Returns**:  Session key object.\n\n  - `walletAddress` - string: the main key\n  - `sessionKeyAddress` - string: the session key\n  - `bindingContractAddress` - string: the binding contract of this session key\n  - `bindingMethodSet` - string[]:  the binding contract method set of this session key\n  - `expireBlockHeight` - number: the expire block height of this session key\n\n- **Example:**\n\n  ```js\n  // register session key\n  const testMainKeyAddress = \"0x0250032b4a11478969dc4caaa11ecc2ea98cfc12\";\n  const testSessionKeyAddress = \"0x0250032b4a11478969dc4caaa11ecc2ea98cfc12\";\n  const testContract = \"0330032b4a11478969dc4caaa11ecc2ea98cfcFF\";\n  \n  // query this session key\n  let sessionKey = await aspectClient.getSessionKey(testMainKeyAddress, testSessionKeyAddress, testContract);\n  console.log(sessionKey)\n  ```\n\n  \n\n### 5. `getSessioinKeyExpireHeight`\n\nRetrieves the expiration height of the session key.\n\n- **Parameters**: Similar to `getSessionKey`.\n\n- **Returns**: Number; The block height at which the session key expires.\n\n  \n\n### 6. `getAllSessionKey`\n\nRetrieves all session keys of specific EoA\n\n- **Parameters**: \n  - `walletAddress` - string: The EoA address. E.g. `0xCAFE...CAFE`\n- **Returns**: Session key object array. The object struct is similar to `getSessionKey`.\n\n\n\n### 7. `bindEoA`\n\nBind EoA to the aspect.\n\n- **Parameters**: \n\n  - `account` - object: The web3.js account object of EoA. Learn more: [web3.eth.accounts](https://web3js.readthedocs.io/en/v1.10.0/web3-eth-accounts.html#privatekeytoaccount)\n\n- **Returns**: An object containing the success status and transaction receipt.\n\n  - `success` - boolean: true | false\n\n  - `receipt` - object: a web3.js receipt object. Learn more: [receipt](https://web3js.readthedocs.io/en/v1.10.0/web3-eth.html?highlight=receipt#gettransactionreceipt)\n\n- **Example**:\n\n  ```js\n  // init your main key\n  const yourWalletPrivateKey = \"0xCAFE....CAFE\";\n  const account = web3.eth.accounts.privateKeyToAccount(yourWalletPrivateKey);\n  \n  let ret = await aspectClient.bindEoA(account);\n  ```\n\n### \n\n### 8. `unbindEoAByMetamask`\n\nBind EoA to the Aspect through MetaMask. Call this method will ask for Metamask signatrure.\n\n- **Parameters**: \n  - `accountAddress` - string: The address of the EoA.\n- **Returns**: Transaction hash.\n\n\n\n### 9. `unbindEoA`\n\nUndind EoA from the Aspect.\n\n- **Parameters**: \n\n  - `account` - object: The web3.js account object of EoA. Learn more: [web3.eth.accounts](https://web3js.readthedocs.io/en/v1.10.0/web3-eth-accounts.html#privatekeytoaccount)\n\n- **Returns**: An object containing the success status and transaction receipt.\n\n  - `success` - boolean: true | false\n\n  - `receipt` - object: a web3.js receipt object. Learn more: [receipt](https://web3js.readthedocs.io/en/v1.10.0/web3-eth.html?highlight=receipt#gettransactionreceipt)\n\n- **Example**:\n\n  ```js\n  // init your main key\n  const yourWalletPrivateKey = \"0xCAFE....CAFE\";\n  const account = web3.eth.accounts.privateKeyToAccount(yourWalletPrivateKey);\n  \n  let ret = await aspectClient.unbindEoA(account);\n  ```\n\n### \n\n### 10. `unbindEoAByMetamask`\n\nUnbind EoA from the Aspect through MetaMask. Call this method will ask for Metamask signatrure.\n\n- **Parameters**: \n  - `accountAddress`  - string: The address of the EoA.\n- **Returns**: String; Transaction hash.\n\n\n\n### 11. `bindContract`\n\nBind a smart contract to the Aspect.\n\n- **Parameters**: \n\n  - `account` - object: The owner of the smart contract. It's a web3.js account object of EoA. Learn more: [web3.eth.accounts](https://web3js.readthedocs.io/en/v1.10.0/web3-eth-accounts.html#privatekeytoaccount)\n  - `contractAddress` - string: The smart contract address.\n\n- **Returns**: An object containing the success status and transaction receipt.\n\n  - `success` - boolean: true | false\n\n  - `receipt` - object: a web3.js receipt object. Learn more: [receipt](https://web3js.readthedocs.io/en/v1.10.0/web3-eth.html?highlight=receipt#gettransactionreceipt)\n\n- **Example**:\n\n  ```js\n  // init your main key\n  const yourWalletPrivateKey = \"0xCAFE....CAFE\";\n  const account = web3.eth.accounts.privateKeyToAccount(yourWalletPrivateKey);\n  \n  let ret = await aspectClient.bindContract(account);\n  ```\n\n### \n\n### 12. `bindContractByMetamask`\n\nBind a smart contract to the Aspect through MetaMask. Call this method will ask for Metamask signatrure.\n\n- **Parameters**: \n  - `accountAddress` - string: The owner of the smart contract. \n  - `contractAddress` - string: The smart contract address.\n- **Returns**: Transaction hash.\n\n- **Example**:\n\n  ```js\n  // init your main key\n  const eoaAddress = \"0xCAFE....CAFE\";\n  const smartContractAddress = \"0xCAFE....CAFE\";\n  \n  let ret = await aspectClient.bindContract(eoaAddress, smartContractAddress);\n  ```\n\n\n\n### 13. `ifBinding`\n\nQuery if is a EoA or smart contract bound to the Aspect.\n\n- **Parameters**:\n  - `address` - string: The address of EoA or smart contract. E.g. `0xCAFE...CAFE`\n- **Returns**:  Bool\n\n\n\n### 14. `getBindingAccount`\n\nQuery all address binding to this Aspect.\n\n- **Returns**:  String array of address\n\n","readmeFilename":"README.md"}