diff --git a/lnbits/core/extensions/api.py b/lnbits/core/extensions/api.py index cd794cf5f..18cc4bffa 100644 --- a/lnbits/core/extensions/api.py +++ b/lnbits/core/extensions/api.py @@ -355,6 +355,7 @@ class ExtensionAPI: extra={ "tag": self.extension_id, "source_id": request.source_id, + f"extra_{self.extension_id}": request.extra, }, extension=self.extension_id, ), diff --git a/lnbits/core/extensions/models.py b/lnbits/core/extensions/models.py index d575d6d0b..867ed95fd 100644 --- a/lnbits/core/extensions/models.py +++ b/lnbits/core/extensions/models.py @@ -87,6 +87,19 @@ class CreateInvoicePublicRequest(BaseModel): amount: float = Field(..., gt=0) currency: str = Field(..., min_length=1, max_length=8) memo: str = Field("", max_length=512) + extra: dict[str, Any] = Field(default_factory=dict) + + @root_validator + def validate_extra_size(cls, values: dict[str, Any]) -> dict[str, Any]: + extra = values.get("extra") or {} + try: + encoded = json.dumps(extra, separators=(",", ":")) + except TypeError as exc: + raise ValueError("extra must be JSON serializable.") from exc + if len(encoded.encode()) > 4096: + raise ValueError("extra must not exceed 4096 bytes.") + values["extra"] = extra + return values class CreateInvoiceResponse(BaseModel):