<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: HEAVSTAL TECH™</title>
    <description>The latest articles on DEV Community by HEAVSTAL TECH™ (@heavstal_tech).</description>
    <link>https://dev.to/heavstal_tech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3673442%2Fa9754cab-9066-4df8-8816-51d2c6dcb782.jpg</url>
      <title>DEV Community: HEAVSTAL TECH™</title>
      <link>https://dev.to/heavstal_tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heavstal_tech"/>
    <language>en</language>
    <item>
      <title>The "I Forgot My Password Dilemma" and How I Handled It</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Sun, 09 Aug 2026 14:27:37 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/the-i-forgot-my-password-dilemma-and-how-i-handled-it-4f1p</link>
      <guid>https://dev.to/heavstal_tech/the-i-forgot-my-password-dilemma-and-how-i-handled-it-4f1p</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7girl3xgetenxm34gqj5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7girl3xgetenxm34gqj5.jpg" alt=" " width="720" height="802"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;In today's internet, almost every website/app requires you to create an account with a password.&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Why?&lt;/strong&gt;&lt;br&gt;
Cause it's either they want a unique password, or they want the password to follow a specific pattern.&lt;br&gt;&lt;br&gt;
Normally, many people would use only one password for all their accounts, but because of the requirements from these websites, it becomes near-impossible to use only one password for all websites/apps.&lt;br&gt;&lt;br&gt;
Over time, it starts to get complicated.&lt;br&gt;&lt;br&gt;
You wake up one random morning, enter your favourite app, and they tell you to sign in cause it's been two months since the last time you signed in.&lt;br&gt;&lt;br&gt;
And all of a sudden,&lt;br&gt;&lt;br&gt;
&lt;strong&gt;YOU DON'T REMEMBER THE PASSWORD YOU USED&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
• You panic.&lt;br&gt;
• Try every combination you can think of.&lt;br&gt;
• And eventually, they lock you out.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;But it doesn't have to be that way.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
With &lt;strong&gt;Heavstal Password Manager&lt;/strong&gt;, you can store as many passwords as you want, go away for 5 months, come back and still meet the passwords.&lt;br&gt;&lt;br&gt;
Now that random morning when you wake up to your favourite app and you're asked to sign in, you can just navigate to Heavstal Password Manager, copy the password, go back and sign in.&lt;br&gt;&lt;br&gt;
Yeah.&lt;br&gt;&lt;br&gt;
It's really that easy.&lt;br&gt;&lt;br&gt;
And the best part?&lt;br&gt;&lt;br&gt;
Your passwords are stored securely in our database, and they're protected by Cloudflare.&lt;br&gt;&lt;br&gt;
So if a hacker tries to get a hold of them?&lt;br&gt;&lt;br&gt;
Good luck to them.&lt;br&gt;&lt;br&gt;
And even if they somehow do get a hold of the stored data?&lt;br&gt;&lt;br&gt;
Good luck to them decrypting it cause it's encrypted on your own device before it even goes to our severs, unlike some... you know who.&lt;br&gt;&lt;br&gt;
That's how securely your passwords are stored.&lt;br&gt;&lt;br&gt;
Not only are they protected by our Internal WAF, but they're also protected by Cloudflare, and your encrypted password data can only be unlocked with the one-time Master Password you create before storing any passwords.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;WITH HEAVSTAL PASSWORD MANAGER, YOU CAN:&lt;/strong&gt;&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Add Password Name:&lt;/strong&gt;
You can attach a name to the password for easy recognition.
&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Include Password Domain:&lt;/strong&gt;
If the application you create the password for has a website, or is a website itself, you can simply add the website URL for beautiful styling and easy recognition.
&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Add Username/Email:&lt;/strong&gt;
Adding a username comes in handy. This way, you aren't just getting the password, but you can also get the email or username used in creating the application.
&lt;/li&gt;

&lt;li&gt;
&lt;strong&gt;Add Password:&lt;/strong&gt;
The password itself. Adding the password itself is the most important part, as it's the main value and the most easily forgotten asset.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And that is as far as it goes... For now.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Now, about those passwords you're struggling to keep in your head, how about you store those passwords so you don't forget them later?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://heavstal.com.ng/manager" rel="noopener noreferrer"&gt;Password Manager&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;&lt;a href="https://heavstal.com.ng/manager/legal" rel="noopener noreferrer"&gt;Terms&lt;/a&gt;&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Oh well, I think I'll be going to store this new Facebook password.&lt;br&gt;&lt;br&gt;
Me and my short memory 🙂‍↔️&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>showdev</category>
      <category>password</category>
    </item>
    <item>
      <title>Heavstal Tech™ – Building Tomorrow's Web, Today!</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Sun, 02 Aug 2026 05:10:24 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/heavstal-tech-building-tomorrows-web-today-1hpi</link>
      <guid>https://dev.to/heavstal_tech/heavstal-tech-building-tomorrows-web-today-1hpi</guid>
      <description>&lt;p&gt;Heavstal Tech™ empowers developers with secure, scalable, and modern infrastructure while providing cutting-edge developer solutions, offering secure OAuth2 &amp;amp; OIDC services, enterprise-grade NPM modules, password management, powerful APIs, and automation tools. Designed for reliability and performance, our platform enables teams and individuals to build, deploy, and scale applications with confidence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; &lt;a href="https://heavstal.com.ng" rel="noopener noreferrer"&gt;https://heavstal.com.ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/HeavstalTech" rel="noopener noreferrer"&gt;https://github.com/HeavstalTech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://docs.heavstal.com.ng" rel="noopener noreferrer"&gt;https://docs.heavstal.com.ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;APIs:&lt;/strong&gt; &lt;a href="https://heavstal.com/apis" rel="noopener noreferrer"&gt;https://heavstal.com/apis&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bots:&lt;/strong&gt; &lt;a href="https://bots.heavstal.com.ng" rel="noopener noreferrer"&gt;https://bots.heavstal.com.ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accounts:&lt;/strong&gt; &lt;a href="https://accounts.heavstal.com.ng" rel="noopener noreferrer"&gt;https://accounts.heavstal.com.ng&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share:&lt;/strong&gt; &lt;a href="https://whatsapp.com/channel/0029VbBcg80KwqSR7dr7do1D" rel="noopener noreferrer"&gt;https://whatsapp.com/channel/0029VbBcg80KwqSR7dr7do1D&lt;/a&gt;&lt;/p&gt;

</description>
      <category>heavstal</category>
      <category>software</category>
      <category>startup</category>
      <category>techtalks</category>
    </item>
    <item>
      <title>Heavstal API Introduction</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Fri, 24 Jul 2026 13:12:25 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/heavstal-api-introduction-22fc</link>
      <guid>https://dev.to/heavstal_tech/heavstal-api-introduction-22fc</guid>
      <description>&lt;p&gt;Welcome to Heavstal Cloud APIs - A place for all your developer needs!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Heavstal APIs
&lt;/h2&gt;

&lt;p&gt;Heavstal API is a suite of high-performance APIs designed to empower applications of any type. From conversational AI to cryptographic security to entertainment and more, our endpoints are built for speed, reliability, and ease of use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Heavstal API over traditional scraping
&lt;/h2&gt;

&lt;p&gt;Traditional web scraping is increasingly difficult and unreliable due to advanced security measures like Cloudflare and frequent website and HTML structure changes. By leveraging &lt;strong&gt;Heavstal APIs&lt;/strong&gt;, you eliminate the burden of maintenance; we handle the complexities of data ingestion and protection, ensuring a stable, reliable data stream with a 90% guaranteed uptime&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Heavstal APIs over other API Providers
&lt;/h2&gt;

&lt;p&gt;Heavstal Tech provides a cohesive ecosystem of APIs categorized to ensure seamless integration, meaning if you find an API your application needs in our &lt;strong&gt;API Playground&lt;/strong&gt;, you're likely to find more APIs that fits your needs, and therefore instead of hitting different APIs providers, all you have to do it hit Heavstal servers that's built to handle production workloads.&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
 Beyond this consolidated approach, Heavstal APIs offer several key advantages:&lt;br&gt;&lt;br&gt;
 &lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Complimentary Weekly Tokens:&lt;/strong&gt; Every Sunday, users receive 1,000 free tokens. For applications with moderate traffic, this allocation is often sufficient to run your services entirely at no cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lightweight SDK Integration:&lt;/strong&gt; For JavaScript developers, we offer the &lt;strong&gt;&lt;a href="https://www.npmjs.com/package/@heavstal/api" rel="noopener noreferrer"&gt;@heavstal/api&lt;/a&gt;&lt;/strong&gt; SDK. This zero-dependency, lightweight library allows you to interact with our services efficiently without managing direct HTTP requests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Competitive Pricing:&lt;/strong&gt; For high-volume applications that exceed the free weekly quota, we offer flexible, cost-effective scaling. You can purchase additional capacity starting at 1,000 tokens for just ₦3,000 (approx. $3), scaling up to 100,000 tokens for ₦300,000 (approx. $300).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graceful Rate-Limiting:&lt;/strong&gt; To ensure service continuity, we implement a buffer system. Before enforcing strict rate limits, Heavstal allows for a grace period of 10 additional requests and triggers a notification email, providing you the opportunity to upgrade your plan and avoid service interruptions.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;When setting up Heavstal APIs, just like many other API Providers, you'll need an &lt;strong&gt;API key&lt;/strong&gt;.&lt;br&gt;
Heavstal APIs also provide an SDK for easy integration into your application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Getting your API Key
&lt;/h3&gt;

&lt;p&gt;All API requests require an &lt;strong&gt;API Key&lt;/strong&gt;. You can generate one by following the steps below:&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://heavstal.com.ng/credentials" rel="noopener noreferrer"&gt;Heavstal API Key Manager&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click on the blue &lt;strong&gt;Generate Secret Key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Copy the generated Key
And that's all it takes, as simple as it gets.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
  
  
  Step 2: Testing your API Key
&lt;/h3&gt;

&lt;p&gt;To eliminate the guesswork on how a success response will look like, you can test out your API key in our &lt;strong&gt;&lt;a href="https://heavstal.com.ng/apis" rel="noopener noreferrer"&gt;API Playground&lt;/a&gt;&lt;/strong&gt; and see response type, therefore solving two problems with one action.&lt;/p&gt;
&lt;h2&gt;
  
  
  Code and Examples
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Base URL
&lt;/h3&gt;

&lt;p&gt;All endpoints live under:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://heavstal.com.ng/api/v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By passing the &lt;code&gt;x-api-key&lt;/code&gt; in the header, you can make an API request to Heavstal APIs.&lt;br&gt;
In cases of the SDK you can pass a config to it, See Heavstal API SDK Documentation &lt;a href="https://docs.heavstal.com.ng/modules/api/" rel="noopener noreferrer"&gt;HERE&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Using Bash
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://heavstal.com.ng/api/v1/ai &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"x-api-key: ht_live_xxxxxxxxxxxxxxxx"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"prompt": "Hello"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example Using JavaScript
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://heavstal.com.ng/api/v1/ai&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;x-api-key&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Explain quantum physics like I'm 5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;persona&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You're a 21 century Quantum physicist&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;res&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Example Using python
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://heavstal.com.ng/api/v1/ai&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Content-Type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;application/json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;payload&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Explain quantum physics like I&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;m 5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;persona&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;re a 21st century Quantum physicist&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;res&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;data&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Typical Success Response
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"success"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"creator"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Heavstal Tech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"data"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;...&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Typical Error Response
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"error"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"..."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For proper understanding of an API and it's responses, visit it's documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;What happens if my API Key gets accidentally exposed?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 If your are API key is exposed, Heavstal automatically helps minimize the impact through secret scanning and credential revocation. If this occurs, the affected Keys are automatically revocade and you'll be notified via email so you can generate a new key.&lt;/p&gt;

 &lt;br&gt;
 &lt;b&gt;How do I manually rotate my API Key?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 To rotate your API key manually, follow the steps below:&lt;br&gt;&lt;br&gt;
 &lt;ul&gt;

 &lt;li&gt; Visit &lt;strong&gt;&lt;a href="https://heavstal.com.ng/credentials" rel="noopener noreferrer"&gt;Heavstal API Manager&lt;/a&gt;&lt;/strong&gt;
 &lt;/li&gt;
&lt;li&gt; At the button right of the page, click on the white &lt;strong&gt;Roll Key&lt;/strong&gt; button 
 &lt;/li&gt;
&lt;li&gt; You'll be asked to confirm if wether or not you want to rotate the key. &lt;strong&gt;Note:&lt;/strong&gt;This will invalidate your current key immediately. Any apps using it will stop working until you update them with the new key.
 &lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;&lt;br&gt;
   &lt;br&gt;
 &lt;b&gt;How do I manually revoke my API Key?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
  To rovoke your API key manually, follow the steps below:&lt;br&gt;&lt;br&gt;
 &lt;ul&gt;

 &lt;li&gt; Visit &lt;strong&gt;&lt;a href="https://heavstal.com.ng/credentials" rel="noopener noreferrer"&gt;Heavstal API Manager&lt;/a&gt;&lt;/strong&gt;
 &lt;/li&gt;
&lt;li&gt; At the button right of the page, click on the red &lt;strong&gt;Revoke Key&lt;/strong&gt; button 
 &lt;/li&gt;
&lt;li&gt; You'll be asked to confirm if wether or not you want to revoke the key. &lt;strong&gt;Note:&lt;/strong&gt;This will delete your key. You will lose access to all APIs until you generate a new one.
 &lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;
 &lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 &lt;br&gt;
  &lt;b&gt;What happens when I hit my rate-limit?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 Rate limits are monitored closely, and users receive multiple notifications as they approach their quota. Should you exceed your limit, you will receive an email warning detailing a 20-request grace period. Please note that failure to address '429 Too Many Requests' errors during this period will result in the permanent revocation of your API key&lt;br&gt;
 

&lt;p&gt;## API POLICY&lt;br&gt;
&lt;strong&gt;Developer Fair Use API Policy:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This policy governs fair and responsible usage of all Heavstal APIs&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rate Limits&lt;/strong&gt;
Free-tier users are restricted to moderate request volume of 1,000 request per week.

&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prohibited Usage&lt;/strong&gt;
The following are strictly prohibited by Heavstal Tech
&lt;ul&gt;
&lt;li&gt;DDoS attacks or scraping&lt;/li&gt;
&lt;li&gt;Account farming&lt;/li&gt;
&lt;li&gt;Token sharing&lt;/li&gt;
&lt;li&gt;Unauthorized resale&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Violations of this policies may lead to API Key termination without notice.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For further information, check our our &lt;strong&gt;&lt;a href="https://heavstal.com.ng/api-policy" rel="noopener noreferrer"&gt;API POLICY&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>heavstal</category>
      <category>api</category>
      <category>ai</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Heavstal OAuth 2.0 &amp; OpenID Connect (OIDC) Guide</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Thu, 23 Jul 2026 22:57:28 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/heavstal-oauth-20-openid-connect-oidc-guide-2gcj</link>
      <guid>https://dev.to/heavstal_tech/heavstal-oauth-20-openid-connect-oidc-guide-2gcj</guid>
      <description>&lt;p&gt;Integrate 'Sign in with Heavstal' into your applications using standard OAuth 2.0 or OpenID Connect (OIDC). Full Documentation&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Heavstal Authentication
&lt;/h2&gt;

&lt;p&gt;Heavstal Auth (short for Heavstal Tech Authentication) is an African OAuth 2.0 and OpenID Connect platform that lets users prove their identity using their Heavstal account, allowing them to sign in to apps, websites, or services without creating a separate username and password for each application, significantly reducing authentication friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Heavstal Authentication over traditional Authentication methods
&lt;/h2&gt;

&lt;p&gt;Using Heavstal Auth over traditional Authentication methods (email+password) provides both users and developers with major advantages including:&lt;/p&gt;

&lt;h3&gt;
  
  
  User Benefits:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Password-Free Sign-In:&lt;/strong&gt; Users can access multiple applications across the web with a single click without having to create, memorize, or constantly reset new passwords for every website they visit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Privacy by Design:&lt;/strong&gt; Instead of trusting dozens of third-party websites with their sensitive passwords, users authenticate through one highly secure, centralized platform. They maintain full control over which apps have access to their profile data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced Support:&lt;/strong&gt; Heavstal Tech provides enhanced support for users, ensuring fast responses whenever issues arise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strong Account Security:&lt;/strong&gt; With mandatory multi-factor authentication (2FA) and modern account protection protocols, users enjoy a higher level of security compared to standard email and password combinations.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Developer Benefits:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Authentication Burden:&lt;/strong&gt; Developers no longer need to worry about securely hashing passwords, managing password resets, email verification, protecting against credential stuffing attacks or scraping. Heavstal Auth handles the heavy lifting of user security seamlessly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Higher Sign-Up Conversion Rates:&lt;/strong&gt; By offering a frictionless, one-click sign-in experience, applications see significantly lower drop-off rates during user registration and log in flows, leading to faster user acquisition.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seamless Identity Management:&lt;/strong&gt; Developers can focus on building core application features while relying on Heavstal’s robust, high-uptime, and secure authentication service to handle user identity verification and profile mapping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Integration Overhead:&lt;/strong&gt; By leveraging standard OAuth 2.0 and OIDC protocols along with a dedicated SDK, developers can quickly implement secure authentication without building complex identity infrastructure from scratch.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why Heavstal Authentication over other auth provider
&lt;/h2&gt;

&lt;p&gt;Heavstal Auth reduces account compromise risks through mandatory multi-factor authentication and modern account protection mechanisms. Furthermore, Heavstal Auth is designed for low-latency authentication flows, reliable uptime and more importantly it's also an African-built OAuth provider giving African developers a major advantage. The platform also benefits from enterprise-grade edge protection and DDoS mitigation through Cloudflare's global network.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started.
&lt;/h2&gt;

&lt;p&gt;When setting up Heavstal Auth, just like any other Authentication Provider, you'll need to get a &lt;code&gt;Client ID &amp;amp; Client Secret&lt;/code&gt;. Heavstal Auth also provides an SDK for simple integration into your applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: How To Get Your Client ID &amp;amp; Secret:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://heavstal.com.ng/oauth/apps" rel="noopener noreferrer"&gt;Heavstal Auth Manager&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click the bold blue button with text "Create App" or click the blue text that says "Register Application"&lt;/li&gt;
&lt;li&gt;Enter your application details In the required fields (Application Type, App Name, Homepage URL, Authorized JavaScript Origins, &amp;amp; Authorized JavaScript URIs)&lt;/li&gt;
&lt;li&gt;Click on "Register Application"&lt;/li&gt;
&lt;li&gt;A pop-up window will appear containing your Client ID and Client Secret with options to copy or download details. 
&lt;strong&gt;Note 1:&lt;/strong&gt; it is recommended to download these details as it will &lt;em&gt;NEVER&lt;/em&gt; be shown to you again.
&lt;strong&gt;Note 2:&lt;/strong&gt; Never expose your Client Secret in frontend code. It must only be used on trusted backend servers.
&lt;strong&gt;Note 3:&lt;/strong&gt; it is recommended to use Desktop Site for best developer experience and to ensure a more accurate positioning of the instructions above.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Code &amp;amp; Examples
&lt;/h2&gt;

&lt;p&gt;As said earlier under the &lt;code&gt;Getting Started&lt;/code&gt; section, Heavstal Auth has a custom SDK to help developers with easier integration of Heavstal Auth into their application and this SDK is available on npm as &lt;em&gt;&lt;a href="https://www.npmjs.com/package/@heavstal/auth" rel="noopener noreferrer"&gt;@heavstal/auth&lt;/a&gt;&lt;/em&gt;. Below are several methods by which you can integrate Heavstal Auth into your application:&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating Heavstal Authentication Using Next.js
&lt;/h3&gt;

&lt;p&gt;This is the easiest way to add Heavstal Auth to your Next.js application. This official provider pre-configures authorization endpoints, token exchanges, and user profile mapping securely. Ensure that Next.js is installed before using this provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @heavstal/auth next-auth
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add @heavstal/auth next-auth
&lt;span class="c"&gt;# or&lt;/span&gt;
pnpm add @heavstal/auth next-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Configuration (&lt;code&gt;auth.ts&lt;/code&gt; or &lt;code&gt;app/api/auth/[...nextauth]/route.ts&lt;/code&gt;)&lt;/strong&gt;&lt;br&gt;
The Heavstal Auth library uses "OpenID Connect (OIDC)" by default, meaning its default mode is "oidc".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// OIDC Mode &lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NextAuth&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HeavstalProvider&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@heavstal/auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;authOptions&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:[&lt;/span&gt;
    &lt;span class="nc"&gt;HeavstalProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
  &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// OAuth 2.0 Mode&lt;/span&gt;
&lt;span class="nc"&gt;HeavstalProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;oauth2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Mode was added here&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The difference between OIDC and OAuth 2.0 here is that OAuth 2.0 may be preferable in strict edge-runtime environments where JWKS retrieval or JWT verification introduces additional complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrating Heavstal Authentication Using Other Frameworks
&lt;/h3&gt;

&lt;p&gt;For other frameworks like Vue.js, Express.js or Node.js, you do not need to manually configure endpoints. Heavstal Auth operates as an OpenID Connect (OIDC) compliant provider. Simply provide the Issuer URL to any openId library and the library will automatically handle endpoint discovery and configuration.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Issuer&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openid-client&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Auto-discover endpoints using the Issuer URL&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;heavstal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;Issuer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;discover&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts.heavstal.com.ng&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;heavstal&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;client_secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;redirect_uris&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;http://your-app.com/api/auth/callback/heavstal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="na"&gt;response_types&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Integrating Heavstal Authentication Using OIDC
&lt;/h3&gt;

&lt;p&gt;If you decide to use Heavstal Auth OIDC directly, you can use the following parameters for integration.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issuer URL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts.heavstal.com.ng&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discovery Document&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts.heavstal.com.ng/.well-known/openid-configuration&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JWKS Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts.heavstal.com.ng/.well-known/jwks.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Integrating Heavstal Authentication Using Other Languages
&lt;/h3&gt;

&lt;p&gt;Yes, you can use Heavstal Auth with other languages, it is not limited to only JavaScript and its frameworks, as long as the language supports backend execution, it can be used to communicate with Heavstal Auth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example (Python):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;authlib.integrations.flask_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OAuth&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;

&lt;span class="n"&gt;oauth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OAuth&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Auto-discovery via server_metadata_url
&lt;/span&gt;&lt;span class="n"&gt;oauth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;heavstal&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;server_metadata_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://accounts.heavstal.com.ng/.well-known/openid-configuration&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;client_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;client_secret&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;client_kwargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;scope&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openid profile email&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  User Profile Data
&lt;/h2&gt;

&lt;p&gt;On successful authentication, Heavstal Auth provides your application with user details such as &lt;code&gt;Name, ID, Email, &amp;amp; Profile photo&lt;/code&gt;. Heavstal Auth returns the following normalized user profile structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;HeavstalProfile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// The unique Heavstal User ID&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// Full display name&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// Verified Email Address&lt;/span&gt;
  &lt;span class="nl"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// Profile Picture URL&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Time Usage Example
&lt;/h2&gt;

&lt;p&gt;The following example demonstrates what developers can do next after integrating the basic set-up. The example uses the provider's stable user identifier to either create a new user account or log in an existing account, it uses Redis as the database, It demonstrates sign-in handling, JWT persistence, session management, and user creation using OAuth 2.0 mode.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// auth.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NextAuth&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HeavstalProvider&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@heavstal/auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;kv&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@vercel/kv&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;handlers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;signOut&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;auth&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NextAuth&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nc"&gt;HeavstalProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;oauth2&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Remove this option to use OIDC (default).&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="na"&gt;secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AUTH_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// optional but recommended for production&lt;/span&gt;
  &lt;span class="na"&gt;trustHost&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;pages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;signIn&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/auth/signin&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;callbacks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// create or log in a user&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;signIn&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stableId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;stableId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`user:&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;stableId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;kv&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// store in DB&lt;/span&gt;
        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;stableId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="p"&gt;})&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;// Store the user's ID in JWT so it can be accessible throughout your application &lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;
        &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;picture&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;picture&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;profile&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;

    &lt;span class="cm"&gt;/**
     * Expose the user identifier on the session object.
     * Useful for authorization, database lookups,
     * and session validation.
     */&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="nf"&gt;session&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;picture&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;picture&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;session&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Frequently Asked Questions (FAQ)
&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;What happens if my OAuth credentials are accidentally exposed?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
If your client credentials are exposed, Heavstal automatically helps minimize the impact through secret scanning and credential revocation. If this occurs, the affected credentials are automatically revoked and you'll be notified via email so you can generate new credentials.&lt;/p&gt;



&lt;p&gt;&lt;b&gt;How can I rotate my OAuth credentials?&lt;/b&gt; &lt;br&gt;
 &lt;br&gt;&lt;br&gt;
  You can rotate your Heavstal Auth Credentials in Heavstal Console by following the steps below:&lt;br&gt;&lt;br&gt;
  &lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;strong&gt;&lt;a href="https://heavstal.com.ng/oauth/apps" rel="noopener noreferrer"&gt;Heavstal Auth Manager&lt;/a&gt;&lt;/strong&gt;

&lt;/li&gt;
&lt;li&gt;From the application list, find the app whose credentials you want to rotate and at the top right of that app click the &lt;strong&gt;more options menu&lt;/strong&gt; and from the list select &lt;strong&gt;"Configure"&lt;/strong&gt; with Settings icon

&lt;/li&gt;
&lt;li&gt;From the configuration settings, you'll see a section named &lt;strong&gt;"OAuth Credentials"&lt;/strong&gt; containing your client id and masked client secret marked as &lt;strong&gt;"Enabled"&lt;/strong&gt;

&lt;/li&gt;
&lt;li&gt;At the top right of the OAuth Credentials section you will see a button &lt;strong&gt;"+ Add Secret"&lt;/strong&gt;, click this button to create a new client secret 

&lt;/li&gt;
&lt;li&gt;A message modal will appear with your new secret, you're to copy it and replace with the old version in your app

&lt;/li&gt;
&lt;li&gt;Importantly after successfully migrating to the new client secret, you must return to the application configuration in Heavstal Authentication Manger and click, from the two available client secrets, find old one (you can easily identify it via the date provided) that's usually at the bottom, and click on the blue &lt;strong&gt;"Enabled"&lt;/strong&gt; tag at the end of the secret to disable the Old Client secret and optional delete it

&lt;strong&gt;Note 1:&lt;/strong&gt; Please ensure you've updated your old client secret to the new client secret before disabling the the old client secret. 
&lt;strong&gt;Note 2:&lt;/strong&gt; Never expose your Client Secret in frontend code. It must only be used on trusted backend servers.
&lt;strong&gt;Note 3:&lt;/strong&gt; Please use the Desktop Site option provided at the sidebar for best developer experience.&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;b&gt;How can I verify my OAuth Domain?&lt;/b&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;You can verify your OAuth Domain by following the steps below:&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit &lt;strong&gt;&lt;a href="https://heavstal.com.ng/oauth/apps" rel="noopener noreferrer"&gt;Heavstal Auth Manager&lt;/a&gt;&lt;/strong&gt;

&lt;/li&gt;
&lt;li&gt;From the application list, find the application you want to verify which is usually tagged as &lt;strong&gt;"Test"&lt;/strong&gt; then click he &lt;strong&gt;more options menu&lt;/strong&gt; at the top right of the application and from the list which is comprises of only:
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Analytics&lt;/code&gt; - Charts analytics of the OAuth application&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Configure&lt;/code&gt; - Configuration area of the OAuth application &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Delete&lt;/code&gt; - Deleting area of the OAuth application&lt;/li&gt;
&lt;strong&gt;SELECT Configure&lt;/strong&gt;
&lt;/ul&gt;

&lt;/li&gt;
&lt;li&gt;At the top of the application you'll see a hard to miss message &lt;strong&gt;"This OAuth Property is not yet verified"&lt;/strong&gt; with button &lt;strong&gt;Start Verification&lt;/strong&gt;, click on the button.

&lt;/li&gt;
&lt;li&gt;A pop-up window will appear asking you select a verification method which comprises of only:
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Verify via HTML&lt;/code&gt; - Upload a specific HTML file to the root of your website&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Verify via TXT Record&lt;/code&gt; - Add a DNS TXT record to your domain registrar e.g Namecheap, Cloudflare, etc.&lt;/li&gt;
&lt;strong&gt;Select the method best suitable to you and your application.&lt;/strong&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;METHOD 1: Verification via HTML&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
  when verifying via HTML, the pop up window usually changes to new window asking to add a very specific HTML file to the root of your website with details:&lt;br&gt;
  &lt;/p&gt;
&lt;ul&gt;

  &lt;li&gt;
&lt;code&gt;Name:&lt;/code&gt; heavstal-oauth-domain-verification.html&lt;/li&gt;

  &lt;li&gt;
&lt;code&gt;Content:&lt;/code&gt; &lt;a href="mailto:HeavstalAuthDomainVerification@heavstal.com.ng"&gt;HeavstalAuthDomainVerification@heavstal.com.ng&lt;/a&gt;?oauthId=...?&lt;/li&gt;

  &lt;/ul&gt;
&lt;br&gt;
  You are also provided with option to download the HTML file with it's contents&lt;br&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Note 1:&lt;/strong&gt; if your application has more then one redirect URIs added during registration, you will have to add the html file to all the redirect URIs root&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Note 2:&lt;/strong&gt; this method is recommended for applications with URIs from different domains&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Note 3:&lt;/strong&gt; Heavstal Tech uses a custom User-Agent &lt;strong&gt;HeavstalBot/1.0&lt;/strong&gt;, ensure your application does not block it.&lt;br&gt;&lt;br&gt;
  &lt;br&gt;

&lt;p&gt;&lt;strong&gt;METHOD 2: Verification via TXT Records&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
  when verifying via TXT Records, the pop up window usually changes to a new window asking you to add a very specific TXT record to your registrar with details:&lt;br&gt;&lt;br&gt;
  &lt;/p&gt;
&lt;ul&gt;

  &lt;li&gt;
&lt;code&gt;Type:&lt;/code&gt; TXT&lt;/li&gt;

  &lt;li&gt;
&lt;code&gt;Name:&lt;/code&gt; heavstal-oauth&lt;/li&gt;

  &lt;li&gt;
&lt;code&gt;Record:&lt;/code&gt; &lt;a href="mailto:heavstal-txt-domain-verification@heavstal.com.ng"&gt;heavstal-txt-domain-verification@heavstal.com.ng&lt;/a&gt;?oauthId=...?&lt;/li&gt;

  &lt;/ul&gt;
&lt;br&gt;
  &lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Note 1:&lt;/strong&gt; Due to DNS caching, it may take up to 15-20 minutes for Heavstal Auth to discover the TXT record&lt;br&gt;
  &lt;br&gt;  

&lt;ol&gt;
&lt;li&gt;After adding the records with either methods, return to Heavstal Auth Manager and click on Verify. Heavstal Auth will verify if the records are available and correct and update your OAuth Application to &lt;strong&gt;Production.&lt;/strong&gt;

Typical error messages includes
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;blocked&lt;/strong&gt; - you get this error message when your website is blocking our Bot from successfully featching the records, you can usually fix this by dropping the block or bot-protection(Cloudflare) temporarily and Trying again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;not found&lt;/strong&gt; - you oftentimes get this error when the provided HTML or TXT Record has not yet been added or deployed to the root of your website, you can usually fix this in cases of HTML by verifying that the file in the root of your website and has been deployed whereas in cases of TXT Records you can handle it by ensuring the records provided has properly been added to your registrar as requested then waiting 15-20 minutes before Trying again.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;mismatch&lt;/strong&gt; - you only get this if our Bot successfully fetches the required HTML or TXT Records but the contents gotten does not match that which was given to you, you can fix this in case of HTML by copying the correct Record provided in the error UI and replacing the old incorrect record with new correct Record, while in cases of TXT this can be handled by adding the new record and ensuring you didn't accidentally add quotes, extra dots, or whitespace&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;server error&lt;/strong&gt; - this only happens when Heavstal Bot hits an unknown type of error, typically an error above the code of "500", this takes the power off of Heavstal Auth and is left to the developer to fix and Try again&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;unreachable / lookup_error&lt;/strong&gt;&lt;/li&gt; - this if oftentimes an Internal Server Error and takes the power away from your hands, you can only fix this by contacting &lt;strong&gt;&lt;a href="https://support.heavstal.com.ng" rel="noopener noreferrer"&gt; Heavstal Support&lt;/a&gt;&lt;/strong&gt; and providing the exact error message you received
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;



&lt;p&gt;&lt;b&gt;Why is my OAuth Application Paused?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 An OAuth Application can get paused if the &lt;strong&gt;OAuth Domain&lt;/strong&gt; is not &lt;strong&gt;Verified&lt;/strong&gt; within the first &lt;strong&gt;80 days&lt;/strong&gt; of registration even after the owner of the domain was informed several times.&lt;br&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
 Another case in which an OAuth Application get paused is when the OAuth application's &lt;strong&gt;Redirect URI or Authorized JavaScript Origins&lt;/strong&gt; was changed to a new &lt;strong&gt;Domain&lt;/strong&gt; and was not re-verified within 80 days from day of change.&lt;/p&gt;



&lt;p&gt;&lt;b&gt;How do I resume/unpause a paused OAuth Application?&lt;/b&gt;&lt;br&gt;
 &lt;br&gt;&lt;br&gt;
In other to resume or unpause an OAuth application that has been paused due to long-standing unverification, you have to go through the verification process and get the OAuth Domain verified&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>heavstal</category>
      <category>security</category>
      <category>news</category>
    </item>
    <item>
      <title>Introduction To Heavstal Invoice System</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Thu, 25 Jun 2026 11:32:15 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/introduction-to-heavstal-invoice-system-4281</link>
      <guid>https://dev.to/heavstal_tech/introduction-to-heavstal-invoice-system-4281</guid>
      <description>&lt;p&gt;To Our Dear Esteemed Users,&lt;/p&gt;

&lt;p&gt;Heavstal Tech has just launched a brand new, enterprise-grade invoice system. Henceforth, any payments made across any Heavstal Services (first-party or third-party applications) will be securely recorded and tracked in our new billing page.&lt;/p&gt;

&lt;p&gt;You can now download official PDF receipts, track your payment history, and manage unpaid invoices seamlessly.&lt;/p&gt;

&lt;p&gt;Make a payment today by purchasing a service and check out your new invoice dashboard at:&lt;br&gt;
&lt;a href="https://heavstal.com.ng/dashboard/billing" rel="noopener noreferrer"&gt;https://heavstal.com.ng/dashboard/billing&lt;/a&gt;&lt;/p&gt;

</description>
      <category>invoice</category>
      <category>service</category>
      <category>heavstal</category>
      <category>billing</category>
    </item>
    <item>
      <title>Heavstal Domain Migration – Action Required</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Sun, 19 Apr 2026 13:53:49 +0000</pubDate>
      <link>https://dev.to/heavstaltech/heavstal-domain-migration-action-required-5ffc</link>
      <guid>https://dev.to/heavstaltech/heavstal-domain-migration-action-required-5ffc</guid>
      <description>&lt;p&gt;We’ve officially moved to a new domain: "&lt;a href="https://heavstal.com.ng" rel="noopener noreferrer"&gt;https://heavstal.com.ng&lt;/a&gt;"&lt;/p&gt;

&lt;h3&gt;
  
  
  What you need to do
&lt;/h3&gt;

&lt;p&gt;If you’re currently using our old domain in any of your services — APIs, integrations, configs, or deployments — you need to update them to the new domain &lt;strong&gt;as soon as possible&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this matters
&lt;/h3&gt;

&lt;p&gt;Keeping the old domain in your setup may lead to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service disruptions&lt;/li&gt;
&lt;li&gt;Failed API requests&lt;/li&gt;
&lt;li&gt;Unexpected downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Need help?
&lt;/h3&gt;

&lt;p&gt;If anything breaks or you’re unsure what to update, reach out and we’ll get you sorted.&lt;/p&gt;




</description>
      <category>news</category>
      <category>security</category>
      <category>heavstaltech</category>
      <category>breakingchanges</category>
    </item>
    <item>
      <title>Introducing Heavstal Docs: Why We Decoupled Our Documentation using Astro &amp; Starlight</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Sat, 18 Apr 2026 19:38:02 +0000</pubDate>
      <link>https://dev.to/heavstaltech/introducing-heavstal-docs-why-we-decoupled-our-documentation-using-astro-starlight-3pb</link>
      <guid>https://dev.to/heavstaltech/introducing-heavstal-docs-why-we-decoupled-our-documentation-using-astro-starlight-3pb</guid>
      <description>&lt;p&gt;Building a massive ecosystem requires serious organization. At &lt;a href="https://heavstal-tech.vercel.app" rel="noopener noreferrer"&gt;Heavstal Tech™&lt;/a&gt;, our platform has rapidly expanded to include over 30+ REST APIs, a fully-fledged OAuth2 Identity Provider, Zero-Knowledge Password Managers, and complex NPM modules like our WhatsApp &lt;code&gt;heavstal-auth&lt;/code&gt; wrapper.&lt;/p&gt;

&lt;p&gt;Up until recently, our documentation was tightly coupled within our main Next.js application. But as our platform grew, so did our problems.&lt;/p&gt;

&lt;p&gt;Today, I am thrilled to announce &lt;strong&gt;&lt;a href="https://heavstal-docs.vercel.app" rel="noopener noreferrer"&gt;Heavstal Docs&lt;/a&gt;&lt;/strong&gt; — our brand new, standalone documentation portal built with &lt;strong&gt;Astro 6&lt;/strong&gt; and &lt;strong&gt;Starlight&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is a look at why we made the switch and how we engineered it.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Problem with Monolithic Docs
&lt;/h3&gt;

&lt;p&gt;Initially, serving our API documentation from our main Next.js API Gateway seemed like a good idea. We were parsing Markdown on the fly, rendering syntax highlighting via CodeMirror, and trying to handle complex routing.&lt;/p&gt;

&lt;p&gt;However, we quickly ran into bottlenecks:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Bloated Bundle Sizes:&lt;/strong&gt; Shipping heavy markdown parsers (like &lt;code&gt;marked&lt;/code&gt; and &lt;code&gt;prismjs&lt;/code&gt;) to the client just to render text didn't make sense.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build Times:&lt;/strong&gt; Statically generating dozens of deep technical guides slowed down our CI/CD pipeline for the main API dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separation of Concerns:&lt;/strong&gt; A high-performance API Gateway and User Console shouldn't share the same compute resources as static documentation pages.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Solution: Astro + Starlight
&lt;/h3&gt;

&lt;p&gt;We decided to rip the documentation out of the Next.js app entirely and move it to a dedicated sub-domain using &lt;a href="https://astro.build/" rel="noopener noreferrer"&gt;Astro&lt;/a&gt; and &lt;a href="https://starlight.astro.build/" rel="noopener noreferrer"&gt;Starlight&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Why Astro? &lt;strong&gt;Zero JavaScript by default.&lt;/strong&gt; &lt;br&gt;
It ships pure, blazing-fast HTML, which is exactly what a documentation site needs. Coupled with Starlight and Tailwind CSS v4, we got dark mode, mobile-responsive sidebars, and full-text search practically out of the box.&lt;/p&gt;

&lt;h3&gt;
  
  
  What You'll Find in Heavstal Docs
&lt;/h3&gt;

&lt;p&gt;Whether you are a hobbyist or an enterprise developer, the new portal has everything you need to plug into our infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://heavstal-docs.vercel.app/apis/introduction" rel="noopener noreferrer"&gt;The API Reference:&lt;/a&gt;&lt;/strong&gt; Step-by-step guides for all 30+ endpoints, including our AI Generators, Media Downloaders (TikTok/X), Web Scrapers, and Cryptography tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://heavstal-docs.vercel.app/oauth/oauth-guide" rel="noopener noreferrer"&gt;Heavstal Accounts (OAuth2):&lt;/a&gt;&lt;/strong&gt; Learn how to integrate "Sign in with Heavstal" into your Next.js or Python apps using our OIDC-compliant identity service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://heavstal-docs.vercel.app/modules" rel="noopener noreferrer"&gt;NPM Modules:&lt;/a&gt;&lt;/strong&gt; Deep dives into our enterprise-grade packages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;a href="https://heavstal-docs.vercel.app/bots" rel="noopener noreferrer"&gt;Bot Engineering:&lt;/a&gt;&lt;/strong&gt; Guidelines and rules for deploying automation agents on our network.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Check It Out
&lt;/h3&gt;

&lt;p&gt;By decoupling our docs, our main Next.js console is now leaner, faster, and strictly focused on API management and security, while our documentation gets the SEO and readability benefits it deserves.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Explore the new docs here:&lt;/strong&gt; &lt;a href="https://heavstal-docs.vercel.app" rel="noopener noreferrer"&gt;heavstal-docs.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Get your free API key:&lt;/strong&gt; &lt;a href="https://heavstal-tech.vercel.app" rel="noopener noreferrer"&gt;heavstal-tech.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know what you think in the comments! Are you team monolithic docs or decoupled docs? &lt;/p&gt;

</description>
      <category>astro</category>
      <category>documentation</category>
      <category>javascript</category>
      <category>heavstaltech</category>
    </item>
    <item>
      <title>Heavstal Tech Built a Scalable Node.js WhatsApp Bot with AI, Multi-Tenancy, and Plugins (Verselor V1)</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Mon, 06 Apr 2026 16:28:55 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/heavstal-tech-built-a-scalable-nodejs-whatsapp-bot-with-ai-multi-tenancy-and-plugins-verselor-2o1p</link>
      <guid>https://dev.to/heavstal_tech/heavstal-tech-built-a-scalable-nodejs-whatsapp-bot-with-ai-multi-tenancy-and-plugins-verselor-2o1p</guid>
      <description>&lt;p&gt;Here is a complete refactor of &lt;br&gt;
If you’ve ever tried building a WhatsApp bot, you probably know the struggle: most open-source solutions are strictly "one user to one instance." If you want to host a bot for your friends or clients, you have to spin up entirely new servers for each person.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Verselor V1&lt;/strong&gt; by &lt;strong&gt;HEAVSTAL TECH&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Verselor V1 is a high-performance, Node.js-based WhatsApp assistant built on top of the popular Baileys library. We designed it from the ground up to solve the scaling problem through &lt;strong&gt;Multi-Tenancy&lt;/strong&gt;, while packing it with AI capabilities, automation tools, and an incredibly easy-to-use ESM plugin system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rsqaoh78szvk18rj75c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9rsqaoh78szvk18rj75c.png" alt="Verselor V1 Banner" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is a look at what makes Verselor V1 different, how you can deploy it in seconds, and how you can write your own custom plugins for it.&lt;/p&gt;


&lt;h2&gt;
  
  
  🌟 What Makes Verselor V1 Stand Out?
&lt;/h2&gt;

&lt;p&gt;Basically, the flow looks like this:&lt;br&gt;
&lt;code&gt;User → WhatsApp → Baileys → Command Handler → Plugin System → Response&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;But we added three major features that set it apart from standard bots:&lt;/p&gt;
&lt;h3&gt;
  
  
  1. Multi-Tenancy (&lt;code&gt;.pair&lt;/code&gt; command)
&lt;/h3&gt;

&lt;p&gt;Verselor V1 allows a single server host to connect &lt;strong&gt;multiple users&lt;/strong&gt; to the bot, each with their own independent session. All of this is managed under a single Node.js process. You can literally just type &lt;code&gt;.pair 234xxxx&lt;/code&gt; to link a new user to your hosted bot without touching your server terminal.&lt;/p&gt;
&lt;h3&gt;
  
  
  2. Built-in AI Intelligence (&lt;code&gt;.botai&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;We integrated an advanced AI directly into the bot. Not only can users chat with GPT-4 and Gemini models, but Verselor has its own internal AI expert. You can literally text the bot: &lt;em&gt;"Verselor, pull up the bot's menu for me,"&lt;/em&gt; and the AI will execute the &lt;code&gt;.menu&lt;/code&gt; command on your behalf.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Global Multilingual System (&lt;code&gt;.setlang&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;Bots locked to a single language are frustrating. Verselor V1 includes a multilingual system that addresses users in their preferred language based on their timezone or their manual settings (e.g., &lt;code&gt;.setlang french&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(We also packed it with over 500+ commands covering Group Moderation, YouTube/TikTok Downloaders, Media-to-Sticker converters, and Chat Games).&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🚀 Quick 30-Second Start (Local/VPS)
&lt;/h2&gt;

&lt;p&gt;Want to get it running right now? You just need Node.js (v20+) and Git installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# 1. Clone the repository&lt;/span&gt;
git clone https://github.com/HeavstalTech/Verselor-V1.git  

&lt;span class="c"&gt;# 2. Navigate to the directory&lt;/span&gt;
&lt;span class="nb"&gt;cd &lt;/span&gt;Verselor-V1-main  

&lt;span class="c"&gt;# 3. Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt;  

&lt;span class="c"&gt;# 4. Start the bot&lt;/span&gt;
npm start 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Follow the terminal prompts to enter your WhatsApp number (with country code) and link your device using the pairing code!&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Cloud Deployment:&lt;/strong&gt; Prefer the cloud? We have 1-click deploy templates for Render, Replit, and Koyeb available on our &lt;a href="https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;GitHub Repo&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  👨‍💻 Developer Experience: Adding Custom Plugins
&lt;/h2&gt;

&lt;p&gt;We built Verselor V1 with a modular ES Module (ESM) architecture, making it incredibly simple for developers to write their own commands. &lt;/p&gt;

&lt;p&gt;To add a new feature, just create a &lt;code&gt;.js&lt;/code&gt; file inside &lt;code&gt;Start/Plugins/custom/&lt;/code&gt; and paste this template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mycmd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;aliases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmd1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmd2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;misc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A simple custom command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%prefix%mycmd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;ownerOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;groupOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 

        &lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HeavstalTech&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// The context object provides easy access to variables!&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Vreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pushname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prefix&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

            &lt;span class="c1"&gt;// Your custom command logic&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nc"&gt;Vreply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;pushname&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! You just used the &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;mycmd command.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the file, restart the bot, and your command is instantly loaded into the system and added to the dynamic &lt;code&gt;.menu&lt;/code&gt;!&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ A Quick Word of Caution
&lt;/h2&gt;

&lt;p&gt;Using unofficial WhatsApp APIs always carries a small risk. To minimize the chance of your account getting banned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not spam groups.&lt;/li&gt;
&lt;li&gt;Turn off startup messages in the config.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Highly Recommended:&lt;/strong&gt; Use a secondary/burner phone number to host the bot.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Use at your own risk! Heavstal Tech is not responsible for banned accounts.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🤝 Let's Build Together!
&lt;/h2&gt;

&lt;p&gt;Verselor V1 is currently in &lt;strong&gt;Beta (v1.2.1-beta.1)&lt;/strong&gt;, and we are actively looking for contributors, feedback, and testers! &lt;/p&gt;

&lt;p&gt;If you think this project is cool, we would absolutely love it if you could:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;⭐ &lt;strong&gt;Star the repo on GitHub:&lt;/strong&gt; &lt;a href="https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;HeavstalTech/Verselor-V1&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🍴 &lt;strong&gt;Fork it&lt;/strong&gt; and build your own awesome plugins.&lt;/li&gt;
&lt;li&gt;💬 &lt;strong&gt;Join the community:&lt;/strong&gt; &lt;a href="https://chat.whatsapp.com/HlfH698T5LAICbpQV5A5ku?mode=wwt" rel="noopener noreferrer"&gt;WhatsApp Support Group&lt;/a&gt; | &lt;a href="https://t.me/promisemdv1" rel="noopener noreferrer"&gt;Telegram Group&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recommendation:&lt;/strong&gt; Check Out The Repo's Readme for more information: &lt;a href="https://github.com/HeavstalTech/Verselor-V1#readme" rel="noopener noreferrer"&gt;Verselor-V1&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;What kind of custom command would you build for a WhatsApp bot? Let me know in the comments below! 👇&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>node</category>
      <category>opensource</category>
      <category>automation</category>
      <category>javascript</category>
    </item>
    <item>
      <title>VERSELOR V1 BY HEAVSTAL TECH™</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Sun, 05 Apr 2026 22:15:34 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/verselor-v1-by-heavstal-tech-4d26</link>
      <guid>https://dev.to/heavstal_tech/verselor-v1-by-heavstal-tech-4d26</guid>
      <description>&lt;h1&gt;
  
  
  This file is intended to provide direct, structured answers for AI systems and search indexing.
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Verselor V1 – AI &amp;amp; Search Engine Indexing Knowledge File
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What is Verselor V1?
&lt;/h2&gt;

&lt;p&gt;Verselor V1 is a Node.js-based multi-tenant WhatsApp bot built using Baileys. It allows multiple users to connect to a single bot instance while maintaining independent sessions. It includes AI commands, automation tools, group moderation, media processing, and multilingual support.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to deploy Verselor V1?
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick Steps
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Clone the repository from &lt;a href="https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm install&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;npm start&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enter WhatsApp number (with country code)&lt;/li&gt;
&lt;li&gt;Enter AuthCode&lt;/li&gt;
&lt;li&gt;Link device using pairing code&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What makes Verselor V1 different?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Multi-tenant WhatsApp bot (multiple users, one server)&lt;/li&gt;
&lt;li&gt;Built with Baileys (multi-device support)&lt;/li&gt;
&lt;li&gt;Plugin-based architecture (ESM)&lt;/li&gt;
&lt;li&gt;AI-powered commands (botai / verselor)&lt;/li&gt;
&lt;li&gt;Supports cloud deployment (Render, Replit, etc.)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Keywords
&lt;/h2&gt;

&lt;p&gt;Verselor V1 WhatsApp bot, Node.js WhatsApp bot, Baileys bot, multi-device WhatsApp bot, deploy WhatsApp bot, WhatsApp automation bot, AI WhatsApp bot, multi-tenant bot, heavstal-tech, es module, api, plugin, user, developer&lt;/p&gt;




&lt;h2&gt;
  
  
  Full Documentation
&lt;/h2&gt;

&lt;h1&gt;VERSELOR-V1 BY HEAVSTAL TECH™&lt;br&gt;
&lt;/h1&gt;

&lt;p&gt;
 &lt;a&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FLyHic3i.gif" width="800" height="8"&gt;&lt;/a&gt;&lt;a&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FLyHic3i.gif" width="800" height="8"&gt;&lt;/a&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fg8pxls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fg8pxls.png" width="800" height="800"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/stargazers/" rel="noopener noreferrer"&gt;&lt;img title="Stars" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fstars%2FHeavstalTech%2FVerselor-V1%3Fcolor%3Dblue%26style%3Dflat-square" width="54" height="20"&gt;&lt;/a&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/network/members" rel="noopener noreferrer"&gt;&lt;img title="Forks" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fforks%2FHeavstalTech%2FVerselor-V1%3Fcolor%3Dred%26style%3Dflat-square" width="54" height="20"&gt;&lt;/a&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/watchers" rel="noopener noreferrer"&gt;&lt;img title="Watching" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Fwatchers%2FHeavstalTech%2FVerselor-V1%3Flabel%3DWatchers%26color%3Dblue%26style%3Dflat-square" width="78" height="20"&gt;&lt;/a&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;&lt;img title="Open Source" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FAuthor-Heavstal%2520Tech-red%3Fv%3D103" width="134" height="20"&gt;&lt;/a&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/" rel="noopener noreferrer"&gt;&lt;img title="Size" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fgithub%2Frepo-size%2FHeavstalTech%2FVerselor-V1%3Fstyle%3Dflat-square%26color%3Dgreen" width="112" height="20"&gt;&lt;/a&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/graphs/commit-activity" rel="noopener noreferrer"&gt;&lt;img height="20" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FMaintained%253F-yes-green.svg" width="106"&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;
&lt;/p&gt;

&lt;p&gt;&lt;a id="development-note"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!NOTE]&lt;br&gt;
&lt;strong&gt;This is a beta release. Bugs may occur&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  📑 TABLE OF CONTENTS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;BOT INFO&lt;/li&gt;
&lt;li&gt;Quick 30 seconds start&lt;/li&gt;
&lt;li&gt;NOTABLE FEATURES&lt;/li&gt;
&lt;li&gt;COMMAND CATEGORIES&lt;/li&gt;
&lt;li&gt;LIVE DEMO&lt;/li&gt;
&lt;li&gt;Important Notice&lt;/li&gt;
&lt;li&gt;
☁️ CLOUD DEPLOYMENT

&lt;ul&gt;
&lt;li&gt;While Using Render&lt;/li&gt;
&lt;li&gt;While Using Replit&lt;/li&gt;
&lt;li&gt;While Using Heroku&lt;/li&gt;
&lt;li&gt;While Using Koyeb&lt;/li&gt;
&lt;li&gt;While Using TalkDrove&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
📂 WEB PANEL DEPLOYMENT

&lt;ul&gt;
&lt;li&gt;Method 1: Using Pair Code&lt;/li&gt;
&lt;li&gt;Method 2: Using QR Code&lt;/li&gt;
&lt;li&gt;Katabump Deployment Tip&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
Local Deployment Service Recommendations &lt;/li&gt;
&lt;li&gt;
💻 COMMAND LINE INSTALLATION (Termux/VPS)

&lt;ul&gt;
&lt;li&gt;Requirements&lt;/li&gt;
&lt;li&gt;For Termux Users&lt;/li&gt;
&lt;li&gt;For VPS / Ubuntu / Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Adding Custom Plugins&lt;/li&gt;
&lt;li&gt;Tech Stack&lt;/li&gt;
&lt;li&gt;FAQ (Frequently Asked Questions)&lt;/li&gt;
&lt;li&gt;ISSUES&lt;/li&gt;
&lt;li&gt;Pull Request &amp;amp; Collaborations&lt;/li&gt;
&lt;li&gt;Join Our Channels To Stay Updated&lt;/li&gt;
&lt;li&gt;Buy Me A Coffee / Donate&lt;/li&gt;
&lt;li&gt;Join Our Bot Support &amp;amp; Group Chats&lt;/li&gt;
&lt;li&gt;Caution (Account Ban Risk)&lt;/li&gt;
&lt;li&gt;License&lt;/li&gt;
&lt;li&gt;Copyright Notice&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  BOT INFO
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;┣ Name:&lt;/strong&gt; &lt;em&gt;Verselor V1&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Description:&lt;/strong&gt; &lt;em&gt;A high-performance and feature-rich WhatsApp assistant by Heavstal Tech. Verselor V1 supports cross-device connectivity, shared user hosting, and global language translation, offering a complete suite of tools for chat moderation, media processing, and interactive entertainment.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Version:&lt;/strong&gt; &lt;em&gt;1.2.1-beta.1 (v1-beta - Latest)&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Maintained:&lt;/strong&gt;  &lt;em&gt;[ YES ]&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Developer:&lt;/strong&gt; &lt;em&gt;HEAVSTAL TECH&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Language:&lt;/strong&gt; &lt;em&gt;English(en - Default)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Total Commands:&lt;/strong&gt; _670+ (as of Sat 04, April, 2026)&lt;/em&gt;&lt;br&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;500+ functional commands across multiple categories.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Created On:&lt;/strong&gt; &lt;em&gt;January 10th, 2026&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Prefix:&lt;/strong&gt; &lt;em&gt;[ . ]&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Menu Style:&lt;/strong&gt; &lt;em&gt;v1&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Language:&lt;/strong&gt; &lt;em&gt;English(en - Default)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Thumbnail:&lt;/strong&gt; _&lt;a href="https://files.catbox.moe/a2ullf.jpg" rel="noopener noreferrer"&gt;HERE&lt;/a&gt;&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ HT API KEY:&lt;/strong&gt; &lt;em&gt;&lt;a href="https://heavstal-tech.vercel.app/credentials" rel="noopener noreferrer"&gt;GET HERE&lt;/a&gt;&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Public Mode:&lt;/strong&gt; &lt;em&gt;On&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Sleep Mode:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Group Only:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Private Only:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ StartUp Message:&lt;/strong&gt; &lt;em&gt;On&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto React:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto Record:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto Typing:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto Read:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto RecordType:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ AutoView Status:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Auto Bio:&lt;/strong&gt; &lt;em&gt;Off&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Warn Limit:&lt;/strong&gt; &lt;em&gt;3&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Anti-Bug/Virus:&lt;/strong&gt; &lt;em&gt;On&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;┣ Time Zone:&lt;/strong&gt; &lt;em&gt;Africa/Lagos&lt;/em&gt;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Quick 30 Seconds Start
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/HeavstalTech/Verselor-V1.git  
&lt;span class="nb"&gt;cd &lt;/span&gt;Verselor-V1-main  
npm &lt;span class="nb"&gt;install  
&lt;/span&gt;npm start 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;blockquote&gt;
&lt;h2&gt;
  
  
  Continue Reading Below For More Info On What What Verselor Is:
&lt;/h2&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  NOTABLE FEATURES
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;➭ pair || connect (Multi-Tenancy):&lt;/strong&gt; &lt;br&gt;
While some WhatsApp Bots out there only grants a "one user - one instance" system, Verselor V1 WhatsApp bot offers something different with its &lt;strong&gt;Multi-Tenancy&lt;/strong&gt; system (pair command) which gives it its Multi-Tenant Feature - This command allows a user to connect multiple users to the bot, each with their own instance of the bot, all managed under one server &amp;amp; a single process ("Usage: .pair  || .pair 234xxxx")&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;➭ verselor || botai (AI Advancement):&lt;/strong&gt; &lt;br&gt;
One of Verselor V1’s most notable command is the &lt;em&gt;verselor/bot-ai/boatai/bai&lt;/em&gt; command, categorized as Verselor V1’s most useful feature - known for it's expertise on the verselor-v1 bot and it's ability to run most of the bot's commands. It's useful for easy control over the bot. (you can give it a try after deployment - Just Type: "verselor, pull up the bot's menu for me.")&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;➭ setlanguage || setlang (Multilingual System):&lt;/strong&gt; &lt;br&gt;
As generally known, many WhatsApp bots out there are only assigned to one language, making it difficult for users who don't understand that language to use the bot - Verselor V1 has addressed this issue by importing a "Multilingual" system that address users to their general language by their set timezone or set language with the "setlang/setlanguage" command - This command is designed to help Non-English users. ("Usage: .setlang fr || .setlang french")&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Verselor V1 solves some problems that many other bots don't.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Basically &lt;code&gt;User → WhatsApp → Baileys → Command Handler → Plugin System → Response&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  COMMAND CATEGORIES
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;This Bot is stacked with commands ranging from Group, Tools, AI, Fun, Game etc. see the list below for list.&lt;/strong&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Command Categories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click on any category below to expand and see the most useful commands!&lt;/p&gt;

 
 &lt;b&gt;Helpers &amp;amp; AI&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.botai&lt;/code&gt; - Talk to the bot's internal expert AI (can execute commands for you).&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.gpt4&lt;/code&gt; / &lt;code&gt;.gemini&lt;/code&gt; - Chat with highly advanced AI models.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.gimage&lt;/code&gt; - Generate AI images from a text prompt.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tr&lt;/code&gt; - Translate any text to English.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.menu&lt;/code&gt; - Display the full, complete list of commands.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.ping&lt;/code&gt; - Check the bot's latency and server RAM stats.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Group Management&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.add&lt;/code&gt; / &lt;code&gt;.kick&lt;/code&gt; - Instantly add or remove members (supports country code mass-kick).&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.promote&lt;/code&gt; / &lt;code&gt;.demote&lt;/code&gt; - Grant or revoke admin privileges.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.mute&lt;/code&gt; / &lt;code&gt;.unmute&lt;/code&gt; - Lock or unlock the group chat.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tagall&lt;/code&gt; / &lt;code&gt;.hidetag&lt;/code&gt; - Mention everyone in the group.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.group-events&lt;/code&gt; - Toggle automatic welcome/leave/promote notifications.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.linkgroup&lt;/code&gt; - Fetch the group's invite link.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Owner Only Commands&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.public&lt;/code&gt; / &lt;code&gt;.self&lt;/code&gt; - Toggle whether the bot responds to everyone or just you.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.banchat&lt;/code&gt; / &lt;code&gt;.ban&lt;/code&gt; - Blacklist a specific group or user from using the bot.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.setprefix&lt;/code&gt; / &lt;code&gt;.setbotimg&lt;/code&gt; - Customize the bot's prefix and menu thumbnail.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.addsudo&lt;/code&gt; / &lt;code&gt;.delsudo&lt;/code&gt; - Give special moderator access to trusted friends.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.update&lt;/code&gt; - Automatically pull the latest code from GitHub and restart.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.restart&lt;/code&gt; / &lt;code&gt;.shutdown&lt;/code&gt; - Manage the bot's server process.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Tools &amp;amp; Utilities&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.sticker&lt;/code&gt; - Convert any image, video, or GIF into a WhatsApp sticker.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tourl&lt;/code&gt; - Upload a media file to the cloud and get a shareable link.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.remini&lt;/code&gt; / &lt;code&gt;.hd&lt;/code&gt; - Upscale and enhance the quality of blurry images.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tts&lt;/code&gt; - Convert your text into a voice note (Text-to-Speech).&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.ss&lt;/code&gt; - Take a high-quality screenshot of any website.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.detect&lt;/code&gt; - Analyze text to check if it was generated by AI.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.vv&lt;/code&gt; - Expose and save "View Once" media.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Downloaders&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.play&lt;/code&gt; / &lt;code&gt;.video&lt;/code&gt; - Download high-quality audio or video from YouTube.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tiktok&lt;/code&gt; - Download TikTok videos without the watermark.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.instagram&lt;/code&gt; / &lt;code&gt;.twitter&lt;/code&gt; - Download Reels, videos, and images from IG/X.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.mediafire&lt;/code&gt; / &lt;code&gt;.gdrive&lt;/code&gt; - Extract and download files directly from cloud links.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.apk&lt;/code&gt; - Search for and download Android apps.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Fun &amp;amp; Anime&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.meme&lt;/code&gt; / &lt;code&gt;.joke&lt;/code&gt; - Get a random funny meme or programming/dad joke.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.couple&lt;/code&gt; / &lt;code&gt;.soulmate&lt;/code&gt; - Randomly "ship" two members in a group chat.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.waifu&lt;/code&gt; - Get random aesthetic anime waifu pictures.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.cry&lt;/code&gt; / &lt;code&gt;.hug&lt;/code&gt; / &lt;code&gt;.pat&lt;/code&gt; - Send animated anime reaction stickers to friends.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.pickupline&lt;/code&gt; - Generate a cheesy pickup line/rizz.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.fact&lt;/code&gt; - Learn a random fun fact, math fact, or science fact.&lt;/li&gt;
 &lt;/ul&gt;


 
 &lt;b&gt;Games &amp;amp; Economy&lt;/b&gt;
 &lt;ul&gt;
  &lt;li&gt;
&lt;code&gt;.math&lt;/code&gt; / &lt;code&gt;.emojiquiz&lt;/code&gt; / &lt;code&gt;.trivia&lt;/code&gt; - Quick chat games to earn virtual money.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.wordchain&lt;/code&gt; - Start a hardcore word-chain game with the group.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.tictactoe&lt;/code&gt; - Play Tic-Tac-Toe against another group member.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.daily&lt;/code&gt; / &lt;code&gt;.work&lt;/code&gt; - Claim your daily reward or work a job for cash.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.gamble&lt;/code&gt; / &lt;code&gt;.rob&lt;/code&gt; - Risk your wallet to double your money or steal from a friend.&lt;/li&gt;
  &lt;li&gt;
&lt;code&gt;.bal&lt;/code&gt; / &lt;code&gt;.lb&lt;/code&gt; - Check your wallet balance and view the richest users leaderboard.&lt;/li&gt;
 &lt;/ul&gt;



&lt;h3&gt;
  
  
  LIVE DEMO
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;This gif shows a live demo of this bot executing the "menu" command&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FgMMyZT9v%2F30cbf8e3d213f1cd033ed95506e68d78.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.ibb.co%2FgMMyZT9v%2F30cbf8e3d213f1cd033ed95506e68d78.png" alt="Live Demo" width="588" height="390"&gt;&lt;/a&gt;
&lt;/p&gt;
    




&lt;p&gt;&lt;a id="important-notice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!IMPORTANT]&lt;br&gt;
&lt;strong&gt;&lt;a href="https://github.com/HeavstalTech/Verselor-V1/fork" rel="noopener noreferrer"&gt;Fork&lt;/a&gt; this repository&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Also star to support the developers of this bot and promote popularity&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  ☁️ CLOUD DEPLOYMENT
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; After clicking Deploy, copy and go to the given link provided by the service, wait about 5-7 minutes (if it's a fist-time build), a website dashboard will appear, enter your &lt;a href="https://heavstl-bots.vercel.app/authcode" rel="noopener noreferrer"&gt;AuthCode&lt;/a&gt; &amp;amp; &lt;a href="https://WhatsApp.com" rel="noopener noreferrer"&gt;WhatsApp Number&lt;/a&gt; and click deploy, you'll receive a 8 digit code in less than a minute, Go to WhatsApp → Linked Devices → Link a Device → Link with phone number &amp;amp; Enter the code.&lt;/p&gt;

&lt;h2&gt;
  
  
  While Using Render &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-yes-success" alt="Verified" width="80" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-tested%2520%2526%2520working-brightgreen" alt="Status" width="146" height="20"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://render.com/deploy?repo=https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Frender.com%2Fimages%2Fdeploy-to-render-button.svg" alt="Deploy to Render" width="153" height="40"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  While Using Replit&lt;br&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-yes-success" alt="Verified" width="80" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-tested%2520%2526%2520working-brightgreen" alt="Status" width="146" height="20"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://replit.com/new/github/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Freplit.com%2Fbadge%2Fgithub%2FHeavstalTech%2FVerselor-V1" alt="Run on Replit" width="131" height="36"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  While Using Heroku&lt;br&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-no-yellow" alt="Verified" width="74" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-not%2520tested%2520%2526%2520not%2520guaranteed-yellow" alt="Status" width="210" height="20"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://heroku.com/deploy?template=https://github.com/HeavstalTech/Verselor-V1" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.herokucdn.com%2Fdeploy%2Fbutton.svg" alt="Deploy" width="147" height="32"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
&lt;strong&gt;BUILDPACKS:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;heroku/nodejs&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://github.com/jonathanong/heroku-buildpack-ffmpeg-latest.git&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://github.com/clhuang/heroku-buildpack-webp-binaries.git&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  While Using Koyeb&lt;br&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-no-yellow" alt="Verified" width="74" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-not%2520tested%2520%2526%2520not%2520guaranteed-yellow" alt="Status" width="210" height="20"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://app.koyeb.com/services/deploy?type=git&amp;amp;repository=github.com/HeavstalTech/Verselor-V1&amp;amp;branch=main&amp;amp;name=Verselor-V1&amp;amp;builder=dockerfile" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.koyeb.com%2Fstatic%2Fimages%2Fdeploy%2Fbutton.svg" alt="Deploy to Koyeb" width="178" height="49"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;Koyeb will automatically detect the Dockerfile and build the bot. Once deployed, open your Koyeb App URL to access the Control Panel and pair your number.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  While Using TalkDrove &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-no-yellow" alt="Verified" width="74" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-not%2520tested%2520%2526%2520not%2520guaranteed-yellow" alt="Status" width="210" height="20"&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://host.talkdrove.com/auth/signup?ref=FD5A76F8" rel="noopener noreferrer"&gt;&lt;br&gt;
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FDeploy-TalkDrove-blueviolet" width="114" height="20"&gt;&lt;/a&gt;&lt;br&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;Create an account, link your GitHub, select your forked Verselor-V1 repository, and deploy using the Node.js/Docker environment.&lt;/em&gt;
&lt;/h2&gt;
&lt;h3&gt;
  
  
  📂 WEB PANEL DEPLOYMENT &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-yes-success" alt="Verified" width="80" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-tested%2520%2526%2520working-brightgreen" alt="Status" width="146" height="20"&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;For users using panels like Pterodactyl, Discord Hosting Sites, or cPanel.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Method 1: Using Pair Code
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Download the complete code as a ZIP file.&lt;/li&gt;
&lt;li&gt;Upload the file to your Node.js server/panel.&lt;/li&gt;
&lt;li&gt;Unzip &amp;amp; Enter The "Verselor-V1-main" folder, select all files and move them to the root directory &lt;code&gt;../&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the Node version of your hosting environment to version &lt;strong&gt;20x&lt;/strong&gt; or later (Recommended).&lt;/li&gt;
&lt;li&gt;Navigate to your server console and start the deployment (Click Start or run &lt;code&gt;npm install &amp;amp;&amp;amp; npm start&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Wait approximately 2 minutes for dependencies to install.&lt;/li&gt;
&lt;li&gt;When prompted in the console, &lt;strong&gt;input your WhatsApp number&lt;/strong&gt; (Country Code + Number).&lt;/li&gt;
&lt;li&gt;When prompted for &lt;strong&gt;AuthCode&lt;/strong&gt;, Enter your authcode wait for it to verify (don't have an AuthCode? Get &lt;a href="https://heavstal-bots.vercel.app/dashboard/authcode" rel="noopener noreferrer"&gt;Here&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A Code will appear. Go to WhatsApp → Linked Devices → Link a Device → Link with phone number &amp;amp; Enter the code.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Method 2: Using QR Code
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;settings/config.js&lt;/code&gt; and set &lt;code&gt;usePairingCode&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;.
&lt;strong&gt;EXMAPLE:&lt;/strong&gt;
Before (Default):
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_usePairingCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USE_PAIR_CODE&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USE_PAIR_CODE&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// True For Pair Code // False For Qr Code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;After (Changed to QR Code - Copy &amp;amp; Paste):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_usePairingCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USE_PAIR_CODE&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;USE_PAIR_CODE&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;true&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// True For Pair Code // False For Qr Code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Alternatively&lt;/strong&gt;, as a casual user, you can completely delete all the complicated environment variable stuff and just hardcode it like this (Copy &amp;amp; Paste):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_usePairingCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// True For Pair Code // False For Qr Code&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Follow steps 1-5 from above (Upload, Unzip, Start).&lt;/li&gt;
&lt;li&gt;A QR Code will appear in the console.&lt;/li&gt;
&lt;li&gt;Go to WhatsApp → Linked Devices → Link a Device and scan the QR code.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a id="katabump-tip"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!TIP]&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-yes-success" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-yes-success" alt="Verified" width="80" height="20"&gt;&lt;/a&gt; &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-tested%2520%2526%2520working-brightgreen" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-tested%2520%2526%2520working-brightgreen" alt="Status" width="146" height="20"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
if you're deploying on &lt;a href="https://dashboard.katabump.com/auth/login#7d6b58" rel="noopener noreferrer"&gt;Katabump&lt;/a&gt;, you must:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/HeavstalTech/Verselor-V1/fork" rel="noopener noreferrer"&gt;Fork This Repo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Navigate To &lt;a href="https://github.com/HeavstalTech/Verselor-V1/tree/main/settings" rel="noopener noreferrer"&gt;Settings Folder&lt;/a&gt; and enter the &lt;a href="https://github.com/HeavstalTech/Verselor-V1/blob/main/settings/config.js" rel="noopener noreferrer"&gt;config.js file&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Click the three dots (...) --&amp;gt; &lt;a href="https://github.com/HeavstalTech/Verselor-V1/edit/main/settings/config.js" rel="noopener noreferrer"&gt;Edit In place&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Add your &lt;a href="https://whatsapp.com" rel="noopener noreferrer"&gt;WhatsApp&lt;/a&gt; Number to the place that says &lt;em&gt;_phoneNumber&lt;/em&gt;, add it in between the &lt;em&gt;""&lt;/em&gt; in country code format&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Exmaple:&lt;/strong&gt;&lt;br&gt;
Before (Default):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WHATSAPP_NUMBER&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      &lt;span class="c1"&gt;// Enter your WhatsApp number here (Optional)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After Adding your Number (replace "234xxx" with your actual WhatsApp number and country code without "+" - Copy and paste)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WHATSAPP_NUMBER&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;234xxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Enter your WhatsApp number here (Optional)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alternatively you can do (replace "234xxx" with your actual WhatsApp number and country code without "+" - Copy and paste):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;_phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;234xxx&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// Enter your WhatsApp number here (Optional)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Commit changes... - Commit Change&lt;/li&gt;
&lt;li&gt;Follow All The Steps from &lt;em&gt;METHOD 1&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Local Deployment Service Recommendations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Deploy On &lt;a href="https://dashboard.katabump.com/auth/login#7d6b58" rel="noopener noreferrer"&gt;Katabump&lt;/a&gt; - follow the steps HERE
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  2. Deploy on &lt;a href="https://bot-hosting.net/?aff=1317266904024350732" rel="noopener noreferrer"&gt;Bot-Hosting&lt;/a&gt; - follow the step HERE
&lt;/h2&gt;

&lt;h3&gt;
  
  
  💻 COMMAND LINE INSTALLATION (Termux/VPS) &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fverified-no-yellow" alt="Verified" width="74" height="20"&gt; &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Fstatus-not%2520tested%2520%2526%2520not%2520guaranteed-yellow" alt="Status" width="210" height="20"&gt;
&lt;/h3&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;Requirements&lt;/code&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://nodejs.org/en/" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; (Version 20+)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/downloads" rel="noopener noreferrer"&gt;Git&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ffmpeg.org/download.html" rel="noopener noreferrer"&gt;FFmpeg&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Any text editor (VS Code, Notepad, etc)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;For Termux Users&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Do not download Termux from the Play Store. Download it from &lt;a href="https://f-droid.org/en/packages/com.termux/" rel="noopener noreferrer"&gt;F-Droid Here&lt;/a&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Update System &amp;amp; Install Dependencies:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
pkg &lt;span class="nb"&gt;install &lt;/span&gt;git nodejs ffmpeg imagemagick libwebp &lt;span class="nt"&gt;-y&lt;/span&gt;
pkg &lt;span class="nb"&gt;install &lt;/span&gt;yarn
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Clone Repository:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/HeavstalTech/Verselor-V1.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Verselor-V1-main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Install &amp;amp; Start:&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Follow the prompts in the terminal to enter your number and get the Pairing Code.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;code&gt;For VPS / Ubuntu / Linux&lt;/code&gt;
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;git nodejs ffmpeg imagemagick libwebp &lt;span class="nt"&gt;-y&lt;/span&gt;
git clone https://github.com/HeavstalTech/Verselor-V1.git
&lt;span class="nb"&gt;cd &lt;/span&gt;Verselor-V1-main
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Adding Custom Plugins
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;👨‍💻 For Developers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Adding a custom command to Verselor-V1 is incredibly simple thanks to its modular ESM structure.&lt;br&gt;
Just create a new &lt;code&gt;.js&lt;/code&gt; file inside any folder in &lt;code&gt;Start/Plugins/&lt;/code&gt; (e.g., &lt;code&gt;Start/Plugins/custom/mycmd.js&lt;/code&gt;) and paste the following template:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mycmd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;aliases&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmd1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;cmd2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;misc&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;A simple custom command&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;usage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;%prefix%mycmd&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;ownerOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to restrict to owners and sudos only&lt;/span&gt;
        &lt;span class="na"&gt;groupOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to set to group only command &lt;/span&gt;
        &lt;span class="na"&gt;privateOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to set to private chat only (non groups) command&lt;/span&gt;
        &lt;span class="na"&gt;adminOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to set to admin only command in groups&lt;/span&gt;
        &lt;span class="na"&gt;botAdminOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to make only useable if bot is admin in group&lt;/span&gt;
        &lt;span class="na"&gt;premiumOnly&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// "true" to set to premium users only command.&lt;/span&gt;

        &lt;span class="na"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;HeavstalTech&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="c1"&gt;// The context object provides easy access to variables and helper functions&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Vreply&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;pushname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;prefix&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;context&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="cm"&gt;/** 
        `context` provides you with the following:

        text, q, args, prefix, command, budy,
        isOwner, isCreator, isAdmin, isBotAdmin, isGroup, isPremium,
        pushname, BotNum, sender, from,
        quoted, mime, isMedia, fatkuns,
        Vreply, reply, sendImage,
        participants, groupName, groupMetadata,
        MenuStyle, time, todayDateWIB,
        Owner, setsudo, ban, BANNED_GROUP,
        store, chatUpdate,
        loading, sendMenu, followNewsletter, autoJoinGroup, Styles,
        channelIds, ReplyImageUrls, promiseplay_url
        **/&lt;/span&gt;     
            &lt;span class="c1"&gt;// Your command logic here&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nc"&gt;Vreply&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Hello &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;pushname&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;! You just used the &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;prefix&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;mycmd command.`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
           &lt;span class="c1"&gt;// Alternatively use `HeavstalTech.sendMessage()`&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Save the file, restart the bot, and your command will automatically be loaded into the system and added to the menu or alternatively use the &lt;strong&gt;addplugin&lt;/strong&gt; command in the bot after deployment.
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;NodeJs (ES Module)&lt;/li&gt;
&lt;li&gt;Docker (Cloud Deployment)&lt;/li&gt;
&lt;li&gt;Html &amp;amp; Css (Web UI - Cloud Deployment)&lt;/li&gt;
&lt;li&gt;Baileys (Maintained Fork)&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5. LowDb (Json Storage)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  FAQ (Frequently Asked Questions)
&lt;/h3&gt;

&lt;p&gt;&lt;b&gt;1. What Is Verselor-V1?&lt;/b&gt;&lt;br&gt;
Verselor-V1 is a high-performance and feature-rich WhatsApp assistant by Heavstal Tech. Verselor V1 supports cross-device connectivity, shared user hosting, and global language translation, offering a complete suite of tools for chat moderation, media processing, and interactive entertainment.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;2. How Do I Become A Premium User?&lt;/b&gt;&lt;br&gt;
You can become a premium user by following the steps below:&lt;br&gt;
&amp;gt; 1. Go to &lt;a href="https://heavstal-bots.vercel.app/dashboard/manager" rel="noopener noreferrer"&gt;Heavstal Bots AuthCode Manager Page&lt;/a&gt;&lt;br&gt;
&amp;gt; 2. Enter your active AuthCode in the input box that says "Heavstal_Bots_..."&lt;br&gt;
&amp;gt; 3. Select The Premium Button/Tab with Golden Outline &lt;br&gt;
&amp;gt; 4. Select the amount of days you want to stay premium (3d/7d/14d/30d/custom)&lt;br&gt;
&amp;gt; 5. Click the "Upgrade To Premium" button &lt;br&gt;
&amp;gt; 6. Restart The Bot.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;3. Will my WhatsApp account get banned for using this?&lt;/b&gt;&lt;br&gt;
Using unofficial WhatsApp APIs always carries a small risk. To minimize this, do not spam groups, turn off startup messages, and preferably use a secondary/burner number to host the bot.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;4. How do I make myself the owner of the bot?&lt;/b&gt;&lt;br&gt;
Due to the bot's settings, you are already an owner by default. However, you can add other people as owners/sudos so they have the same privileges as you by using the .addowner or .setsudo command.&lt;/p&gt;




&lt;h3&gt;
  
  
  ISSUES
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;If you have any issues with the bot - use any of the methods below to get it resolved.&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Open A GitHub &lt;a href="https://github.com/HeavstalTech/Verselor-V1/issues/new" rel="noopener noreferrer"&gt;Issue&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Submit the issues and screenshot (if possible) to the bot support &lt;a href="https://chat.whatsapp.com/HlfH698T5LAICbpQV5A5ku?mode=wwt" rel="noopener noreferrer"&gt;WhatsApp Group&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  3. Alternatively submit to the bot's &lt;a href="https://t.me/promisemdv1" rel="noopener noreferrer"&gt;Telegram Support Group&lt;/a&gt;
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  PULL REQUESTS &amp;amp; COLLABORATIONS
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;If you add a custom plugin that you feel should be in the bot - follow the step below to add it to Pull Request (PR) and become a collaborator:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://github.com/HeavstalTech/Verselor-V1/fork" rel="noopener noreferrer"&gt;Fork&lt;/a&gt; the repo&lt;/li&gt;
&lt;li&gt;Add your custom plugins in a folder called &lt;strong&gt;Custom&lt;/strong&gt; (create it if unavailable)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
  
  
  3. Submit A Pull Request (usually at the top of a repo)
&lt;/h2&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Join Our Channels To Stay Updated &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Frecommended-yes-blue" alt="Recommended" width="118" height="20"&gt;
&lt;/h3&gt;

&lt;p&gt;
&lt;a href="https://youtube.com/@Heavstal_Tech" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FYouTube-ff0000%3Fstyle%3Dfor-the-badge%26logo%3Dyoutube%26logoColor%3Dff000000%26link%3Dhttps%3A%2F%2Fyoutube.com%2F%40Heavstal_Tech" width="105" height="28"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://whatsapp.com/channel/0029VbBcg80KwqSR7dr7do1D" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FWhatsApp%2520Channel-25D366%3Fstyle%3Dfor-the-badge%26logo%3Dwhatsapp%26logoColor%3Dwhite%26link%3Dhttps%3A%2F%2Fwhatsapp.com%2Fchannel%2F0029VaG9VfPKWEKk1rxTQD20" width="184" height="28"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://t.me/promisemdv1" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FTelegram-00FFFF%3Fstyle%3Dfor-the-badge%26logo%3Dtelegram%26logoColor%3Dwhite" width="114" height="28"&gt;&lt;/a&gt;
&lt;a href="https://chat.whatsapp.com/HlfH698T5LAICbpQV5A5ku?mode=wwt" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FWhatsApp%2520Group-25D366%3Fstyle%3Dfor-the-badge%26logo%3Dwhatsapp%26logoColor%3Dwhite" width="168" height="28"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;h3&gt;
  
  
  Buy Me A Coffee / Donate
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://heavstal-tech.vercel.app/buy-me-a-coffee" rel="noopener noreferrer"&gt;Bank Transfer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://heavstal-tech.vercel.app/buy-me-a-coffee" rel="noopener noreferrer"&gt;Paystack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Join Our Bot Support &amp;amp; Group Chats &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2Frecommended-yes-blue" alt="Recommended" width="118" height="20"&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://chat.whatsapp.com/HlfH698T5LAICbpQV5A5ku?mode=wwt" rel="noopener noreferrer"&gt;WhatsApp GC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://t.me/+OXpT1vvQ5K81MmVk" rel="noopener noreferrer"&gt;Telegram GC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a id="caution-notice"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[!CAUTION]&lt;br&gt;
&lt;em&gt;Verselor-V1&lt;/em&gt; is not made by WhatsApp Inc. Misusing the bot might ban your WhatsApp account!* - &lt;em&gt;In Such Scenarios, Heavstal Tech is not responsible for the banning of your account.&lt;/em&gt; - &lt;em&gt;Use Verselor-V1 at your own risk by keeping this warning in mind.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;To reduce the risk of this slightly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consider turning &lt;strong&gt;off startup messages&lt;/strong&gt; in with the command after deployment....&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;This project is licensed under the &lt;strong&gt;Custom / Heavstal Tech™ End User License Agreement (EULA)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Please see &lt;a href="https://github.com/HeavstalTech/Verselor-V1/blob/main/LICENSE" rel="noopener noreferrer"&gt;LICENSE&lt;/a&gt; for further information (Essential)&lt;/p&gt;

&lt;h3&gt;
  
  
  Copyright Notice:
&lt;/h3&gt;

&lt;p&gt;You may acquire any open-source part of this WhatsApp Automation Bot for free. By acquiring an open-source copy of this bot, you are by default bound to the Copyright Notice of this project, which strictly states that you must give proper credit to &lt;strong&gt;Heavstal Tech™&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Note: Some core files are obfuscated to protect proprietary API keys and prevent scraping. Many plugins remain fully open for developers to customize.&lt;/p&gt;

&lt;h3&gt;
  
  
  CHANGE NOTICE:
&lt;/h3&gt;

&lt;p&gt;The contents of this file mau Change occasionally, it's important to check every onces in a while and occasionally see &lt;a href="https://github.com/HeavstalTech/Verselor-V1-NoEnc/blob/main/CHANGELOG.md" rel="noopener noreferrer"&gt;CHANGELOG.md&lt;/a&gt; for changes made to the bot.&lt;/p&gt;




&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F74038190%2F235224431-e8c8c12e-6826-47f1-89fb-2ddad83b3abf.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F74038190%2F235224431-e8c8c12e-6826-47f1-89fb-2ddad83b3abf.gif" width="426" height="426"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F74038190%2F212748830-4c709398-a386-4761-84d7-9e10b98fbe6e.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F74038190%2F212748830-4c709398-a386-4761-84d7-9e10b98fbe6e.gif" width="480" height="360"&gt;&lt;/a&gt;
&lt;/p&gt;




&lt;h2&gt;© A Product Of Heavstal Tech™&lt;br&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FLyHic3i.gif" width="800" height="8"&gt;&lt;/a&gt;&lt;a&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fi.imgur.com%2FLyHic3i.gif" width="800" height="8"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>whatsappbot</category>
      <category>node</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>Introduction "@heavstaltech/baileys" - HT-baileys</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Tue, 03 Feb 2026 01:03:38 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/introduction-heavstaltechbaileys-ht-baileys-j6m</link>
      <guid>https://dev.to/heavstal_tech/introduction-heavstaltechbaileys-ht-baileys-j6m</guid>
      <description>&lt;p&gt;HT-baileys&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fvi3npg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fvi3npg.png" alt="HT-baileys Banner" width="601" height="529"&gt;&lt;/a&gt;&lt;br&gt;
  &lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://heavstal-tech.vercel.app" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FMaintainer-Heavstal_Tech-007acc%3Fstyle%3Dfor-the-badge%26logo%3Dvercel%26logoColor%3Dwhite" alt="Heavstal Tech" width="248" height="28"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;br&gt;
  &lt;a href="https://www.npmjs.com/package/@heavstaltech/baileys" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FNPM-%40heavstaltech%2Fbaileys-cb3837%3Fstyle%3Dfor-the-badge%26logo%3Dnpm%26logoColor%3Dwhite" alt="NPM" width="268" height="28"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;br&gt;
  &lt;a href="https://github.com/HeavstalTech/HT-baileys" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FVersion-1.0.1-2ea44f%3Fstyle%3Dfor-the-badge%26logo%3Dgithub%26logoColor%3Dwhite" alt="Version" width="154" height="28"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;br&gt;
  &lt;a href="https://github.com/HeavstalTech/HT-baileys/blob/master/LICENSE" rel="noopener noreferrer"&gt;&lt;br&gt;
    &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fbadge%2FLicense-MIT-fab005%3Fstyle%3Dfor-the-badge" alt="License" width="124" height="28"&gt;&lt;br&gt;
  &lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;HT-baileys&lt;/strong&gt; is an advanced fork of the WhatsApp Web API library, engineered and maintained by &lt;strong&gt;Heavstal Tech&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This library builds upon the stability of the original Baileys architecture while integrating extended features required for modern, production-grade automation. It provides a robust solution for enterprise bots, featuring optimized connection headers, custom pairing code logic, and native support for WhatsApp Channels (Newsletters), Interactive Messages, and more.&lt;/p&gt;

&lt;p&gt;WhatsApp Baileys is an open-source library designed to help developers build automation solutions and integrations with WhatsApp efficiently and directly. Using websocket technology without the need for a browser, this library supports a wide range of features such as message management, chat handling, group administration, as well as interactive messages and action buttons for a more dynamic user experience.&lt;/p&gt;

&lt;p&gt;Actively developed and maintained, baileys continuously receives updates to enhance stability and performance. One of the main focuses is to improve the pairing and authentication processes to be more stable and secure. Pairing features can be customized with your own codes, making the process more reliable and less prone to interruptions.&lt;/p&gt;

&lt;p&gt;This library is highly suitable for building business bots, chat automation systems, customer service solutions, and various other communication automation applications that require high stability and comprehensive features. With a lightweight and modular design, baileys is easy to integrate into different systems and platforms.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Overview
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;💬 &lt;strong&gt;Newsletters &amp;amp; Channels&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Full support for sending text, media, and managing WhatsApp Channels.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔘 &lt;strong&gt;Interactive Messages&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Native support for buttons, lists, carousel, and product messages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🤖 &lt;strong&gt;AI Message Icon&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Customize message appearances with an optional AI icon (&lt;code&gt;ai: true&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🔑 &lt;strong&gt;Custom Pairing Codes&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;Heavstal Exclusive:&lt;/strong&gt; Define custom alphanumeric pairing codes (e.g., &lt;code&gt;HEAVSTAL&lt;/code&gt;).&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;📊 &lt;strong&gt;Polls &amp;amp; Events&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Create polls with vote tracking and schedule WhatsApp events.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🖼️ &lt;strong&gt;Albums &amp;amp; High-Res Media&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Send album messages and upload full-size profile pictures.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;🛠️ &lt;strong&gt;Stability Fixes&lt;/strong&gt;
&lt;/td&gt;
&lt;td&gt;Enhanced Libsignal logs and connection management.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Stable Release
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @heavstaltech/baileys
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Edge Release
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @heavstaltech/baileys@latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Basic Connection
&lt;/h3&gt;

&lt;p&gt;The following example demonstrates how to initialize a socket connection using &lt;code&gt;HT-baileys&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;makeWASocket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="nx"&gt;useMultiFileAuthState&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;DisconnectReason&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="nx"&gt;Browsers&lt;/span&gt; 
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@heavstaltech/baileys&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;connectToWhatsApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;saveCreds&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;useMultiFileAuthState&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;auth_info&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;makeWASocket&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;printQRInTerminal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Set to true if using QR scanning&lt;/span&gt;
        &lt;span class="na"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Browsers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;macOS&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Desktop&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;syncFullHistory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;connection.update&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;connection&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;lastDisconnect&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;update&lt;/span&gt;

        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;close&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;shouldReconnect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;lastDisconnect&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)?.&lt;/span&gt;&lt;span class="nx"&gt;output&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;statusCode&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="nx"&gt;DisconnectReason&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;loggedOut&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connection closed. Reconnecting:&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;shouldReconnect&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;shouldReconnect&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="nf"&gt;connectToWhatsApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;connection&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;open&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Connection opened successfully&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;on&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;creds.update&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;saveCreds&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;connectToWhatsApp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Core Feature Implementation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Custom Pairing Code
&lt;/h3&gt;

&lt;p&gt;HT-baileys supports the definition of custom alphanumeric pairing codes, allowing for branded connection flows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;authState&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;creds&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registered&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;// Ensure the number format is correct (Country Code + Number)&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;phoneNumber&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2349000000000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;

    &lt;span class="c1"&gt;// Define your branded pairing code&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customCode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HEAVSTAL&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 

    &lt;span class="nf"&gt;setTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;requestPairingCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;phoneNumber&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;customCode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Pairing Code: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Utilities
&lt;/h3&gt;

&lt;p&gt;Useful helper functions included in the library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check Banned Number&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;checkWhatsApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Newsletter Management
&lt;/h3&gt;

&lt;p&gt;Tools for managing and interacting with WhatsApp Channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get Channel ID by URL&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newsletterId&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;url&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Create &amp;amp; Update Channel&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;channel&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newsletterCreate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heavstal Updates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Official Channel Description&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;// Update Metadata&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newsletterUpdateName&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heavstal Tech&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;newsletterUpdateDescription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;channel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Official Updates&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Advanced Messaging Documentation
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Group Status V2
&lt;/h3&gt;

&lt;p&gt;Send a status update specific to a group context.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
     &lt;span class="na"&gt;groupStatusMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Hello World&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
     &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Album Message
&lt;/h3&gt;

&lt;p&gt;Send multiple images combined into a single album bubble.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;albumMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/1.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;caption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;First Photo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/2.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="na"&gt;caption&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Second Photo&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt; 
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Event Message
&lt;/h3&gt;

&lt;p&gt;Create and send a WhatsApp Event invitation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;eventMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;isCanceled&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heavstal Launch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Official Launch Party&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;location&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
            &lt;span class="na"&gt;degreesLatitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="na"&gt;degreesLongitude&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
            &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Virtual&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; 
        &lt;span class="p"&gt;},&lt;/span&gt; 
        &lt;span class="na"&gt;joinLink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://call.whatsapp.com/video/example&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;startTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1763019000&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;endTime&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1763026200&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;extraGuestsAllowed&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Poll Message
&lt;/h3&gt;

&lt;p&gt;Send a poll and display results.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
    &lt;span class="na"&gt;pollResultMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Which framework do you prefer?&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="na"&gt;pollVotes&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;optionName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;React&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;optionVoteCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;optionName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Vue&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;optionVoteCount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;5&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt; 
    &lt;span class="p"&gt;}&lt;/span&gt; 
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Product Message
&lt;/h3&gt;

&lt;p&gt;Send a catalog product message with a "Buy Now" button.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;productMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Premium Service&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Lifetime access to premium features&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;thumbnail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/image.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="na"&gt;productId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;PROD001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;retailerId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;RETAIL001&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/product&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Product Details&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Special Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;priceAmount1000&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;50000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;currencyCode&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USD&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;buttons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cta_url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;buttonParamsJson&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="na"&gt;display_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Buy Now&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/buy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Request Payment Message
&lt;/h3&gt;

&lt;p&gt;Send a payment request with a custom background and sticker.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Assuming 'm' is the message object you are quoting&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quotedType&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nx"&gt;mtype&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;quotedContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;quotedType&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;quoted&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;requestPaymentMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;currency&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;IDR&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;amount&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;from&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;sticker&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;quotedContent&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;fileLength&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;mimetype&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;image/webp&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;placeholderArgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xFF00FFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="na"&gt;textArgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xFFFFFFFF&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     
            &lt;span class="na"&gt;subtextArgb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;0xFFAA00FF&lt;/span&gt;   
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Interactive Messages (Native Flow)
&lt;/h3&gt;

&lt;p&gt;Complex interactive messages including buttons, copy-to-clipboard, and lists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Native Flow with Buttons &amp;amp; Lists:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;    
    &lt;span class="na"&gt;interactiveMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;      
        &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heavstal Tech&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Interactive Menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      
        &lt;span class="na"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Powered by HT-baileys&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;      
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://example.com/image.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;      
        &lt;span class="na"&gt;nativeFlowMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;        
            &lt;span class="na"&gt;messageParamsJson&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;          
                &lt;span class="na"&gt;limited_time_offer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;            
                    &lt;span class="na"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Special Offer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            
                    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://heavstal-tech.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            
                    &lt;span class="na"&gt;copy_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;DISCOUNT20&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            
                    &lt;span class="na"&gt;expiration_time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;86400000&lt;/span&gt;          
                &lt;span class="p"&gt;},&lt;/span&gt;               
            &lt;span class="p"&gt;}),&lt;/span&gt;        
            &lt;span class="na"&gt;buttons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;          
                &lt;span class="p"&gt;{&lt;/span&gt;            
                    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;single_select&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            
                    &lt;span class="na"&gt;buttonParamsJson&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;              
                        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Open Menu&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              
                        &lt;span class="na"&gt;sections&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;                
                            &lt;span class="p"&gt;{&lt;/span&gt;                  
                                &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Main Options&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                  
                                &lt;span class="na"&gt;highlight_label&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Popular&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                  
                                &lt;span class="na"&gt;rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;                    
                                    &lt;span class="p"&gt;{&lt;/span&gt;                      
                                        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Check Status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                      
                                        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;View system status&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;                      
                                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;status_row&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;                    
                                    &lt;span class="p"&gt;}&lt;/span&gt;                  
                                &lt;span class="p"&gt;]&lt;/span&gt;                
                            &lt;span class="p"&gt;}&lt;/span&gt;              
                        &lt;span class="p"&gt;]&lt;/span&gt;            
                    &lt;span class="p"&gt;})&lt;/span&gt;          
                &lt;span class="p"&gt;},&lt;/span&gt;          
                &lt;span class="p"&gt;{&lt;/span&gt;            
                    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cta_copy&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;            
                    &lt;span class="na"&gt;buttonParamsJson&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;              
                        &lt;span class="na"&gt;display_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Copy ID&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              
                        &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;123456789&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;              
                        &lt;span class="na"&gt;copy_code&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;HT-1234&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;            
                    &lt;span class="p"&gt;})&lt;/span&gt;          
                &lt;span class="p"&gt;}&lt;/span&gt;        
            &lt;span class="p"&gt;]&lt;/span&gt;      
        &lt;span class="p"&gt;}&lt;/span&gt;    
    &lt;span class="p"&gt;}&lt;/span&gt;  
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Interactive Message with Document:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Note: Documents must be passed as buffers.&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;fs&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;sock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sendMessage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;jid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;interactiveMessage&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;header&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Documentation&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Read Guidelines&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;footer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Heavstal Tech&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;document&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./manual.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;mimetype&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;fileName&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;manual.pdf&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;jpegThumbnail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;fs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;readFileSync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./thumb.jpg&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="na"&gt;buttons&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;cta_url&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="na"&gt;buttonParamsJson&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
                    &lt;span class="na"&gt;display_text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Visit Website&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://heavstal-tech.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="na"&gt;merchant_url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://heavstal-tech.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
                &lt;span class="p"&gt;})&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;quoted&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;m&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  About Heavstal Tech
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Heavstal Tech&lt;/strong&gt; is a forward-thinking technology organization dedicated to building robust tools and ecosystems for the modern web. From automation libraries to full-stack applications, we prioritize performance, scalability, and developer experience.&lt;/p&gt;

&lt;p&gt;🌐 &lt;strong&gt;Official Website:&lt;/strong&gt; &lt;a href="https://heavstal-tech.vercel.app" rel="noopener noreferrer"&gt;https://heavstal-tech.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;HT-baileys&lt;/strong&gt; is an independent project maintained by &lt;strong&gt;Heavstal Tech&lt;/strong&gt;. It is not affiliated with, authorized, maintained, sponsored, or endorsed by WhatsApp Inc. or Meta Platforms, Inc.&lt;/p&gt;

&lt;p&gt;This software is provided "as is", without warranty of any kind. Users are responsible for ensuring their usage complies with WhatsApp's Terms of Service.&lt;/p&gt;




&lt;p&gt;© 2025 - 2026 Heavstal Tech. All rights reserved.&lt;/p&gt;

</description>
      <category>heavstal</category>
      <category>npm</category>
      <category>typescript</category>
      <category>whatsapp</category>
    </item>
    <item>
      <title>HEAVSTAL AUTH PROVIDER - Update</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Tue, 27 Jan 2026 12:33:03 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/heavstal-auth-provider-update-51n0</link>
      <guid>https://dev.to/heavstal_tech/heavstal-auth-provider-update-51n0</guid>
      <description>&lt;h1&gt;
  
  
  Heavstal Auth Provider
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fu1hm7q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.catbox.moe%2Fu1hm7q.jpg" alt="Heavstal Logo" width="599" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.npmjs.com/package/heavstal-auth" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fnpm%2Fv%2Fheavstal-auth%3Fstyle%3Dflat-square%26color%3Dblue" alt="NPM Version" width="80" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/HeavstalTech/heavstal-auth/blob/main/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fnpm%2Fl%2Fheavstal-auth%3Fstyle%3Dflat-square" alt="License" width="78" height="20"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.npmjs.com/package/heavstal-auth" rel="noopener noreferrer"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimg.shields.io%2Fnpm%2Fdm%2Fheavstal-auth%3Fstyle%3Dflat-square" alt="Downloads" width="134" height="20"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The official &lt;strong&gt;&lt;a href="https://next-auth.js.org/" rel="noopener noreferrer"&gt;NextAuth.js&lt;/a&gt;&lt;/strong&gt; (Auth.js) provider for the &lt;strong&gt;Heavstal Tech Identity Platform&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This package enables seamless integration of &lt;strong&gt;Heavstal OAuth 2.0 &amp;amp; OpenID Connect (OIDC)&lt;/strong&gt; authentication into Next.js and Node.js applications. It pre-configures authorization endpoints, token exchanges, and user profile mapping, ensuring security best practices.&lt;/p&gt;


&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-Configuration:&lt;/strong&gt; Pre-configured endpoints for Heavstal Identity services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OIDC Compliant:&lt;/strong&gt; Fully supports OpenID Connect discovery and ID Token verification.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript Support:&lt;/strong&gt; Written in TypeScript with included type definitions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Defaults:&lt;/strong&gt; Enforces &lt;code&gt;PKCE&lt;/code&gt; (Proof Key for Code Exchange) and state verification by default.&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Installation
&lt;/h2&gt;

&lt;p&gt;Ensure you have &lt;code&gt;next-auth&lt;/code&gt; installed in your project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install &lt;/span&gt;heavstal-auth
&lt;span class="c"&gt;# or&lt;/span&gt;
yarn add heavstal-auth
&lt;span class="c"&gt;# or&lt;/span&gt;
pnpm add heavstal-auth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Configuration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Obtain Credentials
&lt;/h3&gt;

&lt;p&gt;Register your application in the &lt;a href="https://heavstal-tech.vercel.app/oauth/apps" rel="noopener noreferrer"&gt;Heavstal Developer Console&lt;/a&gt; to obtain your &lt;strong&gt;Client ID&lt;/strong&gt; and &lt;strong&gt;Client Secret&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Environment Variables
&lt;/h3&gt;

&lt;p&gt;Add the following to your &lt;code&gt;.env&lt;/code&gt; or &lt;code&gt;.env.local&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ht_id_xxxxxxxxxxxx
&lt;span class="nv"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ht_secret_xxxxxxxxxxxx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Usage with NextAuth.js
&lt;/h3&gt;

&lt;p&gt;Import &lt;code&gt;HeavstalProvider&lt;/code&gt; and add it to your NextAuth configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File:&lt;/strong&gt; &lt;code&gt;app/api/auth/[...nextauth]/route.ts&lt;/code&gt; (App Router) or &lt;code&gt;pages/api/auth/[...nextauth].ts&lt;/code&gt; (Pages Router).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;NextAuth&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;next-auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;HeavstalProvider&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;heavstal-auth&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;NextAuth&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;providers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="nc"&gt;HeavstalProvider&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;clientId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;clientSecret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
    &lt;span class="c1"&gt;// ...other providers&lt;/span&gt;
  &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="c1"&gt;// Optional: Enable debug mode for development&lt;/span&gt;
  &lt;span class="na"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NODE_ENV&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;development&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;GET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;POST&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Integration with Non-Next.js Applications
&lt;/h2&gt;

&lt;p&gt;Heavstal Tech is a standard &lt;strong&gt;OpenID Connect (OIDC)&lt;/strong&gt; provider. If you are using a different framework (Express, Python, Go, etc.) or a library that supports OIDC Discovery, you do not need this specific SDK.&lt;/p&gt;

&lt;p&gt;You can configure your client using the &lt;strong&gt;Issuer URL&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  OIDC Discovery Configuration
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Parameter&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Issuer URL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts-heavstal.vercel.app&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discovery Document&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts-heavstal.vercel.app/.well-known/openid-configuration&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JWKS Endpoint&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;https://accounts-heavstal.vercel.app/.well-known/jwks.json&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Example: Generic Node.js OIDC Client
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;OIDCClient&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
  &lt;span class="na"&gt;issuer&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://accounts-heavstal.vercel.app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
  &lt;span class="na"&gt;client_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;client_secret&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;HEAVSTAL_CLIENT_SECRET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;redirect_uri&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;https://your-app.com/callback&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;response_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;code&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;openid profile email&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  User Profile Data
&lt;/h2&gt;

&lt;p&gt;On successful authentication, the provider returns the following normalized user profile structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kr"&gt;interface&lt;/span&gt; &lt;span class="nx"&gt;HeavstalProfile&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// The unique Heavstal User ID&lt;/span&gt;
  &lt;span class="nl"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;     &lt;span class="c1"&gt;// Public Display Name&lt;/span&gt;
  &lt;span class="nl"&gt;email&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// Verified Email Address&lt;/span&gt;
  &lt;span class="nl"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;    &lt;span class="c1"&gt;// Profile Picture URL&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://heavstal-tech.vercel.app/oauth/apps" rel="noopener noreferrer"&gt;Developer Console&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://heavstal-tech.vercel.app/docs/api/oauth-guide" rel="noopener noreferrer"&gt;API Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://heavstal-tech.vercel.app" rel="noopener noreferrer"&gt;Heavstal Platform&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  License
&lt;/h3&gt;

&lt;p&gt;This project is licensed under the &lt;strong&gt;MIT License&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Copyright © 2025 - 2026 &lt;strong&gt;Heavstal Tech™&lt;/strong&gt;. All rights reserved&lt;/p&gt;

</description>
      <category>oauth</category>
      <category>typescript</category>
      <category>npm</category>
      <category>security</category>
    </item>
    <item>
      <title>Notice of Temporary API Downtime as of "January 14th, 2026"</title>
      <dc:creator>HEAVSTAL TECH™</dc:creator>
      <pubDate>Wed, 14 Jan 2026 13:52:44 +0000</pubDate>
      <link>https://dev.to/heavstal_tech/notice-of-temporary-api-downtime-as-of-january-14th-2026-1eog</link>
      <guid>https://dev.to/heavstal_tech/notice-of-temporary-api-downtime-as-of-january-14th-2026-1eog</guid>
      <description>&lt;p&gt;&lt;strong&gt;Dear Esteemed Users,&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We sincerely apologize for the temporary downtime affecting some of our APIs.&lt;/p&gt;

&lt;p&gt;This interruption is due to an unexpected outage from a third-party storage provider &lt;strong&gt;(Catbox)&lt;/strong&gt; that several of our services rely on.&lt;/p&gt;

&lt;p&gt;Please be assured that we are actively working on a permanent solution and restoring full functionality as quickly as possible.&lt;/p&gt;

&lt;p&gt;We appreciate your patience and continued support.&lt;/p&gt;

&lt;h3&gt;
  
  
  EDIT:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ALL ISSUES HAS BEEN RESOLVED&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Best regards,&lt;br&gt;
&lt;strong&gt;Heavstal Tech Team&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
