Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var BaseAdvpermDisable = common.Shortcut{ Service: "base", Command: "+advperm-disable", Description: "Disable advanced permissions for a Base", Risk: "high-risk-write", Scopes: []string{"base:app:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PUT("/open-apis/base/v3/bases/:base_token/advperm/enable?enable=false"). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") queryParams := make(larkcore.QueryParams) queryParams.Set("enable", "false") apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodPut, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/advperm/enable", validate.EncodePathSegment(baseToken)), QueryParams: queryParams, }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "disable advanced permissions failed") }, }
View Source
var BaseAdvpermEnable = common.Shortcut{ Service: "base", Command: "+advperm-enable", Description: "Enable advanced permissions for a Base", Risk: "write", Scopes: []string{"base:app:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PUT("/open-apis/base/v3/bases/:base_token/advperm/enable?enable=true"). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") queryParams := make(larkcore.QueryParams) queryParams.Set("enable", "true") apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodPut, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/advperm/enable", validate.EncodePathSegment(baseToken)), QueryParams: queryParams, }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "enable advanced permissions failed") }, }
View Source
var BaseBaseCopy = common.Shortcut{ Service: "base", Command: "+base-copy", Description: "Copy a base resource", Risk: "write", Scopes: []string{"base:app:copy"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), {Name: "name", Desc: "new base name"}, {Name: "folder-token", Desc: "folder token for destination"}, {Name: "without-content", Type: "bool", Desc: "copy structure only"}, {Name: "time-zone", Desc: "time zone, e.g. Asia/Shanghai"}, }, DryRun: dryRunBaseCopy, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeBaseCopy(runtime) }, }
View Source
var BaseBaseCreate = common.Shortcut{ Service: "base", Command: "+base-create", Description: "Create a new base resource", Risk: "write", Scopes: []string{"base:app:create"}, AuthTypes: authTypes(), Flags: []common.Flag{ {Name: "name", Desc: "base name", Required: true}, {Name: "folder-token", Desc: "folder token for destination"}, {Name: "time-zone", Desc: "time zone, e.g. Asia/Shanghai"}, }, DryRun: dryRunBaseCreate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeBaseCreate(runtime) }, }
View Source
var BaseBaseGet = common.Shortcut{ Service: "base", Command: "+base-get", Description: "Get a base resource", Risk: "read", Scopes: []string{"base:app:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true)}, DryRun: dryRunBaseGet, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeBaseGet(runtime) }, }
View Source
var BaseDashboardBlockCreate = common.Shortcut{ Service: "base", Command: "+dashboard-block-create", Description: "Create a block in a dashboard", Risk: "write", Scopes: []string{"base:dashboard:create"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), {Name: "name", Desc: "block name", Required: true}, {Name: "type", Desc: "block type: column(柱状图)|bar(条形图)|line(折线图)|pie(饼图)|ring(环形图)|area(面积图)|combo(组合图)|scatter(散点图)|funnel(漏斗图)|wordCloud(词云)|radar(雷达图)|statistics(指标卡). Read dashboard-block-data-config.md before creating.", Required: true}, {Name: "data-config", Desc: "data config JSON object (table_name, series, count_all, group_by, filter, etc.)"}, {Name: "user-id-type", Desc: "user ID type: open_id / union_id / user_id"}, {Name: "no-validate", Type: "bool", Desc: "skip local data_config validation"}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if runtime.Bool("no-validate") { return nil } raw := runtime.Str("data-config") if strings.TrimSpace(raw) == "" { return nil } cfg, err := parseJSONObject(raw, "data-config") if err != nil { return err } norm := normalizeDataConfig(cfg) if errs := validateBlockDataConfig(runtime.Str("type"), norm); len(errs) > 0 { return formatDataConfigErrors(errs) } b, _ := json.Marshal(norm) _ = runtime.Cmd.Flags().Set("data-config", string(b)) return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { body := map[string]interface{}{} if name := runtime.Str("name"); name != "" { body["name"] = name } if t := runtime.Str("type"); t != "" { body["type"] = t } if raw := runtime.Str("data-config"); raw != "" { if parsed, err := parseJSONObject(raw, "data-config"); err == nil { body["data_config"] = parsed } } params := map[string]interface{}{} if uid := runtime.Str("user-id-type"); uid != "" { params["user_id_type"] = uid } return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id/blocks"). Params(params). Body(body). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardBlockCreate(runtime) }, }
View Source
var BaseDashboardBlockDelete = common.Shortcut{ Service: "base", Command: "+dashboard-block-delete", Description: "Delete a dashboard block", Risk: "high-risk-write", Scopes: []string{"base:dashboard:delete"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), blockIDFlag(true), }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). DELETE("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id/blocks/:block_id"). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")). Set("block_id", runtime.Str("block-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardBlockDelete(runtime) }, }
View Source
var BaseDashboardBlockGet = common.Shortcut{ Service: "base", Command: "+dashboard-block-get", Description: "Get a dashboard block by ID", Risk: "read", Scopes: []string{"base:dashboard:read"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), blockIDFlag(true), {Name: "user-id-type", Desc: "user ID type: open_id / union_id / user_id"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { params := map[string]interface{}{} if uid := strings.TrimSpace(runtime.Str("user-id-type")); uid != "" { params["user_id_type"] = uid } return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id/blocks/:block_id"). Params(params). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")). Set("block_id", runtime.Str("block-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardBlockGet(runtime) }, }
View Source
var BaseDashboardBlockList = common.Shortcut{ Service: "base", Command: "+dashboard-block-list", Description: "List blocks in a dashboard", Risk: "read", Scopes: []string{"base:dashboard:read"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), {Name: "page-size", Desc: "page size (max 100)"}, {Name: "page-token", Desc: "pagination token"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { params := map[string]interface{}{} if ps := strings.TrimSpace(runtime.Str("page-size")); ps != "" { params["page_size"] = ps } if pt := strings.TrimSpace(runtime.Str("page-token")); pt != "" { params["page_token"] = pt } return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id/blocks"). Params(params). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardBlockList(runtime) }, }
View Source
var BaseDashboardBlockUpdate = common.Shortcut{ Service: "base", Command: "+dashboard-block-update", Description: "Update a dashboard block", Risk: "write", Scopes: []string{"base:dashboard:update"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), blockIDFlag(true), {Name: "name", Desc: "new block name"}, {Name: "data-config", Desc: "data config JSON: table_name, series|count_all (mutually exclusive), group_by, filter. See dashboard-block-data-config.md for details."}, {Name: "user-id-type", Desc: "user ID type: open_id / union_id / user_id"}, {Name: "no-validate", Type: "bool", Desc: "skip local data_config validation"}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if runtime.Bool("no-validate") { return nil } raw := runtime.Str("data-config") if strings.TrimSpace(raw) == "" { return nil } cfg, err := parseJSONObject(raw, "data-config") if err != nil { return err } norm := normalizeDataConfig(cfg) if errs := validateBlockDataConfig("", norm); len(errs) > 0 { return formatDataConfigErrors(errs) } b, _ := json.Marshal(norm) _ = runtime.Cmd.Flags().Set("data-config", string(b)) return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { body := map[string]interface{}{} if name := runtime.Str("name"); name != "" { body["name"] = name } if raw := runtime.Str("data-config"); raw != "" { if parsed, err := parseJSONObject(raw, "data-config"); err == nil { body["data_config"] = parsed } } params := map[string]interface{}{} if uid := runtime.Str("user-id-type"); uid != "" { params["user_id_type"] = uid } return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id/blocks/:block_id"). Params(params). Body(body). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")). Set("block_id", runtime.Str("block-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardBlockUpdate(runtime) }, }
View Source
var BaseDashboardCreate = common.Shortcut{ Service: "base", Command: "+dashboard-create", Description: "Create a dashboard in a base", Risk: "write", Scopes: []string{"base:dashboard:create"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), {Name: "name", Desc: "dashboard name", Required: true}, {Name: "theme-style", Desc: "theme style"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { body := map[string]interface{}{} if name := runtime.Str("name"); name != "" { body["name"] = name } if themeStyle := runtime.Str("theme-style"); themeStyle != "" { body["theme"] = map[string]interface{}{"theme_style": themeStyle} } return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/dashboards"). Body(body). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardCreate(runtime) }, }
View Source
var BaseDashboardDelete = common.Shortcut{ Service: "base", Command: "+dashboard-delete", Description: "Delete a dashboard", Risk: "high-risk-write", Scopes: []string{"base:dashboard:delete"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). DELETE("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id"). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardDelete(runtime) }, }
View Source
var BaseDashboardGet = common.Shortcut{ Service: "base", Command: "+dashboard-get", Description: "Get a dashboard by ID", Risk: "read", Scopes: []string{"base:dashboard:read"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id"). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardGet(runtime) }, }
View Source
var BaseDashboardList = common.Shortcut{ Service: "base", Command: "+dashboard-list", Description: "List dashboards in a base", Risk: "read", Scopes: []string{"base:dashboard:read"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), {Name: "page-size", Desc: "page size (max 100)"}, {Name: "page-token", Desc: "pagination token"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { params := map[string]interface{}{} if ps := strings.TrimSpace(runtime.Str("page-size")); ps != "" { params["page_size"] = ps } if pt := strings.TrimSpace(runtime.Str("page-token")); pt != "" { params["page_token"] = pt } return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/dashboards"). Params(params). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardList(runtime) }, }
View Source
var BaseDashboardUpdate = common.Shortcut{ Service: "base", Command: "+dashboard-update", Description: "Update a dashboard", Risk: "write", Scopes: []string{"base:dashboard:update"}, AuthTypes: authTypes(), HasFormat: true, Flags: []common.Flag{ baseTokenFlag(true), dashboardIDFlag(true), {Name: "name", Desc: "new dashboard name"}, {Name: "theme-style", Desc: "theme style"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { body := map[string]interface{}{} if name := runtime.Str("name"); name != "" { body["name"] = name } if themeStyle := runtime.Str("theme-style"); themeStyle != "" { body["theme"] = map[string]interface{}{"theme_style": themeStyle} } return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/dashboards/:dashboard_id"). Body(body). Set("base_token", runtime.Str("base-token")). Set("dashboard_id", runtime.Str("dashboard-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeDashboardUpdate(runtime) }, }
View Source
var BaseDataQuery = common.Shortcut{ Service: "base", Command: "+data-query", Description: "Query and analyze Base data with JSON DSL (aggregation, filter, sort)", Risk: "read", Scopes: []string{"base:table:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), {Name: "dsl", Desc: "query JSON DSL (LiteQuery Protocol)", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { var dsl map[string]interface{} dec := json.NewDecoder(bytes.NewReader([]byte(runtime.Str("dsl")))) dec.UseNumber() if err := dec.Decode(&dsl); err != nil { return common.FlagErrorf("--dsl invalid JSON: %v", err) } _, hasDim := dsl["dimensions"] _, hasMeas := dsl["measures"] if !hasDim && !hasMeas { return common.FlagErrorf("--dsl must contain at least one of 'dimensions' or 'measures'") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { var dsl map[string]interface{} dec := json.NewDecoder(bytes.NewReader([]byte(runtime.Str("dsl")))) dec.UseNumber() dec.Decode(&dsl) return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/data/query"). Body(dsl). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") var dsl map[string]interface{} dec := json.NewDecoder(bytes.NewReader([]byte(runtime.Str("dsl")))) dec.UseNumber() dec.Decode(&dsl) data, err := baseV3Call(runtime, "POST", baseV3Path("bases", baseToken, "data/query"), nil, dsl) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseFieldCreate = common.Shortcut{ Service: "base", Command: "+field-create", Description: "Create a field", Risk: "write", Scopes: []string{"base:field:create"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "json", Desc: "field property JSON object", Required: true}, {Name: "i-have-read-guide", Type: "bool", Desc: "set only after you have read the formula/lookup guide for those field types", Hidden: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateFieldCreate(runtime) }, DryRun: dryRunFieldCreate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldCreate(runtime) }, }
View Source
var BaseFieldDelete = common.Shortcut{ Service: "base", Command: "+field-delete", Description: "Delete a field by ID or name", Risk: "high-risk-write", Scopes: []string{"base:field:delete"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), fieldRefFlag(true)}, DryRun: dryRunFieldDelete, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldDelete(runtime) }, }
View Source
var BaseFieldGet = common.Shortcut{ Service: "base", Command: "+field-get", Description: "Get a field by ID or name", Risk: "read", Scopes: []string{"base:field:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), fieldRefFlag(true)}, DryRun: dryRunFieldGet, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldGet(runtime) }, }
View Source
var BaseFieldList = common.Shortcut{ Service: "base", Command: "+field-list", Description: "List fields in a table", Risk: "read", Scopes: []string{"base:field:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "offset", Type: "int", Default: "0", Desc: "pagination offset"}, {Name: "limit", Type: "int", Default: "100", Desc: "pagination size"}, }, DryRun: dryRunFieldList, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldList(runtime) }, }
View Source
var BaseFieldSearchOptions = common.Shortcut{ Service: "base", Command: "+field-search-options", Description: "Search select options of a field", Risk: "read", Scopes: []string{"base:field:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), fieldRefFlag(true), {Name: "keyword", Desc: "keyword for option query"}, {Name: "offset", Type: "int", Default: "0", Desc: "pagination offset"}, {Name: "limit", Type: "int", Default: "30", Desc: "pagination size"}, }, DryRun: dryRunFieldSearchOptions, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldSearchOptions(runtime) }, }
View Source
var BaseFieldUpdate = common.Shortcut{ Service: "base", Command: "+field-update", Description: "Update a field by ID or name", Risk: "write", Scopes: []string{"base:field:update"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), fieldRefFlag(true), {Name: "json", Desc: "field property JSON object", Required: true}, {Name: "i-have-read-guide", Type: "bool", Desc: "acknowledge reading formula/lookup guide before creating or updating those field types", Hidden: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateFieldUpdate(runtime) }, DryRun: dryRunFieldUpdate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeFieldUpdate(runtime) }, }
View Source
var BaseFormCreate = common.Shortcut{ Service: "base", Command: "+form-create", Description: "Create a form in a Base table", Risk: "write", Scopes: []string{"base:form:create"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "name", Desc: "form name", Required: true}, {Name: "description", Desc: `form description (plain text or markdown link like [text](https://example.com))`}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") name := runtime.Str("name") description := runtime.Str("description") body := map[string]interface{}{"name": name} if description != "" { body["description"] = description } data, err := baseV3Call(runtime, "POST", baseV3Path("bases", baseToken, "tables", tableId, "forms"), nil, body) if err != nil { return err } runtime.OutFormat(data, nil, func(w io.Writer) { output.PrintTable(w, []map[string]interface{}{ { "id": data["id"], "name": data["name"], "description": data["description"], }, }) }) return nil }, }
View Source
var BaseFormDelete = common.Shortcut{ Service: "base", Command: "+form-delete", Description: "Delete a form in a Base table", Risk: "high-risk-write", Scopes: []string{"base:form:delete"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base app token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). DELETE("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") _, err := baseV3Call(runtime, "DELETE", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId), nil, nil) if err != nil { return err } runtime.Out(map[string]interface{}{"deleted": true, "form_id": formId}, nil) return nil }, }
View Source
var BaseFormGet = common.Shortcut{ Service: "base", Command: "+form-get", Description: "Get a form in a Base table", Risk: "read", Scopes: []string{"base:form:read"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base app token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") data, err := baseV3Call(runtime, "GET", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId), nil, nil) if err != nil { return err } runtime.OutFormat(data, nil, func(w io.Writer) { output.PrintTable(w, []map[string]interface{}{ { "id": data["id"], "name": data["name"], "description": data["description"], }, }) }) return nil }, }
View Source
var BaseFormQuestionsCreate = common.Shortcut{ Service: "base", Command: "+form-questions-create", Description: "Create questions for a form in a Base table", Risk: "write", Scopes: []string{"base:form:update"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, {Name: "questions", Desc: `questions JSON array, max 10 items. Each item requires "title"(field title) and "type"(text/number/select/datetime/user/attachment/location). Optional fields: "description"(plain text or markdown link like [text](https://example.com)),"required","option_display_mode"(0=dropdown/1=vertical/2=horizontal,select only),"multiple"(bool,select/user),"options"([{"name":"opt","hue":"Blue"}],select only),"style"({"type":"plain/phone/url/email/barcode/rating","precision":2,"format":"yyyy/MM/dd","icon":"star","min":1,"max":5}). E.g. '[{"type":"text","title":"Your name","required":true}]'`, Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id/questions"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") questionsJSON := runtime.Str("questions") var questions []interface{} if err := json.Unmarshal([]byte(questionsJSON), &questions); err != nil { return output.Errorf(output.ExitValidation, "invalid_json", "--questions must be a valid JSON array: %s", err) } data, err := baseV3Call(runtime, "POST", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId, "questions"), nil, map[string]interface{}{"questions": questions}) if err != nil { return err } items, _ := data["questions"].([]interface{}) outData := map[string]interface{}{"questions": items} runtime.OutFormat(outData, nil, func(w io.Writer) { var rows []map[string]interface{} for _, item := range items { m, _ := item.(map[string]interface{}) rows = append(rows, map[string]interface{}{ "id": m["id"], "title": m["title"], "required": m["required"], }) } output.PrintTable(w, rows) fmt.Fprintf(w, "\n%d question(s) created\n", len(items)) }) return nil }, }
View Source
var BaseFormQuestionsDelete = common.Shortcut{ Service: "base", Command: "+form-questions-delete", Description: "Delete questions from a form in a Base table", Risk: "high-risk-write", Scopes: []string{"base:form:update"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, {Name: "question-ids", Desc: `JSON array of question IDs to delete, max 10 items, e.g. '["q_001","q_002"]'`, Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). DELETE("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id/questions"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") questionIdsJSON := runtime.Str("question-ids") var questionIds []string if err := json.Unmarshal([]byte(questionIdsJSON), &questionIds); err != nil { return output.Errorf(output.ExitValidation, "invalid_json", "--question-ids must be a valid JSON array of strings: %s", err) } _, err := baseV3Call(runtime, "DELETE", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId, "questions"), nil, map[string]interface{}{"question_ids": questionIds}) if err != nil { return err } runtime.Out(map[string]interface{}{ "deleted": true, "question_ids": questionIds, }, nil) return nil }, }
View Source
var BaseFormQuestionsList = common.Shortcut{ Service: "base", Command: "+form-questions-list", Description: "List questions of a form in a Base table", Risk: "read", Scopes: []string{"base:form:read"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base app token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id/questions"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") data, err := baseV3Call(runtime, "GET", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId, "questions"), nil, nil) if err != nil { return err } items, _ := data["questions"].([]interface{}) outData := map[string]interface{}{ "questions": items, "total": data["total"], } runtime.OutFormat(outData, nil, func(w io.Writer) { if len(items) == 0 { fmt.Fprintln(w, "No questions found.") return } var rows []map[string]interface{} for _, item := range items { m, _ := item.(map[string]interface{}) rows = append(rows, map[string]interface{}{ "id": m["id"], "title": m["title"], "description": m["description"], "required": m["required"], }) } output.PrintTable(w, rows) fmt.Fprintf(w, "\n%v question(s) total\n", data["total"]) }) return nil }, }
View Source
var BaseFormQuestionsUpdate = common.Shortcut{ Service: "base", Command: "+form-questions-update", Description: "Update questions of a form in a Base table", Risk: "write", Scopes: []string{"base:form:update"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, {Name: "questions", Desc: `questions JSON array, max 10 items, each item must include "id". Supported fields: "id"(required),"title","description"(plain text or markdown link like [text](https://example.com)),"required","option_display_mode"(0=dropdown,1=vertical,2=horizontal,select only). E.g. '[{"id":"q_001","title":"Updated?","required":true}]'`, Required: true}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id/questions"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") questionsJSON := runtime.Str("questions") var questions []interface{} if err := json.Unmarshal([]byte(questionsJSON), &questions); err != nil { return output.Errorf(output.ExitValidation, "invalid_json", "--questions must be a valid JSON array: %s", err) } data, err := baseV3Call(runtime, "PATCH", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId, "questions"), nil, map[string]interface{}{"questions": questions}) if err != nil { return err } items, _ := data["items"].([]interface{}) if len(items) == 0 { items, _ = data["questions"].([]interface{}) } outData := map[string]interface{}{"questions": items} runtime.OutFormat(outData, nil, func(w io.Writer) { var rows []map[string]interface{} for _, item := range items { m, _ := item.(map[string]interface{}) rows = append(rows, map[string]interface{}{ "id": m["id"], "title": m["title"], "required": m["required"], }) } output.PrintTable(w, rows) fmt.Fprintf(w, "\n%d question(s) updated\n", len(items)) }) return nil }, }
View Source
var BaseFormUpdate = common.Shortcut{ Service: "base", Command: "+form-update", Description: "Update a form in a Base table", Risk: "write", Scopes: []string{"base:form:update"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "form-id", Desc: "form ID", Required: true}, {Name: "name", Desc: "new form name"}, {Name: "description", Desc: "new form description (plain text or markdown link like [text](https://example.com))"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms/:form_id"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")). Set("form_id", runtime.Str("form-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") formId := runtime.Str("form-id") name := runtime.Str("name") description := runtime.Str("description") body := map[string]interface{}{} if name != "" { body["name"] = name } if description != "" { body["description"] = description } data, err := baseV3Call(runtime, "PATCH", baseV3Path("bases", baseToken, "tables", tableId, "forms", formId), nil, body) if err != nil { return err } runtime.OutFormat(data, nil, func(w io.Writer) { output.PrintTable(w, []map[string]interface{}{ { "id": data["id"], "name": data["name"], "description": data["description"], }, }) }) return nil }, }
View Source
var BaseFormsList = common.Shortcut{ Service: "base", Command: "+form-list", Description: "List all forms in a Base table (auto-paginated)", Risk: "read", Scopes: []string{"base:form:read"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "Base token (base_token)", Required: true}, {Name: "table-id", Desc: "table ID", Required: true}, {Name: "page-size", Type: "int", Default: "100", Desc: "page size per request (max 100)"}, }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/tables/:table_id/forms"). Set("base_token", runtime.Str("base-token")). Set("table_id", runtime.Str("table-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") tableId := runtime.Str("table-id") var allForms []interface{} pageToken := "" for { params := map[string]interface{}{ "page_size": runtime.Int("page-size"), } if pageToken != "" { params["page_token"] = pageToken } data, err := baseV3Call(runtime, "GET", baseV3Path("bases", baseToken, "tables", tableId, "forms"), params, nil) if err != nil { return err } forms, _ := data["forms"].([]interface{}) allForms = append(allForms, forms...) hasMore, _ := data["has_more"].(bool) if !hasMore { break } nextToken, _ := data["page_token"].(string) if nextToken == "" { break } pageToken = nextToken } outData := map[string]interface{}{ "forms": allForms, "total": len(allForms), } runtime.OutFormat(outData, nil, func(w io.Writer) { if len(allForms) == 0 { fmt.Fprintln(w, "No forms found.") return } var rows []map[string]interface{} for _, item := range allForms { m, _ := item.(map[string]interface{}) rows = append(rows, map[string]interface{}{ "id": m["id"], "name": m["name"], "description": m["description"], }) } output.PrintTable(w, rows) fmt.Fprintf(w, "\n%d form(s) total\n", len(allForms)) }) return nil }, }
View Source
var BaseRecordDelete = common.Shortcut{ Service: "base", Command: "+record-delete", Description: "Delete a record by ID", Risk: "high-risk-write", Scopes: []string{"base:record:delete"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), recordRefFlag(true)}, DryRun: dryRunRecordDelete, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeRecordDelete(runtime) }, }
View Source
var BaseRecordGet = common.Shortcut{ Service: "base", Command: "+record-get", Description: "Get a record by ID", Risk: "read", Scopes: []string{"base:record:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), recordRefFlag(true), }, DryRun: dryRunRecordGet, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeRecordGet(runtime) }, }
View Source
var BaseRecordHistoryList = common.Shortcut{ Service: "base", Command: "+record-history-list", Description: "List record change history", Risk: "read", Scopes: []string{"base:history:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), recordRefFlag(true), {Name: "max-version", Type: "int", Desc: "max version for next page"}, {Name: "page-size", Type: "int", Default: "30", Desc: "pagination size"}, }, DryRun: dryRunRecordHistoryList, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { params := map[string]interface{}{ "table_id": baseTableID(runtime), "record_id": runtime.Str("record-id"), "page_size": runtime.Int("page-size"), } if value := runtime.Int("max-version"); value > 0 { params["max_version"] = value } data, err := baseV3Call(runtime, "GET", baseV3Path("bases", runtime.Str("base-token"), "record_history"), params, nil) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseRecordList = common.Shortcut{ Service: "base", Command: "+record-list", Description: "List records in a table", Risk: "read", Scopes: []string{"base:record:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "view-id", Desc: "view ID"}, {Name: "offset", Type: "int", Default: "0", Desc: "pagination offset"}, {Name: "limit", Type: "int", Default: "100", Desc: "pagination size"}, }, DryRun: dryRunRecordList, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeRecordList(runtime) }, }
View Source
var BaseRecordUploadAttachment = common.Shortcut{ Service: "base", Command: "+record-upload-attachment", Description: "Upload a local file to a Base attachment field and write it into the target record", Risk: "write", Scopes: []string{"base:record:update", "base:field:read", "docs:document.media:upload"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), recordRefFlag(true), fieldRefFlag(true), {Name: "file", Desc: "local file path (max 20MB)", Required: true}, {Name: "name", Desc: "attachment file name (default: local file name)"}, }, DryRun: dryRunRecordUploadAttachment, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeRecordUploadAttachment(runtime) }, }
View Source
var BaseRecordUpsert = common.Shortcut{ Service: "base", Command: "+record-upsert", Description: "Create or update a record", Risk: "write", Scopes: []string{"base:record:create", "base:record:update"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), recordRefFlag(false), {Name: "json", Desc: "record JSON object", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateRecordJSON(runtime) }, DryRun: dryRunRecordUpsert, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeRecordUpsert(runtime) }, }
View Source
var BaseRoleCreate = common.Shortcut{ Service: "base", Command: "+role-create", Description: "Create a custom role in a Base", Risk: "write", Scopes: []string{"base:role:create"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "json", Desc: `body JSON (AdvPermBaseRoleConfig), e.g. {"role_name":"Reviewer","role_type":"custom_role","table_rule_map":{...}}`, Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } var body map[string]any if err := json.Unmarshal([]byte(runtime.Str("json")), &body); err != nil { return common.FlagErrorf("--json must be valid JSON: %v", err) } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { var body map[string]any json.Unmarshal([]byte(runtime.Str("json")), &body) return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/roles"). Body(body). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") var body map[string]any json.Unmarshal([]byte(runtime.Str("json")), &body) apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodPost, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/roles", validate.EncodePathSegment(baseToken)), Body: body, }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "create role failed") }, }
View Source
var BaseRoleDelete = common.Shortcut{ Service: "base", Command: "+role-delete", Description: "Delete a custom role (system roles cannot be deleted)", Risk: "high-risk-write", Scopes: []string{"base:role:delete"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "role-id", Desc: "role ID (e.g. rolxxxxxx4)", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("role-id")) == "" { return common.FlagErrorf("--role-id must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). DELETE("/open-apis/base/v3/bases/:base_token/roles/:role_id"). Set("base_token", runtime.Str("base-token")). Set("role_id", runtime.Str("role-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") roleId := runtime.Str("role-id") apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodDelete, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/roles/%s", validate.EncodePathSegment(baseToken), validate.EncodePathSegment(roleId)), Body: map[string]any{}, }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "delete role failed") }, }
View Source
var BaseRoleGet = common.Shortcut{ Service: "base", Command: "+role-get", Description: "Get full config of a role", Risk: "read", Scopes: []string{"base:role:read"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "role-id", Desc: "role ID (e.g. rolxxxxxx4)", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("role-id")) == "" { return common.FlagErrorf("--role-id must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/roles/:role_id"). Set("base_token", runtime.Str("base-token")). Set("role_id", runtime.Str("role-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") roleId := runtime.Str("role-id") apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodGet, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/roles/%s", validate.EncodePathSegment(baseToken), validate.EncodePathSegment(roleId)), }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "get role failed") }, }
View Source
var BaseRoleList = common.Shortcut{ Service: "base", Command: "+role-list", Description: "List all roles in a Base", Risk: "read", Scopes: []string{"base:role:read"}, AuthTypes: []string{"user", "bot"}, HasFormat: true, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/roles"). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodGet, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/roles", validate.EncodePathSegment(baseToken)), }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "list roles failed") }, }
View Source
var BaseRoleUpdate = common.Shortcut{ Service: "base", Command: "+role-update", Description: "Update a role config (delta merge, only changed fields needed)", Risk: "high-risk-write", Scopes: []string{"base:role:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "role-id", Desc: "role ID (e.g. rolxxxxxx4)", Required: true}, {Name: "json", Desc: `body JSON (delta AdvPermBaseRoleConfig), e.g. {"role_name":"New Name","role_type":"custom_role","table_rule_map":{...}}`, Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("role-id")) == "" { return common.FlagErrorf("--role-id must not be blank") } var body map[string]any if err := json.Unmarshal([]byte(runtime.Str("json")), &body); err != nil { return common.FlagErrorf("--json must be valid JSON: %v", err) } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { var body map[string]any json.Unmarshal([]byte(runtime.Str("json")), &body) return common.NewDryRunAPI(). Desc("Delta merge: only changed fields are updated, others remain unchanged"). PUT("/open-apis/base/v3/bases/:base_token/roles/:role_id"). Body(body). Set("base_token", runtime.Str("base-token")). Set("role_id", runtime.Str("role-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { baseToken := runtime.Str("base-token") roleId := runtime.Str("role-id") var body map[string]any json.Unmarshal([]byte(runtime.Str("json")), &body) apiResp, err := runtime.DoAPI(&larkcore.ApiReq{ HttpMethod: http.MethodPut, ApiPath: fmt.Sprintf("/open-apis/base/v3/bases/%s/roles/%s", validate.EncodePathSegment(baseToken), validate.EncodePathSegment(roleId)), Body: body, }) if err != nil { return err } return handleRoleResponse(runtime, apiResp.RawBody, "update role failed") }, }
View Source
var BaseTableCreate = common.Shortcut{ Service: "base", Command: "+table-create", Description: "Create a table and optional fields/views", Risk: "write", Scopes: []string{"base:table:create", "base:field:read", "base:field:create", "base:field:update", "base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), {Name: "name", Desc: "table name", Required: true}, {Name: "view", Desc: "view JSON object/array for create"}, {Name: "fields", Desc: "field JSON array for create"}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateTableCreate(runtime) }, DryRun: dryRunTableCreate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeTableCreate(runtime) }, }
View Source
var BaseTableDelete = common.Shortcut{ Service: "base", Command: "+table-delete", Description: "Delete a table by ID or name", Risk: "high-risk-write", Scopes: []string{"base:table:delete"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true)}, DryRun: dryRunTableDelete, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeTableDelete(runtime) }, }
View Source
var BaseTableGet = common.Shortcut{ Service: "base", Command: "+table-get", Description: "Get a table by ID or name", Risk: "read", Scopes: []string{"base:table:read", "base:field:read", "base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true)}, DryRun: dryRunTableGet, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeTableGet(runtime) }, }
View Source
var BaseTableList = common.Shortcut{ Service: "base", Command: "+table-list", Description: "List tables in a base", Risk: "read", Scopes: []string{"base:table:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), {Name: "offset", Type: "int", Default: "0", Desc: "pagination offset"}, {Name: "limit", Type: "int", Default: "50", Desc: "pagination limit"}, }, DryRun: dryRunTableList, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeTableList(runtime) }, }
View Source
var BaseTableUpdate = common.Shortcut{ Service: "base", Command: "+table-update", Description: "Rename a table by ID or name", Risk: "write", Scopes: []string{"base:table:update"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "name", Desc: "new table name", Required: true}, }, DryRun: dryRunTableUpdate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeTableUpdate(runtime) }, }
View Source
var BaseViewCreate = common.Shortcut{ Service: "base", Command: "+view-create", Description: "Create one or more views", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "json", Desc: "view JSON object/array", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewCreate(runtime) }, DryRun: dryRunViewCreate, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewCreate(runtime) }, }
View Source
var BaseViewDelete = common.Shortcut{ Service: "base", Command: "+view-delete", Description: "Delete a view by ID or name", Risk: "high-risk-write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewDelete, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewDelete(runtime) }, }
View Source
var BaseViewGet = common.Shortcut{ Service: "base", Command: "+view-get", Description: "Get a view by ID or name", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGet, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGet(runtime) }, }
View Source
var BaseViewGetCard = common.Shortcut{ Service: "base", Command: "+view-get-card", Description: "Get view card configuration", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGetCard, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGetProperty(runtime, "card", "card") }, }
View Source
var BaseViewGetFilter = common.Shortcut{ Service: "base", Command: "+view-get-filter", Description: "Get view filter configuration", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGetFilter, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGetProperty(runtime, "filter", "filter") }, }
View Source
var BaseViewGetGroup = common.Shortcut{ Service: "base", Command: "+view-get-group", Description: "Get view group configuration", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGetGroup, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGetProperty(runtime, "group", "group") }, }
View Source
var BaseViewGetSort = common.Shortcut{ Service: "base", Command: "+view-get-sort", Description: "Get view sort configuration", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGetSort, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGetProperty(runtime, "sort", "sort") }, }
View Source
var BaseViewGetTimebar = common.Shortcut{ Service: "base", Command: "+view-get-timebar", Description: "Get view timebar configuration", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true)}, DryRun: dryRunViewGetTimebar, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewGetProperty(runtime, "timebar", "timebar") }, }
View Source
var BaseViewList = common.Shortcut{ Service: "base", Command: "+view-list", Description: "List views in a table", Risk: "read", Scopes: []string{"base:view:read"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), {Name: "offset", Type: "int", Default: "0", Desc: "pagination offset"}, {Name: "limit", Type: "int", Default: "100", Desc: "pagination size"}, }, DryRun: dryRunViewList, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewList(runtime) }, }
View Source
var BaseViewRename = common.Shortcut{ Service: "base", Command: "+view-rename", Description: "Rename a view by ID or name", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "name", Desc: "new view name", Required: true}, }, DryRun: dryRunViewRename, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewRename(runtime) }, }
View Source
var BaseViewSetCard = common.Shortcut{ Service: "base", Command: "+view-set-card", Description: "Set view card configuration", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "json", Desc: "card JSON object", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewJSONObject(runtime) }, DryRun: dryRunViewSetCard, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetJSONObject(runtime, "card", "card") }, }
View Source
var BaseViewSetFilter = common.Shortcut{ Service: "base", Command: "+view-set-filter", Description: "Set view filter configuration", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "json", Desc: "filter JSON object", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewJSONObject(runtime) }, DryRun: dryRunViewSetFilter, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetJSONObject(runtime, "filter", "filter") }, }
View Source
var BaseViewSetGroup = common.Shortcut{ Service: "base", Command: "+view-set-group", Description: "Set view group configuration", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "json", Desc: "group JSON object/array", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewJSONValue(runtime) }, DryRun: dryRunViewSetGroup, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetWrapped(runtime, "group", "group_config", "group") }, }
View Source
var BaseViewSetSort = common.Shortcut{ Service: "base", Command: "+view-set-sort", Description: "Set view sort configuration", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "json", Desc: "sort JSON object/array", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewJSONValue(runtime) }, DryRun: dryRunViewSetSort, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetWrapped(runtime, "sort", "sort_config", "sort") }, }
View Source
var BaseViewSetTimebar = common.Shortcut{ Service: "base", Command: "+view-set-timebar", Description: "Set view timebar configuration", Risk: "write", Scopes: []string{"base:view:write_only"}, AuthTypes: authTypes(), Flags: []common.Flag{ baseTokenFlag(true), tableRefFlag(true), viewRefFlag(true), {Name: "json", Desc: "timebar JSON object", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { return validateViewJSONObject(runtime) }, DryRun: dryRunViewSetTimebar, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { return executeViewSetJSONObject(runtime, "timebar", "timebar") }, }
View Source
var BaseWorkflowCreate = common.Shortcut{ Service: "base", Command: "+workflow-create", Description: "Create a new workflow in a base", Risk: "write", Scopes: []string{"base:workflow:create"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "json", Desc: `workflow body JSON, e.g. {"title":"My Workflow","steps":[...]}; or @path/to/file.json for large definitions`, Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } raw, err := loadJSONInput(runtime.Str("json"), "json") if err != nil { return err } if _, err := parseJSONObject(raw, "json"); err != nil { return err } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { var body map[string]interface{} if raw, err := loadJSONInput(runtime.Str("json"), "json"); err == nil { body, _ = parseJSONObject(raw, "json") } return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/workflows"). Body(body). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { raw, err := loadJSONInput(runtime.Str("json"), "json") if err != nil { return err } body, err := parseJSONObject(raw, "json") if err != nil { return err } data, err := baseV3Call(runtime, "POST", baseV3Path("bases", runtime.Str("base-token"), "workflows"), nil, body, ) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseWorkflowDisable = common.Shortcut{ Service: "base", Command: "+workflow-disable", Description: "Disable a workflow in a base", Risk: "write", Scopes: []string{"base:workflow:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "workflow-id", Desc: "workflow ID (wkf... prefix)", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("workflow-id")) == "" { return common.FlagErrorf("--workflow-id must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/workflows/:workflow_id/disable"). Set("base_token", runtime.Str("base-token")). Set("workflow_id", runtime.Str("workflow-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { data, err := baseV3Call(runtime, "PATCH", baseV3Path("bases", runtime.Str("base-token"), "workflows", runtime.Str("workflow-id"), "disable"), nil, map[string]interface{}{}, ) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseWorkflowEnable = common.Shortcut{ Service: "base", Command: "+workflow-enable", Description: "Enable a workflow in a base", Risk: "write", Scopes: []string{"base:workflow:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "workflow-id", Desc: "workflow ID (wkf... prefix)", Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("workflow-id")) == "" { return common.FlagErrorf("--workflow-id must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { return common.NewDryRunAPI(). PATCH("/open-apis/base/v3/bases/:base_token/workflows/:workflow_id/enable"). Set("base_token", runtime.Str("base-token")). Set("workflow_id", runtime.Str("workflow-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { data, err := baseV3Call(runtime, "PATCH", baseV3Path("bases", runtime.Str("base-token"), "workflows", runtime.Str("workflow-id"), "enable"), nil, map[string]interface{}{}, ) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseWorkflowGet = common.Shortcut{ Service: "base", Command: "+workflow-get", Description: "Get a single workflow definition (including steps) from a base", Risk: "read", Scopes: []string{"base:workflow:read"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "workflow-id", Desc: "workflow ID (wkf... prefix)", Required: true}, {Name: "user-id-type", Desc: "user ID type for creator/updater fields", Enum: []string{"open_id", "union_id", "user_id"}}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("workflow-id")) == "" { return common.FlagErrorf("--workflow-id must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { api := common.NewDryRunAPI(). GET("/open-apis/base/v3/bases/:base_token/workflows/:workflow_id"). Set("base_token", runtime.Str("base-token")). Set("workflow_id", runtime.Str("workflow-id")) if t := runtime.Str("user-id-type"); t != "" { api = api.Params(map[string]interface{}{"user_id_type": t}) } return api }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { var params map[string]interface{} if t := runtime.Str("user-id-type"); t != "" { params = map[string]interface{}{"user_id_type": t} } data, err := baseV3Call(runtime, "GET", baseV3Path("bases", runtime.Str("base-token"), "workflows", runtime.Str("workflow-id")), params, nil, ) if err != nil { return err } runtime.Out(data, nil) return nil }, }
View Source
var BaseWorkflowList = common.Shortcut{ Service: "base", Command: "+workflow-list", Description: "List all workflows in a base (auto-paginated)", Risk: "read", Scopes: []string{"base:workflow:read"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "status", Desc: "filter by status", Enum: []string{"enabled", "disabled"}}, {Name: "page-size", Type: "int", Default: "100", Desc: "page size per request (max 100)"}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { body := map[string]interface{}{ "page_size": runtime.Int("page-size"), } if s := runtime.Str("status"); s != "" { body["status"] = s } return common.NewDryRunAPI(). POST("/open-apis/base/v3/bases/:base_token/workflows/list"). Body(body). Set("base_token", runtime.Str("base-token")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { var allItems []interface{} pageToken := "" for { body := map[string]interface{}{ "page_size": runtime.Int("page-size"), } if pageToken != "" { body["page_token"] = pageToken } if s := runtime.Str("status"); s != "" { body["status"] = s } data, err := baseV3Call(runtime, "POST", baseV3Path("bases", runtime.Str("base-token"), "workflows", "list"), nil, body, ) if err != nil { return err } items, _ := data["items"].([]interface{}) allItems = append(allItems, items...) hasMore, _ := data["has_more"].(bool) if !hasMore { break } nextToken, _ := data["page_token"].(string) if nextToken == "" { break } pageToken = nextToken } runtime.Out(map[string]interface{}{ "items": allItems, "total": len(allItems), }, nil) return nil }, }
View Source
var BaseWorkflowUpdate = common.Shortcut{ Service: "base", Command: "+workflow-update", Description: "Replace a workflow's full definition (title and/or steps) in a base", Risk: "write", Scopes: []string{"base:workflow:update"}, AuthTypes: []string{"user", "bot"}, Flags: []common.Flag{ {Name: "base-token", Desc: "base token", Required: true}, {Name: "workflow-id", Desc: "workflow ID (wkf... prefix)", Required: true}, {Name: "json", Desc: `workflow body JSON, e.g. {"title":"New Title","steps":[...]}; or @path/to/file.json for large definitions`, Required: true}, }, Validate: func(ctx context.Context, runtime *common.RuntimeContext) error { if strings.TrimSpace(runtime.Str("base-token")) == "" { return common.FlagErrorf("--base-token must not be blank") } if strings.TrimSpace(runtime.Str("workflow-id")) == "" { return common.FlagErrorf("--workflow-id must not be blank") } raw, err := loadJSONInput(runtime.Str("json"), "json") if err != nil { return err } if _, err := parseJSONObject(raw, "json"); err != nil { return err } return nil }, DryRun: func(ctx context.Context, runtime *common.RuntimeContext) *common.DryRunAPI { var body map[string]interface{} if raw, err := loadJSONInput(runtime.Str("json"), "json"); err == nil { body, _ = parseJSONObject(raw, "json") } return common.NewDryRunAPI(). PUT("/open-apis/base/v3/bases/:base_token/workflows/:workflow_id"). Body(body). Set("base_token", runtime.Str("base-token")). Set("workflow_id", runtime.Str("workflow-id")) }, Execute: func(ctx context.Context, runtime *common.RuntimeContext) error { raw, err := loadJSONInput(runtime.Str("json"), "json") if err != nil { return err } body, err := parseJSONObject(raw, "json") if err != nil { return err } data, err := baseV3Call(runtime, "PUT", baseV3Path("bases", runtime.Str("base-token"), "workflows", runtime.Str("workflow-id")), nil, body, ) if err != nil { return err } runtime.Out(data, nil) return nil }, }
Functions ¶
Types ¶
This section is empty.
Source Files
¶
- base_advperm_disable.go
- base_advperm_enable.go
- base_command_common.go
- base_copy.go
- base_create.go
- base_data_query.go
- base_errors.go
- base_form_create.go
- base_form_delete.go
- base_form_get.go
- base_form_list.go
- base_form_questions_create.go
- base_form_questions_delete.go
- base_form_questions_list.go
- base_form_questions_update.go
- base_form_update.go
- base_get.go
- base_ops.go
- base_role_common.go
- base_role_create.go
- base_role_delete.go
- base_role_get.go
- base_role_list.go
- base_role_update.go
- base_shortcut_helpers.go
- dashboard_block_create.go
- dashboard_block_delete.go
- dashboard_block_get.go
- dashboard_block_list.go
- dashboard_block_update.go
- dashboard_create.go
- dashboard_delete.go
- dashboard_get.go
- dashboard_list.go
- dashboard_ops.go
- dashboard_update.go
- field_create.go
- field_delete.go
- field_get.go
- field_list.go
- field_ops.go
- field_search_options.go
- field_update.go
- helpers.go
- record_delete.go
- record_get.go
- record_history_list.go
- record_list.go
- record_ops.go
- record_upload_attachment.go
- record_upsert.go
- shortcuts.go
- table_create.go
- table_delete.go
- table_get.go
- table_list.go
- table_ops.go
- table_update.go
- view_create.go
- view_delete.go
- view_get.go
- view_get_card.go
- view_get_filter.go
- view_get_group.go
- view_get_sort.go
- view_get_timebar.go
- view_list.go
- view_ops.go
- view_rename.go
- view_set_card.go
- view_set_filter.go
- view_set_group.go
- view_set_sort.go
- view_set_timebar.go
- workflow_create.go
- workflow_disable.go
- workflow_enable.go
- workflow_get.go
- workflow_list.go
- workflow_update.go
Click to show internal directories.
Click to hide internal directories.