1import{a as Y}from"./chunk-B23VMXCS.js";import{a as Q}from"./chunk-DMG2QZD3.js";import{a as X}from"./chunk-ZQUTHZTU.js";import{a as D,c as N,d as W,e as O,f as B,g as q,h as H,k as j,l as z,m as U,n as G,o as J,q as K}from"./chunk-6QV62N6E.js";import"./chunk-SGWS245Z.js";import{e as P}from"./chunk-5JT2KAKO.js";import"./chunk-MPN3YM5U.js";import"./chunk-3AIRW276.js";import{Ga as E,N as M,S as c,Sa as f,T as p,Ta as S,Ua as R,Va as k,Wa as b,Xa as e,Ya as i,Za as u,da as g,db as y,dc as L,eb as _,fb as m,lb as A,mb as F,nb as o,ob as h,pb as w,sb as x,ta as s,tb as v,ub as C,vb as V,xb as T,yb as I}from"./chunk-PGWAQGBE.js";var $=()=>["/admin/licenses"],ee=d=>({search:d}),te=(d,a)=>a.id;function ie(d,a){if(d&1){let t=y();e(0,"button",27),_("click",function(){c(t);let n=m();return p(n.clearLicenseFilter())}),u(1,"i",28),i()}}function ne(d,a){d&1&&(e(0,"div",25),u(1,"div",29),e(2,"div",30),o(3,"Loading activations..."),i()())}function oe(d,a){d&1&&(e(0,"div",25),u(1,"i",31),e(2,"div",32),o(3,"No machine activations found"),i(),e(4,"div",33),o(5,"No client machines have registered under the selected criteria."),i()())}function ae(d,a){if(d&1){let t=y();e(0,"button",51),_("click",function(){c(t);let n=m().$implicit,l=m(2);return p(l.toggleBlock(n))}),u(1,"i",52),i()}}function re(d,a){if(d&1){let t=y();e(0,"button",53),_("click",function(){c(t);let n=m().$implicit,l=m(2);return p(l.toggleBlock(n))}),u(1,"i",54),i()}}function se(d,a){if(d&1){let t=y();e(0,"tr")(1,"td")(2,"div",38),u(3,"i",39),e(4,"span"),o(5),i()(),e(6,"div",40),o(7),i()(),e(8,"td")(9,"span",41),o(10),i()(),e(11,"td")(12,"a",42),o(13),i()(),e(14,"td")(15,"div",43),o(16),i(),e(17,"div",44),o(18),i()(),e(19,"td")(20,"span",45),o(21),i()(),e(22,"td")(23,"div",43),o(24),i(),e(25,"div",40),o(26),i()(),e(27,"td")(28,"span"),o(29),i()(),e(30,"td",36)(31,"div",46),f(32,ae,2,0,"button",47)(33,re,2,0,"button",48),e(34,"button",49),_("click",function(){let n=c(t).$implicit,l=m(2);return p(l.confirmDelete(n))}),u(35,"i",50),i()()()()}if(d&2){let t=a.$implicit;s(5),h(t.machine_name),s(2),w("ID: #",t.id),s(3),h(t.machine_hash),s(2),b("routerLink",T(16,$))("queryParams",I(17,ee,t.license_key)),s(),w(" ",t.license_key||"License #"+t.license_id," "),s(3),h(t.os_info||"Windows Server"),s(2),h(t.product_version||"v3.2.1"),s(3),h(t.ip_address||"127.0.0.1"),s(3),h(t.last_seen_at||"Just now"),s(2),w("Registered: ",t.registered_at),s(2),F(V("status-pill status-",t.status)),s(),h(t.status),s(3),S(t.status==="active"?32:33)}}function le(d,a){if(d&1){let t=y();e(0,"div",37)(1,"div",55),o(2," Showing page "),e(3,"span",56),o(4),i(),o(5," of "),e(6,"span",56),o(7),i(),o(8),i(),e(9,"div",57)(10,"button",58),_("click",function(){let n=c(t),l=m(2);return p(l.goToPage(n.page-1))}),u(11,"i",59),o(12," Previous "),i(),e(13,"button",58),_("click",function(){let n=c(t),l=m(2);return p(l.goToPage(n.page+1))}),o(14," Next "),u(15,"i",60),i()()()}if(d&2){let t=a;s(4),h(t.page),s(3),h(t.totalPages),s(),w(" (",t.total," total registered servers) "),s(2),b("disabled",t.page<=1),s(3),b("disabled",t.page>=t.totalPages)}}function de(d,a){if(d&1&&(e(0,"div",34)(1,"table",35)(2,"thead")(3,"tr")(4,"th"),o(5,"Machine / Server"),i(),e(6,"th"),o(7,"Domain / Hash"),i(),e(8,"th"),o(9,"License Key"),i(),e(10,"th"),o(11,"OS & Version"),i(),e(12,"th"),o(13,"IP Address"),i(),e(14,"th"),o(15,"Last Heartbeat"),i(),e(16,"th"),o(17,"Status"),i(),e(18,"th",36),o(19,"Actions"),i()()(),e(20,"tbody"),R(21,se,36,19,"tr",null,te),i()()(),f(23,le,16,5,"div",37)),d&2){let t,r=m();s(21),k(r.registrations()),s(2),S((t=r.pagination())?23:-1,t)}}function me(d,a){d&1&&u(0,"span",83)}function ce(d,a){if(d&1){let t=y();e(0,"div",61),_("click",function(){c(t);let n=m();return p(n.closeCreateModal())}),i(),e(1,"div",62)(2,"div",63)(3,"h5",64),u(4,"i",65),o(5," Manual Machine Activation "),i(),e(6,"button",66),_("click",function(){c(t);let n=m();return p(n.closeCreateModal())}),i()(),e(7,"div",67)(8,"form",68),_("ngSubmit",function(){c(t);let n=m();return p(n.submitCreate())}),e(9,"div",69)(10,"div",70)(11,"label",71),o(12,"License ID *"),i(),e(13,"input",72),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.license_id,n)||(l.createForm.license_id=n),p(n)}),i()(),e(14,"div",70)(15,"label",71),o(16,"Initial Status"),i(),e(17,"select",73),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.status,n)||(l.createForm.status=n),p(n)}),e(18,"option",20),o(19,"Active"),i(),e(20,"option",21),o(21,"Blocked"),i()()()(),e(22,"div",74)(23,"label",71),o(24,"Machine Name *"),i(),e(25,"input",75),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.machine_name,n)||(l.createForm.machine_name=n),p(n)}),i()(),e(26,"div",74)(27,"label",71),o(28,"Machine Hash / AD Domain *"),i(),e(29,"input",76),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.machine_hash,n)||(l.createForm.machine_hash=n),p(n)}),i()(),e(30,"div",69)(31,"div",70)(32,"label",71),o(33,"OS Info"),i(),e(34,"input",77),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.os_info,n)||(l.createForm.os_info=n),p(n)}),i()(),e(35,"div",70)(36,"label",71),o(37,"Product Version"),i(),e(38,"input",78),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.product_version,n)||(l.createForm.product_version=n),p(n)}),i()()(),e(39,"div",74)(40,"label",71),o(41,"IP Address"),i(),e(42,"input",79),C("ngModelChange",function(n){c(t);let l=m();return v(l.createForm.ip_address,n)||(l.createForm.ip_address=n),p(n)}),i()(),e(43,"div",80)(44,"button",81),_("click",function(){c(t);let n=m();return p(n.closeCreateModal())}),o(45,"Cancel"),i(),e(46,"button",82),f(47,me,1,0,"span",83),o(48," Activate Machine "),i()()()()()}if(d&2){let t=m();s(13),x("ngModel",t.createForm.license_id),s(4),x("ngModel",t.createForm.status),s(8),x("ngModel",t.createForm.machine_name),s(4),x("ngModel",t.createForm.machine_hash),s(5),x("ngModel",t.createForm.os_info),s(4),x("ngModel",t.createForm.product_version),s(4),x("ngModel",t.createForm.ip_address),s(4),b("disabled",t.isSubmitting()),s(),S(t.isSubmitting()?47:-1)}}var Z=class d{api=M(X);toast=M(Q);registrations=g([]);pagination=g(null);licenseIdFilter=g("");selectedStatus=g("");currentPage=g(1);isLoading=g(!0);isSubmitting=g(!1);createModalOpen=g(!1);deleteModalOpen=g(!1);selectedRegistration=g(null);createForm={license_id:1,machine_name:"",machine_hash:"",os_info:"Windows Server 2025",product_version:"v3.2.1",ip_address:"192.168.1.100",status:"active"};ngOnInit(){this.loadRegistrations()}loadRegistrations(){this.isLoading.set(!0),this.api.getRegistrations({licenseId:this.licenseIdFilter().trim()?Number(this.licenseIdFilter()):void 0,status:this.selectedStatus()||void 0,page:this.currentPage(),limit:20}).subscribe({next:a=>{this.isLoading.set(!1),this.registrations.set(a.items||[]),this.pagination.set(a.pagination||null)},error:a=>{this.isLoading.set(!1),this.toast.error(a?.error?.error||"Failed to fetch activations")}})}onLicenseIdInput(a){let t=a.target.value;this.licenseIdFilter.set(t),this.currentPage.set(1),this.loadRegistrations()}clearLicenseFilter(){this.licenseIdFilter.set(""),this.currentPage.set(1),this.loadRegistrations()}onStatusChange(a){let t=a.target.value;this.selectedStatus.set(t),this.currentPage.set(1),this.loadRegistrations()}
1goToPage(a){this.currentPage.set(a),this.loadRegistrations()}toggleBlock(a){let t=a.status==="active"?"blocked":"active";this.api.updateRegistration(a.id,{status:t}).subscribe({next:()=>{this.toast.success(`Machine "${a.machine_name}" marked as ${t}.`,"Status Updated"),this.loadRegistrations()},error:r=>{this.toast.error(r?.error?.error||"Failed to update machine status")}})}openCreateModal(){this.createForm={license_id:1,machine_name:"",machine_hash:"",os_info:"Windows Server 2025",product_version:"v3.2.1",ip_address:"192.168.1.100",status:"active"},this.createModalOpen.set(!0)}closeCreateModal(){this.createModalOpen.set(!1)}submitCreate(){if(!this.createForm.machine_name.trim()||!this.createForm.machine_hash.trim()){this.toast.warning("Machine Name and Hash are required.","Validation");return}this.isSubmitting.set(!0),this.api.createRegistration({license_id:Number(this.createForm.license_id),machine_name:this.createForm.machine_name.trim(),machine_hash:this.createForm.machine_hash.trim(),os_info:this.createForm.os_info,product_version:this.createForm.product_version,ip_address:this.createForm.ip_address,status:this.createForm.status}).subscribe({next:a=>{this.isSubmitting.set(!1),this.toast.success(`Machine "${a.machine_name}" activated successfully.`,"Machine Activated"),this.closeCreateModal(),this.loadRegistrations()},error:a=>{this.isSubmitting.set(!1),this.toast.error(a?.error?.error||"Failed to activate machine")}})}confirmDelete(a){this.selectedRegistration.set(a),this.deleteModalOpen.set(!0)}closeDeleteModal(){this.deleteModalOpen.set(!1),this.selectedRegistration.set(null)}submitDelete(){let a=this.selectedRegistration();a&&(this.isSubmitting.set(!0),this.api.deleteRegistration(a.id).subscribe({next:()=>{this.isSubmitting.set(!1),this.toast.success(`Machine seat for "${a.machine_name}" released.`,"Seat Released"),this.closeDeleteModal(),this.loadRegistrations()},error:t=>{this.isSubmitting.set(!1),this.toast.error(t?.error?.error||"Failed to release seat")}}))}static \u0275fac=function(t){return new(t||d)};static \u0275cmp=E({type:d,selectors:[["app-admin-registrations"]],decls:44,vars:12,consts:[[1,"admin-page-header"],[1,"admin-title"],[1,"admin-subtitle"],[1,"d-flex","align-items-center","gap-2","mt-2","mt-md-0"],[1,"btn","btn-sm","btn-outline-light","d-flex","align-items-center","gap-2","px-3",3,"click","disabled"],[1,"bi","bi-arrow-clockwise"],[1,"btn","btn-sm","btn-primary","d-flex","align-items-center","gap-2","px-3",3,"click"],[1,"bi","bi-plus-circle"],[1,"admin-card","py-3"],[1,"row","g-3","align-items-center"],[1,"col-md-6"],[1,"input-group","input-group-sm"],[1,"input-group-text","bg-dark","border-secondary","text-muted"],[1,"bi","bi-search"],["type","number","placeholder","Filter by License ID (e.g. 3)...",1,"form-control","bg-dark","border-secondary","text-white",3,"input","value"],[1,"btn","btn-outline-secondary","border-secondary","text-muted"],[1,"d-flex","align-items-center","gap-2"],[1,"small","text-muted","mb-0","flex-shrink-0"],[1,"form-select","form-select-sm","bg-dark","border-secondary","text-white",3,"change","value"],["value",""],["value","active"],["value","blocked"],["value","revoked"],["value","expired"],[1,"admin-card"],[1,"text-center","py-5"],["title","Release Machine Seat","confirmText","Release Seat",3,"confirmed","cancelled","isOpen","message","isDanger","isLoading"],[1,"btn","btn-outline-secondary","border-secondary","text-muted",3,"click"],[1,"bi","bi-x"],["role","status",1,"spinner-border","text-primary","spinner-border-sm"],[1,"text-muted","small","mt-2"],[1,"bi","bi-pc-display","fs-1","text-muted"],[1,"text-white","fw-bold","mt-2"],[1,"text-muted","small"],[1,"admin-table-container"],[1,"admin-table"],[1,"text-end"],[1,"d-flex","align-items-center","justify-content-between","pt-3","mt-2","border-top","border-secondary-subtle"],[1,"fw-bold","text-white","d-flex","align-items-center","gap-2"],[1,"bi","bi-hdd-network","text-info"],[1,"text-muted",2,"font-size","0.7rem"],[1,"mono-code",2,"font-size","0.75rem"],[1,"mono-code","text-decoration-none",3,"routerLink","queryParams"],[1,"small","text-white"],[1,"text-muted",2,"font-size","0.72rem"],[1,"small","text-secondary"],[1,"btn-group","btn-group-sm"],["t
1itle","Block Machine",1,"btn","btn-outline-warning","py-1","px-2"],["title","Unblock Machine",1,"btn","btn-outline-success","py-1","px-2"],["title","Release Seat",1,"btn","btn-outline-danger","py-1","px-2",3,"click"],[1,"bi","bi-eject"],["title","Block Machine",1,"btn","btn-outline-warning","py-1","px-2",3,"click"],[1,"bi","bi-slash-circle"],["title","Unblock Machine",1,"btn","btn-outline-success","py-1","px-2",3,"click"],[1,"bi","bi-check-circle"],[1,"small","text-muted"],[1,"text-white","fw-bold"],[1,"d-flex","gap-2"],[1,"btn","btn-sm","btn-outline-secondary","px-3",3,"click","disabled"],[1,"bi","bi-chevron-left","me-1"],[1,"bi","bi-chevron-right","ms-1"],[1,"admin-modal-backdrop",3,"click"],[1,"admin-modal-dialog",2,"max-width","540px"],[1,"admin-modal-header"],[1,"admin-card-title"],[1,"bi","bi-plus-circle","text-primary"],["type","button",1,"btn-close","btn-close-white",3,"click"],[1,"admin-modal-body"],[3,"ngSubmit"],[1,"row","g-3","mb-3"],[1,"col-sm-6"],[1,"form-label","small","text-muted"],["type","number","min","1","name","license_id","required","",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],["name","status",1,"form-select","form-select-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],[1,"mb-3"],["type","text","name","machine_name","placeholder","e.g. ad-admin-dc-01","required","",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],["type","text","name","machine_hash","placeholder","e.g. corp.adsysnet.com","required","",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white","mono-code",3,"ngModelChange","ngModel"],["type","text","name","os_info","placeholder","Windows Server 2025",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],["type","text","name","product_version","placeholder","v3.2.1",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],["type","text","name","ip_address","placeholder","192.168.1.100",1,"form-control","form-control-sm","bg-dark","border-secondary","text-white",3,"ngModelChange","ngModel"],[1,"admin-modal-footer","px-0","pb-0"],["type","button",1,"btn","btn-sm","btn-secondary","px-3",3,"click"],["type","submit",1,"btn","btn-sm","btn-primary","px-3",3,"disabled"],["role","status",1,"spinner-border","spinner-border-sm","me-1"]],template:function(t,r){if(t&1&&(e(0,"div",0)(1,"div")(2,"h1",1),o(3,"Machine Registrations & Seat Allocations"),i(),e(4,"p",2),o(5,"Monitor server nodes, manage machine hardware IDs, block rogue instances, and release seats"),i()(),e(6,"div",3)(7,"button",4),_("click",function(){return r.loadRegistrations()}),u(8,"i",5),e(9,"span"),o(10,"Refresh"),i()(),e(11,"button",6),_("click",function(){return r.openCreateModal()}),u(12,"i",7),e(13,"span"),o(14,"Manual Activation"),i()()()(),e(15,"div",8)(16,"div",9)(17,"div",10)(18,"div",11)(19,"span",12),u(20,"i",13),i(),e(21,"input",14),_("input",function(l){return r.onLicenseIdInput(l)}),i(),f(22,ie,2,0,"button",15),i()(),e(23,"div",10)(24,"div",16)(25,"label",17),o(26,"Activation Status:"),i(),e(27,"select",18),_("change",function(l){return r.onStatusChange(l)}),e(28,"option",19),o(29,"All Statuses"),i(),e(30,"option",20),o(31,"Active (Permitted)"),i(),e(32,"option",21),o(33,"Blocked (Denied)"),i(),e(34,"option",22),o(35,"Revoked"),i(),e(36,"option",23),o(37,"Expired"),i()()()()()(),e(38,"div",24),f(39,ne,4,0,"div",25)(40,oe,6,0,"div",25)(41,de,24,1),i(),f(42,ce,49,9),e(43,"app-confirm-modal",26),_("confirmed",function(){return r.submitDelete()})("cancelled",function(){return r.closeDeleteModal()}),i()),t&2){let n;s(7),b("disabled",r.isLoading()),s(),A("spin-icon",r.isLoading()),s(13),b("value",r.licenseIdFilter()),s(),S(r.licenseIdFilter()?22:-1),s(5),b("value",r.selectedStatus()),s(12),S(r.isLoading()?39:r.registrations().length===0?40:41),s(3),S(r.createModalOpen()?42:-1),s(),b("isOpen",r.deleteModalOpen())("message","Are you sure you want to remove machine registration "+(((n=r.selectedRegistration())==null?null:n.machine_name)||"")+"? This will release the license seat for the customer to register a new server.")("isDanger",!0)("isLoading",r.isSubmitting())}},dependencies:[L,K,q,z,U,D,H,j,N,W,J,G,B,O,P,Y],styles:[".spin-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin 1s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"]})};export{Z as AdminRegistrationsComponent};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.