@ocap/client 1.25.6 → 1.26.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.
Files changed (79) hide show
  1. package/README.md +77 -79
  2. package/dist/base.js +2 -2
  3. package/dist/base.js.map +1 -1
  4. package/dist/bundle.js +1 -1
  5. package/dist/extension.js +4 -4
  6. package/dist/extension.js.map +1 -1
  7. package/dist/report.html +2 -2
  8. package/docs/api-reference-client-methods.ja.md +38 -38
  9. package/docs/api-reference-client-methods.zh-TW.md +47 -47
  10. package/docs/api-reference-client-methods.zh.md +34 -34
  11. package/docs/api-reference-data-types.ja.md +20 -20
  12. package/docs/api-reference-data-types.zh-TW.md +17 -17
  13. package/docs/api-reference-data-types.zh.md +24 -24
  14. package/docs/api-reference-low-level-api.ja.md +49 -49
  15. package/docs/api-reference-low-level-api.zh-TW.md +48 -48
  16. package/docs/api-reference-low-level-api.zh.md +43 -43
  17. package/docs/api-reference-query-mutation-methods.ja.md +85 -85
  18. package/docs/api-reference-query-mutation-methods.zh-TW.md +140 -140
  19. package/docs/api-reference-query-mutation-methods.zh.md +141 -141
  20. package/docs/api-reference-transaction-helpers.ja.md +120 -120
  21. package/docs/api-reference-transaction-helpers.zh-TW.md +119 -119
  22. package/docs/api-reference-transaction-helpers.zh.md +153 -153
  23. package/docs/api-reference.ja.md +6 -6
  24. package/docs/api-reference.zh-TW.md +5 -5
  25. package/docs/api-reference.zh.md +8 -8
  26. package/docs/core-concepts-client-architecture.ja.md +26 -26
  27. package/docs/core-concepts-client-architecture.zh-TW.md +34 -34
  28. package/docs/core-concepts-client-architecture.zh.md +26 -26
  29. package/docs/core-concepts-event-subscriptions.ja.md +29 -29
  30. package/docs/core-concepts-event-subscriptions.zh-TW.md +23 -23
  31. package/docs/core-concepts-event-subscriptions.zh.md +29 -29
  32. package/docs/core-concepts-gas-payment.ja.md +27 -27
  33. package/docs/core-concepts-gas-payment.zh-TW.md +28 -28
  34. package/docs/core-concepts-gas-payment.zh.md +32 -32
  35. package/docs/core-concepts-transaction-lifecycle.ja.md +40 -40
  36. package/docs/core-concepts-transaction-lifecycle.zh-TW.md +43 -43
  37. package/docs/core-concepts-transaction-lifecycle.zh.md +49 -49
  38. package/docs/core-concepts.ja.md +7 -7
  39. package/docs/core-concepts.zh-TW.md +6 -6
  40. package/docs/core-concepts.zh.md +7 -7
  41. package/docs/getting-started-basic-usage.ja.md +24 -24
  42. package/docs/getting-started-basic-usage.zh-TW.md +28 -28
  43. package/docs/getting-started-basic-usage.zh.md +24 -24
  44. package/docs/getting-started-installation.ja.md +13 -13
  45. package/docs/getting-started-installation.zh-TW.md +9 -9
  46. package/docs/getting-started-installation.zh.md +15 -15
  47. package/docs/getting-started.ja.md +5 -5
  48. package/docs/getting-started.zh-TW.md +6 -6
  49. package/docs/getting-started.zh.md +6 -7
  50. package/docs/how-to-guides-delegate-permissions.ja.md +21 -21
  51. package/docs/how-to-guides-delegate-permissions.zh-TW.md +20 -21
  52. package/docs/how-to-guides-delegate-permissions.zh.md +18 -18
  53. package/docs/how-to-guides-manage-accounts.ja.md +21 -21
  54. package/docs/how-to-guides-manage-accounts.zh-TW.md +23 -23
  55. package/docs/how-to-guides-manage-accounts.zh.md +17 -17
  56. package/docs/how-to-guides-manage-assets.ja.md +137 -60
  57. package/docs/how-to-guides-manage-assets.md +77 -0
  58. package/docs/how-to-guides-manage-assets.zh-TW.md +116 -39
  59. package/docs/how-to-guides-manage-assets.zh.md +142 -65
  60. package/docs/how-to-guides-manage-tokens.ja.md +47 -47
  61. package/docs/how-to-guides-manage-tokens.zh-TW.md +49 -49
  62. package/docs/how-to-guides-manage-tokens.zh.md +34 -34
  63. package/docs/how-to-guides-stake-tokens-and-assets.ja.md +56 -56
  64. package/docs/how-to-guides-stake-tokens-and-assets.zh-TW.md +55 -55
  65. package/docs/how-to-guides-stake-tokens-and-assets.zh.md +51 -51
  66. package/docs/how-to-guides-transfer-tokens-and-nfts.ja.md +45 -45
  67. package/docs/how-to-guides-transfer-tokens-and-nfts.zh-TW.md +46 -46
  68. package/docs/how-to-guides-transfer-tokens-and-nfts.zh.md +37 -37
  69. package/docs/how-to-guides.ja.md +8 -8
  70. package/docs/how-to-guides.zh-TW.md +4 -4
  71. package/docs/how-to-guides.zh.md +6 -6
  72. package/docs/overview.ja.md +15 -15
  73. package/docs/overview.zh-TW.md +14 -14
  74. package/docs/overview.zh.md +12 -12
  75. package/lib/base.js +2 -2
  76. package/lib/base.js.map +1 -1
  77. package/lib/extension.js +4 -4
  78. package/lib/extension.js.map +1 -1
  79. package/package.json +15 -15
package/README.md CHANGED
@@ -1,96 +1,94 @@
1
- [graphql-client]https://www.arcblock.io/.netlify/functions/badge/?text=graphql-client
1
+ ![graphql-client](https://www.arcblock.io/.netlify/functions/badge/?text=graphql-client)
2
2
 
3
- [
4
- [
5
- [[gitter]https://badges.gitter.im/arcblock/community.svg]https://gitter.im/arcblock/arcblock/community?utm_source = badge = badge \&utmm_medium = badge \ utm_campaign = badeaign = badeaign = badage)
6
- 客户库可以在Node.js和浏览器环境中使用http/https通过http/https发送所有请求,将您的应用程序连接到Forge Power的区块链节点。
3
+ [![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)
4
+ [![docs](https://img.shields.io/badge/powered%20by-arcblock-green.svg)](https://docs.arcblock.io)
5
+ [![Gitter](https://badges.gitter.im/ArcBlock/community.svg)](https://gitter.im/ArcBlock/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
7
6
 
8
- GraphQlClient”实例主要支持5组方法,这些方法可节省您的时间,从/到区块链读取数据时。
7
+ Client library to connect your app with forge powered blockchain node, all requests are sent over http/https, can be used in both Node.js and browser environment.
9
8
 
10
- _`queries`:QUERY BLOCK/TRASSACTION/ACCENT/ACCENT/ASSET/CHAIN/NODE数据表格区块链
11
- _`突变“:将事务发送到区块链``sendtx',所有交易应在发送到区块链之前签署所有交易
12
- *``订阅':收听区块链上任何数据的更改
13
- *``senders':采用``钱包''和`tx`对象的快捷方式,然后进行签名,然后发送
14
- *`coders`:采用``钱包''和`tx`对象的快捷方式,编码事务以进行后期签名,内部由发件人内部使用
9
+ A `GraphQLClient` instance mainly supports 5 groups of methods that saves you time when read/write data from/to blockchain.
15
10
 
16
- ## 目录
11
+ - `queries`: query block/transaction/account/asset/chain/node data form the blockchain
12
+ - `mutations`: send transaction to the blockchain, `sendTx`, all transactions should be signed before sending out to the blockchain
13
+ - `subscriptions`: listen to changes of any data on the blockchain
14
+ - `senders`: shortcut methods that takes a `wallet` and a `tx` object, then do the signing, and sending
15
+ - `encoders`: shortcut methods that takes a `wallet` and a `tx` object, encode the transaction for later signing, used internally by senders
17
16
 
18
- _[安装](#安装)
19
- _[用法](#使用)
20
- _[示例](#示例)
21
- _[调试](#调试)\*[文档](#文档)
17
+ ## Table of Contents
22
18
 
23
- ## 安装
19
+ - [Install](#install)
20
+ - [Usage](#usage)
21
+ - [Examples](#examples)
22
+ - [Debugging](#debugging)
23
+ - [Documentation](#documentation)
24
24
 
25
- ```壳
25
+ ## Install
26
+
27
+ ```shell
26
28
  npm i @ocap/client -S
27
- 或者
28
- PNPM install @ocap/client
29
+ # OR
30
+ pnpm install @ocap/client
29
31
  ```
30
32
 
31
- ## 用法
32
-
33
- ``JS
34
- const mcrypto = require'@ocap/mcrypto');
35
- const graphQlclient = require'@ocap/client');
36
- const {fromrandom,wallettype} = require'@ocap/wallet');
37
- const {hextobytes} = require'@ocap/util');
38
-
39
- const client = new GraphQlClient('http://localhost8210/api');
40
- console.log{
41
- 查询:client.getqueries(),
42
- 订阅:client.getSubscriptions(),
43
- 突变:client.getmutations(),
44
- 发件人:client.gettxsendmethods(),
45
- 编码器:client.getTxEncodePhods(),
46
- });
47
-
48
- async()=> {
49
- //查询链状态数据
50
- const Chaininfo =等待客户端。GetChainInfo();
51
- const forgestate =等待客户端。
52
- const block =等待client.getBlock{height2});
53
- console.log'getchaininfo',chaininfo);
54
- console.log'getforgentate',宽恕);
55
- console.log'getBlock'block);
56
-
57
- //发送交易
58
- const钱包= fromrandom(
59
- wallettype({
60
- 角色:mcrypto.types.roletype.role_account,
61
- PK:mcrypto.types.keytype.secp256k1,
62
- 哈希:mcrypto.types.hashtype.sha3,
63
- }))
64
- );
65
- const hash =等待client.declare{
66
- 绰号:“用户名”,
67
- 钱包,
68
- });
69
- console.loghash);
70
- })();
71
-
33
+ ## Usage
34
+
35
+ ```js
36
+ const Mcrypto = require('@ocap/mcrypto');
37
+ const GraphQLClient = require('@ocap/client');
38
+ const { fromRandom, WalletType } = require('@ocap/wallet');
39
+ const { hexToBytes } = require('@ocap/util');
40
+
41
+ const client = new GraphQLClient('http://localhost:8210/api');
42
+ console.log({
43
+ queries: client.getQueries(),
44
+ subscriptions: client.getSubscriptions(),
45
+ mutations: client.getMutations(),
46
+ senders: client.getTxSendMethods(),
47
+ encoders: client.getTxEncodeMethods(),
48
+ });
49
+
50
+ (async () => {
51
+ // Query chain state data
52
+ const chainInfo = await client.getChainInfo();
53
+ const forgeState = await client.getForgeState();
54
+ const block = await client.getBlock({ height: 2 });
55
+ console.log('getChainInfo', chainInfo);
56
+ console.log('getForgeState', forgeState);
57
+ console.log('getBlock', block);
58
+
59
+ // Send transaction
60
+ const wallet = fromRandom(
61
+ WalletType({
62
+ role: Mcrypto.types.RoleType.ROLE_ACCOUNT,
63
+ pk: Mcrypto.types.KeyType.SECP256K1,
64
+ hash: Mcrypto.types.HashType.SHA3,
65
+ })
66
+ );
67
+ const hash = await client.declare({
68
+ moniker: 'username',
69
+ wallet,
70
+ });
71
+ console.log(hash);
72
+ })();
72
73
  ```
73
74
 
75
+ ## Examples
74
76
 
75
- ##示例
76
-
77
- *[在区块链上声明标识](./示例/scellare.js
78
- *[为新创建的帐户获取免费令牌](./示例/get_free_token.js
79
- *[2个帐户之间的转移资产](./示例/Transfer_asset.js
80
- *[2个帐户之间的转移令牌](./示例/trassing_token.js
81
- *[2个新创建的帐户之间的Exchange Asset和令牌](./示例/Exchange.js
82
- *[在区块链上创建/更新资产](./示例/Asset.js
83
- *[消费新创建资产](./示例/clummume_asset.js)
84
- *[连接节点的股份](./示例/stake_for_node.js)
77
+ - [Declare identify on the blockchain](./examples/declare.js)
78
+ - [Get free token for newly created account](./examples/get_free_token.js)
79
+ - [Transfer assets between 2 accounts](./examples/transfer_asset.js)
80
+ - [Transfer tokens between 2 accounts](./examples/transfer_token.js)
81
+ - [Exchange asset and token between 2 newly created accounts](./examples/exchange.js)
82
+ - [Create/update asset on the blockchain](./examples/asset.js)
83
+ - [Consume newly create asset](./examples/consume_asset.js)
84
+ - [Stake for the connected node](./examples/stake_for_node.js)
85
85
 
86
+ ## Debugging
86
87
 
87
- ##调试
88
- *如果您在node.js中:`debug =@ocap/client node script.js`
89
- *如果您在浏览器中:`localstorage.setitem('debug','@ocap/client')
88
+ - If you are in Node.js: `DEBUG=@ocap/client node script.js`
89
+ - If you are in browser: `localStorage.setItem('DEBUG', '@ocap/client')`
90
90
 
91
+ ## Documentation
91
92
 
92
- ##文档
93
-
94
- *查询参数和响应结构可以在此处找到:[queries.md](./docs/queries.md)
95
- *完整的方法列表可以在此处找到:[readme.md](./docs/readme.md)
96
- ```
93
+ - Query arguments and response structure can be found here: [QUERIES.md](./docs/QUERIES.md)
94
+ - Complete method list can be found here: [README.md](./docs/README.md)
package/dist/base.js CHANGED
@@ -78,7 +78,7 @@ class GraphQLClientBase extends BaseClient {
78
78
  return socketEndpoint;
79
79
  }
80
80
 
81
- _getAuthHeaders(query) {
81
+ async _getAuthHeaders(query) {
82
82
  if (!this._gasPayer) {
83
83
  return {};
84
84
  }
@@ -99,7 +99,7 @@ class GraphQLClientBase extends BaseClient {
99
99
  const txHash = Mcrypto.toTxHash(txBuffer);
100
100
  return {
101
101
  'x-gas-payer-pk': this._gasPayer.publicKey,
102
- 'x-gas-payer-sig': JWT.sign(this._gasPayer.address, this._gasPayer.secretKey, { txHash })
102
+ 'x-gas-payer-sig': await JWT.sign(this._gasPayer.address, this._gasPayer.secretKey, { txHash })
103
103
  };
104
104
  }
105
105
  }
package/dist/base.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/base.js"],"names":["parse","require","isAbsoluteUrl","pick","get","JWT","Mcrypto","fromBase64","toUint8Array","BaseClient","WsClient","jsonpack","GraphQLClientBase","constructor","endpoint","Error","dataSource","httpEndpoint","socketEndpoint","_getSocketEndpoint","enableQuery","enableSubscription","enableMutation","maxQueryDepth","_endpoint","_socketClient","setGasPayer","wallet","_gasPayer","subscribe","topic","callback","client","_ensureSocketClient","on","unsubscribe","off","config","Object","assign","_getSocketOptions","heartbeatIntervalMs","isConnected","connect","replace","indexOf","_getAuthHeaders","query","sign","parsed","operation","selection","tx","arguments","find","x","name","value","txBuffer","txHash","toTxHash","publicKey","address","secretKey","_getSchema","unpack","packedSchema","_getIgnoreFields","pickGasPayerHeaders","headers","module","exports"],"mappings":"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","file":"base.js","sourcesContent":["/* eslint-disable no-underscore-dangle */\n// eslint-disable-next-line import/no-import-module-exports\nimport packedSchema from './schema/graphql.txt';\n\nconst { parse } = require('graphql/language/parser');\nconst isAbsoluteUrl = require('is-absolute-url');\nconst pick = require('lodash/pick');\nconst get = require('lodash/get');\nconst JWT = require('@arcblock/jwt');\nconst Mcrypto = require('@ocap/mcrypto');\nconst { fromBase64, toUint8Array } = require('@ocap/util');\nconst BaseClient = require('@arcblock/sdk-util');\nconst { WsClient } = require('@arcblock/ws');\nconst jsonpack = require('jsonpack');\n\n/**\n * Provides a readonly client to forge\n * Its recommended to use this version in browser to get smaller bundle size\n *\n * @class GraphQLClientBase\n * @extends {BaseClient}\n */\nclass GraphQLClientBase extends BaseClient {\n constructor(endpoint) {\n if (isAbsoluteUrl(endpoint) === false) {\n throw new Error('Chain endpoint must be a valid url');\n }\n\n super({\n dataSource: 'forge',\n httpEndpoint: endpoint,\n socketEndpoint: () => this._getSocketEndpoint(endpoint),\n enableQuery: true,\n enableSubscription: true,\n enableMutation: true,\n maxQueryDepth: 6,\n });\n\n this._endpoint = endpoint;\n this._socketClient = null;\n }\n\n setGasPayer(wallet) {\n this._gasPayer = wallet;\n }\n\n subscribe(topic, callback) {\n const client = this._ensureSocketClient();\n return client.on(topic, callback);\n }\n\n unsubscribe(topic, callback) {\n const client = this._ensureSocketClient();\n return client.off(topic, callback);\n }\n\n _ensureSocketClient() {\n if (!this._socketClient) {\n this._socketClient = new WsClient(\n this.config.socketEndpoint(),\n Object.assign(this._getSocketOptions(), {\n heartbeatIntervalMs: 10 * 1000,\n })\n );\n }\n\n if (this._socketClient.isConnected() === false) {\n this._socketClient.connect();\n }\n\n return this._socketClient;\n }\n\n _getSocketEndpoint(endpoint) {\n let socketEndpoint = endpoint.replace(/https?:\\/\\//, 'ws://');\n if (endpoint.indexOf('https://') === 0) {\n socketEndpoint = socketEndpoint.replace('ws://', 'wss://');\n }\n\n return socketEndpoint;\n }\n\n _getAuthHeaders(query) {\n if (!this._gasPayer) {\n return {};\n }\n if (typeof this._gasPayer.sign !== 'function') {\n return {};\n }\n\n const parsed = parse(query);\n const operation = get(parsed, 'definitions[0].operation');\n\n // calculate gas-payer header for sendTx mutation\n if (operation === 'mutation') {\n const selection = get(parsed, 'definitions[0].selectionSet.selections[0]');\n if (get(selection, 'name.value') === 'sendTx') {\n const tx = selection.arguments.find((x) => x.name.value === 'tx');\n if (tx) {\n const txBuffer = toUint8Array(fromBase64(tx.value.value));\n const txHash = Mcrypto.toTxHash(txBuffer);\n return {\n 'x-gas-payer-pk': this._gasPayer.publicKey,\n 'x-gas-payer-sig': JWT.sign(this._gasPayer.address, this._gasPayer.secretKey, { txHash }),\n };\n }\n }\n }\n\n return {};\n }\n\n _getSchema() {\n return jsonpack.unpack(packedSchema);\n }\n\n _getIgnoreFields() {\n return [];\n }\n\n pickGasPayerHeaders({ headers }) {\n return pick(headers, ['x-gas-payer-sig', 'x-gas-payer-pk']);\n }\n}\n\nmodule.exports = GraphQLClientBase;\n"]}
1
+ {"version":3,"sources":["../src/base.js"],"names":["parse","require","isAbsoluteUrl","pick","get","JWT","Mcrypto","fromBase64","toUint8Array","BaseClient","WsClient","jsonpack","GraphQLClientBase","constructor","endpoint","Error","dataSource","httpEndpoint","socketEndpoint","_getSocketEndpoint","enableQuery","enableSubscription","enableMutation","maxQueryDepth","_endpoint","_socketClient","setGasPayer","wallet","_gasPayer","subscribe","topic","callback","client","_ensureSocketClient","on","unsubscribe","off","config","Object","assign","_getSocketOptions","heartbeatIntervalMs","isConnected","connect","replace","indexOf","_getAuthHeaders","query","sign","parsed","operation","selection","tx","arguments","find","x","name","value","txBuffer","txHash","toTxHash","publicKey","address","secretKey","_getSchema","unpack","packedSchema","_getIgnoreFields","pickGasPayerHeaders","headers","module","exports"],"mappings":"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","file":"base.js","sourcesContent":["/* eslint-disable no-underscore-dangle */\n// eslint-disable-next-line import/no-import-module-exports\nimport packedSchema from './schema/graphql.txt';\n\nconst { parse } = require('graphql/language/parser');\nconst isAbsoluteUrl = require('is-absolute-url');\nconst pick = require('lodash/pick');\nconst get = require('lodash/get');\nconst JWT = require('@arcblock/jwt');\nconst Mcrypto = require('@ocap/mcrypto');\nconst { fromBase64, toUint8Array } = require('@ocap/util');\nconst BaseClient = require('@arcblock/sdk-util');\nconst { WsClient } = require('@arcblock/ws');\nconst jsonpack = require('jsonpack');\n\n/**\n * Provides a readonly client to forge\n * Its recommended to use this version in browser to get smaller bundle size\n *\n * @class GraphQLClientBase\n * @extends {BaseClient}\n */\nclass GraphQLClientBase extends BaseClient {\n constructor(endpoint) {\n if (isAbsoluteUrl(endpoint) === false) {\n throw new Error('Chain endpoint must be a valid url');\n }\n\n super({\n dataSource: 'forge',\n httpEndpoint: endpoint,\n socketEndpoint: () => this._getSocketEndpoint(endpoint),\n enableQuery: true,\n enableSubscription: true,\n enableMutation: true,\n maxQueryDepth: 6,\n });\n\n this._endpoint = endpoint;\n this._socketClient = null;\n }\n\n setGasPayer(wallet) {\n this._gasPayer = wallet;\n }\n\n subscribe(topic, callback) {\n const client = this._ensureSocketClient();\n return client.on(topic, callback);\n }\n\n unsubscribe(topic, callback) {\n const client = this._ensureSocketClient();\n return client.off(topic, callback);\n }\n\n _ensureSocketClient() {\n if (!this._socketClient) {\n this._socketClient = new WsClient(\n this.config.socketEndpoint(),\n Object.assign(this._getSocketOptions(), {\n heartbeatIntervalMs: 10 * 1000,\n })\n );\n }\n\n if (this._socketClient.isConnected() === false) {\n this._socketClient.connect();\n }\n\n return this._socketClient;\n }\n\n _getSocketEndpoint(endpoint) {\n let socketEndpoint = endpoint.replace(/https?:\\/\\//, 'ws://');\n if (endpoint.indexOf('https://') === 0) {\n socketEndpoint = socketEndpoint.replace('ws://', 'wss://');\n }\n\n return socketEndpoint;\n }\n\n async _getAuthHeaders(query) {\n if (!this._gasPayer) {\n return {};\n }\n if (typeof this._gasPayer.sign !== 'function') {\n return {};\n }\n\n const parsed = parse(query);\n const operation = get(parsed, 'definitions[0].operation');\n\n // calculate gas-payer header for sendTx mutation\n if (operation === 'mutation') {\n const selection = get(parsed, 'definitions[0].selectionSet.selections[0]');\n if (get(selection, 'name.value') === 'sendTx') {\n const tx = selection.arguments.find((x) => x.name.value === 'tx');\n if (tx) {\n const txBuffer = toUint8Array(fromBase64(tx.value.value));\n const txHash = Mcrypto.toTxHash(txBuffer);\n return {\n 'x-gas-payer-pk': this._gasPayer.publicKey,\n 'x-gas-payer-sig': await JWT.sign(this._gasPayer.address, this._gasPayer.secretKey, { txHash }),\n };\n }\n }\n }\n\n return {};\n }\n\n _getSchema() {\n return jsonpack.unpack(packedSchema);\n }\n\n _getIgnoreFields() {\n return [];\n }\n\n pickGasPayerHeaders({ headers }) {\n return pick(headers, ['x-gas-payer-sig', 'x-gas-payer-pk']);\n }\n}\n\nmodule.exports = GraphQLClientBase;\n"]}