[{"data":1,"prerenderedAt":485},["ShallowReactive",2],{"navigation":3,"docus_navigation_docs":147,"-docs-core-features-audit-logs":183,"-docs-core-features-audit-logs-surround":480},[4,130],{"title":5,"path":6,"stem":7,"children":8,"page":55},"Docs","\u002Fdocs","docs",[9,21,56,95,105,119],{"title":10,"path":11,"stem":12,"children":13,"icon":20},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started\u002F1.index",[14,16],{"title":15,"path":11,"stem":12},"Introduction",{"title":17,"path":18,"stem":19},"Quickstart","\u002Fdocs\u002Fgetting-started\u002Fquickstart","docs\u002F1.getting-started\u002F2.quickstart","i-lucide-rocket",{"title":22,"icon":23,"path":24,"stem":25,"children":26,"page":55},"Core Features","i-lucide-tag","\u002Fdocs\u002Fcore-features","docs\u002F2.core-features",[27,31,35,39,43,47,51],{"title":28,"path":29,"stem":30},"Audit Logs","\u002Fdocs\u002Fcore-features\u002Faudit-logs","docs\u002F2.core-features\u002Faudit-logs",{"title":32,"path":33,"stem":34},"Encryption","\u002Fdocs\u002Fcore-features\u002Fencryption","docs\u002F2.core-features\u002Fencryption",{"title":36,"path":37,"stem":38},"Environments","\u002Fdocs\u002Fcore-features\u002Fenvironments","docs\u002F2.core-features\u002Fenvironments",{"title":40,"path":41,"stem":42},"Projects","\u002Fdocs\u002Fcore-features\u002Fprojects","docs\u002F2.core-features\u002Fprojects",{"title":44,"path":45,"stem":46},"Teams","\u002Fdocs\u002Fcore-features\u002Fteams","docs\u002F2.core-features\u002Fteams",{"title":48,"path":49,"stem":50},"API Tokens","\u002Fdocs\u002Fcore-features\u002Ftokens","docs\u002F2.core-features\u002Ftokens",{"title":52,"path":53,"stem":54},"Variables","\u002Fdocs\u002Fcore-features\u002Fvariables","docs\u002F2.core-features\u002Fvariables",false,{"title":57,"icon":58,"path":59,"stem":60,"children":61},"CLI","i-lucide-terminal","\u002Fdocs\u002Fcli","docs\u002F3.cli\u002F2.index",[62,63,67,71,75,79,83,87,91],{"title":15,"path":59,"stem":60},{"title":64,"path":65,"stem":66},"Init","\u002Fdocs\u002Fcli\u002Finit","docs\u002F3.cli\u002F1.init",{"title":68,"path":69,"stem":70},"Run","\u002Fdocs\u002Fcli\u002Frun","docs\u002F3.cli\u002F3.run",{"title":72,"path":73,"stem":74},"Login and Logout","\u002Fdocs\u002Fcli\u002Flogin-logout","docs\u002F3.cli\u002F4.login-logout",{"title":76,"path":77,"stem":78},"Push and Pull","\u002Fdocs\u002Fcli\u002Fpush-pull","docs\u002F3.cli\u002F5.push-pull",{"title":80,"path":81,"stem":82},"Create","\u002Fdocs\u002Fcli\u002Fcreate","docs\u002F3.cli\u002F6.create",{"title":84,"path":85,"stem":86},"Config","\u002Fdocs\u002Fcli\u002Fconfig","docs\u002F3.cli\u002F7.config",{"title":88,"path":89,"stem":90},"Generate","\u002Fdocs\u002Fcli\u002Fgenerate","docs\u002F3.cli\u002F8.generate",{"title":92,"path":93,"stem":94},"Upgrade","\u002Fdocs\u002Fcli\u002Fupgrade","docs\u002F3.cli\u002F9.upgrade",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":55},"Integrations","i-lucide-blocks","\u002Fdocs\u002Fintegrations","docs\u002F4.integrations",[101],{"title":102,"path":103,"stem":104},"Github","\u002Fdocs\u002Fintegrations\u002Fgithub","docs\u002F4.integrations\u002F1.github",{"title":106,"icon":107,"path":108,"stem":109,"children":110,"page":55},"Self-hosting","i-lucide-cloud","\u002Fdocs\u002Fself-hosting","docs\u002F5.self-hosting",[111,115],{"title":112,"path":113,"stem":114},"Deploy on Vercel","\u002Fdocs\u002Fself-hosting\u002Fvercel","docs\u002F5.self-hosting\u002F1.vercel",{"title":116,"path":117,"stem":118},"Environment variables","\u002Fdocs\u002Fself-hosting\u002Fenvironment-variables","docs\u002F5.self-hosting\u002F2.environment-variables",{"title":120,"path":121,"stem":122,"children":123,"icon":129},"Contributing","\u002Fdocs\u002Fcontributing","docs\u002F6.contributing\u002F1.index",[124,125],{"title":15,"path":121,"stem":122},{"title":126,"path":127,"stem":128},"Dev Setup","\u002Fdocs\u002Fcontributing\u002Fdev-setup","docs\u002F6.contributing\u002F2.dev-setup","i-lucide-heart-handshake",{"title":131,"path":132,"stem":133,"children":134,"page":55},"Blog","\u002Fblog","blog",[135,139,143],{"title":136,"path":137,"stem":138},"Introducing Shelve's Blog: Building in Public","\u002Fblog\u002Fintroducing-shelve-blog","blog\u002F01.introducing-shelve-blog",{"title":140,"path":141,"stem":142},"Announcing 2.0","\u002Fblog\u002Fannouncing-2.0","blog\u002F02.announcing-2.0",{"title":144,"path":145,"stem":146},"Crafting Clarity: Introducing the New Shelve Landing Page","\u002Fblog\u002Fnew-landing-page","blog\u002F03.new-landing-page",[148,152,161,172,175,179],{"title":10,"path":11,"stem":12,"children":149,"icon":20},[150,151],{"title":15,"path":11,"stem":12},{"title":17,"path":18,"stem":19},{"title":22,"icon":23,"path":24,"stem":25,"children":153,"page":55},[154,155,156,157,158,159,160],{"title":28,"path":29,"stem":30},{"title":32,"path":33,"stem":34},{"title":36,"path":37,"stem":38},{"title":40,"path":41,"stem":42},{"title":44,"path":45,"stem":46},{"title":48,"path":49,"stem":50},{"title":52,"path":53,"stem":54},{"title":57,"icon":58,"path":59,"stem":60,"children":162,"page":-1},[163,164,165,166,167,168,169,170,171],{"title":15,"path":59,"stem":60},{"title":64,"path":65,"stem":66},{"title":68,"path":69,"stem":70},{"title":72,"path":73,"stem":74},{"title":76,"path":77,"stem":78},{"title":80,"path":81,"stem":82},{"title":84,"path":85,"stem":86},{"title":88,"path":89,"stem":90},{"title":92,"path":93,"stem":94},{"title":96,"icon":97,"path":98,"stem":99,"children":173,"page":55},[174],{"title":102,"path":103,"stem":104},{"title":106,"icon":107,"path":108,"stem":109,"children":176,"page":55},[177,178],{"title":112,"path":113,"stem":114},{"title":116,"path":117,"stem":118},{"title":120,"path":121,"stem":122,"children":180,"icon":129},[181,182],{"title":15,"path":121,"stem":122},{"title":126,"path":127,"stem":128},{"id":184,"title":28,"body":185,"description":474,"extension":475,"meta":476,"navigation":477,"path":29,"seo":478,"stem":30,"__hash__":479},"docs\u002Fdocs\u002F2.core-features\u002Faudit-logs.md",{"type":186,"value":187,"toc":466},"minimark",[188,192,197,200,273,276,340,345,349,352,411,416,441,451,455,462],[189,190,191],"p",{},"Every security-relevant action in Shelve is recorded in an append-only audit log. The feed is scoped to a team and visible to members with at least the required role.",[193,194,196],"h2",{"id":195},"what-gets-logged","What gets logged",[189,198,199],{},"Among others:",[201,202,203,226,237,248,265],"ul",{},[204,205,206,210,211,210,214,210,217,210,220,210,223],"li",{},[207,208,209],"code",{},"team.create",", ",[207,212,213],{},"team.update",[207,215,216],{},"team.delete",[207,218,219],{},"team.member.add",[207,221,222],{},"team.member.role.update",[207,224,225],{},"team.member.remove",[204,227,228,210,231,210,234],{},[207,229,230],{},"project.create",[207,232,233],{},"project.update",[207,235,236],{},"project.delete",[204,238,239,210,242,210,245],{},[207,240,241],{},"environment.create",[207,243,244],{},"environment.update",[207,246,247],{},"environment.delete",[204,249,250,210,253,210,256,210,259,210,262],{},[207,251,252],{},"variable.create",[207,254,255],{},"variable.update",[207,257,258],{},"variable.delete",[207,260,261],{},"variable.pull",[207,263,264],{},"variable.sync.github",[204,266,267,210,270],{},[207,268,269],{},"token.create",[207,271,272],{},"token.delete",[189,274,275],{},"Every entry stores:",[201,277,278,298,308,314,320],{},[204,279,280,281,285,286,289,290,293,294,297],{},"the ",[282,283,284],"strong",{},"actor"," (",[207,287,288],{},"user"," with an id, ",[207,291,292],{},"token"," with the non-secret prefix, or ",[207,295,296],{},"system"," for scheduled jobs);",[204,299,280,300,303,304,307],{},[282,301,302],{},"IP"," (respecting the ",[207,305,306],{},"X-Forwarded-For"," chain on serverless \u002F edge hosts);",[204,309,280,310,313],{},[282,311,312],{},"user agent"," (truncated to 256 chars);",[204,315,280,316,319],{},[282,317,318],{},"resource"," type and id;",[204,321,322,323,326,327,330,331,333,334,330,337,339],{},"an opaque ",[282,324,325],{},"metadata"," JSON blob — for example ",[207,328,329],{},"{ \"scopes\": { \"permissions\": [\"read\"] } }"," on ",[207,332,269],{}," or ",[207,335,336],{},"{ \"count\": 4 }",[207,338,252],{},".",[341,342,344],"callout",{"type":343},"info","Audit writes are fire-and-forget: they never block the originating request. If recording fails, the event is logged to the application logs and the request still succeeds.",[193,346,348],{"id":347},"api","API",[189,350,351],{},"Retrieve logs via the REST API:",[353,354,360],"pre",{"className":355,"code":356,"filename":357,"language":358,"meta":359,"style":359},"language-bash shiki shiki-themes github-light github-dark github-dark","curl https:\u002F\u002Fapp.shelve.cloud\u002Fapi\u002Fteams\u002F\u003Cslug>\u002Faudit-logs \\\n  -H \"Authorization: Bearer $SHELVE_TOKEN\"\n","terminal","bash","",[207,361,362,396],{"__ignoreMap":359},[363,364,367,371,375,379,382,386,389,392],"span",{"class":365,"line":366},"line",1,[363,368,370],{"class":369},"shcOC","curl",[363,372,374],{"class":373},"sfrk1"," https:\u002F\u002Fapp.shelve.cloud\u002Fapi\u002Fteams\u002F",[363,376,378],{"class":377},"so5gQ","\u003C",[363,380,381],{"class":373},"slu",[363,383,385],{"class":384},"slsVL","g",[363,387,388],{"class":377},">",[363,390,391],{"class":373},"\u002Faudit-logs",[363,393,395],{"class":394},"suiK_"," \\\n",[363,397,399,402,405,408],{"class":365,"line":398},2,[363,400,401],{"class":394},"  -H",[363,403,404],{"class":373}," \"Authorization: Bearer ",[363,406,407],{"class":384},"$SHELVE_TOKEN",[363,409,410],{"class":373},"\"\n",[412,413,415],"h3",{"id":414},"query-parameters","Query parameters",[417,418,419,426,433],"field-group",{},[420,421,425],"field",{"name":422,"type":423,"default":424},"limit","number","50","Number of entries to return. Between 1 and 100.",[420,427,429,432],{"name":428,"type":423},"cursor",[207,430,431],{},"id"," of the last entry seen on the previous page. The API returns entries with smaller ids (newest first).",[420,434,437,438,440],{"name":435,"type":436},"action","string","Filter by action name (for example ",[207,439,252],{},"). Exact match.",[189,442,443,444,447,448,339],{},"The response includes a ",[207,445,446],{},"nextCursor"," field — pass it back to fetch the next page until it is ",[207,449,450],{},"null",[193,452,454],{"id":453},"retention","Retention",[189,456,457,458,461],{},"Audit logs are retained indefinitely on the hosted instance. On self-hosted deployments you control the retention policy by pruning the ",[207,459,460],{},"audit_logs"," table directly.",[463,464,465],"style",{},"html pre.shiki code .shcOC, html code.shiki .shcOC{--shiki-light:#6F42C1;--shiki-default:#B392F0;--shiki-dark:#B392F0}html pre.shiki code .sfrk1, html code.shiki .sfrk1{--shiki-light:#032F62;--shiki-default:#9ECBFF;--shiki-dark:#9ECBFF}html pre.shiki code .so5gQ, html code.shiki .so5gQ{--shiki-light:#D73A49;--shiki-default:#F97583;--shiki-dark:#F97583}html pre.shiki code .slsVL, html code.shiki .slsVL{--shiki-light:#24292E;--shiki-default:#E1E4E8;--shiki-dark:#E1E4E8}html pre.shiki code .suiK_, html code.shiki .suiK_{--shiki-light:#005CC5;--shiki-default:#79B8FF;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":359,"searchDepth":398,"depth":398,"links":467},[468,469,473],{"id":195,"depth":398,"text":196},{"id":347,"depth":398,"text":348,"children":470},[471],{"id":414,"depth":472,"text":415},3,{"id":453,"depth":398,"text":454},"Review every privileged action performed on your teams, projects, and secrets.","md",{},true,{"title":28,"description":474},"UNw5mobMSMIL60Q_1Y2x0i4BhzQgYj9kFXVW9leZnXA",[481,483],{"title":17,"path":18,"stem":19,"description":482,"children":-1},"Get started with Shelve in minutes.",{"title":32,"path":33,"stem":34,"description":484,"children":-1},"How Shelve protects secrets at rest and in transit.",1776787533560]