diff --git a/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go b/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go
index 11776fd67..ca6d82046 100644
--- a/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go
+++ b/apps/api/sharedLibs/go-html-to-md/html-to-markdown.go
@@ -1,7 +1,11 @@
package main
+/*
+#include
+*/
+import "C"
import (
- "C"
+ "unsafe"
// "log"
md "github.com/tomkosm/html-to-markdown"
@@ -20,6 +24,11 @@ func ConvertHTMLToMarkdown(html *C.char) *C.char {
return C.CString(markdown)
}
+//export FreeCString
+func FreeCString(s *C.char) {
+ C.free(unsafe.Pointer(s))
+}
+
func main() {
// This function is required for the main package
}
diff --git a/apps/api/src/lib/html-to-markdown.ts b/apps/api/src/lib/html-to-markdown.ts
index f7a2b9445..aa63a6b39 100644
--- a/apps/api/src/lib/html-to-markdown.ts
+++ b/apps/api/src/lib/html-to-markdown.ts
@@ -18,10 +18,14 @@ const goExecutablePath = join(
class GoMarkdownConverter {
private convert: any;
-
+ private free: any;
+
private constructor() {
const lib = koffi.load(goExecutablePath);
- this.convert = lib.func("ConvertHTMLToMarkdown", "string", ["string"]);
+ this.free = lib.func("FreeCString", "void", ["string"]);
+ const cstn = "CString:" + crypto.randomUUID();
+ const freedResultString = koffi.disposable(cstn, "string", this.free);
+ this.convert = lib.func("ConvertHTMLToMarkdown", freedResultString, ["string"]);
}
public static async getInstance(): Promise {