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

  1. Send packageNames as an array of strings only
  2. Remove null or non-string elements from the array
  3. 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)