SDK
JavaScript SDK อย่างเป็นทางการสร้าง URL สำหรับเข้าสู่ระบบและลิงก์ลงนามให้คุณ และเรียก API ของ Hivesigner ให้ด้วย ส่วน Python นั้นมีไลบรารีจากชุมชน ภาษาอื่นใดก็เรียก REST API ได้โดยตรง
JavaScript SDK
SDK คือแพ็กเกจ npm ชื่อ hivesigner ซอร์สโค้ดอยู่ที่ https://github.com/ecency/hivesigner-sdk มันเขียนด้วย TypeScript และมาพร้อมชนิดข้อมูลของตนเอง
เวอร์ชัน 4 ต้องใช้ Node.js 18 ขึ้นไป เพราะมันใช้ fetch ที่มีมาในตัว ส่วนในเบราว์เซอร์ต้องใช้ ES2017 ขึ้นไป ที่ใดไม่มี fetch ระดับโกลบอล ให้เพิ่ม polyfill ก่อนใช้ SDK บน Node.js รุ่นเก่ากว่านั้น ให้อยู่กับเวอร์ชัน 3 ต่อไป
ติดตั้ง
npm install hivesigner
สำหรับหน้าเว็บที่ไม่มีขั้นตอนบิลด์ ให้โหลดบันเดิลสำหรับเบราว์เซอร์ มันกำหนดตัวแปรโกลบอลชื่อ hivesigner ไว้
<script src="https://cdn.jsdelivr.net/npm/hivesigner@4/lib/hivesigner.min.js"></script>
สร้างไคลเอ็นต์
import { Client } from 'hivesigner';
const client = new Client({
app: 'CLIENT_ID',
callbackURL: 'REDIRECT_URI',
scope: ['posting'],
});
| ตัวเลือก | ความหมาย |
|---|---|
app |
บัญชีแอปของคุณ ส่งไปเป็น client_id |
callbackURL |
ที่ที่ Hivesigner ส่งผู้ใช้กลับไป ต้องเป็น callback ของแอปคุณอย่างใดอย่างหนึ่ง ตรงกันทุกอักขระ (callback แบบ loopback ที่เป็น http ธรรมดาอาจต่างกันที่โฮสต์และพอร์ตได้ ดู callback) |
scope |
รายการหนึ่งชุด เชื่อมด้วยจุลภาคเป็นพารามิเตอร์ scope ดู ขอบเขตสิทธิ์ |
responseType |
'code' สำหรับโฟลว์แบบโค้ด หากใช้โฟลว์แบบโทเค็นก็ไม่ต้องใส่ |
accessToken |
โทเค็นการเข้าถึงของผู้ใช้ เมื่อคุณมีอยู่แล้ว |
apiURL |
ต้นทางของ API โดย SDK จะเติม /api/ ต่อท้ายให้ ค่าเริ่มต้นคือ https://hivesigner.com |
setApp, setCallbackURL, setScope, setAccessToken, removeAccessToken และ setApiURL เปลี่ยนค่าของไคลเอ็นต์ได้ภายหลัง แต่ละตัวคืนไคลเอ็นต์กลับมา
พาผู้ใช้เข้าสู่ระบบ
getLoginURL(state, account) คืน URL สำหรับเข้าสู่ระบบ
const url = client.getLoginURL('STATE');
// https://hivesigner.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=posting&state=STATE
stateย้อนกลับมาที่ callback ของคุณโดยไม่เปลี่ยนแปลง ใช้มันผูกคำตอบเข้ากับคำขอaccountใส่หรือไม่ก็ได้ เป็นชื่อผู้ใช้ Hivesigner เลือกบัญชีนั้นเมื่อมันอยู่บนอุปกรณ์ และไม่สนใจเมื่อไม่มี
ในเบราว์เซอร์ client.login({ state: 'STATE' }) ส่งผู้ใช้ไปยัง URL เดียวกันโดยไม่ระบุบัญชี
ในโฟลว์แบบโทเค็น callback ของคุณได้รับ access_token, expires_in และ username ให้มอบโทเค็นแก่ไคลเอ็นต์
client.setAccessToken('ACCESS_TOKEN');
SDK ไม่มีเมธอดสำหรับการแลกโค้ดในโฟลว์แบบโค้ด เซิร์ฟเวอร์ของคุณต้องส่งโค้ดกับไคลเอ็นต์ซีเคร็ตไปยัง API เอง ตามที่ แลกโค้ด แสดงไว้
ดูว่าใครคือผู้ใช้
const me = await client.me();
// { user, _id, name, account, scope, user_metadata }
account คือบัญชี Hive ของผู้ใช้ตามที่บล็อกเชนคืนมา ส่วน scope ระบุสิ่งที่โทเค็นอนุญาต
กระจายธุรกรรม
broadcast(operations) ส่งการดำเนินการไปยัง API ซึ่งกระจายให้แทนผู้ใช้ API รับเฉพาะการดำเนินการฝั่ง posting ที่ผู้ใช้ของโทเค็นเป็นผู้เขียนเท่านั้น คือ vote, comment, delete_comment, comment_options, custom_json ที่ใช้สิทธิ์ posting, claim_reward_balance และ account_update2 สำหรับเมตะดาต้าโปรไฟล์ ดู broadcast รับอะไรบ้าง
await client.broadcast([
['vote', { voter: 'USERNAME', author: 'AUTHOR', permlink: 'PERMLINK', weight: 10000 }],
]);
ให้ระบุชื่อผู้ใช้ไว้ในทุกการดำเนินการ API ไม่แทนค่า __signer ให้
เมธอดช่วยเหล่านี้สร้างการดำเนินการหนึ่งอย่างแล้วเรียก broadcast
| เมธอด | กระจายอะไร |
|---|---|
vote(voter, author, permlink, weight) |
vote โดย weight อยู่ในช่วง -10000 ถึง 10000 (100%) |
comment(parentAuthor, parentPermlink, author, permlink, title, body, jsonMetadata) |
comment สำหรับโพสต์ใหม่ parentAuthor เป็น '' ส่วน jsonMetadata เป็นอ็อบเจ็กต์ได้ SDK จะแปลงเป็นสตริงให้ |
deleteComment(author, permlink) |
delete_comment |
customJson(requiredAuths, requiredPostingAuths, id, json) |
custom_json ให้ส่ง [] เป็น requiredAuths และ ['USERNAME'] เป็น requiredPostingAuths ส่วน json เป็นสตริง |
reblog(account, author, permlink) |
custom_json ที่มี id เป็น follow เพื่อรีบล็อกโพสต์ |
follow(follower, following) |
custom_json ที่มี id เป็น follow และ what: ['blog'] |
unfollow(unfollower, unfollowing) |
custom_json ที่มี id เป็น follow และ what: [] |
ignore(follower, following) |
custom_json ที่มี id เป็น follow และ what: ['ignore'] (ปิดเสียง) |
claimRewardBalance(account, rewardHive, rewardHbd, rewardVests) |
claim_reward_balance จำนวนเงินเป็นสตริง เช่น '0.000 HIVE', '0.000 HBD' และ '1.000000 VESTS' |
updateUserMetadata() เลิกใช้แล้ว หากต้องการเปลี่ยนโปรไฟล์ของผู้ใช้ ให้กระจาย account_update2 พร้อม posting_json_metadata ใหม่
ออกจากระบบ
revokeToken() คือคำสั่งออกจากระบบของ SDK มันส่งโทเค็นไปยังปลายทางเพิกถอนของ API แล้วลบโทเค็นออกจากไคลเอ็นต์ หากการเรียกล้มเหลว ให้เรียก removeAccessToken() เอง และอย่าลืมลบโทเค็นจากที่ที่แอปของคุณเก็บไว้ด้วย
หากต้องการยุติสิทธิ์เข้าถึงของแอปคุณอย่างถาวร ผู้ใช้ต้องลบแอปนั้นเองที่ https://hivesigner.com/authorized-apps ดู ดูและถอนสิทธิ์ของแอป
ลิงก์ลงนาม
sendOperation(op, params), sendOperations(ops, params) และ sendTransaction(tx, params) คืนลิงก์ https://hivesigner.com/sign/... ส่วน params รับ callback, no_broadcast และ signer ดู ลิงก์ลงนาม
import { sendOperation } from 'hivesigner';
const link = sendOperation(
['transfer', { from: '__signer', to: 'RECIPIENT', amount: '1.000 HIVE', memo: 'MEMO' }],
{ callback: 'https://YOUR_APP/paid' },
);
ใน TypeScript ชนิดข้อมูลบังคับให้ใส่อาร์กิวเมนต์ตัวที่สาม ให้ส่ง undefined เพื่อรับลิงก์กลับมา
ในเบราว์เซอร์ ให้ส่งฟังก์ชันเป็นอาร์กิวเมนต์ตัวที่สามเพื่อเปิดลิงก์ในแท็บใหม่แทน ฟังก์ชันนั้นจะไม่ถูกเรียกและจะไม่มีค่าใดคืนมา ให้เรียกจากตัวจัดการการคลิก มิฉะนั้นเบราว์เซอร์อาจบล็อกแท็บใหม่และการเรียกจะเกิดข้อผิดพลาด
พรอมิสกับคอลแบ็ก
me, broadcast, เมธอดช่วยต่าง ๆ และ revokeToken คืนพรอมิส หากต้องการใช้คอลแบ็กแทน ให้ส่งฟังก์ชันเป็นอาร์กิวเมนต์ตัวสุดท้าย มันรับ (error, result)
// Promise
try {
const result = await client.vote('USERNAME', 'AUTHOR', 'PERMLINK', 10000);
} catch (error) {
console.error(error.error, error.error_description);
}
// Callback
client.vote('USERNAME', 'AUTHOR', 'PERMLINK', 10000, (error, result) => {
if (error) console.error(error.error, error.error_description);
});
เมื่อ API ตอบเป็นข้อผิดพลาด พรอมิสจะถูกปฏิเสธพร้อมเนื้อหาข้อผิดพลาดของ API คือ { error, error_description } หากใช้คอลแบ็ก เนื้อหานั้นจะเป็นอาร์กิวเมนต์ error และเมื่อคำตอบไม่ใช่ JSON มันจะถูกปฏิเสธพร้อมข้อผิดพลาดจากการแปลงข้อมูล
Python
ไลบรารีเหล่านี้มาจากชุมชน ผู้เขียนเป็นผู้ดูแลเอง ไม่ใช่ทีม Hivesigner ให้ตรวจสอบกับ REST API ก่อนนำไปใช้จริง
| ไลบรารี | ผู้เขียน |
|---|---|
| hivesigner-python-client: https://github.com/emre/hivesigner-python-client | emrebeyler |
beem โมดูล beem.hivesigner: https://beem.readthedocs.io/en/latest/beem.hivesigner.html |
holger80 |