{"id":36454161,"url":"https://github.com/neotecdigital/lumberjack","last_synced_at":"2026-01-11T23:01:08.952Z","repository":{"id":210576193,"uuid":"726892322","full_name":"NeoTecDigital/LumberJack","owner":"NeoTecDigital","description":"LumberJack is mesh based datastore that handles permission based event logging, with asset capabilities.","archived":false,"fork":false,"pushed_at":"2025-01-10T23:32:39.000Z","size":114268,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-16T01:20:33.490Z","etag":null,"topics":["api","database","event-management","go","persistence","server","time-tracker"],"latest_commit_sha":null,"homepage":"https://www.vaziolabs.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NeoTecDigital.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-03T17:52:31.000Z","updated_at":"2025-01-10T23:32:43.000Z","dependencies_parsed_at":"2025-08-04T23:24:41.118Z","dependency_job_id":null,"html_url":"https://github.com/NeoTecDigital/LumberJack","commit_stats":null,"previous_names":["alephpt/nql","vaziolabs/lumberjack","thenexusgroup/lumberjack","theagencyinstitute/lumberjack","neotecdigital/lumberjack"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/NeoTecDigital/LumberJack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTecDigital%2FLumberJack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTecDigital%2FLumberJack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTecDigital%2FLumberJack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTecDigital%2FLumberJack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeoTecDigital","download_url":"https://codeload.github.com/NeoTecDigital/LumberJack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeoTecDigital%2FLumberJack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28326166,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-11T22:11:01.104Z","status":"ssl_error","status_checked_at":"2026-01-11T22:10:58.990Z","response_time":60,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","database","event-management","go","persistence","server","time-tracker"],"created_at":"2026-01-11T23:01:08.243Z","updated_at":"2026-01-11T23:01:08.937Z","avatar_url":"https://github.com/NeoTecDigital.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LumberJack API Documentation\n![lumberjack500](https://github.com/user-attachments/assets/1f1c2f9e-a550-47eb-8f18-a11abbc1cf58)\n## Overview\nThe LumberJack API provides a hierarchical event tracking system where nodes can have multiple parents and events can be tracked across different organizational paths.\n\n## Installation \u0026 Usage\n\n### Using as a Package\n```bash\ngo get github.com/vaziolabs/lumberjack\n```\n\n### Building from Source\n```bash\ngit clone https://github.com/vaziolabs/lumberjack.git\ncd lumberjack\ngo build\n```\n\n### Getting Started\nStarting LumberJack is as simple as running the following command:\n```bash\n./lumberjack\n```\n\nTo create a new server configuration:\n```bash\n./lumberjack create\n```\n\nTo start the server:\n```bash\n./lumberjack start\n\n# Or with dashboard\n./lumberjack start -d\n```\n\nTo list current configuration:\n```bash\n./lumberjack list\n```\n\nTo delete configuration:\n```bash\n./lumberjack delete\n```\n\n## TODOS:\n - [ ] Improved Testing\n    - [ ] Fix Testing Logging and Scoping to create Run directives\n    - [ ] Remove redundant tests\n    - [ ] Finish incomplete tests\n - [X] Refactor CLI types to work with the Core for directory structure\n    - [X] Ensure logger is logging to the correct file\n    - [X] Ensure the dat file is created and updated in the correct directory\n    - [X] Move cli types to top level\n - [X] Add Core Logger\n    - [X] Integrate debug logging into log file\n - [ ] Improve CLI\n   - [X] Allow Multiple Databases and configs\n   - [X] Add proper linux directory structure\n   - [ ] Ensure delete commands require admin confirmation\n   - [X] Update `list` command to use the proper ID\n   - [X] Fix `delete` command to not delete all databases\n   - [X] Test ALL commands\n   - [ ] Test all Help commands\n   - [X] have CLI daemonize API and Dashboard\n   - [X] Remove Admin from Config\n   - [ ] Add Windows Support\n - [ ] Test Dashboard Data Display and Interaction\n    - [ ] Improve Top Bar integration\n    - [ ] Add User Profile and Server Settings (if permissioned)\n    - [X] Add Dashboard Login\n    - [ ] Add API Event Logging\n    - [ ] Add Node Level User Access Scoping\n    - [ ] LogOut\n    - [ ] MFA\n    - [ ] Third Party Integration (Slack, Google Calendar, etc.)\n - [ ] Create Typescript module for direct API integration\n - [ ] Security\n    - [ ] Add TLS\n    - [ ] Improve Session Authentication for Database \u0026 Dashboard\n    - [ ] Remove Session Token from frontend Cookie \n    - [ ] Remove Sensitive Data from logs\n    - [X] Add JWT\n    - [ ] Integrate for Certificate Authentication\n    - [ ] Add Session Expiration\n    - [ ] Add Session Refresh\n  - [ ] Refactor\n  - [ ] Create Proper Documentation\n\n## Core Concepts\n\n### Nodes\n- **Branch Node**: Can contain other nodes\n- **Leaf Node**: End points for tracking events\n- Each node can have multiple parents, enabling flexible organizational structures\n\n### Events\nAn Event represents a tracked activity with start/end times and associated entries.\n\n#### Attributes:\n- `StartTime`: When the event begins\n- `EndTime`: When the event concludes\n- `Entries`: List of timestamped records\n- `Metadata`: Custom event data\n- `Status`: pending/ongoing/finished\n\n### Entries\nTimestamped records within an event.\n\n#### Attributes:\n- `Timestamp`: Creation time\n- `Content`: Entry data\n- `Metadata`: Additional entry info\n- `UserID`: Creator identifier\n\n## API Endpoints\n\n### Authentication\n\n#### Login\n```bash\ncurl -X POST http://localhost:8080/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"username\": \"admin\",\n    \"password\": \"password\"\n  }'\n```\n\n### Authentication Response\n```json\n{\n  \"session_token\": \"eyJhbGciOiJIUzI1NiIs...\",\n  \"refresh_token\": \"eyJhbGciOiJIUzI1NiIs...\"\n}\n```\n\n### Attachments\n\n#### Upload Attachment\n```bash\ncurl -X POST http://localhost:8080/attachments/upload \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -F \"file=@/path/to/file.jpg\" \\\n  -F \"path=work/projects/project-alpha\"\n```\n\n#### Get Attachment\n```bash\ncurl -X GET http://localhost:8080/attachments/{id} \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -G --data-urlencode \"path=work/projects/project-alpha\"\n```\n\n#### Delete Attachment\n```bash\ncurl -X DELETE http://localhost:8080/attachments/{id} \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -G --data-urlencode \"path=work/projects/project-alpha\"\n```\n\n#### Add Entry Attachment\n```bash\ncurl -X POST http://localhost:8080/events/{eventId}/entries/{entryIndex}/attachments \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -F \"file=@/path/to/file.jpg\" \\\n  -F \"path=work/projects/project-alpha\"\n```\n\n### Attachment Response\n```json\n{\n  \"id\": \"att-123\",\n  \"name\": \"document.pdf\",\n  \"type\": \"application/pdf\",\n  \"size\": 1048576,\n  \"hash\": \"sha256-hash\",\n  \"uploaded_by\": \"user-123\",\n  \"uploaded_at\": \"2024-01-15T10:30:00Z\"\n}\n```\n\n### Node Management\n\n#### Get Forest\n```bash\ncurl -X GET http://localhost:8080/forest \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n#### Get Tree\n```bash\ncurl -X GET http://localhost:8080/forest/tree \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n#### Assign User\n```bash\ncurl -X POST http://localhost:8080/users/assign \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\",\n    \"assignee_id\": \"user123\",\n    \"permission\": \"write\"\n  }'\n```\n\n### Event Management\n\n#### Start Event\n```bash\ncurl -X POST http://localhost:8080/events/start \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\",\n    \"event_id\": \"sprint-1\",\n    \"metadata\": {\n      \"type\": \"sprint\",\n      \"duration\": \"2 weeks\"\n    }\n  }'\n```\n\n#### Plan Event\n```bash\ncurl -X POST http://localhost:8080/events/plan \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\",\n    \"event_id\": \"sprint-2\",\n    \"start_time\": \"2024-01-15T09:00:00Z\",\n    \"end_time\": \"2024-01-29T17:00:00Z\",\n    \"metadata\": {\n      \"type\": \"sprint\"\n    }\n  }'\n```\n\n#### Append to Event\n```bash\ncurl -X POST http://localhost:8080/events/append \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\",\n    \"event_id\": \"sprint-1\",\n    \"content\": \"Completed user authentication feature\",\n    \"metadata\": {\n      \"type\": \"milestone\"\n    }\n  }'\n```\n\n#### End Event\n```bash\ncurl -X POST http://localhost:8080/events/end \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\",\n    \"event_id\": \"sprint-1\"\n  }'\n```\n\n### Time Tracking\n\n#### Start Time Tracking\n```bash\ncurl -X POST http://localhost:8080/time/start \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\"\n  }'\n```\n\n#### Stop Time Tracking\n```bash\ncurl -X POST http://localhost:8080/time/stop \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\"\n  }'\n```\n\n#### Get Time Tracking\n```bash\ncurl -X GET http://localhost:8080/time \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"path\": \"work/projects/project-alpha\"\n  }'\n```\n\n### User Management\n\n#### Create User\n```bash\ncurl -X POST http://localhost:8080/users/create \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"username\": \"john_doe\",\n    \"email\": \"john@example.com\",\n    \"password\": \"secure_password\"\n  }'\n```\n\n#### Get Users\n```bash\ncurl -X GET http://localhost:8080/users \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n#### Get User Profile\n```bash\ncurl -X GET http://localhost:8080/users/profile \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n### Settings\n\n#### Get Server Settings\n```bash\ncurl -X GET http://localhost:8080/settings/ \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\"\n```\n\n#### Update Server Settings\n```bash\ncurl -X POST http://localhost:8080/settings/update \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer \u003ctoken\u003e\" \\\n  -d '{\n    \"organization\": \"MyOrg\",\n    \"server_port\": \"8080\",\n    \"dashboard_url\": \"http://localhost:3000\"\n  }'\n```\n\n## Response Formats\n\n### Event Summary Response\n```json\n{\n  \"event_id\": \"sprint-1\",\n  \"status\": \"finished\",\n  \"start_time\": \"2024-01-01T09:00:00Z\",\n  \"end_time\": \"2024-01-14T17:00:00Z\",\n  \"entries_count\": 15,\n  \"metadata\": {\n    \"type\": \"sprint\",\n    \"team\": \"alpha\"\n  }\n}\n```\n\n### Time Tracking Summary Response\n```json\n[\n  {\n    \"start_time\": \"2024-01-04T09:00:00Z\",\n    \"end_time\": \"2024-01-04T17:00:00Z\",\n    \"duration\": 28800000000000\n  }\n]\n```\n\n## Error Handling\nAll endpoints return standard HTTP status codes:\n- 200: Success\n- 400: Bad Request\n- 401: Unauthorized\n- 403: Forbidden\n- 404: Not Found\n- 500: Internal Server Error\n\nError responses include a message:\n```json\n{\n  \"error\": \"Invalid event ID format\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneotecdigital%2Flumberjack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneotecdigital%2Flumberjack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneotecdigital%2Flumberjack/lists"}