<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tests-Workers on Ocarina — manual</title>
    <link>https://mojo-molotov.github.io/from-ocarina-to-igor/tags/tests-workers/</link>
    <description>Recent content in Tests-Workers on Ocarina — manual</description>
    <generator>Hugo</generator>
    <language>en-US</language>
    <lastBuildDate>Thu, 28 May 2026 21:02:53 +0200</lastBuildDate>
    <atom:link href="https://mojo-molotov.github.io/from-ocarina-to-igor/tags/tests-workers/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Chapter 06 — tests-workers, Vercel Edge backend</title>
      <link>https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/</link>
      <pubDate>Wed, 20 May 2026 00:00:00 +0000</pubDate>
      <guid>https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/</guid>
      <description>&lt;h1 id=&#34;chapter-06tests-workers-vercel-edge-backend&#34;&gt;Chapter 06 — &lt;code&gt;tests-workers&lt;/code&gt;, Vercel Edge backend&lt;a class=&#34;anchor&#34; href=&#34;#chapter-06tests-workers-vercel-edge-backend&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;blockquote class=&#39;book-hint &#39;&gt;&#xA;&lt;p&gt;Three HTTP endpoints, two libs (&lt;code&gt;@upstash/redis&lt;/code&gt;, &lt;code&gt;otplib&lt;/code&gt;), zero Next.js app code. The bare minimum to &lt;em&gt;coordinate&lt;/em&gt; parallel tests against Igoristan.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&lt;h2 id=&#34;outline&#34;&gt;Outline&lt;a class=&#34;anchor&#34; href=&#34;#outline&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: center&#34;&gt;#&lt;/th&gt;&#xA;          &lt;th&gt;File&lt;/th&gt;&#xA;          &lt;th&gt;Topic&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;01&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/01-stack-edge/&#34;&gt;&lt;code&gt;01-stack-edge.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Stack Vercel Edge Functions, &lt;code&gt;runtime: &amp;quot;edge&amp;quot;&lt;/code&gt;, Upstash Redis, &lt;code&gt;otplib&lt;/code&gt;.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;02&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/02-otp-endpoint/&#34;&gt;&lt;code&gt;02-otp-endpoint.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;GET /api/otp&lt;/code&gt; — generation + Redis SET + free payload.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;03&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/03-otp-history/&#34;&gt;&lt;code&gt;03-otp-history.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;GET /api/otp-history&lt;/code&gt; — Redis SCAN + return of every event.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;04&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/04-corsicadex/&#34;&gt;&lt;code&gt;04-corsicadex.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;GET /api/corsicadex?id=N&lt;/code&gt; — static lookup.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;05&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/05-is-authorized/&#34;&gt;&lt;code&gt;05-is-authorized.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;isAuthorized.ts&lt;/code&gt; — &lt;code&gt;x-api-key&lt;/code&gt; vs &lt;code&gt;apiKey&lt;/code&gt; query param.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;06&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/06-redis-upstash/&#34;&gt;&lt;code&gt;06-redis-upstash.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;code&gt;lib/redis.ts&lt;/code&gt; — Upstash config.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: center&#34;&gt;07&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://mojo-molotov.github.io/from-ocarina-to-igor/06-tests-workers/07-otp-coordination-flow/&#34;&gt;&lt;code&gt;07-otp-coordination-flow.md&lt;/code&gt;&lt;/a&gt;&lt;/td&gt;&#xA;          &lt;td&gt;Full OTP flow: Igoristan ↔ workers ↔ Ocarina ↔ Redis.&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;goals&#34;&gt;Goals&lt;a class=&#34;anchor&#34; href=&#34;#goals&#34; data-pagefind-ignore=&#34;all&#34;&gt;#&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;3 &lt;code&gt;.ts&lt;/code&gt; endpoints.&lt;/li&gt;&#xA;&lt;li&gt;2 &lt;code&gt;lib/&lt;/code&gt; files.&lt;/li&gt;&#xA;&lt;li&gt;1 &lt;code&gt;consts/&lt;/code&gt; file.&lt;/li&gt;&#xA;&lt;li&gt;Total: ~7 TypeScript code files, plus &lt;code&gt;package.json&lt;/code&gt; and &lt;code&gt;vercel.json&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Goal: &lt;em&gt;deployable in 30 seconds&lt;/em&gt; by a human.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
