mirror of
https://github.com/LogicLabs-OU/OpenArchiver.git
synced 2026-04-06 00:31:57 +02:00
deploy: a7e6b93c77
This commit is contained in:
2
404.html
2
404.html
@@ -16,7 +16,7 @@
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_index.md\":\"BsewM5Xg\",\"api_ingestion.md\":\"Cw9WcUAp\",\"index.md\":\"sGk9qBFn\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"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\":\"BkbaV2Hy\",\"api_auth.md\":\"Du3O3W7h\",\"api_authentication.md\":\"BeVpHL1b\",\"api_dashboard.md\":\"CBdDRqLA\",\"api_index.md\":\"BsewM5Xg\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"text\":\"Services\",\"items\":[{\"text\":\"Overview\",\"link\":\"/services/\"},{\"text\":\"Storage Service\",\"link\":\"/services/storage-service\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
File diff suppressed because one or more lines are too long
59
api/archived-email.html
Normal file
59
api/archived-email.html
Normal file
File diff suppressed because one or more lines are too long
38
api/auth.html
Normal file
38
api/auth.html
Normal file
File diff suppressed because one or more lines are too long
40
api/authentication.html
Normal file
40
api/authentication.html
Normal file
File diff suppressed because one or more lines are too long
62
api/dashboard.html
Normal file
62
api/dashboard.html
Normal file
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
41
api/search.html
Normal file
41
api/search.html
Normal file
File diff suppressed because one or more lines are too long
25
api/storage.html
Normal file
25
api/storage.html
Normal file
File diff suppressed because one or more lines are too long
35
assets/api_archived-email.md.BkbaV2Hy.js
Normal file
35
assets/api_archived-email.md.BkbaV2Hy.js
Normal file
@@ -0,0 +1,35 @@
|
||||
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>
|
||||
<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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "subject"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Test Email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "from"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"sender@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "sentAt"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2023-10-27T10:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hasAttachments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "recipients"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Recipient 1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">"email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"recipient1@example.com"</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:#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;"> "total"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">100</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "limit"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>500 Internal Server Error:</strong> An unexpected error occurred.</p></li></ul><h3 id="get-api-v1-archived-emails-id" tabindex="-1">GET /api/v1/archived-emails/:id <a class="header-anchor" href="#get-api-v1-archived-emails-id" aria-label="Permalink to "GET /api/v1/archived-emails/:id""></a></h3><p>Retrieves a single archived email by its ID, including its raw content and attachments.</p><p><strong>Access:</strong> Authenticated</p><h4 id="url-parameters-1" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters-1" 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>id</code></td><td style="text-align:left;">string</td><td style="text-align:left;">The ID of the archived email.</td></tr></tbody></table><h4 id="responses-1" tabindex="-1">Responses <a class="header-anchor" href="#responses-1" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> The archived email details.</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;"> "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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "subject"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Test Email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "from"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"sender@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "sentAt"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2023-10-27T10:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "hasAttachments"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "recipients"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: [</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> { </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">"name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Recipient 1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">, </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">"email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"recipient1@example.com"</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;"> "raw"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"..."</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "attachments"</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;">"attachment-id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "filename"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"document.pdf"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "mimeType"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"application/pdf"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "sizeBytes"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">12345</span></span>
|
||||
<span class="line"><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:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>404 Not Found:</strong> The archived email with the specified ID was not found.</p></li><li><p><strong>500 Internal Server Error:</strong> An unexpected error occurred.</p></li></ul><h2 id="service-methods" tabindex="-1">Service Methods <a class="header-anchor" href="#service-methods" aria-label="Permalink to "Service Methods""></a></h2><h3 id="getarchivedemails-ingestionsourceid-string-page-number-limit-number-promise-paginatedarchivedemails" tabindex="-1"><code>getArchivedEmails(ingestionSourceId: string, page: number, limit: number): Promise<PaginatedArchivedEmails></code> <a class="header-anchor" href="#getarchivedemails-ingestionsourceid-string-page-number-limit-number-promise-paginatedarchivedemails" aria-label="Permalink to "\`getArchivedEmails(ingestionSourceId: string, page: number, limit: number): Promise<PaginatedArchivedEmails>\`""></a></h3><p>Retrieves a paginated list of archived emails from the database for a given ingestion source.</p><ul><li><strong>ingestionSourceId:</strong> The ID of the ingestion source.</li><li><strong>page:</strong> The page number for pagination.</li><li><strong>limit:</strong> The number of items per page.</li><li><strong>Returns:</strong> A promise that resolves to a <code>PaginatedArchivedEmails</code> object.</li></ul><h3 id="getarchivedemailbyid-emailid-string-promise-archivedemail-null" tabindex="-1"><code>getArchivedEmailById(emailId: string): Promise<ArchivedEmail | null></code> <a class="header-anchor" href="#getarchivedemailbyid-emailid-string-promise-archivedemail-null" aria-label="Permalink to "\`getArchivedEmailById(emailId: string): Promise<ArchivedEmail | null>\`""></a></h3><p>Retrieves a single archived email by its ID, including its raw content and attachments.</p><ul><li><strong>emailId:</strong> The ID of the archived email.</li><li><strong>Returns:</strong> A promise that resolves to an <code>ArchivedEmail</code> object or <code>null</code> if not found.</li></ul>`,27)]))}const g=s(n,[["render",l]]);export{E as __pageData,g as default};
|
||||
1
assets/api_archived-email.md.BkbaV2Hy.lean.js
Normal file
1
assets/api_archived-email.md.BkbaV2Hy.lean.js
Normal file
@@ -0,0 +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};
|
||||
14
assets/api_auth.md.Du3O3W7h.js
Normal file
14
assets/api_auth.md.Du3O3W7h.js
Normal file
@@ -0,0 +1,14 @@
|
||||
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>
|
||||
<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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "role"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>400 Bad Request:</strong> Email or password not provided.</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;"> "message"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Email and password are required"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>401 Unauthorized:</strong> Invalid credentials.</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;"> "message"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Invalid credentials"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>500 Internal Server Error:</strong> An unexpected error occurred.</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;"> "message"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"An internal server error occurred"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li></ul><h2 id="service-methods" tabindex="-1">Service Methods <a class="header-anchor" href="#service-methods" aria-label="Permalink to "Service Methods""></a></h2><h3 id="verifypassword-password-string-hash-string-promise-boolean" tabindex="-1"><code>verifyPassword(password: string, hash: string): Promise<boolean></code> <a class="header-anchor" href="#verifypassword-password-string-hash-string-promise-boolean" aria-label="Permalink to "\`verifyPassword(password: string, hash: string): Promise<boolean>\`""></a></h3><p>Compares a plain-text password with a hashed password to verify its correctness.</p><ul><li><strong>password:</strong> The plain-text password.</li><li><strong>hash:</strong> The hashed password to compare against.</li><li><strong>Returns:</strong> A promise that resolves to <code>true</code> if the password is valid, otherwise <code>false</code>.</li></ul><h3 id="login-email-string-password-string-promise-loginresponse-null" tabindex="-1"><code>login(email: string, password: string): Promise<LoginResponse | null></code> <a class="header-anchor" href="#login-email-string-password-string-promise-loginresponse-null" aria-label="Permalink to "\`login(email: string, password: string): Promise<LoginResponse | null>\`""></a></h3><p>Handles the user login process. It finds the user by email, verifies the password, and generates a JWT upon successful authentication.</p><ul><li><strong>email:</strong> The user's email.</li><li><strong>password:</strong> The user's password.</li><li><strong>Returns:</strong> A promise that resolves to a <code>LoginResponse</code> object containing the <code>accessToken</code> and <code>user</code> details, or <code>null</code> if authentication fails.</li></ul><h3 id="verifytoken-token-string-promise-authtokenpayload-null" tabindex="-1"><code>verifyToken(token: string): Promise<AuthTokenPayload | null></code> <a class="header-anchor" href="#verifytoken-token-string-promise-authtokenpayload-null" aria-label="Permalink to "\`verifyToken(token: string): Promise<AuthTokenPayload | null>\`""></a></h3><p>Verifies the authenticity and expiration of a JWT.</p><ul><li><strong>token:</strong> The JWT string to verify.</li><li><strong>Returns:</strong> A promise that resolves to the token's <code>AuthTokenPayload</code> if valid, otherwise <code>null</code>.</li></ul>`,21)]))}const g=i(n,[["render",o]]);export{u as __pageData,g as default};
|
||||
1
assets/api_auth.md.Du3O3W7h.lean.js
Normal file
1
assets/api_auth.md.Du3O3W7h.lean.js
Normal file
@@ -0,0 +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};
|
||||
16
assets/api_authentication.md.BeVpHL1b.js
Normal file
16
assets/api_authentication.md.BeVpHL1b.js
Normal file
@@ -0,0 +1,16 @@
|
||||
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>
|
||||
<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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"your-password"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><strong>Successful Response:</strong></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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "role"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="making-authenticated-requests" tabindex="-1">Making Authenticated Requests <a class="header-anchor" href="#making-authenticated-requests" aria-label="Permalink to "Making Authenticated Requests""></a></h2><p>Once you have the <code>accessToken</code>, you must include it in the <code>Authorization</code> header of all subsequent requests to protected endpoints, using the <code>Bearer</code> scheme.</p><p><strong>Example:</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;">GET</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /api/v1/dashboard/stats</span></span>
|
||||
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">Authorization</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Bearer your.jwt.token</span></span></code></pre></div><p>If the token is missing, expired, or invalid, the API will respond with a <code>401 Unauthorized</code> status code.</p><h2 id="using-a-super-api-key" tabindex="-1">Using a Super API Key <a class="header-anchor" href="#using-a-super-api-key" aria-label="Permalink to "Using a Super API Key""></a></h2><p>Alternatively, for server-to-server communication or scripts, you can use a super API key. This key provides unrestricted access to the API and should be kept secret.</p><p>You can set the <code>SUPER_API_KEY</code> in your <code>.env</code> file.</p><p>To authenticate using the super API key, include it in the <code>Authorization</code> header as a Bearer token.</p><p><strong>Example:</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;">GET</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> /api/v1/dashboard/stats</span></span>
|
||||
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">Authorization</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Bearer your-super-secret-api-key</span></span></code></pre></div>`,19)]))}const u=i(n,[["render",p]]);export{c as __pageData,u as default};
|
||||
1
assets/api_authentication.md.BeVpHL1b.lean.js
Normal file
1
assets/api_authentication.md.BeVpHL1b.lean.js
Normal file
@@ -0,0 +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};
|
||||
38
assets/api_dashboard.md.CBdDRqLA.js
Normal file
38
assets/api_dashboard.md.CBdDRqLA.js
Normal file
@@ -0,0 +1,38 @@
|
||||
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>
|
||||
<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>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li></ul><h3 id="get-api-v1-dashboard-ingestion-history" tabindex="-1">GET /api/v1/dashboard/ingestion-history <a class="header-anchor" href="#get-api-v1-dashboard-ingestion-history" aria-label="Permalink to "GET /api/v1/dashboard/ingestion-history""></a></h3><p>Retrieves the email ingestion history for the last 30 days, grouped by day.</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses-1" tabindex="-1">Responses <a class="header-anchor" href="#responses-1" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An object containing the ingestion history.</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;"> "history"</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;"> "date"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2023-09-27T00:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "count"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">150</span></span>
|
||||
<span class="line"><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;"> "date"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2023-09-28T00:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "count"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">200</span></span>
|
||||
<span class="line"><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:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li></ul><h3 id="get-api-v1-dashboard-ingestion-sources" tabindex="-1">GET /api/v1/dashboard/ingestion-sources <a class="header-anchor" href="#get-api-v1-dashboard-ingestion-sources" aria-label="Permalink to "GET /api/v1/dashboard/ingestion-sources""></a></h3><p>Retrieves a list of all ingestion sources along with their status and storage usage.</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses-2" tabindex="-1">Responses <a class="header-anchor" href="#responses-2" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An array of ingestion source objects.</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:#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;">"source-id-1"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Google Workspace"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "provider"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"google"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"active"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "storageUsed"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">12345678</span></span>
|
||||
<span class="line"><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;">"source-id-2"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Microsoft 365"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "provider"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"microsoft"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"error"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "storageUsed"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">87654321</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">]</span></span></code></pre></div></li></ul><h3 id="get-api-v1-dashboard-recent-syncs" tabindex="-1">GET /api/v1/dashboard/recent-syncs <a class="header-anchor" href="#get-api-v1-dashboard-recent-syncs" aria-label="Permalink to "GET /api/v1/dashboard/recent-syncs""></a></h3><p>Retrieves a list of recent synchronization jobs. (Note: This is currently a placeholder and will return an empty array).</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses-3" tabindex="-1">Responses <a class="header-anchor" href="#responses-3" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An empty array.</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></code></pre></div></li></ul><h3 id="get-api-v1-dashboard-indexed-insights" tabindex="-1">GET /api/v1/dashboard/indexed-insights <a class="header-anchor" href="#get-api-v1-dashboard-indexed-insights" aria-label="Permalink to "GET /api/v1/dashboard/indexed-insights""></a></h3><p>Retrieves insights from the indexed email data, such as the top senders.</p><p><strong>Access:</strong> Authenticated</p><h4 id="responses-4" tabindex="-1">Responses <a class="header-anchor" href="#responses-4" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>200 OK:</strong> An object containing indexed insights.</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;"> "topSenders"</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;"> "sender"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"user@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "count"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">42</span></span>
|
||||
<span class="line"><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:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li></ul>`,29)]))}const g=i(e,[["render",h]]);export{E as __pageData,g as default};
|
||||
1
assets/api_dashboard.md.CBdDRqLA.lean.js
Normal file
1
assets/api_dashboard.md.CBdDRqLA.lean.js
Normal file
@@ -0,0 +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};
|
||||
@@ -1,32 +0,0 @@
|
||||
import{_ as e,c as i,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Ingestion Sources API Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function o(r,s,l,h,d,p){return a(),i("div",null,s[0]||(s[0]=[t(`<h1 id="ingestion-sources-api-documentation" tabindex="-1">Ingestion Sources API Documentation <a class="header-anchor" href="#ingestion-sources-api-documentation" aria-label="Permalink to "Ingestion Sources API Documentation""></a></h1><p>A guide to using the Ingestion Sources API.</p><p><strong>Base Path:</strong> <code>/v1/ingestion-sources</code></p><hr><h2 id="authentication" tabindex="-1">Authentication <a class="header-anchor" href="#authentication" aria-label="Permalink to "Authentication""></a></h2><p>All endpoints in this API are protected and require authentication. Requests must include an <code>Authorization</code> header containing a valid Bearer token. This can be a JWT obtained from the login endpoint or a <code>SUPER_API_KEY</code> for administrative tasks.</p><p><strong>Header Example:</strong><code>Authorization: Bearer <YOUR_JWT_OR_SUPER_API_KEY></code></p><hr><h2 id="core-concepts" tabindex="-1">Core Concepts <a class="header-anchor" href="#core-concepts" aria-label="Permalink to "Core Concepts""></a></h2><h3 id="ingestion-providers" tabindex="-1">Ingestion Providers <a class="header-anchor" href="#ingestion-providers" aria-label="Permalink to "Ingestion Providers""></a></h3><p>The <code>provider</code> field determines the type of email source. Each provider requires a different configuration object, for example:</p><ul><li><code>google_workspace</code>: For connecting to Google Workspace accounts via OAuth 2.0.</li><li><code>microsoft_365</code>: For connecting to Microsoft 365 accounts via OAuth 2.0.</li><li><code>generic_imap</code>: For connecting to any email server that supports IMAP.</li></ul><h3 id="ingestion-status" tabindex="-1">Ingestion Status <a class="header-anchor" href="#ingestion-status" aria-label="Permalink to "Ingestion Status""></a></h3><p>The <code>status</code> field tracks the state of the ingestion source.</p><ul><li><code>pending_auth</code>: The source has been created but requires user authorization (OAuth flow).</li><li><code>active</code>: The source is authenticated and ready to sync.</li><li><code>syncing</code>: An import job is currently in progress.</li><li><code>importing</code>: initial syncing in progress</li><li><code>paused</code>: The source is temporarily disabled.</li><li><code>error</code>: An error occurred during the last sync.</li></ul><hr><h2 id="_1-create-ingestion-source" tabindex="-1">1. Create Ingestion Source <a class="header-anchor" href="#_1-create-ingestion-source" aria-label="Permalink to "1. Create Ingestion Source""></a></h2><ul><li><strong>Method:</strong> <code>POST</code></li><li><strong>Path:</strong> <code>/</code></li><li><strong>Description:</strong> Registers a new source for email ingestion. The <code>providerConfig</code> will vary based on the selected <code>provider</code>.</li></ul><h4 id="request-body-createingestionsourcedto" tabindex="-1">Request Body (<code>CreateIngestionSourceDto</code>) <a class="header-anchor" href="#request-body-createingestionsourcedto" aria-label="Permalink to "Request Body (\`CreateIngestionSourceDto\`)""></a></h4><ul><li><code>name</code> (string, required): A user-friendly name for the source (e.g., "Marketing Department G-Suite").</li><li><code>provider</code> (string, required): One of <code>google_workspace</code>, <code>microsoft_365</code>, or <code>generic_imap</code>.</li><li><code>providerConfig</code> (object, required): Configuration specific to the provider.</li></ul><h5 id="providerconfig-for-google-workspace-microsoft-365" tabindex="-1"><code>providerConfig</code> for <code>google_workspace</code> / <code>microsoft_365</code> <a class="header-anchor" href="#providerconfig-for-google-workspace-microsoft-365" aria-label="Permalink to "\`providerConfig\` for \`google_workspace\` / \`microsoft_365\`""></a></h5><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;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Corporate Google Workspace"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "provider"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"google_workspace"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "providerConfig"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clientId"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"your-oauth-client-id.apps.googleusercontent.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "clientSecret"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"your-super-secret-client-secret"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "redirectUri"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"https://yourapp.com/oauth/google/callback"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h5 id="providerconfig-for-generic-imap" tabindex="-1"><code>providerConfig</code> for <code>generic_imap</code> <a class="header-anchor" href="#providerconfig-for-generic-imap" aria-label="Permalink to "\`providerConfig\` for \`generic_imap\`""></a></h5><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;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Legacy IMAP Server"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "provider"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </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:#005CC5;--shiki-dark:#79B8FF;"> "providerConfig"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "host"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"imap.example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "port"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">993</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "secure"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "username"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"archive-user"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "password"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"imap-password"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h4 id="responses" tabindex="-1">Responses <a class="header-anchor" href="#responses" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>201 Created</code>):</strong> Returns the full <code>IngestionSource</code> object, which now includes a system-generated <code>id</code> and default status.</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;"> "id"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"a1b2c3d4-e5f6-7890-1234-567890abcdef"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Corporate Google Workspace"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "provider"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"google_workspace"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"pending_auth"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "createdAt"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2025-07-11T12:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "updatedAt"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"2025-07-11T12:00:00.000Z"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "providerConfig"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: { </span><span style="--shiki-light:#B31D28;--shiki-light-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic;">...</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> }</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem during creation.</p></li></ul><hr><h2 id="_2-get-all-ingestion-sources" tabindex="-1">2. Get All Ingestion Sources <a class="header-anchor" href="#_2-get-all-ingestion-sources" aria-label="Permalink to "2. Get All Ingestion Sources""></a></h2><ul><li><strong>Method:</strong> <code>GET</code></li><li><strong>Path:</strong> <code>/</code></li><li><strong>Description:</strong> Retrieves a list of all configured ingestion sources for the organization.</li></ul><h4 id="responses-1" tabindex="-1">Responses <a class="header-anchor" href="#responses-1" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>200 OK</code>):</strong> Returns an array of <code>IngestionSource</code> objects.</p></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem.</p></li></ul><hr><h2 id="_3-get-ingestion-source-by-id" tabindex="-1">3. Get Ingestion Source by ID <a class="header-anchor" href="#_3-get-ingestion-source-by-id" aria-label="Permalink to "3. Get Ingestion Source by ID""></a></h2><ul><li><strong>Method:</strong> <code>GET</code></li><li><strong>Path:</strong> <code>/:id</code></li><li><strong>Description:</strong> Fetches the details of a specific ingestion source.</li></ul><h4 id="url-parameters" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters" aria-label="Permalink to "URL Parameters""></a></h4><ul><li><code>id</code> (string, required): The UUID of the ingestion source.</li></ul><h4 id="responses-2" tabindex="-1">Responses <a class="header-anchor" href="#responses-2" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>200 OK</code>):</strong> Returns the corresponding <code>IngestionSource</code> object.</p></li><li><p><strong>Error (<code>404 Not Found</code>):</strong> Returned if no source with the given ID exists.</p></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem.</p></li></ul><hr><h2 id="_4-update-ingestion-source" tabindex="-1">4. Update Ingestion Source <a class="header-anchor" href="#_4-update-ingestion-source" aria-label="Permalink to "4. Update Ingestion Source""></a></h2><ul><li><strong>Method:</strong> <code>PUT</code></li><li><strong>Path:</strong> <code>/:id</code></li><li><strong>Description:</strong> Modifies an existing ingestion source. This is useful for changing the name, pausing a source, or updating its configuration.</li></ul><h4 id="url-parameters-1" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters-1" aria-label="Permalink to "URL Parameters""></a></h4><ul><li><code>id</code> (string, required): The UUID of the ingestion source to update.</li></ul><h4 id="request-body-updateingestionsourcedto" tabindex="-1">Request Body (<code>UpdateIngestionSourceDto</code>) <a class="header-anchor" href="#request-body-updateingestionsourcedto" aria-label="Permalink to "Request Body (\`UpdateIngestionSourceDto\`)""></a></h4><p>All fields are optional. Only include the fields you want to change.</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;"> "name"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Marketing Dept G-Suite (Paused)"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "status"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"paused"</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h4 id="responses-3" tabindex="-1">Responses <a class="header-anchor" href="#responses-3" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>200 OK</code>):</strong> Returns the complete, updated <code>IngestionSource</code> object.</p></li><li><p><strong>Error (<code>404 Not Found</code>):</strong> Returned if no source with the given ID exists.</p></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem.</p></li></ul><hr><h2 id="_5-delete-ingestion-source" tabindex="-1">5. Delete Ingestion Source <a class="header-anchor" href="#_5-delete-ingestion-source" aria-label="Permalink to "5. Delete Ingestion Source""></a></h2><ul><li><strong>Method:</strong> <code>DELETE</code></li><li><strong>Path:</strong> <code>/:id</code></li><li><strong>Description:</strong> Permanently removes an ingestion source. This action cannot be undone.</li></ul><h4 id="url-parameters-2" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters-2" aria-label="Permalink to "URL Parameters""></a></h4><ul><li><code>id</code> (string, required): The UUID of the ingestion source to delete.</li></ul><h4 id="responses-4" tabindex="-1">Responses <a class="header-anchor" href="#responses-4" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>204 No Content</code>):</strong> Indicates successful deletion with no body content.</p></li><li><p><strong>Error (<code>404 Not Found</code>):</strong> Returned if no source with the given ID exists.</p></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem.</p></li></ul><hr><h2 id="_6-trigger-initial-import" tabindex="-1">6. Trigger Initial Import <a class="header-anchor" href="#_6-trigger-initial-import" aria-label="Permalink to "6. Trigger Initial Import""></a></h2><ul><li><strong>Method:</strong> <code>POST</code></li><li><strong>Path:</strong> <code>/:id/sync</code></li><li><strong>Description:</strong> Initiates the email import process for a given source. This is an asynchronous operation that enqueues a background job and immediately returns a response. The status of the source will be updated to <code>importing</code>.</li></ul><h4 id="url-parameters-3" tabindex="-1">URL Parameters <a class="header-anchor" href="#url-parameters-3" aria-label="Permalink to "URL Parameters""></a></h4><ul><li><code>id</code> (string, required): The UUID of the ingestion source to sync.</li></ul><h4 id="responses-5" tabindex="-1">Responses <a class="header-anchor" href="#responses-5" aria-label="Permalink to "Responses""></a></h4><ul><li><p><strong>Success (<code>202 Accepted</code>):</strong> Confirms that the sync request has been accepted for processing.</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;"> "message"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Initial import triggered successfully."</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>Error (<code>404 Not Found</code>):</strong> Returned if no source with the given ID exists.</p></li><li><p><strong>Error (<code>500 Internal Server Error</code>):</strong> Indicates a server-side problem.</p></li></ul>`,62)]))}const g=e(n,[["render",o]]);export{u as __pageData,g as default};
|
||||
@@ -1 +0,0 @@
|
||||
import{_ as e,c as i,o as a,ae as t}from"./chunks/framework.Cd-3tpCq.js";const u=JSON.parse('{"title":"Ingestion Sources API Documentation","description":"","frontmatter":{},"headers":[],"relativePath":"api/ingestion.md","filePath":"api/ingestion.md"}'),n={name:"api/ingestion.md"};function o(r,s,l,h,d,p){return a(),i("div",null,s[0]||(s[0]=[t("",62)]))}const g=e(n,[["render",o]]);export{u as __pageData,g as default};
|
||||
16
assets/api_ingestion.md.Db0jMzxp.js
Normal file
16
assets/api_ingestion.md.Db0jMzxp.js
Normal file
File diff suppressed because one or more lines are too long
1
assets/api_ingestion.md.Db0jMzxp.lean.js
Normal file
1
assets/api_ingestion.md.Db0jMzxp.lean.js
Normal file
@@ -0,0 +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};
|
||||
17
assets/api_search.md.KKtP7fd6.js
Normal file
17
assets/api_search.md.KKtP7fd6.js
Normal file
@@ -0,0 +1,17 @@
|
||||
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>
|
||||
<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>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "subject"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"Test Email"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "from"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"sender@example.com"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "_formatted"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: {</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "subject"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">"<em>Test</em> Email"</span></span>
|
||||
<span class="line"><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:#24292E;--shiki-dark:#E1E4E8;"> ],</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "total"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "page"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "limit"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">10</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "totalPages"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">1</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">,</span></span>
|
||||
<span class="line"><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> "processingTimeMs"</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">5</span></span>
|
||||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div></li><li><p><strong>400 Bad Request:</strong> Keywords are required.</p></li><li><p><strong>500 Internal Server Error:</strong> An unexpected error occurred.</p></li></ul>`,11)]))}const c=t(n,[["render",l]]);export{E as __pageData,c as default};
|
||||
1
assets/api_search.md.KKtP7fd6.lean.js
Normal file
1
assets/api_search.md.KKtP7fd6.lean.js
Normal file
@@ -0,0 +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};
|
||||
1
assets/api_storage.md.DJf0CH38.js
Normal file
1
assets/api_storage.md.DJf0CH38.js
Normal file
@@ -0,0 +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};
|
||||
1
assets/api_storage.md.DJf0CH38.lean.js
Normal file
1
assets/api_storage.md.DJf0CH38.lean.js
Normal file
@@ -0,0 +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};
|
||||
1
assets/index.md.Jke24r4b.js
Normal file
1
assets/index.md.Jke24r4b.js
Normal file
@@ -0,0 +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};
|
||||
1
assets/index.md.Jke24r4b.lean.js
Normal file
1
assets/index.md.Jke24r4b.lean.js
Normal file
@@ -0,0 +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};
|
||||
@@ -1 +0,0 @@
|
||||
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};
|
||||
@@ -1 +0,0 @@
|
||||
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};
|
||||
@@ -1 +1 @@
|
||||
{"api_index.md":"BsewM5Xg","api_ingestion.md":"Cw9WcUAp","index.md":"sGk9qBFn","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":"BkbaV2Hy","api_auth.md":"Du3O3W7h","api_authentication.md":"BeVpHL1b","api_dashboard.md":"CBdDRqLA","api_index.md":"BsewM5Xg","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"}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -56,7 +56,7 @@
|
||||
<span class="line"><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:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><h2 id="api-reference" tabindex="-1">API Reference <a class="header-anchor" href="#api-reference" aria-label="Permalink to "API Reference""></a></h2><p>The <code>StorageService</code> implements the <code>IStorageProvider</code> interface. All methods are asynchronous and return a <code>Promise</code>.</p><hr><h3 id="put-path-content" tabindex="-1"><code>put(path, content)</code> <a class="header-anchor" href="#put-path-content" aria-label="Permalink to "`put(path, content)`""></a></h3><p>Stores a file at the specified path. If a file already exists at that path, it will be overwritten.</p><ul><li><strong><code>path: string</code></strong>: A unique identifier for the file, including its directory structure (e.g., <code>"user-123/emails/message-abc.eml"</code>).</li><li><strong><code>content: Buffer | NodeJS.ReadableStream</code></strong>: The content of the file. It can be a <code>Buffer</code> for small files or a <code>ReadableStream</code> for large files to ensure memory efficiency.</li><li><strong>Returns</strong>: <code>Promise<void></code> - A promise that resolves when the file has been successfully stored.</li></ul><hr><h3 id="get-path" tabindex="-1"><code>get(path)</code> <a class="header-anchor" href="#get-path" aria-label="Permalink to "`get(path)`""></a></h3><p>Retrieves a file from the specified path as a readable stream.</p><ul><li><strong><code>path: string</code></strong>: The unique identifier of the file to retrieve.</li><li><strong>Returns</strong>: <code>Promise<NodeJS.ReadableStream></code> - A promise that resolves with a readable stream of the file's content.</li><li><strong>Throws</strong>: An <code>Error</code> if the file is not found at the specified path.</li></ul><hr><h3 id="delete-path" tabindex="-1"><code>delete(path)</code> <a class="header-anchor" href="#delete-path" aria-label="Permalink to "`delete(path)`""></a></h3><p>Deletes a file from the storage backend.</p><ul><li><strong><code>path: string</code></strong>: The unique identifier of the file to delete.</li><li><strong>Returns</strong>: <code>Promise<void></code> - A promise that resolves when the file is deleted. If the file does not exist, the promise will still resolve successfully without throwing an error.</li></ul><hr><h3 id="exists-path" tabindex="-1"><code>exists(path)</code> <a class="header-anchor" href="#exists-path" aria-label="Permalink to "`exists(path)`""></a></h3><p>Checks for the existence of a file.</p><ul><li><strong><code>path: string</code></strong>: The unique identifier of the file to check.</li><li><strong>Returns</strong>: <code>Promise<boolean></code> - A promise that resolves with <code>true</code> if the file exists, and <code>false</code> otherwise.</li></ul></div></div></main><footer class="VPDocFooter" data-v-ef58e7af data-v-28097769><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-28097769><span class="visually-hidden" id="doc-footer-aria-label" data-v-28097769>Pager</span><div class="pager" data-v-28097769><a class="VPLink link pager-link prev" href="/services/" data-v-28097769><!--[--><span class="desc" data-v-28097769>Previous page</span><span class="title" data-v-28097769>Overview</span><!--]--></a></div><div class="pager" data-v-28097769><!----></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_index.md\":\"BsewM5Xg\",\"api_ingestion.md\":\"Cw9WcUAp\",\"index.md\":\"sGk9qBFn\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"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\":\"BkbaV2Hy\",\"api_auth.md\":\"Du3O3W7h\",\"api_authentication.md\":\"BeVpHL1b\",\"api_dashboard.md\":\"CBdDRqLA\",\"api_index.md\":\"BsewM5Xg\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"text\":\"Services\",\"items\":[{\"text\":\"Overview\",\"link\":\"/services/\"},{\"text\":\"Storage Service\",\"link\":\"/services/storage-service\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||||
|
||||
</body>
|
||||
</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
@@ -27,7 +27,7 @@
|
||||
<span class="line"></span>
|
||||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"># Restart the services with the new images</span></span>
|
||||
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">docker</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> compose</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> up</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -d</span></span></code></pre></div></div></div></main><footer class="VPDocFooter" data-v-ef58e7af data-v-28097769><!--[--><!--]--><!----><nav class="prev-next" aria-labelledby="doc-footer-aria-label" data-v-28097769><span class="visually-hidden" id="doc-footer-aria-label" data-v-28097769>Pager</span><div class="pager" data-v-28097769><a class="VPLink link pager-link prev" href="/" data-v-28097769><!--[--><span class="desc" data-v-28097769>Previous page</span><span class="title" data-v-28097769>Get Started</span><!--]--></a></div><div class="pager" data-v-28097769><a class="VPLink link pager-link next" href="/user-guides/email-providers/" data-v-28097769><!--[--><span class="desc" data-v-28097769>Next page</span><span class="title" data-v-28097769>Email Providers</span><!--]--></a></div></nav></footer><!--[--><!--]--></div></div></div><!--[--><!--]--></div></div><!----><!--[--><!--]--></div></div>
|
||||
<script>window.__VP_HASH_MAP__=JSON.parse("{\"api_index.md\":\"BsewM5Xg\",\"api_ingestion.md\":\"Cw9WcUAp\",\"index.md\":\"sGk9qBFn\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"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\":\"BkbaV2Hy\",\"api_auth.md\":\"Du3O3W7h\",\"api_authentication.md\":\"BeVpHL1b\",\"api_dashboard.md\":\"CBdDRqLA\",\"api_index.md\":\"BsewM5Xg\",\"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\":\"Ingestion API\",\"link\":\"/api/ingestion\"}]},{\"text\":\"Services\",\"items\":[{\"text\":\"Overview\",\"link\":\"/services/\"},{\"text\":\"Storage Service\",\"link\":\"/services/storage-service\"}]}]},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":false}");</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user