<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>g3 Go API :: g3</title><link>https://g3.munchbox.cc/godoc/index.html</link><description>Auto-generated reference documentation from the Go source code. audit Request ID generation, context propagation, and structured audit logging.
auth SigV4 signature verification and bucket registry.
backend ObjectBackend interface, MetadataStore interface, and Gmail/Drive hybrid backend.
config YAML configuration loading, validation, and defaults.
store Metadata index implementations (SQLite and PostgreSQL).
server S3 HTTP request routing, handlers, and multipart uploads.
telemetry Prometheus metrics, OpenTelemetry tracing, and log correlation.</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://g3.munchbox.cc/godoc/index.xml" rel="self" type="application/rss+xml"/><item><title>audit</title><link>https://g3.munchbox.cc/godoc/audit/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/audit/index.html</guid><description>import "github.com/afreidah/g3/internal/audit" Index Variables func Log(ctx context.Context, event string, attrs …slog.Attr) func NewID() string func RequestID(ctx context.Context) string func WithRequestID(ctx context.Context, id string) context.Context Variables OnEvent is an optional callback invoked on each audit event for metrics integration. Set this to a function that increments a Prometheus counter.</description></item><item><title>auth</title><link>https://g3.munchbox.cc/godoc/auth/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/auth/index.html</guid><description>import "github.com/afreidah/g3/internal/auth" Index Variables type BucketRegistry func NewBucketRegistry(buckets []config.BucketConfig) *BucketRegistry func (r *BucketRegistry) AuthenticateAndResolveBucket(req *http.Request) (string, error) Variables var ( ErrAccessDenied = errors.New("access denied") ErrMissingAuth = errors.New("missing authorization header") ErrMalformedAuth = errors.New("malformed authorization header") ErrExpiredSignature = errors.New("signature expired") )</description></item><item><title>backend</title><link>https://g3.munchbox.cc/godoc/backend/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/backend/index.html</guid><description>import "github.com/afreidah/g3/internal/backend" Package backend is a generated GoMock package.
Index Variables type BucketInfo type BucketRecord type GetObjectResult type GmailBackend func NewGmailBackend(ctx context.Context, cfg *config.GmailConfig, store MetadataStore) (*GmailBackend, error) func (g *GmailBackend) CreateBucket(ctx context.Context, bucket string) error func (g *GmailBackend) DeleteObject(ctx context.Context, bucket, key string) error func (g *GmailBackend) GetObject(ctx context.Context, bucket, key string) (*GetObjectResult, error) func (g *GmailBackend) HeadObject(ctx context.Context, bucket, key string) (*HeadObjectResult, error) func (g *GmailBackend) ListBuckets(ctx context.Context) ([]BucketInfo, error) func (g *GmailBackend) ListObjects(ctx context.Context, bucket, prefix, delimiter, startAfter string, maxKeys int) (*ListObjectsResult, error) func (g *GmailBackend) PutObject(ctx context.Context, bucket, key string, body io.Reader, size int64, contentType string, metadata map[string]string) (string, error) type HeadObjectResult type ListObjectsResult type MetadataStore type MockObjectBackend func NewMockObjectBackend(ctrl *gomock.Controller) *MockObjectBackend func (m *MockObjectBackend) CreateBucket(ctx context.Context, bucket string) error func (m *MockObjectBackend) DeleteObject(ctx context.Context, bucket, key string) error func (m *MockObjectBackend) EXPECT() *MockObjectBackendMockRecorder func (m *MockObjectBackend) GetObject(ctx context.Context, bucket, key string) (*GetObjectResult, error) func (m *MockObjectBackend) HeadObject(ctx context.Context, bucket, key string) (*HeadObjectResult, error) func (m *MockObjectBackend) ListBuckets(ctx context.Context) ([]BucketInfo, error) func (m *MockObjectBackend) ListObjects(ctx context.Context, bucket, prefix, delimiter, startAfter string, maxKeys int) (*ListObjectsResult, error) func (m *MockObjectBackend) PutObject(ctx context.Context, bucket, key string, body io.Reader, size int64, contentType string, metadata map[string]string) (string, error) type MockObjectBackendMockRecorder func (mr *MockObjectBackendMockRecorder) CreateBucket(ctx, bucket any) *gomock.Call func (mr *MockObjectBackendMockRecorder) DeleteObject(ctx, bucket, key any) *gomock.Call func (mr *MockObjectBackendMockRecorder) GetObject(ctx, bucket, key any) *gomock.Call func (mr *MockObjectBackendMockRecorder) HeadObject(ctx, bucket, key any) *gomock.Call func (mr *MockObjectBackendMockRecorder) ListBuckets(ctx any) *gomock.Call func (mr *MockObjectBackendMockRecorder) ListObjects(ctx, bucket, prefix, delimiter, startAfter, maxKeys any) *gomock.Call func (mr *MockObjectBackendMockRecorder) PutObject(ctx, bucket, key, body, size, contentType, metadata any) *gomock.Call type ObjectBackend type ObjectInfo type ObjectRecord type S3Error func (e *S3Error) Error() string type SyncMetadata func ParseMetadataForSync(bodyText string) (*SyncMetadata, error) Variables Sentinel errors for common S3 error conditions.</description></item><item><title>config</title><link>https://g3.munchbox.cc/godoc/config/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/config/index.html</guid><description>import "github.com/afreidah/g3/internal/config" Index func ParseLogLevel(level string) slog.Level type BucketConfig type Config func LoadConfig(path string) (*Config, error) func (c *Config) SetDefaultsAndValidate() error type CredentialConfig type DatabaseConfig type GmailConfig type MetricsConfig type ServerConfig type TelemetryConfig func ParseLogLevel func ParseLogLevel(level string) slog.Level ParseLogLevel converts a log level string to slog.Level.</description></item><item><title>server</title><link>https://g3.munchbox.cc/godoc/server/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/server/index.html</guid><description>import "github.com/afreidah/g3/internal/server" Index type MultipartStore func NewMultipartStore(ttl time.Duration) *MultipartStore func (s *MultipartStore) CleanExpired() int func (s *MultipartStore) StartCleanupLoop(ctx context.Context) type Server func New(b backend.ObjectBackend, r *auth.BucketRegistry) *Server func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) func (s *Server) StartMultipartCleanup(ctx context.Context) type MultipartStore MultipartStore manages in-progress multipart uploads in memory.</description></item><item><title>store</title><link>https://g3.munchbox.cc/godoc/store/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/store/index.html</guid><description>import "github.com/afreidah/g3/internal/store" Index type PostgresStore func NewPostgres(ctx context.Context, cfg *config.DatabaseConfig) (*PostgresStore, error) func (s *PostgresStore) Close() error func (s *PostgresStore) DeleteObject(ctx context.Context, bucket, key string) error func (s *PostgresStore) GetBucket(ctx context.Context, name string) (*backend.BucketRecord, error) func (s *PostgresStore) GetObject(ctx context.Context, bucket, key string) (*backend.ObjectRecord, error) func (s *PostgresStore) ListBuckets(ctx context.Context) ([]*backend.BucketRecord, error) func (s *PostgresStore) ListObjects(ctx context.Context, bucket, prefix, startAfter string, maxKeys int) ([]*backend.ObjectRecord, error) func (s *PostgresStore) PutBucket(ctx context.Context, rec *backend.BucketRecord) error func (s *PostgresStore) PutObject(ctx context.Context, rec *backend.ObjectRecord) error type SQLiteStore func NewSQLite(path string) (*SQLiteStore, error) func (s *SQLiteStore) Close() error func (s *SQLiteStore) DeleteObject(ctx context.Context, bucket, key string) error func (s *SQLiteStore) GetBucket(ctx context.Context, name string) (*backend.BucketRecord, error) func (s *SQLiteStore) GetObject(ctx context.Context, bucket, key string) (*backend.ObjectRecord, error) func (s *SQLiteStore) ListBuckets(ctx context.Context) ([]*backend.BucketRecord, error) func (s *SQLiteStore) ListObjects(ctx context.Context, bucket, prefix, startAfter string, maxKeys int) ([]*backend.ObjectRecord, error) func (s *SQLiteStore) PutBucket(ctx context.Context, rec *backend.BucketRecord) error func (s *SQLiteStore) PutObject(ctx context.Context, rec *backend.ObjectRecord) error</description></item><item><title>telemetry</title><link>https://g3.munchbox.cc/godoc/telemetry/index.html</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://g3.munchbox.cc/godoc/telemetry/index.html</guid><description>import "github.com/afreidah/g3/internal/telemetry" Index Constants Variables func GmailAttributes(operation, bucket, key string) []attribute.KeyValue func InitTracer(ctx context.Context, cfg TracingConfig) (func(context.Context) error, error) func RequestAttributes(method, path, bucket, key, clientIP string) []attribute.KeyValue func StartClientSpan(ctx context.Context, name string, attrs …attribute.KeyValue) (context.Context, trace.Span) func StartServerSpan(ctx context.Context, name string, attrs …attribute.KeyValue) (context.Context, trace.Span) func StartSpan(ctx context.Context, name string, attrs …attribute.KeyValue) (context.Context, trace.Span) func Tracer() trace.Tracer type LogBuffer func NewLogBuffer() *LogBuffer func (b *LogBuffer) Add(entry LogEntry) func (b *LogBuffer) Entries(count int) []LogEntry type LogEntry type TeeHandler func NewTeeHandler(primary slog.Handler, buf *LogBuffer) *TeeHandler func (h *TeeHandler) Enabled(ctx context.Context, level slog.Level) bool func (h *TeeHandler) Handle(ctx context.Context, r slog.Record) error func (h *TeeHandler) WithAttrs(attrs []slog.Attr) slog.Handler func (h *TeeHandler) WithGroup(name string) slog.Handler type TraceHandler func NewTraceHandler(inner slog.Handler) *TraceHandler func (h *TraceHandler) Enabled(ctx context.Context, level slog.Level) bool func (h *TraceHandler) Handle(ctx context.Context, r slog.Record) error func (h *TraceHandler) WithAttrs(attrs []slog.Attr) slog.Handler func (h *TraceHandler) WithGroup(name string) slog.Handler type TracingConfig Constants TracerName identifies the tracer in OpenTelemetry output.</description></item></channel></rss>