Chromia
Start Building

25 / 26Part 6: Create the clientBeginner

Complete the example

Next, you finish the client so you can exercise the remaining functions.

First, declare the last type required to query book reviews:

typescript
type BookReview = {  book: Book;  reviewer_name: string;};

Then add the functions that query entities, along with a few helpers that read user input:

typescript
const rl = readline.createInterface({  input: process.stdin,  output: process.stdout,});function getInput(query: string): Promise<string> {  return new Promise((resolve) => {    rl.question(query, (answer) => {      resolve(answer);    });  });}const getReviewsForBook = async (isbn: string) => {  const bookList = await client.query<BookReview[]>("get_all_reviews_for_book", { isbn: isbn });  console.log("Book review list\n", bookList);};const getAllTransactions = async () => {  const transactions = await client.query("get_transactions", {});  console.dir(transactions, {    depth: null,    customInspect: true, // This forces Buffer to use hex string output  });};

Finally, here is the complete main function. It adds the calls that create books and reviews and retrieve data:

typescript
async function main() {  client = await createClient({    nodeUrlPool: "http://localhost:7740",    blockchainRid: blockchainRID,  });  console.log("Creating a new book transaction");  await client.signAndSendUniqueTransaction(    { name: "create_book", args: ["ISBN1", "Chromia 101", "John Doe"] },    bookKeeperSignatureProvider  );  await getInput("Transaction committed!\nPress any key to continue...");  console.log("Let's fetch and view all books currently in the node");  await getAllBooks();  await getInput("Press any key to continue...");  console.log("We can now add a second book");  await client.signAndSendUniqueTransaction(    { name: "create_book", args: ["ISBN2", "Rell 101", "Jane Doe"] },    bookKeeperSignatureProvider  );  await getInput("Transaction committed, press any key to continue...");  console.log("Let's fetch and view all books currently in the node");  await getAllBooks();  await getInput("Press any key to continue...");  console.log("We can now add two reviews for the book with ISBN = ISBN2");  await client.signAndSendUniqueTransaction(    {      name: "create_book_review",      args: ["ISBN2", "Bob Doe", "This is a great book!", 5],    },    bookKeeperSignatureProvider  );  await client.signAndSendUniqueTransaction(    {      name: "create_book_review",      args: ["ISBN2", "Charlie Doe", "It was ok!", 3],    },    bookKeeperSignatureProvider  );  await getInput("Transaction committed, press any key to continue...");  console.log("Let's fetch and view all reviews for ISBN2");  await getReviewsForBook("ISBN2");  await getInput("Press any key to continue...");  console.log("Now let's look at all transactions that have been committed to the blockchain");  await getAllTransactions();  await getInput("Press any key to continue...");  rl.close();}

You now have a working example of a front-end client built with Chromia and postchain-client.

Written for this site from Chromia’s public course. Code samples are the course’s own.