mirror of
https://github.com/LogicLabs-OU/OpenArchiver.git
synced 2026-04-06 00:31:57 +02:00
deploy: 4e0f6ce5df
This commit is contained in:
8
404.html
8
404.html
@@ -3,20 +3,20 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1">
|
||||
<title>404 | Open Archiver Documentation</title>
|
||||
<title>404 | Open Archiver</title>
|
||||
<meta name="description" content="Not Found">
|
||||
<meta name="generator" content="VitePress v1.6.3">
|
||||
<link rel="preload stylesheet" href="/assets/style.L7-rAhYi.css" as="style">
|
||||
<link rel="preload stylesheet" href="/assets/style.3jgUiUT_.css" as="style">
|
||||
<link rel="preload stylesheet" href="/vp-icons.css" as="style">
|
||||
|
||||
<script type="module" src="/assets/app.DguYn8Bw.js"></script>
|
||||
<script type="module" src="/assets/app.DjTtYN4Q.js"></script>
|
||||
<link rel="preload" href="/assets/inter-roman-latin.Di8DUHzh.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<script id="check-dark-mode">(()=>{const e=localStorage.getItem("vitepress-theme-appearance")||"auto",a=window.matchMedia("(prefers-color-scheme: dark)").matches;(!e||e==="auto"?a:e==="dark")&&document.documentElement.classList.add("dark")})();</script>
|
||||
<script id="check-mac-os">document.documentElement.classList.toggle("mac",/Mac|iPhone|iPod|iPad/i.test(navigator.platform));</script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_archived-email.md\":\"BkbaV2Hy\",\"api_auth.md\":\"Du3O3W7h\",\"api_authentication.md\":\"BeVpHL1b\",\"api_dashboard.md\":\"CBdDRqLA\",\"api_index.md\":\"rAxPnnFp\",\"api_ingestion.md\":\"Db0jMzxp\",\"api_search.md\":\"KKtP7fd6\",\"api_storage.md\":\"DJf0CH38\",\"index.md\":\"Jke24r4b\",\"services_index.md\":\"DfyQfsBc\",\"services_storage-service.md\":\"xOqM9CWx\",\"summary.md\":\"DsFfZpsz\",\"user-guides_email-providers_google-workspace.md\":\"CWhO43nR\",\"user-guides_email-providers_imap.md\":\"BcXBEq43\",\"user-guides_email-providers_index.md\":\"DY3ytyxv\",\"user-guides_email-providers_microsoft-365.md\":\"C4O8w9wT\",\"user-guides_installation.md\":\"D5Jetfyl\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Open Archiver Documentation\",\"description\":\"Official documentation for the Open Archiver project.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"User Guides\",\"link\":\"/user-guides/email-providers/\"}],\"sidebar\":[{\"text\":\"User Guides\",\"items\":[{\"text\":\"Get Started\",\"link\":\"/\"},{\"text\":\"Installation\",\"link\":\"/user-guides/installation\"},{\"text\":\"Email Providers\",\"link\":\"/user-guides/email-providers/\",\"collapsed\":true,\"items\":[{\"text\":\"Google Workspace\",\"link\":\"/user-guides/email-providers/google-workspace\"},{\"text\":\"Generic IMAP Server\",\"link\":\"/user-guides/email-providers/imap\"},{\"text\":\"Microsoft 365\",\"link\":\"/user-guides/email-providers/microsoft-365\"}]}]},{\"text\":\"API Reference\",\"items\":[{\"text\":\"Overview\",\"link\":\"/api/\"},{\"text\":\"Authentication\",\"link\":\"/api/authentication\"},{\"text\":\"Auth\",\"link\":\"/api/auth\"},{\"text\":\"Archived Email\",\"link\":\"/api/archived-email\"},{\"text\":\"Dashboard\",\"link\":\"/api/dashboard\"},{\"text\":\"Ingestion\",\"link\":\"/api/ingestion\"},{\"text\":\"Search\",\"link\":\"/api/search\"},{\"text\":\"Storage\",\"link\":\"/api/storage\"}]},{\"text\":\"Services\",\"items\":[{\"text\":\"Overview\",\"link\":\"/services/\"},{\"text\":\"Storage Service\",\"link\":\"/services/storage-service\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_archived-email.md\":\"Di9i_OKb\",\"api_auth.md\":\"Kt3iNEMn\",\"api_authentication.md\":\"DDCP-z1j\",\"api_dashboard.md\":\"CqvOiGVx\",\"api_index.md\":\"DFnFK07E\",\"api_ingestion.md\":\"DOeFHoQv\",\"api_search.md\":\"BRCIJTXq\",\"api_storage.md\":\"DKUKvFrO\",\"index.md\":\"9PKJf5H1\",\"services_index.md\":\"BLn224J3\",\"services_storage-service.md\":\"Dqpyxk77\",\"summary.md\":\"5seSND4L\",\"user-guides_email-providers_google-workspace.md\":\"BWo_12De\",\"user-guides_email-providers_imap.md\":\"Cdk3vG_S\",\"user-guides_email-providers_index.md\":\"DPaSFiTO\",\"user-guides_email-providers_microsoft-365.md\":\"QHHVfYxW\",\"user-guides_installation.md\":\"Lx-5aly3\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"en-US\",\"dir\":\"ltr\",\"title\":\"Open Archiver\",\"description\":\"Official documentation for the Open Archiver project.\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"search\":{\"provider\":\"local\"},\"logo\":{\"src\":\"./assets/logo-sq.svg\"},\"nav\":[{\"text\":\"Home\",\"link\":\"/\"},{\"text\":\"User Guides\",\"link\":\"/user-guides/email-providers/\"}],\"sidebar\":[{\"text\":\"User Guides\",\"items\":[{\"text\":\"Get Started\",\"link\":\"/\"},{\"text\":\"Installation\",\"link\":\"/user-guides/installation\"},{\"text\":\"Email Providers\",\"link\":\"/user-guides/email-providers/\",\"collapsed\":true,\"items\":[{\"text\":\"Google Workspace\",\"link\":\"/user-guides/email-providers/google-workspace\"},{\"text\":\"Generic IMAP Server\",\"link\":\"/user-guides/email-providers/imap\"},{\"text\":\"Microsoft 365\",\"link\":\"/user-guides/email-providers/microsoft-365\"}]}]},{\"text\":\"API Reference\",\"items\":[{\"text\":\"Overview\",\"link\":\"/api/\"},{\"text\":\"Authentication\",\"link\":\"/api/authentication\"},{\"text\":\"Auth\",\"link\":\"/api/auth\"},{\"text\":\"Archived Email\",\"link\":\"/api/archived-email\"},{\"text\":\"Dashboard\",\"link\":\"/api/dashboard\"},{\"text\":\"Ingestion\",\"link\":\"/api/ingestion\"},{\"text\":\"Search\",\"link\":\"/api/search\"},{\"text\":\"Storage\",\"link\":\"/api/storage\"}]},{\"text\":\"Services\",\"items\":[{\"text\":\"Overview\",\"link\":\"/services/\"},{\"text\":\"Storage Service\",\"link\":\"/services/storage-service\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
16
SUMMARY.html
16
SUMMARY.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as a,c as i,o as r,ae as t}from"./chunks/framework.Cd-3tpCq.js";const f=JSON.parse('{"title":"Table of contents","description":"","frontmatter":{},"headers":[],"relativePath":"SUMMARY.md","filePath":"SUMMARY.md"}'),l={name:"SUMMARY.md"};function o(s,e,n,c,u,d){return r(),i("div",null,e[0]||(e[0]=[t('<h1 id="table-of-contents" tabindex="-1">Table of contents <a class="header-anchor" href="#table-of-contents" aria-label="Permalink to "Table of contents""></a></h1><h2 id="user-guides" tabindex="-1">User guides <a class="header-anchor" href="#user-guides" aria-label="Permalink to "User guides""></a></h2><ul><li><a href="./">Get started</a></li><li><a href="./user-guides/installation.html">Installation</a></li><li><a href="./user-guides/email-providers/">email-providers</a><ul><li><a href="./user-guides/email-providers/google-workspace.html">Connecting to Google Workspace</a></li><li><a href="./user-guides/email-providers/imap.html">Connecting to a Generic IMAP Server</a></li><li><a href="./user-guides/email-providers/microsoft-365.html">Connecting to Microsoft 365</a></li></ul></li></ul><hr><ul><li><a href="./api/">api</a><ul><li><a href="./api/ingestion.html">Ingestion Sources API Documentation</a></li></ul></li><li><a href="./services/">services</a><ul><li><a href="./services/storage-service.html">Pluggable Storage Service (StorageService)</a></li></ul></li></ul>',5)]))}const m=a(l,[["render",o]]);export{f as __pageData,m as default};
|
||||
import{_ as a,c as i,o as r,ag as t}from"./chunks/framework.S-Qvb3wi.js";const f=JSON.parse('{"title":"Table of contents","description":"","frontmatter":{},"headers":[],"relativePath":"SUMMARY.md","filePath":"SUMMARY.md"}'),l={name:"SUMMARY.md"};function o(s,e,n,c,u,d){return r(),i("div",null,e[0]||(e[0]=[t('<h1 id="table-of-contents" tabindex="-1">Table of contents <a class="header-anchor" href="#table-of-contents" aria-label="Permalink to "Table of contents""></a></h1><h2 id="user-guides" tabindex="-1">User guides <a class="header-anchor" href="#user-guides" aria-label="Permalink to "User guides""></a></h2><ul><li><a href="./">Get started</a></li><li><a href="./user-guides/installation.html">Installation</a></li><li><a href="./user-guides/email-providers/">email-providers</a><ul><li><a href="./user-guides/email-providers/google-workspace.html">Connecting to Google Workspace</a></li><li><a href="./user-guides/email-providers/imap.html">Connecting to a Generic IMAP Server</a></li><li><a href="./user-guides/email-providers/microsoft-365.html">Connecting to Microsoft 365</a></li></ul></li></ul><hr><ul><li><a href="./api/">api</a><ul><li><a href="./api/ingestion.html">Ingestion Sources API Documentation</a></li></ul></li><li><a href="./services/">services</a><ul><li><a href="./services/storage-service.html">Pluggable Storage Service (StorageService)</a></li></ul></li></ul>',5)]))}const m=a(l,[["render",o]]);export{f as __pageData,m as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,c as i,o as r,ae as t}from"./chunks/framework.Cd-3tpCq.js";const f=JSON.parse('{"title":"Table of contents","description":"","frontmatter":{},"headers":[],"relativePath":"SUMMARY.md","filePath":"SUMMARY.md"}'),l={name:"SUMMARY.md"};function o(s,e,n,c,u,d){return r(),i("div",null,e[0]||(e[0]=[t("",5)]))}const m=a(l,[["render",o]]);export{f as __pageData,m as default};
|
||||
import{_ as a,c as i,o as r,ag as t}from"./chunks/framework.S-Qvb3wi.js";const f=JSON.parse('{"title":"Table of contents","description":"","frontmatter":{},"headers":[],"relativePath":"SUMMARY.md","filePath":"SUMMARY.md"}'),l={name:"SUMMARY.md"};function o(s,e,n,c,u,d){return r(),i("div",null,e[0]||(e[0]=[t("",5)]))}const m=a(l,[["render",o]]);export{f as __pageData,m as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as s,c as a,o as t,ae as e}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Archived Email Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/archived-email.md","filePath":"api/archived-email.md"}'),n={name:"api/archived-email.md"};function l(h,i,r,p,d,k){return t(),a("div",null,i[0]||(i[0]=[e(`<h1 id="archived-email-service-api" tabindex="-1">Archived Email Service API <a class="header-anchor" href="#archived-email-service-api" aria-label="Permalink to "Archived Email Service API""></a></h1><p>The Archived Email Service is responsible for retrieving archived emails and their details from the database and storage.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-archived-emails-ingestion-source-ingestionsourceid" tabindex="-1">GET /api/v1/archived-emails/ingestion-source/:ingestionSourceId <a class="header-anchor" href="#get-api-v1-archived-emails-ingestion-source-ingestionsourceid" aria-label="Permalink to "GET /api/v1/archived-emails/ingestion-source/:ingestionSourceId""></a></h3><p>Retrieves a paginated list of archived emails for a specific ingestion source.</p><p><strong>Access:</strong> Authenticated</p><h4 id="url-parameters" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters" aria-label="Permalink to "URL Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>ingestionSourceId</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The ID of the ingestion source to get emails for.</td></tr></tbody></table><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th><th style="text-align:left;">Default</th></tr></thead><tbody><tr><td style="text-align:left;"><code>page</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The page number for pagination.</td><td style="text-align:left;">1</td></tr><tr><td style="text-align:left;"><code>limit</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The number of items per page.</td><td style="text-align:left;">10</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> A paginated list of archived emails.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
import{_ as s,c as a,o as t,ag as e}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Archived Email Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/archived-email.md","filePath":"api/archived-email.md"}'),n={name:"api/archived-email.md"};function l(h,i,r,p,d,k){return t(),a("div",null,i[0]||(i[0]=[e(`<h1 id="archived-email-service-api" tabindex="-1">Archived Email Service API <a class="header-anchor" href="#archived-email-service-api" aria-label="Permalink to "Archived Email Service API""></a></h1><p>The Archived Email Service is responsible for retrieving archived emails and their details from the database and storage.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-archived-emails-ingestion-source-ingestionsourceid" tabindex="-1">GET /api/v1/archived-emails/ingestion-source/:ingestionSourceId <a class="header-anchor" href="#get-api-v1-archived-emails-ingestion-source-ingestionsourceid" aria-label="Permalink to "GET /api/v1/archived-emails/ingestion-source/:ingestionSourceId""></a></h3><p>Retrieves a paginated list of archived emails for a specific ingestion source.</p><p><strong>Access:</strong> Authenticated</p><h4 id="url-parameters" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters" aria-label="Permalink to "URL Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>ingestionSourceId</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The ID of the ingestion source to get emails for.</td></tr></tbody></table><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th><th style="text-align:left;">Default</th></tr></thead><tbody><tr><td style="text-align:left;"><code>page</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The page number for pagination.</td><td style="text-align:left;">1</td></tr><tr><td style="text-align:left;"><code>limit</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The number of items per page.</td><td style="text-align:left;">10</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> A paginated list of archived emails.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "items"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"email-id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as s,c as a,o as t,ae as e}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Archived Email Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/archived-email.md","filePath":"api/archived-email.md"}'),n={name:"api/archived-email.md"};function l(h,i,r,p,d,k){return t(),a("div",null,i[0]||(i[0]=[e("",27)]))}const g=s(n,[["render",l]]);export{E as __pageData,g as default};
|
||||
import{_ as s,c as a,o as t,ag as e}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Archived Email Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/archived-email.md","filePath":"api/archived-email.md"}'),n={name:"api/archived-email.md"};function l(h,i,r,p,d,k){return t(),a("div",null,i[0]||(i[0]=[e("",27)]))}const g=s(n,[["render",l]]);export{E as __pageData,g as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as i,c as e,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Auth Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/auth.md","filePath":"api/auth.md"}'),n={name:"api/auth.md"};function o(l,s,r,h,p,d){return a(),e("div",null,s[0]||(s[0]=[t(`<h1 id="auth-service-api" tabindex="-1">Auth Service API <a class="header-anchor" href="#auth-service-api" aria-label="Permalink to "Auth Service API""></a></h1><p>The Auth Service is responsible for handling user authentication, including login and token verification.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><h3 id="post-api-v1-auth-login" tabindex="-1">POST /api/v1/auth/login <a class="header-anchor" href="#post-api-v1-auth-login" aria-label="Permalink to "POST /api/v1/auth/login""></a></h3><p>Authenticates a user and returns a JWT if the credentials are valid.</p><p><strong>Access:</strong> Public</p><p><strong>Rate Limiting:</strong> This endpoint is rate-limited to prevent brute-force attacks.</p><h4 id="request-body" tabindex="-1">Request Body <a class="header-anchor" href="#request-body" aria-label="Permalink to "Request Body""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Field</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>email</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The user's email address.</td></tr><tr><td style="text-align:left;"><code>password</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The user's password.</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> Authentication successful.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.S-Qvb3wi.js";const u=JSON.parse('{"title":"Auth Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/auth.md","filePath":"api/auth.md"}'),n={name:"api/auth.md"};function o(l,s,r,h,p,d){return a(),e("div",null,s[0]||(s[0]=[t(`<h1 id="auth-service-api" tabindex="-1">Auth Service API <a class="header-anchor" href="#auth-service-api" aria-label="Permalink to "Auth Service API""></a></h1><p>The Auth Service is responsible for handling user authentication, including login and token verification.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><h3 id="post-api-v1-auth-login" tabindex="-1">POST /api/v1/auth/login <a class="header-anchor" href="#post-api-v1-auth-login" aria-label="Permalink to "POST /api/v1/auth/login""></a></h3><p>Authenticates a user and returns a JWT if the credentials are valid.</p><p><strong>Access:</strong> Public</p><p><strong>Rate Limiting:</strong> This endpoint is rate-limited to prevent brute-force attacks.</p><h4 id="request-body" tabindex="-1">Request Body <a class="header-anchor" href="#request-body" aria-label="Permalink to "Request Body""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Field</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>email</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The user's email address.</td></tr><tr><td style="text-align:left;"><code>password</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The user's password.</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> Authentication successful.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "accessToken"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"your.jwt.token"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "user"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user-id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as i,c as e,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Auth Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/auth.md","filePath":"api/auth.md"}'),n={name:"api/auth.md"};function o(l,s,r,h,p,d){return a(),e("div",null,s[0]||(s[0]=[t("",21)]))}const g=i(n,[["render",o]]);export{u as __pageData,g as default};
|
||||
import{_ as i,c as e,o as a,ag as t}from"./chunks/framework.S-Qvb3wi.js";const u=JSON.parse('{"title":"Auth Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/auth.md","filePath":"api/auth.md"}'),n={name:"api/auth.md"};function o(l,s,r,h,p,d){return a(),e("div",null,s[0]||(s[0]=[t("",21)]))}const g=i(n,[["render",o]]);export{u as __pageData,g as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as i,c as a,o as t,ae as e}from"./chunks/framework.Cd-3tpCq.js";const c=JSON.parse('{"title":"API Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"api/authentication.md","filePath":"api/authentication.md"}'),n={name:"api/authentication.md"};function p(h,s,l,o,r,k){return t(),a("div",null,s[0]||(s[0]=[e(`<h1 id="api-authentication" tabindex="-1">API Authentication <a class="header-anchor" href="#api-authentication" aria-label="Permalink to "API Authentication""></a></h1><p>To access protected API endpoints, you need to include a JSON Web Token (JWT) in the <code>Authorization</code> header of your requests.</p><h2 id="obtaining-a-jwt" tabindex="-1">Obtaining a JWT <a class="header-anchor" href="#obtaining-a-jwt" aria-label="Permalink to "Obtaining a JWT""></a></h2><p>First, you need to authenticate with the <code>/api/v1/auth/login</code> endpoint by providing your email and password. If the credentials are correct, the API will return an <code>accessToken</code>.</p><p><strong>Request:</strong></p><div class="language-http vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">http</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">POST</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /api/v1/auth/login</span></span>
|
||||
import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.S-Qvb3wi.js";const c=JSON.parse('{"title":"API Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"api/authentication.md","filePath":"api/authentication.md"}'),n={name:"api/authentication.md"};function p(h,s,l,o,r,k){return t(),a("div",null,s[0]||(s[0]=[e(`<h1 id="api-authentication" tabindex="-1">API Authentication <a class="header-anchor" href="#api-authentication" aria-label="Permalink to "API Authentication""></a></h1><p>To access protected API endpoints, you need to include a JSON Web Token (JWT) in the <code>Authorization</code> header of your requests.</p><h2 id="obtaining-a-jwt" tabindex="-1">Obtaining a JWT <a class="header-anchor" href="#obtaining-a-jwt" aria-label="Permalink to "Obtaining a JWT""></a></h2><p>First, you need to authenticate with the <code>/api/v1/auth/login</code> endpoint by providing your email and password. If the credentials are correct, the API will return an <code>accessToken</code>.</p><p><strong>Request:</strong></p><div class="language-http vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">http</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">POST</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /api/v1/auth/login</span></span>
|
||||
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">Content-Type</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> application/json</span></span>
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as i,c as a,o as t,ae as e}from"./chunks/framework.Cd-3tpCq.js";const c=JSON.parse('{"title":"API Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"api/authentication.md","filePath":"api/authentication.md"}'),n={name:"api/authentication.md"};function p(h,s,l,o,r,k){return t(),a("div",null,s[0]||(s[0]=[e("",19)]))}const u=i(n,[["render",p]]);export{c as __pageData,u as default};
|
||||
import{_ as i,c as a,o as t,ag as e}from"./chunks/framework.S-Qvb3wi.js";const c=JSON.parse('{"title":"API Authentication","description":"","frontmatter":{},"headers":[],"relativePath":"api/authentication.md","filePath":"api/authentication.md"}'),n={name:"api/authentication.md"};function p(h,s,l,o,r,k){return t(),a("div",null,s[0]||(s[0]=[e("",19)]))}const u=i(n,[["render",p]]);export{c as __pageData,u as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Dashboard Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/dashboard.md","filePath":"api/dashboard.md"}'),e={name:"api/dashboard.md"};function h(p,s,l,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t(`<h1 id="dashboard-service-api" tabindex="-1">Dashboard Service API <a class="header-anchor" href="#dashboard-service-api" aria-label="Permalink to "Dashboard Service API""></a></h1><p>The Dashboard Service provides endpoints for retrieving statistics and data for the main dashboard.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-dashboard-stats" tabindex="-1">GET /api/v1/dashboard/stats <a class="header-anchor" href="#get-api-v1-dashboard-stats" aria-label="Permalink to "GET /api/v1/dashboard/stats""></a></h3><p>Retrieves overall statistics, including the total number of archived emails, total storage used, and the number of failed ingestions in the last 7 days.</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An object containing the dashboard statistics.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
import{_ as i,c as a,o as n,ag as t}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Dashboard Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/dashboard.md","filePath":"api/dashboard.md"}'),e={name:"api/dashboard.md"};function h(p,s,l,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t(`<h1 id="dashboard-service-api" tabindex="-1">Dashboard Service API <a class="header-anchor" href="#dashboard-service-api" aria-label="Permalink to "Dashboard Service API""></a></h1><p>The Dashboard Service provides endpoints for retrieving statistics and data for the main dashboard.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-dashboard-stats" tabindex="-1">GET /api/v1/dashboard/stats <a class="header-anchor" href="#get-api-v1-dashboard-stats" aria-label="Permalink to "GET /api/v1/dashboard/stats""></a></h3><p>Retrieves overall statistics, including the total number of archived emails, total storage used, and the number of failed ingestions in the last 7 days.</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An object containing the dashboard statistics.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "totalEmailsArchived"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">12345</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "totalStorageUsed"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">54321098</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "failedIngestionsLast7Days"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">3</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as i,c as a,o as n,ae as t}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Dashboard Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/dashboard.md","filePath":"api/dashboard.md"}'),e={name:"api/dashboard.md"};function h(p,s,l,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const g=i(e,[["render",h]]);export{E as __pageData,g as default};
|
||||
import{_ as i,c as a,o as n,ag as t}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Dashboard Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/dashboard.md","filePath":"api/dashboard.md"}'),e={name:"api/dashboard.md"};function h(p,s,l,o,r,k){return n(),a("div",null,s[0]||(s[0]=[t("",29)]))}const g=i(e,[["render",h]]);export{E as __pageData,g as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,c as t,o as i,ae as r}from"./chunks/framework.Cd-3tpCq.js";const p=JSON.parse('{"title":"API Overview","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md"}'),o={name:"api/index.md"};function n(s,e,h,l,d,c){return i(),t("div",null,e[0]||(e[0]=[r('<h1 id="api-overview" tabindex="-1">API Overview <a class="header-anchor" href="#api-overview" aria-label="Permalink to "API Overview""></a></h1><p>Welcome to the Open Archiver API documentation. This section provides detailed information about the available API endpoints.</p><p>All API endpoints are prefixed with <code>/api/v1</code>.</p><h2 id="authentication" tabindex="-1">Authentication <a class="header-anchor" href="#authentication" aria-label="Permalink to "Authentication""></a></h2><p>Before making requests to protected endpoints, you must authenticate with the API. See the <a href="./authentication.html">Authentication Guide</a> for details on how to obtain and use API tokens.</p><h2 id="api-services" tabindex="-1">API Services <a class="header-anchor" href="#api-services" aria-label="Permalink to "API Services""></a></h2><ul><li><a href="./auth.html"><strong>Auth Service</strong></a>: Handles user authentication.</li><li><a href="./archived-email.html"><strong>Archived Email Service</strong></a>: Manages archived emails.</li><li><a href="./dashboard.html"><strong>Dashboard Service</strong></a>: Provides data for the main dashboard.</li><li><a href="./ingestion.html"><strong>Ingestion Service</strong></a>: Manages email ingestion sources.</li><li><a href="./search.html"><strong>Search Service</strong></a>: Handles email search functionality.</li><li><a href="./storage.html"><strong>Storage Service</strong></a>: Manages file storage and downloads.</li></ul>',7)]))}const m=a(o,[["render",n]]);export{p as __pageData,m as default};
|
||||
import{_ as a,c as t,o as i,ag as r}from"./chunks/framework.S-Qvb3wi.js";const p=JSON.parse('{"title":"API Overview","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md"}'),o={name:"api/index.md"};function n(s,e,h,l,d,c){return i(),t("div",null,e[0]||(e[0]=[r('<h1 id="api-overview" tabindex="-1">API Overview <a class="header-anchor" href="#api-overview" aria-label="Permalink to "API Overview""></a></h1><p>Welcome to the Open Archiver API documentation. This section provides detailed information about the available API endpoints.</p><p>All API endpoints are prefixed with <code>/api/v1</code>.</p><h2 id="authentication" tabindex="-1">Authentication <a class="header-anchor" href="#authentication" aria-label="Permalink to "Authentication""></a></h2><p>Before making requests to protected endpoints, you must authenticate with the API. See the <a href="./authentication.html">Authentication Guide</a> for details on how to obtain and use API tokens.</p><h2 id="api-services" tabindex="-1">API Services <a class="header-anchor" href="#api-services" aria-label="Permalink to "API Services""></a></h2><ul><li><a href="./auth.html"><strong>Auth Service</strong></a>: Handles user authentication.</li><li><a href="./archived-email.html"><strong>Archived Email Service</strong></a>: Manages archived emails.</li><li><a href="./dashboard.html"><strong>Dashboard Service</strong></a>: Provides data for the main dashboard.</li><li><a href="./ingestion.html"><strong>Ingestion Service</strong></a>: Manages email ingestion sources.</li><li><a href="./search.html"><strong>Search Service</strong></a>: Handles email search functionality.</li><li><a href="./storage.html"><strong>Storage Service</strong></a>: Manages file storage and downloads.</li></ul>',7)]))}const m=a(o,[["render",n]]);export{p as __pageData,m as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,c as t,o as i,ae as r}from"./chunks/framework.Cd-3tpCq.js";const p=JSON.parse('{"title":"API Overview","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md"}'),o={name:"api/index.md"};function n(s,e,h,l,d,c){return i(),t("div",null,e[0]||(e[0]=[r("",7)]))}const m=a(o,[["render",n]]);export{p as __pageData,m as default};
|
||||
import{_ as a,c as t,o as i,ag as r}from"./chunks/framework.S-Qvb3wi.js";const p=JSON.parse('{"title":"API Overview","description":"","frontmatter":{},"headers":[],"relativePath":"api/index.md","filePath":"api/index.md"}'),o={name:"api/index.md"};function n(s,e,h,l,d,c){return i(),t("div",null,e[0]||(e[0]=[r("",7)]))}const m=a(o,[["render",n]]);export{p as __pageData,m as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as t,c as s,o as i,ae as a}from"./chunks/framework.Cd-3tpCq.js";const c=JSON.parse('{"title":"Ingestion Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function r(o,e,l,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a(`<h1 id="ingestion-service-api" tabindex="-1">Ingestion Service API <a class="header-anchor" href="#ingestion-service-api" aria-label="Permalink to "Ingestion Service API""></a></h1><p>The Ingestion Service manages ingestion sources, which are configurations for connecting to email providers and importing emails.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="post-api-v1-ingestion" tabindex="-1">POST /api/v1/ingestion <a class="header-anchor" href="#post-api-v1-ingestion" aria-label="Permalink to "POST /api/v1/ingestion""></a></h3><p>Creates a new ingestion source.</p><p><strong>Access:</strong> Authenticated</p><h4 id="request-body" tabindex="-1">Request Body <a class="header-anchor" href="#request-body" aria-label="Permalink to "Request Body""></a></h4><p>The request body should be a <code>CreateIngestionSourceDto</code> object.</p><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> CreateIngestionSourceDto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||||
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.S-Qvb3wi.js";const c=JSON.parse('{"title":"Ingestion Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function r(o,e,l,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a(`<h1 id="ingestion-service-api" tabindex="-1">Ingestion Service API <a class="header-anchor" href="#ingestion-service-api" aria-label="Permalink to "Ingestion Service API""></a></h1><p>The Ingestion Service manages ingestion sources, which are configurations for connecting to email providers and importing emails.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="post-api-v1-ingestion" tabindex="-1">POST /api/v1/ingestion <a class="header-anchor" href="#post-api-v1-ingestion" aria-label="Permalink to "POST /api/v1/ingestion""></a></h3><p>Creates a new ingestion source.</p><p><strong>Access:</strong> Authenticated</p><h4 id="request-body" tabindex="-1">Request Body <a class="header-anchor" href="#request-body" aria-label="Permalink to "Request Body""></a></h4><p>The request body should be a <code>CreateIngestionSourceDto</code> object.</p><div class="language-typescript vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">typescript</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">interface</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> CreateIngestionSourceDto</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> name</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> string</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||||
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> provider</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'google'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'microsoft'</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> |</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'generic_imap'</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||||
<span class="line"><span style="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> providerConfig</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> IngestionCredentials</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">;</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as t,c as s,o as i,ae as a}from"./chunks/framework.Cd-3tpCq.js";const c=JSON.parse('{"title":"Ingestion Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function r(o,e,l,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a("",62)]))}const k=t(n,[["render",r]]);export{c as __pageData,k as default};
|
||||
import{_ as t,c as s,o as i,ag as a}from"./chunks/framework.S-Qvb3wi.js";const c=JSON.parse('{"title":"Ingestion Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function r(o,e,l,h,p,d){return i(),s("div",null,e[0]||(e[0]=[a("",62)]))}const k=t(n,[["render",r]]);export{c as __pageData,k as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as t,c as i,o as a,ae as e}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Search Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/search.md","filePath":"api/search.md"}'),n={name:"api/search.md"};function l(h,s,r,p,d,k){return a(),i("div",null,s[0]||(s[0]=[e(`<h1 id="search-service-api" tabindex="-1">Search Service API <a class="header-anchor" href="#search-service-api" aria-label="Permalink to "Search Service API""></a></h1><p>The Search Service provides an endpoint for searching indexed emails.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-search" tabindex="-1">GET /api/v1/search <a class="header-anchor" href="#get-api-v1-search" aria-label="Permalink to "GET /api/v1/search""></a></h3><p>Performs a search query against the indexed emails.</p><p><strong>Access:</strong> Authenticated</p><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th><th style="text-align:left;">Default</th></tr></thead><tbody><tr><td style="text-align:left;"><code>keywords</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The search query.</td><td style="text-align:left;"></td></tr><tr><td style="text-align:left;"><code>page</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The page number for pagination.</td><td style="text-align:left;">1</td></tr><tr><td style="text-align:left;"><code>limit</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The number of items per page.</td><td style="text-align:left;">10</td></tr><tr><td style="text-align:left;"><code>matchingStrategy</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The matching strategy to use (<code>all</code> or <code>last</code>).</td><td style="text-align:left;"><code>last</code></td></tr><tr><td style="text-align:left;"><code>filters</code></td><td style="text-align:left;">object</td><td style="text-align:left;">Key-value pairs for filtering results (e.g., <code>from=user@example.com</code>).</td><td style="text-align:left;"></td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> A search result object.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
import{_ as t,c as i,o as a,ag as e}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Search Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/search.md","filePath":"api/search.md"}'),n={name:"api/search.md"};function l(h,s,r,p,d,k){return a(),i("div",null,s[0]||(s[0]=[e(`<h1 id="search-service-api" tabindex="-1">Search Service API <a class="header-anchor" href="#search-service-api" aria-label="Permalink to "Search Service API""></a></h1><p>The Search Service provides an endpoint for searching indexed emails.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-search" tabindex="-1">GET /api/v1/search <a class="header-anchor" href="#get-api-v1-search" aria-label="Permalink to "GET /api/v1/search""></a></h3><p>Performs a search query against the indexed emails.</p><p><strong>Access:</strong> Authenticated</p><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th><th style="text-align:left;">Default</th></tr></thead><tbody><tr><td style="text-align:left;"><code>keywords</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The search query.</td><td style="text-align:left;"></td></tr><tr><td style="text-align:left;"><code>page</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The page number for pagination.</td><td style="text-align:left;">1</td></tr><tr><td style="text-align:left;"><code>limit</code></td><td style="text-align:left;">number</td><td style="text-align:left;">The number of items per page.</td><td style="text-align:left;">10</td></tr><tr><td style="text-align:left;"><code>matchingStrategy</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The matching strategy to use (<code>all</code> or <code>last</code>).</td><td style="text-align:left;"><code>last</code></td></tr><tr><td style="text-align:left;"><code>filters</code></td><td style="text-align:left;">object</td><td style="text-align:left;">Key-value pairs for filtering results (e.g., <code>from=user@example.com</code>).</td><td style="text-align:left;"></td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> A search result object.</p><div class="language-json vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">json</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">{</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hits"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"email-id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as t,c as i,o as a,ae as e}from"./chunks/framework.Cd-3tpCq.js";const E=JSON.parse('{"title":"Search Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/search.md","filePath":"api/search.md"}'),n={name:"api/search.md"};function l(h,s,r,p,d,k){return a(),i("div",null,s[0]||(s[0]=[e("",11)]))}const c=t(n,[["render",l]]);export{E as __pageData,c as default};
|
||||
import{_ as t,c as i,o as a,ag as e}from"./chunks/framework.S-Qvb3wi.js";const E=JSON.parse('{"title":"Search Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/search.md","filePath":"api/search.md"}'),n={name:"api/search.md"};function l(h,s,r,p,d,k){return a(),i("div",null,s[0]||(s[0]=[e("",11)]))}const c=t(n,[["render",l]]);export{E as __pageData,c as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as t,c as a,o as r,ae as o}from"./chunks/framework.Cd-3tpCq.js";const g=JSON.parse('{"title":"Storage Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/storage.md","filePath":"api/storage.md"}'),i={name:"api/storage.md"};function s(n,e,l,d,h,p){return r(),a("div",null,e[0]||(e[0]=[o('<h1 id="storage-service-api" tabindex="-1">Storage Service API <a class="header-anchor" href="#storage-service-api" aria-label="Permalink to "Storage Service API""></a></h1><p>The Storage Service provides an endpoint for downloading files from the configured storage provider.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-storage-download" tabindex="-1">GET /api/v1/storage/download <a class="header-anchor" href="#get-api-v1-storage-download" aria-label="Permalink to "GET /api/v1/storage/download""></a></h3><p>Downloads a file from the storage.</p><p><strong>Access:</strong> Authenticated</p><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>path</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The path to the file within the storage provider.</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><strong>200 OK:</strong> The file stream.</li><li><strong>400 Bad Request:</strong> File path is required or invalid.</li><li><strong>404 Not Found:</strong> File not found.</li><li><strong>500 Internal Server Error:</strong> An unexpected error occurred.</li></ul>',11)]))}const u=t(i,[["render",s]]);export{g as __pageData,u as default};
|
||||
import{_ as t,c as a,o as r,ag as o}from"./chunks/framework.S-Qvb3wi.js";const g=JSON.parse('{"title":"Storage Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/storage.md","filePath":"api/storage.md"}'),i={name:"api/storage.md"};function s(n,e,l,d,h,p){return r(),a("div",null,e[0]||(e[0]=[o('<h1 id="storage-service-api" tabindex="-1">Storage Service API <a class="header-anchor" href="#storage-service-api" aria-label="Permalink to "Storage Service API""></a></h1><p>The Storage Service provides an endpoint for downloading files from the configured storage provider.</p><h2 id="endpoints" tabindex="-1">Endpoints <a class="header-anchor" href="#endpoints" aria-label="Permalink to "Endpoints""></a></h2><p>All endpoints in this service require authentication.</p><h3 id="get-api-v1-storage-download" tabindex="-1">GET /api/v1/storage/download <a class="header-anchor" href="#get-api-v1-storage-download" aria-label="Permalink to "GET /api/v1/storage/download""></a></h3><p>Downloads a file from the storage.</p><p><strong>Access:</strong> Authenticated</p><h4 id="query-parameters" tabindex="-1">Query Parameters <a class="header-anchor" href="#query-parameters" aria-label="Permalink to "Query Parameters""></a></h4><table tabindex="0"><thead><tr><th style="text-align:left;">Parameter</th><th style="text-align:left;">Type</th><th style="text-align:left;">Description</th></tr></thead><tbody><tr><td style="text-align:left;"><code>path</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The path to the file within the storage provider.</td></tr></tbody></table><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><strong>200 OK:</strong> The file stream.</li><li><strong>400 Bad Request:</strong> File path is required or invalid.</li><li><strong>404 Not Found:</strong> File not found.</li><li><strong>500 Internal Server Error:</strong> An unexpected error occurred.</li></ul>',11)]))}const u=t(i,[["render",s]]);export{g as __pageData,u as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as t,c as a,o as r,ae as o}from"./chunks/framework.Cd-3tpCq.js";const g=JSON.parse('{"title":"Storage Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/storage.md","filePath":"api/storage.md"}'),i={name:"api/storage.md"};function s(n,e,l,d,h,p){return r(),a("div",null,e[0]||(e[0]=[o("",11)]))}const u=t(i,[["render",s]]);export{g as __pageData,u as default};
|
||||
import{_ as t,c as a,o as r,ag as o}from"./chunks/framework.S-Qvb3wi.js";const g=JSON.parse('{"title":"Storage Service API","description":"","frontmatter":{},"headers":[],"relativePath":"api/storage.md","filePath":"api/storage.md"}'),i={name:"api/storage.md"};function s(n,e,l,d,h,p){return r(),a("div",null,e[0]||(e[0]=[o("",11)]))}const u=t(i,[["render",s]]);export{g as __pageData,u as default};
|
||||
@@ -1 +1 @@
|
||||
import{t as p}from"./chunks/theme.D5-fWCd8.js";import{R as s,a0 as i,a1 as u,a2 as c,a3 as l,a4 as f,a5 as d,a6 as m,a7 as h,a8 as g,a9 as A,d as v,u as y,v as C,s as P,aa as b,ab as w,ac as R,ad as E}from"./chunks/framework.Cd-3tpCq.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|
||||
import{t as p}from"./chunks/theme.DYYm5jhY.js";import{R as s,a2 as i,a3 as u,a4 as c,a5 as l,a6 as f,a7 as d,a8 as m,a9 as h,aa as g,ab as A,d as v,u as y,v as C,s as P,ac as b,ad as w,ae as R,af as E}from"./chunks/framework.S-Qvb3wi.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=_(),a=D();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function D(){return A(S)}function _(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
|
||||
1
assets/chunks/@localSearchIndexroot.B6T--PPy.js
Normal file
1
assets/chunks/@localSearchIndexroot.B6T--PPy.js
Normal file
File diff suppressed because one or more lines are too long
8
assets/chunks/VPLocalSearchBox.BaPkDjV5.js
Normal file
8
assets/chunks/VPLocalSearchBox.BaPkDjV5.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
18
assets/chunks/framework.S-Qvb3wi.js
Normal file
18
assets/chunks/framework.S-Qvb3wi.js
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
assets/chunks/theme.DYYm5jhY.js
Normal file
2
assets/chunks/theme.DYYm5jhY.js
Normal file
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as o,c as t,o as a,ae as i}from"./chunks/framework.Cd-3tpCq.js";const h=JSON.parse('{"title":"Get Started 👋","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),r={name:"index.md"};function n(s,e,l,c,u,d){return a(),t("div",null,e[0]||(e[0]=[i('<h1 id="get-started-👋" tabindex="-1">Get Started 👋 <a class="header-anchor" href="#get-started-👋" aria-label="Permalink to "Get Started 👋""></a></h1><p>Welcome to Open Archiver! This guide will help you get started with setting up and using the platform.</p><h2 id="what-is-open-archiver-🛡️" tabindex="-1">What is Open Archiver? 🛡️ <a class="header-anchor" href="#what-is-open-archiver-🛡️" aria-label="Permalink to "What is Open Archiver? 🛡️""></a></h2><p><strong>A secure, sovereign, and affordable open-source platform for email archiving and eDiscovery.</strong></p><p>Open Archiver provides a robust, self-hosted solution for archiving, storing, indexing, and searching emails from major platforms, including Google Workspace (Gmail), Microsoft 365, as well as generic IMAP-enabled email inboxes. Use Open Archiver to keep a permanent, tamper-proof record of your communication history, free from vendor lock-in.</p><h2 id="key-features-✨" tabindex="-1">Key Features ✨ <a class="header-anchor" href="#key-features-✨" aria-label="Permalink to "Key Features ✨""></a></h2><ul><li><strong>Universal Ingestion</strong>: Connect to Google Workspace, Microsoft 365, and standard IMAP servers to perform initial bulk imports and maintain continuous, real-time synchronization.</li><li><strong>Secure & Efficient Storage</strong>: Emails are stored in the standard <code>.eml</code> format. The system uses deduplication and compression to minimize storage costs. All data is encrypted at rest.</li><li><strong>Pluggable Storage Backends</strong>: Support both local filesystem storage and S3-compatible object storage (like AWS S3 or MinIO).</li><li><strong>Powerful Search & eDiscovery</strong>: A high-performance search engine indexes the full text of emails and attachments (PDF, DOCX, etc.).</li><li><strong>Compliance & Retention</strong>: Define granular retention policies to automatically manage the lifecycle of your data. Place legal holds on communications to prevent deletion during litigation (TBD).</li><li><strong>Comprehensive Auditing</strong>: An immutable audit trail logs all system activities, ensuring you have a clear record of who accessed what and when (TBD).</li></ul><h2 id="installation-🚀" tabindex="-1">Installation 🚀 <a class="header-anchor" href="#installation-🚀" aria-label="Permalink to "Installation 🚀""></a></h2><p>To get your own instance of Open Archiver running, follow our detailed installation guide:</p><ul><li><a href="./user-guides/installation.html">Installation Guide</a></li></ul><h2 id="data-source-configuration-🔌" tabindex="-1">Data Source Configuration 🔌 <a class="header-anchor" href="#data-source-configuration-🔌" aria-label="Permalink to "Data Source Configuration 🔌""></a></h2><p>After deploying the application, you will need to configure one or more ingestion sources to begin archiving emails. Follow our detailed guides to connect to your email provider:</p><ul><li><a href="./user-guides/email-providers/google-workspace.html">Connecting to Google Workspace</a></li><li><a href="./user-guides/email-providers/microsoft-365.html">Connecting to Microsoft 365</a></li><li><a href="./user-guides/email-providers/imap.html">Connecting to a Generic IMAP Server</a></li></ul><h2 id="contributing-❤️" tabindex="-1">Contributing ❤️ <a class="header-anchor" href="#contributing-❤️" aria-label="Permalink to "Contributing ❤️""></a></h2><p>We welcome contributions from the community!</p><ul><li><strong>Reporting Bugs</strong>: If you find a bug, please open an issue on our GitHub repository.</li><li><strong>Suggesting Enhancements</strong>: Have an idea for a new feature? We'd love to hear it. Open an issue to start the discussion.</li><li><strong>Code Contributions</strong>: If you'd like to contribute code, please fork the repository and submit a pull request.</li></ul><p>Please read our <code>CONTRIBUTING.md</code> file for more details on our code of conduct and the process for submitting pull requests.</p>',17)]))}const p=o(r,[["render",n]]);export{h as __pageData,p as default};
|
||||
import{_ as o,c as t,o as a,ag as i}from"./chunks/framework.S-Qvb3wi.js";const h=JSON.parse('{"title":"Get Started 👋","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),r={name:"index.md"};function n(s,e,l,c,u,d){return a(),t("div",null,e[0]||(e[0]=[i('<h1 id="get-started-👋" tabindex="-1">Get Started 👋 <a class="header-anchor" href="#get-started-👋" aria-label="Permalink to "Get Started 👋""></a></h1><p>Welcome to Open Archiver! This guide will help you get started with setting up and using the platform.</p><h2 id="what-is-open-archiver-🛡️" tabindex="-1">What is Open Archiver? 🛡️ <a class="header-anchor" href="#what-is-open-archiver-🛡️" aria-label="Permalink to "What is Open Archiver? 🛡️""></a></h2><p><strong>A secure, sovereign, and affordable open-source platform for email archiving and eDiscovery.</strong></p><p>Open Archiver provides a robust, self-hosted solution for archiving, storing, indexing, and searching emails from major platforms, including Google Workspace (Gmail), Microsoft 365, as well as generic IMAP-enabled email inboxes. Use Open Archiver to keep a permanent, tamper-proof record of your communication history, free from vendor lock-in.</p><h2 id="key-features-✨" tabindex="-1">Key Features ✨ <a class="header-anchor" href="#key-features-✨" aria-label="Permalink to "Key Features ✨""></a></h2><ul><li><strong>Universal Ingestion</strong>: Connect to Google Workspace, Microsoft 365, and standard IMAP servers to perform initial bulk imports and maintain continuous, real-time synchronization.</li><li><strong>Secure & Efficient Storage</strong>: Emails are stored in the standard <code>.eml</code> format. The system uses deduplication and compression to minimize storage costs. All data is encrypted at rest.</li><li><strong>Pluggable Storage Backends</strong>: Support both local filesystem storage and S3-compatible object storage (like AWS S3 or MinIO).</li><li><strong>Powerful Search & eDiscovery</strong>: A high-performance search engine indexes the full text of emails and attachments (PDF, DOCX, etc.).</li><li><strong>Compliance & Retention</strong>: Define granular retention policies to automatically manage the lifecycle of your data. Place legal holds on communications to prevent deletion during litigation (TBD).</li><li><strong>Comprehensive Auditing</strong>: An immutable audit trail logs all system activities, ensuring you have a clear record of who accessed what and when (TBD).</li></ul><h2 id="installation-🚀" tabindex="-1">Installation 🚀 <a class="header-anchor" href="#installation-🚀" aria-label="Permalink to "Installation 🚀""></a></h2><p>To get your own instance of Open Archiver running, follow our detailed installation guide:</p><ul><li><a href="./user-guides/installation.html">Installation Guide</a></li></ul><h2 id="data-source-configuration-🔌" tabindex="-1">Data Source Configuration 🔌 <a class="header-anchor" href="#data-source-configuration-🔌" aria-label="Permalink to "Data Source Configuration 🔌""></a></h2><p>After deploying the application, you will need to configure one or more ingestion sources to begin archiving emails. Follow our detailed guides to connect to your email provider:</p><ul><li><a href="./user-guides/email-providers/google-workspace.html">Connecting to Google Workspace</a></li><li><a href="./user-guides/email-providers/microsoft-365.html">Connecting to Microsoft 365</a></li><li><a href="./user-guides/email-providers/imap.html">Connecting to a Generic IMAP Server</a></li></ul><h2 id="contributing-❤️" tabindex="-1">Contributing ❤️ <a class="header-anchor" href="#contributing-❤️" aria-label="Permalink to "Contributing ❤️""></a></h2><p>We welcome contributions from the community!</p><ul><li><strong>Reporting Bugs</strong>: If you find a bug, please open an issue on our GitHub repository.</li><li><strong>Suggesting Enhancements</strong>: Have an idea for a new feature? We'd love to hear it. Open an issue to start the discussion.</li><li><strong>Code Contributions</strong>: If you'd like to contribute code, please fork the repository and submit a pull request.</li></ul><p>Please read our <code>CONTRIBUTING.md</code> file for more details on our code of conduct and the process for submitting pull requests.</p>',17)]))}const p=o(r,[["render",n]]);export{h as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as o,c as t,o as a,ae as i}from"./chunks/framework.Cd-3tpCq.js";const h=JSON.parse('{"title":"Get Started 👋","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),r={name:"index.md"};function n(s,e,l,c,u,d){return a(),t("div",null,e[0]||(e[0]=[i("",17)]))}const p=o(r,[["render",n]]);export{h as __pageData,p as default};
|
||||
import{_ as o,c as t,o as a,ag as i}from"./chunks/framework.S-Qvb3wi.js";const h=JSON.parse('{"title":"Get Started 👋","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md"}'),r={name:"index.md"};function n(s,e,l,c,u,d){return a(),t("div",null,e[0]||(e[0]=[i("",17)]))}const p=o(r,[["render",n]]);export{h as __pageData,p as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,c as r,o as t,j as s,a as i}from"./chunks/framework.Cd-3tpCq.js";const f=JSON.parse('{"title":"services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md"}'),c={name:"services/index.md"};function n(o,e,d,l,p,m){return t(),r("div",null,e[0]||(e[0]=[s("h1",{id:"services",tabindex:"-1"},[i("services "),s("a",{class:"header-anchor",href:"#services","aria-label":'Permalink to "services"'},"")],-1)]))}const x=a(c,[["render",n]]);export{f as __pageData,x as default};
|
||||
import{_ as a,c as r,o as t,j as s,a as i}from"./chunks/framework.S-Qvb3wi.js";const f=JSON.parse('{"title":"services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md"}'),c={name:"services/index.md"};function n(o,e,d,l,p,m){return t(),r("div",null,e[0]||(e[0]=[s("h1",{id:"services",tabindex:"-1"},[i("services "),s("a",{class:"header-anchor",href:"#services","aria-label":'Permalink to "services"'},"")],-1)]))}const x=a(c,[["render",n]]);export{f as __pageData,x as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as a,c as r,o as t,j as s,a as i}from"./chunks/framework.Cd-3tpCq.js";const f=JSON.parse('{"title":"services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md"}'),c={name:"services/index.md"};function n(o,e,d,l,p,m){return t(),r("div",null,e[0]||(e[0]=[s("h1",{id:"services",tabindex:"-1"},[i("services "),s("a",{class:"header-anchor",href:"#services","aria-label":'Permalink to "services"'},"")],-1)]))}const x=a(c,[["render",n]]);export{f as __pageData,x as default};
|
||||
import{_ as a,c as r,o as t,j as s,a as i}from"./chunks/framework.S-Qvb3wi.js";const f=JSON.parse('{"title":"services","description":"","frontmatter":{},"headers":[],"relativePath":"services/index.md","filePath":"services/index.md"}'),c={name:"services/index.md"};function n(o,e,d,l,p,m){return t(),r("div",null,e[0]||(e[0]=[s("h1",{id:"services",tabindex:"-1"},[i("services "),s("a",{class:"header-anchor",href:"#services","aria-label":'Permalink to "services"'},"")],-1)]))}const x=a(c,[["render",n]]);export{f as __pageData,x as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{_ as s,c as i,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const k=JSON.parse('{"title":"Pluggable Storage Service (StorageService)","description":"","frontmatter":{},"headers":[],"relativePath":"services/storage-service.md","filePath":"services/storage-service.md"}'),n={name:"services/storage-service.md"};function l(r,e,o,h,p,c){return a(),i("div",null,e[0]||(e[0]=[t(`<h1 id="pluggable-storage-service-storageservice" tabindex="-1">Pluggable Storage Service (<code>StorageService</code>) <a class="header-anchor" href="#pluggable-storage-service-storageservice" aria-label="Permalink to "Pluggable Storage Service (\`StorageService\`)""></a></h1><h2 id="overview" tabindex="-1">Overview <a class="header-anchor" href="#overview" aria-label="Permalink to "Overview""></a></h2><p>The <code>StorageService</code> provides a unified, abstract interface for handling file storage across different backends. Its primary purpose is to decouple the application's core logic from the underlying storage technology. This design allows administrators to switch between storage providers (e.g., from the local filesystem to an S3-compatible object store) with only a configuration change, requiring no modifications to the application code.</p><p>The service is built around a standardized <code>IStorageProvider</code> interface, which guarantees that all storage providers have a consistent API for common operations like storing, retrieving, and deleting files.</p><h2 id="configuration" tabindex="-1">Configuration <a class="header-anchor" href="#configuration" aria-label="Permalink to "Configuration""></a></h2><p>The <code>StorageService</code> is configured via environment variables in the <code>.env</code> file. You must specify the storage backend you wish to use and provide the necessary credentials and settings for it.</p><h3 id="_1-choosing-the-backend" tabindex="-1">1. Choosing the Backend <a class="header-anchor" href="#_1-choosing-the-backend" aria-label="Permalink to "1. Choosing the Backend""></a></h3><p>The <code>STORAGE_TYPE</code> variable determines which provider the service will use.</p><ul><li><code>STORAGE_TYPE=local</code>: Uses the local server's filesystem.</li><li><code>STORAGE_TYPE=s3</code>: Uses an S3-compatible object storage service (e.g., AWS S3, MinIO, Google Cloud Storage).</li></ul><h3 id="_2-local-filesystem-configuration" tabindex="-1">2. Local Filesystem Configuration <a class="header-anchor" href="#_2-local-filesystem-configuration" aria-label="Permalink to "2. Local Filesystem Configuration""></a></h3><p>When <code>STORAGE_TYPE</code> is set to <code>local</code>, you must also provide the root path where files will be stored.</p><div class="language-env vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">env</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span># .env</span></span>
|
||||
import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.S-Qvb3wi.js";const k=JSON.parse('{"title":"Pluggable Storage Service (StorageService)","description":"","frontmatter":{},"headers":[],"relativePath":"services/storage-service.md","filePath":"services/storage-service.md"}'),n={name:"services/storage-service.md"};function l(r,e,o,h,p,c){return a(),i("div",null,e[0]||(e[0]=[t(`<h1 id="pluggable-storage-service-storageservice" tabindex="-1">Pluggable Storage Service (<code>StorageService</code>) <a class="header-anchor" href="#pluggable-storage-service-storageservice" aria-label="Permalink to "Pluggable Storage Service (\`StorageService\`)""></a></h1><h2 id="overview" tabindex="-1">Overview <a class="header-anchor" href="#overview" aria-label="Permalink to "Overview""></a></h2><p>The <code>StorageService</code> provides a unified, abstract interface for handling file storage across different backends. Its primary purpose is to decouple the application's core logic from the underlying storage technology. This design allows administrators to switch between storage providers (e.g., from the local filesystem to an S3-compatible object store) with only a configuration change, requiring no modifications to the application code.</p><p>The service is built around a standardized <code>IStorageProvider</code> interface, which guarantees that all storage providers have a consistent API for common operations like storing, retrieving, and deleting files.</p><h2 id="configuration" tabindex="-1">Configuration <a class="header-anchor" href="#configuration" aria-label="Permalink to "Configuration""></a></h2><p>The <code>StorageService</code> is configured via environment variables in the <code>.env</code> file. You must specify the storage backend you wish to use and provide the necessary credentials and settings for it.</p><h3 id="_1-choosing-the-backend" tabindex="-1">1. Choosing the Backend <a class="header-anchor" href="#_1-choosing-the-backend" aria-label="Permalink to "1. Choosing the Backend""></a></h3><p>The <code>STORAGE_TYPE</code> variable determines which provider the service will use.</p><ul><li><code>STORAGE_TYPE=local</code>: Uses the local server's filesystem.</li><li><code>STORAGE_TYPE=s3</code>: Uses an S3-compatible object storage service (e.g., AWS S3, MinIO, Google Cloud Storage).</li></ul><h3 id="_2-local-filesystem-configuration" tabindex="-1">2. Local Filesystem Configuration <a class="header-anchor" href="#_2-local-filesystem-configuration" aria-label="Permalink to "2. Local Filesystem Configuration""></a></h3><p>When <code>STORAGE_TYPE</code> is set to <code>local</code>, you must also provide the root path where files will be stored.</p><div class="language-env vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">env</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span># .env</span></span>
|
||||
<span class="line"><span>STORAGE_TYPE=local</span></span>
|
||||
<span class="line"><span>STORAGE_LOCAL_ROOT_PATH=/var/data/open-archiver</span></span></code></pre></div><ul><li><code>STORAGE_LOCAL_ROOT_PATH</code>: The absolute path on the server where the archive will be created. The service will create subdirectories within this path as needed.</li></ul><h3 id="_3-s3-compatible-storage-configuration" tabindex="-1">3. S3-Compatible Storage Configuration <a class="header-anchor" href="#_3-s3-compatible-storage-configuration" aria-label="Permalink to "3. S3-Compatible Storage Configuration""></a></h3><p>When <code>STORAGE_TYPE</code> is set to <code>s3</code>, you must provide the credentials and endpoint for your object storage provider.</p><div class="language-env vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">env</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span># .env</span></span>
|
||||
<span class="line"><span>STORAGE_TYPE=s3</span></span>
|
||||
@@ -1 +1 @@
|
||||
import{_ as s,c as i,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const k=JSON.parse('{"title":"Pluggable Storage Service (StorageService)","description":"","frontmatter":{},"headers":[],"relativePath":"services/storage-service.md","filePath":"services/storage-service.md"}'),n={name:"services/storage-service.md"};function l(r,e,o,h,p,c){return a(),i("div",null,e[0]||(e[0]=[t("",39)]))}const g=s(n,[["render",l]]);export{k as __pageData,g as default};
|
||||
import{_ as s,c as i,o as a,ag as t}from"./chunks/framework.S-Qvb3wi.js";const k=JSON.parse('{"title":"Pluggable Storage Service (StorageService)","description":"","frontmatter":{},"headers":[],"relativePath":"services/storage-service.md","filePath":"services/storage-service.md"}'),n={name:"services/storage-service.md"};function l(r,e,o,h,p,c){return a(),i("div",null,e[0]||(e[0]=[t("",39)]))}const g=s(n,[["render",l]]);export{k as __pageData,g as default};
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as o,c as t,o as i,ae as r}from"./chunks/framework.Cd-3tpCq.js";const d=JSON.parse('{"title":"Connecting to Google Workspace","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/google-workspace.md","filePath":"user-guides/email-providers/google-workspace.md"}'),n={name:"user-guides/email-providers/google-workspace.md"};function a(s,e,l,c,u,g){return i(),t("div",null,e[0]||(e[0]=[r("",29)]))}const p=o(n,[["render",a]]);export{d as __pageData,p as default};
|
||||
import{_ as o,c as t,o as i,ag as r}from"./chunks/framework.S-Qvb3wi.js";const d=JSON.parse('{"title":"Connecting to Google Workspace","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/google-workspace.md","filePath":"user-guides/email-providers/google-workspace.md"}'),n={name:"user-guides/email-providers/google-workspace.md"};function a(s,e,l,c,u,g){return i(),t("div",null,e[0]||(e[0]=[r("",29)]))}const p=o(n,[["render",a]]);export{d as __pageData,p as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,c as t,o as r,ae as a}from"./chunks/framework.Cd-3tpCq.js";const g=JSON.parse('{"title":"Connecting to a Generic IMAP Server","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/imap.md","filePath":"user-guides/email-providers/imap.md"}'),s={name:"user-guides/email-providers/imap.md"};function i(n,o,l,c,p,u){return r(),t("div",null,o[0]||(o[0]=[a("",16)]))}const h=e(s,[["render",i]]);export{g as __pageData,h as default};
|
||||
import{_ as e,c as t,o as r,ag as a}from"./chunks/framework.S-Qvb3wi.js";const g=JSON.parse('{"title":"Connecting to a Generic IMAP Server","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/imap.md","filePath":"user-guides/email-providers/imap.md"}'),s={name:"user-guides/email-providers/imap.md"};function i(n,o,l,c,p,u){return r(),t("div",null,o[0]||(o[0]=[a("",16)]))}const h=e(s,[["render",i]]);export{g as __pageData,h as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as r,c as i,o,ae as a}from"./chunks/framework.Cd-3tpCq.js";const _=JSON.parse('{"title":"Connecting Email Providers","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/index.md","filePath":"user-guides/email-providers/index.md"}'),t={name:"user-guides/email-providers/index.md"};function n(s,e,l,c,d,p){return o(),i("div",null,e[0]||(e[0]=[a('<h1 id="connecting-email-providers" tabindex="-1">Connecting Email Providers <a class="header-anchor" href="#connecting-email-providers" aria-label="Permalink to "Connecting Email Providers""></a></h1><p>Open Archiver can connect to a variety of email sources to ingest and archive your emails. This section provides guides for connecting to popular email providers.</p><p>Choose your provider from the list below to get started:</p><ul><li><a href="./google-workspace.html">Google Workspace</a></li><li><a href="./microsoft-365.html">Microsoft 365</a></li><li><a href="./imap.html">Generic IMAP Server</a></li></ul>',4)]))}const u=r(t,[["render",n]]);export{_ as __pageData,u as default};
|
||||
import{_ as r,c as i,o,ag as a}from"./chunks/framework.S-Qvb3wi.js";const _=JSON.parse('{"title":"Connecting Email Providers","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/index.md","filePath":"user-guides/email-providers/index.md"}'),t={name:"user-guides/email-providers/index.md"};function n(s,e,l,c,d,p){return o(),i("div",null,e[0]||(e[0]=[a('<h1 id="connecting-email-providers" tabindex="-1">Connecting Email Providers <a class="header-anchor" href="#connecting-email-providers" aria-label="Permalink to "Connecting Email Providers""></a></h1><p>Open Archiver can connect to a variety of email sources to ingest and archive your emails. This section provides guides for connecting to popular email providers.</p><p>Choose your provider from the list below to get started:</p><ul><li><a href="./google-workspace.html">Google Workspace</a></li><li><a href="./microsoft-365.html">Microsoft 365</a></li><li><a href="./imap.html">Generic IMAP Server</a></li></ul>',4)]))}const u=r(t,[["render",n]]);export{_ as __pageData,u as default};
|
||||
@@ -1 +1 @@
|
||||
import{_ as r,c as i,o,ae as a}from"./chunks/framework.Cd-3tpCq.js";const _=JSON.parse('{"title":"Connecting Email Providers","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/index.md","filePath":"user-guides/email-providers/index.md"}'),t={name:"user-guides/email-providers/index.md"};function n(s,e,l,c,d,p){return o(),i("div",null,e[0]||(e[0]=[a("",4)]))}const u=r(t,[["render",n]]);export{_ as __pageData,u as default};
|
||||
import{_ as r,c as i,o,ag as a}from"./chunks/framework.S-Qvb3wi.js";const _=JSON.parse('{"title":"Connecting Email Providers","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/index.md","filePath":"user-guides/email-providers/index.md"}'),t={name:"user-guides/email-providers/index.md"};function n(s,e,l,c,d,p){return o(),i("div",null,e[0]||(e[0]=[a("",4)]))}const u=r(t,[["render",n]]);export{_ as __pageData,u as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{_ as e,c as i,o,ae as r}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Connecting to Microsoft 365","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/microsoft-365.md","filePath":"user-guides/email-providers/microsoft-365.md"}'),n={name:"user-guides/email-providers/microsoft-365.md"};function s(a,t,l,c,h,p){return o(),i("div",null,t[0]||(t[0]=[r("",27)]))}const d=e(n,[["render",s]]);export{u as __pageData,d as default};
|
||||
import{_ as e,c as i,o,ag as r}from"./chunks/framework.S-Qvb3wi.js";const u=JSON.parse('{"title":"Connecting to Microsoft 365","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/email-providers/microsoft-365.md","filePath":"user-guides/email-providers/microsoft-365.md"}'),n={name:"user-guides/email-providers/microsoft-365.md"};function s(a,t,l,c,h,p){return o(),i("div",null,t[0]||(t[0]=[r("",27)]))}const d=e(n,[["render",s]]);export{u as __pageData,d as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as t,c as a,o as i,ae as o}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Installation Guide","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/installation.md","filePath":"user-guides/installation.md"}'),s={name:"user-guides/installation.md"};function d(r,e,n,c,l,h){return i(),a("div",null,e[0]||(e[0]=[o("",50)]))}const g=t(s,[["render",d]]);export{u as __pageData,g as default};
|
||||
File diff suppressed because one or more lines are too long
1
assets/user-guides_installation.md.Lx-5aly3.lean.js
Normal file
1
assets/user-guides_installation.md.Lx-5aly3.lean.js
Normal file
@@ -0,0 +1 @@
|
||||
import{_ as t,c as a,o as i,ag as o}from"./chunks/framework.S-Qvb3wi.js";const u=JSON.parse('{"title":"Installation Guide","description":"","frontmatter":{},"headers":[],"relativePath":"user-guides/installation.md","filePath":"user-guides/installation.md"}'),s={name:"user-guides/installation.md"};function r(d,e,n,c,l,h){return i(),a("div",null,e[0]||(e[0]=[o("",50)]))}const g=t(s,[["render",r]]);export{u as __pageData,g as default};
|
||||
@@ -1 +1 @@
|
||||
{"api_archived-email.md":"BkbaV2Hy","api_auth.md":"Du3O3W7h","api_authentication.md":"BeVpHL1b","api_dashboard.md":"CBdDRqLA","api_index.md":"rAxPnnFp","api_ingestion.md":"Db0jMzxp","api_search.md":"KKtP7fd6","api_storage.md":"DJf0CH38","index.md":"Jke24r4b","services_index.md":"DfyQfsBc","services_storage-service.md":"xOqM9CWx","summary.md":"DsFfZpsz","user-guides_email-providers_google-workspace.md":"CWhO43nR","user-guides_email-providers_imap.md":"BcXBEq43","user-guides_email-providers_index.md":"DY3ytyxv","user-guides_email-providers_microsoft-365.md":"C4O8w9wT","user-guides_installation.md":"D5Jetfyl"}
|
||||
{"api_archived-email.md":"Di9i_OKb","api_auth.md":"Kt3iNEMn","api_authentication.md":"DDCP-z1j","api_dashboard.md":"CqvOiGVx","api_index.md":"DFnFK07E","api_ingestion.md":"DOeFHoQv","api_search.md":"BRCIJTXq","api_storage.md":"DKUKvFrO","index.md":"9PKJf5H1","services_index.md":"BLn224J3","services_storage-service.md":"Dqpyxk77","summary.md":"5seSND4L","user-guides_email-providers_google-workspace.md":"BWo_12De","user-guides_email-providers_imap.md":"Cdk3vG_S","user-guides_email-providers_index.md":"DPaSFiTO","user-guides_email-providers_microsoft-365.md":"QHHVfYxW","user-guides_installation.md":"Lx-5aly3"}
|
||||
|
||||
16
index.html
16
index.html
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user