5282 lines
85 KiB
Markdown
5282 lines
85 KiB
Markdown
# RuDS Lua API Reference
|
|
|
|
Contract version: `0.4.0`
|
|
|
|
The `bds` global is the supported bridge from sandboxed Lua scripts to RuDS. The unmarked method signatures are identical to bDS2 so the same published script file can run in either application. Calls are synchronous, JSON-compatible values cross the bridge as Lua tables, and project-scoped methods always use the active project.
|
|
|
|
## Usage
|
|
|
|
A utility script exposes `main(input)` and calls the API through `bds`:
|
|
|
|
```lua
|
|
function main(input)
|
|
local posts = bds.posts.get_all()
|
|
bds.app.log("Found " .. #posts .. " posts")
|
|
return posts
|
|
end
|
|
```
|
|
|
|
Macro scripts expose `render(input, context)` and transform scripts expose `main(input, context)`. Complete runnable files are in [`examples/`](examples/). Scripts cannot access the network, filesystem, processes, environment variables, or native Lua modules directly; use the documented host methods instead. Host failures return `nil` or `false` where the signature permits it.
|
|
|
|
## Conventions
|
|
|
|
- A parameter ending in `?` is optional.
|
|
- `T | nil` means the call can return no value. Check for `nil` before using it.
|
|
- `T[]` is a one-based Lua array.
|
|
- Public records are documented in [Lua API Types](TYPES.md).
|
|
- Dates and timestamps returned by RuDS records are ISO-8601 strings.
|
|
- Methods marked **RuDS extension** are not available to scripts running under bDS2.
|
|
|
|
## Contents
|
|
|
|
- [Root helpers](#root-helpers)
|
|
- [`bds.app`](#bdsapp)
|
|
- [`bds.chat`](#bdschat)
|
|
- [`bds.embeddings`](#bdsembeddings)
|
|
- [`bds.media`](#bdsmedia)
|
|
- [`bds.meta`](#bdsmeta)
|
|
- [`bds.posts`](#bdsposts)
|
|
- [`bds.projects`](#bdsprojects)
|
|
- [`bds.publish`](#bdspublish)
|
|
- [`bds.scripts`](#bdsscripts)
|
|
- [`bds.sync`](#bdssync)
|
|
- [`bds.tags`](#bdstags)
|
|
- [`bds.tasks`](#bdstasks)
|
|
- [`bds.templates`](#bdstemplates)
|
|
- [Public data types](TYPES.md)
|
|
|
|
## Root helpers
|
|
|
|
### `bds.report_progress`
|
|
|
|
Report progress for the current managed job.
|
|
|
|
> **RuDS extension:** this helper is not part of the portable bDS2 API.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.report_progress(payload: table) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `payload` | `table` | Yes | `{ current = 1, total = 10, message = "Working" }` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.report_progress({ current = 1, total = 10, message = "Working" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
## `bds.app`
|
|
|
|
### `bds.app.copy_to_clipboard`
|
|
|
|
Copy text to the system clipboard.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.copy_to_clipboard(text: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `text` | `string` | Yes | `"Example content"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.copy_to_clipboard("Example content")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.app.get_data_paths`
|
|
|
|
Return filesystem paths for the current application and project data.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.get_data_paths() -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.get_data_paths()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.app.get_blogmark_bookmarklet`
|
|
|
|
Return the Blogmark bookmarklet JavaScript source.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.get_blogmark_bookmarklet() -> string
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.get_blogmark_bookmarklet()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.app.get_system_language`
|
|
|
|
Return the current UI locale (the server-side UI language setting, falling back to the OS locale when unset).
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.get_system_language() -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.get_system_language()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.app.get_default_project_path`
|
|
|
|
Return the current project's filesystem path.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.get_default_project_path() -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.get_default_project_path()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.app.get_title_bar_metrics`
|
|
|
|
Return desktop title bar inset metrics when available.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.get_title_bar_metrics() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.get_title_bar_metrics()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.app.log`
|
|
|
|
Append a line to the script output stream. Multiple arguments are joined with spaces. Output appears in the desktop app's Output panel (and on stdout in the CLI); Lua's global `print` is routed the same way.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.log(text: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `text` | `string` | Yes | `"Example content"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.log("Example content")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.app.notify_renderer_ready`
|
|
|
|
Notify the host application that the renderer is ready.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.notify_renderer_ready() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.notify_renderer_ready()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.app.open_folder`
|
|
|
|
Open a folder in the system file manager.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.open_folder(folder_path: string) -> string
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `folder_path` | `string` | Yes | `"/path/to/item"` |
|
|
|
|
**Returns**
|
|
|
|
`string`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.open_folder("/path/to/item")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.app.read_project_metadata`
|
|
|
|
Read project metadata from a project folder path.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.read_project_metadata(folder_path: string) -> ProjectMetadata | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `folder_path` | `string` | Yes | `"/path/to/item"` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata | nil`. See [`ProjectMetadata`](TYPES.md#projectmetadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.read_project_metadata("/path/to/item")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.app.select_folder`
|
|
|
|
Show the native folder picker and return the chosen path.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.select_folder(title?: string) -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `title` | `string` | No | `"Example post"` |
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.select_folder("Example post")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.app.set_preview_post_target`
|
|
|
|
Set the current preview-post target used by desktop integrations.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.set_preview_post_target(post_id?: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | No | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.set_preview_post_target("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.app.show_item_in_folder`
|
|
|
|
Reveal a file or folder in the system file manager.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.show_item_in_folder(item_path: string) -> nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `item_path` | `string` | Yes | `"/path/to/item"` |
|
|
|
|
**Returns**
|
|
|
|
`nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.show_item_in_folder("/path/to/item")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
nil
|
|
```
|
|
|
|
### `bds.app.trigger_menu_action`
|
|
|
|
Trigger a native menu action by action id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.trigger_menu_action(action: string) -> nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `action` | `string` | Yes | `"new-post"` |
|
|
|
|
**Returns**
|
|
|
|
`nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.trigger_menu_action("new-post")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
nil
|
|
```
|
|
|
|
### `bds.app.progress`
|
|
|
|
Report numeric progress for the current script execution, optionally including a total and a user-facing message.
|
|
|
|
> **RuDS extension:** this helper is not part of the portable bDS2 API.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.progress(current: number, total?: number, message?: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `current` | `number` | Yes | `1` |
|
|
| `total` | `number` | No | `100` |
|
|
| `message` | `string` | No | `"Working"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.progress(1, 100, "Working")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.app.toast`
|
|
|
|
Show bounded user feedback from a script. Transform scripts are subject to the runtime toast budget.
|
|
|
|
> **RuDS extension:** this helper is not part of the portable bDS2 API.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.app.toast(message: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `message` | `string` | Yes | `"Working"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.app.toast("Working")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
## `bds.chat`
|
|
|
|
### `bds.chat.detect_post_language`
|
|
|
|
Detect the language of post title and content.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.detect_post_language(title: string, content: string) -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `title` | `string` | Yes | `"Example post"` |
|
|
| `content` | `string` | Yes | `"Example content"` |
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.detect_post_language("Example post", "Example content")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.chat.analyze_post`
|
|
|
|
Analyze a post using the configured AI runtime.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.analyze_post(post_id: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.analyze_post("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.chat.translate_post`
|
|
|
|
Translate a post and persist the translation.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.translate_post(post_id: string, language: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.translate_post("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.chat.analyze_media_image`
|
|
|
|
Analyze a media image using the configured AI runtime.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.analyze_media_image(media_id: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.analyze_media_image("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.chat.detect_media_language`
|
|
|
|
Detect the language of media metadata.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.detect_media_language(title: string, alt?: string, caption?: string) -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `title` | `string` | Yes | `"Example post"` |
|
|
| `alt` | `string` | No | `"A descriptive alternative"` |
|
|
| `caption` | `string` | No | `"Example caption"` |
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.detect_media_language("Example post", "A descriptive alternative", "Example caption")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.chat.translate_media_metadata`
|
|
|
|
Translate media metadata and persist the translation.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.chat.translate_media_metadata(media_id: string, language: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.chat.translate_media_metadata("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
## `bds.embeddings`
|
|
|
|
### `bds.embeddings.compute_similarities`
|
|
|
|
Compute similarity scores from one source post to target posts.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.compute_similarities(post_id: string, target_ids: table) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `target_ids` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.compute_similarities("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.embeddings.dismiss_pair`
|
|
|
|
Dismiss a duplicate candidate pair.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.dismiss_pair(post_id_a: string, post_id_b: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id_a` | `string` | Yes | `"example"` |
|
|
| `post_id_b` | `string` | Yes | `"example"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.dismiss_pair("example", "example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.embeddings.find_duplicates`
|
|
|
|
Find duplicate post candidates for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.find_duplicates() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.find_duplicates()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.embeddings.find_similar`
|
|
|
|
Find posts similar to the given post id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.find_similar(post_id: string, limit?: integer) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `limit` | `integer` | No | `nil` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.find_similar("example-id", nil)
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.embeddings.get_progress`
|
|
|
|
Get embedding index progress for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.get_progress() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.get_progress()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.embeddings.index_unindexed_posts`
|
|
|
|
Index posts missing embeddings for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.index_unindexed_posts() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.index_unindexed_posts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.embeddings.suggest_tags`
|
|
|
|
Suggest tags for a post from semantic similarity.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.embeddings.suggest_tags(post_id: string, exclude_tags?: table) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `exclude_tags` | `table` | No | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.embeddings.suggest_tags("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
## `bds.media`
|
|
|
|
### `bds.media.delete_translation`
|
|
|
|
Delete a media translation by language.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.delete_translation(media_id: string, language: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.delete_translation("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.media.filter`
|
|
|
|
Filter media using year, month, tags, language, or date range fields.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.filter(filters: table) -> MediaData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `filters` | `table` | Yes | `{ status = "draft" }` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData[]`. See [`MediaData`](TYPES.md#mediadata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.filter({ status = "draft" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.media.import`
|
|
|
|
Import media into the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.import(data: table) -> MediaData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.import({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.media.get_by_year_month`
|
|
|
|
Get media counts grouped by year and month.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_by_year_month() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_by_year_month()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.media.get_file_path`
|
|
|
|
Return the absolute file path for a media item.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_file_path(media_id: string) -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_file_path("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.media.update`
|
|
|
|
Update media metadata by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.update(id: string, data: table) -> MediaData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.media.delete`
|
|
|
|
Delete a media item by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.media.get`
|
|
|
|
Fetch one media item by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get(id: string) -> MediaData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.media.get_all`
|
|
|
|
Fetch all media in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_all() -> MediaData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`MediaData[]`. See [`MediaData`](TYPES.md#mediadata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.media.get_tags`
|
|
|
|
Return tag names used by media in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_tags() -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_tags()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.media.get_tags_with_counts`
|
|
|
|
Return media tags with usage counts.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_tags_with_counts() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_tags_with_counts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.media.get_thumbnail`
|
|
|
|
Return a media thumbnail as a data URL for the requested size.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_thumbnail(media_id: string, size?: string) -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `size` | `string` | No | `"small"` |
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_thumbnail("example-id", "small")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.media.get_translation`
|
|
|
|
Return one media translation by language.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_translation(media_id: string, language: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_translation("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.media.get_translations`
|
|
|
|
Return all translations for a media item.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_translations(media_id: string) -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_translations("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.media.get_url`
|
|
|
|
Return the project-relative public URL path for a media item.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.get_url(media_id: string) -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.get_url("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.media.rebuild_from_files`
|
|
|
|
Rebuild media records from sidecar files on disk.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.rebuild_from_files() -> MediaData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`MediaData[] | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.rebuild_from_files()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.media.regenerate_missing_thumbnails`
|
|
|
|
Generate thumbnails for media items that are missing them.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.regenerate_missing_thumbnails() -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.regenerate_missing_thumbnails()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.media.regenerate_thumbnails`
|
|
|
|
Regenerate all thumbnails for one media item.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.regenerate_thumbnails(media_id: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.regenerate_thumbnails("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.media.reindex_text`
|
|
|
|
Reindex post and media search text for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.reindex_text() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.reindex_text()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.media.replace_file`
|
|
|
|
Replace the binary file behind an existing media item.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.replace_file(media_id: string, source_path: string) -> MediaData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `source_path` | `string` | Yes | `"/path/to/item"` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.replace_file("example-id", "/path/to/item")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.media.search`
|
|
|
|
Search media by free-text query.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.search(query: string) -> MediaData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `query` | `string` | Yes | `"rust"` |
|
|
|
|
**Returns**
|
|
|
|
`MediaData[] | nil`. See [`MediaData`](TYPES.md#mediadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.search("rust")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
alt = "A descriptive alternative",
|
|
caption = "Example caption",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
file_path = "/path/to/item",
|
|
id = "example-id",
|
|
mime_type = "image/png",
|
|
original_name = "image.png",
|
|
project_id = "example-id",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.media.upsert_translation`
|
|
|
|
Create or update a media translation.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.media.upsert_translation(media_id: string, language: string, data: table) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `media_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.media.upsert_translation("example-id", "en", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
## `bds.meta`
|
|
|
|
### `bds.meta.get_project_metadata`
|
|
|
|
Read metadata for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.get_project_metadata() -> ProjectMetadata
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata`. See [`ProjectMetadata`](TYPES.md#projectmetadata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.get_project_metadata()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.meta.update_project_metadata`
|
|
|
|
Update metadata for the current project. Keys omitted from updates keep their current values.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.update_project_metadata(updates: table) -> ProjectMetadata | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `updates` | `table` | Yes | `{ description = "Updated description" }` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata | nil`. See [`ProjectMetadata`](TYPES.md#projectmetadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.update_project_metadata({ description = "Updated description" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.meta.set_project_metadata`
|
|
|
|
Replace project metadata fields for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.set_project_metadata(updates: table) -> ProjectMetadata | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `updates` | `table` | Yes | `{ description = "Updated description" }` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata | nil`. See [`ProjectMetadata`](TYPES.md#projectmetadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.set_project_metadata({ description = "Updated description" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.meta.add_category`
|
|
|
|
Add a category to the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.add_category(name: string) -> ProjectMetadata | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata | nil`. See [`ProjectMetadata`](TYPES.md#projectmetadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.add_category("Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.meta.remove_category`
|
|
|
|
Remove a category from the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.remove_category(name: string) -> ProjectMetadata | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectMetadata | nil`. See [`ProjectMetadata`](TYPES.md#projectmetadata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.remove_category("Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
blog_languages = { "example" },
|
|
categories = { "example" },
|
|
default_author = "Ada Author",
|
|
description = "example",
|
|
main_language = "en",
|
|
name = "Example",
|
|
public_url = "https://example.com",
|
|
publishing_preferences = { key = "value" },
|
|
}
|
|
```
|
|
|
|
### `bds.meta.add_tag`
|
|
|
|
Add a tag record to the current project if it does not already exist.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.add_tag(name: string) -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.add_tag("Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.meta.remove_tag`
|
|
|
|
Remove a tag record from the current project by name.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.remove_tag(name: string) -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.remove_tag("Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.meta.get_categories`
|
|
|
|
Get project categories.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.get_categories() -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.get_categories()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.meta.get_tags`
|
|
|
|
Get tag names for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.get_tags() -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.get_tags()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.meta.get_publishing_preferences`
|
|
|
|
Get publishing preferences for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.get_publishing_preferences() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.get_publishing_preferences()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.meta.set_publishing_preferences`
|
|
|
|
Set publishing preferences for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.set_publishing_preferences(prefs: table) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `prefs` | `table` | Yes | `{ publish_drafts = false }` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.set_publishing_preferences({ publish_drafts = false })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.meta.clear_publishing_preferences`
|
|
|
|
Reset publishing preferences to defaults.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.clear_publishing_preferences() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.clear_publishing_preferences()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.meta.sync_on_startup`
|
|
|
|
Synchronize startup metadata state and return tags, categories, and project metadata.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.meta.sync_on_startup() -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.meta.sync_on_startup()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
## `bds.posts`
|
|
|
|
### `bds.posts.create`
|
|
|
|
Create a post in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.create(data: table) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.create({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.discard`
|
|
|
|
Discard unpublished post changes and restore the last published version from disk.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.discard(id: string) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.discard("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.filter`
|
|
|
|
Filter posts using status, tags, categories, language, year, month, or date range fields.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.filter(filters: table) -> PostData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `filters` | `table` | Yes | `{ status = "draft" }` |
|
|
|
|
**Returns**
|
|
|
|
`PostData[] | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.filter({ status = "draft" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.posts.generate_unique_slug`
|
|
|
|
Generate a unique slug from a title, optionally excluding one post id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.generate_unique_slug(title: string, exclude_post_id?: string) -> string
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `title` | `string` | Yes | `"Example post"` |
|
|
| `exclude_post_id` | `string` | No | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`string`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.generate_unique_slug("Example post", "example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.posts.get_by_status`
|
|
|
|
Fetch posts filtered by a specific status.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_by_status(status: string) -> PostData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `status` | `string` | Yes | `"draft"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData[]`. See [`PostData`](TYPES.md#postdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_by_status("draft")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.posts.get_by_year_month`
|
|
|
|
Get post counts grouped by year and month.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_by_year_month() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_by_year_month()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.get_dashboard_stats`
|
|
|
|
Return aggregate post dashboard counts for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_dashboard_stats() -> table
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_dashboard_stats()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.posts.get_linked_by`
|
|
|
|
Return posts that link to the given post.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_linked_by(post_id: string) -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_linked_by("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.get_links_to`
|
|
|
|
Return posts linked from the given post.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_links_to(post_id: string) -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_links_to("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.get_preview_url`
|
|
|
|
Return the local preview URL for a post, optionally with draft and language query parameters.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_preview_url(post_id: string, options?: table) -> string | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `options` | `table` | No | `{ language = "en" }` |
|
|
|
|
**Returns**
|
|
|
|
`string | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_preview_url("example-id", { language = "en" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
"example"
|
|
```
|
|
|
|
### `bds.posts.update`
|
|
|
|
Update a post by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.update(id: string, data: table) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.delete`
|
|
|
|
Delete a post by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.posts.get`
|
|
|
|
Fetch one post by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get(id: string) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.get_all`
|
|
|
|
Fetch all posts in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_all() -> PostData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`PostData[]`. See [`PostData`](TYPES.md#postdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.posts.get_by_slug`
|
|
|
|
Fetch one post by slug.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_by_slug(slug: string) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `slug` | `string` | Yes | `"example-post"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_by_slug("example-post")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.get_categories`
|
|
|
|
Get category names used by posts in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_categories() -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_categories()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.posts.get_categories_with_counts`
|
|
|
|
Get post categories with usage counts.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_categories_with_counts() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_categories_with_counts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.get_tags`
|
|
|
|
Get tag names used by posts in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_tags() -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_tags()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.posts.get_tags_with_counts`
|
|
|
|
Get post tags with usage counts.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_tags_with_counts() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_tags_with_counts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.get_translation`
|
|
|
|
Get a single translation for a post by language.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_translation(post_id: string, language: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_translation("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.posts.get_translations`
|
|
|
|
Get all translations for a post.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.get_translations(post_id: string) -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.get_translations("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.posts.has_published_version`
|
|
|
|
Check whether a post has a published version.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.has_published_version(post_id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.has_published_version("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.posts.is_slug_available`
|
|
|
|
Return whether a slug is available in the current project, optionally excluding one post id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.is_slug_available(slug: string, exclude_post_id?: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `slug` | `string` | Yes | `"example-post"` |
|
|
| `exclude_post_id` | `string` | No | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.is_slug_available("example-post", "example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.posts.publish`
|
|
|
|
Publish a post by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.publish(id: string) -> PostData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.publish("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.posts.publish_translation`
|
|
|
|
Publish one translation of a post by language.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.publish_translation(post_id: string, language: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `post_id` | `string` | Yes | `"example-id"` |
|
|
| `language` | `string` | Yes | `"en"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.publish_translation("example-id", "en")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.posts.rebuild_from_files`
|
|
|
|
Rebuild post records from published files.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.rebuild_from_files() -> PostData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`PostData[] | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.rebuild_from_files()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.posts.rebuild_links`
|
|
|
|
Rebuild the post link graph for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.rebuild_links() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.rebuild_links()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.posts.reindex_text`
|
|
|
|
Reindex post and media search text for the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.reindex_text() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.reindex_text()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.posts.search`
|
|
|
|
Search posts by free-text query.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.posts.search(query: string) -> PostData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `query` | `string` | Yes | `"rust"` |
|
|
|
|
**Returns**
|
|
|
|
`PostData[] | nil`. See [`PostData`](TYPES.md#postdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.posts.search("rust")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
backlinks = { { key = "value" } },
|
|
categories = { "example" },
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
language = "en",
|
|
links_to = { { key = "value" } },
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
tags = { "example" },
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
## `bds.projects`
|
|
|
|
### `bds.projects.create`
|
|
|
|
Create a project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.create(data: table) -> ProjectData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectData | nil`. See [`ProjectData`](TYPES.md#projectdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.create({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.projects.delete`
|
|
|
|
Delete a project by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.projects.delete_with_data`
|
|
|
|
Delete a project by id and remove its project directory.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.delete_with_data(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.delete_with_data("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.projects.get`
|
|
|
|
Fetch one project by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.get(id: string) -> ProjectData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectData | nil`. See [`ProjectData`](TYPES.md#projectdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.projects.get_all`
|
|
|
|
Fetch all projects.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.get_all() -> ProjectData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`ProjectData[]`. See [`ProjectData`](TYPES.md#projectdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.projects.get_active`
|
|
|
|
Fetch the active project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.get_active() -> ProjectData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`ProjectData | nil`. See [`ProjectData`](TYPES.md#projectdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.get_active()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.projects.set_active`
|
|
|
|
Set the active project by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.set_active(id: string) -> ProjectData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectData | nil`. See [`ProjectData`](TYPES.md#projectdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.set_active("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.projects.update`
|
|
|
|
Update a project by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.projects.update(id: string, data: table) -> ProjectData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`ProjectData | nil`. See [`ProjectData`](TYPES.md#projectdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.projects.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
data_path = "/path/to/item",
|
|
description = "example",
|
|
id = "example-id",
|
|
is_active = true,
|
|
name = "Example",
|
|
slug = "example-post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
## `bds.publish`
|
|
|
|
### `bds.publish.upload_site`
|
|
|
|
Upload the rendered site using the provided publishing credentials.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.publish.upload_site(credentials: table) -> TaskData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `credentials` | `table` | Yes | `{ host = "example.com", username = "author" }` |
|
|
|
|
**Returns**
|
|
|
|
`TaskData | nil`. See [`TaskData`](TYPES.md#taskdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.publish.upload_site({ host = "example.com", username = "author" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
cancellable = true,
|
|
cancellation_requested = true,
|
|
group_id = "example-id",
|
|
group_name = "example",
|
|
id = "example-id",
|
|
message = "Working",
|
|
name = "Example",
|
|
progress = 0.5,
|
|
status = "draft",
|
|
}
|
|
```
|
|
|
|
## `bds.scripts`
|
|
|
|
### `bds.scripts.create`
|
|
|
|
Create a script in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.create(data: table) -> ScriptData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`ScriptData | nil`. See [`ScriptData`](TYPES.md#scriptdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.create({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.scripts.update`
|
|
|
|
Update a script by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.update(id: string, data: table) -> ScriptData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`ScriptData | nil`. See [`ScriptData`](TYPES.md#scriptdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.scripts.delete`
|
|
|
|
Delete a script by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.scripts.get`
|
|
|
|
Fetch one script by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.get(id: string) -> ScriptData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`ScriptData | nil`. See [`ScriptData`](TYPES.md#scriptdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.scripts.get_all`
|
|
|
|
Fetch all scripts in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.get_all() -> ScriptData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`ScriptData[]`. See [`ScriptData`](TYPES.md#scriptdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.scripts.publish`
|
|
|
|
Publish a script by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.publish(id: string) -> ScriptData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`ScriptData | nil`. See [`ScriptData`](TYPES.md#scriptdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.publish("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.scripts.rebuild_from_files`
|
|
|
|
Rebuild script records from published files.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.scripts.rebuild_from_files() -> ScriptData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`ScriptData[] | nil`. See [`ScriptData`](TYPES.md#scriptdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.scripts.rebuild_from_files()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
entrypoint = "main",
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
## `bds.sync`
|
|
|
|
### `bds.sync.check_availability`
|
|
|
|
Return whether Git is available on the current machine.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.check_availability() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.check_availability()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.sync.get_repo_state`
|
|
|
|
Return repository state for the active project using the GitRepositoryState shape.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.get_repo_state() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.get_repo_state()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.get_status`
|
|
|
|
Return Git status for the active project using the GitStatusResult shape.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.get_status() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.get_status()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.get_history`
|
|
|
|
Return commit history for the active project using the GitHistoryResult shape.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.get_history() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.get_history()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.get_remote_state`
|
|
|
|
Return the GitRepositoryState for the active project, matching the bDS2 remote-state alias.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.get_remote_state() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.get_remote_state()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.fetch`
|
|
|
|
Fetch and prune remote Git refs for the active project, returning GitNetworkResult; unavailable in airplane mode.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.fetch() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.fetch()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.pull`
|
|
|
|
Fast-forward pull the active project, reconcile its cache database, and return GitNetworkResult; unavailable in airplane mode.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.pull() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.pull()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.push`
|
|
|
|
Push the active project to its configured remote and return GitNetworkResult; unavailable in airplane mode.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.push() -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.push()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
### `bds.sync.commit_all`
|
|
|
|
Stage and commit every pending change in the active project, returning GitCommitResult.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.sync.commit_all(message: string) -> table | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `message` | `string` | Yes | `"Working"` |
|
|
|
|
**Returns**
|
|
|
|
`table | nil`. `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.sync.commit_all("Working")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ key = "value" }
|
|
```
|
|
|
|
## `bds.tags`
|
|
|
|
### `bds.tags.create`
|
|
|
|
Create a tag in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.create(data: table) -> TagData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`TagData | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.create({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.tags.update`
|
|
|
|
Update a tag by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.update(id: string, data: table) -> TagData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`TagData | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.tags.delete`
|
|
|
|
Delete a tag by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.tags.get`
|
|
|
|
Fetch one tag by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.get(id: string) -> TagData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`TagData | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.tags.get_all`
|
|
|
|
Fetch all tags in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.get_all() -> TagData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TagData[]`. See [`TagData`](TYPES.md#tagdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.tags.get_by_name`
|
|
|
|
Fetch one tag by name.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.get_by_name(name: string) -> TagData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`TagData | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.get_by_name("Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.tags.get_posts_with_tag`
|
|
|
|
Get post ids using a specific tag.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.get_posts_with_tag(tag_id: string) -> string[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `tag_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`string[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.get_posts_with_tag("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ "example" }
|
|
```
|
|
|
|
### `bds.tags.get_with_counts`
|
|
|
|
Fetch tags with usage counts.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.get_with_counts() -> table[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`table[]`.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.get_with_counts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{ { key = "value" } }
|
|
```
|
|
|
|
### `bds.tags.merge`
|
|
|
|
Merge source tags into a target tag.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.merge(source_tag_ids: table, target_tag_id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `source_tag_ids` | `table` | Yes | `{ "tag-1", "tag-2" }` |
|
|
| `target_tag_id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.merge({ "tag-1", "tag-2" }, "example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.tags.rename`
|
|
|
|
Rename a tag by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.rename(id: string, new_name: string) -> TagData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `new_name` | `string` | Yes | `"Example"` |
|
|
|
|
**Returns**
|
|
|
|
`TagData | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.rename("example-id", "Example")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.tags.sync_from_posts`
|
|
|
|
Sync tag records from post tags.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tags.sync_from_posts() -> TagData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TagData[] | nil`. See [`TagData`](TYPES.md#tagdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tags.sync_from_posts()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
color = "#336699",
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
id = "example-id",
|
|
name = "Example",
|
|
post_template_slug = "example-post",
|
|
project_id = "example-id",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
## `bds.tasks`
|
|
|
|
### `bds.tasks.get`
|
|
|
|
Fetch one task by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.get(id: string) -> TaskData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`TaskData | nil`. See [`TaskData`](TYPES.md#taskdata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
cancellable = true,
|
|
cancellation_requested = true,
|
|
group_id = "example-id",
|
|
group_name = "example",
|
|
id = "example-id",
|
|
message = "Working",
|
|
name = "Example",
|
|
progress = 0.5,
|
|
status = "draft",
|
|
}
|
|
```
|
|
|
|
### `bds.tasks.status_snapshot`
|
|
|
|
Fetch the current task status snapshot.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.status_snapshot() -> TaskStatus
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TaskStatus`. See [`TaskStatus`](TYPES.md#taskstatus).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.status_snapshot()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
active_count = 1,
|
|
pending_count = 1,
|
|
running_count = 1,
|
|
tasks = {
|
|
{
|
|
cancellable = true,
|
|
cancellation_requested = true,
|
|
group_id = "example-id",
|
|
group_name = "example",
|
|
id = "example-id",
|
|
message = "Working",
|
|
name = "Example",
|
|
progress = 0.5,
|
|
status = "draft",
|
|
}
|
|
},
|
|
}
|
|
```
|
|
|
|
### `bds.tasks.cancel`
|
|
|
|
Cancel a task by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.cancel(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.cancel("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.tasks.get_all`
|
|
|
|
Fetch all tasks currently tracked by the task manager.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.get_all() -> TaskData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TaskData[]`. See [`TaskData`](TYPES.md#taskdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
cancellable = true,
|
|
cancellation_requested = true,
|
|
group_id = "example-id",
|
|
group_name = "example",
|
|
id = "example-id",
|
|
message = "Working",
|
|
name = "Example",
|
|
progress = 0.5,
|
|
status = "draft",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.tasks.get_running`
|
|
|
|
Fetch running tasks currently tracked by the task manager.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.get_running() -> TaskData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TaskData[]`. See [`TaskData`](TYPES.md#taskdata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.get_running()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
cancellable = true,
|
|
cancellation_requested = true,
|
|
group_id = "example-id",
|
|
group_name = "example",
|
|
id = "example-id",
|
|
message = "Working",
|
|
name = "Example",
|
|
progress = 0.5,
|
|
status = "draft",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.tasks.clear_completed`
|
|
|
|
Clear completed tasks from the in-memory task list.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.tasks.clear_completed() -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.tasks.clear_completed()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
## `bds.templates`
|
|
|
|
### `bds.templates.create`
|
|
|
|
Create a template in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.create(data: table) -> TemplateData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`TemplateData | nil`. See [`TemplateData`](TYPES.md#templatedata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.create({ title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.templates.update`
|
|
|
|
Update a template by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.update(id: string, data: table) -> TemplateData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
| `data` | `table` | Yes | `{ title = "Example" }` |
|
|
|
|
**Returns**
|
|
|
|
`TemplateData | nil`. See [`TemplateData`](TYPES.md#templatedata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.update("example-id", { title = "Example" })
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.templates.delete`
|
|
|
|
Delete a template by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.delete(id: string) -> boolean
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`boolean`. `false` means the operation was rejected or failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.delete("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
true
|
|
```
|
|
|
|
### `bds.templates.get`
|
|
|
|
Fetch one template by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.get(id: string) -> TemplateData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`TemplateData | nil`. See [`TemplateData`](TYPES.md#templatedata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.get("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.templates.get_all`
|
|
|
|
Fetch all templates in the current project.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.get_all() -> TemplateData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TemplateData[]`. See [`TemplateData`](TYPES.md#templatedata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.get_all()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.templates.publish`
|
|
|
|
Publish a template by id.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.publish(id: string) -> TemplateData | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `id` | `string` | Yes | `"example-id"` |
|
|
|
|
**Returns**
|
|
|
|
`TemplateData | nil`. See [`TemplateData`](TYPES.md#templatedata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.publish("example-id")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
```
|
|
|
|
### `bds.templates.get_enabled_by_kind`
|
|
|
|
Fetch enabled templates filtered by kind.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.get_enabled_by_kind(kind: string) -> TemplateData[]
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `kind` | `string` | Yes | `"utility"` |
|
|
|
|
**Returns**
|
|
|
|
`TemplateData[]`. See [`TemplateData`](TYPES.md#templatedata).
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.get_enabled_by_kind("utility")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.templates.rebuild_from_files`
|
|
|
|
Rebuild template records from published files.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.rebuild_from_files() -> TemplateData[] | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
None.
|
|
|
|
**Returns**
|
|
|
|
`TemplateData[] | nil`. See [`TemplateData`](TYPES.md#templatedata). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.rebuild_from_files()
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
{
|
|
created_at = "2026-07-19T08:00:00Z",
|
|
enabled = true,
|
|
id = "example-id",
|
|
kind = "utility",
|
|
project_id = "example-id",
|
|
slug = "example-post",
|
|
status = "draft",
|
|
title = "Example post",
|
|
updated_at = "2026-07-19T08:00:00Z",
|
|
}
|
|
}
|
|
```
|
|
|
|
### `bds.templates.validate`
|
|
|
|
Validate Liquid template syntax.
|
|
|
|
**Signature**
|
|
|
|
```text
|
|
bds.templates.validate(content: string) -> ValidationResult | nil
|
|
```
|
|
|
|
**Parameters**
|
|
|
|
| Name | Type | Required | Example |
|
|
| --- | --- | --- | --- |
|
|
| `content` | `string` | Yes | `"Example content"` |
|
|
|
|
**Returns**
|
|
|
|
`ValidationResult | nil`. See [`ValidationResult`](TYPES.md#validationresult). `nil` means no value was available or the host operation failed.
|
|
|
|
**Example call**
|
|
|
|
```lua
|
|
local result = bds.templates.validate("Example content")
|
|
```
|
|
|
|
**Example response**
|
|
|
|
```lua
|
|
{
|
|
errors = { "example" },
|
|
valid = true,
|
|
}
|
|
```
|