PageSourceSearch

https://www.fortkey.io/assets/entries/pages_developers.BfXQiR67.js

js fortkey.io collected 2026-10-09 23:22:28 UTC 12,984 bytes, 21 lines download raw bytes

1import{c as l,j as e,i as d,a as c,o as p}from"../chunks/chunk-BpqaKSuD.js";import{L as h,S as m,a as o,A as r}from"../chunks/chunk-C4640EzS.js";import{J as x}from"../chunks/chunk-DrGZJMRi.js";import{D as a,a as u}from"../chunks/chunk-D4yZ-xPY.js";import{S as y,U as g}from"../chunks/chunk-D3-ZTEvT.js";import{S as f}from"../chunks/chunk-Dk8LwT4V.js";import{S as b}from"../chunks/chunk-z3ZctqpD.js";/* empty css                      */import"../chunks/chunk-DxKNguCu.js";/* empty css                      */import"../chunks/chunk-BECAkacd.js";/**
2 * @license lucide-react v0.462.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const k=l("Bot",[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]]);/**
7 * @license lucide-react v0.462.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const v=l("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/**
12 * @license lucide-react v0.462.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const w=l("Rocket",[["path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z",key:"m3kijz"}],["path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z",key:"1fmvmk"}],["path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0",key:"1f8sc4"}],["path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5",key:"qeys4"}]]);/**
17 * @license lucide-react v0.462.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const j=l("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]),S=[{to:a["quickstart-bot"].path,title:"Getting started",desc:"Authenticate a bot, send an unsigned payload, get a policy-checked signature back.",icon:w},{to:a["build-with-ai"].path,title:"Build with AI",desc:"A copy-paste prompt for Cursor, Claude Code, and other agents.",icon:j},{to:a["what-is-fortkey"].path,title:"What is Fortkey?",desc:"The platform concepts: wallets, admins, traders, policies, roles.",icon:v},{to:a["policy-engine"].path,title:"Policy engine",desc:"Field-level rules and rule logic, enforced before any signature exists.",icon:y},{to:a["security-architecture"].path,title:"Security",desc:"Enclaves, layered KMS encryption, attestation, and the key lifecycle.",icon:f}],N=[{title:"Bot developers",icon:k,links:[{to:a["quickstart-bot"].path,label:"Quickstart"},{to:a.authentication.path,label:"Authentication"},{to:a["multi-region-signing"].path,label:"Multi-region signing"}]},{title:"Admins and operations",icon:g,links:[{to:a["policy-engine"].path,label:"Policy engine"},{to:"#",label:"Console guide (publishing soon)",disabled:!0}]},{title:"Security reviewers",icon:b,links:[{to:a["security-architecture"].path,label:"Security"},{to:a.benchmarks.path,label:"Benchmarks"}]}],A=[{title:"Enclave signing",desc:"Private keys are generated, stored, and used only inside attested enclaves. No person or system outside the enclave ever sees a raw key."},{title:"Policy enforcement",desc:"Whitelists, blacklists, transaction types, byte-level smart contract validation, user and group scoping, IP restrictions, and bring-your-own-policy callbacks."},{title:"Multi-region signing",desc:"Latency-routed signing replicas near your venues, with policies applied globally in near real time."},{title:"Two ways to trade",desc:"Bots through the SDK or REST API; humans through FortkeyLink, which connects to standard browser extensions like a hardware wallet."},{title:"Chain coverage",desc:"Signing across 9 chain families including Canton. Documented policy rule interpretations for Aptos, EVM, Polkadot, Radix, Solana, Stellar, Sui, and XRPL, with new chains added on demand."},{title:"Auditability",desc:"Transaction logs that show exactly what was requested, what was parsed, what was signed, and why anything was blocked."}],E=[{n:"01",title:"Try the sandbox",desc:"So you have an organization, a wallet, and a bot user to work with.",to:"/sandbox"},{n:"02",title:"Authenticate",desc:"Log a bot in with the challenge-response protocol. No static API keys.",to:a.authentication.path},{n:"03",title:"Sign your first transaction",desc:"Rust or TypeScript SDK, or plain REST.",to:a["quickstart-bot"].path},{n:"04",title:"Add a policy",desc:"Attach a whitelist or a smart contract rule, then verify with the simulator.",to:a["policy-engine"].path}],T=[{id:"start-here",text:"Start here"},{id:"explore-by-role",text:"Explore by role"},{id:"key-capabilities",text:"Key capabilities"},{id:"start-building",text:"Start building"},{id:"need-help",text:"Need help?"}];function C(){const s=a.introduction;
21return e.jsxs(h,{title:s.seoTitle,description:s.description,children:[e.jsx(m,{path:s.path,title:s.seoTitle,description:s.description}),e.jsx(x,{schema:{"@context":"https://schema.org","@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:"https://www.fortkey.io/"},{"@type":"ListItem",position:2,name:"Developers",item:"https://www.fortkey.io/developers"}]}}),e.jsx(u,{toc:T,children:e.jsxs("div",{className:"docs-prose",children:[e.jsx("h1",{className:"font-display font-semibold text-[#14171C] text-[34px] sm:text-[44px]",style:{letterSpacing:"-0.02em",lineHeight:1.08},children:"Fortkey developer docs"}),e.jsx("p",{className:"mt-5 text-[19px] leading-[1.7] text-[#2A2F38]",children:"Welcome to the Fortkey documentation. Whether you are running an algorithmic desk, connecting a manual trading workflow, or evaluating our security architecture, you will find everything you need to build on Fortkey here."}),e.jsx("p",{className:"mt-4 text-[17px] leading-[1.75] text-[#2A2F38]",children:"Fortkey is self-custody execution infrastructure for financial institutions: keys are generated and used inside hardware-isolated enclaves in your perimeter, every transaction is decoded and policy-checked before a signature exists, and signing runs at trading speed close to your venues."}),e.jsx("h2",{id:"start-here",className:"scroll-mt-28 mt-14 mb-5 font-display font-semibold text-[#14171C] text-[24px] sm:text-[30px]",style:{letterSpacing:"-0.02em",lineHeight:1.15},children:"Start here"}),e.jsx("div",{className:"not-prose grid gap-4 sm:grid-cols-2",children:S.map(t=>{const n=t.icon;return e.jsxs(o,{to:t.to,className:"group block rounded-xl border border-[#E9E8E2] bg-white p-5 transition-colors hover:border-[#0B1430]/40",children:[e.jsx("span",{className:"flex h-9 w-9 items-center justify-center rounded-md bg-[hsla(221,83%,53%,0.10)] text-[#2563EB]",children:e.jsx(n,{className:"h-4 w-4"})}),e.jsxs("div",{className:"mt-3 flex items-center gap-1.5 font-display text-[20px] font-semibold text-[#14171C]",children:[t.title,e.jsx(r,{className:"h-4 w-4 text-[#5B6470] transition-transform group-hover:translate-x-0.5"})]}),e.jsx("p",{className:"mt-1.5 text-[15px] leading-[1.6] text-[#5B6470]",children:t.desc})]},t.to)})}),e.jsx("h2",{id:"explore-by-role",className:"scroll-mt-28 mt-14 mb-5 font-display font-semibold text-[#14171C] text-[24px] sm:text-[30px]",style:{letterSpacing:"-0.02em",lineHeight:1.15},children:"Explore by role"}),e.jsx("div",{className:"not-prose grid gap-4 sm:grid-cols-3",children:N.map(t=>{const n=t.icon;return e.jsxs("div",{className:"rounded-xl border border-[#E9E8E2] bg-white p-5",children:[e.jsx("span",{className:"flex h-9 w-9 items-center justify-center rounded-md bg-[#F1EFE8] text-[#2563EB]",children:e.jsx(n,{className:"h-4 w-4"})}),e.jsx("div",{className:"mt-3 font-display text-[20px] font-semibold text-[#14171C]",children:t.title}),e.jsx("ul",{className:"mt-3 space-y-1.5",children:t.links.map(i=>i.disabled?e.jsx("li",{className:"text-[15px] text-[#8A94A6]",children:i.label},i.label):e.jsx("li",{children:e.jsx(o,{to:i.to,className:"text-[15px] text-[#2563EB] hover:underline",children:i.label})},i.label))})]},t.title)})}),e.jsx("h2",{id:"key-capabilities",className:"scroll-mt-28 mt-14 mb-5 font-display font-semibold text-[#14171C] text-[24px] sm:text-[30px]",style:{letterSpacing:"-0.02em",lineHeight:1.15},children:"Key capabilities"}),e.jsx("div",{className:"not-prose grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:A.map(t=>e.jsxs("div",{className:"rounded-xl border border-[#E9E8E2] bg-[#FCFCFA] p-4",children:[e.jsx("div",{className:"font-display text-[16px] font-semibold text-[#14171C]",children:t.title}),e.jsx("p",{className:"mt-1.5 text-[14.5px] leading-[1.6] text-[#5B6470]",children:t.desc})]},t.title))}),e.jsx("h2",{id:"start-building",className:"scroll-mt-28 mt-14 mb-5 font-display font-semibold text-[#14171C] text-[24px] sm:text-[30px]",style:{letterSpacing:"-0.02em",lineHeight:1.15},children:"Start building"}),e.jsx("ol",{className:"not-prose grid gap-3 sm:grid-cols-2",children:E.map(t=>e.jsx("li",{className:"flex",children:e.jsxs(o,{to:t.to,className:"group flex flex-1 gap-3 rounded-xl border border-[#
21E9E8E2] bg-white p-4 hover:border-[#0B1430]/40",children:[e.jsx("span",{className:"mt-0.5 text-[12px] font-semibold tracking-[0.08em] text-[#1E4FBF]",children:t.n}),e.jsxs("span",{className:"flex-1",children:[e.jsxs("span",{className:"flex items-center gap-1.5 font-semibold text-[#14171C]",children:[t.title,e.jsx(r,{className:"h-3.5 w-3.5 text-[#5B6470] transition-transform group-hover:translate-x-0.5"})]}),e.jsx("span",{className:"mt-0.5 block text-[14.5px] leading-[1.6] text-[#5B6470]",children:t.desc})]})]})},t.n))}),e.jsx("h2",{id:"need-help",className:"scroll-mt-28 mt-14 mb-4 font-display font-semibold text-[#14171C] text-[24px] sm:text-[30px]",style:{letterSpacing:"-0.02em",lineHeight:1.15},children:"Need help?"}),e.jsxs("p",{className:"text-[17px] leading-[1.75] text-[#2A2F38]",children:["Questions or a chain we should add?"," ",e.jsx(o,{to:"/talk",className:"text-[#2563EB] underline underline-offset-2 hover:text-[#1D4FCF]",children:"Talk to engineering"}),"."]})]})})]})}function z(){return e.jsx(C,{})}const B=Object.freeze(Object.defineProperty({__proto__:null,default:z},Symbol.toStringTag,{value:"Module"})),q={hasServerOnlyHook:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!1}},isClientRuntimeLoaded:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:!0}},onBeforeRenderEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},dataEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},guardEnv:{type:"computed",definedAtData:null,valueSerialized:{type:"js-serialized",value:null}},onRenderClient:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/onRenderClient",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:p}},Page:{type:"standard",definedAtData:{filePathToShowToUser:"/pages/developers/+Page.tsx",fileExportPathToShowToUser:[]},valueSerialized:{type:"plus-file",exportValues:B}},hydrationCanBeAborted:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/config",fileExportPathToShowToUser:["default","hydrationCanBeAborted"]},valueSerialized:{type:"js-serialized",value:!0}},Wrapper:{type:"cumulative",definedAtData:[{filePathToShowToUser:"/pages/+Wrapper.tsx",fileExportPathToShowToUser:[]}],valueSerialized:[{type:"plus-file",exportValues:c}]},Loading:{type:"standard",definedAtData:{filePathToShowToUser:"vike-react/__internal/integration/Loading",fileExportPathToShowToUser:[]},valueSerialized:{type:"pointer-import",value:d}}};export{q as configValuesSerialized};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.