mirror of
https://github.com/larksuite/cli.git
synced 2026-07-09 02:14:02 +08:00
59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
// Copyright (c) 2026 Lark Technologies Pte. Ltd.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package output
|
|
|
|
import "io"
|
|
|
|
// SuccessEnvelopeOptions configures the shortcut-compatible success envelope.
|
|
type SuccessEnvelopeOptions struct {
|
|
CommandPath string
|
|
Identity string
|
|
JqExpr string
|
|
Out io.Writer
|
|
ErrOut io.Writer
|
|
}
|
|
|
|
// SuccessEnvelopeData extracts the business payload for the standard success
|
|
// envelope from a Lark API response. Outer code/msg fields are transport
|
|
// protocol details and are intentionally not exposed as business data.
|
|
func SuccessEnvelopeData(result interface{}) interface{} {
|
|
m, ok := result.(map[string]interface{})
|
|
if !ok {
|
|
return map[string]interface{}{}
|
|
}
|
|
data, ok := m["data"]
|
|
if !ok || data == nil {
|
|
return map[string]interface{}{}
|
|
}
|
|
return data
|
|
}
|
|
|
|
// WriteSuccessEnvelope emits the standard success envelope used by shortcuts.
|
|
// JSON output carries content-safety alerts inside the envelope. When jq is
|
|
// applied, the alert may be filtered away, so warn mode also writes stderr.
|
|
func WriteSuccessEnvelope(data interface{}, opts SuccessEnvelopeOptions) error {
|
|
scanResult := ScanForSafety(opts.CommandPath, data, opts.ErrOut)
|
|
if scanResult.Blocked {
|
|
return scanResult.BlockErr
|
|
}
|
|
|
|
env := Envelope{
|
|
OK: true,
|
|
Identity: opts.Identity,
|
|
Data: data,
|
|
Notice: GetNotice(),
|
|
}
|
|
if scanResult.Alert != nil {
|
|
env.ContentSafetyAlert = scanResult.Alert
|
|
}
|
|
if opts.JqExpr != "" {
|
|
if scanResult.Alert != nil && opts.ErrOut != nil {
|
|
WriteAlertWarning(opts.ErrOut, scanResult.Alert)
|
|
}
|
|
return JqFilter(opts.Out, env, opts.JqExpr)
|
|
}
|
|
PrintJson(opts.Out, env)
|
|
return nil
|
|
}
|