txlyre

txlyre sincronizados commits a v3.2.6 en txlyre/3x-ui desde la réplica

hace 6 horas

txlyre sincronizada nueva referencia v3.2.6 a txlyre/3x-ui desde la réplica

hace 6 horas

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 950a647bcc v3.2.6
  • c8ad42631c fix(migrate): copy composite-key tables without FindInBatches (#4787) SQLite to Postgres migration aborted with "copy *model.ClientInbound: primary key required" on installs whose client_inbounds table exceeds one read batch (500 rows). gorm's FindInBatches pages between batches using a single PrioritizedPrimaryField, which composite-key tables (client_id + inbound_id, no surrogate id) do not have, so it returns ErrPrimaryKeyRequired once a table holds more than one batch. Replace FindInBatches in copyTable with explicit LIMIT/OFFSET paging ordered by the model's primary-key columns. This works for every table including composite-key ones, keeps memory bounded, and changes no schema. Add a Postgres-gated regression test covering a >500-row composite-key table.
  • 4f597a08c4 perf(clients): batch bulk attach/detach to cut per-item DB work BulkDetach removed one client per (email x inbound) pair, each with its own settings rewrite, transaction and full SyncInbound. Add delInboundClients to remove all targeted clients from an inbound in a single pass and group removals by inbound, turning O(emails x inbounds) write cycles into O(inbounds). BulkAttach ran the global getAllEmailSubIDs scan once per target inbound via checkEmailsExistForClients. Compute that snapshot once per call and thread it through a new internal addInboundClient; the duplicate check is unaffected because attach reuses each client's existing identity (same subId). Covered by bulk_clients_test.go: VLESS round-trip (linkage, settings JSON, idempotency, record survival), skip-unattached, and Trojan key matching.
  • d56505004e style: gofmt -s (doc-comment list separator, struct field alignment)
  • f0e459e51e fix(node): suppress unavoidable InsecureSkipVerify alert for cert pinning FetchCertFingerprint must accept any certificate by design: it fetches a not-yet-pinned node's leaf cert (trust-on-first-use) so the admin can pin it. Disabling verification is inherent to that, so go/disabled-certificate-check cannot be cleared by code changes. Suppress the finding inline, matching the existing lgtm convention in custom_geo.go.
  • Ver comparación de estos 23 commits »

hace 6 horas

txlyre sincronizada y eliminada referencia branches/ruleformmodal_redesign en txlyre/3x-ui desde la réplica

hace 6 horas

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 588ea86298 fix(hysteria): use pinSHA256 for pinned cert and emit ech in share links Hysteria links now carry the pinned peer cert under the hysteria2-standard pinSHA256 key instead of pcs (frontend genHysteriaLink + outbound importer round-trip), and the Go subscription generator emits ech from echConfigList. Also drops the dead allowInsecure guard in genHysteriaLink, which read a field that does not exist on TlsClientSettings.
  • 7f8c79675f fix(sub): source Userinfo total/expiry from client config in multi-node (#4645) The Subscription-Userinfo header read total/expiry from client_traffics, but in a multi-node setup the master's node sync overwrites those with the node snapshot's zeros, so the header reported total=0; expire=0 even though the panel UI (which reads the clients table) showed the configured limits. AggregateTrafficByEmails now falls back to the clients table for total/expiry when the traffic row is zero, keeping up/down/lastOnline from client_traffics.
  • 80173b1b1d fix(db): make password-hash migration idempotent to prevent lock-out (#4612) The UserPasswordHash seeder bcrypt-hashed user.Password unconditionally, assuming plaintext. If it ran on an already-bcrypt value (DB restore, SQLite<->Postgres switch, history_of_seeders inconsistency on upgrade) it double-hashed the password, locking the admin out with both old and new passwords rejected. Skip any password that is already a bcrypt hash.
  • 6ae1b38607 fix(outbound): add None option to uTLS fingerprint in TLS form (#4760) Hysteria doesn't use uTLS, but the outbound TLS form's uTLS dropdown only listed concrete fingerprints (chrome, firefox, ...) with no explicit empty entry. Add a None option, matching the inbound TLS form, so the fingerprint can be left empty.
  • 803e010921 fix(outbound): carry ALPN, fingerprint and UDP mask when importing a Hysteria2 link (#4760) parseHysteria2Link hardcoded alpn to h3 and never read fp, ech, or the fm (finalmask) param, so importing a Hysteria2 client URL as an outbound dropped the configured ALPN, fingerprint, and salamander UDP mask. Parse alpn (falling back to h3 only when absent), fp, ech, and the pcs pinned-cert key, and restore the UDP mask via applyFinalMaskParam.
  • Ver comparación de estos 15 commits »

hace 15 horas

txlyre sincronizada y eliminada referencia branches/hover_effect_disable en txlyre/3x-ui desde la réplica

hace 15 horas

txlyre sincronizados commits a v3.2.5 en txlyre/3x-ui desde la réplica

hace 23 horas

txlyre sincronizada nueva referencia v3.2.5 a txlyre/3x-ui desde la réplica

hace 23 horas

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 2a03844566 v3.2.5
  • 51d383b1c3 chore: bump bundled Xray-core to v26.6.1 Update the Xray-core download URLs in the release workflow and DockerInit.sh from v26.5.9 to v26.6.1.
  • 2bb9ed1cda feat(outbound): sync DNS outbound config with Xray core changes Rename the DNS rule wire key qtype to qType (reading the legacy qtype on parse for back-compat), add the new rCode response-code field for the return action (omitted when zero), and rename the reject action to return. Align the DNS rule action set across the form dropdown, schema, and adapter to the core's valid values (direct/drop/return/hijack), dropping the never-valid rejectIPv4/rejectIPv6 entries.
  • 32f96298f8 feat(finalmask): sync transport with upstream Xray core changes Consolidate the eight legacy mKCP/header UDP mask types into a single mkcp-legacy type ({header, value}), simplify xicmp to {dgram, ips}, and add the new realm UDP mask type, matching the updated Xray-core wire format. Update the FinalMask schema enum, the transport form, the mKCP seeding default, and the backend KCP share-link translation. Refresh golden fixtures/snapshots and add backend coverage for the mapping.
  • c5ff166056 fix(inbounds): refresh routing inbound-tag list after inbound changes The routing-rule tag picker reads inboundTags from the xray config query (['xray','config']), but refresh() only invalidated the inbounds/clients buckets. So after adding, editing or deleting an inbound the tag list stayed stale until a hard refresh wiped the react-query cache. Invalidate the xray config query too, alongside the existing inbounds-options fix.
  • Ver comparación de estos 18 commits »

hace 23 horas

txlyre sincronizados commits a branches/ruleformmodal_redesign en txlyre/3x-ui desde la réplica

  • ba2baa9028 chore(ui): redesign Edit Routing Rules modal
  • 2a03844566 v3.2.5
  • 51d383b1c3 chore: bump bundled Xray-core to v26.6.1 Update the Xray-core download URLs in the release workflow and DockerInit.sh from v26.5.9 to v26.6.1.
  • 2bb9ed1cda feat(outbound): sync DNS outbound config with Xray core changes Rename the DNS rule wire key qtype to qType (reading the legacy qtype on parse for back-compat), add the new rCode response-code field for the return action (omitted when zero), and rename the reject action to return. Align the DNS rule action set across the form dropdown, schema, and adapter to the core's valid values (direct/drop/return/hijack), dropping the never-valid rejectIPv4/rejectIPv6 entries.
  • 32f96298f8 feat(finalmask): sync transport with upstream Xray core changes Consolidate the eight legacy mKCP/header UDP mask types into a single mkcp-legacy type ({header, value}), simplify xicmp to {dgram, ips}, and add the new realm UDP mask type, matching the updated Xray-core wire format. Update the FinalMask schema enum, the transport form, the mKCP seeding default, and the backend KCP share-link translation. Refresh golden fixtures/snapshots and add backend coverage for the mapping.
  • Ver comparación de estos 10 commits »

hace 23 horas

txlyre sincronizada nueva referencia branches/ruleformmodal_redesign a txlyre/3x-ui desde la réplica

hace 23 horas

txlyre sincronizados commits a branches/hover_effect_disable en txlyre/3x-ui desde la réplica

  • 4643957bca chore(ui): remove cards jump on hover
  • 2a03844566 v3.2.5
  • 51d383b1c3 chore: bump bundled Xray-core to v26.6.1 Update the Xray-core download URLs in the release workflow and DockerInit.sh from v26.5.9 to v26.6.1.
  • 2bb9ed1cda feat(outbound): sync DNS outbound config with Xray core changes Rename the DNS rule wire key qtype to qType (reading the legacy qtype on parse for back-compat), add the new rCode response-code field for the return action (omitted when zero), and rename the reject action to return. Align the DNS rule action set across the form dropdown, schema, and adapter to the core's valid values (direct/drop/return/hijack), dropping the never-valid rejectIPv4/rejectIPv6 entries.
  • 32f96298f8 feat(finalmask): sync transport with upstream Xray core changes Consolidate the eight legacy mKCP/header UDP mask types into a single mkcp-legacy type ({header, value}), simplify xicmp to {dgram, ips}, and add the new realm UDP mask type, matching the updated Xray-core wire format. Update the FinalMask schema enum, the transport form, the mKCP seeding default, and the backend KCP share-link translation. Refresh golden fixtures/snapshots and add backend coverage for the mapping.
  • Ver comparación de estos 10 commits »

hace 23 horas

txlyre sincronizada nueva referencia branches/hover_effect_disable a txlyre/3x-ui desde la réplica

hace 23 horas

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • fb311afa6f fix(sub): keep listen/bind IP out of subscription page URLs The subscription page leaked an inbound's server-side Listen IP into the client-facing URLs when a bind address was set: - Per-config links: resolveInboundAddress returned the bind Listen IP (loopback/private/public alike) instead of the host the subscriber reached the panel on. It now returns the node address for node-managed inbounds, otherwise the subscriber host; the bind Listen is ignored (External Proxy remains the way to advertise a specific endpoint). - Subscription Copy URL (SUB/JSON/CLASH): BuildURLs composed the base differently from the panel's Client Information page and never normalized the request host, so a loopback/bind request leaked the raw IP. The composition is extracted into the shared SettingService.BuildSubURIBase, used by both the panel and the sub page so they render identically, and fed the already-normalized subscriber host.
  • eb78b8666f fix(inbound): re-derive auto tags on edit and keep node tags consistent Auto-generated inbound tags (in-<port>-<l4>, n<id>- prefixed for node inbounds) now re-derive when port/listen/transport change on update instead of keeping the stale round-tripped value. The resolved tag is mirrored onto the API response, and NodeID is pinned to the stored row so a node inbound never loses its n<id>- prefix on edit. The edit form recomputes the tag live via a Go-parity helper so the JSON preview matches what gets saved. Make node/central tag matching prefix-agnostic in all three places (traffic attribution, remote-id resolution, and the orphan sweep) so an n<id>- prefix present on only one side can no longer spawn duplicate inbounds or drop traffic on sync. Force LF on shell scripts via .gitattributes (CRLF broke the Docker build shebang when the repo is checked out on Windows) and add a .dockerignore to keep node_modules/.git out of the build context. Adds Go and frontend tests covering tag re-derivation, prefix-agnostic matching, and node-snapshot prefix mismatch.
  • 4a11375f36 fix(tgbot): send login notification asynchronously UserLoginNotify ran SendMsgToTgbotAdmins synchronously on the login request goroutine. When Telegram was unreachable, the send retried up to 3x with a 30s timeout each, blocking the login handler for ~90s+ and effectively locking users out (issue #4585). Dispatch the send in a goroutine after the cheap bot-running/login-notify-enabled guards so login always returns promptly; the existing per-send 30s context timeout and bounded retries keep the background goroutine from leaking.
  • 8db9729913 fix(model): accept tun protocol in inbound validation Adding a TUN inbound failed with "request body failed validation" because the Inbound.Protocol oneof allowlist omitted "tun". Add it so the validator matches the protocol the frontend already offers. Closes #4736
  • 4e4e30d8c1 fix(ci): raise issue-bot max-turns so full triage completes The handle-issue job capped at 25 turns, which only covered the early-exit spam/duplicate paths. Real bug reports went through the full flow (categorize + Read/Grep the code + post an answer) and hit the cap mid-step 5, leaving the issue labeled but with no reply. Raise to 45 to match the heavier path; the mention job already uses 40. @
  • Ver comparación de estos 13 commits »

hace 1 día

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 998fa0dfe1 fix(postgres): stop FK constraint from blocking inbound delete The schema was written for SQLite, which never enforces foreign keys, so relationships are managed in application code and deleting an inbound keeps its client_traffics by design. On Postgres GORM auto-created the fk_inbounds_client_stats constraint, which rejected those deletes with SQLSTATE 23503. Set DisableForeignKeyConstraintWhenMigrating so neither backend creates the constraint, and drop the already-created one on existing Postgres DBs via dropLegacyForeignKeys. Also revert the client_traffics deletion that c20ee00f added to DelInbound so traffic is preserved.
  • f02018cfb7 fix(outbounds): prevent freedom save crash, complete its fields (#4686) freedomToWire called Object.entries(s.fragment), but getFieldsValue(true) returns freedom settings without a fragment object when the Fragment switch is off (its sub-fields never register). That threw 'Cannot convert undefined or null to object' and silently killed the save. Guard fragment with a fallback so an unset value is treated as empty. While verifying against xray-core's freedom config, also: - add the missing userLevel field (schema, form schema, adapter, UI) - fix noise applyTo enum to ip/ipv4/ipv6 (xray rejects the old host/all) Closes #4686
  • c20ee00fa3 fix(postgres): clear client_traffics before deleting inbound DelInbound removed the client_inbounds join rows but never deleted the inbound's client_traffics, so Postgres rejected the inbound delete with fk_inbounds_client_stats (SQLSTATE 23503). SQLite never enforced the FK so this went unnoticed. Delete client_traffics first, matching the order already used in the sync path.
  • b1c141a515 fix(settings): sync generated schemas - entity.go: tighten SessionMaxAge validate tag gte=0 -> gte=1 to match the panel UI (min 60) and the hand-written setting.ts schema - GeneralTab.tsx: add max bounds to sessionMaxAge (525600) and pageSize (1000), raise pageSize min to 1 - regenerate zod.ts/types.ts, picking up pending drift: panelProxy field, client group field, InboundFallback.dest, and dropping the stale hysteria2 protocol enum value
  • 982a78ecdd ci(issue-bot): focus @claude mention on answering, raise turn limit
  • Ver comparación de estos 12 commits »

hace 1 día

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 3f6fe1167d fix(sub): don't leak loopback bind IP into link host When the sub server is reached on a loopback/unspecified host (e.g. 127.0.0.2 from its Listen IP bind), the request host was used as the link address. Substitute the configured Subscription/Web Domain, or normalize loopback to localhost, so the sub link address matches the panel's Client Information.
  • 234cce408b @ ci: replace legacy frontend path filters with frontend/** glob The CI, CodeQL, and release workflows still gated on a per-extension list (**.js, **.html, **.css, **.cjs, ...) left over from the old Vue/JS UI. That list missed .tsx entirely, so React component edits never triggered the workflows, and carried dead entries like **.cjs. Replace the whole enumeration with a single frontend/** glob in all three so any change under frontend/ triggers build/test/analysis, while keeping **.go, go.mod, go.sum, **.sh, and the service-file paths. @
  • a7d763a542 fix(clients): persist sort selection across navigation The clients page saved searchKey and filters to localStorage but not the sort selection, so leaving the page and returning reset sort to the default (Oldest). Persist the chosen sort alongside the existing filter state and restore it on mount, matching the filter-persistence pattern.
  • 80110f9404 fix(inbounds): reset id sequence on delete so old ids are reused SQLite AUTOINCREMENT keeps a high-water mark in sqlite_sequence that deleting rows never lowers, so after removing inbounds the next add kept climbing instead of reusing freed ids. DelInbound now realigns the counter to MAX(id) after each delete, clearing the sqlite_sequence row entirely when the table is empty so the next inbound starts at id 1. Guarded behind !IsPostgres(); Postgres sequences are left untouched.
  • cf50952921 feat(inbounds): add multi-select and bulk delete Mirror the clients page: checkbox selection on the desktop table and on mobile cards, with a danger Delete button in the toolbar that removes all selected inbounds in one call. Backend adds POST /panel/api/inbounds/bulkDel, which loops the existing DelInbound per id (xray restarts at most once) and returns {deleted, skipped}. Frontend shows a confirm modal plus a result toast, clears the selection on success, adds bulk-delete i18n keys across all 13 languages, and documents the endpoint in the in-panel API docs.
  • Ver comparación de estos 10 commits »

hace 2 días

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 84a689cf10 feat(sub): add HEAD method support for subscription endpoints (#4684) Allow clients to retrieve Subscription-Userinfo header via lightweight HEAD requests without downloading the full response body. This enables traffic monitoring tools and proxy clients to check quota usage more efficiently.

hace 2 días

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • eee26e4788 fix(outbounds): lock hysteria to its QUIC transport + TLS, add version/masquerade The hysteria protocol now offers only the Hysteria transport (other transports removed) and security is always TLS. This prevents the broken hysteria-over-tcp / security:none outbounds that made xray-core fail to start with 'Failed to build Hysteria config. > version != 2'. Show the fixed version field directly under Transmission, and expose the full masquerade sub-form on the outbound too. The masquerade UI was extracted into a shared HysteriaMasqueradeForm component used by both the inbound and outbound forms. Closes #4665
  • 987a6dd1e5 feat(clients/inbounds): IP log popups, clearer titles, tag-based inbound labels Add an IP Log popup (view list + refresh + clear) to the client edit form and the Client Information modal, with IPs stacked vertically. Identify inbounds by their xray tag (not remark/protocol:port) across every picker and chip: attach/detach modals, the attached-inbounds column and field, the filter drawer, and bulk-add. Add the tag field to the InboundOption schema (the backend already returned it). Clarify modal titles/labels: Client Information (was More Information) and Inbound Information (was Inbound's Data); Client Information / QR Code titles now include the client email. i18n: rename keys moreInformation->clientInfo and inboundData->inboundInfo with proper translations in all languages; addTitle->addClient, editTitle->editClient, addToGroupPlaceholder->groupName.
  • 12afb862ff fix(outbounds): parse wireguard:// links and fix ss:// query-string port Add parseWireguardLink to the outbound import dispatcher: maps the secretKey userinfo, peer publicKey/endpoint, address, mtu, reserved, preSharedKey and keepAlive (probing common client aliases). Previously any wireguard:// link fell through to null and showed "Wrong Link!". Also fix parseShadowsocksLink so a trailing query string (e.g. ?type=tcp) no longer leaks into the host:port slice, which made Number(port) NaN and silently fell back to 443. Strip the query before parsing in both the modern and legacy ss forms.
  • cb7af04cd3 fix(xray): test UDP outbounds via xray probe (#4657) + Vision testseed & Flow form fixes Outbound connection tester (#4657): UDP-based outbounds (wireguard, hysteria, kcp/quic transports) were probed with a raw UDP dial that treated the inevitable read timeout as success, so every one reported a fake ~5s 'alive'. Route them through the authoritative xray burstObservatory probe and drop the broken raw-UDP path. Test All now runs a parallel TCP lane and a serial HTTP lane so xray-probe outbounds don't collide on the test semaphore. Vision testseed: the [900, 500, 900, 256] default repeats 900, and a tags Select keys each tag by value -> 'two children with the same key, 900'. Render it as four InputNumbers (inbound + outbound forms); the field is a fixed 4-tuple where repeats are valid. Inbound form: drop the null-valued 'Local Panel' Select option (AntD rejects null option values; placeholder + allowClear already cover it). Outbound form: add an explicit 'None' option to the Flow selector.
  • Ver comparación de estos 4 commits »

hace 3 días

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 8c30ddbfd9 fix(outbounds): persist optional blocks and fix stale edit reopen - derive XMUX toggle from saved xmux on load, seed defaults on enable, and drop xmux when disabled (#4654) - save the JSON tab straight from parsed text so sockopt, finalmask (TCP masks), mux, and reverse excludes round-trip instead of being dropped by the form-store bounce - remove the redundant Host/Path fields from HTTP obfuscation that fought the request.headers editor over the same form path - rebuild the outbounds table columns on row content change (rows, not rows.length) so a re-opened edited outbound shows fresh values - add adapter round-trip regression tests Closes #4654
  • 62c293e034 fix(outbounds): support proxyProtocol on freedom outbound Xray's freedom outbound accepts a numeric proxyProtocol (0 disabled, 1 or 2 for the PROXY protocol version), but the panel had no field for it and the typed form adapter dropped the key on save — so a value set via the JSON editor disappeared the moment the outbound was saved. Model proxyProtocol through the freedom wire schema, the form schema, and both adapter directions (clamped to 0/1/2, omitted from the wire when 0), and add a Select (none / v1 / v2) to the freedom section of the outbound form. Add round-trip test coverage and the proxyProtocol label across all locales. Closes #4486
  • 5d0081a3b9 fix(qr): hide QR for post-quantum links on client QR page Opening the client sublinks/QR modal crashed when a link used post-quantum keys (ML-DSA-65 / ML-KEM-768): the encoded URL exceeds the antd QRCode capacity and the component throws. The client QR modal rendered the QRCode unconditionally, so it took down the page. The names don't appear verbatim in a share link — mldsa65Verify rides inside pqv=<base64> and ML-KEM-768 inside encryption=mlkem768x25519plus. The QR modal and inbound QR modal used a literal-substring guard that missed those encoded forms, leaving the QR (and the crash) in place. Consolidate detection into a single isPostQuantumLink() helper in inbound-link.ts and reuse it across the client QR, inbound QR, client info, and sub surfaces. The copy/download link still works; only the QR image is suppressed for oversized post-quantum links. Closes #4656
  • Ver comparación de estos 3 commits »

hace 3 días

txlyre sincronizados commits a main en txlyre/3x-ui desde la réplica

  • 90a64a1b22 fix(ssl): prompt before setting IP cert path for panel The IP certificate flow auto-set the panel cert path silently, unlike the domain and Cloudflare flows which ask first. Add the same "Would you like to set this certificate for the panel? (y/n)" prompt so the IP flow is consistent and only configures the panel on confirmation.
  • 7ea88e3e37 fix(clients): store flow per-inbound for shared clients A client shared across inbounds (e.g. VLESS+TCP+Reality and VLESS+WS+TLS) had its `flow` applied globally, so enabling xtls-rprx-vision for Reality broke the WS+TLS inbound for the same client (#4628). Gate flow per inbound at every fan-out site via clientWithInboundFlow, reusing inboundCanEnableTlsFlow (VLESS+TCP+TLS/Reality only), and make ListForInbound treat flow_override as authoritative so an empty override means "no flow on this inbound" instead of inheriting the record's global flow. Also tighten buildTargetClientFromSource (copy-clients) to gate on transport, not just protocol.
  • 8e301dbca9 fix(clients): preserve UUID when toggling enable from clients page The clients list returns slim rows without secrets (uuid/password/auth) or flow/security/tgId/reset/group. setEnable built its update payload straight from the slim row, sending an empty id, so the backend treated it as a new client and regenerated the UUID (and dropped the omitted fields). Hydrate the full record first and send a complete payload that changes only the enable flag.
  • 8a28373a01 fix(nodes): use GREATEST for last_online merge on PostgreSQL setRemoteTrafficLocked merged last_online with MAX(last_online, ?), which is SQLite's two-argument scalar max. PostgreSQL's MAX() is aggregate-only, so node traffic sync failed every cycle with "function max(bigint, unknown) does not exist (SQLSTATE 42883)", flooding the logs. Add a dialect-aware database.GreatestExpr helper (GREATEST on Postgres, MAX on SQLite) and use it for the last_online merge. last_online is a non-null int64, so the two functions are semantically identical here. Closes #4633
  • df777c12d3 fix(outbounds): preserve TLS/Reality security on save OutboundFormModal.onOk built the save payload from form.validateFields(), which only returns REGISTERED Form.Item values. The security selector is a Radio.Group that writes streamSettings.security via setFieldValue with no bound Form.Item, so validateFields() dropped it — network, tlsSettings and realitySettings (all registered) survived, but the security discriminator vanished and xray-core fell back to security="none". This hit both new outbounds and re-saved ones. Read the full form store with getFieldsValue(true) for the payload (still validating first), matching how the inbound modal already does it. Closes #4634
  • Ver comparación de estos 9 commits »

hace 4 días