package main import ( "embed" "io/fs" "net/http" "git.dev.alexdunmow.com/block/core/blocks" "git.dev.alexdunmow.com/block/core/plugin" "git.dev.alexdunmow.com/block/core/templates" ) //go:embed all:web/dist/assets var distAssets embed.FS //go:embed schemas var schemasFS embed.FS //go:embed plugin.mod var pluginModBytes []byte // Register is the plugin entry point. // Returns an error if registration fails. func Register(tr templates.TemplateRegistry, br blocks.BlockRegistry) error { br.Register(CalcomBookingMeta, CalcomBookingFunc) return nil } // CalcomBookingMeta defines the Cal.com booking block metadata var CalcomBookingMeta = blocks.BlockMeta{ Key: "calcom:booking", Title: "Cal.com Booking", Description: "Embeddable booking calendar with custom styling powered by Cal.com", Category: blocks.CategoryContent, Source: "calcomblock", EditorJS: "remoteEntry.js", } // Schemas returns the embedded schemas filesystem func Schemas() fs.FS { subFS, _ := fs.Sub(schemasFS, "schemas") return subFS } // AssetsHandler serves static assets including the Module Federation remote entry func AssetsHandler() http.Handler { subFS, err := fs.Sub(distAssets, "web/dist/assets") if err != nil { return http.NotFoundHandler() } return http.FileServer(http.FS(subFS)) } // HTTPHandler returns the plugin's HTTP handler for Cal.com API endpoints. // Mounted at /api/plugins/calcomblock/. deps carries Crypto + Pool. func HTTPHandler(deps plugin.CoreServices) http.Handler { return NewCalcomRouter(deps) } // SettingsPanel returns the path to the Module Federation settings component. // The settings.tsx component is exposed at ./settings in the remoteEntry.js func SettingsPanel() string { return "remoteEntry.js" }