siyuan-note/siyuan · error
Field [packageNames]: each element should be of type…
Error message
Field [packageNames]: each element should be of type [String]
What it means
Contract-decoder error for the getBazaarPackageRatings API: an element of the packageNames array is not a JSON string, so the ratings request payload is malformed and rejected while decoding the legacy request body.
Solutions
- Send packageNames as an array of strings only
- Remove null or non-string elements from the array
- Check the client is using the documented request schema
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at kernel/apicontract/bazaar.go:557 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of siyuan-note/siyuan@9f775e8a12 (2026-09-19).
Data as JSON: /api/errors/baa583fce3005eff.
Report an issue: GitHub.
Appendix: source
Thrown at kernel/apicontract/bazaar.go:557
return request, nil
}
GetBazaarPackageRatings.decodeRequest = func(reader io.Reader) (request GetBazaarPackageRatingsRequest, err error) {
fields, err := bazaarRequestFields(reader, "/api/bazaar/getBazaarPackageRatings")
if err != nil {
return request, err
}
if request.PackageType, err = bazaarString(fields, "packageType", true, true); err != nil {
return request, err
}
items, parseErr := legacyField[[]json.RawMessage](fields, "packageNames", "Array", true)
if parseErr != nil {
return request, parseErr
}
request.PackageNames = make([]string, 0, len(items))
for _, item := range items {
var value string
if string(item) == "null" || json.Unmarshal(item, &value) != nil {
request.NamesError = errors.New("Field [packageNames]: each element should be of type [String]")
break
}
request.PackageNames = append(request.PackageNames, value)
}
return request, nil
}
GetBazaarPackageUserRatings.decodeRequest = func(reader io.Reader) (request GetBazaarPackageUserRatingsRequest, err error) {
fields, err := bazaarRequestFields(reader, "/api/bazaar/getBazaarPackageUserRatings")
if err != nil {
return request, err
}
if request.PackageType, err = bazaarString(fields, "packageType", true, true); err != nil {
return request, err
}
items, parseErr := legacyField[[]json.RawMessage](fields, "packageNames", "Array", true)
if parseErr != nil {
return request, parseErr
}View on GitHub (pinned to 9f775e8a12)