콘텐츠로 건너뛰기
KAMOUniverse

변경 로그

무슨 일이야?

플랫폼에 대한 모든 개선 사항, 그것이 선적.

  1. · kamo-internal

    Real work orders and subscriptions per market — dispatch, customer accounts, live subscriptions, cancel at period end

    Service (work orders): - the grid reads its own market's jobs (plus older jobs with no market), shows the customer, the technician (member chip, never an id), the next visit, and status / priority words from the dictionary; rows keep ?back= - the work order page shows its market, files the job under an account or none (swap beside Customer), dispatches a technician (Choose Technician, arrival and finish, visit notes; a new job becomes Assigned), adds return visits, edits summary / description / trade / priority / address, labels status buttons by what they do (Start Work, Put On Hold, Mark Complete, Mark Invoiced, Cancel Work Order), shows each note's author with photo, and goes Back to its market's tab - no screen shows a job's uid: new jobs are numbered, older ones show a short ref Subscription: - the Agreements sub-tab was fifteen generated agreements whose buttons changed nothing; it now lists the market's live subscriptions (customer with photo, plan, status, seats, MRR, next billing, balance due, overdue, ending) and opens each on its order page - Signups reads the market's orders, names customers by account and member chip (was Member #<id>), offers only the market's plans in the order wizard - the subscription page shows the customer with photo and Open Account, the market, loads its subscription by id (no org-wide account or subscription scan), and cancels a live subscription with a reason, now or at the end of the billing period (Cancel only marked the order before, leaving the subscription billing); cancelling an order asks first - /commerce/agreements/new opens the order wizard for the market instead of a Coming Soon page - Back on agreement and signup pages no longer points at a tab id that never existed Removed the unreachable mortgage mock PipelineCommitmentsTab and /commerce/commitments/[id] (generated data; nothing linked to either). Help: How to Manage a Work Order and How to Manage a Subscription, linked from the grids, the visit window and the cancel window.

  2. · SecurityService

    Market-scoped work orders and subscriptions; dispatch and customer endpoints

    - GET **************** lists one market's work orders (plus those with no market) - PUT /service-jobs/{uid}/customer files a job under an account or takes it off - POST /service-jobs/{uid}/visits adds a visit; PUT .../visits/{visitUid} schedules it and assigns a technician (409 on a finished visit) - GET /pos/subscription-orders and /pos/subscriptions take ?marketId= - GET **************** takes the market UUID (it was a Long, so every market-scoped request was a 400) and returns only the caller's plans - ServiceJobRightsGateTest covers the three new handlers

  3. · kamo-shared-library

    Market on the engagement, job numbers, dispatch, customer accounts, market-scoped lists

    Service work orders: - createJob stores the chosen market on Engagement.market (it only picked the engagement type before) and the customer account on Engagement.account - every new job gets a person-readable number (WO-00001…), so no screen falls back to the uid - JobView carries marketId / marketTitle; customerName reads Company (Contact) - listJobs(org, status, marketId): one fetched read (engagement, market, customer, visits) instead of up to four lazy loads per row; a market tab also shows jobs that carry no market - setCustomer: file a job under an account or take it off one (engagement follows) - addVisit / updateVisit: schedule a visit, assign a technician (org-checked in SQL), mark en route / no access / cancelled; assigning someone to a CREATED job moves it to ASSIGNED Subscriptions: - createOrder stores the plan's market and the customer member's account on the engagement (a quote's engagement keeps what it has) - SubscriptionOrderDTO and SubscriptionRecordDTO carry marketId, marketTitle, customerAccountUid and customerAccountName - getOrders / getSubscriptions take a marketId (engagement market, else plan market; none stays in) and read the rows with one fetched query - getPlansForMarket: the market filter on plans took a Long and could never parse a market UUID; it is also limited to the caller's org now

  4. · kamo-internal

    Every rental has a renter; cancel, re-date, check out, check in and end; booked dates beside the date picker

    - New Rental Request: the Renter (customer account) is required and pre-filled from ?accountId; ?marketId is sent so the rental is filed under the market. Once an asset is chosen, Already Booked lists its booked dates, names a clash, and Create waits for free dates. No assets: a way to the market's Rental Assets. - Rental request: Change Dates (with Charge By and booked dates), Cancel Request (cancel or decoder, with a reason kept on the request), Confirm Booking asks for a renter first; market and the booking's stage shown. - Booking: Check Out, Check In (late fee suggested from the daily rate when it is overdue, damage fee, condition notes, new total), End Rental (nothing handed over), Change Dates (end only once out), Cancel Booking, Open Request; price breakdown, checked out / returned times, overdue warning. - The renter can be changed, never removed; account saves use the record the server answers instead of reloading. - Pipeline lists ask the server for the market's rentals (by the rental's market); Market column when no market is chosen; bookings listed by stage (Reserved, Checked Out, Returned, Cancelled). - Market Rental Assets: Offered switch (switch an asset off instead of deleting it), translated copy, theme tokens, the server's sentence when an asset in use can't be deleted. The unused PipelineRentalAssetsTab (hard-coded English) is removed. - Help: Rentals and Bookings article (commerce/orders) linked from each rental page.

  5. · kamo-internal

    Market-filtered lists, line items, approve/reject/withdraw, send/receive/close/cancel, and a real Vendors list

    - Procurement tab: Purchase Requests / Vendor Orders / Vendors; lists ask the server for the selected market (plus rows with none), show a Market column, and filter/count in plain words (Waiting for Approval, Rejected, Partly Received…); the "every market shows the same list" caption is gone - New / Change Purchase Request: vendor picker (active, this market's first) with New Vendor on the spot, market, lines with live total (or an estimated amount), notes, optional customer account - Record page: who asked and who decided (with photos), status banner, line table with arrived / still to come, history; Approve, Reject (reason shown to the requester), Change, Withdraw; Mark as Sent, Record Delivery (per line or everything), Close Order, Cancel Order — each confirmed - Vendors: contact person, email and phone through EmailAddress/PhoneNumber, website, notes, market; Active / Inactive with counts; deactivate instead of delete; ids stay strings - Help: "Buying from Your Vendors" help center article, linked from the form and the record page

  6. · SecurityService

    ProcurementController — market-filtered lists, change/reject/withdraw a request, send/receive/close/cancel a vendor order, records returned from every change

    - purchase requests and vendor orders move out of POSController into ProcurementController (MANAGE_PROCUREMENT to buy and run orders, APPROVE_PURCHASE_REQUESTS to approve or reject) - PUT …/account and …/market answer with the updated record - ProcurementNotifier: a new request tells everyone who can approve it; a decision tells the requester - vendor create/edit/deactivate opens to MANAGE_PROCUREMENT (MANAGE_SUBSCRIPTION_SETTINGS kept)

  7. · kamo-shared-library

    Market, lines, approval decisions, and the vendor order lifecycle (send, receive, close, cancel)

    ProcurementService owns purchase requests and vendor orders: - the engagement carries the market (chosen Procurement market, else the vendor's); lists filter by market plus rows with none; marketId/marketTitle on both DTOs; PUT market/account return the record - lines (description, quantity, unit cost, received) in the record payload; the total is their sum - reject (outcome REJECTED + reason) and withdraw (CANCELLED) a waiting request; requester and decider recorded; the request is SUBMITTED on create - vendor order: mark sent, receive in parts or whole, close (FULFILLED), cancel before anything arrived (VOIDED); derived stage on the DTO, never stored - EngagementLifecycle: all commitments voided -> CANCELLED, all ended -> FULFILLED - one-query lists (fetch-joined engagement/account/market, vendors and orders batched) - vendors: contact name, email, phone, website, notes, market, active flag (deactivate, never delete) - indexes on org_id / intent_id / commitment_id of the intent and commitment tables (applied by hand)

  8. · KBService

    Turn Antivirus scanning on in kbservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  9. · DocsService

    Turn Antivirus scanning on in docsservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  10. · MediaService

    Turn Antivirus scanning on in mediaservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  11. · ConversionService

    Turn Antivirus scanning on in conversionservice

    KamoAntivirus is Ready (StatefulSet kamowsantivirus 2/2, /readyz ready, release 2026.11.08.0101); a direct scan from the cluster returns MALICIOUS/TEST_FILE for the standard test string and CLEAN for plain text with this service's internal-auth secret.

  12. · DocsService

    Assignment rows say what the member still owes

    Adds signableOutstandingCount (signable documents not yet signed) and uploadsOwedCount (required requests with no live file) to each assignment row, so the member's list can label its button by what is actually owed instead of "Continue Signing" on a Quick Request with nothing to sign. Three grouped queries per page; LegalAssignmentCountsParseTest parses them against the real mapping.

  13. · KBService

    KBService checks knowledge-base resources and looks up the verdict before signing

    - Resource upload writes the raw kb bucket, so it goes through AntivirusUploadGuard (KB) before anything touches storage: 422 ANTIVIRUS_BLOCKED (nothing stored) / 503 ANTIVIRUS_UNAVAILABLE, answered in that shape by the controller. - The content hashes ride on the object as user metadata (kamo-blake3 / kamo-sha3), so every presign site (single URL, batch, library tiles, platform help) looks up the content's global verdict first: a locked or still-checking resource is never signed (423 on the single URL, no URL for a tile). Resources stored before this carry no hashes and are not judged here. - ConfigMap kamo.antivirus.* (enabled: false until KamoAntivirus is Ready); ANTIVIRUS_INTERNAL_AUTH_SECRET from mlos-internal-auth.

  14. · DaemonService

    주간 보호 보고서(시간당, 조직 현지 월요일 08:00) 및 발생 관찰(15분)을 선택합니다

  15. · SecurityService

    The Antivirus API, platform controls and scheduled endpoints; gate SecurityService's own file paths

    /api/antivirus/** (and the /api/security/antivirus twin the console proxy tries first): overview, detections, settings (audited ANTIVIRUS_POLICY_CHANGE), false alarms, verdict lookup. Platform (MANAGE_PLATFORM_ANTIVIRUS): status, signature refresh/rollback, false-alarm review (ALLOWLIST unlocks everywhere + tells people), allowlist, drill, outbreaks. Internal: weekly Protection Report and outbreak check for DaemonService. Raw uploads (avatars incl. SVG, backgrounds, logos, lead imports, disclosures, rate sheets) are screened before anything is written; ImageService paths keep their lib gate and now answer 422/423/503 instead of a 500; vault, loan, patient and picture-frame reads apply the read gate. kamo.antivirus.enabled stays false until the kamowsantivirus StatefulSet is Ready.

  16. · APIService

    Route /api/antivirus/** to SecurityService and seal its internal subtree

  17. · KlusterServices

    KamoAntivirus mail filter first on inbound smtpd (port 25), tempfail when unreachable

    smtpd_milters = { **************** default_action=tempfail }, then rspamd unchanged. Harmful attachments are replaced by a small placeholder part and the message is still delivered; if the filter cannot be reached the sender gets a 4xx and retries. non_smtpd_milters and submission (587) keep rspamd only; postfix-bulk untouched. Milter verified live before this push (milter-protocol client in cluster: test file replaced with the placeholder, clean CSV kept, forged marker stripped).

  18. · EmailService

    Antivirus for mail — read gate on every mailbox, milter placeholders, send screening, detections

    - Read: every attachment/inline part from any mailbox (Kamo Mail, IMAP providers, Graph; personal and shared routes) is hashed in memory (temp file past 8 MiB, deleted on close), its global verdict looked up and, when unknown, checked by KamoAntivirus (origin MAIL_READ, bytes_stored=false). Harmful = 423 ANTIVIRUS_BLOCKED, not checkable = 423 ANTIVIRUS_CHECKING; reason/family also as X-Kamo-Antivirus-* headers. The SI mail tools read through these routes, so they are gated too. Listing never scans: AttachmentInfo carries **************** only for parts already hashed. - Milter placeholders (X-Kamo-Antivirus-Removed) list under the ORIGINAL name, removed=true, locked; never served or forwarded. X-Kamo-Antivirus message header exposed as EmailMessage.antivirus for the banner. - Send/draft (decision 11): device uploads and pasted images go through AntivirusGate.scanUpload (stored verdicts reused, never rescanned); a forward's parts get the read check. 422 ANTIVIRUS_BLOCKED with fileName, 503 ANTIVIRUS_UNAVAILABLE. - NATS antivirus.detection.mail (queue group antivirus-mail-detections): recipients resolved to members via mailbox holders, personal aliases, shared mailbox readers and alias domains; recorded per member (MAIL_INBOUND, counterparty = sender) so FILE_BLOCKED / THREAT_ALERT go out per org settings. - Notifications: ANTIVIRUS_THREAT_ALERT -> VIEW_ANTIVIRUS (core app, no feature row needed); FILE_BLOCKED/UNLOCKED belong to no app; catalog order. Preview samples for the 4 Antivirus templates. - configmap kamo.antivirus.* (enabled: kamowsantivirus is Ready). Needs kamo-shared-library b6c41d34 (HashUtils BLAKE3 on bcprov 1.70).

  19. · SecurityService

    Rental steps, market-filtered lists, and a renter that can move but never be cleared

    - GET /rental-requests and /bookings take ?marketId (the caller's own market) and filter by the engagement's market. - POST /rental-requests/{id}/cancel, PUT /rental-requests/{id}/dates, POST /bookings/{id}/check-out | return | cancel, PUT /bookings/{id}/dates (MANAGE_RENTALS), each answering the updated record; a refusal is a 400 with a sentence. - GET /rental-assets/{id}/bookings: the dates an asset is already booked for. - PUT /rental-requests/{id}/account and /bookings/{id}/account refuse a blank account and answer the updated record instead of a bare message. - DELETE /rental-assets/{id} answers 409 with a sentence when the asset has rentals.

  20. · kamo-internal

    Orders tab filters by the organization's own markets

    Chips and row labels were per line of business, named after its first market, so two Retail markets collapsed into one. Each row now shows its own market (from the server); an older record with no market goes to the only market of its line when there is one, else to a "<Line> — No Market" group. A remembered filter whose market is gone falls back to All.

  21. · DocsService

    DocsService는 어디서나 잠긴 문서를 거부하고 편집기 저장을 확인합니다

    - WOPI PutFile은 원시 MinIO을 쓰므로 저장은 먼저 AntivirusUploadGuard를 통해 이루어집니다 harmful save 아무것도 쓰지 않고, 문서의 마지막 좋은 내용을 유지하고 편집자에게 답변합니다 422 ANTIVIRUS_BLOCKED (503 ANTIVIRUS_UNAVAILABLE 다시 시도); 깨끗한 저장이 표시됨 GetFile 은 423 로 잠긴/검사 중인 콘텐츠를 거부합니다. - 이미징 /다운로드, /스트림, 변환 된 PDF 및 페이지 썸네일 전에 읽기 게이트를 호출 모든 바이트 : 423 ANTIVIRUS_BLOCKED / ANTIVIRUS_CHECKING. 주의 내용을 통과, 그래서 그것의 PDF 대량 내보내기는 다른 예외와 마찬가지로 잠긴 문서를 삭제합니다. - 버전 다운로드/pdf/썸네일은 버전의 내용을 판단합니다. - 경력 이력서는 지원자 및 응용 프로그램과 함께 CAREERS로 확인됩니다; 경력 컨트롤러는 500 대신 플랫폼 모양으로 바이러스 백신 거부에 응답합니다. - 법적 : 자신의 422/503에 지도 거부를 업로드, 보류 업로드는 다시 시도하도록 요청합니다 (그 PDF 렌더링은 검사되지 않은 바이트에서 만들어질 것입니다), 실행 패키지 및 요청 샘플은 바인더 사진 앨범은 잠긴 사진을 꺼냅니다. - 문서 목록/메타데이터 행은 scanStatus / scanFamily / scanOutcome을 수행합니다. - ConfigMap kamo.antivirus.* (활성화: KamoAntivirus이 준비 될 때까지 false); MLOS-내부-인증에서 ANTIVIRUS_INTERNAL_AUTH_SECRET.

  22. · SecurityService

    각 Orders 행은 자체 시장 이름을 갖습니다

    행은 그들의 참여에서 marketId / marketTitle을 수행합니다 (1 쿼리에 의해 참여 uid), 그래서 두 개의 소매 시장을 가진 조직은 어느 첫 번째 시장의 이름 아래 둘 대신 하나의 주문이 왔다. 시장이 추적되기 전에 만든 기록은 무효로 유지됩니다.

  23. · KlusterServices

    바이러스 백신 경고(스캐너 다운, 시그니처 오래된, 미러 게이트 실패, p95, 감지 스파이크, 백로그 유지)

    수동으로 적용(모니터링/은 CI 타겟이 아닙니다).

  24. · kamo-shared-library

    A rental needs a renter; market on the engagement; cancel, re-date, check out, return and cancel a booking

    - createRentalRequest refuses a missing or foreign customer account, records the market (the asset's, else the chosen one) on the engagement, and validates dates and the rate type. Confirm refuses a request with no account. - setRentalRequestAccount / setBookingAccount move the renter to another account and never clear it; both answer the updated record. - Requests: cancel/decoder (IntentStatus.CANCELLED, reason kept) and new dates (with the availability check). Bookings: check out (the booking's FulfillmentOrder IN_PROGRESS), return or end (COMPLETED; CommitmentStatus.FULFILLED; late and damage fees added to the total; condition notes), cancel (VOIDED, before it goes out), and new dates (only the end while out), each checking the asset's other bookings under a row lock on the asset so two confirms cannot double-book. - EngagementLifecycle: a VOIDED commitment commits nothing; all voided and no order is CANCELLED. - A returned booking no longer holds its dates. The asset's held dates are readable (findRentalAssetBookings) for date pickers. - DTOs: marketId/marketTitle on requests, bookings and assets; booking -> rentalRequestUid, rateType, checkedOutAt, returnedAt, fees, notes, cancel reason; request -> cancelReason, bookingStatus. Lists filter by market and load assets, bookings and hand-overs in one query each instead of per row. - Rental assets: description column; market validated as the org's Rental market and movable on update; negative rates refused; duplicate codes refused on update; an asset with rentals on record cannot be deleted (switch it off instead). - Indexes: **************** by engagement, commitments by rental asset, fulfillments by commitment, rental assets by org and market (applied by hand).

  25. · kamo-internal

    시장 — 조직의 자체 시장, 그들의 자신의 이름으로

    "상업"은 사라졌다. 시장은 회원이 정의하는 것입니다 (제목 + 설명); 그것의 사업의 라인은 그것의 종류만 이다. - 네비게이션 옵션은 시장입니다. 하나의 시장은 그 시장입니다, 그것의 타이틀 (이전과 같이); 두 개 이상의 경우 각각의 행이 있는 메뉴가 열립니다 시장 — 제목, 아래에 설명, 라인 아이콘 사업의 — 각 열기 시장의 탭. 하나의 캐시 된 목록 피드 시장 변화에 따라 새로 고침 된 두 네비게이션, 런치 패드 및 라벨. - 네비게이션 메뉴 행은 선택적 설명 (팝오버, 레일, 상단 막대)을 취합니다. - 시장 양식의 유형 상자는 "사업 분야"; 각 선택은 말한다 시장에 무엇을 제공하고, 잠겨있는 하나는 필요한 앱 이름 이름과 설명 도우미가 무엇인지 설명합니다 회원은 시장 메뉴를 참조하십시오. - ACCESS_COMMERCE는 "액세스 시장"을 읽습니다. 대출 페이지는 다음을 가리킵니다 설정 → 사업의 라인.

  26. · MediaService

    MediaService는 바이러스 백신으로 첨부 파일을 확인하고 읽을 때마다 잠긴 파일을 거부합니다

    - 채팅 첨부 파일 (회원 채팅, 웹 채팅 방문자 공개), 시스템 버그 파일, 성장 허브 이미지 storeContentAddressed 내에서 해당 컨텍스트(회원, 대화)와 함께 확인됩니다. Canva 클라이언트가 플랫폼 형태 (422)를 통해 출력을 받을 때 거부가 발생합니다 ANTIVIRUS_BLOCKED {family} / 503 ANTIVIRUS_UNAVAILABLE) 대신 500으로 포장됩니다. - 회의 배경 (raw MinIO, 공개 버킷)은 먼저 AntivirusUploadGuard를 통해 이동합니다. - /attachments/link (dedup by hash) 콘텐츠 거부 바이러스 백신 잠겨 (422); 보유 파일이 될 수 있습니다 링크되고 체크될 때까지 읽을 수 없습니다. - 첨부 파일은 업로드 응답, 라이브 메시지에 스캔 {상태, 가족, 결과} 수행 프레임과 역사; 보유하는 동안 PENDING. - ImagingProxyController (원본 및 미리보기), 방문자 다운로드, 시스템 버그 파일, Growth Hub 이미지, 자료 및 Canva 자료 읽기는 읽기 게이트를 호출합니다 ANTIVIRUS_BLOCKED / ANTIVIRUS_CHECKING, 누락 된 콘텐츠 410 전에 확인되므로 개최 프록시는 이제 콘텐츠 상태 이전에 회원 자격을 검사합니다. - ConfigMap kamo.antivirus.* (활성화: KamoAntivirus이 준비 될 때까지 false); MLOS-내부-인증에서 ANTIVIRUS_INTERNAL_AUTH_SECRET.

  27. · ConversionService

    ConversionService는 바이러스 백신으로 업로드를 확인하고, 보유 파일을 완료하고, 새로운 서명을 다시 확인합니다

    서비스 중인 clamd 클라이언트(malware/ package, UploadScanGuard, QuarantineStore, 공유 라이브러리 안티바이러스와 retro-scan) : - /upload, /replace, /templates/upload 는 ImageService 내부에서 어떤 행이나 객체가 쓰여집니다(HOLD 허용); 거부는 플랫폼 형태를 사용합니다: 422 ANTIVIRUS_BLOCKED {family}, 503 ANTIVIRUS_UNAVAILABLE, 503 HASH_MISMATCH. MALWARE_DETECTED가 사라졌으며 더 이상 사용할 수 없습니다 서명 이름이 반환되지 않습니다. 응답은 scan {status, family, outcome}을 담고 있습니다 파일은 PENDING 이며 저장되면 변환됩니다. 파이프라인은 '스캔' 단계를 발생시킵니다. - /register-existing (참조에 의한 dedup) 는 잠긴 바이러스 백신 콘텐츠를 거부합니다 (422). - 사운드 효과 (raw MinIO)는 AntivirusUploadGuard를 통해 이동합니다 (보류되지 않음, 다운되면 503). - QuarantineStore가 더 이상 존재하지 않으므로 격리 버킷에 아무것도 기록되지 않습니다 거기에 손을 댄다. - antivirus.hold.verdict (큐 안티바이러스 보유 완료기) -> AntivirusHoldCompleter, 다음 출시된 문서에 대한 일반적인 변환; 재배달에 대한 저장 장애 naks. - antivirus.signatures.promoted (큐 안티바이러스 재검사) -> AntivirusRecheckService: 매 바이트가 저장된 플래그된 해시 (잠금 해제 + 알림 + AUTO_CLEARED 보고서) 및 CLEAN 지난 14일 동안 처음 본 콘텐츠(LOCKED_LATER + 알림), MinIO에서 스트리밍, 한 번에 하나씩, 억제됩니다. 가입자는 ANTIVIRUS 스트림이 존재할 때까지 다시 시도합니다. - ConfigMap: kamo.antivirus.* (활성화됨: KamoAntivirus이 준비될 때까지 false); MLOS-내부-인증에서 ANTIVIRUS_INTERNAL_AUTH_SECRET.

  28. · kamo-shared-library

    참여는 회원 정의 시장에 속합니다

    commerce_engagements.market_id (수동으로 적용, commerce_markets에 FK, 소매 주문, 서비스 작업, 임대 및 조달 그들은 그들 자신의 시장 열이 없습니다; 그들은 그들의 고객 계정을 읽는 것과 동일한 방식으로 참여도를 높입니다.

  29. · kamo-internal

    바이러스 백신 UI — 파일이 나타나는 모든 곳, 바이러스 백신 센터, 플랫폼 탭, 경고 및 도움말에 보호 봉인

    디자인 키트(앱/구성 요소/안티바이러스): 다섯 개의 애니메이션 얼굴이 있는 ProtectionSeal (검사, 보호, 주의, 차단, 검사할 수 없음; brand + --av-* 토큰, 감소된 동작 존중), BlockedFileCard / LockedAttachment / LockedOverlay, 안전한 복사본을 열기 위한 주의 배너, MessageAntivirusBanner, ShieldClip, FalseAlarmDialog ("이것은 실수라고 생각합니다"), AntivirusNotReady. @kamo/antivirus-core 0.1.0의 로직 (세일 상태, 이유 파서 허용) 안티 바이러스 블록 / 악성 코드 검출 / 안티 바이러스 검사 / 안티 바이러스 사용할 수 없습니다 / 스캔 할 수 없습니다). 표면: 메일 읽기 창 (봉인, 원래 이름 아래에 잠긴 제거 부품, 메시지 배너, 인라인 이미지를 유지, 다운로드 모두 그들을 건너 뛰고, 목록 행 방패 클립, 본문 캐시 v2), 작곡가/채팅/SMS/SI 트레이 (체크 + 차단 상태), 수신자를위한 채팅 거품, 문서 (체크 무대, 봉인, 잠긴 작업, 주의 게이트), 그리고 거부 토스트는 모든 업로드 (KB, 아바타, 경력, 시스템 버그, 소리, 계정/환자/응용 프로그램 문서, 로고). ****************에 있는 안티바이러스 센터 (VIEW_ANTIVIRUS; 정책 필요성 MANAGE_ANTIVIRUS_POLICY): 보호 구체, 카운트 업 KPI, 추세/원산지/가족 차트, 라이브 위협 타임라인, 도움말이 있는 정책 스위치, 거짓 알람. 플랫폼 탭 (MANAGE_PLATFORM_ANTIVIRUS): 스캐너 상태, 새로 고침/롤백 릴리스, 검토 대기열, 허용 목록, 발생, 안전 훈련. 세 가지 알림 종류, 바이러스 백신 가이드 투어, /api/antivirus BFF, ServiceType ANTIVIRUS(41)에 대한 미러, 권리 698-700 및 MANAGE_PLATFORM_ANTIVIRUS(공유 라이브러리 332f7275) 및 7개의 도움말 센터 문서. 보호 홈 위젯 구성 요소가 빌드되어 있지만 등록되지 않았습니다 ANTIVIRUS_WIDGET 공유 라이브러리가 아직 가지고 있지 않은 오른쪽 블록.

  30. · KlusterServices

    Svc_antivirus 로그인 + ANTIVIRUS 스트림; 변환/이메일은 안티바이러스를 소비할 수 있습니다.>

    - svc_antivirus : STREAM.INFO/CREATE ANTIVIRUS, 안티바이러스를 게시합니다.> 및 rt.org.>, 구독 안티 바이러스.> 및 _INBOX.> (비밀 kamo/nats-사용자-안티 바이러스, SECRETS.md). - svc_conversion : ANTIVIRUS 소비자 API (판결 보유, 승진에 다시 확인), publish/subscribe antivirus.>, publish rt.org.> (기록된 판결은 UI를 새로 고침). - svc_email: ANTIVIRUS 소비자 API (메일 필터 감지), 안티바이러스.>. - stream-bootstrap 작업 제공 ANTIVIRUS (R1, 14d) 소비자가 먼저 바인딩할 수 있도록 합니다. 라이브 서버에 대해 nats-server -t 로 검증되었습니다.

당신의 우주는 기다리고 있습니다.

몇 분 안에 무료로 시작하세요. 준비가 되면 언제든지 제품을 추가할 수 있습니다.

영원히 무료 - 신용 카드 필요 없음