Files
zeekay 2d0675063a extract: initial v0.1.0
Document text extraction service. Drop-in replacement for Huly's
rekoni — listens on :4004 and serves /v1/extract, /v1/extract/url,
/v1/health.

- Pure Go, no CGo, no shelled binaries
- Format detection by magic bytes (filename ignored)
- PDF via ledongthuc/pdf; DOCX/XLSX/PPTX via native ZIP+XML walk;
  HTML via x/net/html with script/style strip; RTF via small native
  parser; plain text and markdown pass-through
- Bearer JWT auth against IAM JWKS (RS256/RS512), 10m cache
- 25 MB streaming upload cap, distroless static runtime
- Tests for every format (real fixtures in testdata/)

Image OCR is out of scope for v0.1 and returns HTTP 415.
2026-05-18 13:57:26 -07:00

26 lines
702 B
Go

// Plain text and Markdown pass-through. We don't strip Markdown
// syntax — downstream indexers handle that more accurately, and the
// rekoni contract was "return what you got, just decoded".
package extract
import "strings"
type textExtractor struct{}
type markdownExtractor struct{}
func init() {
register(FormatText, textExtractor{})
register(FormatMarkdown, markdownExtractor{})
}
func (textExtractor) Extract(data []byte) (Result, error) {
return Result{Text: strings.TrimSpace(string(data))}, nil
}
func (markdownExtractor) Extract(data []byte) (Result, error) {
return Result{
Text: strings.TrimSpace(string(data)),
Metadata: map[string]any{"syntax": "markdown"},
}, nil
}