From cf9d015ad965ef900d353232fbb9244a0312f499 Mon Sep 17 00:00:00 2001 From: mtyszczak <mateusz.tyszczak@gmail.com> Date: Wed, 26 Feb 2025 14:09:30 +0100 Subject: [PATCH] Add signature provider example based on our extensions --- examples/ts/signature-extension/.npmrc | 2 + examples/ts/signature-extension/.parcelrc | 6 ++ examples/ts/signature-extension/README.md | 14 +++++ .../ts/signature-extension/common-data.ts | 10 ++++ examples/ts/signature-extension/package.json | 20 +++++++ .../ts/signature-extension/test/index.html | 57 +++++++++++++++++++ examples/ts/signature-extension/tsconfig.json | 11 ++++ 7 files changed, 120 insertions(+) create mode 100644 examples/ts/signature-extension/.npmrc create mode 100644 examples/ts/signature-extension/.parcelrc create mode 100644 examples/ts/signature-extension/README.md create mode 100644 examples/ts/signature-extension/common-data.ts create mode 100644 examples/ts/signature-extension/package.json create mode 100644 examples/ts/signature-extension/test/index.html create mode 100644 examples/ts/signature-extension/tsconfig.json diff --git a/examples/ts/signature-extension/.npmrc b/examples/ts/signature-extension/.npmrc new file mode 100644 index 000000000..c09005dca --- /dev/null +++ b/examples/ts/signature-extension/.npmrc @@ -0,0 +1,2 @@ +# https://gitlab.syncad.com/hive group specification, offering aggregated package view: https://gitlab.syncad.com/groups/hive/-/packages +@hiveio:registry=https://gitlab.syncad.com/api/v4/groups/136/-/packages/npm/ diff --git a/examples/ts/signature-extension/.parcelrc b/examples/ts/signature-extension/.parcelrc new file mode 100644 index 000000000..7c4c7db42 --- /dev/null +++ b/examples/ts/signature-extension/.parcelrc @@ -0,0 +1,6 @@ +{ + "extends": "@parcel/config-default", + "transformers": { + "*.{ts,tsx}": ["@parcel/transformer-typescript-tsc"] + } +} \ No newline at end of file diff --git a/examples/ts/signature-extension/README.md b/examples/ts/signature-extension/README.md new file mode 100644 index 000000000..74001ccd1 --- /dev/null +++ b/examples/ts/signature-extension/README.md @@ -0,0 +1,14 @@ +# signature-extension + +> [!WARNING] +> This example will not be ran automatically on the CI as it requires direct user action, e.g. OAuth 3rd party app Hive blockchain user authorization + +This example presents different ways of implementing 3rd party apps authorization using wax + +To test this example: + +1. Install keychain extension +2. Import `guest4test` posting key to your wallet +3. Install dependencies: `pnpm install` +4. Run parcel: `pnpm test` +5. Goto [http://localhost:1234](http://localhost:1234), sign the transaction and check logs diff --git a/examples/ts/signature-extension/common-data.ts b/examples/ts/signature-extension/common-data.ts new file mode 100644 index 000000000..daf510fe2 --- /dev/null +++ b/examples/ts/signature-extension/common-data.ts @@ -0,0 +1,10 @@ +export const accountName = "guest4test"; +export const publicKey = "STM8XQJiRBND7q6Cu1kxyRgLVLU3y1B5iGFU5VAqSpaAK38YFGZP8"; +export const privateKey = process.env.PRIVATE_KEY as string; + +export const voteData = { + voter: accountName, + author: "c0ff33a", + permlink: "ewxhnjbj", + weight: 2200 +}; diff --git a/examples/ts/signature-extension/package.json b/examples/ts/signature-extension/package.json new file mode 100644 index 000000000..284f6fb58 --- /dev/null +++ b/examples/ts/signature-extension/package.json @@ -0,0 +1,20 @@ +{ + "name": "signature-extension", + "version": "1.0.0", + "type": "module", + "scripts": { + "test": "parcel test/index.html" + }, + "dependencies": { + "@hiveio/wax": "file:../../../ts", + "@hiveio/wax-signers-keychain": "file:../../../ts/packages/signers-keychain", + "@hiveio/wax-signers-peakvault": "file:../../../ts/packages/signers-peakvault" + }, + "devDependencies": { + "@parcel/config-default": "^2.13.3", + "@parcel/transformer-typescript-tsc": "^2.13.3", + "buffer": "^5.5.0||^6.0.0", + "parcel": "^2.13.3", + "process": "^0.11.10" + } +} diff --git a/examples/ts/signature-extension/test/index.html b/examples/ts/signature-extension/test/index.html new file mode 100644 index 000000000..558c0f36e --- /dev/null +++ b/examples/ts/signature-extension/test/index.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> +</head> +<body> + <h1>Signing example</h1> + <h3>Remember to unlock Peak Vault before using it</h3> + <button onclick="useKeychain()">Use Keychain</button> + <button onclick="usePeakVault()">Use Peak Vault</button> + <pre><code id="tx-result"></code></pre> + <script type="module"> + import { createHiveChain } from "@hiveio/wax"; + import { accountName, publicKey, voteData } from "../common-data"; + import KeychainProvider from "@hiveio/wax-signers-keychain"; + import PeakVaultProvider from "@hiveio/wax-signers-peakvault"; + + const txResult = document.getElementById('tx-result'); + + (async()=> { + const keychainProvider = KeychainProvider.for(accountName, "posting"); + const peakVaultProvider = PeakVaultProvider.for(accountName, "posting"); + + const chain = await createHiveChain(); + + const createTransaction = async () => { + txResult.textContent = 'Signing...'; + const tx = await chain.createTransaction(); + tx.pushOperation({ + vote: voteData + }); + console.log(tx.transaction); + console.log(`Sig digest: ${tx.sigDigest}`); + return tx; + }; + + const sign = async (provider) => { + try { + const tx = await createTransaction(); + await tx.sign(provider); + const apiJson = tx.toApiJson(); + console.log('Transaction:', apiJson); + console.log(`Keys match: ${tx.signatureKeys[0] === publicKey}`); + txResult.textContent = JSON.stringify(apiJson, null, 2); + } catch (error) { + console.error(error); + txResult.textContent = `Error: ${error.message}`; + } + }; + + window.useKeychain = () => void sign(keychainProvider); + window.usePeakVault = () => void sign(peakVaultProvider); + })(); + </script> +</body> +</html> diff --git a/examples/ts/signature-extension/tsconfig.json b/examples/ts/signature-extension/tsconfig.json new file mode 100644 index 000000000..f5fe061f8 --- /dev/null +++ b/examples/ts/signature-extension/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../../../ts/tsconfig.json", + "compilerOptions": { + "rootDir": ".", + "baseUrl": ".", + "outDir": "dist" + }, + "include": [ + "." + ] +} \ No newline at end of file -- GitLab