# Written by `tilo-app surface`; review changes like an API change.

[[resources]]
kind = "tilo.messages"
label = "Messages"
version = 1

[[resources]]
kind = "tilo.contacts.identities"
label = "Contact identities"
version = 1
person = true
fields = [
  { path = "people", type = "Collection<Person>", stored = "collection" },
  { path = "people.*.label", type = "String" },
  { path = "people.*.removed", type = "bool" },
  { path = "people.*.phones", type = "Json<Vec<String>>" },
  { path = "people.*.emails", type = "Json<Vec<String>>" },
  { path = "people.*.endpoints", type = "Collection<Endpoint>", stored = "collection" },
  { path = "people.*.endpoints.*.service", type = "String" },
  { path = "people.*.endpoints.*.recipient", type = "String" },
  { path = "people.*.endpoints.*.scope", type = "String" },
  { path = "people.*.endpoints.*.revision", type = "String" },
  { path = "people.*.endpoints.*.removed", type = "bool" },
]

[[resources.verbs]]
id = "project-contact"
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "label", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "remove-contact"
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "confirm-endpoint"
destructive = true
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "endpoint", required = true, schema = { type = "string" } },
  { name = "service", required = true, schema = { type = "string" } },
  { name = "recipient", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "confirm-account"
destructive = true
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "endpoint", required = true, schema = { type = "string" } },
  { name = "service", required = true, schema = { type = "string" } },
  { name = "scope", required = true, schema = { type = "string" } },
  { name = "recipient", required = true, schema = { type = "string" } },
  { name = "revision", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "replace-endpoint"
destructive = true
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "previous", required = true, schema = { type = "string" } },
  { name = "endpoint", required = true, schema = { type = "string" } },
  { name = "service", required = true, schema = { type = "string" } },
  { name = "recipient", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "replace-account"
destructive = true
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "previous", required = true, schema = { type = "string" } },
  { name = "endpoint", required = true, schema = { type = "string" } },
  { name = "service", required = true, schema = { type = "string" } },
  { name = "scope", required = true, schema = { type = "string" } },
  { name = "recipient", required = true, schema = { type = "string" } },
  { name = "revision", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "project-phones"
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "phones", required = true, schema = { type = "array", items = { type = "string" } } },
]

[[resources.verbs]]
id = "project-emails"
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "emails", required = true, schema = { type = "array", items = { type = "string" } } },
]

[[resources.verbs]]
id = "project-contacts"
kind = "undoable"
params = [
  { name = "people", required = true, schema = { type = "array", items = { type = "object", additionalProperties = false, properties = { emails = { type = "array", items = { type = "string" } }, label = { type = "string" }, person = { type = "string" }, phones = { type = "array", items = { type = "string" } } }, required = ["person", "label", "phones", "emails"] } } },
  { name = "removed", required = true, schema = { type = "array", items = { type = "string" } } },
]

[[resources.verbs]]
id = "forget-endpoint"
destructive = true
kind = "undoable"
params = [
  { name = "person", required = true, schema = { type = "string" } },
  { name = "endpoint", required = true, schema = { type = "string" } },
]

[[resources]]
kind = "tilo.accounts"
label = "Accounts"
version = 1
person = true
fields = [
  { path = "accounts", type = "Collection<PersonAccount>", stored = "collection" },
  { path = "accounts.*.type_id", type = "String" },
  { path = "accounts.*.display_name", type = "String" },
  { path = "accounts.*.config", type = "Json<serde_json::Value>" },
  { path = "accounts.*.enabled", type = "bool" },
  { path = "accounts.*.tint", type = "u8" },
  { path = "active", type = "BTreeMap<String, String>" },
]

[[resources.verbs]]
id = "publish-browser-identity"
kind = "undoable"
params = [
  { name = "root", required = true, schema = { type = "string" } },
  { name = "origin", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "save-account"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "type_id", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
  { name = "config", required = true, schema = {} },
  { name = "enabled", required = true, schema = { type = "boolean" } },
  { name = "tint", required = true, schema = { type = "integer", maximum = 255, minimum = 0 } },
]

[[resources.verbs]]
id = "publish-signal-account"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
  { name = "aci", required = true, schema = { type = "string" } },
  { name = "generation", required = true, schema = { type = "integer", minimum = 0 } },
]

[[resources.verbs]]
id = "publish-sms-account"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
  { name = "scope", required = true, schema = { type = "string" } },
  { name = "generation", required = true, schema = { type = "integer", minimum = 0 } },
]

[[resources.verbs]]
id = "publish-whatsapp-account"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
  { name = "jid", required = true, schema = { type = "string" } },
  { name = "generation", required = true, schema = { type = "integer", minimum = 0 } },
]

[[resources.verbs]]
id = "publish-tilo-account"
kind = "undoable"
params = [
  { name = "id", required = true, schema = { type = "string" } },
  { name = "display_name", required = true, schema = { type = "string" } },
  { name = "scope", required = true, schema = { type = "string" } },
  { name = "generation", required = true, schema = { type = "integer", minimum = 0 } },
]

[[resources.verbs]]
id = "remove-account"
kind = "undoable"
params = [
  { name = "account", required = true, schema = { type = "string" } },
]

[[resources.verbs]]
id = "set-active-account"
kind = "undoable"
params = [
  { name = "account", required = true, schema = { type = "string" } },
]

