SDK's
De officiële JavaScript-SDK bouwt inlog-URL's en ondertekeningslinks en roept de API van Hivesigner voor je aan. Voor Python bestaan bibliotheken uit de gemeenschap. Elke andere taal kan de REST-API rechtstreeks aanroepen.
JavaScript-SDK
De SDK is het npm-pakket hivesigner. De broncode staat op https://github.com/ecency/hivesigner-sdk. Hij is in TypeScript geschreven en brengt zijn typen mee.
Versie 4 vraagt Node.js 18 of nieuwer, omdat hij de ingebouwde fetch gebruikt. In browsers vraagt hij ES2017 of nieuwer. Waar geen globale fetch is, voeg je een polyfill toe voordat je de SDK gebruikt. Op een oudere Node.js blijf je bij versie 3.
Installeren
npm install hivesigner
Voor een pagina zonder bouwstap laad je de browserbundel. Die maakt een globale hivesigner:
<script src="https://cdn.jsdelivr.net/npm/hivesigner@4/lib/hivesigner.min.js"></script>
Een client maken
import { Client } from 'hivesigner';
const client = new Client({
app: 'CLIENT_ID',
callbackURL: 'REDIRECT_URI',
scope: ['posting'],
});
| Optie | Betekenis |
|---|---|
app |
Het account van jouw app, verstuurd als client_id. |
callbackURL |
Waar Hivesigner de persoon naartoe terugstuurt. Moet een van de callbacks van jouw app zijn, teken voor teken (een loopback-callback met gewoon http mag in host en poort verschillen, zie Callbacks). |
scope |
Een lijst, met komma's samengevoegd tot de parameter scope. Zie Reikwijdten. |
responseType |
'code' voor de codestroom. Laat weg voor de tokenstroom. |
accessToken |
Het toegangstoken van de persoon, als je er al een hebt. |
apiURL |
De oorsprong van de API. De SDK voegt er /api/ aan toe. Standaard is https://hivesigner.com. |
setApp, setCallbackURL, setScope, setAccessToken, removeAccessToken en setApiURL wijzigen de client later. Elk daarvan geeft de client terug.
De persoon laten inloggen
getLoginURL(state, account) geeft de inlog-URL terug:
const url = client.getLoginURL('STATE');
// https://hivesigner.com/oauth2/authorize?client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=posting&state=STATE
statekomt ongewijzigd terug bij jouw callback. Gebruik het om het antwoord aan het verzoek te binden.accountis optioneel: een gebruikersnaam. Hivesigner kiest dat account wanneer het op het apparaat staat en negeert het anders.
In een browser stuurt client.login({ state: 'STATE' }) de persoon naar dezelfde URL, zonder account.
In de tokenstroom ontvangt jouw callback access_token, expires_in en username. Geef het token aan de client:
client.setAccessToken('ACCESS_TOKEN');
De SDK heeft geen methode voor de uitwisseling in de codestroom. Jouw server stuurt de code en het clientgeheim zelf naar de API, zoals De code inwisselen laat zien.
De persoon ophalen
const me = await client.me();
// { user, _id, name, account, scope, user_metadata }
account is het Hive-account van de persoon zoals de blockchain het teruggeeft. scope somt op wat het token toestaat.
Uitzenden
broadcast(operations) stuurt operaties naar de API, die ze voor de persoon uitzendt. De API neemt alleen posting-operaties aan waarvan de auteur de persoon van het token is: vote, comment, delete_comment, comment_options, custom_json met posting-bevoegdheid, claim_reward_balance en account_update2 voor profielmetadata. Zie Wat broadcast aanneemt.
await client.broadcast([
['vote', { voter: 'USERNAME', author: 'AUTHOR', permlink: 'PERMLINK', weight: 10000 }],
]);
Noem de persoon in elke operatie. De API vervangt __signer niet.
Deze hulpmethoden bouwen elk één operatie en roepen broadcast aan:
| Methode | Zendt uit |
|---|---|
vote(voter, author, permlink, weight) |
vote. weight loopt van -10000 tot 10000 (100%). |
comment(parentAuthor, parentPermlink, author, permlink, title, body, jsonMetadata) |
comment. Voor een nieuw bericht is parentAuthor gelijk aan ''. jsonMetadata mag een object zijn: de SDK maakt er een tekenreeks van. |
deleteComment(author, permlink) |
delete_comment |
customJson(requiredAuths, requiredPostingAuths, id, json) |
custom_json. Geef [] als requiredAuths en ['USERNAME'] als requiredPostingAuths. json is een tekenreeks. |
reblog(account, author, permlink) |
custom_json met id follow, dat het bericht opnieuw deelt |
follow(follower, following) |
custom_json met id follow, what: ['blog'] |
unfollow(unfollower, unfollowing) |
custom_json met id follow, what: [] |
ignore(follower, following) |
custom_json met id follow, what: ['ignore'] (dempen) |
claimRewardBalance(account, rewardHive, rewardHbd, rewardVests) |
claim_reward_balance. Bedragen zijn tekenreeksen als '0.000 HIVE', '0.000 HBD' en '1.000000 VESTS'. |
updateUserMetadata() is verouderd. Om het profiel van iemand te wijzigen, zend je account_update2 uit met nieuwe posting_json_metadata.
Uitloggen
revokeToken() is de uitlogaanroep van de SDK. Hij stuurt het token naar het intrekkingseindpunt van de API en haalt het daarna uit de client. Mislukt de aanroep, roep dan zelf removeAccessToken() aan. Verwijder het token ook daar waar jouw app het heeft bewaard.
Om de toegang van jouw app voorgoed te beëindigen, haalt de persoon haar weg op https://hivesigner.com/authorized-apps. Zie De toegang van een app bekijken en weghalen.
Ondertekeningslinks
sendOperation(op, params), sendOperations(ops, params) en sendTransaction(tx, params) geven een link https://hivesigner.com/sign/... terug. params neemt callback, no_broadcast en signer. Zie Ondertekeningslinks.
import { sendOperation } from 'hivesigner';
const link = sendOperation(
['transfer', { from: '__signer', to: 'RECIPIENT', amount: '1.000 HIVE', memo: 'MEMO' }],
{ callback: 'https://YOUR_APP/paid' },
);
In TypeScript eisen de typen het derde argument: geef undefined door om de link terug te krijgen.
Geef in een browser een functie als derde argument door om de link in een nieuw tabblad te openen. De functie wordt niet aangeroepen en er wordt niets teruggegeven. Roep haar aan vanuit een klikafhandelaar, anders kan de browser het nieuwe tabblad blokkeren en werpt de aanroep een fout.
Promises en callbacks
me, broadcast, de hulpmethoden en revokeToken geven een promise terug. Geef een functie als laatste argument door om in plaats daarvan een callback te gebruiken. Die krijgt (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);
});
Antwoordt de API met een fout, dan wordt de promise afgewezen met de foutinhoud van de API, { error, error_description }. Met een callback is die inhoud het argument error. Is het antwoord geen JSON, dan draagt de afwijzing de ontleedfout.
Python
Deze bibliotheken komen uit de gemeenschap. Hun auteurs onderhouden ze, niet het team van Hivesigner. Toets ze aan de REST-API voordat je erop vertrouwt.
| Bibliotheek | Auteur |
|---|---|
| hivesigner-python-client: https://github.com/emre/hivesigner-python-client | emrebeyler |
beem, module beem.hivesigner: https://beem.readthedocs.io/en/latest/beem.hivesigner.html |
holger80 |