You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add a full Zoho Desk integration: tools, block, icon, and a webhook trigger.
Tools (tools/zoho_desk): list/get/update tickets, list/add comments,
list/get threads, get contact, list organizations, and download attachments
as UserFiles via an internal route. Registered in tools/registry.ts.
Block (blocks/blocks/zoho-desk.ts): operation dropdown, OAuth credential,
an organization selector backed by GET /organizations, per-operation fields,
and BlockMeta templates. Wires the Zoho Desk trigger.
OAuth (zoho-desk provider): authorize/token at accounts.zoho.com with
access_type=offline + prompt=consent; the Desk REST base is derived from the
token response api_domain and persisted so calls honor data residency instead
of assuming desk.zoho.com. Every call sends Authorization: Zoho-oauthtoken and
the orgId header.
Trigger + webhook handler (triggers/zoho_desk, lib/webhooks/providers/zoho-desk.ts):
Sim creates and tears down the Zoho Desk webhook subscription. Inbound events
are verified with JWT RS256 (X-ZDesk-JWT) against the data-center JWKS, ACKed
via the durable queue to meet Zoho's 5s deadline, and fail loudly on
Free/Standard editions that cannot create webhooks.
Copy file name to clipboardExpand all lines: apps/docs/components/icons.tsx
+168-6Lines changed: 168 additions & 6 deletions
Original file line number
Diff line number
Diff line change
@@ -2221,21 +2221,108 @@ export function EyeIcon(props: SVGProps<SVGSVGElement>) {
2221
2221
)
2222
2222
}
2223
2223
2224
+
/**
2225
+
* Corporate Atlassian mark, used for family-wide Atlassian credentials — one
2226
+
* API token authenticates Jira, Jira Service Management, and Confluence, so no
2227
+
* single product mark represents it. Individual products keep their own icons.
2228
+
*/
2229
+
export function AtlassianIcon(props: SVGProps<SVGSVGElement>) {
2230
+
const id = useId()
2231
+
const gradientId = `atlassian_gradient_${id}`
2232
+
2233
+
return (
2234
+
<svg
2235
+
{...props}
2236
+
width='24'
2237
+
height='24'
2238
+
/*
2239
+
* The mark's artwork spans ~66 units; the box is padded to 84.5 so it
2240
+
* fills ~78% of its viewBox, matching the inset Atlassian ships on the
2241
+
* Jira and Confluence marks (artwork 16→116 inside 128). Without the
2242
+
* padding this renders ~30% heavier than its siblings in the same tile.
2243
+
*/
2244
+
viewBox='-9.2 -8.9 84.5 84.5'
2245
+
focusable='false'
2246
+
fill='none'
2247
+
aria-hidden='true'
2248
+
xmlns='http://www.w3.org/2000/svg'
2249
+
>
2250
+
<defs>
2251
+
<linearGradient
2252
+
id={gradientId}
2253
+
gradientUnits='userSpaceOnUse'
2254
+
x1='28.536019'
2255
+
y1='35.528544'
2256
+
x2='11.406018'
2257
+
y2='65.208544'
2258
+
>
2259
+
<stop offset='0' stopColor='#0052cc' />
2260
+
<stop offset='0.92' stopColor='#2684ff' />
2261
+
</linearGradient>
2262
+
</defs>
2263
+
<path
2264
+
fill={`url(#${gradientId})`}
2265
+
d='m 19.636018,30.518546 a 1.88,1.88 0 0 0 -3.2,0.35 l -16.2299998,32.46 a 1.94,1.94 0 0 0 1.73,2.81 H 24.536018 a 1.87,1.87 0 0 0 1.74,-1.1 c 4.87,-10 1.92,-25.37 -6.64,-34.52 z'
2266
+
/>
2267
+
<path
2268
+
fill='#2684ff'
2269
+
d='m 31.546018,1.038546 a 42.81,42.81 0 0 0 -2.5,42.27 l 10.95,21.73 a 1.94,1.94 0 0 0 1.73,1.08 h 22.6 a 2,2 0 0 0 1.67,-2.79 l -31.15,-62.29 a 1.83,1.83 0 0 0 -3.3,0 z'
2270
+
/>
2271
+
</svg>
2272
+
)
2273
+
}
2274
+
2224
2275
export function ConfluenceIcon(props: SVGProps<SVGSVGElement>) {
0 commit comments