1# Zoho Desk API
2
3A set of method to easily grab information on Zoho Desk! Official API Documentation is [here](https://desk.zoho.com/DeskAPIDocument).
4
5## Notes
6
7It's needed to create a Self Client Application as described [here](https://desk.zoho.com/DeskAPIDocument#OauthTokens#RegisteringAClient) to use this val. You also need to find your org id (under Setup > API > Zoho Service Communication (ZSC) Key > OrgId).
8
9## Methods
11As of today here is the methods in this val:
12
13- `refreshAccessToken` to generate a valid Access Token based on client id, client secret and a refresh token. Follow the step [here](https://desk.zoho.com/DeskAPIDocument#OauthTokens#RegisteringAClient) to register a client and generate a refresh token.
14- `notAssignedTickets` to extract the currently not assigned tickets in a specified department
15
16Migrated from folder: zohoDesk/zohoDeskApi
3
4export async function dailyDadJoke() {
5 let { setup, punchline } = await fetchJSON("https://official-joke-api.appspot.com/random_joke");
6 return email({
7 text: punchline,
1import { fetchJSON } from "https://esm.town/v/stevekrouse/fetchJSON";
2
3export let getDadJoke = () => fetchJSON("https://official-joke-api.appspot.com/random_joke");
1import { API_URL } from "https://esm.town/v/std/API_URL";
2import { LibsqlError, type ResultSet, type TransactionMode } from "npm:@libsql/client";
3import { z } from "npm:zod";
13
14async function execute(statement: InStatement): Promise<ResultSet> {
15 const res = await fetch(`${API_URL}/v1/sqlite/execute`, {
16 method: "POST",
17 headers: {
27
28async function batch(statements: InStatement[], mode?: TransactionMode): Promise<ResultSet[]> {
29 const res = await fetch(`${API_URL}/v1/sqlite/batch`, {
30 method: "POST",
31 headers: {
6 );
7 const googleAuthOptions = {
8 scope: ["https://www.googleapis.com/auth/spreadsheets"],
9 };
10 const token = await getToken(service_account, googleAuthOptions);
11 const result = fetchJSON(
12 `https://sheets.googleapis.com/v4/spreadsheets/${sheet_id}/${action}`,
13 {
14 method,
1import { api } from "https://esm.town/v/pomdtr/api";
2import { extractMetadata } from "https://esm.town/v/pomdtr/extractMetadata?v=4";
3import { extractValInfo } from "https://esm.town/v/pomdtr/extractValInfo";
4
5export default async function() {
6 let { data: articles } = await api(`/v1/search/vals?query=${encodeURIComponent("@vtIdeas")}`);
7
8 return articles.filter(val => {
19
20```
21import { api } from "https://esm.town/v/pomdtr/api";
22
23export const dynamicFolder = async () => {
24 const { data: posts } = await api(`/v1/search/vals?q=${encodeURIComponent("@post")}`);
25 return {
26 folder: "Blog",
9To use it on your own Val Town SQLite database, [fork it](https://www.val.town/v/stevekrouse/sqlite_admin/fork) to your account.
10
11It uses [basic authentication](https://www.val.town/v/pomdtr/basicAuth) with your [Val Town API Token](https://www.val.town/settings/api) as the password (leave the username field blank).
9To use it on your own Val Town SQLite database, [fork it](https://www.val.town/v/stevekrouse/sqlite_admin/fork) to your account.
10
11It uses [basic authentication](https://www.val.town/v/pomdtr/basicAuth) with your [Val Town API Token](https://www.val.town/settings/api) as the password (leave the username field blank).
1// @title My Val Town Wish List
2
3import { api } from "https://esm.town/v/pomdtr/api";
4import { extractMetadata } from "https://esm.town/v/pomdtr/extractMetadata";
5import { extractValInfo } from "https://esm.town/v/pomdtr/extractValInfo";
9export async function examplePost(req: Request) {
10 const { author, name } = extractValInfo(import.meta.url);
11 const { code, readme } = await api(`/v1/alias/${author}/${name}`);
12 const title = extractMetadata("title", code);
13 return html(await gfm(readme, { title, favicon: "🎁" }));