WS2: Developer Portal (portal/) - Standalone Next.js 14 + Tailwind CSS app — independent deployment - Home page: hero, feature grid, CTA to /get-started - /pricing: free tier limits table (10 agents, 1k calls/day) + paid tier CTA - /sdks: all 4 SDKs (Node.js, Python, Go, Java) with install + code examples - /api-explorer: Swagger UI from NEXT_PUBLIC_API_URL/openapi.json, persistAuthorization - /get-started: 4-step wizard (setup → register agent → credentials → SDK snippet) - Shared Nav component with active-link highlighting - Build: 8/8 static pages, zero TypeScript errors WS3: CLI Tool (cli/ — npm package: sentryagent) - configure, register-agent, list-agents, issue-token, rotate-credentials, tail-audit-log - Auto OAuth2 token fetch + 30s-buffer cache via client_credentials flow - chalk-formatted table output, confirmation prompts, bounded audit log dedup - bash + zsh shell completion scripts - README with installation, all commands, and completion setup - Build: tsc clean, node dist/index.js --help verified Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 line
8.4 KiB
HTML
1 line
8.4 KiB
HTML
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/0d1e1814871c1ae4.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/a4c02a9871b5dc42.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-75820735529c9609.js"/><script src="/_next/static/chunks/fd9d1056-0ffa74f19011bd1c.js" async=""></script><script src="/_next/static/chunks/23-eed73080eee64cfd.js" async=""></script><script src="/_next/static/chunks/main-app-ce894e58853e9441.js" async=""></script><script src="/_next/static/chunks/app/api-explorer/page-7cae2529092c7dfa.js" async=""></script><script src="/_next/static/chunks/231-711da40718c2508c.js" async=""></script><script src="/_next/static/chunks/app/layout-db75ca053106eec0.js" async=""></script><title>API Explorer — SentryAgent AgentIdP</title><meta name="description" content="Interactively explore and test the SentryAgent AgentIdP REST API."/><script src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js" noModule=""></script></head><body class="min-h-screen bg-slate-50 text-slate-900 antialiased"><header class="sticky top-0 z-50 border-b border-slate-200 bg-white/90 backdrop-blur"><nav class="mx-auto flex max-w-7xl items-center justify-between px-6 py-4"><a class="flex items-center gap-2" href="/"><span class="text-xl font-bold text-brand-600">SentryAgent</span><span class="rounded bg-brand-100 px-1.5 py-0.5 text-xs font-semibold text-brand-700">AgentIdP</span></a><ul class="flex items-center gap-1"><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/">Home</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors bg-brand-100 text-brand-700" href="/api-explorer">API Explorer</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/get-started">Get Started</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/sdks">SDKs</a></li><li><a class="rounded-md px-3 py-2 text-sm font-medium transition-colors text-slate-600 hover:bg-slate-100 hover:text-slate-900" href="/pricing">Pricing</a></li></ul><a class="rounded-lg bg-brand-600 px-4 py-2 text-sm font-semibold text-white shadow-sm transition-colors hover:bg-brand-700" href="/get-started">Get Started Free</a></nav></header><main><div class="px-4 py-8"><div class="mx-auto max-w-7xl"><div class="mb-8"><h1 class="text-3xl font-extrabold text-slate-900">API Explorer</h1><p class="mt-2 text-slate-600">Explore, authenticate, and test every AgentIdP endpoint directly from your browser. Use the Authorize button to set your Bearer token.</p><p class="mt-1 text-sm text-slate-400">Spec loaded from:<!-- --> <code class="rounded bg-slate-100 px-1.5 py-0.5 text-xs">http://localhost:3000<!-- -->/openapi.json</code></p></div><div class="swagger-wrapper min-h-screen"><!--$!--><template data-dgst="BAILOUT_TO_CLIENT_SIDE_RENDERING"></template><!--/$--></div></div></div></main><footer class="border-t border-slate-200 py-8 text-center text-sm text-slate-500"><p>© <!-- -->2026<!-- --> SentryAgent.ai — All rights reserved.</p></footer><script src="/_next/static/chunks/webpack-75820735529c9609.js" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0]);self.__next_f.push([2,null])</script><script>self.__next_f.push([1,"1:HL[\"/_next/static/css/0d1e1814871c1ae4.css\",\"style\"]\n2:HL[\"/_next/static/css/a4c02a9871b5dc42.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"3:I[95751,[],\"\"]\n5:I[49947,[\"734\",\"static/chunks/app/api-explorer/page-7cae2529092c7dfa.js\"],\"SwaggerExplorer\"]\n6:I[39275,[],\"\"]\n7:I[61343,[],\"\"]\n8:I[56390,[\"231\",\"static/chunks/231-711da40718c2508c.js\",\"185\",\"static/chunks/app/layout-db75ca053106eec0.js\"],\"Nav\"]\na:I[76130,[],\"\"]\nb:[]\n"])</script><script>self.__next_f.push([1,"0:[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/0d1e1814871c1ae4.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]],[\"$\",\"$L3\",null,{\"buildId\":\"h5w-rj60Vif8vQbejZCYz\",\"assetPrefix\":\"\",\"initialCanonicalUrl\":\"/api-explorer\",\"initialTree\":[\"\",{\"children\":[\"api-explorer\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],\"initialSeedData\":[\"\",{\"children\":[\"api-explorer\",{\"children\":[\"__PAGE__\",{},[[\"$L4\",[\"$\",\"div\",null,{\"className\":\"px-4 py-8\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-7xl\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-8\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-3xl font-extrabold text-slate-900\",\"children\":\"API Explorer\"}],[\"$\",\"p\",null,{\"className\":\"mt-2 text-slate-600\",\"children\":\"Explore, authenticate, and test every AgentIdP endpoint directly from your browser. Use the Authorize button to set your Bearer token.\"}],[\"$\",\"p\",null,{\"className\":\"mt-1 text-sm text-slate-400\",\"children\":[\"Spec loaded from:\",\" \",[\"$\",\"code\",null,{\"className\":\"rounded bg-slate-100 px-1.5 py-0.5 text-xs\",\"children\":[\"http://localhost:3000\",\"/openapi.json\"]}]]}]]}],[\"$\",\"$L5\",null,{\"apiUrl\":\"http://localhost:3000\"}]]}]}]],null],null]},[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\",\"api-explorer\",\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"notFoundStyles\":\"$undefined\",\"styles\":[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/a4c02a9871b5dc42.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\"}]]}],null]},[[\"$\",\"html\",null,{\"lang\":\"en\",\"children\":[\"$\",\"body\",null,{\"className\":\"min-h-screen bg-slate-50 text-slate-900 antialiased\",\"children\":[[\"$\",\"$L8\",null,{}],[\"$\",\"main\",null,{\"children\":[\"$\",\"$L6\",null,{\"parallelRouterKey\":\"children\",\"segmentPath\":[\"children\"],\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L7\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":\"404\"}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],\"notFoundStyles\":[],\"styles\":null}]}],[\"$\",\"footer\",null,{\"className\":\"border-t border-slate-200 py-8 text-center text-sm text-slate-500\",\"children\":[\"$\",\"p\",null,{\"children\":[\"© \",2026,\" SentryAgent.ai — All rights reserved.\"]}]}]]}]}],null],null],\"couldBeIntercepted\":false,\"initialHead\":[null,\"$L9\"],\"globalErrorComponent\":\"$a\",\"missingSlots\":\"$Wb\"}]]\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}],[\"$\",\"meta\",\"1\",{\"charSet\":\"utf-8\"}],[\"$\",\"title\",\"2\",{\"children\":\"API Explorer — SentryAgent AgentIdP\"}],[\"$\",\"meta\",\"3\",{\"name\":\"description\",\"content\":\"Interactively explore and test the SentryAgent AgentIdP REST API.\"}]]\n4:null\n"])</script></body></html> |