diff --git a/backend/internal/service/widget_service.go b/backend/internal/service/widget_service.go index dfb7b5dc..03b8063c 100644 --- a/backend/internal/service/widget_service.go +++ b/backend/internal/service/widget_service.go @@ -1759,7 +1759,14 @@ func ParseWebWidgetConfig(channelConfig string) (*WebWidgetConfig, error) { } var config WebWidgetConfig if err := json.Unmarshal([]byte(channelConfig), &config); err != nil { - return nil, fmt.Errorf("invalid JSON: %w", err) + // Tolerate type mismatch errors (e.g., "" for a bool field). + // Rails/Chatwoot seed data sometimes serializes boolean fields as + // empty strings, which Go's strict json.Unmarshal rejects. Go still + // populates fields that parse correctly (e.g. website_token), so we + // only abort on genuine JSON syntax errors. + if _, isTypeErr := err.(*json.UnmarshalTypeError); !isTypeErr { + return nil, fmt.Errorf("invalid JSON: %w", err) + } } return &config, nil } diff --git a/frontend/public/sdk/js/sdk.js b/frontend/public/sdk/js/sdk.js new file mode 100644 index 00000000..292e76d8 --- /dev/null +++ b/frontend/public/sdk/js/sdk.js @@ -0,0 +1,300 @@ +(function(){"use strict";/*! js-cookie v3.0.8 | MIT */function _(e){for(var o=1;o"u")){u=_({},o,u),typeof u.expires=="number"&&(u.expires=new Date(Date.now()+u.expires*864e5)),u.expires&&(u.expires=u.expires.toUTCString()),a=encodeURIComponent(a).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var b in u)u[b]&&(i+="; "+b,u[b]!==!0&&(i+="="+u[b].split(";")[0]));return document.cookie=a+"="+e.write(n,a)+i}}function c(a){if(!(typeof document>"u"||arguments.length&&!a)){for(var n=document.cookie?document.cookie.split("; "):[],u={},i=0;i